🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
10 messages
10 total messages Started by Vincent Spruyt Sat, 05 Oct 2002 19:18
bruteforce-protection
#7242
Author: Vincent Spruyt
Date: Sat, 05 Oct 2002 19:18
16 lines
2080 bytes
Ik zou een aantal van mijn scripts willen beveiligen tegen bruteforce en 
flood. Wanneer een bepaald ip bvb meer dan 5 keer op minder dan 10 sec. 
het form (fout) invult, moet dit ip gedurende een bepaalde periode 
geblokkeerd worden.
Op zich kan ik dat perfect doen door het van elke (foute) inlogger op te 
slaan in een bestandje, en het ip van een volgende foute inlogger te 
vergelijken met dit ip. Hetzelfde doe ik dan met het tijdstip waarop dit 
gebeurt.
Nu vroeg ik me af of er geen minder omslachtige manier is in php om dit 
te bereiken...	    	

-- 
Computer games don't affect kids; I mean if Pac-Man affected us as kids, 
we'd all be running around in darkened rooms, munching magic pills and 
listening to repetitive electronic music. (Christian Wilson)
		- <url:http://www.computersecurity.be/> -
Re: bruteforce-protection
#7246
Author: Pieter Philippaerts
Date: Sat, 05 Oct 2002 20:02
26 lines
2552 bytes
"Vincent Spruyt" <info@computersecurity.be> wrote in message
news:Xns929ED8F15394Dwww.computersecurity@195.130.132.65...
> Nu vroeg ik me af of er geen minder omslachtige manier is in php om dit
> te bereiken...

Een iets minder omslachtige manier [denk ik] is de volgende: als een
gebruiker inlogt met een fout paswoord, wacht dan enkele seconden eerdat je
hem verwittigd dat het paswoord fout is. Daarenboven wordt het maximum
aantal connecties van eenzelfde IP adres gelimiteerd. Op die manier moet je
geen history gaan bijhouden, maar enkel de IP adressen die op een bepaald
moment geconnecteerd zijn.

Als je je afvraagt ofdat dit wel een goede bescherming is kan je even gaan
rekenen: stel dat het paswoord 8 karakters lang is, waarbij er 100
verschillende karakters kunnen gebruikt worden. Als de aanvaller brute force
gebruikt, dan gaat die gemiddeld vijf miljoen miljard keer moeten proberen
eerdat hij de juiste combinatie gevonden heeft [wat in feite een
onderschatting is aangezien je er hier vanuit gaat dat de aanvaller op
voorhand weet dat het paswoord 8 karakters lang is]. Als je het maximum
aantal gelijktijdige requests per IPs vastlegt op 5 en de wachttijd op 3
seconden, dan kunnen we uitrekenen dat de aanvaller er (5000000000000000 /
5) * 3 seconden over gaat doen [in het beste geval], wat dus equivalent is
met ongeveer 95000 millennia.

Mvg,
Pieter Philippaerts
Re: bruteforce-protection
#7249
Author: Dominique Devriese
Date: Sun, 06 Oct 2002 00:34
40 lines
3273 bytes
Pieter Philippaerts writes:

> "Vincent Spruyt" <info@computersecurity.be> wrote in message
> news:Xns929ED8F15394Dwww.computersecurity@195.130.132.65...
>> Nu vroeg ik me af of er geen minder omslachtige manier is in php om
>> dit te bereiken...

> Een iets minder omslachtige manier [denk ik] is de volgende: als een
> gebruiker inlogt met een fout paswoord, wacht dan enkele seconden
> eerdat je hem verwittigd dat het paswoord fout is. Daarenboven wordt
> het maximum aantal connecties van eenzelfde IP adres gelimiteerd. Op
> die manier moet je geen history gaan bijhouden, maar enkel de IP
> adressen die op een bepaald moment geconnecteerd zijn.

> Als je je afvraagt ofdat dit wel een goede bescherming is kan je
> even gaan rekenen: stel dat het paswoord 8 karakters lang is,
> waarbij er 100 verschillende karakters kunnen gebruikt worden. Als
> de aanvaller brute force gebruikt, dan gaat die gemiddeld vijf
> miljoen miljard keer moeten proberen eerdat hij de juiste combinatie
> gevonden heeft [wat in feite een onderschatting is aangezien je er
> hier vanuit gaat dat de aanvaller op voorhand weet dat het paswoord
> 8 karakters lang is]. Als je het maximum aantal gelijktijdige
> requests per IPs vastlegt op 5 en de wachttijd op 3 seconden, dan
> kunnen we uitrekenen dat de aanvaller er (5000000000000000 /
> 5) * 3 seconden over gaat doen [in het beste geval], wat dus
>      equivalent is
> met ongeveer 95000 millennia.

Houdt die rekensom rekening met het feit dat het overgrote deel van
alle paswoorden uit A-Za-z0-9-_./:!;=,)( en nog een aantal karakters
bestaat, en dan nog over het algemeen in een vrij karakteristieke
volgorde ?
Nu ja, het zou toch nog een aantal jaar moeten duren om ze allemaal te
proberen, vermoed ik...
sjuus
domi 

-- 
Q:	Heard about the <ethnic> who couldn't spell?
A:	He spent the night in a warehouse.
Re: bruteforce-protection
#7250
Author: Vincent Spruyt
Date: Sun, 06 Oct 2002 08:04
70 lines
4445 bytes
"Pieter Philippaerts" <Pieter@removethis.mentalis.org> schreef in
news:_yHn9.81106$49.10715264@amsnews02.chello.com: 

> "Vincent Spruyt" <info@computersecurity.be> wrote in message
> news:Xns929ED8F15394Dwww.computersecurity@195.130.132.65...
>> Nu vroeg ik me af of er geen minder omslachtige manier is in php om
>> dit te bereiken...
> 
> Een iets minder omslachtige manier [denk ik] is de volgende: als een
> gebruiker inlogt met een fout paswoord, wacht dan enkele seconden
> eerdat je hem verwittigd dat het paswoord fout is. Daarenboven wordt
> het maximum aantal connecties van eenzelfde IP adres gelimiteerd. Op
> die manier moet je geen history gaan bijhouden, maar enkel de IP
> adressen die op een bepaald moment geconnecteerd zijn.
> 
> Als je je afvraagt ofdat dit wel een goede bescherming is kan je even
> gaan rekenen: stel dat het paswoord 8 karakters lang is, waarbij er
> 100 verschillende karakters kunnen gebruikt worden. Als de aanvaller
> brute force gebruikt, dan gaat die gemiddeld vijf miljoen miljard keer
> moeten proberen eerdat hij de juiste combinatie gevonden heeft [wat in
> feite een onderschatting is aangezien je er hier vanuit gaat dat de
> aanvaller op voorhand weet dat het paswoord 8 karakters lang is]. Als
> je het maximum aantal gelijktijdige requests per IPs vastlegt op 5 en
> de wachttijd op 3 seconden, dan kunnen we uitrekenen dat de aanvaller
> er (5000000000000000 / 5) * 3 seconden over gaat doen [in het beste
> geval], wat dus equivalent is met ongeveer 95000 millennia.

thx! Nu postte ik deze vraag, met in het achterhoofd niet alleen bruteforce 
protection, maar ook een betere methode om het flooden van een aantal 
scripts die user input vragen tegen te gaan... En mag alles liever niet te 
traag gaan.
Zo heb ik een 'Whois' scriptje. Ik zou het nu zo willen beveiligen dat, 
wanneer iemand meer dan 5 submits doet binnen de 10 sec., dat de 6de niet 
meer zal werken, en dat hij een 5tal minuten zal moeten wachten.
Ik dacht aan iets in deze stijl:
Wanneer iemand een formsubmit doet, wordt in een of ander bestand 
hetvolgende opgeslagen:

ip:unixtimestamp\n

Stel dus dat hij dat 4 x doet, en daarna iemand anders, waarna deze persoon 
weer aan de beurt komt:

ip:unixtimestamp
ip:unixtimestamp
ip:unixtimestamp
ip:unixtimestamp
ip2:unixtimestamp2
ip:unixtimestamp

Wat ik nu moet doen is bij elke submit kijken of de persoon al 5 keer 
voorkomt in het lijstje. als dat zo is, moeten het grootste tijdstip en het 
kleinste met elkaar vergeleken worden. De rest volgt hieruit...

Mijn idee:

$lines = explode ( "\n", $bestand );
foreach ( $lines as $line ) {
list( $ip, $tijdstip ) = explode( ':', $line );
}

Het enige wat ik nu nog zou moeten kunnen doen, is de verschillende ip's 'n 
tijdstippen in andere variabelen gieten, die ik dan met elkaar kan 
vergelijken...

-- 
Computer games don't affect kids; I mean if Pac-Man affected us as kids, 
we'd all be running around in darkened rooms, munching magic pills and 
listening to repetitive electronic music. (Christian Wilson)
		- <url:http://www.computersecurity.be/> -
Re: bruteforce-protection
#7253
Author: Pieter Philippaerts
Date: Sun, 06 Oct 2002 12:20
9 lines
1711 bytes
"Dominique Devriese" <dominique.devriese@student.kuleuven.ac.be> wrote in
message news:87fzvkxv53.fsf@appel.kotnet.org...
> Houdt die rekensom rekening met het feit dat het overgrote deel van
> alle paswoorden uit A-Za-z0-9-_./:!;=,)( en nog een aantal karakters
> bestaat, en dan nog over het algemeen in een vrij karakteristieke
> volgorde ?

Neen, het gaat ervan uit dat het paswoord door de computer gekozen is [en
_niet_ uit een woordenlijst, welteverstaan ;-)]...
Re: bruteforce-protection
#7254
Author: Vincent Spruyt
Date: Sun, 06 Oct 2002 12:29
21 lines
2362 bytes
"Pieter Philippaerts" <Pieter@removethis.mentalis.org> schreef in 
news:tUVn9.88590$49.11513959@amsnews02.chello.com:

> "Dominique Devriese" <dominique.devriese@student.kuleuven.ac.be> wrote in
> message news:87fzvkxv53.fsf@appel.kotnet.org...
>> Houdt die rekensom rekening met het feit dat het overgrote deel van
>> alle paswoorden uit A-Za-z0-9-_./:!;=,)( en nog een aantal karakters
>> bestaat, en dan nog over het algemeen in een vrij karakteristieke
>> volgorde ?
> 
> Neen, het gaat ervan uit dat het paswoord door de computer gekozen is [en
> _niet_ uit een woordenlijst, welteverstaan ;-)]...

is bij mijn passwords ook zo, dus np ;-)


-- 
Computer games don't affect kids; I mean if Pac-Man affected us as kids, 
we'd all be running around in darkened rooms, munching magic pills and 
listening to repetitive electronic music. (Christian Wilson)
		- <url:http://www.computersecurity.be/> -
Re: bruteforce-protection
#7262
Author: Jack D
Date: Mon, 07 Oct 2002 10:43
26 lines
2027 bytes
Vincent Spruyt wrote on 06-10-2002 10:04:

> Stel dus dat hij dat 4 x doet, en daarna iemand anders, waarna deze persoon
> weer aan de beurt komt:
> 
> ip:unixtimestamp
> ip:unixtimestamp
> ip:unixtimestamp
> ip:unixtimestamp
> ip2:unixtimestamp2
> ip:unixtimestamp
> 
> Wat ik nu moet doen is bij elke submit kijken of de persoon al 5 keer
> voorkomt in het lijstje. als dat zo is, moeten het grootste tijdstip en het
> kleinste met elkaar vergeleken worden. De rest volgt hieruit...

Zal niet werken. Als een gebruiker eerst eenmaal fout inlogt, dan 10
seconden wacht en dan de brute force hack probeert, zal steeds vergeleken
worden met de eerste (die lang genoeg geleden is...)

Een ander idee is een wachtlijn te implementeren, waarin elk element
geflucht wordt zodra hij er 10 seconden inzit (eventueel met een timeout
callback), indien dan een ip er al 4 keer inzit, blokkeren...

Gr,
Jacques
Re: bruteforce-protection
#7269
Author: Vincent Spruyt
Date: Mon, 07 Oct 2002 17:59
40 lines
3106 bytes
Jack D <jack_221NOSP@Mhotmail.com> schreef in
news:B9C731F1.F449%jack_221NOSP@Mhotmail.com: 

> Vincent Spruyt wrote on 06-10-2002 10:04:
> 
>> Stel dus dat hij dat 4 x doet, en daarna iemand anders, waarna deze
>> persoon weer aan de beurt komt:
>> 
>> ip:unixtimestamp
>> ip:unixtimestamp
>> ip:unixtimestamp
>> ip:unixtimestamp
>> ip2:unixtimestamp2
>> ip:unixtimestamp
>> 
>> Wat ik nu moet doen is bij elke submit kijken of de persoon al 5 keer
>> voorkomt in het lijstje. als dat zo is, moeten het grootste tijdstip
>> en het kleinste met elkaar vergeleken worden. De rest volgt
>> hieruit... 
> 
> Zal niet werken. Als een gebruiker eerst eenmaal fout inlogt, dan 10
> seconden wacht en dan de brute force hack probeert, zal steeds
> vergeleken worden met de eerste (die lang genoeg geleden is...)

Niet als ik telkens na zo'n vergelijking het de oudste entry van zijn ip 
kan verwijderen...
 
> Een ander idee is een wachtlijn te implementeren, waarin elk element
> geflucht wordt zodra hij er 10 seconden inzit (eventueel met een
> timeout callback), indien dan een ip er al 4 keer inzit, blokkeren...

uhu. misschien wel ja.
Nu, in praktijk heb ik nog steeds niets voor mekaar proberen ;-) mijn php 
kennis is nogal beperkt. Maar ik zal eens denken over jouw methode.

-- 
Computer games don't affect kids; I mean if Pac-Man affected us as kids, 
we'd all be running around in darkened rooms, munching magic pills and 
listening to repetitive electronic music. (Christian Wilson)
		- <url:http://www.computersecurity.be/> -
Re: bruteforce-protection
#7271
Author: Pieter Philippaerts
Date: Mon, 07 Oct 2002 18:07
12 lines
1942 bytes
"Vincent Spruyt" <info@computersecurity.be> wrote in message
news:Xns92AECB9383767www.computersecurity@195.130.132.65...
> > Een ander idee is een wachtlijn te implementeren, waarin elk element
> > geflucht wordt zodra hij er 10 seconden inzit (eventueel met een
> > timeout callback), indien dan een ip er al 4 keer inzit, blokkeren...
>
> uhu. misschien wel ja.
> Nu, in praktijk heb ik nog steeds niets voor mekaar proberen ;-) mijn php
> kennis is nogal beperkt. Maar ik zal eens denken over jouw methode.

Heb je toevallig geen toegang tot een database? Dat kan de implementatie een
stuk vergemakkelijken...
Re: bruteforce-protection
#7273
Author: Vincent Spruyt
Date: Mon, 07 Oct 2002 18:55
31 lines
2991 bytes
"Pieter Philippaerts" <Pieter@removethis.mentalis.org> schreef in
news:_3ko9.102536$49.12914877@amsnews02.chello.com: 

> "Vincent Spruyt" <info@computersecurity.be> wrote in message
> news:Xns92AECB9383767www.computersecurity@195.130.132.65...
>> > Een ander idee is een wachtlijn te implementeren, waarin elk
>> > element geflucht wordt zodra hij er 10 seconden inzit (eventueel
>> > met een timeout callback), indien dan een ip er al 4 keer inzit,
>> > blokkeren... 
>>
>> uhu. misschien wel ja.
>> Nu, in praktijk heb ik nog steeds niets voor mekaar proberen ;-) mijn
>> php kennis is nogal beperkt. Maar ik zal eens denken over jouw
>> methode. 
> 
> Heb je toevallig geen toegang tot een database? Dat kan de

uhu, mysql...
maar met flat files kan ik werken ;-) met een database niet...
Zo worden bvb ook door mijn scripts die op de home van 
www.computersecurity.Be staan steeds cache-files aangemaakt. Het script 
checkt telkens wanneer ze geladen worden (bij elk bezoek dus) hoe oud de 
cache is. Als die nog niet ouder is dan een uur wordt ze gewoon gelezen. 
Hierdoor gaat het laden sneller. Als de cache al ouder is dan een uur 
wordt ze geupdate.

-- 
Computer games don't affect kids; I mean if Pac-Man affected us as kids, 
we'd all be running around in darkened rooms, munching magic pills and 
listening to repetitive electronic music. (Christian Wilson)
		- <url:http://www.computersecurity.be/> -
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads