Стаття показує, як можна обдурити уважного користувача, знайомого з основами соціальної інженерії, стежить навіть за розширеннями файлів і жодною мірою не закликає до використання даної інформації в незаконних цілях. Мета – запустити виконуваний файл, видавши його за текстовий документ в zip-архіві, а якщо запустити навряд чи вийде, то не дати розпакувати або приховати файл.
На хабрі вже є стаття про можливості зміни порядку читання 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 символів (наприклад, <). Однак, це не врятує від перегляду архіву WinRAR-му. Що ж робити? Додати null-байт початок в імені файлу!
Тоді станеться маленьке диво: WinRAR 5.3 b відобразить файл як папку «Локальний диск», перейшовши в яку всередині архіватора, WinRAR автоматично розпакує наш файл з RLO символом в імені (ім’я для розпакування бере з першого входження!) в директорію «Temp\ Rar$*» і дбайливо покаже в провіднику виконуваний файл текстовий документ! Зауважте, що після закриття архіватор дбайливо спробує видалити цей файл як будь-який інший розпакований в тимчасовий каталог.
Можна одночасно зробити його таким, щоб він відкривався архіватором Провідника. Тоді замість null треба прописати інший недрукований символ.
Резюме
- 7-Zip 15.06 відображає ім’я файлу з першого входження (з RLO символом). Виконуваний файл представлений як текстовий документ. Навіть якщо у вас включено відображення розширень зареєстрованих типів файлів. Подвійний клік у вікні архіватора запустить виконуваний файл.
- Внутрішній архіватор Windows не бачить даного конкретного файлу. Інші файли бачить.
- WinRAR 5.3 b відображає файл як папку «Локальний диск», перейшовши в яку всередині архіватора, WinRAR автоматично розпаковує наш файл з підмінним ім’ям (з RLO символом) – ім’я для розпакування бере з першого входження в директорію «Temp» і дбайливо показує в провіднику виконуваний файл текстовий документ!
Але не все так сумно. 7-Zip, наприклад, аж до версії 9.20 відображає ім’я файлу з іншого входження. Однак, якщо ім’я файлу у другому входження не міняти і зробити не Zip-архів, а якийсь рідкісний, з цих трьох архіваторів відкривається тільки 7-Zip, і покласти його в наш Zip-архів (не знаходите знайомий шаблон – реліз зламаною програми, куди кладеться зазвичай купа архівів з файлами readme.txt?), тоді атака вийде і на нього. Більше того, версія 9.20 також некоректно відображає ім’я файлу, що починається з null, і не дасть його ні прочитати, ні розпакувати.
Також в огляді не вказано архіватор WinZip. Якщо чесно, він мені не сподобався розміром, зовнішнім виглядом і рекламою в незареєстрованої версії. Проте в плані попередження користувача про виконуваних файлів і файлів з неправильними іменами він витримав всі перевірки.