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

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

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

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

После буквы «п» в режиме редактирования имени файла в контекстном меню проводника выберем «Вставить управляющий символ Юникода» и выберем RLO. В результате отображаемое имя файла изменится на «Об успexe.txt».

Далее заархивируем его. Я использовал самый популярный способ сжатия – Zip. И начнем открывать в разных архиваторах.

image
7-Zip 9.20/15.06

image
WinRAR 5.3

image
Встроенный в проводник Windows

Как видно, 7-zip сразу сдался, WinRAR порадовал стрелочкой, а встроенный в проводник архиватор не поддерживает RLO. Теперь думаем, а можно ли как-то и последними двумя архиваторами осуществить спуффинг? Для этого открываем заархивированный файл в HEX-редакторе, одновременно читая спецификацию формата ZIP.

При сжатии файла в zip имя файла дублируется 2 раза.

image
Первое вхождение

image
Второе вхождение

И вот здесь есть большое поле для творчества.

Во-первых, можно во втором вхождении затереть символы байта RLO. Тогда WinRAR отобразит имя файла «Об успexe.txt» и откроет его как текстовый документ. Однако же если пойти дальше изменить расширение .txt на .jpg, то вплоть до версии WinRAR 4.20 эта псевдокартинка будет запущена как приложение. В WinRAR 5.3b2 данной уязвимости уже нет.

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

Чтобы архиватор Проводника перестал видеть файл, достаточно в имени файла указать один из зарезервированных файловой системой NTFS символов (например, <). Однако, это не спасет от просмотра архива WinRAR-ом. Что же делать? Добавить null-байт в начало имени файла!

image

Тогда случится маленькое чудо: WinRAR 5.3b отобразит файл как папку «Локальный диск», перейдя в которую внутри архиватора, WinRAR автоматически распакует наш файл с RLO символом в имени (имя для распаковки берет из первого вхождения!) в директорию «Temp\ Rar$*» и заботливо покажет в проводнике исполняемый файл как текстовый документ! Заметьте, что после закрытия архиватор заботливо попытается удалить этот файл как любой другой распакованный во временный каталог.

image

Можно одновременно сделать его таким, чтобы он был читаем архиватором Проводника. Тогда вместо null надо прописать другой непечатаемый символ.

Резюме

  • 7-Zip 15.06 отображает имя файла из первого вхождения (с RLO символом). Исполняемый файл представлен как текстовый документ. Даже если у вас включено отображение расширений зарегистрированных типов файлов. Двойной клик в окне архиватора запустит исполняемый файл.
  • Внутренний архиватор Windows не видит данного конкретного файла. Другие файлы видит.
  • WinRAR 5.3b отображает файл как папку «Локальный диск», перейдя в которую внутри архиватора, WinRAR автоматически распаковывает наш файл с подменным именем (с RLO символом) – имя для распаковки берет из первого вхождения – в директорию «Temp» и заботливо показывает в проводнике исполняемый файл как текстовый документ!

Но не все так печально. 7-Zip, к примеру, вплоть до версии 9.20 отображает имя файла из второго вхождения. Однако, если имя файла во втором вхождении не менять и сделать не Zip-архив, а какой-то редкий, из этих трех архиваторов открываемый только 7-Zip, и положить его в наш Zip-архив (не находите знакомый шаблон – релиз сломанной программы, куда кладется обычно куча архивов с файлами readme.txt?), тогда атака получится и на него. Более того, версия 9.20 также некорректно отображает имя файла, начинающегося с null, и не даст его ни прочитать, ни распаковать.

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

Файл sample.zip – пример создания такого архива. Внутри – программа с иконкой блокнота, запускающая блокнот. Больше ничего не делает. Прячется от встроенного в проводник архиватора, заставляет автоматически распаковать WinRAR 5.3, отображает расширение .txt в 7-zip версии 15.

Еще один пример — Sample 2 для всех версий 7-zip, WinRAR 3.8, проводника Windows. Везде файл с расширением *.txt:

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


  1. Bringoff
    19.08.2015 11:29

    В Windows 10 стандартный архиватор вообще говорит, что архив пустой.


    1. Bringoff
      19.08.2015 13:05
      +1

      Прилетело письмо на почту:

      Приветствую, к сожалению ридонли, заинтересовал пост, автор поста без
      контактов. «Затестил в 7zip 9.15 beta — в архиве файл без расширения,
      при даблклике — не поддерживаемый метод сжатия для файла» | «WinRar
      3.80 — пустой архив». 7zip вообще не разархивирует, рар же пишет в лог
      "!: Невозможно создать
      ! Системе не удается найти указанный путь.
      !: Попытка исправить неверное имя файла
      "
      Было бы отлично попросить автора пересмотреть архив, мб он что-то напутал?


      1. VictorAl
        19.08.2015 18:52
        -1

        Читайте аннотацию: «Цель – запустить исполняемый файл, выдав его за текстовый документ в zip-архиве, а если запустить вряд ли получится, то не дать распаковать или скрыть файл
        Конкретно для 7-zip всех версий и одновременно для WinRAR v3.80 достаточно вставить RLO символ в название файла. Версия 3.80 RLO еще не умеет отображать в качестве стрелки. Чтобы добавить поддержку уязвимости WinRAR 5.3 и спрятать файл для встроенного в проводник архиватора, написал 0x00 в начало имени файла.
        Таким образом достигается невозможность распаковки в старых версиях 7-zip, так как иначе он отобразит расширение *.txt и не запустит файл.
        В архиве для демонстрации всего один файл. Можно встроить несколько. Одни файлы — прятать, другие — нет.
        — Вот еще один архив для всех версий 7-zip, WinRAR 3.8, проводника Windows. Везде файл с расширением *.txt: Sample 2


        1. Ubuntovod
          20.08.2015 07:27
          +2

          И не только Windows-архиваторы
          image


  1. ploop
    19.08.2015 12:13
    +20

    Как видно, 7-zip сразу сдался

    Просто он единственный корректно работает с юникодом :)


  1. georgich
    19.08.2015 12:15
    +8

    Как видно, 7-zip сразу сдался

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


  1. JetP1L0t
    19.08.2015 12:30
    +1

    MacOS — распаковывает exe и отображает txt со знаком вопроса вместо RLO
    Проводник WinXP и Win8.1 не отображает ничего
    WinRAR 5.10 отображает файл без имени, распаковывает exe с квадратиком вместо RLO
    Total Commander говорит что архив поврежден

    ИТОГО: не надёжный способ

    ЗЫЖ: ИМХО более надежно вписать в путь к файлу внутри архива с "..\файл.ехе", он не будет отображаться при просмотре, но всеми распаковывается на уровень выше текущей/целевой папки.


  1. vlivyur
    19.08.2015 13:15
    +2

    Неподдерживаемый метод сжатия для файла 'sample' — 7zip 9.20


  1. KawaiDesu
    19.08.2015 13:38

    UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP:
    Archive: sample.zip
    : mismatching «local» filename (¦Ю¦- TГTБ¦¬тАоtxt.exe),
    continuing with «central» filename version
    mapname: conversion of failed

    В листинге файл и его атрибуты видит, но имя не отображает.

    Archive Manager 3.10.2.1 файл в архиве не отображает вообще.


  1. Pinsky
    19.08.2015 15:10

    image

    Стандартная утилита бубунты.


    1. vlivyur
      19.08.2015 16:09

      opnSUSE'шный Ark то же самое показывает.


      1. cdkrot
        19.08.2015 23:15
        +3

        Ark — kde'шный, он не относится к какому-нибудь одному дистрибутиву. (как впрочем 95% софта под линукс).


        1. vlivyur
          20.08.2015 09:17

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


        1. vlivyur
          20.08.2015 11:13

          Вон ниже, кстати, и скриншот приложили и он совсем другое показывает.


    1. Extrapolator
      20.08.2015 11:00
      +1

      Kubuntu:

      image


      1. achekalin
        20.08.2015 14:42

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


        1. Extrapolator
          20.08.2015 16:21

          Тут написано 'Type: DOS/Windows executable', даже на шрифты смотреть не надо. Тем более, exe-шник на линуксе совсем не одним кликом запускается.


        1. Sykoku
          20.08.2015 17:29

          Будете смеяться, но это удобно. Даже был свой руссификатор с точками под символами с аналогичным начертанием (а, о, р, е, х и т.д.). Зачем? — бухгалтер в программе (еще под ДОС) оприходовала товар. Например, А1785Н-е. А вот найди его, если не знаешь, на каком языке эти буквы. Устать, если все варианты перебирать.


          1. achekalin
            20.08.2015 17:34

            Смеяться не буду. Наоборот, буду уважать, когда человек делает что-то сознательно, с целью.


  1. ploop
    19.08.2015 16:13

    $ 7z x sample.zip 
    7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
    p7zip Version 9.20 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)
    Processing archive: sample.zip
    Extracting  sample     Unsupported Method
    Sub items Errors: 1
    


  1. priv8v
    19.08.2015 17:49
    +1

    Внутри – программа с иконкой блокнота, запускающая блокнот.

    Если быть точным, то программа делает «ShellExecuteW» на «open» для «notepad.exe».
    Т.е:
    1. Это может быть не блокнот если в системе разбросаны (а вот хочу я так!) в разных местах вирусы с таким именем, то ваша программа может запустить нечто другое — то, что первым ей подсунет система, а это будет не факт что файл из system32.
    2. А он, собственно, может и не запуститься, если у меня непонятно что с ассоциациями расширений в системе.

    Так что вопрос о том, что делает ваша программа не так прост как кажется на первый взгляд.


  1. S0mnium
    19.08.2015 22:31

    Archive Manager Gnome
    В 1 архиве — даже распаковать не получается, во втором предлагает запустить под wine)


  1. Sykoku
    20.08.2015 09:50

    Sample-1

    Win 7 x64, WinRAR 5.30 beta2.
    Видится как txt. При попытке открыть — сообщение
    «Не удается проверить издателя. Вы действительно хотите запустить эту программу?»

    Far Manager 3.0.4400 / Total Commander 8.51 видят как EXEcutable


  1. jia3ep
    25.08.2015 11:11

    Ради интереса залил второй пример на VirusTotal (и не я первый). Выявляется Exploit.RTL-ZIP.Gen. Показатель выявления: 9/55.

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


    1. VictorAl
      25.08.2015 19:07

      Скорее всего сравнивается совпадение имен в структуре. Пробывал разные комбинации. Всё работает по-разному в разных архиваторах. Написал о более-менее общих.


  1. guai
    26.08.2015 12:38

    Всего-то надо расширение отдельной колонкой показывать


  1. greatvovan
    31.08.2015 11:49

    С 7-zip, действительно, фейл. А вы не пробовали связываться с автором или заводить фича-реквест для программы?


    1. VictorAl
      31.08.2015 20:48

      Автору информацию отправлял 09 августа, сейчас повторил.