image

Bescherm SSH tegen brute force aanvallen met pam_abl

woensdag 28 maart 2007, 12:28 door Redactie, 33 reacties

SSH is handig voor iedereen die remote en op een veilige manier wil connecten met een machine. Helaas zijn brute force aanvallen op SSH services erg geliefd bij aanvallers, en beheerders die geen goed wachtwoord hebben gekozen worden vroeger of later een keer op deze manier gehackt.

Gelukkig zijn er verschillende oplossingen om SSH te beschermen, zoals SSHguard, het veranderen van poort, instellen van toegestane hosts en deze tips. In dit artikel wordt uitgelegd hoe de pam_abl plugin voor SSH gebruikt kan worden om de boel dicht te houden.

Reacties (33)
28-03-2007, 12:42 door [Account Verwijderd]
[Verwijderd]
28-03-2007, 12:54 door Anoniem
Login alleen toestaan met een keyfile. Succes :)
28-03-2007, 12:56 door Quux
Door Iceyoung
Kies een poort (ver) boven de 10000 want de script kiddies en scanner
scannen meestal niet hoger.

Rename het administrator account naar iets wat niet in een woordenboek
voorkomt en kies een wachtwoord van letters, cijfers en tekens.

Succes met je BF attack dan.

Zorg ervoor dat een administrator account nooit direct kan inloggen zul je
bedoelen...

Verder is het weren van Linux systemen al voldoende om de logs aardig
schoon te houden. ;-)
28-03-2007, 13:09 door Anoniem
Door Iceyoung
Kies een poort (ver) boven de 10000 want de script kiddies
en scanner
scannen meestal niet hoger.

De grap is dat mijn ssh-server ruim onder de 1024 draait,
maar net boven de 22 en dat ik al meer dan een half jaar
(sinds ik die poort gewijzigd heb) geen enkele attack meer
gezien heb.

Ik heb er ook aan zitten denken om iets in mijn iptables te
zetten om die attacks tegen te houden maar ik wilde eerst
dit proberen. En wat blijkt, het werkt. Ondanks dat dit
"security by obscurity" is.
28-03-2007, 13:11 door [Account Verwijderd]
[Verwijderd]
28-03-2007, 13:48 door SirDice
Door Iceyoung
Kies een poort (ver) boven de 10000 want de script kiddies en scanner scannen meestal niet hoger.
Security through obscurity
Rename het administrator account naar iets wat niet in een woordenboek voorkomt en kies een wachtwoord van letters, cijfers en tekens.
Je kunt root niet renamen.
Door Quux
Verder is het weren van Linux systemen al voldoende om de logs aardig schoon te houden. ;-)
Ooohh... Dus *BSD, AIX, Solaris etc. mag wel?
Door Iceyoung
Bij REMOTE DESKTOP XP bijvoorbeeld!!! kan de administrator per default altijd inloggen.
Vandaar het RENAMEN

Het gaat hier om een oplossing voor *nix systemen, stelletje dappere windows dodo's ;)
28-03-2007, 14:00 door Anoniem
Door SirDice
Door Iceyoung
Kies een poort (ver) boven de 10000 want de script kiddies
en scanner scannen meestal niet hoger.
Security through obscurity
Rename het administrator account naar iets wat niet
in een woordenboek voorkomt en kies een wachtwoord van
letters, cijfers en tekens.
Je kunt root niet renamen.

Het gaat hier om een oplossing voor *nix systemen, stelletje
dappere windows dodo's ;)

"Hetgeen u niet wil dat u geschiedt, doet dat ook een ander
niet..."

Het hernoemen van het root account is wel degelijk mogelijk,
of het wenselijk is, is iets anders...

usermod -l blauw root

-dappere dodo :P
28-03-2007, 14:29 door Anoniem
DenyHosts?
28-03-2007, 14:33 door [Account Verwijderd]
[Verwijderd]
28-03-2007, 15:00 door [Account Verwijderd]
[Verwijderd]
28-03-2007, 15:17 door SirDice
Door Anoniem
Het hernoemen van het root account is wel degelijk mogelijk, of het wenselijk is, is iets anders...

usermod -l blauw root

-dappere dodo :P
Wel eens geprobeerd? Dan heb je vast ook gemerkt dat er niet veel meer werkt ;)

Door Iceyoung
Tijdens de laatste zes maanden van 2006 werden er 39 lekken in Windows gevonden, waarvan 12 ernstig.
Wauw.. 39 stuks..

FreeBSD (ok.. misschien niet commercieel genoeg?) had er in 2006 maar 26..
http://www.freebsd.org/security/
28-03-2007, 17:46 door Anoniem
Door SirDice
Door Anoniem
Het hernoemen van het root account is wel degelijk mogelijk,
of het wenselijk is, is iets anders...

usermod -l blauw root

-dappere dodo :P
Wel eens geprobeerd? Dan heb je vast ook gemerkt dat er niet
veel meer werkt ;)

Door Iceyoung
Tijdens de laatste zes maanden van 2006 werden er 39 lekken
in Windows gevonden, waarvan 12 ernstig.
Wauw.. 39 stuks..

FreeBSD (ok.. misschien niet commercieel genoeg?) had er in
2006 maar 26..
http://www.freebsd.org/security/

Lees nog eens goed...

-> "of het wenselijk is, is iets anders..."

;-)
28-03-2007, 18:01 door TheYOSH
Kan ook via Iptables:

http://fail2ban.sourceforge.net/

Deze leest je log files uit. na x keer een error wordt ip
voor y time gebloked in je iptables firewall. Werkt zeer
goed. Krijg per keer een mailtje en zie dat er toch 2 a 3
ip's per dag worden geblokt.
29-03-2007, 00:07 door Anoniem
of gewoon met je firewall iedereen voor een uur blokken die
meer dan 3 synpakketjes in 1 minuut op poort 22 dumpt.

niets scripts of whatever, gewoon native met je packetfilter
29-03-2007, 09:19 door Anoniem
Waneer stopt de redactie eindelijk eens met deze password fud.

Password authenticatie is achterhaald, 'dat weten we allemaal',
behalve blijkbaar de redactie van security.nl dan :-(

Gewoon de mogelijkheid om met passwords in te loggen
uitzetten (zou de standaard config moeten zijn eigenlijk),
en je hebt nooit last van dit soort problemen.

Password authenticatie is het probleem, dat los je niet om
met allemaal geneuzel er omheen, dat los je op door gewoon
te stoppen het te gebruiken.
29-03-2007, 11:27 door Anoniem

Password authenticatie is het probleem, dat los je niet om
met allemaal geneuzel er omheen, dat los je op door gewoon
te stoppen het te gebruiken.
Het gaat om SSH. Dat gebruik je voor communicatie met
servers die (meestal) niet op je eigen lokatie staan.
Volgens jou moeten we password authenticatie afschaffen. Hoe
wil je dan remote in gaan loggen op een server?
29-03-2007, 12:51 door Anoniem
openbsd...2 security leks in 10 jaar.....
29-03-2007, 15:02 door [Account Verwijderd]
[Verwijderd]
29-03-2007, 15:59 door pikah
Door SirDice
Wel eens geprobeerd? Dan heb je vast ook gemerkt dat er niet
veel meer werkt ;)

Jep wel eens geprobeert, werkt op zich goed, maar inderdaad
niet met alle programma's. De meeste programma's gaan uit
van uid 0. Dan werkt het perfect.

Er zijn inderdaad ook programma's die letterlijk van de
gebruiker root uitgaan, die werken niet meer. Helaas.

Verder is het niet aan te raden, gewoon logins rejecten van
deze gebruiker is een betere en stabielere oplossing.

Door Anoniem
Het gaat om SSH. Dat gebruik je voor communicatie met
servers die (meestal) niet op je eigen lokatie staan.
Volgens jou moeten we password authenticatie afschaffen. Hoe
wil je dan remote in gaan loggen op een server?
Authenticatie op basis van certificaten?
29-03-2007, 17:10 door SirDice
Door pikah
Verder is het niet aan te raden, gewoon logins rejecten van deze gebruiker is een betere en stabielere oplossing.
Precies.. Alles via su/sudo..

Door Anoniem
Het gaat om SSH. Dat gebruik je voor communicatie met servers die (meestal) niet op je eigen lokatie staan. Volgens jou moeten we password authenticatie afschaffen. Hoe wil je dan remote in gaan loggen op een server?
Authenticatie op basis van certificaten?
Dat werkt inderdaad opzich goed. Het gaat alleen mis als je je certificaat kwijt raakt (hd crash.. geen backup).. Of als'ie gepikt wordt.. Of anderszins gecompromiteerd... Management van certificaten is niet echt lekker makkelijk
geregeld...
29-03-2007, 17:20 door SirDice
Door Iceyoung
Dan kun je een beetje berekenen hoeveel permutaties van de gebruikte karakters je moet proberen om het juiste password te raden (er van uitgaande dat je al de juiste username kent)
Ga er dan maar aan staan

Op je op weg te helpen met 3 karakters heb je 3! faculteit 1x2x3 = 6 mogelijkheden om de karakters te rangschikken
Echter kun je ook karakters meerdere keren gebruiken dus die opties
komen er dan bij. Je gaat hier echter uit van 3 karakters maar met gewone
letters en cijfers heb je dus 2 x 26 ( hoofd en kleine letters) en 0 t/m 9 is
10 dus 62 mogelijkheden en dan nog pak weg 20 speciale karakters
(!@#$%^& etc) geeft dus een optie van pak weg 82 verschillende karakters. Als je nu een password kiest van 8 karakters dan is men wel
even bezig voordat men raak schiet.
Volgens mij klopt er van deze berekening helemaal niets...

Laten we even uitgaan van een wachtwoord van maximaal 4 karakters en het mogen alleen maar cijfers zijn:

L=4
B=10 (0-9)

Dan is de keyspace:
(10^0)+(10^1)+(10^2)+(10^3)+(10^4) == 1+10+100+1000+10000 == 11111

Bij een max van 3 en alleen (lowercase) letters:

L=3
B=26 (a-z)
Keyspace == (26^0)+(26^1)+(26^2)+(26^3) == 1 + 26 + 676 + 17576 == 18279

Slimmerikken zien hier een sommatie in: Sigma( B^n) met n=0 t/m n=L..

Next.. De gemiddelde tijd dat dat wachtwoord gebruteforced wordt...

T = aantal pogingen per seconde.

Keyspace / T == Totale tijd

De gemiddelde tijd is (statistisch) de helft van de totale tijd...

Je moet dus je policy dusdanig aanpassen dat het wachtwoord veranderd moet worden binnen de gemiddelde tijd dat het wachtwoord gebruteforced wordt.

Met deze berekeningen zie je al vrij snel dat het verhogen van B (de basis, aantal karakter mogelijkheden) een enorme impact heeft op de keyspace, veel meer dan de lengte van het wachtwoord. Bedenk dat NT, bijvoorbeeld, wachtwoorden niet opslaat in ASCII (0-255) maar in UNICODE.. Als je dan uitgaat van een maximum van 8 is de keyspace al astronomisch.

Nb Ja, dictionaries zijn sneller maar we gaan er even vanuit dat een bruteforce de enige mogelijkheid is om het wachtwoord te kraken.
29-03-2007, 17:42 door Anoniem
Door Iceyoung
Volgens mij is het de essentie dat je een brute force attack
zo moeilijk
mogelijk maakt.
Dus :
Niet voor de hand liggende usernames.
Geen passwords die in een woordenboek terug te vinden zijn
en en
combinatie zijn van cijfers, letters en speciale karakter en
het liefst een
beetje lang.
Dan kun je een beetje berekenen hoeveel permutaties van de
gebruikte
karakters je moet proberen om het juiste password te raden
(er van
uitgaande dat je al de juiste username kent)
Ga er dan maar aan staan

Op je op weg te helpen met 3 karakters heb je 3! faculteit
1x2x3 = 6
mogelijkheden om de karakters te rangschikken
Echter kun je ook karakters meerdere keren gebruiken dus die
opties
komen er dan bij.
Je gaat hier echter uit van 3 karakters maar met gewone
letters en cijfers
heb je dus 2 x 26 ( hoofd en kleine letters) en 0 t/m 9 is
10 dus 62
mogelijkheden en dan nog pak weg 20 speciale karakters
(!@#$%^& etc)
geeft dus een optie van pak weg 82 verschillende karakters.
Als je nu een password kiest van 8 karakters dan is men wel
even bezig
voordat men raak schiet.

Zo en nu weer wat luchtigere opmerkingen


Is het aantal mogelijkheden niet gelijk aan:

'aantal tekens' tot de macht 'aantal mogelijkheden per teken'?
Dus bij 8 cijfers 8^10, bij 8 letters 8^26 en bij
combinaties 8^36?
En dan nog de overige vreemde tekens?

Verder inderdaad standaard niet als root kunnen aanmelden
via SSH(2). In b.v. FreeBSD is dit out-of-the-box al zo
ingesteld.
30-03-2007, 07:33 door [Account Verwijderd]
[Verwijderd]
30-03-2007, 08:26 door Anoniem
Door Anoniem

Password authenticatie is het probleem, dat los je niet om
met allemaal geneuzel er omheen, dat los je op door gewoon
te stoppen het te gebruiken.
Het gaat om SSH. Dat gebruik je voor communicatie met
servers die (meestal) niet op je eigen lokatie staan.
Volgens jou moeten we password authenticatie afschaffen. Hoe
wil je dan remote in gaan loggen op een server?

Zie 'man ssh_keygen voor het aanmaken van een key.
Public key deel naar de server en klaar ben je.

In je sshd config zet je dan:

RSAAuthentication yes
PubkeyAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

En je systeem is vrij van die achterhaalde password
authenticatie.
Password authenticatie moet je niet willen, met ssh kun je het
prima vermeiden, geneuzel met brute-force protectie is dan
niet meer nodig.
Het is triest dat de bovenstaande config niet gewoon de
default is.

Kijk anders eens op :
http://www.debuntu.org/ssh-key-based-authentication
30-03-2007, 12:01 door SirDice
Door Iceyoung
dit geldt echter als je elk getal maar 1 keer mag gebruiken. maar in een wachtwoordt mag je rustig 111 gebruiken of 313 dus een getal mag meerdere keren voorkomen.

ben je er nog ???
Zie mijn berekening.. Je vergeet de wachtwoorden die uit minder dan 3 karakters bestaan. Het is een maximum van 3.

Sigma(B^n) met n=0 t/m n=L waarbij B het aantal verschillende karakters zijn en L de maximale lengte.

Bij B=3, L=3:

Sigma (3^n) n=0 t/m n=3 == (3^0)+(3^1)+(3^2)+(3^3) == Zullen we ze even uitschrijven

1 van 0 karakters (geen wachtwoord!)
3 van 1 karakter (1-3)
9 van 2 karakters (11-33)
36 van 3 karakters (111-333)

1 + 3 + 9 + 36 == 49 mogelijke wachtwoorden :)
30-03-2007, 12:06 door pikah
Ik ben niet zon wiskundige, maar als ik het na ga dan klopt
die berekening van SirDice inderdaad wel. Dit aangezien je
niet altijd de maximale lengte van een wachtwoord hebt, maar
ook kleinere wachtwoorden kan hebben.
30-03-2007, 12:59 door SirDice
Een variant waarbij er een minimale en maximale lengte is:

Sigma(B^n) met n=L1 t/m n=L2; B is de basis; L1 de minimale
lengte; L2 de maximale lengte.
30-03-2007, 14:06 door [Account Verwijderd]
[Verwijderd]
30-03-2007, 17:59 door Anoniem
Door SirDice
Door Iceyoung
dit geldt echter als je elk getal maar 1 keer mag gebruiken.
maar in een wachtwoordt mag je rustig 111 gebruiken of 313
dus een getal mag meerdere keren voorkomen.

ben je er nog ???
Zie mijn berekening.. Je vergeet de wachtwoorden die uit
minder dan 3 karakters bestaan. Het is een maximum van 3.

Sigma(B^n) met n=0 t/m n=L waarbij B het aantal
verschillende karakters zijn en L de maximale lengte.

Bij B=3, L=3:

Sigma (3^n) n=0 t/m n=3 == (3^0)+(3^1)+(3^2)+(3^3) == Zullen
we ze even uitschrijven

1 van 0 karakters (geen wachtwoord!)
3 van 1 karakter (1-3)
9 van 2 karakters (11-33)
36 van 3 karakters (111-333)

1 + 3 + 9 + 36 == 49 mogelijke wachtwoorden :)

Bij een wachtwoord van 2 cijfers zijn er deze mogelijkheden:
00 01 02 03 04 05 06 07 08 09 10 11 12 ... 99
Dus100 mogelijkheden, want 2 ^ 10 (2 tekens, 10
mogelijkheden per teken).

Bij een wachtwoord van 2 letters zijn er deze mogelijkheden:
AA AB AC AD AE ... ZU ZV ZW ZX ZY ZZ
Nu zijn er 2 ^ 26 = 67108864 mogelijkheden

Nu een wachtwoordje van 8 tekens, die elk een cijfer,
letters en nog zo'n 10 vreemde tekens.
Voor elke positie in het wachtwoord zijn er 10 + 26 + 10 =
46 mogelijkheden.
Voor het hele wachtwoord, wordt dat dan in principe 8 ^ 46 =
3.4844914372704098658649559801013e+41 mogelijheden. En dàt
is het aantal mogelijkheden dat een brute force attack in
principe moet checken.
Het aantal toegestane wachtwoordcombinaties is natuurlijk
lager, als je bepaalde tekens maar een bepaald aantal malen
mag gebruiken. Maar de brute force attack 'weet' niet
hoevaak elk teken mag voorkomen.
31-03-2007, 00:40 door Anoniem
Door Anoniem
Door SirDice
Door Iceyoung
dit geldt echter als je elk getal maar 1 keer mag gebruiken.
maar in een wachtwoordt mag je rustig 111 gebruiken of 313
dus een getal mag meerdere keren voorkomen.

ben je er nog ???
Zie mijn berekening.. Je vergeet de wachtwoorden die uit
minder dan 3 karakters bestaan. Het is een maximum van 3.

Sigma(B^n) met n=0 t/m n=L waarbij B het aantal
verschillende karakters zijn en L de maximale lengte.

Bij B=3, L=3:

Sigma (3^n) n=0 t/m n=3 == (3^0)+(3^1)+(3^2)+(3^3) == Zullen
we ze even uitschrijven

1 van 0 karakters (geen wachtwoord!)
3 van 1 karakter (1-3)
9 van 2 karakters (11-33)
36 van 3 karakters (111-333)

1 + 3 + 9 + 36 == 49 mogelijke wachtwoorden :)

Bij een wachtwoord van 2 cijfers zijn er deze mogelijkheden:
00 01 02 03 04 05 06 07 08 09 10 11 12 ... 99
Dus100 mogelijkheden, want 2 ^ 10 (2 tekens, 10
mogelijkheden per teken).

Bij een wachtwoord van 2 letters zijn er deze mogelijkheden:
AA AB AC AD AE ... ZU ZV ZW ZX ZY ZZ
Nu zijn er 2 ^ 26 = 67108864 mogelijkheden

Nu een wachtwoordje van 8 tekens, die elk een cijfer,
letters en nog zo'n 10 vreemde tekens.
Voor elke positie in het wachtwoord zijn er 10 + 26 + 10 =
46 mogelijkheden.
Voor het hele wachtwoord, wordt dat dan in principe 8 ^ 46 =
3.4844914372704098658649559801013e+41 mogelijheden. En dàt
is het aantal mogelijkheden dat een brute force attack in
principe moet checken.
Het aantal toegestane wachtwoordcombinaties is natuurlijk
lager, als je bepaalde tekens maar een bepaald aantal malen
mag gebruiken. Maar de brute force attack 'weet' niet
hoevaak elk teken mag voorkomen.


Ehhh... 2 ^10 = 1024
03-04-2007, 23:08 door SirDice
Door Anoniem
Bij een wachtwoord van 2 cijfers zijn er deze mogelijkheden:
00 01 02 03 04 05 06 07 08 09 10 11 12 ... 99
Dus100 mogelijkheden, want 2 ^ 10 (2 tekens, 10 mogelijkheden per teken).
Zucht.. Beter opletten bij wiskunde ;)
Een wachtwoord van 2 cijfers heeft een minimum aantal en een maximum aantal van 2:
B=10; L1=2; L2=2;

Sigma(10^n) met n=2 t/m n=2 == 10^2 == 100 ;P
Bij een wachtwoord van 2 letters zijn er deze mogelijkheden:
B=26; L1=2; L2=2;
Moet ik die ook voorrekenen? Of geloof je het nu wel? ;)

Het gaat om het minimale en het maximale aantal karakters

En om mezelf maar te quoten:
Met deze berekeningen zie je al vrij snel dat het verhogen van B (de basis, aantal karakter mogelijkheden) een enorme impact heeft op de keyspace, veel meer dan de lengte van het wachtwoord.

B=52 als je alleen hoofd/kleine letters accepteert. B=62 met cijfers erbij. Reken maar na hoeveel mogelijkheden dat al zijn als je 6 t/m 14 karakters accepteert.
03-04-2007, 23:19 door SirDice
Door Iceyoung
Het punt is dat als je een brute force attack gaat doen en als je kiest voor minimaal 1 en maximaal 10 karakters dan ben je even bezig.
Definieer "even bezig". Ja tuurlijk kost het tijd om daar doorheen te komen. Maar een beetje off-line password cracker doet er al snel een paar miljoen per seconde. En vergeet niet dat, sinds 1965, de wet van Moore nog steeds redelijk
geldt ;)
13-09-2007, 17:50 door Anoniem
[
of gewoon met je firewall iedereen voor een uur blokken die
meer dan 3 synpakketjes in 1 minuut op poort 22 dumpt.

niets scripts of whatever, gewoon native met je packetfilter
]

Cool, geef mij ff de PF rules voor die.. (-:
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.