А АSaturday, 1 May 2021

Проводим пентест, часть 2 - сбор необходимой информации.

Всем привет.

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

Часть 2. Сбор необходимой информации.

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

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

Не забываем о людях.

Собирать информацию о целевых сервисах можно не только техническими средствами, но и с помощью социальной инженерии.  Основные  способы  сбора  информации  (подробнее в [2]):

  • Анализ оборудования и ПО, упоминающихся в вакансиях организации.
  • Получение  данных  посредством  общения  с  техническими специалистами организации.
  • Сбор сведений о закупаемом оборудовании и ПО из открытых источников (например, goszakupki.ru или prozorro.gov.ua).
  • Анализ информации, которую размещают сотрудники компании, и особенно технические специалисты, в социальных сетях.
  • Телефонные звонки сотрудникам от имени технического персонала.


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

Государственные  организации  обязаны  все  свои  заказы размещать в открытом доступе, поэтому ресурсы типа goszakupki.ru  являются  дополнительным  источником  информации. Например, среди заказов можно встретить лоты на продление лицензий на ПО. К лотам должно быть прикреплено техническое задание или аналогичный документ, из которого тоже можно почерпнуть массу полезной информации.

Серьезной  проблемой  для  информационной  безопасности могут стать социальные сети. Конечно, никто не будет размещать пароли или другую конфиденциальную информацию на своей странице. А вот телефонный номер, ICQ, личную почту очень даже может. Ну и само собой фотография лишней не будет.

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

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

На этом, я думаю, с социальной инженерией можно закончить и перейти к техническим способам сбора информации.

Осматриваемся в сети.

Для  сбора  информации  нам  снова  потребуется  Kali  Linux. Подключившись  к  сети,  первое,  что  мы  можем  сделать, это  посмотреть  вывод  команды  ifconfig.  Если  мы  получили IP-адрес по DHCP, то знаем размер подсети, в которой находимся,  и  можем  смело  приступать  к  сканированию. 

В случае если нам не выдали адрес, придется выставлять его самостоятельно. Для этого необходимо запустить сниффер и посмотреть, какой трафик «гуляет» по сети. В этом нам поможет Wireshark:



Наличие пакетов из и в сеть 192.168.1.х позволяет сделать вывод о том, какая адресация используется, а бродкасты дают возможность оценить размер сети и маску. IP-адрес  придется  выставлять  наугад,  разыскивая  свободный, рекомендую  начать  с  верхних  адресов  предполагаемого диапазона.

Теперь запускаем сканирование подсети для поиска уязвимых  узлов.  Для  этого  можно  воспользоваться  утилитой nmap,  в  составе  Kali  также  есть  и  GUI.  Однако  мы  вос

пользуемся  командной  строкой.  Для  сканирования  подсети 192.168.1.0/24 выполним команду:

root@kali:~# nmap –sS -O 192.168.1.0/24

Здесь  мы  проводим  скрытое  SYN-сканирование всех 255 машин сети 192.168.1.0/24 (опция -sS). Также будет произведена попытка определения операционной системы на каждом работающем хосте (опция -O). Через несколько минут мы получим информацию о работающих в данный момент в сети узлах. Как видно, процесс сканирования не слишком сложен.

Вывод может быть аналогичен следующему:

Nmap scan report for 192.168.1.2

Host is up (0.0080s latency).

Not shown: 995 filtered ports

PORT STATE SERVICE VERSION

135/tcp open msrpc Microsoft Windows RPC

139/tcp open netbios-ssn

445/tcp open netbios-ssn

912/tcp open vmware-auth VMware Authentication Daemon 1.0 

(Uses VNC, SOAP)

5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)

MAC Address: 00:25:22:12:C7:7F (ASRock Incorporation)

Service Info: OS: Windows


Прежде  чем  двигаться  дальше,  посмотрим,  какие  еще полезные  для  автоматизации  сканирования  сети  функции есть у nmap. В случае если злоумышленник хочет, чтобы его действия были менее подозрительными и не были обнаружены системами обнаружения атак (IDS), он может разбить свою атаку  на  части,  сканируя  только  небольшие  диапазоны адресов.

Приведенная  ниже  команда  запускает  перебор  хостов и  TCP-сканирование  первой  половины  всех  (из  доступных 255) адресов подсети 192.168.1.0. Также опция -p проверяет, запущены ли SSH, DNS, POP3 или IMAP с использованием их стандартных портов и использует ли какое-нибудь приложение порт 4564. Если какой-нибудь из этих портов открыт, то будет произведена попытка определения работающего с этим портом приложения.

root@kali:~# nmap -sV -p 22,53,110,143,4564 198.168.1.1-127

Практический  смысл  следующей  команды  может  показаться  сомнительным,  потому  что  она  указывает  nmap выбрать  случайным  образом  100  000  хостов  и  просканировать  их  на  наличие  запущенных  на  них  веб-серверов (порт 80). Однако я бы рекомендовал при проведении аудита выполнить данную команду, дабы сымитировать действия злоумышленника,  уже  проникшего  в  сеть  и  пытающегося использовать  корпоративные  ресурсы  для  осуществления атак на другие узлы.

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

root@kali:~# nmap -v -iR 100000 -PN -p 80

Если  требуется  просканировать  большое  количество узлов,  то  имеет  смысл  сохранять  полученные  результаты в файл. К тому же в случае, если злоумышленник будет обрабатывать полученные результаты с помощью сценариев в целях автоматизации процесса взлома, вывод в файл также будет необходим. Написание сценариев для автоматизации задач аудита мы подробно рассмотрим в одной из следующих статей цикла.

Следующей командой будут просканированы 4096 IP-адресов (без предварительного пингования), а выходные данные будут сохранены в формате XML и формате, удобном для просмотра утилитой grep (grepable-формат).

root@kali:~# nmap -PN -p80 -oX logs/pb-port80scan.xml ? -oG logs/pb-port80scan.gnmap 216.163.128.20/20


Когда нужна скорость.

Nmap  является,  пожалуй,  наиболее  известным  средством сканирования сети. Однако, помимо него, существуют также и другие средства. Например, в случае если необходимо просканировать сеть в несколько тысяч узлов на предмет наличия хостов с открытыми портами, то наиболее подходящим будет массовый сканер портов MASSCAN.

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

Важной особенностью MASSCAN, о которой не стоит забывать, является то, что он использует кастомный (то есть специально изготовленный) TCP/IP-стек. То есть любое другое действие, которое выходит за пределы простого сканирования,  приведет  к  конфликту  с  локальным  TCP/IP-стеком. Это означает, что либо нужно использовать опцию -S для использования раздельных IP-адресов, либо настроить операционную  систему  так,  чтобы  файрвол  обрабатывал  порт, который использует masscan [3].

Теперь  перейдем  непосредственно  к  работе  с  данной утилитой.

root@kali:~# masscan <ip адрес/диапазон> -p порты опции

Предположим, результаты предварительного аудита с помощью методов, описанных выше, показали, что на многих машинах в сети могут быть открыты порт 80 и группа портов от 7000-го до 7100-го, которые используют самописное приложение. Также у нас имеется сеть 10.0.0.0/8. Мы хотим найти, на каких из этих машин открыты порт 80 и диапазон портов с 7000-го по 7100-й. При этом нам необходимо провести сканирование как можно быстрее, но с учетом пропускной способности  каналов  связи.  Таким  образом,  нам  надо  отправлять  100  000  пакетов  в  секунду.  Для  этого  выполним команду:

root@kali:~# masscan -p80,7000-7100 10.0.0.0/8 --rate=100000

В результате мы получим список машин с обнаруженными открытыми портами:


Для удобства работы с собранной информацией ее необходимо сохранять в файл. В следующем примере в файл будут сохранены приветственные сообщения, которые показывают узлы при обращении к открытому порту 80. 

root@kali:~# masscan -p80 10.0.0.0/8 --banners -oB <имя_файла>

Еще одной полезной опцией, которая может быть использована при проведении аудита, является возможность указания IP и MAC-адреса интерфейса, отправляющего пакеты для сканирования.

Вот  пример  использования  утилиты  с  заданными  IP и MAC, сканирующей сеть 10.0.0.0/8 на наличие открытых портов 137-139.

root@kali:~# masscan 10.0.0.0/8 –p137-139 ?

  --adapter-ip 192.168.1.111 ?

  --adapter-mac 00-11-22-33-44-55

Для автоматизации и ускорения процесса сканирования можно создать конфигурационный файл, в котором указать необходимые параметры для IP и MAC-адресов. Например:

adapter-ip = 192.168.1.111

adapter-mac = 00-11-22-33-44-55

И затем запустить утилиту с ключом -с.

root@kali:~# masscan -c <имя_файла>

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

На  этом,  я  полагаю,  тему  идентификации  узлов  и  приложений с помощью сетевых сканеров можно завершить. 

Собранная на данном этапе аудита информация нам потребуется в следующей статье, когда мы будем выявлять уязвимости и пытаться эксплуатировать их. А теперь перейдем к сбору информации посредством перехвата сетевого трафика.


Анализируем трафик.

Нам потребуется Wireshark, позволяющий перехватить информацию, передаваемую по сети в открытом виде. Например, некоторые самописные веб-приложения, работающие в  корпоративных  сетях,  до  сих  пор  не  используют  SSL-шифрование,  вследствие  чего  передача  учетных  данных и другой информации ведется в открытом виде и легко перехватывается.

Для мониторинга трафика с помощью Wireshark необходимо  на  активном  интерфейсе  запустить  прослушивание. Для  поиска  «интересной»  информации  в  уже  собранном трафике необходимо остановить перехват и сделать фильтрацию по интересующему порту или протоколу. Например, по  порту  80.  Так  как  вся  информация  в  HTTP  передается в  текстовом  виде,  найти,  к  примеру,  пароль,  переданный формой, можно довольно просто. Достаточно сделать поиск в собранных пакетах по тегу hidden. Рядом с этим тегом и будет пароль.

Помимо Wireshark, существуют и другие не менее интересные средства. Одним из них является Driftnet [4]. Эта утилита  ориентирована  на  воспроизведение  перехваченного медийного контента, который передается по сети. Конечно, с  точки  зрения  безопасности  нас  мало  интересует,  какие видео смотрят пользователи в рабочее время. Хотя использование корпоративного доступа в сеть Интернет тоже можно отразить в отчете об аудите, особенно если к нему можно приложить  иллюстрирующие  доказательства.  Однако  нас больше интересует передача по сети сканов различных документов и других изображений, содержащих конфиденциальную информацию.

Пользоваться  Driftnet  довольно  просто,  для  этого  достаточно  запустить  Applications  /  Kali  Linux /  Sniffing/Spoofing / Web Sniffers / driftnet. После запуска появится небольшое окно, которое желательно растянуть. А дальше просто смотрим, что проходит через сеть.


Боремся с коммутаторами.

Что делать в случае, если, подключившись к сети, сниффер показывает только пакеты, идущие к или от нашей машины? В  современных  сетях  такая  ситуация  достаточно  распространена, так как повсеместно используемые коммутаторы в отличие от концентраторов не ведут широковещательных рассылок поступающего трафика на все порты. Однако эту «защиту» достаточно легко преодолеть с помощью инструментов, входящих в состав Kali. Но сначала немного теории для лучшего понимания процесса. На коммутаторах для преобразования IP-адресов и MAC-адресов  используется  протокол  ARP  (Address  Resolution Protocol).  Информация  о  соответствии  IP  и  MAC  хранится  в  ARP-таблицах.  Атака  ARP-poison  (отравление  ARP) сводится к тому, что подменяем в ARP-таблице MAC-адрес узла,  вследствие  чего  в  корпоративной  сети  становится возможным контролировать трафик всех узлов в пределах доступности ARP-ответов с контролируемого узла вне зависимости от свойств физической сетевой инфраструктуры. То есть мы сможем получать копии трафика с других портов коммутатора.

Перейдем  к  практической  части.  Для  этого  воспользуемся утилитой Ettercap. Конечно, описанные ниже действия можно реализовать и с помощью Wireshark, однако Ettercap немного удобнее для реализации данной атаки. Запустим утилиту с графическим интерфейсом.

root@kali:~# ettercap –G

Далее  выбираем  тип  перехвата  трафика  Unified или Bridged. Первый производит простой перехват трафика, в то время как второй предназначен для вмешательства в процесс передачи трафика. Выберем unified. Далее указываем используемый сетевой интерфейс. Можно указать как проводной, так и беспроводной варианты. Далее определяемся с тем, у кого мы хотим перехватывать  трафик.  Для  этого  необходимо  просканировать  сеть на наличие активных узлов. Как видно, функционал Ettercap частично  перекликается  с  описанным  ранее  сканерами. Для запуска сканирования выбираем Hosts, далее Scan for hosts. Получаем список активных узлов с IP и MAC-адресами. Выбираем нужный узел и нажимаем Add To Target 1. В этом окне еще имеется кнопка Add To Target 2. В случае если хотим перехватывать только трафик между двумя конкретными узлами, необходимо указать второй узел и нажать Add To  Target  2,  если  планируем  перехватывать  весь  трафик для данного узла, то второй узел выбирать не надо. Затем запускаем сканирование, нажав Start, Start Sniffing. Далее завершаем процесс отравления ARP, выбрав MITM/ARP Poisoning. Опция Sniff Remote Connections должна быть включена.

Далее уже в Wireshark можно осуществлять перехват трафика по аналогии с тем, как мы это делали ранее. По окончании сбора пакетов в Ettercap необходимо отключить ARP-poison, нажав Start/Stop sniffing.

Становимся посредником.

Злоумышленник,  попав  в  сеть,  может  осуществить  атаку типа «человек посередине» (Man in the middle), то есть попытаться стать посредником между легальными узлами. С помощью MitM можно реализовать много различных атак, связанных не только с прослушиванием, но и с модификацией проходящего трафика. Но в контексте темы данной статьи мы реализуем перехват паролей, заодно познакомившись еще с парой полезных утилит из состава Kali Linux.

Итак, мы уже знаем, какие узлы сейчас активны в сети. Так  как  машина  злоумышленника  выступает  в  роли  посредника, для начала разрешаем пересылку IP-пакетов (ip forwarding). Сделать это можно следующим образом:

root@kali:~# echo 1 > /proc/sys/net/ipv4/ip_forward

Теперь  проводим  ARP  spoofing  (подменяем  MAC-адреса  для  определенных  IP-адресов).  Машина  злоумышленника будет посредником между шлюзом по умолчанию и локальной сетью. Если адрес шлюза 192.168.1.1, а наш адрес  192.168.1.100,  то  для  подмены  нам  необходимо  выполнить следующее:

root@kali:~# arpspoof –t 192.168.1.1 192.168.1.100

Утилита arpspoof как раз предназначается для подмены MAC-адресов. Для корректной работы ARP spoofing обязательно делаем подмену и в обратную сторону.

root@kali:~# arpspoof –t 192.168.1.100 192.168.1.1

Начинаем перехват трафика. Правда, в отличие от предыдущих примеров здесь мы будем перехватывать, а вернее, отображать не весь трафик, а только пароли от различных приложений. Для этого мы воспользуемся утилитой dsniff [5].

root@kali:~# dsniff

---------------

05/21/00 10:49:10 bob -> unix-server (ftp)

USER bob

PASS dontlook

---------------

05/21/00 10:53:22 karen -> lax-cisco (telnet)

karen

supersecret

---------------

05/21/00 11:01:11 karen -> lax-cisco (snmp)

[version 1]

private


В результате работы мы перехватили несколько паролей, передававшихся в незашифрованном виде. Dsniff  позволяет  перехватывать  пароли,  отправленные  методом  HTTP  POST  данные,  HTTP  Basic  and  Digest authentications, FTP,IRC, POP, IMAP,SMTP, NTLMv1/v2 (HTTP, SMB, LDAP и т.п.).

На этом, я думаю, практическую часть сегодняшней статьи можно завершить и перейти к рассмотрению результатов.


Что в результате?

Защищаться  от  социальной  инженерии  не  так  просто, как может показаться на первый взгляд. Необходимо на регулярной основе производить мониторинг той информации, которая есть о компании в интернете, на предмет наличия сведений  о  приложениях,  используемых  в  корпоративной сети. Особое внимание здесь следует уделить социальным сетям, так как в них зачастую публикуют «лишнюю» информацию.

Теперь перейдем к технике. После выполнения тех действий, которые описаны в статье, я бы рекомендовал обратиться  к  средствам  защиты  информации  и  мониторинга событий  ИБ,  которые  установлены  в  корпоративной  сети. Прежде всего необходимо посмотреть в консоли систем обнаружения и предотвращения вторжений, какие атаки они увидели. Если IDS не зафиксировал ничего, то, может, он, конечно, и не настроен, но скорее всего у вас просто не ведется мониторинг трафика внутри сети. Очень часто IDS/IPS контролируют только каналы, ведущие в интернет и DMZ, а вот про внутреннюю сеть обычно забывают. В результате, если злоумышленнику каким-либо образом удалось проникнуть во внутреннюю сеть, он может совершенно безнаказанно проводить различные атаки, оставаясь при этом незаметным для средств защиты.

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

Что  касается  активной  защиты  от  описанных  атак, то здесь лучше всего справится именно система предотвращения вторжений, установленная в разрыв. Если архитектура сети позволяет, то правильно настроенная IPS даст возможность заблокировать большинство описанных в статье атак.

Также  межсетевые  экраны,  блокирующие  все,  кроме нужного трафика, будут хорошим средством защиты от сканирования  портов.  Бороться  с  прослушиванием  трафика достаточно  сложно.  Конечно,  если  целевое  приложение поддерживает шифрование трафика, например SSL, то необходимо его использовать. Однако если какая-либо старая программа работает только по HTTP или FTP, то здесь единственным  решением  может  стать  шифрование  на  уровне IPSec.

Но для выявления того, прослушивают ли вашу сеть, можно прибегнуть к помощи узла-приманки (honeypot). Создаем поддельный сервис, на который периодически производится подключение под как бы административной учетной записью по нешифрованному протоколу с одного и того же узла. На узле-приманке настраиваем журналирование всех попыток входа. И ведем регулярный мониторинг журналов приманки. Если обнаруживаются входы с IP-узла, отличного от того, с которого мы подключаемся, значит, кто-то прослушивает нашу сеть.

На этом тему сбора информации о сети и защиты от данного типа атак можно завершить. В следующей части мы начнем подробное рассмотрение того, как можно получить доступ на целевые узлы атакуемой сети.

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

[2]  Бирюков А. А. Информационная безопасность: защита и нападение. ISBN: 978-5-94074-647-8.

[3]  Статья по работе с masscan – https://kali.tools/?p=976.

[4]  Описание утилиты DriftNet – http://goo.gl/x0pZK3.

[5]  Описание работы с dsniff – http://256bit.ru/Secure/Glava%2010/Index10.html.

[6]  Список всех ключей nmap – http://xgu.ru/xg-ids/ch06.html.

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

No comments:

Post a Comment

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

Версия на печать

Популярное