Portál AbcLinuxu, 2. května 2025 04:45

Ochrana proti SSH útoku: pam_abl

6.6.2005 18:11 | Přečteno: 3256× | poslední úprava: 6.6.2005 20:07

sshd, démonečku,
otevři nám svou světničku,
jen dva prstíčky tam strčíme,
jen co se ohřejeme,
local exploit hned průbneme.

Polořešení a jiné obezličky

Taky po vás jdou? Už jste vyzkoušeli všechny zaručené recepty:

Limit na počet TCP spojení
Jelen muže domů jen na oběd a na večeři
Nestandardní port
Jelen poleze domů komínem
Port knocking
Jelen se stane zručným bubeníkem, aby zvládl ťukací sekvenci
pam_tally
Pokud se bude jeskyňka vydávat za jelena, jelen dnes spát doma nebude
Pársování logů
Rozumné řešení, ale to bych nemusel psát tenhle článek a opěvovat modularitu PAM systému

pam_abl

Jedná se o PAM modul, jehož autorem je Andy Armstrong a domovskou stránku má na http://hexten.net/sw/pam_abl/index.mhtml. Název je zkratkou z PAM Active Blocking List.

Modul si udržuje seznam chybných pokusů o přihlášení v Berkeley DB, a to zvlášť pro uživatele a zvlášť pro IP adresy (resp. PAM_RHOST). Pokud počet pokusů přesáhne stanovenou mez, je po určitou dobu útočníkovi vždy vrácena chyba autentizace. Útočník tak nezjistí, že byl odhalen a bezúčelně plýtvá svými prostředky.

Konfigurace

Do /etc/pam.d/sshd si přidejte do sekce auth modul pam_abl:

auth    required    /lib/security/pam_abl.so config=/etc/security/pam_abl.conf
auth    sufficient  /lib/security/pam_unix.so likeauth nullok
auth    required    /lib/security/pam_deny.so

a do souboru /etc/security/pam_abl.conf zapište vlastní nastavení pam_abl modulu:

host_db=/var/lib/abl/hosts.db
host_purge=2d
host_rule=*:10/1h,30/1d

user_db=/var/lib/abl/users.db
user_purge=2d
user_rule=!root:10/1h,30/1d

host_db definuje soubor obsahující databázi chybných pokusů podle IP (user_db obdobně pro uživatele), {host|user}_purge je doba, po kterou se uchovávají informace v databázi (je nutné, aby byla větší nebo rovna maximu ze všech _rule pravidel).

{host|user}_rule pravidlo specifikuje samotné limity, podle kterých se určuje, kdy, komu a na jak dlouho bude zablokován přístup. Výše uvedený příklad znamená, že přístup bude zablokován z IP adresy, která má na svědomí více jak 10 pokusů v 1 hodině nebo více jak 30 pokusů v 1 dni a to pro všechny účty po dobu 1 hodiny, resp. 1 dne. Nebo bude zablokován konkrétní účet kromě roota pro libovolnou IP, pokud na něj bylo provedeno (odkudkoliv) vice jak 10 pokusů v 1 hodině nebo 30 pokusů v 1 dni, a to po dobu 1 hodiny, resp. 1 dne.

Podrobnou gramatiku, včetně sémantiky lze nalézt v dokumentaci.

V akci

Účinnost si můžete zkontrolovat stejnojmennou utilitkou pam_abl, která umožňuje vypsat chybné pokusy včetně aktuálního stavu v agregované formě:

Failed users:
    abinitioforum (2)
        Not blocking
    absurdir_deadphp (2)
        Not blocking
    admin (8)
        Not blocking
    aecpro (2)
        Not blocking
    akcesbenefit (2)
…

Failed hosts:
    147.251.53.122 (70)
        Blocking users [*]
    202.125.142.110 (821)
        Not blocking
    69.229.202.54 (18)
        Not blocking

nebo i podrobné:

 147.251.53.122 (70)
        Mon Jun  6 16:26:01 2005
        Mon Jun  6 16:25:58 2005
        Mon Jun  6 16:25:53 2005
        Mon Jun  6 16:25:50 2005
…

V logu SSH démona, pak přibudou tyto řádky:

Jun  6 11:21:07 (none) sshd[31111]: Invalid user test from 69.229.202.54
Jun  6 11:21:07 (none) sshd[31112]: Invalid user test from 69.229.202.54
Jun  6 11:21:08 (none) sshd[31112]: Failed password for invalid user test from 69.229.202.54 port 41178 ssh2
Jun  6 11:21:08 (none) sshd[31111]: Failed password for invalid user test from 69.229.202.54 port 57800 ssh2
Jun  6 11:21:10 (none) sshd[31115]: Invalid user guest from 69.229.202.54
Jun  6 11:21:10 (none) sshd[31116]: Invalid user guest from 69.229.202.54
Jun  6 11:21:10 (none) sshd[31115]: Failed password for invalid user guest from 69.229.202.54 port 41236 ssh2
Jun  6 11:21:10 (none) sshd[31116]: Failed password for invalid user guest from 69.229.202.54 port 57861 ssh2
Jun  6 11:21:12 (none) sshd[31119]: Invalid user admin from 69.229.202.54
Jun  6 11:21:12 (none) sshd[31120]: Invalid user admin from 69.229.202.54
Jun  6 11:21:12 (none) sshd[31119]: Failed password for invalid user admin from 69.229.202.54 port 41303 ssh2
Jun  6 11:21:12 (none) sshd[31120]: Failed password for invalid user admin from 69.229.202.54 port 57928 ssh2
Jun  6 11:21:14 (none) sshd[31123]: Invalid user admin from 69.229.202.54
Jun  6 11:21:14 (none) pam_abl[31123]: Blocking access from 69.229.202.54 to service sshd, user admin
Jun  6 11:21:14 (none) sshd[31123]: Failed password for invalid user admin from 69.229.202.54 port 41345 ssh2
Jun  6 11:21:16 (none) sshd[31124]: Invalid user admin from 69.229.202.54
Jun  6 11:21:16 (none) pam_abl[31124]: Blocking access from 69.229.202.54 to service sshd, user admin
Jun  6 11:21:16 (none) sshd[31124]: Failed password for invalid user admin from 69.229.202.54 port 57970 ssh2
Jun  6 11:21:19 (none) sshd[31127]: Invalid user user from 69.229.202.54
Jun  6 11:21:19 (none) pam_abl[31127]: Blocking access from 69.229.202.54 to service sshd, user user
Jun  6 11:21:19 (none) sshd[31127]: Failed password for invalid user user from 69.229.202.54 port 58074 ssh2

Utilitka pam_abl je také určena k vyčistění databáze od starých záznamů podle _purge pravidel (pam modul to nedělá). Spouštět ji můžete např. každý den z cronu. Zrovna tak umí ruční odblokování dané IP nebo účtu.

Nevýhody a chyby

Jedná se o poměrně mladý projekt, takže nějaké ty chybky či chytáky, o kterých se dokumentace nezmiňuje, obsahuje:

       

Hodnocení: -

zatím nehodnoceno
        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

6.6.2005 19:44 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Dík
Odpovědět | Sbalit | Link | Blokovat | Admin
Dík za info :-)
6.6.2005 21:01 Radek Hladik | skóre: 20
Rozbalit Rozbalit vše Jak pam_abl rozezná špatný a dobrý pokus o přihlášení?
Odpovědět | Sbalit | Link | Blokovat | Admin
Koukám, že pam_abl je uvedené před pam_unix. Jak tedy pozná, zda šlo o správný nebo špatný pokus o přihlášení? Nemělo by být pořadí obrácené? Nebo mi uniká nějaká vlastnost PAMu, která to umožňuje?

Radek
6.6.2005 21:46 petr_p
Rozbalit Rozbalit vše Re: Jak pam_abl rozezná špatný a dobrý pokus o přihlášení?
PAM system poskytuje system hacku, na ktere se mohou jednotlive moduly navesit, a tak byt informovany o urcitych udalostech v budoucich modulech (napr. selhani autentizace).

Navic, pokud mate u pam_unix (nebo jineho modulu, ktery provadi skutecnou autentizaci) priznak sufficient (a u systemu s vice autentizacnimi systemy, napr. kerberos + unix2, se tomu nevyhnete), modul pam_abl by v pripade uspesne autentizace vubec nebyl natazen a inicalizovan.

Proto musi byt pam_abl zavolan pred pam_unix (ci jinym modulem, ktery provadi skutecnou autentizaci).
7.6.2005 00:52 Radek Hladik | skóre: 20
Rozbalit Rozbalit vše Re: Jak pam_abl rozezná špatný a dobrý pokus o přihlášení?
Prave kvuli tomu sufficient jsem myslel, ze je to tak, ze kdyz se modul spusti, tak autentifikace nebyla uspesna, pokud uspesna byla, tak se vubec nespusti... Aspon tak funguje to pam_deny nakonci ne?

Jinak diky za novou informaci, ohledne tech hacku, to jsem nevedel.

Radek
7.6.2005 03:28 Radek Hladik | skóre: 20
Rozbalit Rozbalit vše Pársování logů
A protoze se mi pam_abl nechtelo na mem RH9 prelozit (asi nejaka zavi(s)lost kvuli verzi DB), napsal jsem si onen kontrolovaci skriptik... Neni to nic uzasneho, ale snad to funguje :)
#!/bin/bash
iptables -N sshblock 2>/dev/null
iptables -F sshblock 2>/dev/null
for addr in `
(
cat /var/log/secure
gzip -d -c /var/log/secure.1.gz
gzip -d -c /var/log/secure.2.gz
) | grep 'Failed password for illegal user' |\
sed 's/.*from \([^ ]*\).*/\1/' |\ sort | uniq -c |\
sort -n -r | grep -v '^[^0-9]*[0-9][^0-9]' |\
sed 's/^[^0-9]*[0-9]*[^0-9]\(.*\)/\1/'` ; do
if ! [ "$addr" == "12.34.56.78" ] ; then
  iptables -A sshblock -s $addr -j MIRROR
fi;
done;
A pak uz staci jen na prihodnem miste zaradit ten chain nekam do firewallu...

Radek
7.6.2005 10:25 petr_p
Rozbalit Rozbalit vše Re: Pársování logů
Ad DB: Mate nainstalovany db-devel? Verze, proti kterym to autor zkousel, jsou popsany na domovske strance (ja jedu na 4.2).

Obecne k parsovani: Prave ze nefunguje. Lepe receno, zablokuje jakoukoliv IP, z ktere se alespon jednou nepodarilo prihlasit.

Pokud byste chtel (a asi chtel) robusnejsi reseni, musel byste pocitat pocet selhani (napr. pouzit uniq -c) za jednotku casu (to uz zavani datumovou aritmetikou). A taky musel vyresit opetovne odblokovani po urcite dobe (v primitvni podobne by stacil jednou dene flush ipt chainu). Dal pokud pouzivate vice IP protokolu, musel byste rozlisovat IPv4 a IPv6 (iptables a ip6tables jsou oddeleny).

A vymyslet kolo nema smysl. Proto existuje PAM modul, ktery muzete nasadil na libovolnou sluzbu.
7.6.2005 14:12 Radek Hladik | skóre: 20
Rozbalit Rozbalit vše Re: Pársování logů
AD DB) Pro muj RH9 je pouze db4-devel. Zkousel jsem nainstalovat i compat-db-cosi.rpm, ale ten nainstaloval jenom knihovny, nikoliv hlavicky nebo zdrojaky. A instalovat BerkeleyDB ze zdrojaku se mi moc nechcelo, nerad bych neco zkonil... :)

AD parsovani)

sort | uniq -c | sort -n -r | grep -v '^[^0-9]*[0-9][^0-9]' |

Ac to nevypada pekne, tak je to presne to, ze to nalezene IP vezme, seradi, spocita vyskyty (uniq -c) a vyhazi vsechny, ktere maji pocet chybnych pokusu 0-9. Takze k zablokovani dochazi az po 10 spatnych pokusech.

Co se casoveho meritka tyce, tak to je vyreseno tim, ze se zdrojove logy rotuji, takze casem (typicky po 7 dnech) IP adresa ze seznamu odstrani (pri kazdem zavolani na zacatku ten chain Flushnu a znova cely vytvorim). Pripadne by se to dalo vyresit tim, ze bych tam dal nejaky tail -n 2000 a bral treba jen poslednich 2000 radku z logu (pak bych asi jeste musel upravit jejich poradi). Uznavam, ze jsou to fuj-fuj berlicky, ale lepsi nez dratem do oka, ne? Ipv6 zatim nepouzivam a pokud vubec nekdy budu, tak toho budu muset resit vyrazne vic :)

Samozrejme, ze bych radsi pouzil uz udelany kolo, ale kdyz mi nejde nasadit na moje auto. A nez do nej busit kladivem, aby sedlo a pak mi nekde upadlo.... :)
Mikos avatar 7.6.2005 05:01 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Děkuji!
Odpovědět | Sbalit | Link | Blokovat | Admin
Moooc vám děkuji za tuhle informaci! Přesně něco takového jsem asi před půl rokem hledal, ale nic sem nenašel a v různých fórech se mi jen dostalo odpovědí jako že to co chci je špatné řešení, protože by toho útočník mohl využít k cílenému zablokování IP adres, atp. To mě ale vubec nepálí, prostě sem to přesně tak chtěl! ;-) Nicméně tenkrát sem se prostě spokojil s tím že nic takového pro linux není a dál po tom nepátral.

Takže ještě jednou moc děkuji! Tohle je skvělá věc...
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
7.6.2005 08:00 digri | skóre: 12 | blog: digri
Rozbalit Rozbalit vše blog vs clanek
Odpovědět | Sbalit | Link | Blokovat | Admin
tohle by si zaslouzilo tez vyjit jako clanek, at to tu nezapadne :-)
14.6.2005 19:50 arTee
Rozbalit Rozbalit vše pam_abl a debian
Odpovědět | Sbalit | Link | Blokovat | Admin
Ahoj, nejak nemuzu rozchodit pam_abl v debianu. Vlozil jsem nasledujici radek do /etc/pam.d/ssh (/etc/pam.d/sshd v debianu neni):

auth required /lib/security/pam_abl.so \ config=/etc/security/pam_abl.conf

a nevypada to, ze by se to chytalo... Ani se nevytvori databaze v /var/lib/abl :( Logy toho taky moc nenapovi... Kompiloval jsem to oproti db4.3... Nevite jak na to?

Dik moc Roman
23.6.2005 16:20 petr_p
Rozbalit Rozbalit vše Re: pam_abl a debian
Mate openssh kompilovane s podporou PAM? Mate povoleno pouziti PAMu v sshd_config? Mate v /etc/securit/pam_abl.conf uvedene cesty k databazovym souborum?

Pripadne si puste sshd v ladicim rezimu bez odpojeni od terminalu. Pripadne jej stracnete. Tam se urcite dozvite, co to dela. A kdyz si domyslite, co by to delat melo, tak budete vedet, co to nedela.
26.9.2005 15:00 Kamil | skóre: 18 | blog: bejkarny
Rozbalit Rozbalit vše Re: pam_abl a debian
Máte povoleno ChallengeResponseAuthentication v sshd_config? PasswordAuthentication zakažte. Mně to tak funguje v pohodě na sarge s db 4.3
26.9.2005 15:57 Kamil | skóre: 18 | blog: bejkarny
Rozbalit Rozbalit vše Re: pam_abl a debian
ehm, omlouvám se, samozřejmě že to tak funguje, ale zmínka o ChallengeResponseAuthentication v článku dává najevo za jakých podmínek.
2.2.2009 19:35 snog
Rozbalit Rozbalit vše Nebo nepatri oblubencom :D
Odpovědět | Sbalit | Link | Blokovat | Admin

Doporucujem nechat otvorenu aspon jednu sesnu. :D

...Vypadalo to tak jednoducho, :) bohuzial neviem cim to je ale nefunguje...

No nic aspom mam dovod sa poprechadzat na opacnu stranu Prahy. :D

PS: Bezpecnost ssh zabespecena. :D

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.