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

Вы видите знакомый значок PDF-документа или картинки, дважды кликаете — и вместо отчёта или фото запускается вредоносная программа. Это не баг системы, а стандартное поведение Windows, macOS и Linux: значок определяется только по расширению в имени файла, а не по его настоящему содержимому. Злоумышленники используют это десятилетиями, и защита от такой маскировки требует не паранойи, а понимания механизма и пары привычек проверки.

Как на самом деле система выбирает значок

В современных операционных системах ассоциация «расширение → программа → значок» хранится в реестре (Windows) или базе данных UTI / Launch Services (macOS). Когда вы создаёте или скачиваете файл report.pdf, оболочка смотрит на суффикс .pdf, находит зарегистрированный обработчик (Adobe Reader, Edge, Preview) и подставляет его иконку. Содержимое файла при этом не анализируется — это быстрее и удобнее для легаitimate программ.

Последствий два:

  • Любой файл с расширением .pdf получит значок PDF-ридера, даже если внутри — исполняемый код.
  • Если в системе не зарегистрирован обработчик для какого-то расширения, файл получит стандартную иконку «неизвестного типа», но всё равно может быть запущен, если пользователь принудительно откроет его через подходящую программу.

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

Частейные техники маскировки

Двойные расширения

Классический приём: invoice.pdf.exe, photo.jpg.scr, document.docx.bat. По умолчанию Windows скрывает расширения для известных типов файлов, поэтому пользователь видит просто invoice.pdf с иконкой Adobe. При двойном клике запускается .exe — потому что система смотрит на последнее расширение.

В macOS и Linux поведение похоже: Finder и файловые менеджеры (Nautilus, Dolphin, Thunar) тоже отображают имя до последней точки, а тип определяют по полному суффиксу.

Скрытие расширения через Unicode-символы

Злоумышленники используют символы с обратным направлением письма (RLO, U+202E) или нулевой ширины. Имя photo[U+202E]exe.jpg визуально отображается как photogpj.exe или photo.jpg в зависимости от реализации рендеринга, но реальное расширение остаётся .exe. Современные браузеры и почтовые клиенты часто блокируют такие имена при скачивании, но в архивах или на флешках они могут пройти.

Подмена иконки внутри исполняемого файла

Любой PE-файл (Windows) может содержать ресурс с иконкой. Компилятор или редактор ресурсов позволяет встроить картинку от Adobe Reader, Word, папки или системного файла. При этом расширение остаётся .exe, .scr, .com, .pif, .bat, .cmd, .vbs, .js, .wsf, .msi — и значок выглядит абсолютно легально.

Полиглот-файлы и контейнеры

Существуют файлы, которые одновременно валидны как документ и как исполняемый код. Пример: ZIP-архив, начинающийся с PK-заголовка, но имеющий в конце PE-заголовок. Некоторые загрузчики запускают такой файл как программу, игнорируя ZIP-часть. Аналогично работают полиглот-PDF с встроенным JavaScript или эксплойтами парсера.

Ярлыки (.lnk, .url, .desktop) с аргументами запуска

Ярлык — это не исполняемый файл, но он указывает на цель (например, cmd.exe /c powershell -enc …) и может иметь любую иконку. В Windows 10/11 расширение .lnk скрыто всегда, даже если включено отображение расширений. Пользователь видит «Документ.pdf» с иконкой PDF, а при клике запускается цепочка команд.

Почему антивирус и SmartScreen не ловят всё

Антивирус сканирует файл по сигнатурам и эвристике. Если вредонос новый (zero-day), упакован нестандартным пакером или зашифрован, статический анализ может не сработать. SmartScreen в Windows проверяет репутацию файла в облаке: неизвестный файл, подписанный недоверительным сертификатом или вообще без подписи, получит предупреждение, но пользователь может нажать «Выполнить в любом случае». В macOS Gatekeeper проверяет нотаризацию и подпись разработчика — неподписанное приложение запустить сложнее, но не невозможно (Control-click → Open).

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

Практический алгоритм проверки перед запуском

Следуйте этой последовательности каждый раз, когда получаете файл извне (почта, мессенджер, скачивание, флешка, сетевая папка):

  1. Включите отображение расширений. В Windows: Проводник → Вид → Расширения имён файлов. В macOS: Finder → Настройки → Дополнительно → Показывать все расширения. В Linux: настройка файлового менеджера (обычно «Показывать расширения» или «Показывать скрытые файлы» для точечных файлов).
  2. Посмотрите на полное имя файла. Если после известного расширения идёт ещё что-то (.pdf.exe, .jpg.scr, .docx.bat) — это исполняемый файл. Не запускайте.
  3. Проверьте свойства файла (Windows) / Информацию (macOS). Правый клик → Свойства → вкладка «Подробности» или «Общие». В поле «Тип файла» будет написано реальное назначение: «Приложение», «Исполняемый файл», «Ярлык», «PDF-документ». Если написано «Приложение» или «Исполняемый файл», а вы ждали документ — не открывайте.
  4. Загрузите файл на VirusTotal или аналогичный агрегатор. Это бесплатно, не требует установки и проверяет 70+ антивирусных движков. Если хотя бы несколько детектов — отказ. Если 0/70, но файл неизвестен и не подписан — повышайте бдительность.
  5. Проверьте цифровую подпись (если есть). В Windows: Свойства → Цифровая подпись. Подпись должна быть валидной, издатель — известной компании, сертификат — не отозван. Неподписанные исполняемые файлы из внешних источников — высокий риск.
  6. Для документов: откройте в безопасном просмотрщике. PDF — в браузере (Chrome, Edge, Firefox имеют встроенные рендереры с песочницей) или в Adobe Reader с включённым Protected Mode. Office-документы — в Office Online / Google Docs / OnlyOffice / LibreOffice в режиме «Только чтение» или с отключёнными макросами. Не включайте макросы, если не уверены в источнике на 100%.
  7. Для архивов: распакуйте в изолированную папку и проверьте содержимое по пунктам 1–3. Не запускайте файлы прямо из архива — некоторые архиваторы передают исполнение ОС без полной проверки.

Инструменты для более глубокой проверки

Если файл подозрителен, но вы хотите разобраться (например, это корпоративный софт без подписи):

  • PE-bear / CFF Explorer / Detect It Easy — статический анализ PE-файлов: импорт, секции, ресурсы, энтропия, наличие упаковщиков (UPX, VMProtect, Themida). Позволяет увидеть, что файл делает, не запуская его.
  • strings (Linux/Windows Sysinternals) — поиск читаемых строк внутри бинарника: IP-адреса, URL, команды PowerShell, пути к реестру, base64-блоки.
  • CAPE Sandbox / ANY.RUN / Hybrid Analysis / Joe Sandbox — онлайн-песочницы для динамического анализа. Загружаете файл, получаете отчёт о сетевой активности, изменении файлов/реестра, запущенных процессах, MITRE ATT&CK-тегах. Бесплатные тарифы есть, но с очередью и лимитами.
  • sigcheck (Sysinternals) — проверка подписи, хешей (SHA256, MD5), версии, VirusTotal-хеша из командной строки.
  • HashCalc / 7-Zip / certutil — вычисление хеша для сверки с известными базами (VirusTotal, MalwareBazaar, внутренняя база организации).

Эти инструменты требуют навыков. Если вы не разбираетесь в PE-структуре или логах песочницы — остановитесь на пунктах 1–6 базового алгоритма и передайте файл ИБ-отделу или специалисту.

Сценарии: что делать в типичных ситуациях

Ситуация Действие Почему это работает
Получили «счёт.pdf» от неизвестного контрагента по почте Проверьте расширение → загрузите на VirusTotal → откройте в браузере, не в Adobe Исключает двойное расширение, даёт мнение 70+ АВ, браузерная песочница изолирует эксплойты парсера
Скачали программу с сайта разработчика, но нет подписи Сравните SHA256 с опубликованным на сайте / GitHub → проверьте в VirusTotal → запустите в песочнице (ANY.RUN) → при чистоте запускайте в изолированной VM Подтверждает целостность дистрибутива, исключает подмену на зеркале или MITM
Флешка от коллеги с «презентацией.pptx» Скопируйте на диск → проверьте расширение → откройте в PowerPoint Online / OnlyOffice / LibreOffice с отключёнными макросами Исключает .lnk-ярлыки и полиглот-файлы, макросы — основной вектор атак через Office
Файл «photo.jpg» весит 15 МБ, но не открывается в просмотрщике Проверьте расширение (возможно .jpg.exe) → strings / hex-редактор → поиск MZ/PE заголовка → VirusTotal Исполняемые файлы часто маскируют под картинки; заголовок MZ (4D 5A) выдаёт PE
Письмо от «банка» с вложением «statement.pdf» и просьбой включить макросы/запустить Не открывайте. Банки не просят запускать файлы. Сообщите в службу безопасности банка. Социальная инженерия: легатимация через бренд + срочность + действие пользователя

Ограничения метода «проверь сам»

Даже при соблюдении алгоритма остаются риски:

  • Zero-day эксплойты в парсерах документов. Вредоносный PDF/JPG/DOCX может сработать при простом открытии в уязвимой версии ридера. Решение: обновляйте ОС и софт вовремя, используйте браузерные вьюверы (они обновляются чаще и имеют песочницу).
  • Подписанные вредоносные файлы. Злоумышленники крадут или покупают EV-сертификаты (редко, но бывает) или используют легатимальные подписанные утилиты (Living-off-the-land: mshta.exe, regsvr32.exe, rundll32.exe, подписанные Microsoft). Подпись не гарантирует доброкачественность намерений.
  • Файлы, которые «чисты» статически, но скачивают полезную нагрузку при запуске. Статический анализ и VirusTotal могут не увидеть C2-адрес, если он генерируется алгоритмически (DGA) или приходит из внешнего конфига. Песочница помогает, но вредонос может детектировать виртуализацию и спать.
  • Ярлыки и .url-файлы с иконкой папки/документа. Они не исполняются напрямую, но передают управление системе. Проверка расширения тут не поможет — нужно смотреть свойства цели ярлыка.

Поэтому в корпоративной среде базовые привычки дополняются политиками: блокировка запуска неподписанных исполняемых файлов (AppLocker, WDAC, Gatekeeper), запрет макросов из интернета (Office Block Macros), изоляция вложений в песочницу на шлюзе, обучение сотрудников фишингу.

Частые ошибки, которые повышают риск

  • «Я вижу иконку PDF — значит это PDF». Иконка = расширение, расширение = имя. Имя можно подделать.
  • Отключение SmartScreen / Gatekeeper / Play Protect «потому что мешает». Это убирает слой репутационной защиты.
  • Запуск файлов прямо из архиватора (WinRAR, 7-Zip, архиватор macOS). Файл распаковывается во временную папку и запускается без вашего явного согласия на полный путь.
  • Включение макросов в Office «чтобы работало». Макросы — это код. Подписанный макрос от известного издателя — ок. Неподписанный извне — нет.
  • Доверие к VirusTotal 0/70 как к абсолютной гарантии. 0/70 означает «не детектируется известными сигнатурами прямо сейчас», а не «безопасен». Новые сэмплы попадают в базы за часы/дни.
  • Игнорирование обновлений ОС и браузера. Эксплойты для старых версий парсеров (PDF, JPG, фоны) работают без запуска исполняемого файла — достаточно открыть документ.

Резюме: главный принцип и следующий шаг

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

  1. Визуальный контроль: включены расширения, вы читаете полное имя до клика.
  2. Автоматическая репутация: SmartScreen / Gatekeeper / VirusTotal / антивирус на шлюзе и на хосте.
  3. Изоляция открытия: документы — в браузере или песочнице, исполняемые — только с валидной подписью и сверкой хеша, подозрительные — в VM / песочнице / ИБ-отдел.

Сделайте прямо сейчас: откройте настройки проводника / Finder и включите отображение всех расширений. Это бесплатно, занимает 10 секунд и устраняет 90% атак через двойные расширения. Остальное — привычка проверять перед запуском.

Материал носит информационный характер и не заменяет профессиональной консультации по информационной безопасности. При обнаружении подозрительной активности, потере данных или инциденте обратитесь к специалистам ИБ или в CERT/CSIRT вашей организации/страны.

PEFile.ru