Брутим пароли с Гидрой (hydra)

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

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

И такой инструмент уже имеет место быть. Быстрый, сочный, достойный внимания — THC-Hydra. Версия 7.5 (из репозитория epel) поддерживает подбор по/для: asterisk cisco cisco-enable cvs firebird ftp ftps http[s]-{head|get} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] ldap3[-{cram|digest}md5][s] mssql mysql nntp oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres rdp rexec rlogin rsh sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp. Примеры эксплуатации мы рассмотрим чуть ниже, а пока — посмотрим как можно заполучить данный инструмент в свой арсенал.

Под катом описание всех флагов и живые примеры

MikroTik — Автоматически меняем MAC адрес на рандомный

Очередной приступ паранойи застал врасплох. Мысль о том что MAC-адрес беспощадно палит привязку твоих сессий в логах провайдера не давала покоя и надо было с этим что то делать.

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

Было решено, надо каким-то образом менять MAC адрес WAN-порта на рандомный, да с заданным интервалом. Имея на руках всё тот же MikroTik, всё решается с помощью одного лишь скрипта.

Подробнее под катом

Маленькая хитрость iptables

При сканировании портов целевой системы можно довольно часто наблюдать результат вида:

...
8080/tcp  filtered http-proxy
...

Что говорит нам о том что порт наверняка используется системой, но «прикрыт» извне. Не смотря на то что работать с ним врятли будет возможно — он всё же дает исследуемому дополнительную информацию о исследуемой системе.

Как проще всего прикрыть порт извне используя iptables?

$ iptables -A INPUT -p tcp --dport %номер_порта% -j DROP

А как можно прикрыть его так, чтоб он был недоступен только лишь извне, да ещё и не отображался в результатах nmap как filtered?

$ iptables -A INPUT ! -s 127.0.0.1/8 -p tcp --dport %номер_порта% -j REJECT --reject-with tcp-reset

Если по-человечески, то это означает:
Для всех входящих пакетов (кроме локального хоста (127.0.0.1/8)), приходящих по протоколу tcp на порт %номер_порта% ответить ICMP уведомлением tcp-reset, после чего пакет будет «сброшен»

Так же возможны варианты ICMP ответа: icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited и icmp-host-prohibited

После чего не забудьте выполнить:

$ service iptables save; service iptables restart

Для выполнения $ service iptables save в системе должен присутствовать пакет iptables-services

Если в системе работает fail2ban обязательно перед выполнением $ service iptables save остановите его, выполнив $ service fail2ban stop

SSH Honeypot — просто и со вкусом

Honeypot («Ловушка») (англ. горшочек с мёдом) — ресурс, представляющий собой приманку для злоумышленников. (wikipedia.org)

Одно из первых средств, которое применяется для аудита целевых систем — это сканирование портов с целью выявления, какие же службы (сервисы) там крутятся. Можете даже сейчас натравить nmap на свой сервер и посмотреть, что же он нам о нем расскажет. Самый простой пример результата его работы:

$ nmap google.com

Starting Nmap 6.47 ( http://nmap.org ) at 2050-01-11 00:00 GMT
Nmap scan report for google.com (173.194.71.138)
Host is up (0.010s latency).
Other addresses for google.com (not scanned): 173.194.71.139 173.194.71.113 173.194.71.101 173.194.71.100 173.194.71.102
rDNS record for 173.194.71.138: lb-in-f138.1e100.net
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 4.92 seconds

Из которого мы видим, что на целевой системе открыты 2 порта (стелс-сканирование и прочее мы пока опустим — не к чему оно сейчас): 80/tcp и 443/tcp и это означает, что там наверняка крутится web-сервер, который работает по http и https.

Теперь подойдем к более интересному моменту.

Довольно часто администраторы используют для доступа к своим серверам SSH. Стандартный порт для SSH — 22/tcp. Если администратор хоть чуть-чуть «шарит», то после установки системы он сразу же перевешивает SSH на не стандартный порт (например 454545), запрещает логин от рута и настраивает авторизацию по сертификату вместо пароля. И оно совершенно правильно — держать SSH на стандартном порту, да без какой-либо дополнительной защиты — потенциально огромная брешь в безопасности.

А что если повесить на этот самый 22 порт ещё один ssh-демон, но при этом все попытки логина по нему сразу отправлять в fail2ban? Обычным нашим пользователям SSH не нужен, мы ходим через порт 454545, значит тот, кто будет ломиться на 22 порт — бот или злоумышленник, которого необходимо забанить по IP на довольно длительное время. Обойти это ограничение можно будет лишь заюзав VPN, прокси или другое средство смены IP, ну или дождаться пока не пройдет время бана которое мы установим.

Данную задачу будем решать в 3 этапа:

  1. Настроим и запустим дополнительный sshd-демон, который будет висеть на 22 порту;
  2. Настроим fail2ban, который будет читать логи на попытку коннекта по ssh на 22 порту;
  3. Поставим всё это дело в автозапуск;

Все манипуляции буду производить на CentOS 7, разница с другими дистрибутивами — минимальна

Подробнее под катом

Тотальная защита WordPress

В прошлом посте мы рассматривали методы повышения безопасности WordPress с помощью nginx. В данной же записи мы рассмотрим дополнительные меры противодействия сбору информации о работающей CMS (и плагинах), версии WP и некоторым типам атак на сайт.

Помогать нам будет уже не только nginx — но и fail2ban вкупе с некоторыми дополнениями и настройками самого WP.

Обозначим проблемы безопасности, которые «по умолчанию» имеют место быть:

  1. WordPress вставляет данные о своей версии в различные места генерируемого контента;
  2. Стандартные настройки его имеют довольно много потенциально слабых мест;
  3. Стандартные настройки доступа к сайту позволяют без особых трудностей собрать потенциальному взломщику довольно много информации;
  4. «Из коробки» отсутствуют какие-либо средства против перебора директорий и паролей.

Ниже мы примем требуемые меры к их решению. Данная запись будет со временем обновляться и дополняться.

Подробнее под катом

Скрываем версию WordPress

Маленький но довольно полезный плагин для повышения безопасности сайта на WordPress, который всё что делает — это скрывает версию CMS, удаляя:

  • Во-первых теги <meta generator="..." /> (и иже с ними), что генерирует сам Wordoress;
  • Во-вторых из запросов к css и js файлам подстроку ?ver=%версия%, которая всё беспощадно палит.

Подробнее под катом

Повышение безопасности WordPress с помощью nginx

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

Проанализировав логи одного блога на WordPress заметил, что присутствует довольно большое количество запросов к страницам, которых не существует. Посмотрев внимательнее стало очевидно, что имеет место как сбор данных как об используемой CMS, так и попытки эксплуатировать различные уязвимости плагинов, тем и самого WP.

Запрошенные страницы имели примерно следующий вид:

/wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php
/wp-admin/admin-ajax.php?action=revolution-slider_show_image&img=../wp-config.php
/wp-content/themes/infocus/lib/scripts/dl-skin.php
/wp-admin/admin-ajax.php?action=showbiz_show_image&img=../wp-config.php
/wp-content/plugins/google-mp3-audio-player/direct_download.php?file=../../../wp-config.php
/wp-admin/admin-ajax.php?action=kbslider_show_image&img=../wp-config.php
/wp-content/themes/parallelus-mingle/framework/utilities/download/getfile.php?file=../../../../../../wp-config.php
/wp-content/plugins/db-backup/download.php?file=../../../wp-config.php
/wp-admin/admin-ajax.php?action=revslider_ajax_action&img=../wp-config.php
/wp-content/plugins/wp-filemanager/incl/libfile.php?path=../../&filename=wp-config.php&action=download
/wp-content/themes/churchope/lib/downloadlink.php?file=../../../../wp-config.php
/magmi/web/plugin_upload.php

Для повышения безопасности мы будем использовать nginx, путем добавления описанных ниже правил в секцию server {...} нашего блога

Подробнее под катом