01.03.2016

Схема удаленной MITM-атаки на систему WSUS

image

Сетевые атаки наподобие 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 для автоматического конфигурирования локальных настроек прокси-сервера. В компаниях этот протокол позволяет клиентам автоматически настраивать прокси для доступа к корпоративной сети. Процесс конфигурации выглядит следующим образом:

  1. Проверяем, получены ли настройки прокси по протоколу DHCP?

  2. Если нет, подключаемся к серверу “wpad.domain.com” и считываем настройки.

  3. В случае неудачи в шаге 2 используем широковещательную рассылку через NetBIOS (NBT-NS) для поиска сервера с именем "WPAD”.

  4. Если сервер найден, выполняем запрос 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).

http://www.sixdub.net/wp-content/uploads/2016/02/Screen-Shot-2016-02-03-at-8.21.49-PM.png

Рисунок 1: Считываем настройки WSUS

http://www.sixdub.net/wp-content/uploads/2016/02/Screen-Shot-2016-02-03-at-7.53.17-PM.png

Рисунок 2: Используются автоматические настройки (см. 5 байт)

После всех проверок при помощи команды ARP ищем дополнительные хосты внутри подсети, которые могут стать нашей целью.

http://www.sixdub.net/wp-content/uploads/2016/02/Screen-Shot-2016-02-03-at-8.00.10-PM.png

Рисунок 3: Ищем дополнительные хосты

2.       Сетевые манипуляции

Очевидная проблема, возникающая во время атаки – как использовать нашего агента в качестве прокси-сервера для WSUS. Для решения этой задачи мы можем использовать полезную нагрузку Beacon, входящую в состав Cobalt Strike, где есть возможность обратного обращения портов (reverse port forward). Во время подмены настроек для WPAD мы указываем браузеру жертвы на наш «прокси-сервер», представляющего собой обратный туннель на наш C2 сервер, находящийся вне локальной сети. Затем при помощи передающих SOCKS-туннелей (SOCKS forward tunnel) мы можем вернуть трафик обратно жертве и вместе с поддельными пакетами подсунуть обновления под WSUS.

http://www.sixdub.net/wp-content/uploads/2016/02/Screen-Shot-2016-02-03-at-7.56.53-PM.png

Рисунок 4: Настройка портов и туннелей

3.       Заражение

После подготовки туннелей настала очередь осуществления атаки. Вначале я конфигурирую вредоносную полезную нагрузку и запускаю скрипт WSUSpectProxy. WSUSpectProxy берет полезную нагрузку из файла payload.ini (см. пример ниже). По рекомендации других исследователей я использовал PsExec.exe с определенным набором параметров. Я запустил powershell.exe в комбинации с командами «net user» и «net localgroup», чтобы добавить поддельного пользователя с именем «bob».

http://www.sixdub.net/wp-content/uploads/2016/02/Screen-Shot-2016-02-03-at-8.16.52-PM.png

Рисунок 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.

http://www.sixdub.net/wp-content/uploads/2016/02/Screen-Shot-2016-02-03-at-8.10.42-PM.png

Рисунок 6: Запуск Invoke-Inveigh с нужными параметрами

4.       Передача поддельного обновления

Как только все условия для MITM-атаки выполнены, мы перехватываем запрос на обновление и передаем клиенту поддельный файл. Поскольку обновление критическое, файл, скорее всего, будет запущен, и в системе жертвы появится новый пользователь, что позволит нам зайти со стороны.

http://www.sixdub.net/wp-content/uploads/2016/02/Screen-Shot-2016-02-03-at-8.23.15-PM.png

Рисунок 7: Передача поддельного обновления на компьютер жертвы

http://www.sixdub.net/wp-content/uploads/2016/02/Screen-Shot-2016-02-03-at-8.23.38-PM.png

Рисунок 8: Так выглядит полученное обновление глазами жертвы

Предупреждение: при добавлении нового пользователя жертва может заподозрить неладное. Тем не менее, для демонстрационных целей этот метод вполне подходит. В боевых условиях рекомендую запускать агента только в памяти (возможно, при помощи PowerShell).

Ура! Теперь у нас есть доступ, и мы можем запустить агента Beacon, используя только что добавленного пользователя.

http://www.sixdub.net/wp-content/uploads/2016/02/Screen-Shot-2016-02-03-at-8.34.26-PM.png

Рисунок 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-атак.

Успешных исследований!