Védekezés az ssh brute force támadások ellen

Címkék

Az interneten kering egy (vagy több) olyan szkript, amellyel brute force (nyers erővel, probálgatásokkal) módszerrel lehet támadásokat intézni sshd-t futtató host-ok ellen. A támadás során szótár file segítségével próbál rájönni a támadó az egyszerűbb jelszavakra. Ezzel kapcsolatban egy beszélgetés indult az OpenBSD misc listán ``Stopping SSH dictionary attacks'' tárggyal. A beszélgetés során több lehetséges megelőzési / védekezési mód is szóba került. Például: erős jelszót generáló eszköz használata, ssh blokkoló szkript, ssh és pfctl patchek, timelox

Számos egyéb ötlet található az Undeadly.org hozzászólásokban is.

Az én ajánlatom: csak bizonyos hostokról engedélyezett, dsa kulcsokkal történő ssh használat (akár passphrase használatával is).

Hozzászólások

Ott van az uj TCP tracking a -CURRENT-ben, siman meg lehet oldani.

10 hamis bejelentkezes 60 masodperc alatt automatan le van vagva :

pass in on $ext_if proto tcp to $ext_if port ssh flags S/SA keep state (max-src-conn-rate 10/60, overload <scanners>)

block in on $ext_if proto tcp from <scanners> to $ext_if port ssh

"persze az erteket meg lehet valtoztatni."

Nos igen paarszor mar levezettem hogy a publickey birtokaban a teljes adatforgalom vissza fejthetto... De nem lenyeg elvileg csak a szerver felol kapott dolgokat lattjuk ha sniffelunk... Viszont ki az a barom aki szotarfajl alapjan akar loginolni ? Mi semm egyszerubb ennel tiltsatok le a root logint tegyetek egy port tunnel moge az ssh t es zarjatok a 22 es portot... Igy eleritek hogy a hacker a budos eletbe nem jonn ra melyik porton futt az ssh.... (mondjuk get tunnel addig ne engedi a tunnelest amig nem kersz aegy http get et)

A legerosebb jelszo egyebkent az ha jooooooooooo hoszu ... nekem pl a himnusz elso versszaka...

Bár az OBSD PF-hez sajna nem értek, de én Linuxon az ipt_recent modullal csinálok ilyet. 1 percen belül az SSH portra 1 IP-ről max. 3 SYN csomagot fogad el, utána egy ideig onnét mindent DROP-ra. Ha újra próbálkozik úgy, hogy közben az 1 perces büntetőidő nem telt még le, akkor újraindul az óra. :)

Az ellen nem véd persze, de botok ellen ez is egész jó. Radikálisan lecsökkentek a naplókban az ilyen irányú próbálkozások.

A TCP csomagon levő SYN és ACK flagek aktív állapotára match-el. Ez a handshake része, tehát csak 1x van ilyen egy tcp kapcsolat felépülése során => a rendes csomagjaid a kommunikáció során nem növelik a számlálót.

Még sose láttam BSD-t és a csomagszűrőjét közelről, de szerintem ez lehet.

10 hamis bejelentkezes 60 masodperc alatt automatan le van vagva

Ebben hol van az, hogy csak a hamis bejelentkezeseket blockolja? Egy forgalmas szerveren ahol 1 perc alatt tobb mint 10 ssh-s bejelentkezes van, akkor azt is kitiltja aki nem zsivany, vagy en nem ertek valamit?

A public key bírtokában. Érdekes ...

Az ident-scan megmondja, h hol van. Köztes eljárás meg használhatatlanná teszi. (Ha nem engedi a másik oldali tűzfal a hülyeséget.)

Az én jelszavam elég rövid. 12 karakter. Igaz, eből 6-ot generátor ad...

ZsoL kérésére, linuxos iptables-zel ez kb. így néz ki:


iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p TCP -s fehérlistázandó_IP_cím --syn --dport ssh -j ACCEPT

iptables -A INPUT -p TCP --syn --dport ssh -m recent --update --seconds 60 --hitcount 3 -j DROP

iptables -A INPUT -p TCP --syn --dport ssh -m recent --set -j ACCEPT

Értelemszerűen az első sorból annyi és olyan kell, ahány IP címet, vagy címtartományt be akarsz engedni blokkolás nélkül. A próbálkozási lehetőségek száma, valamint a lejárati idő meg ízlés szerint állítható.

Mindenki a saját felelősségére használja, ne engem okolj, ha kizárod magad a gépedről, mert elgépeltem vmit véletlenül! :)))

Pláne azért, mert ez nekem egy jóval hosszabb shellscriptből lett kiollózva.

On 2005-01-02, Adi <adi@polyhistor.hu> wrote:
>
> ZsoL kérésére, linuxos iptables-zel ez kb. így néz ki:
>
> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
>
> iptables -A INPUT -p TCP -s fehérlistázandó_IP_cím --syn --dport ssh -j
> ACCEPT
>
> iptables -A INPUT -p TCP --syn --dport ssh -m recent --update --seconds 60
> --hitcount 3 -j DROP
>
> iptables -A INPUT -p TCP --syn --dport ssh -m recent --set -j ACCEPT

A teljesseg kedveert, leirna valaki hogyan kell ezt FreeBSD ipfw-jevel
megcsinalni? :)