The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Замедление bruteforce атак на SSH с помощью PF (bruteforce pf firewall security ssh)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: bruteforce, pf, firewall, security, ssh,  (найти похожие документы)
From: GreenX Date: Mon, 9 Dec 2007 14:31:37 +0000 (UTC) Subject: Замедление bruteforce атак на SSH с помощью PF Оригинал: http://wiki.bsdportal.ru/doc:grblocksshbruteforce GreenX: Продолжив поиск статей по борьбе с bruteforce атаками на ssh с помощью PF - набрел на блог Thomas O/ksnes и его статью на эту тему. Основа, таже как и в прошлом переводе - max-src-conn-rate, но есть другие полезные мысли. Перевожу ее для Вас. После небольшой беседы с Claudio о путях борьбы с brute force атаками на SSH, Я был вдохновлен на провеление собственого эксперимента. Есть уже достаточно руководств о том как замедлять их или даже автоматически вносить адреса в церный список, но нет никаких реальных цифр, о том насколько это эффективно. Я установил такие требования для этих правил PF: * Не блокировать нормальные соединения * Ни чего не блокировать на совсем Тестовая система FreeBSD 6.0-STABLE. Заметьте, что некоторые возможности используемые в этих правилах доступны только с версии PF 3.7 и старше (FreeBSD 6.x синхронизированно с 3.7). Также я использую expiretable для автоматического очищения таблиц файрвола от старых записей. Я нашел этот ruby скрипт для bruteforce атак. Он однопоточный, часто ошибается или подвисает при не идеальных условиях, но это лучше чем ничего. Я не прланирую детально объяснять мои правила - это не руководство пользователя по PF, но если что не понятно - пишите. LANIF = "em0" LOIF = "lo0" set block-policy drop pass out all keep state block in all pass on $LOIF all pass on $LANIF inet proto tcp from any to $LANIF port ssh keep state Смысл: разрешить всё исходящее и блокировать всё входящее, за исключением SSH. GreenX: Тут и далее Thomas устанавливает политику drop для всех заблокированных пакетов, если вы и своих пользователей "фильтруете" лучше так не делать. В sshd_conf, кроме `UseDNS' со значением `no', остальные параметры стоят "по умолчанию". Подчеркну, что использую `AllowUsers' для ограничения доступа. Я видел людей подвергающих риску свои машины, временно создав пользователя backup, они забыли в последствии его удалить. Теперь посмотрим, как быстро работает этот скрипт на гигабитном соединении. time ./ssh-rbrute.rb -h edea -u root -l passwords.txt -p 22 real 0m29.602s user 0m5.091s sys 0m3.229s real 0m29.469s user 0m4.973s sys 0m3.188s OK, запомнили. Я проверил - в лог файле добавиль 100 записей о попытках войти в систему. Начинаем душить! LANIF = "em0" LOIF = "lo0" set block-policy drop pass out all keep state block in all pass on $LOIF all pass on $LANIF inet proto tcp from any to $LANIF port ssh keep state \ (max-src-conn 10, max-src-conn-rate 5/60) Смысл: разрешить максимум 10 одновременных соединений и не более 5 за 60 секунд. Эффект ощутим. real 8m58.501s user 0m5.203s sys 0m2.784s С 30 секунд до 9 минут - "нормальная добавка к пенсии", но может быть лучше. А что, если люди атакующие меня, начнут терять огромное количество пакетов? LANIF = "em0" LOIF = "lo0" set block-policy drop pass out all keep state block in all pass on $LOIF all pass on $LANIF inet proto tcp from any to $LANIF port ssh keep state \ (max-src-conn 10, max-src-conn-rate 5/60, overload <hammering> flush) block on $LANIF inet proto tcp from <hammering> to $LANIF port ssh \ probability 65% Смысл: Фильтр помещая соединения в таблицу <hammering> отбрасывает 65% пакетов соответствующих этой таблице. Теперь, я должен сказать вам правду. Скрипт ни разу не закончил все 100 попыток входа в систему. Он "сломался" (failed/stalled?) каждый раз выдавая `connection timeout'. Однако, после нескольких перезапусков, он сумел примерно 50 раз попытаться войти в систему. real 9m55.291s user 0m2.214s sys 0m1.219s Почти 10 минут на 50 попыток входа. Можно подумать, что они использовали Ethernet на голубиной почте в сезон охоты! Но есть еще прихолы, которые можно сделать при помощи PF. Я хочу подделать результаты возвращаемые Nmap при сканировании. Например сделать перенаправление всех портов на 22 порт нашего компа для нежелательных соединений: LANIF = "em0" LOIF = "lo0" set block-policy drop rdr pass on $LANIF proto tcp from any os NMAP to any port 1:65535 -> $LOIF port 22 pass out all keep state block in all pass on $LOIF all pass on $LANIF inet proto tcp from any to $LANIF port ssh keep state \ (max-src-conn 10, max-src-conn-rate 5/60, overload <hammering> flush) block on $LANIF inet proto tcp from <hammering> to $LANIF port ssh \ probability 65% Смысл: Послать соединения из источника на котором определилась ОС Nmap на 22 порт нашей машины. Теперь мы имеем очень плохой файрвол. Вот пример того, что выдает Nmap. %sudo nmap -sS 10.0.0.4 -O -p 100-110 Warning: OS detection will be MUCH less reliable because we did not find at le ast 1 open and 1 closed TCP port Insufficient responses for TCP sequencing (0), OS detection may be less accurate Interesting ports on 10.0.0.4: PORT STATE SERVICE 100/tcp open newacct 101/tcp open hostname 102/tcp open iso-tsap 103/tcp open gppitnp 104/tcp open acr-nema 105/tcp open csnet-ns 106/tcp open pop3pw 107/tcp open rtelnet 108/tcp open snagas 109/tcp open pop2 110/tcp open pop3 MAC Address: 00:0E:0C:84:82:17 (Intel) Too many fingerprints match this host to give specific OS details Всё выглядит открытым, но при подключении в ручную - каждый порт закрыт. Кто сказал что файрволить не прикольно?

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Артм (?), 18:24, 14/06/2012 [ответить]  
  • +/
    Давно пользуюсь правилами из этой статьи с отбросом 65% пакетов от взломщиков. Но пришло время ставить ipv6. Получил я целую сеть /64. Там же адресов больше чем во всём интернете сегодня. Если некоторый взломщик/сканироващик будет на каждое соединение брать отдельный адрес из некоторой такой /64 сети, данный метод работать не будет. Есть какие нибуть идеи, как всё то же самое реализовать в случае ipv6?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру