Лучший способ создать отпечаток машины? - PullRequest
5 голосов
/ 10 ноября 2011

Мне нужно сгенерировать уникальную строку, которая будет отличаться от машины к машине - «отпечаток устройства».

Что такое ...

  • возможные подходы для пользовательских реализаций?(У меня есть несколько идей, но я думаю, что у вас, ребята, возможно, есть ЛУЧШИЕ)
  • существующие решения?(допустимы как коммерческие, так и некоммерческие)

Ответы [ 5 ]

1 голос
/ 10 ноября 2011

Большинство машин имеют сетевой адаптер с MAC-адресами (если он не подключен к сети, зачем вам нужен уникальный идентификатор для машины?).Просто убедитесь, что вы получаете MAC-адрес физического сетевого адаптера, а не виртуальный Mac (созданный VMWare или Virtualbox).Возможно, вы захотите сохранить имя устройства, с которого исходит MAC, чтобы вы всегда получали один и тот же MAC-адрес при перечислении MAC-адресов.Также не используйте это для безопасности, так как всегда можно подделать MAC-адрес, он просто предоставляет относительно уникальный идентификатор.

1 голос
/ 10 ноября 2011

Отпечатки устройств - сложная тема, если вы хотите охватить множество крайних случаев (например, обновления оборудования, обновления ОС и т. Д.) И если вы беспокоитесь о людях, которые тратят энергию, чтобы подделать заведомо хороший отпечаток устройства (хорошее значение отпечаток пальца известен вам и получает некоторую выгоду, такую ​​как права на использование программного обеспечения), или создайте новый отпечаток пальца, о котором вы не знаете (например, отпечаток пальца был в каком-то черном списке, и пользователь хочет создать новое устройство Идентификатор устройства, которого нет в черном списке).

Некоторые вещи довольно статичны и являются разумной основой для простого отпечатка пальца. MAC-адрес лучше всего подходит для этой категории, но его также очень легко изменить. Кроме того, некоторые компьютеры имеют несколько MAC-адресов (в том числе MAC-адреса виртуальных машин), поэтому вам необходимо справиться с этой сложностью. Некоторые сетевые устройства эфемерны, например привязанный сотовый телефон.

Другие аспекты компьютера сложнее (но отнюдь не невозможно) подделать, такие как информация о процессоре, контрольная сумма BIOS, серийные номера жесткого диска и т. Д. Однако, такие вещи, как правило, сложнее подделать может измениться (обновление BIOS, новый жесткий диск, съемные жесткие диски и т. д.).

Вам также необходимо тщательно защитить код, который фактически генерирует отпечаток пальца. Если этот код легко (достаточно) взломать, кто-то, пытающийся победить ваше решение, просто вставит любой желаемый отпечаток пальца непосредственно в код, который собирает и оценивает компоненты.

1 голос
/ 10 ноября 2011

Что я делаю с моими приложениями, так это обычно создаю специальный идентификатор, беря хеш из имени машины, найденного в Environment, сопоставляя его с хеш-значением имени моего приложения, а затем применяя соль (вероятно, даже ненеобходимо, но это помогает быть параноиком), чтобы произвести «отпечаток» для комбинации приложения / машины.

Это работает в моей ситуации, потому что на компьютере одновременно есть только одна копия моего приложения.

0 голосов
/ 10 ноября 2011

Вы можете использовать WMI и получить MAC-адрес сетевой карты, последовательный жесткий диск (не последовательный том), идентификатор процессора и идентификатор BIOS.Недостатком этого метода является то, что на некоторых машинах по нескольким причинам часть этой информации недоступна, но вы можете объединить информацию из этого 4 источника, и по крайней мере один будет там, но WMI на некоторых машинах просто не работает должным образом иу вас должен быть какой-то запасной вариант, то, что работает на всех машинах, например.Серийный номер тома.

Другая проблема заключается в том, что у вас должны быть права администратора для получения этой информации через WMI. Я решил эту проблему с помощью службы Windows, которая использует WMI и отправляет информацию приложениям.

Вот некоторые из интересных запросов WMI:

Серийные номера жестких дисков:

SELECT SerialNumber FROM Win32_PhysicalMedia where SerialNumber <> null

Серийные BIOS:

SELECT SerialNumber FROM Win32_BIOS where SerialNumber <> null

Серийный процессор:

SELECT ProcessorID FROM Win32_Processor

NIC MAC:

SELECT MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True

между прочим.Вы можете проверить WMI с помощью Paessler WMI Tester

0 голосов
/ 10 ноября 2011

То, что вы хотите, может зависеть от вашей видимости в рассматриваемых системах.Например, у вас могут быть персональные и / или сетевые брандмауэры и VLAN, которые мешают вам опросить сами устройства.Я считаю, что SNMP-запрос к устройствам в вашей сетевой инфраструктуре (ваши коммутаторы для информации о MAC-адресах и ваши маршрутизаторы для IP-адресов) дает хорошую быструю картину.В противном случае NMAP - ваш друг.

...