13 апреля 2015 года в Интернете прогремела новость о «новой» уязвимости, касающейся всех версий Windows. Как выяснилось позже, об уязвимости известно с 1997 года. Заключается она в том, что при попытке открыть файл на сервере запросом вида file:///[ip-addr]/file — происходит обращение по протоколу SMB. Первым, что делает система – это пытается авторизоваться на сервере от лица текущего пользователя, т.е. передаёт логин и пароль текущей сессии.

Компания Cylance SPEAR, опубликовавшая данную уязвимость выпустила утилиту – ложный SMB-сервер, который записывает все попытки авторизоваться на нём. Так же предложив использовать zarp в качестве ARP-Spoofer’а и перенаправления порта на входящий порт прокси сервера mitmproxy, который в свою очередь использует самописный скрипт на Питоне, делающий HTTP перенаправление на SMB сервер. Однако данную атаку можно провести и с использованием вышеуказанного SMB сервера и Ettercap с установленным модулем dns_spoof, предварительно настроив iptables и `etter.dns`.

Как найти уязвимость.
Уязвимость кроется в библиотеки URLMon.dll. Чтобы быстро проверить какие активные приложения в системе подгружают данную библиотеку – достаточно запустить утилиту Listdlls от SysInternals, которая сдампит в файл все подгружаемые библиотеки текущих процессов.
Затем отсортировать, оставив лишь нужные, а далее уже смотреть в таблицу импорта и открывать отладчик чтобы посмотреть в каком месте вызывается уязвимая функция.

Список уязвимых функций Windows API:
• URLDownloadA
• URLDownloadW
• URLDownloadToCacheFileA
• URLDownloadToCacheFileW
• URLDownloadToFileA
• URLDownloadToFileW
• URLOpenStream
• URLOpenBlockingStream

Кроме вышеперечисленного уязвимость наследуется и в .NET приложениях, использующих класс WebBrowser.

Эксперимент.
Для проверки уязвимости была развёрнута машина с ОС Windows 7 и вторая с Kali Linux.
Конфигурация сети:
• Windows 7 – 192.168.1.4
• Kali – 192.168.1.3
• Gateway – 192.168.1.2

В качестве экспериментального ПО был выбран клиент OneDrive последней версии. Работать будем с Kali Linux.

Алгоритм действий следующий:
1. Запускаем zarp и выбираем опцию перенаправления порта с 80 на 8080, т.к. после спуфа – жертва будет обращаться именно на 80й порт, что нам ничего не даст.

image001
image002

2. Следующим шагом будет ARP-Spoofing, будем врезаться между 192.168.1.4 (Windows) и 192.168.1.2 (Gateway)

image004

3. Теперь необходимо поднять фейковый SMB сервер – SMBTrap2.py, который будет ожидать подключения и вести лог.

image005

4. Осталось лишь поднять прокси который будет отслеживать HTTP запросы – ответы к Kali и обрабатывать их на специальном написанном сервере, который ничего не делает, лишь отправляет HTTP ответ с кодом 302, который и перенаправит жертву на вредоносный URL — file:///[Kali-ip]/file

image010

5. Жертва запускает OneDrive.

image008

Данное приложение использует .NET компонент WebBrowser для аутентификации пользователя, что позволяет эксплуатировать уязвимость.

6. Заходим в Kali и смотрим лог SMBTrap

image010

Получен NTLM хэш, восстановив который получим пароль – toor.

Another way.
Чтобы увеличить КПД необходимо взглянуть на файл redirect_server.py в папке smbtrap. Данный скрипт представляет обыкновенный сервер, который после любого запроса к нему отдаст код 302 и перенаправит на SMB сервер. Постараемся немного модифицировать его:

image012

Работает очень просто:
1. Поднимается веб-сервер на порту 8080 (если не задан другой)
2. Далее User-Agent и сверяем его со списком уязвимых браузеров
3. Если браузер совпал – перенаправляем на SMB
4. Если не совпал – отдаём сообщение о том, что он использует «неправильный» браузер

image014

Алгоритм действий всё тот же:
1. Запускаем zarp или ettercap
2. Запускаем спуф
3. В zarp’e включаем перенаправление портов
4. Запускаем smbtrap2.py
5. Запускаем redirect_server.py

image016