Brezent na SSH
Napisał: Patryk Krawaczyński
25/03/2019 w Administracja, Bezpieczeństwo Brak komentarzy. (artykuł nr 686, ilość słów: 553)
B
rezent (ang. tarpit), czyli płachta na usługę. Jest usługą sieciową, która celowo wprowadza opóźnienia w obsługiwanym protokole spowalniając w ten sposób klientów i zmuszając ich do oczekiwania przez określony czas. Zachowanie to spowalnia lub zatrzymuje sondowanie i atakowanie systemów / usług. Skanery, skrypty i inne narzędzia atakującego są związywane z konkretną usługą / portem i nie mają możliwości ruszyć dalej (zazwyczaj działają synchronicznie wykonując pracę host po hoście / port po porcie). Nakłada to na atakującego większy koszt pod względem czasu i zasobów niż ponosi go obrońca.
Ostatnio Christopher Wellons napisał mały programik (endlessh), który bazuje na paragrafie 4.2 protokołu SSH. Po tym, jak połączenie TCP pomiędzy klientem i serwerem zostanie nawiązane, ale przed negocjacją szyfrowania obydwie strony wysyłają sobie łańcuch identyfikacyjny:
SSH-protoversion-softwareversion SP comments CR LF
W RFC możemy przeczytać również:
Serwer MOŻE wysyłać inne linie danych przed wysłaniem łańcucha tekstu z wersją.
Nie ma nic powiedziane o liczbie i limicie linii, tylko tyle, że linie te nie mogą zaczynać się od frazy “SSH-“, ponieważ byłoby to dwuznaczne z łańcuchem identyfikacyjnym. Linie nie mogą być też dłuższe niż 255 znaków (w tym znak końca bieżącej linii tekstu CRLF). Tak więc, endlessh
wysyła niekończący są strumień losowo generowanych linii z innymi danymi bez zamiaru wysłania łańcucha identyfikacyjnego. W domyślnej konfiguracji czeka 10 sekund między kolejnymi wierszami. Spowalnia to cały protokół SSH, ale nie pozwala na przekroczenie limitu czasu połączenia. W dodatku oznacza to, że program ten nie musi wiedzieć nic o kryptografii lub w zdecydowanej większości o protokole SSH. Proste, jak drut. Jeśli połączymy się z nim klientem ssh
z dodaną opcją -v
(verbose) to zobaczymy na konsoli pojawiające się, co 10 sekund ciągi:
debug1: ssh_exchange_identification: ZcNa;@g)j@l^G9H+ADRdDj/&fW debug1: ssh_exchange_identification: .9oBJ`a+.]pFZI)v
Instalacja programu jest bardzo prosta. Pobieramy jego źródła, kompilujemy i umieszczamy w ścieżce: /opt/endlessh/. Przed jego uruchomieniem w testowym systemie dodałem jeszcze reguły iptables (domyślna polityka dla łańcucha INPUT to DROP) pozwalające na połączenie się tylko jednemu, unikalnemu adresowi IP w ciągu godziny z usługą SSH:
IPT="/sbin/iptables -v" ETH0="X.X.X.X" $IPT -N SSHSCAN $IPT -A INPUT -i eth0 -p tcp -d $ETH0 --dport 22 -m state --state NEW -j SSHSCAN $IPT -A SSHSCAN -i eth0 -p tcp -d $ETH0 --dport 22 -m state --state ESTABLISHED -j ACCEPT $IPT -A SSHSCAN -m recent --set --name SSH --rsource $IPT -A SSHSCAN -m recent --update --seconds 3600 --hitcount 2 --name SSH --rsource -j LOG --log-prefix "SSH-BRUTEFORCE: " --log-level 6 $IPT -A SSHSCAN -m recent --update --seconds 3600 --hitcount 2 --name SSH --rsource -j DROP $IPT -A SSHSCAN -j ACCEPT
Oryginalna usługa SSH została przeniesiona wcześniej na inny port (co, rozwiązuje 99% ataków na nią). Po uruchomieniu endlessh
na standardowym porcie o godzinie 22:20 pierwsi goście pojawili się o 23:03 i 23:17 bawiąc aż do rana będąc związanymi z portem przez prawie 7 godzin:
root@darkstar:~# /opt/endlessh/endlessh -f /etc/endlessh/endlessh 2019-03-24T22:20:38.493Z Port 22 2019-03-24T22:20:38.493Z Delay 10000 2019-03-24T22:20:38.493Z MaxLineLength 32 2019-03-24T22:20:38.493Z MaxClients 4096 2019-03-24T23:03:42.330Z ACCEPT host=::ffff:X.X.X.X port=51350 fd=4 n=1/4096 2019-03-24T23:17:19.013Z ACCEPT host=::ffff:Y.Y.Y.Y port=36817 fd=5 n=2/4096 2019-03-25T05:49:40.339Z CLOSE host=::ffff:X.X.X.X port=51350 fd=4 time=24358.009 2019-03-25T06:04:51.237Z CLOSE host=::ffff:Y.Y.Y.Y port=36817 fd=5 time=24452.224
Jeśli chcemy uruchomić tą usługę na systemie produkcyjnym lub honeypot warto zadbać, aby po związaniu się z portem zrzuciła ona uprawnienia administratora.
Więcej informacji: Fałszujemy rozpoznania skanerów #1, Endlessh: an SSH Tarpit, iptables “recent” module and hit limits
- Brak tematycznie powiązanych artykułów.