Атака на архиваторы. Скрываемся в одном архиве от трех программ

Статья показывает, как можно обхитрить внимательного пользователя, знакомого с азами социальной инженерии, следящего даже за расширениями файлов и ни в коей мере не призывает к использованию данной информации в незаконных целях. Цель – запустить исполняемый файл, выдав его за текстовый документ в 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
    0
    В Windows 10 стандартный архиватор вообще говорит, что архив пустой.
      +1
      Прилетело письмо на почту:
      Приветствую, к сожалению ридонли, заинтересовал пост, автор поста без
      контактов. «Затестил в 7zip 9.15 beta — в архиве файл без расширения,
      при даблклике — не поддерживаемый метод сжатия для файла» | «WinRar
      3.80 — пустой архив». 7zip вообще не разархивирует, рар же пишет в лог
      "!: Невозможно создать
      ! Системе не удается найти указанный путь.
      !: Попытка исправить неверное имя файла
      "
      Было бы отлично попросить автора пересмотреть архив, мб он что-то напутал?
        –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
          +2
          И не только Windows-архиваторы
          image
      +20
      Как видно, 7-zip сразу сдался

      Просто он единственный корректно работает с юникодом :)
        +8
        Как видно, 7-zip сразу сдался

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

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

          ЗЫЖ: ИМХО более надежно вписать в путь к файлу внутри архива с "..\файл.ехе", он не будет отображаться при просмотре, но всеми распаковывается на уровень выше текущей/целевой папки.
            +2
            Неподдерживаемый метод сжатия для файла 'sample' — 7zip 9.20
              0
              UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP:
              Archive: sample.zip
              : mismatching «local» filename (╨Ю╨▒ ╤Г╤Б╨┐тАоtxt.exe),
              continuing with «central» filename version
              mapname: conversion of failed

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

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

                Стандартная утилита бубунты.
                  0
                  opnSUSE'шный Ark то же самое показывает.
                    +3
                    Ark — kde'шный, он не относится к какому-нибудь одному дистрибутиву. (как впрочем 95% софта под линукс).
                      0
                      Так-то оно так, но в других дистрибутивах не проверял, там может быть совсем всё по-другому. Из последнего: убунтушный тарбол не считается архивом в сусе.
                        0
                        Вон ниже, кстати, и скриншот приложили и он совсем другое показывает.
                      +1
                      Kubuntu:

                      image
                        0
                        Вот даже радоваться или нет, не пойму. То, что шрифты некачественные (или, наоборот, качественно показывающие разницу между латинскими и русскими буквами схожего начертания) спасет самых внимательных, да.
                          0
                          Тут написано 'Type: DOS/Windows executable', даже на шрифты смотреть не надо. Тем более, exe-шник на линуксе совсем не одним кликом запускается.
                            0
                            Будете смеяться, но это удобно. Даже был свой руссификатор с точками под символами с аналогичным начертанием (а, о, р, е, х и т.д.). Зачем? — бухгалтер в программе (еще под ДОС) оприходовала товар. Например, А1785Н-е. А вот найди его, если не знаешь, на каком языке эти буквы. Устать, если все варианты перебирать.
                              0
                              Смеяться не буду. Наоборот, буду уважать, когда человек делает что-то сознательно, с целью.
                        0
                        $ 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
                          Внутри – программа с иконкой блокнота, запускающая блокнот.

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

                          Так что вопрос о том, что делает ваша программа не так прост как кажется на первый взгляд.
                            0
                            Archive Manager Gnome
                            В 1 архиве — даже распаковать не получается, во втором предлагает запустить под wine)
                              0
                              Sample-1

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

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

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

                                Там распознается именно попытка скрыть расширение файла? Не пробовали реакцию на другие варианты имени, когда расширение остается?
                                  0
                                  Скорее всего сравнивается совпадение имен в структуре. Пробывал разные комбинации. Всё работает по-разному в разных архиваторах. Написал о более-менее общих.
                                  0
                                  Всего-то надо расширение отдельной колонкой показывать
                                    0
                                    С 7-zip, действительно, фейл. А вы не пробовали связываться с автором или заводить фича-реквест для программы?
                                      0
                                      Автору информацию отправлял 09 августа, сейчас повторил.

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

                                    Самое читаемое