Web programiranje

Ranjivosti stanja utrke u web aplikacijama

Ranjivosti stanja utrke u web aplikacijama
Kada je web aplikacija konfigurirana za upravljanje funkcijama u fiksnom slijedu za istodobno izvršavanje dviju ili više operacija, događa se napad na utrku. Ova tehnika iskorištava vremensko kašnjenje između uvođenja usluge i pojave sigurnosne kontrole. Ovaj se napad može izvesti na jedan od dva načina, na temelju višenitnih aplikacija: upad nastao nepouzdanim procesima i upad povjerljivog postupka koji bi mogao imati ista i jednaka prava.

Različiti procesi mogu međusobno komunicirati bez primjerenih mjera. Ti su napadi poznati i kao napad vremena provjere, napad vremena korištenja ili TOC / TOU napadi. Čini se da su ranjivosti uvjeta utrke na prvom mjestu zbog osnovnih programskih pogrešaka koje programeri obično stvaraju, a ti su se kvarovi pokazali skupima. Zlonamjerni subjekti eksploatirali su uvjete utrke u puno zlonamjernih svrha, tj.e., od dobivanja besplatnih bonova za pljačku novca s internetskih računa i investicijskih društava.

Pretpostavimo da dvije paralelne niti izvođenja pokušavaju povećati vrijednost globalne varijable za 5. U konačnici, tada bi globalna varijabla imala vrijednost 10. Međutim, ako se sve niti istodobno izvode, izvršavanje može biti pogrešno bez zaključavanja resursa ili sinkronizacije. Kada prva nit vrši neke manipulacije s tom globalnom varijablom, druga nit je čita i počinje raditi neke druge manipulacije. U ovom slučaju konačna vrijednost ne bi bila onakva kakva se očekivala.

To se događa jer učinak završetka jedne niti ovisi o ishodu druge. Kada se dvije niti istodobno izvrše, doći će do neželjenih posljedica.

Opseg napada na stanje utrke:

Zamislite da se dvije niti gore navedenog primjera izvršavaju nešto malo kritičnije, poput razmjene novca između bankovnih računa. Da bi novac ispravno poslao, program će trebati izvršiti ove zadatke u ovom slijedu; Provjerite ima li dovoljno računa na računu pošiljatelja, dodajte novac na račun primatelja, a zatim oduzmite s računa pošiljatelja. Ali ako istodobno predate dva zahtjeva, možda ćete moći pokrenuti stanje u kojem se mijenja slijed izvođenja niti. U ovakvoj situaciji na kraju ćete dobiti iznos drugačiji od očekivanog.

Ranjivost rasnih uvjeta pronašao je Egor Homakov na web mjestu Starbucks. Otkrio je način kako besplatno stvoriti beskonačan iznos kredita na poklon bonima Starbucksa koristeći različite preglednike s različitim kolačićima.

Istaknuti Meltdown napad primjer je ranjivosti stanja rase. U napadu na topljenje, slabost se pokreće paralelnom obradom dohvata podataka iz memorije i autentifikacijom da li korisnik smije pristupiti memoriji ili ne. Ova greška omogućuje alatu da izbjegne standardne provjere privilegija koje odvajaju mehanizam napada od pristupa OS podacima. Ova rupa rezultira omogućavanjem bilo kojem neovlaštenom postupku pregledavanja podataka i informacija s bilo koje druge adrese povezane s trenutnim stanjem napretka u memoriji. U procesu neispravnog izvršavanja, podaci s neodobrene adrese često će se brzo slagati u predmemoriju CPU-a, odakle se podaci mogu oporaviti.

Scenariji napada u stvarnom životu:

Neprekidnim podnošenjem brojnih zahtjeva web poslužitelju možete pretraživati ​​i manipulirati uvjetima utrke u web aplikacijama. Ako želite vidjeti možete li podići više novca nego što imate na svom bankovnom računu, pomoću funkcije curl, istovremeno možete poslati nekoliko zahtjeva za povlačenjem na poslužitelj.

uviti (povući 50000) & (povući 50000) & (povući 50000) & (povući 50000) & (povući 50000) & (povući 50000)

Što više zahtjeva podnesete u kratkom vremenu, veće su šanse da će vaš napad uspjeti.

Štoviše, ako pošaljete asinkrone daljnje zahtjeve, slijedit ćete korisnika nekoliko puta umjesto da šaljete odgovor na pogrešku. Ja.e., ako dodate lažno zaglavlje koje sadrži% s tijekom ispuštanja zahtjeva pomoću turbo uljeza i zalijepite sljedeći python kôd:

def followReqs (cilj, popisi riječi):
engine = RequestEngine (krajnja točka = cilj.krajnja točka,
concurrentConnections = 40,
zahtjevaPerConnection = 100,
cjevovod = Lažno
)
za i u rasponu (40):
motor.red (cilj.req, str (i), gate = 'provjeri')
motor.openGate ('provjeri')
motor.dovršeno (timeout = 60)
def responseHandle (zahtijeva, zanimljivo):
stol.dodaj (zahtijeva)

Vidjet ćete gumb Attack. Nakon pritiska na to, Turbo Intruder šalje 40 upita i skenira statusne kodove. Ako vidite više odgovora sa statusom 201 Generirano, to znači da ste više puta slijedili osobu.

Postoji ranjivost uvjeta utrke u kojoj možete pristupiti više konzola koje se nude na besplatnim računima. Većina web mjesta koja nude besplatne konzole imaju besplatne račune, standardne i premium pakete. Besplatni računi pružaju samo 2 ili 3 konzole po korisniku. Da biste probili ovo ograničenje i koristili neograničene konzole, upadajte u GET zahtjev koristeći NULL korisne podatke više puta, poput 100 ili 200. A zatim ručno iz korisničkog sučelja izbrišite bilo koju konzolu dok su niti pokrenute.

Zaključak:

Kao način podrivanja kontrole pristupa, uključeni su i uvjeti utrke. Bilo koji program koji ovisi o mehanizmima kontrole pristupa može biti ranjiv. Većinu vremena, na web stranicama financijskih institucija, hakeri iskorištavaju uvjete utrke. Budući da bi to moglo dovesti do neograničene financijske koristi za hakera ako se otkrije stanje utrke na vitalnoj značajci kao što je podizanje gotovine, prijenos novca ili plaćanje kreditnom karticom. Platforme za e-trgovinu, video igre i mrežne usluge glasanja druge su visoko rizične tehnologije. Primjena sigurne istodobnosti tajna je izbjegavanja trkačkih uvjeta. A možete koristiti i blokade resursa. Također će biti ugrađena značajka zaključavanja za programske jezike sa paralelnim mogućnostima koji pomažu u sprječavanju takvih stanja. Uz to, slijedeći standarde sigurnog kodiranja, t.j.e., koncept najmanjeg privilegija i revizijski kôd smanjit će mogućnost kršenja programa.

Top 5 karata za hvatanje igara
Svi smo vidjeli i voljeli streaming reprodukcije na YouTubeu. PewDiePie, Jakesepticye i Markiplier samo su neki od najboljih igrača koji su zaradili m...
Kako razviti igru ​​na Linuxu
Prije deset godina malo je Linux korisnika predviđalo da će njihov omiljeni operativni sustav jednog dana biti popularna platforma za igranje komercij...
Luke komercijalnih igara s otvorenim kodom
Besplatne igre s otvorenim kodom i više platformi mogu se koristiti za igranje starih, kao i nekih prilično nedavnih naslova igara. U ovom će se člank...