Чтобы менять максимальное количество параметров, требуется перепрошить контроллер флешки. Процедура эта сравнительно несложная, но опасная — в случае ошибки ты рискуешь сделать флешку неработоспособной (однако ошибка чаще всего возникает при неудачном выборе прошивки или прошивальщика).
Представим, что у тебя есть исправная флешка (которая работает в офисе без проблем), а также ты приобрел другую флешку — потенциальный клон. Если ты купишь флешку точно той же модели, то при некоторых обстоятельствах сможешь обойти СЗИ, в которых идет проверка только по VID и PID.
На практике лучше найти флешки, которые легче всего перепрошивать, например фирмы Silicon Power или Transcend с USB 3.0 — в них часто используется SMI-контроллер. Хотя в целом тебе могут попасться флешки с контроллерами AlcorMP, Phison и другие. Для них тоже есть прошивки.
Общий алгоритм прошивки девайса следующий:
- Выясни тип идентификатора, который используется для определения флешки в СЗИ, или используемые составляющие на основе данных флешки (опционально), запиши их для последующей подделки.
- Определи контроллер флешки.
- Подбери утилиту для прошивки, подходящую под конкретную версию контроллера.
- В прошивальщике задай необходимые параметры, идентичные оригинальной флешке.
- Прошей флешку‑клона и проверь ее работу. В случае неудачной прошивки — повтори шаги, начиная со второго. Если флешка окирпичилась, поступай аналогично.
Шаг 1. Так случилось, что на первой протестированной нами машине стоял антивирус Comodo с возможностью контроля устройств. Недолго думая, включаем блокировку для USB и добавляем флешку‑оригинал в исключение. Антивирь любезно показывает нам используемый идентификатор флешки.
В свойствах оборудования находим, что эта строка соответствует опции «Путь к экземпляру устройства». Запишем идентификатор как целевое значение, которому наша флешка‑фейк должна соответствовать:
1 |
USBSTOR\DISK&VEN_&PROD_USB_DISK_2.0&REV_PMAP\070867948D560839&0 |
На всякий случай запомним и DeviceID:
1 |
USB\VID_13FE&PID_4200\070867948D560839 |
Бывает, СЗИ напрямую не показывают идентификатор (угадай почему), а определяют только некоторые свойства подключенного устройства. В таких случаях идентификатор обычно складывается из видимых полей и свойств. Для нас это непринципиально, поскольку, подгоняя данные фейка под оригинал, мы задействуем те же самые данные и формируем такой же идентификатор.
Шаг 2. Для определения контроллера флешки‑фейка воспользуемся прогой ChipGenius (ее можно скачать с сайта USBDev. Кстати, рекомендуем сайт как наиболее полезный русскоязычный ресурс по прошивке флешек. Можно воспользоваться аналогом — Flash Drive Information Extractor. Интерфейс программ простой — вставил флешку, получил результат — см. иллюстрацию ниже.
Сравни с выводом ChipGenius для нашего будущего фейка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
DeviceID USB\VID_090C&PID_1000\CCYYMMDDHHMMSS000000 Description: [H:]Запоминающее устройство для USB(SMI USB DISK) Device Type: Mass Storage Device Protocal Version: USB 2.00 Current Speed: High Speed Max Current: 500mA USB Device ID: VID = 090C PID = 1000 Serial Number: CCYYMMDDHHMMSS000000 Device Vendor: SMI Corporation Device Name: USB DISK Device Revision: 1100 Manufacturer: SMI Product Model: USB DISK Product Revision: 1100 **Controller Vendor: SMI** Controller Part-Number: **SM3257ENBA** - ISP 131128-AA- Flash ID code: 98DE8493 - KIOXIA TC58TEG6DCJBA00 - 1CE/Single Channel [MLC-16K] -> Total Capacity = 8GB Tools on web: http://dl.mydigit.net/special/up/smi.html |
Итак, мы видим, что у нас контроллер семейства SMI (Silicon Motion) с номером SM3257ENBA. Теперь найдем прошивальщик для него!
Шаг 3. Хотя ChipGenius даже дает ссылку для прошивальщика, на сайте по этой ссылке все на китайском, поэтому проще скачать его с UsbDev. При этом обязательно в версии, поддерживающей наш контроллер SM3257ENBA. Для данного контроллера используются прошивальщики SMI MPTool и Dyna Mass Storage Production Tool. Нам больше по душе вторая (работает долго, но качественно и почти со всеми подвидами данных контроллеров). Находим нужную версию, качаем Dyna Mass Storage Production Tool, вставляем флешку‑фейк, запускаем прогу.
Шаг 4. Не пугайся, не все так сложно. Все прошивальщики имеют практически идентичный набор параметров, поэтому общие принципы и изменяемые параметры у всех схожи, независимо от бренда и модели контроллера. Убедись, что флешка появилась в программе.
В правой части жми надпись Settings, ввод пароля пропускаем нажатием Enter (в некоторых утилитах он тоже есть, обычно легко гуглится на форумах), в качестве дефолтного конфига указываем файл в корне каталога прошивальщика — NDefault.INI.
Кстати, все эти операции могут восстановить твой любимый неисправный USB-гаджет путем перепрошивки с дефолтными значениями, главное — не накосячить с определением программы и контроллера. Ну а мы продолжаем. В появившемся окне переходим на вкладку DeviceConfig.
Менять здесь нужно совсем немного. В поле SN Method выбираем Static SN (иначе наш серийник будет пустой, как в noname-флешках). В данном случае мы задаем стойкий, как швейцарский банк, серийник, который не будет меняться от системы к системе.
В секции USB чуть ниже выставляем параметры, как у флешки‑оригинала:
1 |
VID → 13FE, PID → 4200, bdcDevice (номер ревизии) → PMAP |
Имя производителя и продукта в нашем кейсе не используется, можем не менять. Однако в некоторых мажорных СЗИ они также применяются для формирования сигнатуры устройства. Если ты вообще не знаешь, какие параметры и куда вводить, то рекомендуем повторить шаги с первого и вот до этого места на флешке‑оригинале, скопировать все параметры в прошивальщик флешки‑фейка и продолжить чтение. Оригинал прошивать не нужно.
В поля SN Begin No., SN End No. и SN Mask забиваем серийник флешки‑оригинала: 070867948D560839.
Давай еще раз посмотрим на целевую строку:
1 |
USBSTOR\DISK&VEN_[пустой]&PROD_USB_DISK_2.0&REV_PMAP\070867948D560839&0 |
Мы уже перенесли номер ревизии (PMAP) и серийник — цифровую часть в конце.
В секции Inquiry очищаем поле Vendor, в поле Product прописываем USB DISK 2.0. VID и PID мы поменяли, чтобы серийный номер (Device ID) был также идентичен оригиналу. В правом верхнем углу жмем Save и в главном окне нажимаем Start. Начинается перепрошивка флешки.
В нашем случае глубокая перепрошивка занимает 35 минут. А при использовании SMI MPTool можно задействовать более быстрый способ перепрошивки, когда с контроллера считывается CID-регистр (Card Identification; открывается через меню Debug → Read CID\Write CID), в нем по аналогии с редактированием в HEX вручную прописываются нужные данные (но опять же нужно установить контрольные байты длины, не забывать вбивать значения справа налево и так далее, что неудобно).
Шаг 5. После успешной (мы надеемся) перепрошивки остается проверить нашу фейковую флешку и узнать, насколько она хороша. Посмотрим детали с помощью ChipGenius и выделим жирным отличия от оригинала:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Description: [H:]Запоминающее устройство для USB(USB DISK 2.0) Device Type: Mass Storage Device Protocal Version: USB 2.00 Current Speed: High Speed **Max Current: 500mA** (у оригинала — 200 mA, можно поменять через свойство USB Power — см. позапрошлый скрин, но при занижении силы тока устройство может отказаться работать) USB Device ID: VID = 13FE PID = 4200 Serial Number: 070867948D560839 **Device Vendor: SMI Corporation** (у оригинала отсутствует, меняется через панель USB → Vendor String) **Device Name: USB DISK** (у оригинала USB DISK 2.0, меняется через панель USB → Product String) **Device Revision: 4200** (у оригинала 0100, данный параметр не изменяется) Product Model: USB DISK 2.0 Product Revision: PMAP ...(остальное по контроллеру и так различается)... |
Теперь сравним DeviceID флешки‑оригинала, фейка до клонирования и фейка после прошивки.
Открыв свойства оборудования, проверяем путь к экземпляру‑клону:
1 |
USBSTOR\DISK&VEN_&PROD_USB_DISK_2.0&REV_PMAP\070867948D560839&0 |
Целевой путь:
1 |
USBSTOR\DISK&VEN_&PROD_USB_DISK_2.0&REV_PMAP\070867948D560839&0 |
Теперь вставляем фейк в тестовую машину с включенным белым списком для флешки‑оригинала.
Сработало! Флешка открывается и работает. Пробуем подключить оригинальную флешку вместе с фейком — облом, происходит конфликт, поэтому работает только первая воткнутая флешка. Так что подключай их по одной.
Для полного соответствия копии оригиналу рекомендуем изменить остальные параметры, отформатировать фейк, дать ему метку оригинала. И не забудь изменить VSN — как это сделать, ты уже знаешь.
Давай проверим фейк на надежном антивирусе — например, Kaspersky Endpoint Security 10.
Смотрим, что используется в качестве идентификатора флешки‑оригинала.
Это путь к экземпляру устройства, добавляем его в белый список, проверяем на какой‑нибудь левой флешке.
И вот тут мы словили хохму — флешка отображается в проводнике (особенность «Кошмарского»), проверяется антивирусом, но при попытке обратиться к ней получаем вот такое окно.
Но флешка‑фейк предсказуемо работает без каких‑либо проблем.
Схожим образом мы протестировали ряд коммерческих DLP-систем, СЗИ под Linux и нигде не встретили ни отпора, ни попыток воспрепятствовать атаке клонов.
И тут статью можно было бы закончить, но…
Другие методы обхода блокировки флешек
Совершенно случайно оказалось, что в зависимости от СЗИ можно использовать и дополнительные методы обхода USB-блокировок.
Обход блокировки с помощью дискеты
Путем форматирования флешку можно превратить в классическую дискету с возможностью чтения и записи, объемом всего в 1,38 Мбайт. Хватит, чтобы потихоньку перетащить на работу игрушку? Разве что по частям в несколько заходов. Вот как это сделать. Берем новую флешку, действуем по знакомому алгоритму. В этот раз нам попалась флешка Transcend 8 Gb USB 3.0 с контроллером SMI SM3267AB (возьмем прошивальщик для него — SMI MPTool V2.5.51 v7 P0920v1). Итак, прошивальщик, окно Settings, вкладка Multi-Lun Settings.
Устанавливаем галки на Floppy и форматировании, прошиваем. Результат выглядит примерно так.
Floppy-дисковод работает, зачет :).
Проверим на Каспере. По‑прежнему блокируется USB для любых флешек, кроме доверенных, но «дисковод» успешно подключается, можно читать‑писать информацию. Доступа к флешечному разделу по‑прежнему не предвидится.
Если сравнивать информацию о Floppy в Касперском с информацией по USB, то разница заключается только в типе устройства (Дискеты vs Съемные диски).
При включении блокировки дискет данный метод, конечно, не сработает.
Обход блокировки с помощью CD-привода
Аналогичный подход, но теперь попробуем создать на флешке CD-раздел и предварительно записать на него образ из ISO-файла. Недостаток очевиден — можно только считывать инфу с CD-раздела, записать на флешку файлы ты уже не сможешь. Но запустить установщик любимой игрули — без проблем. Берем ту же самую флешку на контроллере SM3267AB и через SMI прошиваем CD-раздел. В разделе Multi-lun Setting выставляем галочку Static CDROM Size и указываем размер под твой ISO, который мы будем туда заливать.
На вкладке Main Flow Setting около галки с Make Auto Run задаем путь к ISO-образу, например с Kali Linux — или чем‑нибудь другим. После прошивки флешка отображается в проводнике как отдельный флеш‑накопитель и CD-привод. С CD-раздела можно читать, копировать файлы — все как при классическом монтировании ISO-образа.
Что же на это скажут наши блокировщики? В Касперском и других коммерческих решениях ситуация полностью аналогична случаю с дискетами: CD-раздел успешно подключен и готов к использованию.
Флешки-мутанты для обхода блокировок
Есть, кстати, готовые флешки, которые содержат CD-раздел с утилитами для подключения «закрытого» раздела — как, например, в Jet Flash Transcend 620. Выглядит он примерно как CD-раздел с программулиной + 2 USB-раздела — открытый и пока закрытый, до ввода пароля. Размер приватной области настраивается.
Так вот, при работе белого списка по USB-накопителям в Касперском (если CD-привод не заблокирован) такая флеха вполне себе монтирует CD-раздел — можно и запускать, и копировать проги с него. При попытке смонтировать защищенный раздел — отказ в доступе. Чтобы спастись от этой напасти, нужно заблокировать CD-привод, хотя в родителе устройства указан все тот же старый добрый USB-идентификатор, что странно. В Comodo возможность монтирования такого недоверенного носителя исключена в принципе. Почему? Вопрос к реализации СЗИ и механизмам организации белых списков.
Итого
В статье мы рассмотрели варианты формирования максимально правдоподобного клона флешки, который позволяет обходить всевозможные блокировки. В зависимости от степени замороченности, можно обойти почти любой белый список. Как нам видится, для гарантированной защиты от подмены USB можно было бы указывать в СЗИ конкретные модели флешек и заносить в белый список хеш от CID области, от комбинации VID + PID + Serial или добавлять хеш вывода ChipGenius (ну либо его части). Неплохо было бы добавлять в идентификационную информацию данные о модели контроллера девайса.
В связи с тем что мы знаем парочку операционных систем, которые в качестве значений для белого списка используют название производителя или иные подобные параметры, было бы здорово на уровне ОС контролировать подключаемые носители на предмет их подмены или несоответствия обычному (ожидаемому) поведению (например, можно сравнивать VSN/UUID и ловить отличия при одинаковом DeviceID).
Безопасникам мы рекомендуем полностью блокировать подключение дискет и дисков в ОС, чтобы исключить описанные варианты обхода защиты. Будем рады получить обратную связь в комментариях. Может быть, у читателей найдутся прикольные решения для защиты от клонов или анализа аномалий при подключении устройств.