Главная

Wednesday, 11 September 2013

Поиск сведений про USB-накопители в Windows ХР/7


     Говоря о проблеме USB-накопителей в контексте судебной экспертизы, мы обращаемся к тем элементам, которые остаются после определенной активности, так называемым артефактам. Когда вы посещаете web-сайт с помощью Internet Explorer, в истории web-браузера остается артефакт (cookie), свидетельствующий о том, что вы посещали данный сайт. Когда вы входите в систему, в системном журнале безопасности остается запись – еще один артефакт. При анализе системы на предмет взлома или хищения данных именно эти артефакты являются ключами, которые помогают разобраться в том, что же на самом деле произошло. Практически все действия пользователя в системе оставляют после себя разного рода артефакты. Это касается и USB накопителей. Но встает вопрос о том, какие артефакты важны, и где их найти. 

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

Будем исходить из того что наиболее важные артефакты для специалиста это:
· тип сьемного накопителя, его серийный номер;
· дата и время его установки и изьятия из компьютера;
· буква диска под которой фигурировал накопитель в ОС;
· аккаунт пользователя системы под каким фигурировал накопитель в ОС.


Вначале перескажу метод поиска, который был опубликован компанией Red Line Software для Windows 7.

 Извлечение USB артефактов вручную.

Основным способом обнаружения артефактов USB накопителей является переход в место хранения данной информации вручную. Рассмотрим такие места в Windows 7. 

Проще всего найти информацию, содержащую список всех USB накопителей, которые подключались к системе. Эту информацию можно в готовом виде найти в системном реестре Windows в: HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR. В этом разделе вы найдете ключ каждого накопителя, который подключался к вашей системе, а также информацию о его производителе (Vendor), номере продукта (Product Number), номере версии (Version Number), и серийном номере (Serial Number), если применимо. 

После получения списка всех накопителей вам нужно выявить их принадлежность к пользователям. Это вполне возможно, но для этого потребуется выполнить дополнительные шаги. В реестре сначала нужно перейти в HKLM\SYSTEM\MountedDevices. В этой области вы можете выполнить поиск серийного номера подозрительного устройства. Когда номер найден, он поможет вам определить GUID, связанного с этим устройством. 

Когда GUID устройства у вас под рукой, нужно сконцентрироваться на личных профилях пользователей машины. В папке каждого пользовательского профиля (C:\Users) имеется файл NTUSER.DAT. К этому файлу предоставляется доступ для HKEY_CURRENT_USER всякий раз при входе его владельца в систему. В результате, этот файл можно открыть в редакторе системного реестра с правами администратора. Чтобы связать пользователя с определенным устройством, нужно перейти в следующий каталог в NTUSER.DAT разделе: Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2. Здесь вы можете найти GUID нужного устройства. Если он найден, значит, пользователь был в системе, когда устройство было к ней подключено. Следует помнить, что этот поиск необходимо выполнять для каждого пользователя системы для установления такой взаимосвязи. 

Одним из наиболее важных аспектов судебного расследования являются временные рамки, в течение которых совершалось расследуемое событие. Поэтому очень важно знать, когда подозрительное USB устройство было подключено или отключено от системы. 

Определение времени, когда накопитель был впервые подключен к системе, является вполне простой задачей при условии, что у вас есть серийный номер этого устройства (получение этой информации описано выше). При наличии этой информации найдите файл C:\Windows\inf\setupapi.dev.log и в нем найдите серийный номер этого устройства, в результате вы найдете время, когда устройство было подключено впервые: ищем строки типа на подключения ump: Creating Install Process: DrvInst.exe 16:10:07.690 и отключения ump: Server install process exited with code 0x00000000 16:10:12.573 

С другой стороны, не менее важно определить время последнего подключения устройства к системе. Для получения этой информации нужно снова обратиться к реестру в HKLM/System/CurrentControlSet\Enum\USB\VID_12345&PID_12345, заменив '12345' идентификационными номерами производителя и продукта USB устройства (полученными ранее). Здесь вы можете экспортировать раздел реестра в текстовый файл, чтобы посмотреть время последней записи в устройство. Для этого нажимаете Файл (File), выбираете Экспорт в regedit, раздел при этом должен быть выделен:
Раздел: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\##?#STORAGE#RemovableMedia#7&7f1a906&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
Название класса: <Класс отсутствует>
Последнее время записи: 09.09.2013 - 9:25
 Название: DeviceInstance Тип: REG_SZ
 Значение: STORAGE\RemovableMedia\7&7f1a906&0&RM

А теперь повторим тоже самое для Windоws XP. 
Различий с 7-й почти нет, но все же пройдемся еще раз.

1. Смотрим ветку реестра HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Enum\USBSTOR
Здесь находятся все устройства-носители, подключаемые к USB
В ключах находящихся в данной ветви есть параметры:
- FriendlyName (Например, он равен "Kingston DataTraveler 2.0 USB Device")
- ParentIdPrefix (Например, он равен 7&cb3a0ee&0).



Так вот первая строка - идентификатор класса, а 7&cb3a0ee&0 - уникальный идентификатор устройства. Для каждого подключаемого USB-устройства он будет разный. Даже если два устройства одинаковой класса и модели. При подключении PnP-менеджер либо считывает сюда серийный номер устройства, либо генерирует уникальный ID, если устройство не имеет зашитого серийного номера.

2. Определим букву диска под которой монтировалось устройство.
Смотрим ветку реестра HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices 
Открываем параметры вида: \DosDevices\X: (где X - буквы логических дисков). Выбираем те, которые в значении содержат строки STORAGE#RemovableMedia После этой строки идет ParentIdPrefix (например, 7&cb3a0ee&0). Очевидно, что накопитель с идентификатором "Kingston DataTraveler 2.0 USB Device" монтировался в системе на букву X) Для полноты картины смотрим все имеющиеся ControlSet'ы, а также файлик \Windows\Repair. Есть еще копии куста реестра SYSTEM в каталоге "X:\System Volume Information\". Внимание - случается, что флешка монтируются на одну и ту же букву и в MountedDevices информация будет только о последней.

3. Чтобы определить время последнего подключения USB-устройства делаем следующее:
Ищем в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Control\DeviceClasses подключи {53f56307-b6bf-11d0-94f2-00a0c91efb8b} и {53f5630d-b6bf-11d0-94f2-00a0c91efb8b} 

Открываем первый и находим там подключ, начинающийся с нужного нам идентификатора класса устройства (пример): "##?#USBSTOR#Disk&Ven_Kingston&Prod_DataTraveler_2.0&Rev_1.04#0BF19451711018DA&0....." Видим, кстати, тут уникальный идентификатор устройства.
Дата последнего изменения данного подключа и будет датой последнего подключения устройства.


Открываем второй и находим там нужный нам ParentIdPrefix устройства: "##?#STORAGE#RemovableMedia#7&cb3a0ee&0&RM..."
Дата последнего изменения данного подключа и будет датой последнего подключения тома.


4. Чтобы определить, под каким пользователем был доступ к тому делаем следующее: - в подключе MountedDevices ищем параметры вида \??\Volume{8f6082e2-dabd-11d9-b1ae-e72a1a2901ce}, в значении которых имеется нужный нам ParentIdPrefix. - открываем файлы "NTUSER.DAT" пользователей. Там находим ключ Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 
В нем ищем подключ {8f6082e2-dabd-11d9-b1ae-e72a1a2901ce}. Соответственно, если находим, то чей NTUSER.DAT тот и имел доступ.

Автоматизация поиска.

К сожалению для автоматизации поиска с помощью VBscript ничего путнего придумать не удалось. Не претендуя на абсолютную истину, но в ХР я нашел только три класса Win32_USBControllerDevice, Win32_USBController и Win32_USBHub, которые дают не так много информации. А про временным параметрам вообще пусто.

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_USBControllerDevice", "WQL", _ wbemFlagReturnImmediately + wbemFlagForwardOnly) Set colItems = objWMIService.ExecQuery("Select * from Win32_USBController",,48) Set colItems = objWMIService.ExecQuery("Select * from Win32_USBHub",,48)

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

Вывод.

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

4 comments:

  1. Чтобы определить время последнего подключения USB-устройства делаем следующее:
    Ищем в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Control\DeviceClasses подключи {53f56307-b6bf-11d0-94f2-00a0c91efb8b} и {53f5630d-b6bf-11d0-94f2-00a0c91efb8b}

    Win 8.1. Не актуально для времени последнего соединения, ключ не перезатирается, время создания всегда одно и тоже

    ReplyDelete
  2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_1234&PID_1234\%идентификатор%

    А вот этот справедлив для времени последнего обновления

    ReplyDelete
  3. как же скучно я живу...

    ReplyDelete
  4. спасибо за информацию, кстати говоря с датой подключения обычно проблема. У меня почти все подключения той даты когда проверяю

    ReplyDelete

А что вы думаете по этому поводу?