Тесты на проникновение имитируют известные способы сетевых атак. Их успешность во многом зависит от качества составления профиля жертвы и его полноты. Какими сервисами и софтом пользуется жертва? На каких портах и протоколах у нее есть открытые подключения? C кем и как она общается? Большую часть такой информации можно получить из открытых источников. Давай посмотрим, что для этого нужно сделать.
Статья предназначена для «белых хакеров», профессиональных пентестеров и руководителей службы информационной безопасности (CISO). Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный применением информации данной статьи.[/tds_warning]
Начнем с того, что лежит на поверхности и легко находится в интернете. В качестве примера я взял колледж в Канаде (alg…ge.com). Это наша учебная цель, о которой мы попробуем узнать как можно больше. Здесь и далее часть адреса опущена по этическим соображениям.
Чтобы заняться социальной инженерией, нам необходимо собрать базу почтовых адресов в домене жертвы. Идем на сайт колледжа и заглядываем в раздел с контактами.
Там представлены одиннадцать адресов. Попробуем собрать больше. Хорошая новость в том, что нам не придется рыскать по сайтам в поисках одиночных адресов. Воспользуемся инструментом theHarvester . В Kali Linux эта программа уже установлена, так что просто запускаем ее следующей командой:
После 2–5 минут ожидания получаем 125 адресов вместо 11 общедоступных. Хорошее начало!
Результат работы theHarvester
Если у них доменная система и стоит почтовый сервер Exchange, то (как это часто бывает) какой-то из найденных адресов наверняка будет доменной учетной записью.
Поиск по метаданным
На образовательных сайтах в открытом доступе лежат тысячи документов. Их содержимое редко представляет интерес для атакующего, а вот метаданные — практически всегда. Из них можно узнать версии используемого ПО и подобрать эксплоиты, составить список потенциальных логинов, взяв их из графы «Автор», определиться с актуальными темами для фишинговой рассылки и так далее.
Поэтому мы соберем как можно больше метаданных, для чего воспользуемся FOCA — Fingerprinting Organizations with Collected Archives . В этом инструменте нас интересует только одна функция — сканирование указанного домена в поисках документов в популярных форматах с помощью трех поисковых систем (Google, Bing и DuckDuckGo) и последующим извлечением метаданных. FOCA также умеет анализировать EXIF из графических файлов, но в этих полях редко находится что-то стоящее.
Запускаем FOCA, нажимаем Project и создаем новый проект. В правом верхнем углу выбираем форматы всех видов и нажимаем Search All. Работа занимает от 5 до 10 минут.
В итоге в основном окне FOCA мы видим колоссальное количество файлов, которые программа нашла на сайте. Большую часть из них в нашем примере составили PDF.
Результат поиска файлов с сайта программой FOCA
Следующим шагом нам необходимо скачать выбранные или все файлы (контекстное меню → Download All) и затем извлечь из них метаданные.
Давай проанализируем, что нам удалось собрать.
Вкладка Users — 113 записей. В основном это имена пользователей, которые указываются при установке офисных пакетов. Они потребуются для дальнейшей социальной инженерии и подбора пар логин-пароль к обнаруженным в домене сетевым сервисам.
Вкладка Folders — 540 записей. Тут есть каталоги, которые указывают на использование Windows (что подтверждается в дальнейшем), и часто попадается строка вида N:\...
. Предполагаю, что это сетевой диск, который подключается скриптом при входе пользователя в систему.
Вкладка Printers — 11 записей. Теперь мы знаем модели сетевых принтеров (они начинаются с \\
). Остальные либо локальные, либо подключены через сервер печати.
Вкладка Software — 91 запись. Тут мы видим программное обеспечение, установленное на компьютерах. Основная фишка заключается в том, что указаны версии этого ПО, из которых можно выбрать уязвимые и попробовать эксплуатировать их при атаке.
Вкладка Emails. Это мы и так имеем в достатке благодаря theHarvester.
Вкладка Operating Systems — 5 записей. Операционные системы, на которых создавались собранные нами файлы. Радует цифра 81 напротив Windows XP. Как показывает практика, такие организации подолгу не обновляют ОС. Есть высокий шанс того, что древняя винда, для которой перестали выпускать патчи безопасности, где-то стоит у них по сей день.
Метаданные, извлеченные FOCA
Получаем данные о домене
Следующим шагом получим информацию о домене. Для начала воспользуемся программой whois
(подробнее о ней читай в RFC 3912 ). Открываем терминал и вводим команду
whois alg*******ge.com
Эта утилита выдает исчерпывающую информацию. Номер телефона, адрес, дата создания и обновления… Есть даже email, который может фигурировать в админском составе.
Программа whois
Кому неинтересно смотреть в терминал (или нет под рукой «Линукса»), могут воспользоваться интернет-сервисами, которые делают то же самое. Вот несколько из них:
Последние два особенно популярны из-за расширенного набора инструментов. В CentralOps сразу есть DNS-граббер, двойной Whois и сканирование портов. Server Sniff выполняет детальное сканирование сайта, причем с поддержкой IPv6 и HTTPS. Я в основном пользуюсь robtex.com . Он представляет все в графическом виде и довольно удобен.
Сайт
Получаем записи DNS
Освежим в памяти типы доменных записей:
запись А сопоставляет IP-адрес доменному имени;
запись MX показывает почтовые серверы для домена;
запись NS показывает DNS-сервер этого домена;
запись CNAME — дополнительное имя для домена;
запись SRV указывает на серверы, которые обслуживают данную зону;
запись SOA покажет сервер с эталонной информацией о домене.
Теперь посмотрим, что важного мы можем из них достать.
Находим почтовые серверы
Адреса email у нас уже есть, а где взять список почтовых серверов? Конечно, из DNS! Проще всего это сделать программой nslookup. Тут мы воспользуемся записью MX, введя следующие команды:
$ nslookup
$ set q=mx
$ alg*******ge.com
Получаем строчку
mail exchanger = 10 alg*******ge-com.mail.protection.outlook.com
Теперь, используя запись А, выясним его IP-адрес:
$ nslookup alg*******ge-com.mail.protection.outlook.com
Записываем себе IP — 23.***.***.42
.
На этом полет мысли остановить сложно, и на ум сразу приходит Telnet в связке с протоколом SMTP. В RFC 5321 описаны команды этого протокола, например VRFY, EXPN и RCPT-TO, при помощи которых можно попробовать подобрать имена пользователей или проверить на валидность собранные, но это уже слишком активные действия на данном этапе. Пока продолжим пассивный сбор.
Получаем адреса NS
Для получения NS-серверов воспользуемся одноименной записью (NS). Данную информацию получить можно несколькими программами. Сперва воспользуемся nslookup:
$ nslookup
$ set q=ns
$ alg*******ge.com
Затем попробуем еще одну линуксовую утилиту — host:
host -t ns alg*******ge.com
Обе программы выдали имена нужных нам DNS-серверов:
alg*******ge.com name server ns5.alg*******ge.com
alg*******ge.com name server ns3.alg*******ge.com
Теперь узнаем их IP-адреса программой nslookup, описанным выше способом. Они выглядят так: 205.***.***.11
и 205.***.***.80
.
Передача зоны DNS
Следующим шагом мы постараемся узнать всю зону DNS данного домена. Успешность этой операции основана на неправильном конфигурировании DNS-серверов системными администраторами (если внешнюю зону забыли отделить от внутренней). В таком случае мы можем просто запросить у серверов передачу и получим целиком зону — то есть узнаем все доменные имена. Сделать это можно двумя утилитами: host и dnsrecon .
Для host потребуется уже известный (из предыдущего этапа) NS-сервер. Вводим команду:
$ host -l alg*******ge.com ns3.alg*******ge.com
Чтобы воспользоваться dnsrecon, нужно ввести:
$ dnsrecon -d alg*******ge.com -t axfr
К счастью (или к сожалению — смотря с какой стороны посмотреть), передача зоны DNS не удалась. Значит, разделение зон у выбранной жертвы настроено верно.
Неудачная передача зоны DNS
Придется дальше собирать данные иными способами.
Находим поддомены
Сейчас в большинстве организаций есть поддомены. Хакеры ищут там серверы удаленного доступа, неправильно настроенные сервисы или новые сетевые имена. Это уже не чисто пассивный сбор данных. Мы взаимодействуем с системой жертвы, но не так грубо, как, к примеру, при сканировании открытых портов. Поэтому с натяжкой метод можно отнести к пассивным техникам.
Брутфорс субдоменов
Суть этого метода состоит в том, чтобы подобрать имя поддомена. Воспользоваться можно программой host. Введем команду
$ host ns3.alg*******ge.com
В ответ получим строку ns3.alg*******ge.com has address 205***.***.11, то есть — такой поддомен существует.
Согласись, вручную перебирать имена — нудное и совсем не хакерское занятие. Поэтому мы будем автоматизировать. Создадим файл со списком имен поддоменов. Можно найти готовый на просторах интернета, но для демонстрации я создал простейший файл с содержимым mail dns ftp file vpn test dev prod voip firewall и называл его dns. Теперь для запуска перебора имен необходимо написать мини-скрипт:
for name in $(cat dns);do host $name.alg*******ge.com |grep "has address"; done
Перебор поддоменов программой host
DNSMap
Есть неплохой инструмент DNSMap . Он делает почти те же действия, что описаны выше. В нем уже встроен словарь, но можно использовать и свой. Для запуска перебора необходимо набрать
$ dnsmap alg*******ge.com
Процесс это небыстрый. У меня он занял (для выбранного домена) 1555 секунд, но и результат выдал неплохой — нашел 18 поддоменов.
Лог DNSMap
Анализ
Мы собрали увесистый мешок информации, но что от нее проку? Следующим шагом необходимо все проанализировать. Будем оставлять лишь то, чем мы можем воспользоваться, а остальное отсеивать.
Визуальный анализ удобно выполнять утилитой Maltego . Это интерактивная программа для сбора данных и отображения найденных взаимосвязей в виде дерева.
У нее есть клиентская часть (именно ее ты и устанавливаешь) и серверная. Последняя содержит обновляемые библиотеки:
список ресурсов для сбора данных из общедоступных источников (как раз то, что ты делал в статье вручную);
набор статистических преобразований для их визуализации.
Есть три версии клиента, и простому пентестеру достаточно бесплатной . Она же входит в состав Kali Linux и подробно описана, в том числе на русском языке .
Дерево Maltego
Разумеется, можно обойтись и без Maltego. Для удобства я собираю информацию в программе KeepNote , но если ты не страдаешь паранойей, то можно воспользоваться онлайновыми сервисами, типа NimbusNote .
Начнем с почтовых адресов. Их довольно много, и, как я уже говорил, это прямая дорога к атаке фишингом. Особенно с учетом того, что у нас также есть список программного обеспечения, которое используют в компании. В нем можно отыскать уязвимый софт (я нашел WinXP и MS Office 2003, для которых есть тонны эксплоитов с удаленным исполнением произвольного кода).
Я думаю, ты понял, что я клоню к вложенному в письмо вредоносному файлу. Это колледж, так что документооборот у них большой, и шанс попасться на удочку spear phishing очень высокий.
Если пойти по пути с социальной инженерией, то пригодятся имена реальных людей из результатов FOCA. Небольшая работа с Google, и мы узнаем о них множество подробностей (должность, телефон, email, ссылки на профиль в LinkedIn и другая полезная инфа). Например, я нашел личный адрес одного из сотрудников на Gmail (не стану приводить его в статье).
Далее рассмотрим поддомены. Приведу лишь самые информативные:
vpn.alg*******ge.com
IP address #1: 205.***.***.51
Что такое VPN, ты и так знаешь, но каким способом виртуальная сеть реализована здесь, до сканирования остается только догадываться. Однако форму для входа мы уже нашли.
connect.alg*******ge.com
IP address #1: 205.***.***.159
Тут находится еще одна форма для авторизации.
ftp.alg*******ge.com
IP address #1: 205.***.***.102
FTP-сервер — отличное место для проведения атаки и создания «аэродрома подскока»: зачем нам загружать малварь извне или заражать письма, когда можно разместить всю боевую нагрузку на собственном файловом сервере колледжа? К нему и доверие выше.
online.alg*******ge.com
IP address #1: 205.***.***.25
Еще одна форма авторизации и объект для изучения. Чем больше сервисов, тем больше вероятность найти слабое звено в системе защиты.
owa.alg*******ge.com
IP address #1: 205.***.***.12
Резко увеличился шанс на присутствие Microsoft Exchange в сети (как и на то, что в почтовых адресах мы сможем найти логин от доменной учетной записи).
Давай-ка поближе рассмотрим поддомен blackboard.alg*******ge.com
. Тут у нас имеется форма авторизации, и ее явно видно даже в инструментах разработчиков браузера. У меня это Chrome.
Форма для передачи логина и пароля
Откроем Burp Suite и попробуем вытащить оттуда строку передачи данных. Выглядеть она будет вот так:
user_id=user&password=qwerty&login=Login&action=login&new_loc=
Этого уже достаточно, чтобы пробить защиту методом грубой силы. Для этого необходимо составить списки UserList и PasswordList. Приступим. Я воспользуюсь базой имейлов — возьму только часть адресов до символа @ и попробую их в качестве логинов. Чтобы отрезать эту часть, можно использовать такую команду:
cut -d @ -f 1 mail >> UserList
Плюс ко всему я добавил список пользователей, которые дала нам FOCA. Так же отсортировал все до пробела, записал в файл и немного подредактировал, удалив строки типа pixel-1541332583568324-web
. Маловероятно, что они могут быть логинами.
Со списком паролей немного проще: клонирую UserList, добавляю к каждой строке возможные даты рождения, следом разбавляю разными комбинациями иностранных слов и добавляю немного цифр от 6 до 9 символов напоследок.
Осталось запустить перебор. Да, это можно было сделать из Burp Suite (закладка Intruder), однако мне больше нравится утилита THC-Hydra . Инструкция по работе с гидрой на русском.
Запрос «Гидры» будет выглядеть примерно так (в статье он специально изменен):
$ hydra -t 5 -V -L UserList -P PasswordList -f [домен] http-post-form -m "/webapps/login/:user_id=§^USER^§&password=§^PASS^§&login=§Login§&action=§login§&new_loc=§§:F=The username or password you typed is incorrect"
Результата пришлось ждать около 15 часов, но это того стоило. В итоге я получил доступ к личному кабинету, где мог посмотреть расписание, а также доступ к библиотеке, карте, закрытой фотогалерее и прочему.
Часть административной панели кабинета
Google в помощь
При сборе данных не забываем про гуглохаки. В нашем примере запрос вида mailto @al***ncollege.com site:al***ncollege.com
сразу выдает кучу валидных адресов, а магическое заклинание: filetype:xls site:al***ncollege.com
— дает прямую ссылку на табличку в формате Excel с адресами и телефонами партнеров и пометкой «This list contains privileged information. Not to be reproduced or distributed in any way».
Подробнее читай в статье «Google как средство взлома ».
Напоследок
Пассивная разведка хороша тем, что сводит к минимуму риск разоблачения атакующего. Он вообще может не взаимодействовать с компьютерами жертвы, а использовать для первичного сбора данных сторонние ресурсы. Ни одна IDS не ругнется, никаких следов в логах не останется. При этом появляется реальная возможность определить дальнейшие направления атаки, выбрать самые эффективные маневры социальной инженерии и конкретных пользователей в качестве приоритетных целей.
При подготовке этой статьи ни один канадский колледж не пострадал.