Фальшивые флешки

Превращаем 4 ГБ в 1 ТБ.

Многие мои знакомые начали спрашивать по поводу выбора нового накопителя, одним из примеров они приводят "особые" флешки объемом от 1 и более ТБ на популярных маркетплейсах (сами найдете кому интересно).

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

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

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

Эксперимент

Повторяем и учимся, учимся и повторяем.

Внимание: данная часть статьи написана исключительно в образовательных целях.

Для начала попробуем повторить такое же устройство на подобие тех, которые делают недобросовестные продавцы. В моём случае я использую Qumo Optiva 01 на 4 ГБ, однако для повтора эксперимента можно использовать практически любой внешний накопитель, в данный момент мы будем работать только над файловой системой.

Заметка: Все шаги указанные далее выполняются под пользователем root (или sudo) GNU/Linux . Если вы будете собираетесь повторить данный опыт, рекомендую перейти сразу к концу главы и скачать полный скрипт.

  1. Создаём образ файловой системы FAT на 1 ТБ (блок по 1024 байт):
    # mkdosfs -C temp_file 1000000000
  2. Получаем размер устройства в байтах:
    # drive_size=$(blockdev --getsize64 /dev/sdX)
  3. Переводим размер устройства в МиБ:
    # spoofing_size=$(($drive_size / 1024 / 1024))
  4. Копируем созданный образ на устройство:
    # dd if=temp_file of=/dev/sdX bs=1M count=${spoofing_size}

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

  5. Создаём красивую метку "1TB_DRIVE" на новую файловую систему (опционально):
    # env MTOOLS_SKIP_CHECK=1 mlabel -i /dev/sdX ::1TB_DRIVE

Полный текст скрипта вы можете найти в репозитории e1digitalpf/spoof-my-drive на GitHub.

Принцип работы

Глубокий анализ FAT32.

Файловая система FAT32 логически разделена на три части:

  1. Загрузочный сектор.
  2. Таблица размещения файлов (собственно FAT).
  3. Область данных.

В загрузочном секторе находится блок (BIOS parameter block) хранящий информацию о типе файловой системы и физических характеристиках носителя.

Именно в BPB область 0x1A-0x1D (4 байта) представляет собой число логических секторов FAT, таким образом максимальное их число:
FF FF FF FF16 = 4 294 967 29610 секторов.

С учетом того что один сектор занимает 512 байт:
4 294 967 296 * 512 = 2 199 023 255 552 байт или 2 ТиБ.

Таким образом максимальный объем FAT32 не может занимать более 2 ТиБ. Именно эту ёмкость накопителя часто указывают недобросовестные продавцы поддельных накопителей.

Заключение

Почему так происходит и как с этим бороться.

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

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

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

При помощи данной флешки удалось "обмануть" различные ПК со следующими версиями Microsoft Windows:

Более того, большая часть инструментов GNU/Linux (особенно графических) также не показывала реальных значений накопителя. Крайне позабавила реакция утилиты GNOME Disks: она показывает 460167017314.0% заполнения диска.

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

Рекомендации

Как найти хороший накопитель и избежать мошенничества.

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

  1. Только что купленный накопитель (будь то флешка, HDD или SSD) вскоре после покупки лучше отформатировать, диагностировать и протестировать различными интрументами и утилитами. Такой подход позволить избежать неприятных ситуаций и внезапных поломок когда оно вам действительно понадобится, а также даст возможность вернуть деньги за плохой товар.
  2. Покупать новый накопитель лучше всего у публичного дилера, сверяя с характеристиками, заявленной на официальном сайте производителя. Таким образом вы не сможете уберечь себя от брака (от него уберегает 1 пункт), но точно не даст мошенникам вас обмануть.
  3. Помимо этого, при выборе накопителя не стоит сильно жадничать. И хотя любой накопитель рано или поздно умирает (поэтому и нужен бекап), данный момент может произойти сильно позже если выбирать оптимальный для себя вариант, а не просто самый бюджетный.

Будьте осторожны и всем хороших покупок!