Vraag:
Hoe praktisch is het om een ​​10-cijferig nummer brute kracht te geven via een URL
test
2016-08-25 20:00:15 UTC
view on stackexchange narkive permalink

Voorbeeld-URL www.[somewebsite ].com/[10_cijferig_getal//code>

Als het juiste nummer wordt opgehaald, wordt een pagina geladen.

Ik weet dat er een 10 miljard mogelijke cijfers om uit te kiezen, maar hoe lang zou het duren? Welke middelen heb je nodig?

Het hangt er echt van af hoeveel verzoeken per seconde u kunt doen en het hangt af van de server en niet van de client.Dus als de server 1000 verzoeken per seconde kan doen, wat veel en meer is dan de meeste websites kunnen doen (ofwel groot die dit niet toestaan of klein die op shared hosting staan), geeft dit 9999999999/1000/3600/24 = 115 dagen.Het onderstaande curl-script zou ongeveer 31 jaar duren, ervan uitgaande dat het 10 verzoeken per seconde kan doen.
Dit heet Online Brute Force.Er is een ander soort genaamd Offline Brute Force, waarbij je de platte tekst van een gestolen hash probeert te bepalen in situaties waarin geen regenboogtafel beschikbaar is.
U zult waarschijnlijk niet in staat zijn.Gemiddeld kost de brute kracht slechts 5 miljard pogingen, niet 10 miljard (of 4,5 als het eerste cijfer niet nul kan zijn).Dit zal echter een terabyte of zo aan serverside logfiles creëren.Dit zal redelijkerwijs de schijf vullen en de server laten crashen.
Merk op dat als u 10.000 van dergelijke pagina's heeft, het gemiddeld slechts 500.000 pogingen kost.
Plaats een URL en laat me zien hoe snel ik het kan forceren :)
Elk redelijk ontworpen systeem zal deze aanval detecteren en voorkomen.
@Navin - Je zou kunnen genieten van [dit] (http://bsides-2016.pentest-challenge.co.uk/login)
Alleen omdat er 10 miljard mogelijke nummers zijn, wil nog niet zeggen dat er maar één geldig nummer / URL is (tenzij dat precies het geval is dat u beschrijft).Neem bijvoorbeeld eBay.Veilingpagina's bevinden zich op `eBay.com/itm/ [12-cijferig nummer]`.
@StigHemmer Een aanvaller kan maatregelen nemen om hun verzoeken niet te onderscheiden van legitieme verzoeken.Het kost de aanvaller niet veel moeite voordat het gemakkelijker is om het URL-schema te verbeteren dan om het verschil te zien tussen een aanval en legitieme verzoeken.Een redelijk ontworpen systeem zou in de eerste plaats niet vertrouwen op een 10-cijferig nummer om de inhoud te beveiligen.
@DewiMorgan Je maakt een grapje.Bij standaardinstallaties van Apache / IIS / nginx is logboekrotatie toch ingeschakeld?
@Rhymoid Op tijd, niet op grootte.
Vier antwoorden:
paj28
2016-08-25 20:26:51 UTC
view on stackexchange narkive permalink

Ongeveer een dag

Als we geluk hebben: er is geen beperking, we kunnen elke test uitvoeren met een HEAD-verzoek, kunnen veel tests uitvoeren op een enkele HTTP-verbinding met Keepalive, en kan veel gelijktijdige verbindingen hebben.

In dat geval zijn we meestal beperkt door bandbreedte. Stel dat we een strak verzoek maken van 100 bytes, dat betekent dat we in totaal 100 * 10 10 bytes moeten verzenden. En laten we veronderstellen dat we een fatsoenlijke 100 Mbps-verbinding hebben, wat ongeveer 10 megabytes per seconde zal doen. Dat zou 100.000 seconden duren - iets meer dan een dag.

Dit is het beste, in de praktijk zijn er waarschijnlijk problemen waardoor het niet zo snel werkt. We zouden meerdere systemen tegelijk kunnen laten werken om het sneller te maken, maar op een gegeven moment zullen we de server overbelasten.

Het onderwerp zegt 'laad een pagina', wat de feitelijke inhoud van de pagina impliceert, niet alleen de headers.Je wiskunde is ver weg als dit het geval is.We zouden meer informatie nodig hebben over de feitelijke gegevens om echt * elke * indicatie te geven.
Ik denk dat de aanname is dat een geldige pagina het enige is met een geldige koptekst, of een andere koptekst heeft dan een slechte of ontbrekende pagina.
@YorickdeWid - Het is vrij waarschijnlijk dat de headers anders zouden zijn.Ik heb dit gedaan in een echte pentest (hoewel het 6 cijfers waren en niet 10) en HEAD-verzoeken werkten prima.
Dit antwoord is buitengewoon optimistisch.
@Eclipse misschien daarom (en) hij zegt: "Dit is het beste geval, in de praktijk zijn er waarschijnlijk problemen die verhinderen dat het zo snel werkt"?
@DoktorJ Dus wat is de waarde dan ?.Iedereen kan een kunstmatig getal rondgooien en elke praktische relevantie afwijzen.
@YorickdeWid omdat het een drempel instelt - het vertelt u dat het * minstens * een dag zal duren.Zeker, in een real-world scenario kan het 3-4 dagen duren, maar er is nu in ieder geval een ondergrens.U kunt geen bovengrens definiëren, want u zou dit zeker kunnen uitvoeren op een 486 met een 9600bps-modem ... of u zou het kunnen gebruiken op een ATTiny85 die communiceert met 2400bps via serieel ... u * kunt * ervoor zorgen dat het zo lang duurtzoals je wilt.In plaats van er hardware van enterprise- of overheidskwaliteit naar toe te gooien, zal er een lagere limiet zijn voor hoeveel tijd het kost, en dit antwoord is ongeveer één.
@Eclipse - Het is eerlijk genoeg dat u dat denkt, maar ik zou u aanmoedigen om uit te leggen WAAROM u dat denkt, in plaats van alleen uw mening te geven.Mijn antwoord is optimistisch, maar niet overdreven.Als de server geen beperking heeft, wordt meestal aan de andere aannames voldaan.En ik heb dit echt gedaan met een 6-cijferige code, dus het is niet helemaal theoretisch.
Ik zou uitgaan van 1 Gb / s.Je kunt er vrij zeker van zijn dat een aanvaller een VPS met voldoende bandbreedte gaat gebruiken.
Goede gok en hopelijk doen ISP en datacenter deze HEAD niet aan als een soort denial of services-aanval.
Ik denk dat het grootste probleem niet de bandbreedte zal zijn, maar hoeveel verzoeken de server EN uw machine effectief kunnen verwerken.In uw voorbeeld zou het verzenden van verzoeken van 100 bytes om een lijn van 10 MBps te verzadigen in feite 100.000 verzoeken per seconde betekenen.Zelfs als we aannemen dat een enkel verzoek slechts 100 ms duurt (dus u kunt 10 batches per seconde doen), zijn dat nog steeds 10.000 verzoeken tegelijkertijd, en dat gaat alleen maar omhoog met hogere reactietijden.Je hebt aan beide kanten een stevige machine nodig om zoveel verzoeken tegelijkertijd te beheren.
Zijn de cijfers die hier worden gebruikt niet in het ergste geval?Als we geen rekening houden met bandbreedte en verzoeken per seconde, was de vraag hoe lang het gaat duren.Gemiddeld moet de helft van de beschikbare waarden worden gecontroleerd voordat een treffer wordt ontvangen, aangezien het beste geval een treffer is op het eerste verzoek en in het slechtste geval alle waarden worden getest voordat een treffer wordt ontvangen
@YorickdeWid Realistisch gezien, als u beschermt tegen een aanval, wat is dan het verschil tussen 1 dag en een week?Dit antwoord geeft ons een ruwe * orde van grootte * van de tijdschaal die we van een intelligente aanvaller kunnen verwachten.Het laat zien dat we niet kunnen verwachten dat een aanvaller er een jaar of een maand over doet, maar een paar dagen als de verdediger geluk heeft.Dat is behoorlijk nuttige informatie als u probeert te beslissen hoe verdedigbaar uw systeem is.
Yorick de Wid
2016-08-25 20:04:52 UTC
view on stackexchange narkive permalink

Het rollen van een 10-cijferig nummer duurt op de meeste systemen niet lang, ongeacht het gebruikte script / de taal. Het grotere probleem hier is het aantal verbindingen dat u tegelijkertijd opent en de vertraging tussen verzoeken. Een goed geconfigureerd systeem blokkeert te veel verzoeken die afkomstig zijn van hetzelfde adres (ofwel door de firewall of door de daemon zelf).

Bijvoorbeeld:

  #! / Bin / bashfor i in {1..1000} do curl "www. [ergens anders] .com / $ i" > "$ {i} _out.txt" gedaan  

Misschien wilt u draad dit.

Het voorbeeld zou verbinding maken, het verzoek uitvoeren met meer headers dan nodig is en elke keer de verbinding verbreken.Een beter idee wordt beschreven in het geaccepteerde antwoord, waarbij u kleine verzoeken blijft streamen over één verbinding (per werknemer).
@Rhymoid en daarom is gekozen als antwoord
"Een goed geconfigureerd systeem blokkeert te veel verzoeken die van hetzelfde adres afkomstig zijn."Opgemerkt moet worden dat dit misschien geen effectieve verdediging is, aangezien botnets bestaan.
OPSXCQ
2016-08-26 05:02:58 UTC
view on stackexchange narkive permalink

Hangt af van verschillende factoren.

Serverzijde

  • Serverbandbreedte
  • Genereert dit gevraagde nummer een zoekopdracht naar een database?
  • Een firewall / beveiligingsscript om dit soort activiteit te detecteren en te blokkeren
  • Alle andere bronnen die een bottleneck kunnen zijn, zoals cpu of geheugen.
  • Als jij dat bent soort gelukkige mensen die het zullen proberen op een server waarvan de logboeken worden opgeslagen op een zeer beperkt bestandssysteem, en dit soort activiteit verbruikt elke vrije byte ervan waardoor de toepassing stopt.

Clientzijde

  • Uw bandbreedte

Mijn overwegingen met betrekking tot deze activiteit:

Voer eerst een DNS-query uit en kijk of er meer dan een server voor dat adres. Dat zal helpen, meer server, meer je kunt de belasting splitsen.

Test de firewall, neem een ​​VPS en doe wat tests om een ​​idee van je omgeving te krijgen zonder je ip-adres op de zwarte lijst te zetten. Test enkele snelheden, 100, 1000, 10000, per seconde. Test de gemiddelde reactietijd voor elk uur van de dag. Als de reactietijden veranderen, heeft uw server een aantal tijdvensters die meer verkeer / verzoeken ontvangen en dat is een goed moment om de server niet te belasten.

Met alle bovenstaande resultaten weet u wat u moet doen. Als de server meer bandbreedte heeft dan jij, wat er bijna altijd gebeurt, kun je een VPS krijgen om je te helpen, kies er een in de buurt van de server. U heeft uw plan over hoeveel verzoeken optimaal zullen zijn om uw oplossing te archiveren. Als de servers bijvoorbeeld 's ochtends meer belasting krijgen, kunt u 1000 / s gedurende de dag gebruiken, bijvoorbeeld van 8:00 tot 22:00 uur, en zoveel mogelijk de servers kunnen tussen 22.00 uur en 8.00 uur antwoorden.

Houd er rekening mee dat dit soort activiteiten ertoe kan leiden dat sommige services crashen of zo zwaar worden belast dat het de gebruikers niet kan beantwoorden en dat dit kan worden beschouwd als een Denial Of Service-aanval. Het kan je in de problemen brengen vanwege verschillende factoren, ik weet niet van alle landen, in verschillende landen is dit soort aanvallen een misdaad. Neem contact op met de systeembeheerder over uw bedoelingen voordat u een systeem laat crashen en verantwoordelijk wordt voor uitval.

Kevin
2016-08-27 11:30:45 UTC
view on stackexchange narkive permalink

Een dag is enorm onrealistisch , ongeacht de middelen.

Er zijn 86.400 seconden in een dag. Rond af naar 100k. Verdeel 1B door 100k en je krijgt 10.000 zoekopdrachten per seconde. Dit is wat groot. De server heeft een behoorlijk verhaal over de taakverdeling en een behoorlijke hoeveelheid computercapaciteit nodig. Ter referentie: als we 100 machines hebben met elk 8 cores (voor een totaal van 800 cores), moeten we elk verzoek binnen maximaal 80 ms omdraaien, wat krap is, maar niet volkomen onredelijk. De client heeft ook capaciteit nodig die evenredig is met die van de server, en aangenomen dat je een black hat-aanvaller bent, gebruik je waarschijnlijk een botnet of iets dergelijks.

Eigenlijk moet je een botnet, omdat de client zo geografisch moet worden verspreid dat de server het kan balanceren zonder netwerkverbindingen met hoge latentie te passeren. Dit is cruciaal omdat de latentie tussen server en client meetelt voor ons 80 ms-budget. Als de klant zich volledig in Amerika bevindt, maar de helft van de server in Europa, zal de transatlantische latentie onze prestaties volledig verpesten en zullen we aanzienlijk meer capaciteit nodig hebben om dit goed te maken (anders zullen we gewoon alle verzoeken moeten afhandelen met de Amerikaanse helft van de server, die vergelijkbare capaciteitsproblemen tegenkomt).

Maar wacht! U zei 'ongeacht de middelen'. Waarom gooi je resourcenummers naar me?

Omdat de mensen die webservices op deze schaal exploiteren over het algemeen goed genoeg toezicht hebben om een ​​plotselinge stroom van 10k QPS-verkeer van een botnet te detecteren. Naar alle waarschijnlijkheid zal uw doelwit bepalen dat u DDoS-aanvallen op hen uitvoert (wat eigenlijk is wat u doet) en standaardbeperkende maatregelen implementeren (bijv. 503s of CAPTCHA's bedienen, het verkeer op een zwarte holte, etc.). Op dit punt zal je aanval mislukken of in ieder geval veel langer duren dan je had gepland, en de autoriteiten zullen nu werken om je botnet te ontmantelen.

Dus als je wilt dat je aanval echt werkt, kun je dat niet doe het met deze snelheid. Of je doelwit kan het verkeer niet aan, of ze zijn slim genoeg om het te detecteren en te blokkeren.

Leuk nemen.Een maar keuze: u heeft geen rekening gehouden met threaded / async-programmering - een enkele kern kan meerdere verzoeken tegelijk verwerken
@paj28: Dat helpt alleen in de mate dat het behandelen van een verzoek slapen inhoudt (ik overweeg hyperthreading niet omdat je gewoon logische kernen kunt gebruiken in plaats van fysieke kernen, als dat nauwkeuriger is voor je prestatiekenmerken).Je slaapt misschien veel als je dienende pad sterk I / O-gebonden is, maar zelfs met asynchrone heb je veel capaciteit nodig om de wiskunde in die situatie te laten werken.Met name de bandbreedte van uw I / O-kanaal wordt een bottleneck.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...