Сетевые атаки наподобие WPAD Injection, HTTP/WSUS MITM, SMB Relay очень эффективны и полезны в тех случаях, когда вы хотите атаковать не в лоб, а зайти со стороны.
Автор: Justin Warner
Сетевые атаки наподобие WPAD Injection, HTTP/WSUS MITM, SMB Relay очень эффективны и полезны в тех случаях, когда вы хотите атаковать не в лоб, а зайти со стороны. Существует множество кейсов, когда злоумышленники удаленно проникают глубоко в сети, используя вышеуказанные методы. Схожий функционал активно используется и во вредоносных программах. Яркий тому пример - Duqu 2.0.
Я познакомился с этими техниками еще более подробно благодаря наглядным примерам и историям от двух людей – Джеффа Диммока (Jeff Dimmock, @bluscreenofjeff) и Энди Роббинса (Andy Robbins, @_wald0), с которыми работаю в ежедневном режиме. После ознакомления с утилитой Responder я изучал возможности фреймворка MITMf, содержащего набор утилит, упрощающих реализацию MITM-атак. Если вы не знакомы с этими инструментами, рекомендую почитать следующие статьи:
Вредонос Duqu 2.0, упомянутый выше, содержит в себе отдельный модуль, в котором не используются публичные утилиты и внешние скрипты. К сожалению, длительное время инструменты, предназначенные для реализации MiTM/relay атак, требовали физического присутствия в локальной сети жертвы. В начале 2015 года Кевин Робертсон (Kevin Robertson, @kevin_robertson) выпустил сетевую утилиту Inveigh, написанную на PowerShell на базе сырых сокетов (raw sockets). В Inveigh был реализован ограниченный набор техник, включая LLMNR spoofing, MDNS spoofing и SMB relay. Inveigh помогает реализовать многие виды удаленных атак, а также позволяет эмулировать угрозы по этим направлениям. Если вы заинтересовались темой эмуляции угроз, у Рафаэля Маджа (Raphael Mudge) есть много идей и мыслей на эту тему.
Атака через протокол WPAD
Прежде чем перейти к изучению MITM-атак через систему WSUS, рассмотрим протокол WPAD (Web Proxy Auto-Discovery), который используется клиентами Microsoft Windows для автоматического конфигурирования локальных настроек прокси-сервера. В компаниях этот протокол позволяет клиентам автоматически настраивать прокси для доступа к корпоративной сети. Процесс конфигурации выглядит следующим образом:
Проверяем, получены ли настройки прокси по протоколу DHCP?
Если нет, подключаемся к серверу “wpad.domain.com” и считываем настройки.
В случае неудачи в шаге 2 используем широковещательную рассылку через NetBIOS (NBT-NS) для поиска сервера с именем "WPAD”.
Если сервер найден, выполняем запрос http://<SERVER>/wpad.dat для получения настроек.
Из-за отсутствия верификации ответов в шаге 3 любой клиент домена или локальной подсети может обработать запрос и выдать себя за настоящий сервер. Затем фальшивый сервер выдает вредоносный файл конфигурации для настройки целевой машины, после чего становится возможным перехват всего трафика через фальшивый прокси-сервер. Далее можно пойти несколькими путями, чтобы атаковать жертву «сбоку»:
·
Осуществить MITM-атаку через iframe (HTA, Exploit, Java Applet и т. д.).
Осуществить атаку при помощи социальной инженерии и HTTP Auth Prompt.
Реализовать WSUS Injection.
и так далее.
MITM-атака через систему WSUS
Windows Server Update Services (WSUS) – система, позволяющая компаниям управлять и выпускать обновления из централизованного интранет-хранилища. На конференции Blackhat USA 2015 Пол Стоун (Paul Stone, @pdjstone) и Алекс Чапман (Alex Chapman), исследователи из компании Context, рассказали об очевидной проблеме, связанной с тем, что обновления передаются по сети в незашифрованном виде. Если не используется протокол SSL, то злоумышленник может осуществить MITM-атаку и подсунуть вредонос вместо настоящего обновления. Кстати, по умолчанию в WSUS используется протокол HTTP. Единственное препятствие: обновление должно быть подписано компанией Microsoft. Проблема решается при помощи утилиты PsExec от SysInternals, которая позволяет выполнять произвольные Windows-команды из подписанного бинарного файла. На конференции данная атака была продемонстрирована, что меня очень сильно заинтриговало, поскольку этот небольшой недочет в настройках позволял получить доступ в самое сердце корпоративной системы.
Более подробную информацию по теме атак через WSUS можно узнать из данной статьи. Также рекомендую ознакомиться с утилитой, специально написанной под эту задачу. Тема незашифрованных обновлений весьма обширна и выходит за рамки данной статьи. Пытливые умы могут ознакомиться с исследованием Джоша Пита (Josh Pitt, @midnite_runr) и утилитой Backdoor Factory (BDF).
Объединяем все вместе
Пока что на данный момент я лишь рассказывал об известных уязвимостях и стратегиях атак. Самое интересное начинается в тот момент, когда мы объединим все вместе на базе платформе наподобие Cobalt Strike и сможем выполнить MITM-атаку из-за пределов локального интранета. Предполагается, что мы имеем извне доступ к хосту, присоединенному к домену.
Предупреждение: Это лишь демо пример. В реальной жизни существует масса ограничений, которые потребуют изменения образа действий. Главная мысль в том, что эти, на первый взгляд продвинутые, техники доступны не только исполнителям с самописными утилитами, спонсируемым государством. Обычные исследователи также могут эмулировать действия злоумышленников и эффективно выполнять подобного рода атаки.
1. Поиск возможностей
Первый шаг – идентификация ошибок в конфигурации системы WSUS. В большинстве утилит, предназначенных для удаленного администрирования, эта задача решается посредством вытаскивания настроек WSUS из реестра. Затем мы считываем настройки прокси-сервера через Internet Explorer. Если URL для WSUS имеет вид HTTP://<SERVER>, и в браузере настроена автоматическая конфигурация прокси, мы можем продолжать дальше!
В реестре нужно посмотреть содержимое следующих ключей:
HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\WUServer
HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU\UseWUServer
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings (Примечание: Если 5 байт – четный, весьма вероятно, что в Internet Explorer настроено автоматическое обнаружение прокси-сервера, где доступен протокол WPAD).
Рисунок 1: Считываем настройки WSUS
Рисунок 2: Используются автоматические настройки (см. 5 байт)
После всех проверок при помощи команды ARP ищем дополнительные хосты внутри подсети, которые могут стать нашей целью.
Рисунок 3: Ищем дополнительные хосты
2. Сетевые манипуляции
Очевидная проблема, возникающая во время атаки – как использовать нашего агента в качестве прокси-сервера для WSUS. Для решения этой задачи мы можем использовать полезную нагрузку Beacon, входящую в состав Cobalt Strike, где есть возможность обратного обращения портов (reverse port forward). Во время подмены настроек для WPAD мы указываем браузеру жертвы на наш «прокси-сервер», представляющего собой обратный туннель на наш C2 сервер, находящийся вне локальной сети. Затем при помощи передающих SOCKS-туннелей (SOCKS forward tunnel) мы можем вернуть трафик обратно жертве и вместе с поддельными пакетами подсунуть обновления под WSUS.
Рисунок 4: Настройка портов и туннелей
3. Заражение
После подготовки туннелей настала очередь осуществления атаки. Вначале я конфигурирую вредоносную полезную нагрузку и запускаю скрипт WSUSpectProxy. WSUSpectProxy берет полезную нагрузку из файла payload.ini (см. пример ниже). По рекомендации других исследователей я использовал PsExec.exe с определенным набором параметров. Я запустил powershell.exe в комбинации с командами «net user» и «net localgroup», чтобы добавить поддельного пользователя с именем «bob».
Рисунок 5: Содержимое файла payload.ini
Теперь настала очередь запустить Invoke-Inveigh с набором флагов, чтобы формализовать то, что мы хотим от скрипта:
-IP <IP-адрес, откуда будет заражение жертвы> : IP-адрес для привязки сырого сокета.
-NBNS Y : Включение NBNS-спуфинга.
-LLMNR Y : Включение LLMNR-спуфинга.
-HTTP Y : Включение HTTP-сервера для раздачи файлов WPAD.dat.
-SMB N : Отключение SMB relay.
-StatusOutput Y : Вывод текущего статуса.
-Tool 2 : Эта настройка позволяет запускать скрипт из внешних утилит. Настройки агента Empire хорошо работают для Cobalt Strike.
-SpooferIPsReply <TARGET IP> : IP-адрес цели или перечень целей в формате CSV.
-WPADAuth Anonymous : Не выводим окно для авторизации в WPAD.
-WPADIp <ProxyHost> : IP-адрес хоста, где запущена команда rportfwd.
-WPADPort 8080 : порт команды rportfwd.
Эта команда выполняет целенаправленное заражение через протокол WPAD. В файле WPAD.dat браузер жертвы перенаправляется на ранее созданный туннель, играющего роль внешнего контура, который перенаправляет далее на наш С2 сервер и порт 8080.
Рисунок 6: Запуск Invoke-Inveigh с нужными параметрами
4. Передача поддельного обновления
Как только все условия для MITM-атаки выполнены, мы перехватываем запрос на обновление и передаем клиенту поддельный файл. Поскольку обновление критическое, файл, скорее всего, будет запущен, и в системе жертвы появится новый пользователь, что позволит нам зайти со стороны.
Рисунок 7: Передача поддельного обновления на компьютер жертвы
Рисунок 8: Так выглядит полученное обновление глазами жертвы
Предупреждение: при добавлении нового пользователя жертва может заподозрить неладное. Тем не менее, для демонстрационных целей этот метод вполне подходит. В боевых условиях рекомендую запускать агента только в памяти (возможно, при помощи PowerShell).
Ура! Теперь у нас есть доступ, и мы можем запустить агента Beacon, используя только что добавленного пользователя.
Рисунок 9: Запуск агента Beacon
Как устранить уязвимости
Существует множество брешей, способствующих успешной реализации подобного рода атак. Несмотря на то, что информация об этих проблемах появилась довольно давно, я продолжаю наблюдать отсутствие осведомленности и недостаточность мер, предпринимаемых для защиты сетей. В частности, ошибки в конфигурациях. В дополнении к мерам, необходимым для устранения уязвимостей, существует множество методов детектирования действий даже самых изощренных злоумышленников.
Правильная настройка WPAD
Чтобы правильно настроить WPAD, необходимо добавить записи DNS A или CNAME с именем «wpad» во внутренний DNS-сервер. Эта мера предотвратит выполнение широковещательных запросов по протоколам MDNS/LLMNR. В дальнейшем вы сможете отключить автоматические настройки через групповую политику, если в данном функционале нет необходимости.
Устранение уязвимостей в WSUS
Любые обновления должны ВСЕГДА проводиться через защищенные соединения (как минимум, через протокол SSL). Существует множество проектов, связанных с заражением через сетевые обновления. Многие плохие ребята пользуются этой техникой, чтобы зайти в систему жертвы со стороны. Конкретно для WSUS я нашел полезный материал, где описана правильная настройка: https://technet.microsoft.com/en-us/library/hh852346.aspx#bkmk_3.5.ConfigSSL.
Детектирование атак
Предупредительные средства – лишь необходимый минимум. По мере роста организации и внедрения иерархии мер безопасности, аудит и расследование инцидентов также должны стать частью системы безопасности. Здесь важна постоянная готовность к вторжению, когда специалисты по безопасности работают не только над предотвращением угроз, но и владеют инструментами детектирования и реагирования на инциденты. Есть парочка средств, которые напрямую не связаны с данной статьей, но помогают в обнаружении подозрительной активности.
PowerShell v5
В PowerShell v4 и v5 есть множество средств, которые придутся вам по душе. Я уже упоминал о некоторых из них, когда рассказывал про запуск Inveigh.ps1, но этот скрипт не имеет отношения детектированию, а только к вторжению. Относительно детектирования рекомендую вам ознакомиться со статьей, где описано множество мер касательно этой темы. Всем, кто так или иначе связан с безопасностью и хочет улучшить качество детектирования сетевых угроз, следует обратить особое внимание на атаки, реализуемые при помощи PowerShell. Подобного рода вторжения сейчас на подъеме, и эта тенденция вряд ли изменится в ближайшее время.
Мониторинг журналов событий (Event Log)
Качественный мониторинг журнала событий особенно в большой организации может быть затруднительным. Однако полученные результаты не следует недооценивать. По моему мнению, затраченное время полностью окупается. Чтобы вовремя обнаружит атаку, описанную в этой статье, следует начать мониторинг журнала c:\windows\windowsupdate.log. Журнал системных событий от источника “WindowsUpdateClient” и идентификатором 17 или 19 покажет вам имена загруженных/установленных обновлений. Сравнивая эти журналы по отдельным хостам, вы сможете обнаружить (поддельные) обновления, которые были установлены на выбранных системах.
Мониторинг DNS-логов также будет полезен. Предположим, что в организации полностью отключили использование протокола WPAD. В случае появления новой рабочей станции с включенным протоколом, по журналу вы увидите ошибки при попытке преобразовать имя WPAD.
Подписка на WMI-события
Наша команда является большим сторонником использования WMI во всех аспектах. В одном из недавних твитов Мэтт Гребер (Matt Graeber) предоставил WMI-сигнатуры, которые полезно мониторить. Джаред Аткинсон (Jared Atkinson) разработал утилиту Uproot, в сущности являющуюся системой IDS, которая работает на базе подписки на WMI-события. Система серверная и не требует установки никаких агентов.
В нашем случае, мы могли бы создать фильтр WMI-событий, и система срабатывала бы при изменении вложенных ключей, имеющих отношение к сетевому профилю, в разделе “HKEY_USERS\<USER-GUID>\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Wpad”. Далее можно подписаться на события, связанные с созданием или модификацией файла wpad.dat, который временно помещается в директорию “<USER APP DATA>\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\”.
Если вас заинтересовала возможность фильтрации WMI-событий, рекомендую ознакомиться с утилитой WmiEvent.
Заключение
Несмотря на то, что в этой статье я не рассказал о новых утилитах, моей целью было собрать воедино уже старые инструменты и продемонстрировать интересный подход к осуществлению MITM-атак.
Успешных исследований!
Ладно, не доказали. Но мы работаем над этим