マシンごとに異なる一意の文字列、つまり「デバイス フィンガープリント」を生成する必要があります。
何が...
- カスタム実装のための可能なアプローチ? (私はいくつかのアイデアを持っていますが、皆さんはおそらくもっと良いものを持っていると思います)
- 既存のソリューション?(商用・非商用問わず可)
マシンごとに異なる一意の文字列、つまり「デバイス フィンガープリント」を生成する必要があります。
何が...
デバイスのフィンガープリントは、多くのエッジケース(ハードウェアのアップグレード、OSのアップグレードなど)をカバーしたい場合や、正常なデバイスのフィンガープリントを偽造するために人々がエネルギーを消費することを心配している場合(つまり、フィンガープリントがあなたに知られ、ソフトウェアの使用権などのいくつかの利点を受け取る)、またはあなたが知らない真新しい指紋を作成する(たとえば、指紋が何らかのブラックリストにあり、ユーザーが新しいデバイスIDを作成したいブラックリストにないデバイス)。
いくつかのものはかなり静的であり、単純なフィンガープリントの合理的な基礎です。MACアドレスはそのカテゴリに最適ですが、変更も非常に簡単です。また、一部のコンピューターには複数のMACアドレス(仮想マシンからのMACを含む)があるため、その複雑さに対処する必要があります。テザー付き携帯電話など、一部のネットワークデバイスは一時的なものです。
CPU情報、BIOSチェックサム、ハードドライブのシリアル番号など、コンピューターの他の側面は偽造が困難です(ただし、不可能ではありません)。ただし、偽造が困難になる傾向があるものも変更される可能性が高くなります。 (BIOSアップグレード、新しいハードドライブ、リムーバブルハードドライブなど)。
また、実際に指紋を生成するコードを慎重に保護することも検討する必要があります。そのコードがハッキングするのが簡単(十分)である場合、ソリューションを打ち負かそうとする誰かが、コンポーネントを収集して評価するコードに、必要なフィンガープリントを直接挿入するだけです。
WMI を使用して、NIC MAC アドレス、HDD シリアル (ボリュームシリアルではない)、CPU ID、および BIOS ID を取得できます。この方法の欠点は、いくつかの理由で一部のマシンではこの情報の一部が利用できないことですが、その 4 つのソースからの情報を組み合わせることができ、少なくとも 1 つが存在しますが、一部のマシンでは WMI が期待どおりに機能せず、何らかのフォールバックが必要です。たとえば、すべてのマシンで確実に機能するものです。ボリュームシリアル番号。
もう 1 つの問題は、WMI を介してこの情報を取得するには管理者権限が必要なことです。WMI を使用してアプリケーションに情報を送信する Windows サービスでこの問題を解決しました。
興味深い WMI クエリの一部を次に示します。
ハードディスクのシリアル番号:
SELECT SerialNumber FROM Win32_PhysicalMedia where SerialNumber <> null
BIOS シリアル:
SELECT SerialNumber FROM Win32_BIOS where SerialNumber <> null
CPUシリアル:
SELECT ProcessorID FROM Win32_Processor
NIC MAC:
SELECT MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True
ところで。Paessler WMI TesterでWMIをテストできます
私が自分のアプリで行うことは、通常、 で見つかったマシン名からハッシュを取得して特別な ID を作成し、Environment
それをアプリの名前のハッシュ値と連結してから、salt を適用することです (おそらく必要ではありませんが、パラノイド) アプリ/マシン コンボの「指紋」を生成します。
一度にマシン上にアプリのコピーが1つしかないため、これは私の状況で機能します。
現在、ほとんどのマシンには MAC アドレスを持つ NIC があります (ネットワークに接続されていない場合、マシンに一意の ID が必要なのは何ですか?)。仮想 mac (VMWare または Virtualbox によって作成されたもの) ではなく、物理 NIC の MAC アドレスを取得していることを確認してください。MAC アドレスを列挙するときに常に同じ MAC アドレスを取得できるように、MAC の送信元デバイスの名前を保存したい場合があります。また、MAC アドレスを偽造することは常に可能であるため、セキュリティのためにこれを使用しないでください。比較的一意の識別子を提供するだけです。
必要なもののいくつかは、問題のシステムに対する可視性に依存する場合があります。たとえば、デバイス自体に問い合わせることを防ぐ個人用および/またはネットワークファイアウォールとVLANがある場合があります。ネットワークインフラストラクチャ内のデバイス(MACアドレス情報用のスイッチとIPアドレス用のルーター)に対するSNMPクエリは、優れた高速画像を提供することがわかりました。そうでなければ、NMAPはあなたの友達です。