На разных устройствах, которые производители предлагают в качестве блокираторов, команда записи может отсекаться в трёх разных местах. В отчёте по методике NIST устройства могут выглядеть одинаково: запись не прошла, тест — пройден. Разницу вы почувствуете ровно в пограничных ситуациях, которые формальный тест не отлавливает: когда что-то работает нестабильно или накопитель как немного неисправен.
В очередной раз убеждать в необходимости пользоваться блокиратором — всё равно, что говорить о необходимости вовремя чистить зубы. О том, зачем нужен блокиратор и как его проверять, мы уже писали в 2024 году; с тех пор не изменились ни требования, ни рекомендации, ни накопители. О рынке, производителях и скоростях был мартовский обзор. Сегодня поговорим о том, как эти устройства устроены внутри и что из этого следует на практике.
Физический уровень. В теории — самый надёжный вариант, на практике… на практике всё сложнее. Начнём с того, что запись на этом уровне отсекается простой логикой: состояние «только чтение» задаётся уровнем на выводе микросхемы или положением механического переключателя, и прошивка в этом не участвует вообще. Такие устройства сейчас собирают в основном на Тайване, и их на сегодняшний день довольно немного. Дело здесь в том, что этот способ плохо масштабируется. Во времена IDE и карт памяти запрет записи действительно можно было развести отдельной линией. В SATA и тем более в NVMe запись — это не какой-то отдельный сигнал, а команда в общем потоке; чтобы её отличить от чтения, поток всё равно нужно разбирать, и разбирает его контроллер. Так что если перед вами — блокиратор NVMe с физическим переключателем «read only», не думайте, что в нём есть «аппаратная» блокировка: для NVMe она попросту невозможна, а из «аппаратного» там — только сам переключатель.
Блокировка на уровне прошивки. Между накопителем и компьютером стоит мост, который принимает команды от хоста, разбирает их и не пропускает дальше те, что модифицируют содержимое. Когда сегодня кто-то говорит «аппаратный блокиратор» — имеется в виду, как правило, именно такое решение, и наши блокираторы здесь не исключение. Корректно реализованная блокировка на уровне прошивки проходит тесты NIST так же, как и физическая, и по надёжности ничуть не хуже. Ключевой момент здесь — «корректно реализованная»: мы протестировали много разных адаптеров с функцией блокировки записи, и очень часто их поведение можно описать фразой «здесь блокируем, а здесь не блокируем». «Лучшие» из протестированных экземпляров могли корректно блокировать, к примеру, команды записи протокола NVMe и пропускать некоторые команды записи SATA если адаптер работал в режиме UASP — но корректно блокировать запись, если UASP блокировался. Разумеется, использовать такие «блокираторы» в лаборатории нельзя. Более того, нельзя доверять и пользователю, который может соблазниться «более лучшей» прошивкой из интернета — с печальными, как правило, последствиями. Поэтому прошивку наших блокираторов мы защищаем от считывания и копирования, и это — не паранойя, а защита от «продвинутых» пользователей.
Программный уровень. Никакого отдельного устройства нет, запись блокируется на стороне рабочей станции. Сюда попадают загрузочные среды с блокировкой записи (у нас это Elcomsoft System Recovery), специализированный софт вроде SAFE Block, а также два способа, которые эксперты регулярно применяют самостоятельно: ключ реестра WriteProtect в разделе StorageDevicePolicies под Windows и команда blockdev --setro под Linux.
Про эти два способа стоит сказать отдельно, потому что на них периодически полагаются как на замену аппаратным блокираторам. Ключ реестра действует только на устройства класса USB storage; накопитель, подключённый по SATA или NVMe напрямую, он не закрывает. blockdev --setro работает на уровне блочного слоя ядра и снимается одной командой, то есть защищает только от случайных ошибок. И главное: оба механизма находятся ровно в той системе, от самодеятельности которой мы защищаем накопитель. Как страховка от собственной ошибки они полезны; как единственная мера при работе с вещественным доказательством — категорически нет.
Самый простой способ собрать блокиратор выглядит так: берётся одноплатный компьютер, на него ставится Linux, к нему добавляется хаб и несколько контроллеров под разные интерфейсы. Получается универсальное устройство, которое умеет всё понемногу и стоит недорого. Плата за универсальность — скорость. Все накопители сидят на одном канале, и пока диск один, потолок скорости определяется контроллером и составляет около 200 МБ/с, что мы и наблюдали в мартовских тестах. Как только дисков становится два или три, эти же 200 МБ/с начинают делиться между ними.
Другой подход — универсальная программируемая матрица, FPGA. Решение заметно грамотнее, скорость выше и стабильнее, но у него свой потолок, обычно в районе 250-300 МБ/с. Дальше начинается территория, где нужен либо специализированный контроллер под каждый протокол, либо дорогая обвязка уровня Thunderbolt 4, и цена устройства растёт соответственно.
Сразу о завышенных ожиданиях: дорогое интегрированное решение не обязательно быстрее дешёвого раздельного; чаще наблюдается паритет, а то и вовсе раздельные блокираторы быстрее. Универсальный комбайн Tableau в наших тестах выдавал стабильные 350 МБ/с на SATA и на NVMe; раздельные блокираторы той же компании показывали столько же.
Существуют блокираторы, у которых на входе и на выходе один и тот же интерфейс: SATA в SATA, NVMe в NVMe. На бумаге это выглядит логично — ровно до момента, когда устройство нужно подключить к рабочей станции. Чистый интерфейс NVMe в разъём ноутбука просто так не подключить; нужен либо доступный порт на материнской плате, к которому нужно ухитриться подключить своеобразный комбайн, либо ещё один переходник.
Так появляются гирлянды из последовательно соединённых адаптеров, и с ними связаны сразу три проблемы. Каждый стык — это лишние помехи на линии; каждый промежуточный контроллер, если он не пассивный, урезает скорость; и каждое дополнительное соединение — это механический риск для накопителя, который в этот момент является вещественным доказательством.
Если на выходе сразу сделать USB, то вопрос снимается. USB той или иной версии есть на любом компьютере, включая ноутбуки.
Пожалуй, единственное исключение из этого правила — SAS. Разрабатывать отдельный блокиратор для SAS не очень разумно (в криминалистической практике это достаточно экзотический формат), а обычный адаптер для SATA вполне сгодится, тем более что диски SAS достаточно надёжны, а скорость у них ненамного выше SATA.
В процессе разработки мы приняли ряд решений, каждое из которых — своеобразный компромисс.
Во-первых, мы решили делать раздельные блокираторы вместо универсального комбайна. Каждый протокол получает свой контроллер, оптимизированный под него: SATA читает на скорости до 500 МБ/с, NVMe гарантированно не менее 750 МБ/с, а на нашей тестовой конфигурации мы получили 900 МБ/с. Плюсы очевидны: высокая скорость, можно пользоваться несколькими переходниками одновременно. Минус — нужно брать с собой несколько устройств, а не одно универсальное.
Далее, питание мы сделали по USB Type-C с поддержкой Power Delivery, включая 12 вольт для трёхдюймовых дисков и 5 вольт для твердотельных SATA и NVMe. От проприетарных блоков питания с круглыми разъёмами, которые в случае чего нужно отдельно искать, мы отказались; запитать блокиратор можно от адаптера ноутбука или от внешнего аккумулятора. Крупных недостатков мы здесь не видим — разве что в случае чего вам придётся подобрать качественный адаптер с поддержкой PD и 12 вольт.
Мы сделали ставку на компактность. Блокиратор SATA легко помещается в карман, его легко захватить на выезд. Минус — ограниченный функционал: это просто блокиратор без каких-либо экранов, автономных режимов или функции дублирования диска; без компьютера не работает. Разумеется, на рынке есть и универсальные копировщики с блокировкой записи со встроенным аккумулятором, но они достаточно большие и тяжёлые; это не наш метод.
Наконец, напрямую мы решили поддерживать основные форм-факторы, а экзотику, если в том возникнет необходимость — через дополнительные механические переходники. Основным разъёмом у блокиратора NVMe сделан m.2, для всего остального — пассивные переходники, которые гарантированно не повлияют на блокировку записи.
С исправным диском всё работает: два сеанса — два одинаковых образа; контрольные суммы совпали.
С нестабильными дисками сложнее. От раза к разу может меняться набор доступных для чтения секторов; некоторые будут недоступны по тайм-ауту, причём разные программы реагируют на это по-разному. Более того, каждое чтение проблемного диска ускоряет износ, и первый проход может оказаться единственным.
Вывод простой: если диск проблемный — считайте, что у вас ровно одна попытка. Как именно снимать образ, как фиксировать нечитаемые области и как сверять контрольные суммы отдельных файлов вместо образа целиком — тема для отдельной статьи.
Мы рассказали, как устроены и как работают блокираторы записи, но не затронули вопрос, когда и как их положено применять и чем это «положено» регулируется. Внятных методических документов у отрасли, по сути, нет. Есть общие принципы, есть необязательные к исполнению рекомендации, есть разрозненные ведомственные инструкции, и всё это мало связано между собой. Это тема отдельного разбора, который мы планируем провести в будущем.
Наши блокираторы и комплекты переходников доступны на странице Аппаратных решений.