Аудит безопасности SMB и Samba

Книга по SMB и Samba на русском языке. Оглавление

1. SMB: настройка общей сетевой папки в Windows

2. SMB и Samba в Linux: подключение к общей папке Windows, создание сетевых папок в Linux

3. Аудит безопасности SMB и Samba

3.1 Поиск сетевых папок SMB. Перечисление шар и файлов

3.1.1 Утилиты samba

3.1.2 Поиск SMB по открытым портам

3.1.3 enum4linux

3.1.4 nullinux

3.1.5 SMB Spider

3.1.6 acccheck

3.1.7 CredNinja

3.1.8 SMBMap

3.1.9 SPARTA

3.1.10 SMBCrunch

3.2 Атака человек-посередине на SMB. Ретрансляторы

3.2.1 Responder

3.2.2 Inveigh

3.2.3 Intercepter-NG

3.2.4 Ettercap. Плагины Ettercap

3.2.5 MITMf

3.2.6 Net-Creds

3.3 Брут-форс учётных данных пользователей общих папок SMB

3.3.1 patator

3.3.2 Hydra

3.3.3 Medusa

3.3.4 APT2

3.3.5 BruteSpray

3.4 Инструменты эксплуатации SMB

3.4.1 CrackMapExec

3.4.2 keimpx

3.4.3 Pupy

3.5 Скрипты Nmap для сбора информации и аудита SMB

3.6 Прочие программы


Я составил список программ, которые так или иначе относятся к оценке безопасности и взлому совместных папок SMB. Успешная атака на сетевые папки SMB может принести имя пользователя и пароль Windows.

Я разделил собранные утилиты на следующие группы:

  1. Поиск сетевых папок SMB. Перечисление шар и файлов
  2. Атака человек-посередине на SMB. Ретрансляторы
  3. Брут-форс учётных данных пользователей общих папок SMB
  4. Инструменты эксплуатации SMB
  5. Скрипты Nmap для сбора информации и аудита SMB

Это довольно условное деление, т. к. некоторые программы могут быть помещены сразу в две группы, например, программа ищет шары SMB в сети и пробует разные пароли.

1. Поиск сетевых папок SMB. Перечисление шар и файлов

Утилиты samba

С помощью утилиты smbtree можно обнаружить компьютеры Windows с сетевыми шарами:

sudo smbtree -N

С помощью утилиты smbclient можно просмотреть имеющиеся на компьютере совместные папки:

sudo smbclient -L \\ИМЯ-КОМПЬЮТЕРА -N

Также с помощью smbclient, используя команду следующего вида, можно подключиться к сетевой папке и выполнить обычные файловые операции:

sudo smbclient //ИМЯ-КОМПЬЮТЕРА/Папка -N

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

Поиск SMB по открытым портам

SMB использует порты 445 и 139, поэтому компьютеры с сетевыми шарами можно искать с помощью Nmap командой вида:

sudo nmap СЕТЬ -p 139,445

Например:

sudo nmap 192.168.0.0/24 -p 139,445

Можно добавить опцию -oG <ФАЙЛ> для сохранения результатов в файл — кстати, такой файл нам понадобится с одной из последующих программ:

sudo nmap 192.168.0.0/24 -p 139,445 -oG portscan445.gnmap

enum4linux

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

num4linux предустановлена в Kali Linux и BlackArch.

Использование:

enum4linux [опции] ip

Опции:

-U        получить список пользователей
-M        получение списка машин*
-S        получение списка общих ресурсов
-P        получение информации о политике паролей
-G        получение списка групп и членов
-d        выводить больше подробностей, применяется к -U и -S
-u ПОЛЬЗОВАТЕЛЬ   указывает имя пользователя для использования (default "")  
-p ПАРОЛЬ   указывает пароль для использования (default "")   
-a        Выполнить все простые перечисления (-U -S -G -P -r -o -n -i).
          Эта опция включена если вы не указали какие-либо другие опции.
-h        Показать справку и выйти
-r        перечислить пользователей через RID cycling
-R диапазон  RID диапазоны для перечисления (по умолчанию: 500-550,1000-1050, подразумевает -r)
-K n      Продолжайте искать RID пока n последовательных RID не будут
          соответствовать имени пользователя. Подразумевает, что диапазон RID 
      заканчивается на 999999. Полезно в отношении DC.
-l        Получить некоторую (ограниченную) информацию через LDAP 389/TCP (только для DCs )
-s ФАЙЛ   брут-форс имён сетевых папок
-k ПОЛЬЗОВАТЕЛЬ   Пользователь(и), которые существуют на удалённой системе (по умолчанию: administrator,guest,krbtgt,domain admins,root,bin,none)
          Используется для получения sid с "lookupsid known_username"
          Используйте запятую для пробы нескльких пользователей: "-k admin,user1,user2"
-o        Получить информацию об ОС
-i        Получить информацию о принтерах
-w wrkg   Вручную указать рабочую группу (обычно находится автоматически)
-n        Делать nmblookup (наподобии nbtstat)
-v        Вербальность.  Показать полные запускаемые команды (net, rpcclient и так далее)

Рассмотрим применение самых интересных опций. Во-первых, эта опция -a, которая означает собрать всю возможную информацию:

enum4linux -a 192.168.0.1

Некоторые системы настроены на анонимный вход, но при этом не разрешают вход без пароля — то есть в них запрещены нулевые сессии. Для обхода этой проблемы достаточно указать любое имя пользователя, пароль можно не указывать. Обратите внимание, что важно указать пользователя, который отсутствует в системе, где размещена общая папка, иначе доступ будет не разрешён из-за неверных учётных данных. Пользователя можно указать опцией -u:

enum4linux -a -u anyuser 192.168.0.101

Программа enum4linux обычно сама правильно определяет рабочую группу и указывать её вручную не требуется. Но я столкнулся с ситуацией, когда для хоста на Linux, где сетевая папка была настроена с помощью Samba, enum4linux не могла определить рабочую группу и выводила множество ошибок. Для принудительного указания рабочей группы используйте опцию -w:

enum4linux -a -w WORKGROUP 192.168.0.89

Если вы хотите только получить список совместных папок, то укажите опцию -S вместо -a:

enum4linux -S -u anyuser 192.168.0.101

Если вам известен логин и пароль для входа на сетевую папку, то укажите имя пользователя опцией -u, а пароль опцией -p:

enum4linux -S -u ShareOverlord -p 1234 192.168.0.101

Для получения только списка пользователей, укажите опцию -U, для получения информации об операционной системе используйте опцию -o. Обратите внимание, что опция -a включает эти опции, а в общей сложности она активизирует опции -U -S -G -P -r -o -n -i.

enum4linux -U -o -w WORKGROUP 192.168.0.89

nullinux

Nullinux, используя SMB, применяется для перечисления информации ОС, информации доменов, общих сетевых папок, директорий и пользователей. Если в аргументах строки команды не указаны имя пользователь и пароль, то пробуется анонимный вход или нулевая сессия. Nullinux является обёрткой для инструментов Samba (smbclient и rpcclient) для перечисления хостов используя различные техники.

nullinux предустановлена в BlackArch. Для установки nullinux в Kali Linux выполните команды:

sudo apt install python3-pip
git clone https://github.com/m8r0wn/nullinux
cd nullinux
sudo bash setup.sh
nullinux -h

Использование:

nullinux ЦЕЛЬ [ОПЦИИ]

Опции:

позиционные аргументы:
  target                Целевой сервер
 
необязательные аргументы:
  -h, --help            показать справку и выйти
  -v                    Подробный вывод
 
Аутентификация:
  -u ИМЯ_ПОЛЬЗОВАТЕЛЯ, -U ИМЯ_ПОЛЬЗОВАТЕЛЯ
                        Имя пользователя
  -p ПАРОЛЬ, -P ПАРОЛЬ
                        Пароль
 
Перечисление:
  -shares               Перечислить только шары
  -users                Перечислить только пользователей
  -q, -quick            Быстрое перечисление пользователей
  -r, -rid              Выполнить только RID cycling
  -range RID_RANGE      Установить настраиваемый диапазон RID cycling (По умолчанию: '500-550')
  -T MAX_THREADS        Максимальное число потоков RID cycling (По умолчанию: 15)

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

Выполнить анонимное подключение, нулевую сессию для хоста (192.168.0.1) с SMB и получить информацию, в том числе сетевые папки и пользователей:

nullinux 192.168.0.1

Для перечисления информации подключиться к хосту с общей папкой (192.168.0.101) используя известные имя пользователя (-U ShareOverlord) и пароль (-P 1234):

nullinux 192.168.0.101 -U ShareOverlord -P 1234

Получить список сетевых папок и их содержимого (опция -shares) для списка хостов (192.168.0.89,192.168.0.1,192.168.0.101) используя заведомо несуществующее на них имя пользователя (опция -p anyuser) для анонимного входа на хосты, где не работает вход без имени пользователя:

nullinux 192.168.0.89,192.168.0.1,192.168.0.101 -shares -p anyuser

Рассмотрим ещё несколько примеров применения nullinux, которые описаны автором этой программы на её Вики странице.

Одновременная работа с множеством хостов

Nullinux предоставляет несколько опций для перечисления пользователей и общих папок нескольких хостов за один раз. Nullinux упрощает этот процесс, хотя этого можно достичь и другими инструментами, например, используя средства Bash или программу Interlace (смотрите статью «Как ускорить сканирование большого количества сайтов. Ч. 1: Interlace для многопоточного сканирования веб-приложений»).

x=0;until [ $x -eq "3" ]; do enum4linux 192.168.1.$x; ((x++)); done

Или:

nullinux 192.168.1.1,192.168.1.7

Создание файла nullinux_users.txt

При использовании аргумента командной строки -users, nullinux попытается перечислить пользователей через все возможные варианты и отобразит результаты на экране. Nullinux соберёт всех полученных пользователей и очистит их от дубликатов, а затем сохранит в текстовый файл. Затем файл nullinux_users.txt может использоваться для брут-форса пароля или других внутренних атак.

Можно указать nullinux при перечислении пользователей использовать не инвазивные и не длительные техники — для этого применяется опция -quick. Это приведёт к быстрому перечислению пользователей и отказу от брут-форса по известным именам пользователя, RID cycling и перечислению LSA.

Многопоточный RID Cycling

Nullinux на целевом сервере выполнит RID cycling во время процесса перечисления пользователей или в качестве самостоятельной техники. Это многопоточный процесс для уменьшения времени перечисления:

nullinux -users 10.0.1.1
nullinux -rid -range 500-600 10.0.1.1

SMB Spider

Программа smbspider показывает содержимое общих папок Windows. Программа работает очень быстро и, в отличие от других инструментов, у неё не возникает проблем при входе на в папки не требующие пароля, но требующие указать любое имя пользователя. Программа умеет искать файлы по определённым фразам — это очень полезно в случае если обнаружено большое количество шар (сетевых папок) и на них нужно найти файл с чувствительными данными, например, файлы passwords.txt.

SMB Spider установлен в BlackArch, в Kali Linux его можно установить следующими командами:

sudo apt install python-pip python-netaddr smbclient cifs-utils ldb-tools libbsd-dev libwbclient-dev libtalloc2 libtdb-dev libtevent-dev libsmbclient-dev
sudo pip2 install pysmb pysmbc
git clone https://github.com/T-S-A/smbspider
cd smbspider/
python2 ./smbspider.py -h

Использование:

smbspider [-h] -ip IP_АДРЕС -s ШАРА [-f ПОДПАПКА] [-pa ШАБЛОН]
                 [-pf ФАЙЛ_ШАБЛОНОВ] [-u ПОЛЬЗОВАТЕЛЬ] [-p ПАРОЛЬ] [-d ДОМЕН]
                 [-r УРОВЕНЬ_РЕКУРСИИ] [-t ПОТОКИ]

Опциональные аргументы:

-h, --help            показать справку и выйти
-ip IP_АДРЕС, --ipaddress IP_АДРЕС
                      IP адрес, IP/CIDR, файл с IP
-s ШАРА, --share ШАРА
                      Совместная папка SMB для обхода
-f ПОДПАПКА, --subfolder ПОДПАПКА
                      Подпапка SMB для извлечения списка файлов
-pa ШАБЛОН, --pattern ШАБЛОН
                      Ключевое слово для поиска, к примеру, password
-pf ФАЙЛ_ШАБЛОНОВ, --patternfile ФАЙЛ_ШАБЛОНОВ
                      Файл ключевых слов для поиска, к примеру, password
-u ПОЛЬЗОВАТЕЛЬ, --user ПОЛЬЗОВАТЕЛЬ  SMB пользователь от чьего имени подключиться
-p ПАРОЛЬ, --pwd ПАРОЛЬ     SMB пароль для подключения к совместной папке
-d ДОМЕН, --domain ДОМЕН
                      SMB домен для подключения
-r УРОВЕНЬ_РЕКУРСИИ, --recursive УРОВЕНЬ_РЕКУРСИИ
                      Обходить подпапки. Установить уровень глубины.
-t ПОТОКИ, --threads ПОТОКИ
                      Количество потоков

Чтобы получить содержимое общей сетевой папки укажите опцию -s с именем папки, а хост нужно указать после опции -ip:

smbspider -ip 192.168.0.101 -s Share

В предыдущем примере будет использоваться нулевая сессия, вход без имени пользователя и пароля, если вам известны имя и пароль для входа, то имя укажите после опции -u, а пароль после -p:

smbspider -ip 192.168.0.101 -s ShareRestricted -u ShareOverlord -p 1234

acccheck

acccheck умеет проверять учётные данные сетевых папок. Программа поддерживает работу со списками имён пользователей и паролей, то есть может использоваться для брутфорса. Также программа умеет работать со списком хостов, но при моих тестах выполняет сканирование слишком долго.

Как и некоторые другие инструменты, это скрипт-обёртка бинарника ‘smbclient’.

Программа acccheck имеется в Kali Linux, в любой другой дистрибутив её можно установить следующими командами:

wget https://labs.portcullis.co.uk/download/acccheck-0-2-1.tar.gz
tar xf acccheck-0-2-1.tar.gz
rm acccheck-0-2-1.tar.gz
cd acccheck-0-2-1/
./acccheck.pl -h

Использование:

acccheck [опции]

Обязательной является одна из следующиех опций:

  • -t [один IP адрес хоста]
  • -T [файл содержащий ip адрес(а)]

Все опции:

 -p [один пароль]
 -P [файл содержащий пароли]
 -u [один пользователь]
 -U [файл содержащий имена пользователей]
 -v [вербальный режим]

Эту программу можно использовать как для проверки учётных данных на одном хосте, так и для проверки множества хостов, подойдут ли на них логин и пароль для входа на сетевую папку.

Пример проверки учётных данных на одном хосте:

./acccheck.pl -t 192.168.0.101 -u ShareOverlord -p 1234

Для массовой проверки, подойдут ли имеющиеся учётные данные SMB для какого-то хоста в сети, сначала создадим файл со списком хостов:

echo -e 192.168.0.{0..255}"\n" | sed 's/ //' > ~/test/hosts.txt

И запускаем сканирование сетевых шар и подбор учётных данных для всей локальной сети:

./acccheck.pl -T ~/test/hosts.txt -U ~/test/logins.txt -P ~/test/passwords.txt

В Kali Linux вместо ./acccheck.pl используйте имя исполнимого файла acccehck, например:

acccehck -t 192.168.0.101 -U logins.txt -P passwords.txt

Если выводится End of Scan, например:

./acccheck.pl -t 192.168.0.101 -u ShareOverlord -p 12345

End of Scan

Значит найден компьютер с SMB, но ни один пароль не подошёл.

Если пароль подошёл, то вывод примерно следующий:

./acccheck.pl -t 192.168.0.101 -u ShareOverlord -p 1234

        SUCCESS.... connected to 192.168.0.101 with username:'ShareOverlord' and password:'1234'

End of Scan

CredNinja

[В ПРОЦЕССЕ ПОДГОТОВКИ]

SMBMap

SMBMap позволяет пользователям перечислять диски общего доступа samba по всему домену. Программа составляет список совместных дисков, прав доступа на диск, общее содержимое, имеет функциональность выгрузки/загрузки, автоматическую загрузку файлов, имя которых совпадает с образцом и даже возможность удалённого выполнения команд. Этот инструмент был создан для тестирования на проникновение и предназначен для упрощения поиска потенциально чувствительных данных в крупных сетях.

SMBMap предустановлена в Kali Linux и BlackArch.

Использование:

smbmap [-h] (-H ХОСТ | --host-file ФАЙЛ) [-u ПОЛЬЗОВАТЕЛЬ] [-p ПАРОЛЬ] [-s ШАРА] [-d ДОМЕН] [-P ПОРТ] [-v] [-x КОМАНДА] [--mode CMDMODE] [-L | -R [ПУТЬ] | -r [ПУТЬ]]
              [-A ШАБЛОН | -g] [--dir-only] [-q] [--depth ГЛУБИНА] [-F ШАБЛОН] [--search-path ПУТЬ] [--download ПУТЬ] [--upload SRC DST] [--delete ПУТЬ_ДО_ФАЙЛА] [--skip]

Опции:

Необязательные аргументы:
  -h, --help            показать справку и выйти

Главные аргументы:
  -H ХОСТ               IP хоста
  --host-file ФАЙЛ      Файл, содержащий список хостов
  -u ИМЯ ПОЛЬЗОВАТЕЛЯ           Имя пользователя, если пропущено, подразумевается нулль-сессия
  -p ПАРОЛЬ           Пароль или NTLM хеш
  -s ШАРА              Указывает на общую папку (по умолчанию C$), пр. 'C$'
  -d ДОМЕН             Имя домена (по умолчанию WORKGROUP)
  -P ПОРТ               SMB порт (по умолчанию 445)
  -v                    Вернуть версию ОС удалённого хоста OS

Выполнение команд:
  Опции для выполнения команд на указанном хосте
 
  -x КОМАНДА            Выполнить команду, пр. 'ipconfig /all'
  --mode CMDMODE        Установить метод выполнения, wmi или psexec, по умолчанию wmi

Поиск по файловой системе:
  Опции для поиска/перечисления по файловой системе указанного хоста
 
  -L                    Вывести список всех дисков, на указанном хоесте
  -R [ПУТЬ]             Рекурсивный список директорий и файлов (без списка шара\путь
                        ВСЕХ шар), пр. 'C$\Finance'
  -r [ПУТЬ]             Список, содержащих директории, по умолчанию перечислять
                        корень всех шар, пр. -r 'C$\Documents and
                        Settings\Administrator\Documents'
  -A ШАБЛОН            Определяет шаблон имени файла (регулярное выражение). При
                        совпадении файлы автоматически загружаются (требует -R или -r), 
                        не чувствителен к регистру, пр. '(web|global).(asax|config)'
  -g                    Делать вывод дружественным для grep, используется с -r или -R (в противном случае ничего не выводит)
  --dir-only            Выводить только директории, пропускать файлы.
  -q                    Отключить вербальный вывод. Показывать только шары, где вы
                        можете ЧИТАТЬ/ЗАПИСЫВАТЬ, и подавлять листинг файлов
                        при выполнении поиска (-A).
  --depth ГЛУБИНА         Обойти дерево каталогов на указанную глубину

Поиск по содержимому файлов:
  Опции для поиска по содержимому файлов
 
  -F ШАБЛОН            Поиск по содержимому файлов, -F '[Pp]assword' (требует
                        админский доступ, и powershell на хосте
                        жертвы)
  --search-path ПУТЬ    Указать диск/путь для поиска (использовать с -F, по умолчанию
                        C:\Users), пр. 'D:\HR\'
 
Взаимодействие с файловой системой:
  Опции для взаимодействия с файловой системой указанного хоста
 
  --download ПУТЬ       Download a file from the remote system,
                        ex.'C$\temp\passwords.txt'
  --upload ОТКУДА КУДА      Выгрузить файл на удалённую систему пр.
                        '/tmp/payload.exe C$\temp\payload.exe'
  --delete ПУТЬ ДО ФАЙЛА
                        Удалить удалённый файл, пр. 'C$\temp\msf.exe'
  --skip                Пропустить подтверждение удаления файла

Пример запуска программы:

smbmap -H 192.168.0.101 -u ShareOverlord -p 1234

Если указать опцию -v, то будет выведена информация об операционной системе хоста с сетевой папкой:

smbmap -H 192.168.0.101 -u ShareOverlord -p 1234 -v

SPARTA

SPARTA – это приложение с графическим интерфейсом (GUI) написанное на Python, которое упрощает тестирование на проникновение сетевой инфраструктуры, содействую тестеру на проникновение на фазе сканирования и перебора. Она позволяет сберечь время тестеру благодаря простому графическому интерфейсу и выводу полученной информации в удобочитаемом виде. Чем меньше времени тратится на ввод команд и настройку инструментов, тем больше времени может быть потрачено для фокусировки на анализе результатов.

Среди прочих, анализирует и брут-форсит протокол SMB.

SMBCrunch

SMBCrunch представляет собой 3 инструмента, которые работают вместе для сбора информации о файловых шарах (совместных сетевых папках) Windows. Названия инструментов:

  • SMBHunt — ищет компьютеры с сетевыми папками и составляет список шар
  • SMBList — составляет списки файлов указанных сетевых папок на основе сгенерированного программой SMBHunt файла
  • SMBGrab — скачивает файлы из сетевых папок на основе сгенерированного программой SMBList файла. Поиск и фильтрацию данных можно делать программой grep.

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

SMBCrunch предустановлена в BlackArch, для установки в Kali Linux выполните:

git clone https://github.com/Raikia/SMBCrunch
cd SMBCrunch/
./SMBHunt.pl -h

Для SMBHunt.pl имеется две обязательные опции. Первая это -i, после которой нужно указать или хост, или файл со списком хостов, или файл с результатами сканирования Nmap. Вторая обязательная опция это -a, после неё нужно указать или файл с учётными данными пользователей, либо одну пару учётных данных. Имя пользователя и пароль должны быть через двоеточие; если они указаны в файле, то одна пара на строку. После опции -o можно указать файл для сохранения данных:

Пример подключения к определённому хосту:

./SMBHunt.pl -a 'Alexey:qweqwe123' -i 192.168.0.101 -o shares_found.txt

А это пример предварительного сканирования и сбор информации со всех хостов, на которых найден открытый порт 445:

sudo nmap 192.168.0.0/24 -p 139,445 -oG portscan445.gnmap
./SMBHunt.pl -a 'Alexey:qweqwe123' -i portscan445.gnmap -o shares_found.txt

У программы SMBList.pl также две обязательных опции. После опции -c нужно указать имя пользователя и пароль, либо файл с учётными данными. После опции -s нужно указать файл, который получен предыдущей программой. После опции -o можно указать имя директории, куда будут сохранены составленные списки файлов на сетевых папках:

./SMBList.pl -c 'Alexey:qweqwe123' -s shares_found.txt -o share_listing -m 150

Полный список всех файлов в сетевых папках собран в файле share_listing/ALL_COMBINED_RESULTS.txt, а также составлены отдельные файлы для каждой сетевой папки.

Скрипт SMBGrab.pl принимает список файлов не через опцию, а через стандартный ввод. Благодаря такому подходу программой grep можно отфильтровать только нужные файлы для загрузки.

В следующем примере в файле share_listing/ALL_COMBINED_RESULTS.txt будут найдены только строки, содержащие 'password.txt', эти строки будут переданы программе SMBGrab.pl и она сохранит их в директорию savedfiles:

grep -i 'password.txt' share_listing/ALL_COMBINED_RESULTS.txt | ./SMBGrab.pl -s savedfiles

Обратите внимание, что по умолчанию SMBGrab.pl к каждому файлу добавляет информацию об этом файле (время скачивания, создания и прочее). Причём добавляет это к любым файлам — в том числе и к бинарным, что портит их. Чтобы файлы сохранялись в оригинальном виде, укажите опцию -n. Пример команды, в которой скачиваются .exe файлы и сохраняются в исходном виде:

grep -i '[.]exe' share_listing/ALL_COMBINED_RESULTS.txt | ./SMBGrab.pl -s savedfiles -n

2. Атака человек-посередине на SMB. Ретрансляторы

Responder

Responder это инструмент для выполнения атаки человек-посередине в отношении методов аутентификации в Windows. Эта программа включает в себя травитель LLMNR, NBT-NS и MDNS благодаря которому перенаправляется трафик с запросами и хешами аутентификации. Также в программу встроены жульнические серверы аутентификации HTTP/SMB/MSSQL/FTP/LDAP, которые поддерживают такие методы аутентификации как NTLMv1/NTLMv2/LMv2, Extended Security NTLMSSP и базовую HTTP аутентификацию, для которых Responder выполняет роль ретранслятора.

То есть Responder перехватывает имена пользователей и хеши аутентификации в сети с компьютерами Windows. После взлома хеша раскрывается пароль пользователя.

Для запуска атаки нужно запустить команду вида:

sudo responder -I ИНТЕРФЕЙС -rPvf

Где вместо слова ИНТЕРФЕЙС нужно указать имя сетевого интерфейса в вашей системе на котором вы хотите выполнить атаку.

Дополнительные подробности, а также способ расшифровать перехваченный хеш, смотрите в статье «Взлом сетевой аутентификации Windows».

Inveigh

[В ПРОЦЕССЕ ПОДГОТОВКИ]

Intercepter-NG

Intercepter-NG – это многофункциональный набор сетевого инструментария для IT специалистов различного типа. Главной целью является восстановление интересных данных из сетевого потока и выполнение различного рода атак человек-посередине (MiTM). Кроме этого программа позволяет выявлять ARP спуфинг (может применяться для обнаружения атак человек-посередине), выявлять и эксплуатировать некоторые виды уязвимостей, брут-форсить учётные данные входа сетевых служб. Программа может работать как с живым потоком трафика, так и анализировать файлы с захваченным трафиком, для обнаружения файлов и учётных данных.


Связанные с SMB возможности:

  • Реконструкция файлов из SMB
  • SMB ретранслятор
  • SMB Hijack (перехват)

Ettercap. Плагины Ettercap

Ettercap — это всеобъемлющий набор для атаки "человек посередине" (MitM). Он умеет сниффить (прослушивать) живые соединения, фильтровать на лету содержимое передаваемых данных и многие другие трюки. Он поддерживает активное и пассивное вскрытие многих протоколов и включает многие функции для анализа сети и хостов.

Среди плагинов Ettercap есть два плагина, направленные на атаку SMB протокола.

smb_clear

Она принуждает клиента отправить smb пароль в чистом тексте коверкая протокольные переговоры. Вы должны быть «посередине» соединения для успешного его использования. Он подцепляет диссектор smb, поэтому вы будете сохранять его активным. Если вы используете его в отношении Windows клиента, то результат вряд ли будет удачным. Пробуйте его в отношение *nix smbclient 

smb_down

Он принуждает клиента не использовать NTLM2 обмен паролей во время smb аутентификации. Таким образом получаются хеши, которые могут легко быть взломаны в LC4. Вы должны быть «посередине» соединения для успешного его использования. Он подцепляет диссектор smb, поэтому вы будете сохранять его активным.

MITMf

MITMf — это фреймворк для атак человек-посередине (Man-In-The-Middle attacks). Этот инструмент основывается на sergio-proxy и является попыткой возродить и обновить этот проект.

Модули эксплуатации SMB:

SMBTrap : Эксплуатирует уязвимость 'SMB Trap' на подключённом клиенте
SMBAuth : Вызывает приглашение аутентификации SMB

Net-Creds

Net-Creds тщательно вынюхивает (снифит) пароли и хеши с интерфейса или из файла pcap. Объединяет фрагментированные пакеты и не полагается на порты при идентификации службы. Также поддерживает протокол SMB.

3. Брут-форс учётных данных пользователей общих папок SMB

patator

Программа patator предназначена для брут-форса учётных данных и является одной из самой гибкой в настройке.

Для онлайн брут-форса логина и пароля пользователя для доступа к общей папке (а следовательно учётных данных пользователей Windows) запустите команду вида:

./patator.py smb_login host=192.168.0.101 user=FILE0 password=FILE1 0=/root/logins.txt 1=/root/passwords.txt -x ignore:fgrep='STATUS_LOGON_FAILURE'

В этой команде:

  • ./patator.py — имя исполнимого файла, в зависимости от способа устаовки это может быть patator
  • smb_login — модуль брут-форса SMB
  • host=192.168.0.101 — IP адрес компьютера, на котором подбирается пароль. Можно указать файл с хостами (точнее номер заполнителя файла)
  • user=FILE0 — имя пользователя для брут-форса. Вместо имени заполнитель с указателем на файл с номером 0
  • password=FILE1 — пароль для брут-форса. Вместо одного пароля записан заполнитель с указателем на файл с номером 1
  • 0=/root/logins.txt — путь до файла с номером 0
  • 1=/root/passwords.txt — путь до файла с номером 1
  • -x ignore:fgrep='STATUS_LOGON_FAILURE' — не выводить на экран попытки, в ответ на которые получена строка STATUS_LOGON_FAILURE

Результат:

То есть найдены две пары учётных данных:

  • ShareOverlord:1234
  • Alexey:qweqwe123

Получено имя компьютера и версия Windows:

  • \HACKWARE-MIAL (Windows 10.0 Build 18362)

Найдена ещё одна учётная запись, для которой получено сообщение STATUS_ACCOUNT_RESTRICTION:

  • mial:

В сообщении сказано, что для пользователя mial имеется ограничения аккаунта. Причина в том, что логин и пароль правильные (пустой пароль), но на этом компьютере запрещён вход пользователям без пароля.

Hydra

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

Пример команды для запуска брут-форса SMB:

hydra smb://192.168.0.101 -L /root/logins.txt -P /root/passwords.txt

Правда, у меня ничего не получилось из-за ошибки:

[ERROR] invalid reply from target smb://192.168.0.101:445/

Medusa

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

Пример запуска команды:

medusa -M smbnt -h 192.168.0.101 -U /root/logins.txt -P /root/passwords.txt

У меня возникла ошибка:

ERROR: SMB Protocol Negotiation Failed with host: 192.168.0.101

Причина её, скорее всего, в том, что на хосте, где я хочу брут-форсить логин и пароль пользователей Windows, отключена поддержка протокола SMB 1. В Medusa можно указать метод аутентификации:

medusa -M smbnt -h 192.168.0.101 -U /root/logins.txt -P /root/passwords.txt -m AUTH:NTLMv2

В этом случае возникает другая ошибка:

FATAL: NTLMv2 support currently disabled. The default authentication mode of LMv2 should work in all cases that NTLMv2 is required.

Суть сообщения в том, что NTLMv2 отключена, и нам должно хватать LMv2.

APT2

APT2 — набор инструментов для автоматизированного тестирования на проникновение.

Модули для аудита SMB:

+---------------------------+----------+----------+---------------------------------------------------------------------------------------------+
| Модуль                    | Тип      |Ур.безоп| Описание                                                                                    |
+---------------------------+----------+----------+---------------------------------------------------------------------------------------------+
| apt2_ipwhois              | действие |      5 | запускает ipwhois                                                                             |
| msf_smbuserenum           | действие |      5 | Получает список пользователей от SMB                                                          |
| nmapsmbsigning            | действие |      5 | Сканирование NMap SMB-Signing                                                                 |
| hydrasmbpassword          | действие |      2 | Пытается подобрать пароли SMB                                                                 |
| msf_snmpenumshares        | действие |      5 | Перечисления SMB шар через значения LanManager OID                                            |
| nmapsmbshares             | действие |      5 | NMap сканирование шар SMB                                                                     |
| userenumrpcclient         | действие |      5 | Получает список пользователей из SMB                                                          |
| searchsmbshare            | действие |      4 | Поиск файлов на SMB шарах                                                                     |
+---------------------------+----------+--------+-----------------------------------------------------------------------------------------------+

BruteSpray

BruteSpray принимает результаты сканирования nmap GNMAP/XML и, задействуя Medusa, автоматически брут-форсит службы, используя словари со стандартными логинами и паролями. BruteSpray даже может найти нестандартные порты используя внутри Nmap опцию -sV.

[В ПРОЦЕССЕ ПОДГОТОВКИ]

4. Инструменты эксплуатации SMB

CrackMapExec

CrackMapExec – это инструмент всё-в-одном для тестирования окружения Windows/Active Directory. Он вдохновлён/основывается на предыдущих наработках, в том числе, в качестве субмодуля включает репозиторий PowerSploit.

Программа умеет перечислять вошедших пользователей и индексировать общие папки SMB, выполнять атаки в стиле psexec, автоматические Mimikatz/Shellcode/DLL инъекции в память с использованием Powershell, дампинг NTDS.dit и другое!

Пример перечисления совместных папок:

crackmapexec smb 192.168.0.101 -u Alexey -p qweqwe123 --shares

keimpx

keimpx — это инструмент с открытым исходным кодом для быстрой проверки учётных данных по сети через SMB. Учётными данными могут быть:

  • Комбинация пользовать / пароль в открытом виде.
  • Комбинация пользователь / NTLM хеш.
  • Комбинация пользователь / маркер сессии входа NTLM.

Если после этой фазы атаки в сети были найдены какие-либо действительные учётные данные, программа спросит пользователя выбрать хост для подключения и какие валидные учётные данные использовать. Они будут использоваться для открытия интерактивной оболочки SMB где пользователь может:

  • Запустить интерактивную командную строку.
  • Выполнять действия в удалённых сетевых папках SMB: выводить список файлов и папок, выгружать, загружать файлы, создавать, удалять файлы и т.д.
  • Разворачивать и сворачивать свои собственные службы, например, бэкдор, прослушивающий TCP порт на входящие соединения.
  • Выводить подробности о пользователях, доменах и политиках паролей.

Просканировать подсеть (-t 192.168.0.0/24) проверив валидность для всех хостов с сетевыми папками правильность имени пользователя (-U Alexey) и пароля (-P qweqwe123):

python3 ./keimpx.py -t 192.168.0.0/24 -U Alexey -P qweqwe123

Подключиться к удалённому хосту (-t 192.168.0.101) используя имя пользователя (-U Alexey) и пароль (-P qweqwe123):

python3 ./keimpx.py -t 192.168.0.101 -U Alexey -P qweqwe123

В результате указанные учётные данные будут проверены на правильность. Если они правильные, то будет предложено подключиться и открыть интерактивную оболочку для взаимодействия с удалённой системой.

Pupy

Pupy — это инструмент с открытым исходным кодом для удалённого администрирования и последующей эксплуатации (post-exploitation), работающий на различных платформах (Windows, Linux, OSX, Android).

Модули SMB:

Категория             Имя                Описание           
-----------------------------------------------------------------------------------------------------------------------
Администрирование     shares             Вывести список локальных и удалённых совместно используемых папок и разрешений
Администрирование     smbspider          Обойти директории Smb и рекурсивно искать в файлах строку
Администрирование     smb                Копировать файл через протокол Smb
Администрирование     psexec             Запустить удалённую команду используя Smbexec или Wmiexec

5. Скрипты Nmap для сбора информации и аудита SMB

Имеется довольно много скриптов Nmap для анализа SMB или сбора информации. Обычно они довольно специфичные (например, проверка на определённую уязвимость или на заражение определённым бэкдором) и/или устаревшие. Тем не менее некоторые скрипты дают уникальную информацию, к примеру, поддерживаемые компьютером с сетевыми папками версии диалектов SMB. Ещё один повод ознакомится с NSE (скриптами Nmap) это то, что среди реальных серверов встречаются довольно старые, где всё настроили много лет назад и ничего не трогают, руководствуясь принципом «работает — не трогай».

Имя скрипта указывается после опции --script. Причём можно указать проверку сразу всеми скриптами SMB, т. к. имена поддерживают подстановочные символы:

sudo nmap --script "smb-*" ХОСТ

Но завершение предыдущей команды я ещё не разу не дождался… Поэтому я указываю скрипты по одному.

При каждом запуске скрипта, Nmap выполняет сканирование портов: если иное не установлено опциями, проверяется 1000 самых распространённых портов. Это может требовать много времени, особенно при последовательной проверке несколькими скриптами. Совсем без сканирования портов, то есть указать опцию -sn, нельзя, поскольку скрипты также не будут работать. Но время проверки можно сократить, если указать только один порт — 445, который использует SMB.

Примеры сбора информации об SMB с помощью скриптов Nmap.

Я проверял на 4 разных системах: два Windows 10 компьютера с разными настройками (с разрешением входа без пароля и без него; с поддержкой SMB 1 и без), одна Linux система с Samba и один роутер с Samba. У меня сработало всего несколько скриптов — ниже они все приведены. Тем не мене, вы можете оказаться более удачливыми и найти более старые машины, на которых скрипты пригодятся, поэтому далее приведена полная таблица скриптов Nmap имеющих отношение к SMB.

smb-enum-shares. Перечисление сетевых папок на хосте:

sudo nmap -p 445 --script smb-enum-shares 192.168.0.1 192.168.0.101 192.168.0.49 192.168.0.89

smb-protocols. Получение информации о поддерживаемых протоколах:

sudo nmap -p 445 --script smb-protocols 192.168.0.1 192.168.0.101 192.168.0.49 192.168.0.89

smb2-capabilities. Проверка возможностей протокола SMB 2:

sudo nmap -p 445 --script smb2-capabilities 192.168.0.1 192.168.0.101 192.168.0.49 192.168.0.89

smb2-security-mode. Настройки режима безопасности:

sudo nmap -p 445 --script smb2-security-mode 192.168.0.1 192.168.0.101 192.168.0.49 192.168.0.89

smb2-time. Получение времени через SMB:

sudo nmap -p 445 --script smb2-time 192.168.0.1 192.168.0.101 192.168.0.49 192.168.0.89

smb-os-discovery. Информация об операционной системе:

sudo nmap -p 445 --script smb-os-discovery 192.168.0.1 192.168.0.101 192.168.0.49 192.168.0.89

В некоторые скрипты можно передавать аргументы (подробности смотрите для каждого конкретного скрипта), для этого используется опция --script-args, например: --script-args='smbusername=Alexey,smbpassword=qweqwe123'

Далее таблица со всеми скриптами Nmap (NSE) для проверки или сбора информации об SMB.

Имя скрипта Описание
smb-brute

Пытается угадать комбинации имени пользователя и пароля по SMB, сохраняя обнаруженные комбинации для использования в других скриптах. Будут предприняты все попытки получить действительный список пользователей и проверить каждое имя пользователя перед его фактическим использованием. Когда имя пользователя обнаруживается, помимо его вывода на экран, оно также сохраняется в реестре Nmap, чтобы его могли использовать другие сценарии Nmap. Это означает, что если вы собираетесь запустить smb-brute.nse, вам следует запустить другие smb-скрипты, которые вы хотите. Это проверяет пароли без учёта регистра, определяя регистр после того, как пароль найден, для версий Windows до Vista.

smb-double-pulsar-backdoor

Проверяет, работает ли на целевой машине бэкдор Double Pulsar SMB.

smb-enum-domains

Пытается перечислить домены в системе вместе с их политиками. Обычно для этого требуются учётные данные, за исключением Windows 2000. В дополнение к реальному домену обычно отображается домен «Builtin». Windows возвращает его в списке доменов, но его политики нигде не используются.

smb-enum-groups

Получает список групп из удалённой системы Windows, а также список пользователей группы. Это работает аналогично enum.exe с ключом /G.

smb-enum-processes

Тянет список процессов с удалённого сервера через SMB. Скрипт определит все запущенные процессы, их идентификаторы процессов и их родительские процессы. Это делается путём запроса службы удалённого реестра, которая по умолчанию отключена в Vista; во всех других версиях Windows требуются права администратора.

smb-enum-services

Получает список служб, запущенных в удалённой системе Windows. Каждый атрибут службы содержит имя службы, отображаемое имя и статус службы каждой службы.

smb-enum-sessions

Перечисляет пользователей, вошедших в систему локально или через общий ресурс SMB. Локальные пользователи могут войти в систему либо физически на машине, либо через сеанс служб терминалов. К соединениям с общим ресурсом SMB относятся, например, люди, подключённые к общим файлам или совершающие вызовы RPC. Соединение Nmap также будет отображаться и обычно идентифицируется тем, что оно подключилось «0 секунд назад».

smb-enum-shares

Пытается составить список общих ресурсов с помощью функции srvsvc.NetShareEnumAll MSRPC и получить дополнительную информацию о них с помощью srvsvc.NetShareGetInfo. Если доступ к этим функциям запрещён, проверяется список общих имён общих ресурсов.

smb-enum-users

Попытки перечислить пользователей в удалённой системе Windows, используя как можно больше информации, двумя разными способами (оба через MSRPC, который использует порт 445 или 139; см. Smb.lua). Цель этого скрипта — обнаружить все учётные записи пользователей, которые существуют в удалённой системе. Это может быть полезно для администрирования, отслеживая, у кого есть учётная запись на сервере, или для тестирования на проникновение или сетевого присутствия, определяя, какие учётные записи существуют в системе.

smb-flood

Исчерпывает лимит подключений удалённого SMB-сервера, открывая как можно больше подключений. Большинство реализаций SMB имеют жёсткий глобальный лимит в 11 подключений для учётных записей пользователей и 10 подключений для анонимных. Как только этот предел достигнут, дальнейшие соединения запрещены. Этот скрипт использует этот предел, занимая все соединения и удерживая их.

smb-ls

Попытки получить полезную информацию о файлах, совместно используемых на томах SMB. Выходные данные должны напоминать выходные данные команды UNIX ls.

smb-mbenum

Запрашивает информацию, управляемую Windows Master Browser.

smb-os-discovery

Пытается определить операционную систему, имя компьютера, домен, рабочую группу и текущее время по протоколу SMB (порты 445 или 139). Это делается путём запуска сеанса с анонимной учётной записью (или с надлежащей учётной записью пользователя, если таковая имеется; вероятно, это не имеет значения); в ответ на запуск сеанса сервер отправит обратно всю эту информацию.

smb-print-text

Пытается напечатать текст на общем принтере, вызвав функции RPC службы диспетчера очереди печати.

smb-protocols

Попытки перечислить поддерживаемые протоколы и диалекты SMB-сервера.

smb-psexec

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

smb-security-mode

Возвращает информацию об уровне безопасности SMB, определённом SMB.

smb-server-stats

Пытается получить статистику сервера по SMB и MSRPC, который использует TCP-порты 445 или 139.

smb-system-info

Получает информацию об удалённой системе из реестра. Для получения всей информации требуется административная учётная запись, хотя учётная запись пользователя все равно получит большую её часть. Гость, вероятно, не получит, и не будет анонимным. Это касается всех операционных систем, включая Windows 2000.

smb-vuln-conficker

Обнаруживает системы Microsoft Windows, заражённые червем Conficker. Эта проверка опасна и может привести к сбою системы.

smb-vuln-cve-2017-7494

Проверяет, уязвимы ли целевые машины к уязвимости arbitrary shared library load vulnerability CVE-2017-7494.

smb-vuln-cve2009-3103

Обнаруживает системы Microsoft Windows, уязвимые для отказа в обслуживании (CVE-2009-3103). Этот скрипт приведёт к сбою службы, если он уязвим.

smb-vuln-ms06-025

Обнаруживает системы Microsoft Windows со службой Ras RPC, уязвимые для MS06-025.

smb-vuln-ms07-029

Обнаруживает системы Microsoft Windows с Dns Server RPC, уязвимые для MS07-029.

smb-vuln-ms08-067

Обнаруживает системы Microsoft Windows, уязвимые для удалённого выполнения кода, известной как MS08-067. Эта проверка опасна и может привести к сбою системы.

smb-vuln-ms10-054

Проверяет, уязвимы ли целевые машины к уязвимости повреждения памяти SMB ms10-054.

smb-vuln-ms10-061

Проверяет, являются ли целевые машины уязвимыми для ms10-061 Printer Spooler impersonation.

smb-vuln-ms17-010

Попытки определить, уязвим ли сервер Microsoft SMBv1 для удалённого выполнения кода (ms17-010, a.k.a. EternalBlue). Уязвимость активно эксплуатируется WannaCry и Petya Ransomware и другими вредоносными программами.

smb-vuln-regsvc-dos

Проверяет, уязвима ли система Microsoft Windows 2000 к сбою в regsvc, вызванному разыменованием нулевого указателя. Эта проверка приведёт к сбою службы, если она уязвима и для её работы требуется гостевая учётная запись или выше.

smb-vuln-webexec

В WebExService (WebExec) существует критическая уязвимость удалённого выполнения кода.

smb-webexec-exploit

Пытается выполнить команду через WebExService, используя уязвимость WebExec. При наличии учётной записи Windows (локальной или доменной) запускается произвольный исполняемый файл с привилегиями SYSTEM по протоколу SMB.

smb2-capabilities

Пытается перечислить поддерживаемые возможности на сервере SMBv2 для каждого включённого диалекта.

smb2-security-mode

Определяет конфигурацию подписи сообщений на серверах SMBv2 для всех поддерживаемых диалектов.

smb2-time

Пытается получить текущую системную дату и дату запуска сервера SMB2.

smb2-vuln-uptime

Пытается обнаружить отсутствующие исправления в системах Windows путём проверки времени безотказной работы, возвращаемого во время согласования протокола SMB2.

6. Прочие программы

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

snarf-mitm

Движок атаки человек-посередине на SMB / ретранслятор.

samba-testsuite

Набор инструментов тестирования от Samba

smb-nat

Инструмент аудита Netbios

smbexec

Быстрая атака в стиле psexec с инструментами samba.

smbrelay

Набор инструментов для атаки SMB / HTTP на SMB ретранслятор.

Это программа для Windows. Адрес сайта: http://www.tarasco.org/security/smbrelay/

NetworkOpenedFiles

NetworkOpenedFiles — это простой инструмент для Windows, который отображает список всех файлов, которые в настоящее время открыты другими компьютерами в вашей сети. Для каждого открытого файла отображается следующая информация: имя файла, имя пользователя, имя компьютера, информация о правах доступа (чтение/запись/создание), счётчик блокировок, владелец файла, размер файла, атрибуты файла и прочее.

Адрес программы: http://www.nirsoft.net/utils/network_opened_files.html

Это программа от NirSoft, то есть она рабочая. Но я её не проверял, т. к. функционал не особо интересный.

smbnetfs

Маленькая программа на C, которая монтирует Microsoft network neighborhood в одну директорию.

pdgmail

Инструмент для атаки на пароль по словарю, который нацелен на Windows аутентификацию по SMB протоколу.

sambascan

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

smbbf

Брут-форсер пароля SMB.

smb4k

Продвинутый браузер сетевых папок Samba (SMB).

smbc

samba-commander — сетевой браузер samba с интерфейсом curses.

Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован.