На хабре уже есть статья про возможности изменения порядка чтения Unicode-символов с помощью байта RLO. В ней рассказывается, что, пользуясь стандартным проводником Windows, сложно заметить подмену (спуффинг) имени файла. В ней идет речь об укрытии реального расширения файла. Также есть статья о фичах встроенного в Проводник архиватора.
Мне, как человеку, всегда следящему за расширениями открываемых файлов, стало интересно, а есть ли программы, предупреждающие об этом? В частности, защищены ли архиваторы? И что могут сделать злоумышленники, чтобы обойти защиту.
В качестве подопытного возьмем исполняемый файл с расширением exe, назовем его «Об успtxt.exe».
После буквы «п» в режиме редактирования имени файла в контекстном меню проводника выберем «Вставить управляющий символ Юникода» и выберем RLO. В результате отображаемое имя файла изменится на «Об успexe.txt».
Далее заархивируем его. Я использовал самый популярный способ сжатия – Zip. И начнем открывать в разных архиваторах. 7-Zip 9.20/15.06 WinRAR 5.3 Встроенный в проводник Windows
Как видно, 7-zip сразу сдался, WinRAR порадовал стрелочкой, а встроенный в проводник архиватор не поддерживает RLO. Теперь думаем, а можно ли как-то и последними двумя архиваторами осуществить спуффинг? Для этого открываем заархивированный файл в HEX-редакторе, одновременно читая спецификацию формата ZIP.
При сжатии файла в zip имя файла дублируется 2 раза. Первое вхождение Второе вхождение
И вот здесь есть большое поле для творчества.
Во-первых, можно во втором вхождении затереть символы байта RLO. Тогда WinRAR отобразит имя файла «Об успexe.txt» и откроет его как текстовый документ. Однако же если пойти дальше изменить расширение .txt на .jpg, то вплоть до версии WinRAR 4.20 эта псевдокартинка будет запущена как приложение. В WinRAR 5.3b2 данной уязвимости уже нет.
Открыв файл с затертым во втором вхождении RLO во встроенном в проводник Windows архиваторе, можно наблюдать, что имя файла стало почти читаемым – не читаются только русские буквы. Чтобы имя стало читаемым, заменим их кодировку или напишем латинские. Однако, нам не надо, чтобы пользователь открыл программу как текстовый документ.
Чтобы архиватор Проводника перестал видеть файл, достаточно в имени файла указать один из зарезервированных файловой системой NTFS символов (например,