Фальшивые флешки
Превращаем 4 ГБ в 1 ТБ.
Многие мои знакомые начали спрашивать по поводу выбора нового накопителя, одним из примеров они приводят "особые" флешки объемом от 1 и более ТБ на популярных маркетплейсах (сами найдете кому интересно).
И хотя ясно, что проблема заключается в тех самых торговых площадках, модерация которых не может проверять абсолютно всех продавцов на добросовестность, мне стало интересно разобраться как именно такие устройства работают и попытаться повторить (спойлер: в этом ничего сложного).
Данная статья разделена на три основных части: создание аналогичной флешки, разбора принципа её работы и собственные рассуждения о уязвимости. В качестве дополнения я также составил рекомендации для тех, кто собирается выбирать себе новое устройство и не знает ещё как правильно это делать.
Ничего подобного в Интернете я не нашёл (особенно в русскоязычном), надеюсь это кому-то окажется полезным.
Эксперимент
Повторяем и учимся, учимся и повторяем.
Внимание: данная часть статьи написана исключительно в образовательных целях.
Для начала попробуем повторить такое же устройство на подобие тех, которые делают недобросовестные продавцы. В моём случае я использую Qumo Optiva 01 на 4 ГБ, однако для повтора эксперимента можно использовать практически любой внешний накопитель, в данный момент мы будем работать только над файловой системой.
Заметка: Все шаги указанные далее выполняются под пользователем root (или sudo) GNU/Linux . Если вы будете собираетесь повторить данный опыт, рекомендую перейти сразу к концу главы и скачать полный скрипт.
-
Создаём образ файловой системы FAT на 1 ТБ (блок по 1024 байт):
# mkdosfs -C temp_file 1000000000 -
Получаем размер устройства в байтах:
# drive_size=$(blockdev --getsize64 /dev/sdX) -
Переводим размер устройства в МиБ:
# spoofing_size=$(($drive_size / 1024 / 1024)) -
Копируем созданный образ на устройство:
# dd if=temp_file of=/dev/sdX bs=1M count=${spoofing_size}Тут и происходит волшебство: через операнд
countмы записываем лишь ту часть образа, что помещается на устройство, пренебрегая остальной частью. В случае с другими файловыми системами данная операция была невозможна, однако в единственная необходимая FAT часть для работы находится в её первых КиБ данных. -
Создаём красивую метку "1TB_DRIVE" на новую файловую систему
(опционально):
# env MTOOLS_SKIP_CHECK=1 mlabel -i /dev/sdX ::1TB_DRIVE
Полный текст скрипта вы можете найти в репозитории e1digitalpf/spoof-my-drive на GitHub.
Принцип работы
Глубокий анализ FAT32.
Файловая система FAT32 логически разделена на три части:
- Загрузочный сектор.
- Таблица размещения файлов (собственно FAT).
- Область данных.
В загрузочном секторе находится блок (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:
- Microsoft Windows 11 Pro [10.0.22631]
- Microsoft Windows 10 Education [10.0.19043]
- Microsoft Windows 8.1 [неизвестно]
- Microsoft Windows 7 Home Basic [6.1.7601]
- Microsoft Windows XP Home Edition [5.1.2600]
Более того, большая часть инструментов GNU/Linux (особенно графических) также не показывала реальных значений накопителя. Крайне позабавила реакция утилиты GNOME Disks: она показывает 460167017314.0% заполнения диска.
Исключением для последнего стала консольная команда
lsblk которая показывает размер самого устройства и его
разделов, а не его файловой системы, что позволило моментально
определить его реальный размер.
Рекомендации
Как найти хороший накопитель и избежать мошенничества.
Данный набор общих советов и рекомендация позволит избежать если не всех проблем с выбором нового накопителя, но с большей её частью:
- Только что купленный накопитель (будь то флешка, HDD или SSD) вскоре после покупки лучше отформатировать, диагностировать и протестировать различными интрументами и утилитами. Такой подход позволить избежать неприятных ситуаций и внезапных поломок когда оно вам действительно понадобится, а также даст возможность вернуть деньги за плохой товар.
- Покупать новый накопитель лучше всего у публичного дилера, сверяя с характеристиками, заявленной на официальном сайте производителя. Таким образом вы не сможете уберечь себя от брака (от него уберегает 1 пункт), но точно не даст мошенникам вас обмануть.
- Помимо этого, при выборе накопителя не стоит сильно жадничать. И хотя любой накопитель рано или поздно умирает (поэтому и нужен бекап), данный момент может произойти сильно позже если выбирать оптимальный для себя вариант, а не просто самый бюджетный.
Будьте осторожны и всем хороших покупок!