Привет, Хабр! На связи снова Иван Глинкин, руководитель группы аппаратных исследований из команды Бастиона. 

«Флешка с кодовым замком», «флешка с аппаратным шифрованием», «зашифрованный USB-накопитель», наконец, эталонное название — «криптографический модуль» (Cryptographic Module). У криптофлешки aka encrypted USB много имен, но суть от этого не меняется.

Задача такого устройства — защитить чувствительную информацию от несанкционированного доступа на программно-аппаратном уровне: при помощи шифрования, механизмов антивскрытия и прочих «семи печатей». Однако так ли надежны эти защищенные USB-накопители, как принято считать, или это всё от лукавого? 

Мы решили не доверять маркетинговым заявлениям и провели собственное исследование: попытались взломать несколько таких устройств методами аппаратного реверс-инжиниринга. Попробовали извлечь данные, определить применяемые типы шифрования, вскрыть криптофлешки и прочитать чипы памяти.

Результаты получились интересными. Подробности — под катом.


Разбираемся в стандартах 

Прежде чем «хвататься за скальпель» и препарировать флешки, обратимся к теории и стандартам. Иначе как мы поймем, соответствует ли реальный уровень защиты устройств регламентным характеристикам? 

В России действует общий стандарт, одно наименование которого тянет на шифровку: ГОСТ Р 54583-2011/ISO/IEC/TR 15443- 3:2007.

ГОСТ устанавливает методологию анализа и обоснования соответствия системы защиты информации требованиям безопасности.  Однако российский стандарт не касается непосредственно криптофлешек, так что здесь все довольно туманно. 

Зато в международной практике в этом плане больше конкретики. Стандарт NIST FIPS PUB 140 описывает принципы работы и защитные механизмы криптофлешки. В настоящее время действует ревизия документа 140-3.

Сам стандарт краткий и мало чем нам поможет. Другое дело — разработанное в рамках NIST FIPS PUB 140 «Руководство по внедрению» в 218 страниц убористого англоязычного текста. 

Верхнеуровнево стандарт описывает 4 уровня защиты криптографических модулей (security levels): 

Уровень защиты

Меры защиты

Ключи и SSP (sensitive security parameters)

Примеры устройств

Level 1 (базовая)

Обычный корпус без специальных tamper-механизмов. Только программная/логическая защита

Могут храниться в памяти без дополнительных защит

Программные токены, обычные USB-флешки с шифрованием на ПО

Level 2 (умеренная)

Tamper-evident наклейки/корпус, простая физическая защита, базовая аутентификация

Ключи защищены, но возможен ограниченный физический доступ к ним

Смарт-карты с базовой защитой от вскрытия, USB-токены среднего класса

Level 3 (высокая)

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

Ключи недоступны извне даже при прямом физическом доступе

HSM, защищенные токены/флеш-накопители, корпоративные криптоключи

Level 4 (максимальная)

Полная активная защита от вскрытия, устойчивость к экстремальным условиям (температура, влажность), активная защита от всех известных побочных каналов связи

Автоматическая нулевая защита ключей при попытках вмешательства (ключи стираются сразу же при попытке проникновения)

Военные/государственные HSM, модули для критически важных систем

От теории к практике 

Со стандартами и требованиями в общих чертах разобрались — самое время приступить к нашему исследованию. Для начала мы заглянули в прошлое и посмотрели, чего удалось добиться нашим коллегам, которые уже «ломали» защищенные USB-накопители. Как показал «исторический экскурс», возможно применение нескольких векторов атаки. 

  1. В некоторых случаях при физическом разборе флешки внутри оказывалась SD/microSD-карта, которая легко вынималась и вставлялась в картридер. При этом записанная на карте информация была в открытом виде.

  2. Аппаратный пароль представлял защиту исключительно в виде подачи питания. Пароль верный — тумблер подачи электричества замыкался, неверный — получите 0 вольт. Коллеги-исследователи делали мост и подавали энергию в обход управляющего модуля, запитывая карту памяти. 

В 2017 году команда исследователей из Google протестировала целый ряд таких защищенных флешек и нашла всего несколько уязвимостей. А что, если нам повезет больше? Мы закупили несколько криптофлешек на любой вкус, цвет и кошелек и начали собственное тестирование. 

Дисклеймер: в силу юридических ограничений все упоминания российских брендов в статье обезличены, а их логотипы — скрыты.

«Пациент 1»: российская криптофлешка за 4 тысячи рублей

Первой на очереди стояла бюджетная отечественная флешка c 32 гигабайтами памяти. Для начала изучим инструкцию и как следует рассмотрим устройство. 

Первичный осмотр 

Флешка выполнена в металлическом, приятном на ощупь корпусе. Кнопки прорезинены и нажимаются легко. Динамик достаточно громкий, а звуковой сигнал, как и положено, режет слух.

Теперь снимаем колпачок и …

От вскрытия нашу флешку охраняют всего два болтика — вот уж не ожидал такого от защищенного устройства... 
От вскрытия нашу флешку охраняют всего два болтика вот уж не ожидал такого от защищенного устройства... 

Как и сказано в инструкции, нажимаем кнопку включения и вводим пин-код (по дефолту 1122334). Потом жмем на кнопку замка — и флешка работает. 

А что же с безопасностью? Цитируем инструкцию дословно: 

«После десятикратного неверного ввода PIN-кода флеш-накопитель будет сброшен до заводских настроек. Данные при этом полностью стираются, а PIN-код — сбрасывается до заводского (1122334)». 

Оригинал: 

"After 10 times incorrect input, flash drive will be reset to factory settings. Data will be erased completely and PIN will be initiated (initial PIN1122334)".

О том, что данные будут стерты после десяти неудачных попыток ввода PIN-кода, нам дополнительно напоминают в следующей главе инструкции «Уведомления». Правда, замеры скорости полного уничтожения данных на дисках, которыми мы делились в предыдущей статье, заставляют в этом серьезно усомниться. Так что запомним это предупреждение и вернемся к нему позже. 

Инициализация и первые попытки восстановить файлы 

И снова повременим с «хирургическим вмешательством»: сперва проверим программную часть. Для этого вводим дефолтный пароль, активируем флешку и заходим внутрь.

Для исследования я подготовил ряд файлов, которые мы запишем на флеш, а потом попытаемся восстановить ☺ Не забудем и про контрольные суммы целостности, чтобы не сомневаться в полученном результате.

Записываем данные и рестартим флешку, 10 раз подряд введя неправильный пин-код. Не забываем отформатировать ее заголовок в FAT32 (всё по инструкции от производителя, иначе не определится в системе).

Как видим, идентификатор флешки поменялся с 16F9-1A5D на 92E3-8FDA. Не станем гадать, что бы это могло значить. Просто запишем этот артефакт себе в блокнот — вдруг пригодится.
Как видим, идентификатор флешки поменялся с 16F9-1A5D на 92E3-8FDA. Не станем гадать, что бы это могло значить. Просто запишем этот артефакт себе в блокнот вдруг пригодится.

Далее действуем по стандартному сценарию: запускаем PhotoRec от TestDisk и пробуем найти какие-нибудь данные.

Первый улов оказался скудным: 1 файл Shockwave Flash на 2 гигабайта. Судя по моему прошлому опыту восстановления данных с шифрованного LUKS2 диска, это был false positive — софт увидел файл, который мы вообще не записывали на носитель. 

Здесь я вспомнил совет моего бывшего руководителя: «Ты не рассуждай. Ты сначала сделай, а потом будешь рассуждать!». И вправду, почему бы не провести пару базовых тестов на принадлежность?

Сначала вычисляем хэш-сумму восстановленного файла и сравниваем с хэшами исходных тестовых файлов: мимо, что вполне ожидаемо. 

Окей, попробуем по-другому и извлечем читаемые символы через strings

Теперь попытаемся найти что-то похожее в наших тестируемых файлах.

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

Повторение — мать учения

Вспомнив поговорку «Пушкин — наше всё», я скачал собрание сочинений классика и переложил в обычный текстовый файл, который по счастливой случайности весил аккурат 1 мегабайт. Выбрал формат ТХТ, потому что он одинаково выглядит как в приложениях, так и в «сырых» данных. 

 Скопировал этот файл на флешку и забил ее копиями до предела.

Интересный факт: на флешку записалось всего 16 383 файла, то есть около 16 гигабайт. Но где же вторая половина? cp говорит, что места не осталось, а в проводнике указано еще 13,5 свободных гига. 

К слову, Винда рапортует нам то же самое.

Если же записать на флешку 7–8 файлов по 4 гига в среднем, то заполнится всё пространство целиком. То есть количество записанных на флеш файлов не должно превышать 16 тысяч. Как оказалось, это ограничение формата FAT32 — к слову, с exFAT таких проблем нет. 

Снова рестартим флешку через 10 неправильных пин-кодов и пытаемся восстановить данные — и опять ничего. 

Неужели из 16 тысяч файлов ни один не восстановился?

А что у нас в исходниках?

Что-то есть, но, в основном, это бессвязные наборы символов. 

На всякий случай снова попытаемся прогнать флешку через strings

На этот раз получилось множественное повторение одного и того же текста. А вот с этим уже можно работать. Но не будем сильно забегать вперед. 

Я не делал snapshot «пушкинской» флешки перед рестартом, так что снова перезапускаем защищенный USB-накопитель через 10 неправильных пин-кодов и записываем туда тот же файл с собранием сочинений Александра Сергеевича. Получаем те же 16 383 файла копий и оригинал.

После этого делаем полный snapshot флешки через команду dd:

sudo dd if=/dev/sda of=pushkin_full.img

Далее опять перезапускаем флешку через 10 неправильных пин-кодов. Чтобы ничего не потерять и ускорить работу, также снимаем snapshot флешки — pushkin_full_recrypt.img

И еще раз пытаемся найти повторения.

Бинго! Все 16 384 файла на месте, хотя и превратились в какие-то иероглифы. 

Выявляем метод шифрования

Итак, есть повторяющиеся участки и их адреса хранения. Нужно сравнить это с исходным незашифрованным вариантом. 

К сожалению, русский текст в исходниках в формате UTF8 отображался как точки. Поэтому находим латиницу и сверяемся по ней. 

Файлы и вправду на месте. 

Что это может значить, и какой алгоритм шифрования тут используется?

Еще раз взвесим факты. У нас есть, как минимум, 3 (а всего 16 384) разных участка исходного файла (разные смещения), которые после шифрования превратились в иероглифы, но остались идентичны друг другу: cipher(offset_1) = cipher(offset_2) = cipher(offset_3)

Соответственно, потоковый шифр (ChaCha20, RC4) сразу исключается, поскольку в нем используется непрерывный key stream, и при шифровании одного и тот же текста в разных местах файла ciphertext будет отличаться. 

AES-CTR/GCM/XTS тоже отпадает. Эти алгоритмы используют счетчик/nonce, который гарантирует различные блоки на разных смещениях.

Метод исключения указывает на блочный шифр в режиме ECB (AES-ECB или любая другая ECB-схема): одинаковые plaintext-блоки → одинаковые ciphertext-блоки; никакого IV, nonce, счетчика; чистая блочная замена. Выходит, перед нами AES-256 в режиме ECB, с 32-байтным ключом.

Если ключ создается «по фэн-шую» и представляет собой случайные 256 бит, то извлечь его из пары (plaintext → ciphertext) практически невозможно (AES защищен от известных текстов). Но на практике ключ часто получается из пароля или плохо защищенной процедуры — тогда его можно подобрать перебором, по словарю или проверив гипотезы о KDF. Правда, наши попытки сбрутить флешку результатов не принесли: в этом плане устройство оказалось крепким орешком. 

Восстанавливаем данные

Шифрование в формате AES-256 в режиме ECB уязвимо и позволяет восстановить файлы. 

Для этого попробуем нарисовать абстракцию в стиле Малевича и Кандинского: создадим несколько большеразмерных рисунков в формате BMP с белым фоном и тремя разноцветными геометрическими фигурами. Как видно на скриншоте ниже, весит наша картинка 21,5 мегабайта.

Далее запишем первые 100 мегабайт на флешке нулями простой командой, чтобы наверняка отделить наши полезные файлы от мусора:

 sudo dd if=/dev/zero of=/dev/sda bs=1M count=100

Проверим, что всё прошло успешно, командой hexdump -C /dev/sda | head.

Как можно видеть, разделы флешки с 00000000 до 06400000 полностью забиты нулями.

Далее будем записывать наши файлы после 100 мегабайт нулей по очереди. Чтобы отделить файлы друг от друга, поместим между ними 1 мегабайт нулей. Делать это вручную — всё равно что рыть канал чайной ложкой. Лучше напишем баш-скрипт: 

#!/bin/bash

DEVICE="/dev/sda"
offset=100    # стартовое смещение в MB

files=(
  "1.bmp"
  "1.png"
  "secret72_1.bmp"
  "secret72_1.png"
  "secret72_2.bmp"
  "secret72_2.png"
)

# --- Запись файлов ---
for f in "${files[@]}"; do
    echo "Пишу 1 МБ нулей перед $f"
    sudo dd if=/dev/zero of="$DEVICE" bs=1M seek=$offset count=1 conv=notrunc
    offset=$((offset+1))

    size_mb=$(du -m "$f" | cut -f1)
    echo "Пишу файл $f, размер $size_mb MB"
    sudo dd if="$f" of="$DEVICE" bs=1M seek=$offset conv=notrunc
    offset=$((offset+size_mb))
done

# --- Запись нулей до конца диска ---
    echo "Записываю нули до конца диска, начиная с offset ${offset} MB"
    sudo dd if=/dev/zero of="$DEVICE" bs=1M seek=$offset conv=notrunc
   
    echo "Готово."

Запускаем код:

Теоретически всё в порядке — файлы записались, и со 199 мегабайт до конца пишем нули. Давайте проверим в исходниках:

Пока все выглядит как и задумано.

Теперь выгрузим первые 250 мегабайт нашей флешки в отдельный файл, чтобы можно было анализировать его после сброса пароля:

sudo dd if=/dev/sda of=clean_first_250MB.bin bs=1M count=250 status=progress

Вроде бы по пути ничего не потеряли.

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

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

Выгружаем те же 250 мегабайт:

sudo dd if=/dev/sda of=crypted_first_250MB.bin bs=1M count=250 status=progress

Файлы нужно аккуратно достать с флешки, не потеряв ни единого байта. Что же, не проблема, ведь у нас есть оригиналы файлов и их размеры. Упростим себе задачу и напишем еще один баш-скрипт:

#!/bin/bash

DEVICE="crypted_first_250MB.bin"
offset=100    # стартовое смещение в MB

files=(
  "1.bmp"
  "1.png"
  "secret72_1.bmp"
  "secret72_1.png"
  "secret72_2.bmp"
  "secret72_2.png"
)

echo "Восстановление файлов с устройства $DEVICE"

for f in "${files[@]}"; do
    offset=$((offset+1))  # пропускаем 1 МБ нулей перед файлом

    size_mb=$(du -m "$f" | cut -f1)
    echo "Извлекаю $f: offset=${offset} MB, size=${size_mb} MB"
    sudo dd if="$DEVICE" of="restored_$f" bs=1M skip=$offset count=$size_mb status=progress

    offset=$((offset+size_mb))
done

echo "Готово. Файлы восстановлены с префиксом restored_."

 Запускаем скрипт:

Файлы восстановлены, однако мы не можем их посмотреть. Давайте откроем их в исходниках через hexedit и посмотрим, что может быть не так.

Понятно, почему мы изначально не могли посмотреть рисунок: в заголовке вместо формата файла указано что-то странное. Поменяем заголовок нашего восстановленного файла на BMP.

Наконец, попробуем открыть восстановленный файл.

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

И снова все восстановилось. 

Здесь мы приходим к первому важному выводу: производитель лукавит, будто при рестарте флешки данные удаляются. На самом деле, они остаются на месте — просто меняется ключ шифрования. Как показывает наше исследование, данные можно частично восстановить.

К слову, эту уязвимость можно оформить как CVE. Так, флешка Verbatim имела схожий небезопасный дизайн, и исследователи из Германии успешно зарегистрировали CVE в международной базе NIST. Мы не стали скромничать и решили сделать то же самое по итогам своего исследования. 

Возвращаясь к нашим изысканиям с «абстракциями», мы действовали в лабораторных условиях, зная, что и где искать. А что, если бы всё происходило в «дикой природе»?  Вызов принят: давайте попробуем написать программу-анализатор. 

Берем все тот же любимый мною баш-скрипт и напишем такой код:

#!/usr/bin/env bash
set -e

DUMP="$1"
shift

if [[ -z "$DUMP" || ! -f "$DUMP" ]]; then
    echo "Использование: $0 dump.bin [width1 width2 ...]"
    exit 1
fi

DUMP_SIZE=$(stat -c%s "$DUMP")
MAX_CHUNK=$((20*1024*1024))  # 20 MB

WIDTHS=("$@")
[[ ${#WIDTHS[@]} -eq 0 ]] && WIDTHS=(640 760 1000 1024 1500 2000 2480 3000 3328)
# little-endian helpers

le16() {
    printf "%04x" "$1" | tac -rs .. | xxd -r -p
}

le32() {
    printf "%08x" "$1" | tac -rs .. | xxd -r -p
}

for WIDTH in "${WIDTHS[@]}"; do
    BYTES_PER_PIXEL=3
    ROW_RAW_SIZE=$((WIDTH * BYTES_PER_PIXEL))
    ROW_PAD=$(( (4 - (ROW_RAW_SIZE % 4)) % 4 ))
    ROW_SIZE=$((ROW_RAW_SIZE + ROW_PAD))

    echo "[*] WIDTH = $WIDTH"

    OFFSET_BYTES=0
    PART=1

    while [[ $OFFSET_BYTES -lt $DUMP_SIZE ]]; do

        MAX_ROWS=$((MAX_CHUNK / ROW_SIZE))
        REMAIN_BYTES=$((DUMP_SIZE - OFFSET_BYTES))
        REMAIN_ROWS=$((REMAIN_BYTES / ROW_SIZE))
        HEIGHT=$(( REMAIN_ROWS < MAX_ROWS ? REMAIN_ROWS : MAX_ROWS ))

        [[ $HEIGHT -le 0 ]] && break

        IMAGE_SIZE=$((ROW_SIZE * HEIGHT))
        FILE_SIZE=$((54 + IMAGE_SIZE))

        OUT="out_${WIDTH}px_part${PART}.bmp"
        echo "  -> $OUT (${WIDTH}x${HEIGHT})"

        SKIP_BLOCKS=$((OFFSET_BYTES / ROW_SIZE))

        {
            # BITMAPFILEHEADER
            printf "BM"
            le32 "$FILE_SIZE"
            le16 0
            le16 0
            le32 54

            # BITMAPINFOHEADER
            le32 40
            le32 "$WIDTH"
            le32 "$HEIGHT"
            le16 1
            le16 24
            le32 0
            le32 "$IMAGE_SIZE"
            le32 2835
            le32 2835
            le32 0
            le32 0

            # PIXELS
            dd if="$DUMP" bs="$ROW_SIZE" skip="$SKIP_BLOCKS" count="$HEIGHT" status=none
        } > "$OUT"

        OFFSET_BYTES=$((OFFSET_BYTES + HEIGHT * ROW_SIZE))
        PART=$((PART + 1))
    done
done

Опишем подробнее принцип работы скрипта. Мы передаем в качестве аргумента шифрованную область (файл может быть как бинарником, так и /dev/sda). Скрипт разбивает его на равные части по 20 мегабайт, затем меняет заголовок получившихся кусков на заголовок BMP, а также указывает в нем ширину картинки (по дефолту поставил 640 760 1000 1024 1500 2000 2480 3000 3328) и сохраняет. 

После грубого поиска ширины можно ввести точное значение, указав шифрованную область. 

Далее запустим на ранее подготовленную область:

Отлично, файлы сгенерированы и сохранены. Переходим к самой трудной задаче —просмотру всех файлов (если бы мы говорили про реальные 100+ гигабайтные диски, это был бы тот еще квест).

Вот и первый улов. В части 8 (160–180 мегабайт после начала диска) файла шириной в 2480 пикселей проглядываются слова и цифры. Значит, мы нашли плюс-минус нужную ширину: будем пытаться поймать верную, и наш скрипт это позволяет.

Вот и еще одна находка: часть 6 (120–140 мегабайт после начала диска) файла шириной в 3328 пикселей. 

Словом, и в «дикой природе» у исследуемой криптофлешки нет шансов против такой атаки. Да, в реальности приходится потратить больше времени на написание программ-анализаторов, но данные в итоге можно восстановить. 

Если есть желание самостоятельно попробовать, как это работает, вот ссылка на файлы.

Препарируем устройство 

Итак, «терапевтический осмотр» закончен, и пришло время для «хирургического вмешательства». Для начала откручиваем болты и вскрываем крышку.

Отвинчиваем еще 3 болта и полностью отделяем плату от корпуса.

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

Изучаем чипы 

Управляющий чип — i560-N200C — представляет собой SOC (System on Chip), то есть мини-компьютер с процессором, оперативкой и рядом других «плюшек», включая шифрование. Даташит на него сообщает, какие технологии шифрования поддерживаются:

В списке встречаем нашего «старого знакомого» — AES256 в режиме ECB. Встает вопрос: если чип поддерживает более сильные режимы шифрования, почему производитель не применил их? Ну да ладно, идем дальше. 

На чипе есть UART, JTAG и другие отладчики, но первый выведен в отдельные пятаки на плате, что не может не радовать. Не откладывая в долгий ящик, достаем PCBite Probes и подключаемся к UART.

Запускаем Logic 2 и начинаем взаимодействовать с флешкой.

Устанавливаем стандартный baud rate 115200. При включении выводится лог, что флешка eMMC на месте. Вводим правильный пароль — получаем загадочное сообщение pressed fun; набираем неправильный — получаем вывод password error: 2. К сожалению, более детальной информации UART не предоставляет. 

Я протестировал отключение электропитания после ввода нескольких неправильных паролей. Оказалось, что количество таких неудачных попыток хранится в энергонезависимой памяти. Если отключить аккумулятор, подождать пару минут (на случай, чтобы все кондеры разрядились) и снова включить, то обратный отсчет продолжится. Поэтому здесь за реализацию защиты ставим производителю «+».

Теперь взглянем на чип памяти. Это BGA153 чип от MMY G1DH07DA-301 на 32 гигабайта.

Тут ничего необычного и заслуживающего особого внимания. 

Меняем «мозги»

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

Запишем разные данные/файлы и поставим разные аппаратные пароли на каждый USB-носитель. Затем попробуем поменять местами чипы SOC в надежде, что данные прочитаются. Да, шансы на успех такой атаки невелики, однако желание паять сильнее сухой теории.

Для начала обернем наши флешки термоскотчем, чтобы ненароком ничего не расплавить и не сдуть паяльным феном.

Далее отпаиваем SOC от обеих флешек. 

Меняем чипы местами и припаиваем к платам. 

А вот и первое недоразумение: я совсем забыл про пластиковые кнопки на обратной стороне платы, и они немного оплавились — не спас даже термоскотч. Впрочем, нам нужен не товарный вид, а информация…

Барабанная дробь! Запускаем первую флешку, вводим пароль от второй, и … аппаратный пароль подошел! Значит, он действительно хранится на SOC. Вставляем USB-накопитель в компьютер...

Компьютер определил флешку как /dev/sda, но не увидел ее файловую систему. Прохождение стрингами дало «абракадабру», что и следовало ожидать. 

В общем, в результате этой атаки мы получили аналог рестарта путем ввода неправильного пароля 10 раз. Но на всякий случай я снял полный дамп через dd для дальнейших исследований.

Последний тест

Наш «пациент №1» уже препарирован вдоль и поперек — оставалось только выпаять флешку и попробовать снять с нее данные напрямую. Кто-то спросит: зачем такие отчаянные меры? Дело в том, что криптофлешка работает по принципу «не введен аппаратный пароль — компьютер не видит устройство». При этом SOC действует как тумблер: пароль верный — данные проходят, неверный — не взыщите. 

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

За дело! Выпаиваем флеш-память с платы.

Как уже упоминалось, здесь используется форм-фактор BGA153. 

Пришло время пустить в ход адаптер к XGecu, но в моем арсенале нужного не оказалось. 

Пришлось пойти на китайский маркетплейс и выложить 4 тыс. рублей за адаптер. 

Только вот оказалось, что у XGecu нет официальной поддержки данного чипа. Зато в адаптере есть универсальный считыватель — Auto EMMC. Что же, ухватимся за эту соломинку. 

Итак, адаптер наконец доставили, и настал момент истины… Но нет, попытка снять данные напрямую с флеш-памяти провалилась — данные зашифрованы. Так что здесь тоже ставим устройству «+».  

«Пациент 2»: отечественная флешка за 15 тысяч рублей

Следующей на очереди стала флешка от другого российского производителя радиоэлектроники — в этот раз на порядок более дорогая.

Первичный осмотр второго «пациента» 

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

Этот USB-накопитель т��кже поставляется с инструкцией. Вот только в комплекте с флешкой шел усеченный мануал — для доступа к полному требовалось отсканировать QR-код. Видимо, производитель таким образом проявляет заботу об экологии (ну или или просто экономит на бумаге).

Инициализация и попытки восстановить файлы 

Начинаем с инициализации. Вводим код, вставляем флешку — система ничего не видит. Окей, быстро форматируем устройство в NTFS и проверяем.

Да, флешка инициализирована. Сперва проверим, на завалялись ли на носителе какие-нибудь забытые файлы. 

Увы, ничего интересного, так что движемся дальше. 

И снова Александр Сергеевич в помощь 

Действуем по отработанной методике: записываем несколько тысяч собраний сочинений Александра Сергеевича с целью проверить формат шифрования. 

Теперь перезапускаем флешку и смотрим, что получилось.

Перед нами вновь то самое небезопасное шифрование AES-256-ECB. Не стану описывать всю дальнейшую процедуру, так как она подробно описана на примере предыдущей флешки. Скажу только, что данные были успешно восстановлены.

Переходим к аппаратной части 

На первый взгляд могло показаться, что наш «пациент» обладает защитой от вскрытия: все части корпуса плотно прилегают друг к другу, не видно ни одного болта. 

Но нет, «Сим-Сим» довольно легко открылся. Для этого я оперся широкой частью корпуса около USB-разъема о стол и немного надавил плоской отверткой на отверстие для держателя. Крышка корпуса гостеприимно съехала в сторону. 

Осматриваем внутренности 

Внутри меня ждали аккумулятор, SDCard (внезапно) и знакомый нам по предыдущему исполнению чип управления i560-N200C. Первым делом я вытащил флешку и проверил содержимое. Информация на SDCard была зашифрована. 

Интересно, что контакты UART (выделены обводкой) не только не выведены в отдельные пятаки, но даже не распаяны
Интересно, что контакты UART (выделены обводкой) не только не выведены в отдельные пятаки, но даже не распаяны

Снимем силиконовые кнопки и посмотрим, что находится с другой стороны платы.

Неожиданно: там оказался один дополнительный чип, а на самой плате — еще 6 нераспаянных пинов (спойлер: они нам скоро понадобятся).

Для начала рассмотрим под микроскопом обнаруженную микросхему. 

Это STC 8G2K64S4 — 8-битный микроконтроллер на базе быстрого ядра 8051, предназначенный для управления электроникой. Полное описание микросхемы, а также даташит на нее можно найти по ссылке

Пытаемся прочитать чип 

Изучив даташит и внимательно осмотрев схему, находим контакты UART и подключаем к ним логический анализатор с помощью PCBite Probes. 

После запуска флешки на наш контакт RX поступают данные — частично читаемые, а частично закодированные. Как ни странно, расшифровались не все символы.

Чтобы ускорить процесс, я обратился за помощью к ИИ, но результат несколько удивил. 

Опустим момент, что на российской флешке информация на китайском языке. Больше всего здесь смущает последняя фраза: «версия с расширенным паролем / добавленным режимом пароля». Обычно это означает, в том числе, наличие мастер-пароля и режим администратора. Следовательно, производитель потенциально может зашить туда бэкдор со всеми вытекающими последствиями. Проверить это мы не смогли, поэтому наверняка утверждать не станем.

К сожалению, никакой другой информации через UART не проходит даже при подключении RS232-адаптера и вводах различных команд и комбинаций.

Однако в документации на устройство сказано, что для взаимодействия с микросхемой и ее перепрошивки нужно использовать специальное ПО — STC ISP Tool (находится парой запросов в поисковике). 

Увы, и этот проблеск надежды быстро угас: установка и запуск программы тоже не дали никакой информации.

STC-загрузчик не предоставляет команд вроде «прочитай флеш», «прочитай EEPROM» или «дамп памяти». Он умеет только загружать новый код в микроконтроллер, считывать UID и параметры тактирования.

Однако в документации есть еще одна зацепка: несколько дополнительных контактов RX/TX. А что, если подключиться к ним?

И снова сюрприз. После включения флешки каждое нажатие на любую кнопку клавиатуры устройства начало давать отклик, причем всегда разный. Я так и не смог подобрать нужный baud rate и дополнительные параметры UART, чтобы все корректно прочитать. Для справки: общее время всего сигнала — 36,916 миллисекунды, минимальная длина сигнала — 2,75 миллисекунды.

Я собрал все комбинации клавиш (от 1 до 0) и представил их в формате программы Saleae Logic 2, который вы можете скачать по ссылке на Google-диск

Интересное наблюдение: при нажатии на клавиатуре «1», «9» и «0» вместо однократной подачи сигнала происходит длительное повторение до тех пор, пока не отпустишь кнопку. Что касается «1» и «0», то данные комбинации прямо задокументированы в инструкции (смена основного пароля и смена пароля очистки данных). А вот про кнопку «9» каких-либо сведений в инструкции не было. Это опять же наталкивает на мысль о возможном мастер-пароле.

Вдобавок ко всему можно оставить кейлоггер — аппаратную закладку (места, конечно, мало, но при определенной сноровке такое возможно), куда и будет писаться пин-код.

«Пациент 3»: Kingston IronKey Keypad 200

Напоследок отвлечемся от российских устройств и проверим криптофлешку от именитого американского производителя Kingston Technology. 

На упаковке заявлено соответствие знакомому нам стандарту FIPS 140-3, а также указан формат шифрования AES-256-XTS. 

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

Как говорится, доверяй, но проверяй.

Пытаемся извлечь файлы 

После инициализации подключаем флешку к порту USB, монтируем и смотрим, что лежит внутри.

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

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

Проверяем методы шифрования 

Самое время проверить, действительно ли в устройстве применяется заявленное шифрование, а не уязвимый AES-256-ECB. В который раз берем наше собраний сочинений Пушкина и записываем его 5000 раз. Что же, «привычка свыше нам дана». 

Далее действуем по устоявшемуся плану: рестарт в дефолтные настройки через 10 неудачных вводов, установка нового пароля и подключение.

На этот раз, на наше удивление, повторов не оказалось от слова «совсем».

По моей щеке едва не скатилась скупая мужская слеза: неужели хотя бы одно исследуемое устройство обладает надежной (или хотя бы не дырявой) защитой?

К сожалению, стопроцентно удостовериться в том, что на флешке применяется AES-256-XTS, невозможно с одной лишь «абракадаброй» hexdump’а на руках. Шифротекст AES-XTS (как и любого современного корректно реализованного шифра) выглядит как криптографически случайный шум, не имеет повторов, не содержит сигнатур, заголовков или «магических байтов». Он статистически не отличается от случайных данных.

Можно лишь проверить алгоритм по косвенным признакам, например, энтропии. 

Здесь мы видим максимально возможную энтропию в 8.0 (и это на 15 гигах): такое значение с большой вероятностью указывает на AES-XTS. В свою очередь, Optimum compression составляет 0%, то есть данные несжимаемы, что также соответствует AES-XTS.

Другие показатели тоже косвенно подтверждают применение заявленного шифрования. Но ключевое слово здесь «косвенно». 

Вскрываем устройство 

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

Деликатные меры не дали результата, и я переключился в «режим Халка». Первым делом я разломал пластик около порта USB, освободив, как минимум, одну сторону. Потом с небольшим усилием потянул за кольцо, и процесс сдвинулся с мертвой точки. 

Защита от «рептилоидов»

К моему удивлению, все внутренности устройства были обернуты золотистой фольгой.

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

Раздеваем флешку 

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

Ничего не поделаешь, продолжаем избавляться от защитного покрытия: главное — случайно не удалить вместе с компаундом часть SMD-компонентов. У меня не было под рукой азотной кислоты, так что пришлось действовать методом «физического брутфорса» — плоской отверткой.

Часть элементов все же отошла вместе с компаундом, однако флешка все равно продолжала работать (видимо, удалили «ненужные» понижающие/повышающие резисторы).

Изучаем чип 

Чип памяти BGA тоже отделился от флешки — теперь не посмотришь, в каком виде хранятся данные в покое . А вот чип управления оказался более стойким: он все равно принимал корректный код и отделял правильный пин-код от неправильного. 

Это PHISON PS2251-13-Q. Поиск по гуглу показал интересный результат. Как оказалось, исследователи Сергей Скоробогатов и Ольга Ларина в 2021 году уже препарировали линейку криптофлешэк Kingston со всех сторон и даже проводили ренгтеновское исследование.

Общий вывод того исследования: в целом эта линейка сильно защищена, но уязвима перед атаками NAND mirroring, когда выполняется копирование бит в бит всей флешки для оффлайн-брутфорса.

Выводы

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

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

Хотя в большинстве протестированных устройств есть все необходимые базовые компоненты: металлический корпус и чип (пусть и китайский) с поддержкой AES-256-XTS, BGA NAND-чипы и прочее. Нужно лишь перенастроить управляющий i560-N200C на соответствующее шифрование, капнуть эпоксидкой, завернуть внутренности в фольгу и приварить корпус. Это не сильно повлияло бы на себестоимость устройства, зато в разы повысило бы безопасность. 

«Зарубежные аналоги» тоже не лишены слабых мест, но все же выдерживают высокие стандарты безопасности не только на бумаге. Словом, за державу обидно.

Мой обзор не претендует на истину в последней инстанции. Например, я не исследовал i560-N200C, так как у меня не оказалось нужного адаптера для программатора. Если кто-то из читателей работал с таким чипом, пожалуйста, поделитесь в комментариях. 

Навскидку приобретение таких устройств кажется бесполезной тратой денег. Дорогие флешки за 15–20 тысяч рублей не отличаются по формату и содержанию от устройств стоимостью в 2 тысячи рублей. Если нет разницы, зачем переплачивать за бренд?


P.S. Для совсем хардкорных экономщиков есть еще вот такой вариант за 200 рублей: 

Если эта статья наберет 100 000 лайков сделаем обзор на Хабре ☺

Еще ненавязчиво приглашаю всех в свой Telegram-канал, где вы найдете массу интересного по теме реверс-инжиниринга: http://t.me/glinkinivan 


PURP — Telegram-канал, где кибербезопасность раскрывается с обеих сторон баррикад

t.me/purp_sec — инсайды и инсайты из мира этичного хакинга и бизнес-ориентированной защиты от специалистов Бастиона

Комментарии (106)


  1. Arhammon
    20.01.2026 10:13

    У меня не было под рукой азотной кислоты

    Не оправдание, сейчас с маркетплейсов привезут любой элемент набора не очень юного химика)


    1. HydrAttack Автор
      20.01.2026 10:13

      так то да, но хотелось крови кучи осколков)


  1. zurabob
    20.01.2026 10:13

    Я кончиками пальцев когда-то касался разработки подобной защищенной флешки, интересно ваше мнение:

    • в ТЗ было AES ECB, но каждый сектор шифровался с новым IV, который неким путем получался из номера сектора, это криптостойко?

    • какой смысл в медной фольге, если она никуда не подключена, а корпус и так из намного более толстого алюминия?

    • чем поможет тупая заливка компаундом, который несложно удалить, без неких тамперов, которые стирают ключ при вскрытии? Выходит с т.з реальной криптостойкости разница лишь в режиме AES, который оказался косячным и несложно меняется?

    • я правильно понял, что реальный ключ формировался не только из пароля, но и чего-то, привязанного к чипу, например UID, поэтому пересадка чипа не помогла, хотя и не очень понятен смысл, ведь зная пароль, можно просто его набрать.


    1. xSVPx
      20.01.2026 10:13

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

      И вообще, как оно в принципе работает ? Части ключей хранятся в памяти и при пропадании питания всё окирпичивается ? Т.е. если разрядился аккумулятор всё - каюк всем данным ?


      1. HydrAttack Автор
        20.01.2026 10:13

        Ключи храняться в энергонезависимой памяти, поэтому сброс питания тут не поможет. Проверено!

        Тампер, по сути, как ввод неправильного пин-кода 10 раз - контакт разорван - ключ шифрования удалился.


        1. xSVPx
          20.01.2026 10:13

          Ну так отпилю я аккумуляторы и как потеряв питании вы будете что-то стирать ? Или разряжу их просто в ноль.

          От механических действий защитить того кто специально готовился вряд ли реально. Только если ему не на чем тренироваться.


          1. venanen
            20.01.2026 10:13

            Хранить ключ в энергозависимой памяти с коротким временем жизни, в питание которой последовательно включен тампер. Обойти такое можно только если знать, где эти тамперы, сверлить корпус не задевая тамперов, и то не очевидно.
            Тут в другом дело - эта флешка, по сути, представляет собой хранилище для секретных, но некритических файлов. Сомневаюсь, что чертежи ядерной боеголовки из пентагона кто-то потащит на такой флешке - это чтобы простой человек не копирнул ее по тихому.


          1. inkelyad
            20.01.2026 10:13

            Ну так отпилю я аккумуляторы и как потеряв питании вы будете что-то стирать ? Или разряжу их просто в ноль.

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


        1. MaFrance351
          20.01.2026 10:13

          А если по анализу потребления тока посмотреть, а потом последовательно вводить пароли и в случае чего сразу вырубать? Или при вводе правильного и неправильного кода оно не сильно отличается, чтобы какую-то закономерность выявить?


          1. Spyman
            20.01.2026 10:13

            Там же ограничение на 10 попыток везде. Иначе первые флешки которые по uart отдают - правильный или неправильный пароль введён - брутились бы на раз два.


            1. MaFrance351
              20.01.2026 10:13

              Имею в виду анализировать потребление и сбрасывать питание, прежде чем счётчик попыток успел инкрементироваться, по аналогии с тем, как сбрасывают фьюзы на некоторых МК. Интересно, каково там в этом плане.

              Конечно, хочется надеяться, что производитель сначала увеличивает счётчик, потом проверяет пароль и, если он правильный, сбрасывает это число и разрешает доступ, но как там на самом деле?


        1. Hrr_2
          20.01.2026 10:13

          Есть ли защита от непреднамеренного ввода? Кнопки в кармане нажались или кто-то специально так сделает и привет. Например, если там холодный кошелек


          1. YMA
            20.01.2026 10:13

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


            1. Hrr_2
              20.01.2026 10:13

              Все равно будет неприятно узнать, что ваша презентация, которую вы везли через океан, испорчена


          1. MaFrance351
            20.01.2026 10:13

            А ещё эти кнопочки после выработки числа нажатий обожают то не прожиматься, то выдавать двойной клик.


      1. zurabob
        20.01.2026 10:13

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


        1. MaFrance351
          20.01.2026 10:13

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


      1. event1
        20.01.2026 10:13

        С антивскрытием вообще непонятно зачем оно

        Есть два уровня:

        1. узнать, что устройство было вскрыто. То есть, если злоумышленник поигрался с вашим устройством, вы об этом узнаете и замените или устроите расследование

        2. помешать злоумышленнику исследовать и скомпрометировать устройство. Это трудно, потому что разработчики хитрые, а исследователи ещё хитрее


        1. xSVPx
          20.01.2026 10:13

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


          1. event1
            20.01.2026 10:13

            Он в любом случае найдет способ обмануть сенсоры

            Да, если у него есть неограниченное время и ресурсы. В киберсеке принято делить злоумышленников по уровню мотивации и доступных ресурсов. Соответственно, модели угроз для конкретных устройств строятся с учётом ресурсов потенциальных взломщиков.

            Но ведь всё это не будет работать против подготовленного злоумышленника

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


            1. xSVPx
              20.01.2026 10:13

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


              1. event1
                20.01.2026 10:13

                если ты такое используешь, то очевидно готовишься со спецслужбами как-то конфликтовать

                Кроме любителей из гаража и сотрудников существуют ещё примерно 100500 разных потенциальных заинтересованных лиц с разными ресурсами и квалификацией. Пользователь выбирает устройство подходящее именно для его модели угроз. И для его уровня паранойи.

                Против васи из гаража у тебя есть стеклянная входная дверь

                стеклянная дверь не поможет, если вы обронили флешку на улице или в такси, например.


                1. xSVPx
                  20.01.2026 10:13

                  Какой вообще может быть кейс для использования такой флешки. Один можете назвать ? Лучше, конечно два.

                  Кому-то зачем-то надо носить куда-то кучу данных очень секретных и там в какой-то чужой компьютер как-то пихать. Потому как если это его компьютер, лучше будет ключи в нем и оставить. А лучше и данные тоже :).

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

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

                  По делу то как это использовать ? В каких сценариях?


                  1. aborouhin
                    20.01.2026 10:13

                    1. Храним на ней ключ для шифрования диска своего компьютера (это я выше писал).

                    2. Храним на ней ключи шифрования / SSH / ЭЦП / базу менеджера паролей и т.п. на случай, если своего компьютера под рукой нет (в отпуск уехал, не взял с собой), а срочно понадобилось и придётся воспользоваться чужим / свежекупленным.

                    3. Отправляем с ней курьера получить документы у контрагента. Курьер и условная секретарша, которая ему их копирует, в шифровании понимают примерно ничего и что-то там на месте каким-то софтом шифровать не умеют, а так всё просто, дурак справится пин ввести - но если он флэшку пролюбит в процессе перевозки, риски меньше.

                    4. Держим на ней бекап чего-то чувствительного, который в случае чего сможет открыть человек, которому не надо устанавливать отдельный софт, передавать ключ, а достаточно хоть голосом просто продиктовать пин (в том же сценарии из п. 2 не сами ищем в отпуске чужой/новый комп, а оставляем флэшку другу/помощнику и при ЧП сообщаем ему пин и ЦУ, что делать).

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

                    В каждом из этих случаев есть свои риски, когда оно всё равно не поможет, но каждый из них закрывает определённый сценарий в модели угроз, и если такая защита по итогам оценки рисков признана достаточной - то почему нет.


                    1. Hrr_2
                      20.01.2026 10:13

                      1. Носим документы с работы домой и обратно


                      1. xSVPx
                        20.01.2026 10:13

                        Шифруете и носите. Там и тут у вас могут быть любые алгоритмы и любой софт шифрования, любые ключи. Зачем это аппаратно делать устройством непонятно как работающем, если можно проверенным софтом ?


                    1. xSVPx
                      20.01.2026 10:13

                      1-2 листочек в сейфе ничем ведь не хуже.

                      3. С той стороны вам шифруют криптостойко все документы используя те алгоритмы что надо, а не неизвестно что. С этой разкриптовываете.

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

                      5.Не храним пароли где попало, храним в отдельном аппаратном устройстве защищенным пином и пальцем.


                      1. aborouhin
                        20.01.2026 10:13

                        1-2 вводить бинарный файл ключа с листочка неудобно... и тащить с собой в отпуск сейф тяжело :(

                        3 - с той стороны такое не умеют и учить их вообще не моя головная боль.

                        4 - требует софта и человека, способного его осилить. В конторе в основном реально, а если это просто друг-гуманитарий - ну его, пусть пин вводит, с ним ещё на следующих этапах намучаешься :)

                        5 - вот эта флэшка и есть такое устройство.


                      1. inkelyad
                        20.01.2026 10:13

                        5 - вот эта флэшка и есть такое устройство.

                        Она для этого слишком сложная. Да и передача секретов через файловую систему - нехорошо выглядит.

                        Тут нужен нормальный протокол, чтобы ключики 'с такого устройства' попадали туда, где они будут использоваться, более непосредственно. И с применением шифрования на канале, чтобы прослушка USB/клавиатуры (вдруг в злонамеренный USB хаб 'флешку' воткнут?) к утеканию секрета не приводило.


                      1. xSVPx
                        20.01.2026 10:13

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


                      1. inkelyad
                        20.01.2026 10:13

                         Хорошее устройство для паролей отдает их по одному и только нужные. 

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


                      1. xSVPx
                        20.01.2026 10:13

                        Ну как бы увы но да. И эта штука для такого малоприспособлена.


                  1. event1
                    20.01.2026 10:13

                    Да мне-то откуда знать? Хранить что-то ценное, наверное. Ключ от Биткойн-кошелька, где деньги лежат. Если делают такие флешки, значит кто-то их покупает. Значит, кому-то нужны


                    1. xSVPx
                      20.01.2026 10:13

                      Как-то яб зассал неизвестно на чем его хранить. Напечатать на бумажке спокойнее гораздо.

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

                      Я пытаюсь понять, может мне такое надо. Вдруг.


          1. StjarnornasFred
            20.01.2026 10:13

            Он в любом случае найдет способ обмануть сенсоры.

            Один отдельно взятый злоумышленник (или группа) на одном отдельно взятом устройстве - нет. Это говорит лишь о теоретической возможности.


          1. d3d11
            20.01.2026 10:13

             Единственное что тут могло бы помочь - целиком кастомное устройство, серийное дает возможность тренироваться на других копиях.

            Кстати, сереьезные HSM так и делают - каждое устройство имеет уникальную разводку платы, герметизированный корпус с внутренним избыточным давлением, и датчик давления. По падению давления определяется вскрытие корпуса и данные стираются.


            1. HydrAttack Автор
              20.01.2026 10:13

              вот это я понимаю серьезный подход к делу)


            1. igormu
              20.01.2026 10:13

              Вскрывать в барокамере?


              1. YMA
                20.01.2026 10:13

                Современные датчики давления весьма точные, как угадать, какое именно давление в корпусе? Причем оно может быть разное в разных экземплярах (прописываться при инициализации).


          1. Hrr_2
            20.01.2026 10:13

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


      1. Arhammon
        20.01.2026 10:13

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


        1. xSVPx
          20.01.2026 10:13

          Подменят просто на клон и всё.


          1. inkelyad
            20.01.2026 10:13

            Т.е, дополнительно - устройство должно храниться в Tamper Evident упаковке. Или by design такие средства включать.

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


            1. xSVPx
              20.01.2026 10:13

              Нене, о другом речь, пока писаешь тебе поменяют твое устройство на другое в которое ты потом наберешь пин и он придет кому надо "по смс".


              1. inkelyad
                20.01.2026 10:13

                пока писаешь тебе поменяют твое устройство

                Так во именно. Используя упомянутые средства ты поймешь, что подменили. Потому что Большой Сургучной Печати твоей организации на флешке не висит.


          1. Arhammon
            20.01.2026 10:13

            А смысл? Надо получить же и ключ и содержимое? И чтоб не поднять тревогу наверно.


            1. YMA
              20.01.2026 10:13

              Клон может не хранить данные, а просто передать введенный код по радио/сотовой связи злыдню, утащившему ранее настоящую флешку. И тот получает доступ к данным…


              1. Arhammon
                20.01.2026 10:13

                Или не получает, ну симка упала в период охлаждения, дрон рядом пролетел или еще что, а вот что с флешкой что-то не то все уже знают...


      1. StjarnornasFred
        20.01.2026 10:13

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

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


    1. Kwelly
      20.01.2026 10:13

      в ТЗ было AES ECB, но каждый сектор шифровался с новым IV, который неким путем получался из номера сектора, это криптостойко?

      Режим ECB не использует iv, возможно Вы реализовывали другой режим или самописный режим.

      ECB в других режимах используется как одна из функций функция, но помимо неё добавляются дополнительные обработки.

      По криптостойкости - сложно сказать, нужно подробнее смотреть на саму реализацию.


      1. zurabob
        20.01.2026 10:13

        Да, конечно, запутался в аббревиатурах, давно дело было. Конечно был режим CBC, ECB это вообще не применимо, даже не мог представить, что в таком режиме кто-то реально шифрует.


      1. R4WABR
        20.01.2026 10:13

        А почему бы не придумать свой метод шифрования данных?


        1. d3d11
          20.01.2026 10:13

          Потому что он будет дырявым.


          1. YMA
            20.01.2026 10:13

            Можно и недырявый ;) Беру Blueray диск или флешку большого объема, заполняю случайными данными. Делаю вторую копию этого диска, отдаю контрагенту.

            Шифрование далее тупое как пробка - XOR с содержимым диска + указание на смещение. Без получения доступа к диску не взламывается даже теоретически, классический шифроблокнот. Если шифрование и расшифровку проводить на устройстве, не подключенном к сети - то и злыдни не смогут ничего сделать.


            1. d3d11
              20.01.2026 10:13

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


              1. YMA
                20.01.2026 10:13

                Почему не применима? Да, получается не очень удобно - на каждом устройстве, где мы используем флешку - должна быть копия "ключа", но в теории возможно.

                Плюс - незаметно спереть такой мегаключ размером в десятки гигабайт сложнее, чем отловить пароль кейлоггером и передать любым способом злыдням.


                1. d3d11
                  20.01.2026 10:13

                  на каждом устройстве, где мы используем флешку - должна быть копия "ключа"

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


                  1. rombell
                    20.01.2026 10:13

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

                    В нынешних условиях, видимо, это аналог цепляния хэша ключа ко всем сообщениям в чатиках.

                    Жаль только, посадят для профилактики


                    1. d3d11
                      20.01.2026 10:13

                      Тогда были ещё распространены серверы ключей, где можно было привязать свой публичный ключ PGP к своему емейлу. И типа почтовый клиент соединяется с сервером ключей и берет оттуда ключ собеседника, и как бы прозрачно все асимметрично шифруется (в идеале). Но опять же доверие к серверу ключей. Либо если ключ собеседника подписан ключом УЦ - то доверие к УЦ.


                      1. rombell
                        20.01.2026 10:13

                        Да, именно поэтому ключи буквально разбрасывались повсюду. Но всё равно лучший способ - личная встреча.


                    1. d3d11
                      20.01.2026 10:13

                      Жаль только, посадят для профилактики

                      История несколько летней давности. Тогда у меня ещё был аккаунт ВК. Мы с другом переписывались в личных сообщениях ВК, используя PGP. Т.е. натурально в сообщениях отправлялось

                      === BEGIN PGP MESSAGE ===
                      ...
                      === END PGP MESSAGE ===

                      И как то мой друг имел общение с сотрудниками органов, по совершенно постороннему поводу. И в конце сотрудники ему дружески посоветовали прекращать такие адские переписки в ВК.


                      1. rombell
                        20.01.2026 10:13

                        Именно. В былинные времена пытались продавить идею всеобщего шифрования почты. "Если ты один шифруешь переписку, тебя видно издалека; если все шифруют - все незаметны". Не взлетело.


            1. litalen
              20.01.2026 10:13

              Так это шифр Вернама.


    1. HydrAttack Автор
      20.01.2026 10:13

      С фольгой лучше чем без нее) дополнительная защита аля сетка Фарадея (грубо). Я думаю, тут уместно будет привести пример, когда в кошельках делают фольгированные карманы для защиты от кражы RFID
      Компаунд нужен, так как не всегда есть химикаты под рукой и не факт, что они помогут. А если мы гвоорим про "дикую природы", где есть пару минут на копирование, это будет существенным препятствием
      Ключ формировался рандомно и не зависел от пароля. Меняем пароль - флэшка продолжает работать.


      1. zurabob
        20.01.2026 10:13

        когда в кошельках делают фольгированные карманы для защиты от кражы RFID

        Кошельки не из проводящего материала, поэтому аналогия не та. Тут скорее про монашку и свечку, одна клетка Фарадея внутри другой..

        где есть пару минут на копирование, это будет существенным препятствием

        Тогда я совсем не понял, чем это будет препятствовать, если в чипе памяти та же информация, что и можно считать без вскрытия. Чем еще может помочь компаунд?

        Ключ формировался рандомно и не зависел от пароля. Меняем пароль - флэшка продолжает работать.

        Тогда зачем нужен пароль, если он не часть ключа? В моем тз было, что ключ делается из пароля и шифрование в режиме CBC(я ошибся с названиями) с IV производным от номера сектора.


        1. czz
          20.01.2026 10:13

          Тогда зачем нужен пароль, если он не часть ключа? 

          Чтобы можно было менять пароль, не перешифровывая все данные. Паролем шифруется ключ, ключом шифруются данные. При смене пароля перешифровываем только ключ. В luks так, например.


    1. d3d11
      20.01.2026 10:13

      каждый сектор шифровался с новым IV, который неким путем получался из номера сектора

      Это режим XTS, созданный специально для дискового шифрования (шифрования файловых систем).

      я правильно понял, что реальный ключ формировался не только из пароля, но и чего-то, привязанного к чипу, например UID

      По хорошему должен быть задействован hardware salt + salt для ключа.


  1. HydrAttack Автор
    20.01.2026 10:13

    Тогда я совсем не понял, чем это будет препятствовать, если в чипе памяти та же информация, что и можно считать без вскрытия. Чем еще может помочь компаунд?

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

    Тогда зачем нужен пароль, если он не часть ключа? В моем тз было, что ключ делается из пароля и шифрование в режиме CBC(я ошибся с названиями) с IV производным от номера сектора.

    ответ выше


    1. zurabob
      20.01.2026 10:13

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


  1. Last26
    20.01.2026 10:13

    Отличная работа! Отличная статья...спасибо)


    1. HydrAttack Автор
      20.01.2026 10:13

      Спасибо большое)


  1. Alex-Freeman
    20.01.2026 10:13

    Первую из рассмотренных "российских" флешек можно купить на Али в разы дешевле (возможно и вторую тоже).

    Скрытый текст
    Не было целью найти самую дешевую, первое что открыл
    Не было целью найти самую дешевую, первое что открыл

    Стоило бы в обзор включить флешки, от компаний основной профиль которых защищенные накопители/флешки типа iStorage datAshur PRO2 и DataLocker Sentry K350. Хотя Kingston IronKey подозрительно похож на iStorage datAshur предыдущего поколения, скорее всего именно iStorage их делает для Kingston.

    Скрытый текст


    1. xSVPx
      20.01.2026 10:13

      А в чем вообще пойнт подобной флешки ? Почему ключи нельзя иметь в точках присутствия и шифровать все насквозь. Помнится винда умела так делать из коробки (хотя и очень некриптостойко, но можнож какой-то свой софт иметь).

      Самый большой риск - потерять. И тут какбы если ключей на флешке нету, то это гораздо лучше, чем если они есть.

      Пин не панацея. Его между прочим угадать можно. Совершенно случайно.

      ЗЫ. А вообще было бы отлично иметь транспортный модуль аппаратный. Записываешь файлы, делишь на две части и отдаешь двум курьерам. Хотя.... софт делящий файлы на четные и нечетные байты, и собирающий потом обратно дело совершенно несложное.


      1. aborouhin
        20.01.2026 10:13

        А в чем вообще пойнт подобной флешки?

        У меня на такой ключик BitLocker для расшифровки диска ноута живёт (ну и всякое другое по потребности, но прежде всего он). Доп. уровень защиты на случай, если я по независящим от меня обстоятельствам лишусь и ноута, и этой флэшки.


      1. Alex-Freeman
        20.01.2026 10:13

        Пин не панацея. Его между прочим угадать можно. Совершенно случайно.

        Ну допустим у меня пин на iStorage diskAshur Pro2 16 символов. Хотите попробовать угадать c 10 попыток? А да, там еще есть пин, при вводе которого ключи шифрования стираются сразу, он короче, всего 6 цифр, смотрите его не угадайте )


    1. HydrAttack Автор
      20.01.2026 10:13

      Да, datAshur производится Кингстоном. У меня у самого есть такая предыдущего поколения
      А по компаний РФ - не могу не подтвердить, не опровергнуть.


    1. aborouhin
      20.01.2026 10:13

      IronKey подозрительно похож на iStorage datAshur предыдущего поколения

      Как владелец горстки Datashur'ов подтверждаю - это он и снаружи, и внутри. Но раз в Кингстоне обнаружен AES-XTS, то это Datashur Pro, а не обычный. В обычном CBC, в случае Datashur это всё детально в документации прописано.

      P.S. Пользуясь случаем, вопросик @HydrAttack - если у Вас Кингстон в разобранном виде ещё под рукой лежит, можете маркировку и размеры аккумулятора написать? У моих Datashur'ов через ~10 (!) лет практически ежедневного использования аккумуляторы наконец деградировали, иногда приходится подзаряжать, надолго оставляя в USB-порте, и всё равно хватает ненадолго. Учитывая зверскую цену новых флэшек - надо бы у китайцев подобрать что-то подходящее на замену, но два раза раскурочивать не хочется.


      1. HydrAttack Автор
        20.01.2026 10:13

        281323 3.7V
        38mAh 0.14Wh
        20250228 VI P/2


        1. aborouhin
          20.01.2026 10:13

          Огромное спасибо! Точно такой маркировки на Али не нашёл, но должна подойти вот эта, попробую заказать.


          1. HydrAttack Автор
            20.01.2026 10:13

            да всегда пожалуйста) обращайтесь ;)


    1. zurabob
      20.01.2026 10:13

      Этот китайский корпус продается отдельно и недорог. Именно на нем и делался проект, где я участвовал, но плата и софт были полностью свои и не на китайских чипах, как на фото ТС. Но корпус конечно совсем китайский, пришлось полностью его обмерять и в 3Д переводить, поскольку производитель вообще никакой информации не давал, даже при больших закупках.


  1. event1
    20.01.2026 10:13

    Исследование хорошее, но выводы не вполне корректны. Всё-таки кингстон делает сертифицированное устройство, а первые два "отечественных" конкурсанта просто мамой клянутся и крест целуют на том, что они безопасные. При таких вводных, тот факт что вам не удалось восстановить данные, кроме устаревшего формата bmp — уже достижение.


    1. HydrAttack Автор
      20.01.2026 10:13

      Восстанавливали бмп и тифф, по тексту есть вопросу, но теоретически возможножно.
      А Вы какие бы выводы сделали? я не с подколом спрашиваю, а действительно интересно понять.


      1. event1
        20.01.2026 10:13

        1. Первые два устройства для "кота в мешке" на удивление хороши. Я честно ожидал, что за 4к восстановить данные не составит труда

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


      1. StjarnornasFred
        20.01.2026 10:13

        А Вы какие бы выводы сделали?

        Ну смотрите. Данные шифруются, по неверному пин-коду удаляются, восстановить обычными средствами невозможно. Для того, чтобы хоть как-то хоть что-то восстановить, потребовалось много времени, трудоёмкие изыскания высококвалифицированного ИТ-специалиста, применение специального ПО - и в итоге восстановилось неточное подобие исходных данных. От физической атаки защита оказалась полной - даже после применения аналогичных изысканий, специального аппаратного обеспечения и навыка ловких рук ничего считать не удалось. Очевидных бэкдоров и подобных уязвимостей не нашлось. Гипотетически возможна атака с кейлоггером в корпусе, но она не выглядит реалистично, да и сам кейлоггер подходящих размеров и формы вряд ли существует.

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


  1. MaFrance351
    20.01.2026 10:13

    Интересно. Ожидал, что в дешёвых экземплярах шифрования вообще не будет или будет, но проприетарное. Слишком уж запомнились предыдущие подобные исследования.

    У меня не было под рукой азотной кислоты, так что пришлось действовать методом «физического брутфорса» — плоской отверткой.

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


    1. HydrAttack Автор
      20.01.2026 10:13

      Ооо, спасибо. закупимся


      1. MaFrance351
        20.01.2026 10:13

        Растворители тоже можно намного более попсовые. Необязательно, чтобы пластик растворялся с шипением, словно от крови Чужого. Можно, например, вымочить изделие в банальном ацетоне, компаунд превратится в резиноподобную массу, которая уже расковыривается ковырялками.


        1. Alex-Freeman
          20.01.2026 10:13

          Не, ацетон там не поможет, там эпоксидный компаунд с наполнителем.


          1. MaFrance351
            20.01.2026 10:13

            А нагрев помогает?


            1. Arhammon
              20.01.2026 10:13

              Зависит от компаунда - какие-то могут при определенной температуре очень сильно отвердеть, мож пластификаторы испаряются или какая-то химическая магия...


              1. MaFrance351
                20.01.2026 10:13

                Интересно.

                Клавиатуру от банкомёта я разобрал именно промышленным феном и долгим и упорным ковырянием. Была залита некоим голубым компаундом, похожим на эпоксидку, но потвёрже.


  1. LanMaster
    20.01.2026 10:13

    Хорошей добавкой было бы "двойное дно" n-уровневое.


  1. retab
    20.01.2026 10:13

    В целом какие можно сделать выводы:

    Российские "криптофлешки" банальный маркетинговый развод.
    Почти всегда это Китай, под видом РФ.
    Недокументированные возможности
    Устаревавший и подверженный уязвимостям AES-256-ECB

    А про сами флешки в целом: чем сложнее устройство, тем больше возможным уязвимостей можно в ней найти. Как итог - риск раскрытия конф инфы.

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

    А так просто и сердито:

    1. Обычная флешка (~$10)

    2. VeraCrypt

    3. Зашифрованный том:

      AES-256 + Serpent + Twofish

      SHA-512 для хеша пароля

      PIM = 485

    4. Скрытый том внутри

    5. Сильный пароль (20+ символов)

    6. keyfile на отдельном носителе

    7. Не хранить флешку и keyfile вместе

    P.S. Но не забываем, что если кто-то знает пароль, то всегда есть не иллюзорная возможность, что будет использован криптоанализ с помощью резинового шланга.


    1. d3d11
      20.01.2026 10:13

      Битлокер не безопасен.


      1. retab
        20.01.2026 10:13

        Я скажу больше: если спецслужбы хотят ваши данные и готовы применить силу, то никакая криптография не поможет.


        1. d3d11
          20.01.2026 10:13

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


  1. Lord_of_Rings
    20.01.2026 10:13

    Если эта статья наберет 100 000 лайков

    Покажите мне статью на Хабре с 100 тыс лайков


    1. HydrAttack Автор
      20.01.2026 10:13

      уговорили, если уж так интересно, так и быть, сделаем обзор на тот брелок ;)


      1. StjarnornasFred
        20.01.2026 10:13

        Как ни странно, но - вполне себе средство защиты. Едва ли его так легко спилить/разбить и не повредить при этом саму флешку. От серьёзных хакеров не спасёт, но от просто любопытных глаз - вполне себе. Другое дело что он слишком привлекает внимание и повышает число этих самых любопытных глаз...


  1. inkelyad
    20.01.2026 10:13

    <посмотрел на обсуждение>

    Ну вот. Теперь (какая от этого практическая польза - непонятно, но наверное весело) хочется статью о 'криптоконейнере' в который ты натурально бумажку с ключами закрываешь, а он ее уничтожает, если неправильно вскрыть питаешься/неправильно PIN вводишь.


    1. YMA
      20.01.2026 10:13

      https://www.t-ss.ru/sejf-genij-ustrojstvo-unichtozheniya-pechatej-24-sht/ (снят с производства)

      https://metallicheckiy-portal.ru/articles/metmeb/seif/seifi_unichtojayshie_soderjimoe_ag_blackjack (какая-то подозрительная информация, нет и не было в продаже).

      То есть оно вроде есть, но как бы нет.


      1. inkelyad
        20.01.2026 10:13

        Не, это стационарное. Я про условно карманные варианты.


        1. YMA
          20.01.2026 10:13

          Такого не встречал (незанятая идея для kickstarter, однако). Отец рассказывал, что для уничтожения секретных листков на ходу у них в составе оборудования были кофемолки.

          Так что можно взять за базу портативную кофемолку Xiaomi с аккумулятором и доработать ;))) бумагу и флешки без корпуса оно одолеет.


  1. HydrAttack Автор
    20.01.2026 10:13

    Ну и на сладкое ;)
    Каждая флэшка имеет уникальный серийный номер. Если вы забыли код, свяжитесь с нами и мы отправим вам 10-битный динамический пароль.


    1. d3d11
      20.01.2026 10:13

      С этого надо начинать ))