Tīmekļa programmēšana

Sacensību nosacījumu ievainojamība tīmekļa lietojumprogrammās

Sacensību nosacījumu ievainojamība tīmekļa lietojumprogrammās
Kad tīmekļa lietojumprogramma, kas konfigurēta funkciju pārvaldībai fiksētā secībā, ir nepieciešama divu vai vairāku darbību vienlaicīgai izpildei, notiek uzbrukums sacīkšu apstākļiem. Šis paņēmiens izmanto laika aizturi starp pakalpojuma ieviešanu un drošības kontroles veikšanu. Šo uzbrukumu var veikt vienā no diviem veidiem, pamatojoties uz daudzšķiedru lietojumprogrammām: iebrukums, ko rada neuzticami procesi, un iebrukums, ko rada uzticams process, kuram varētu būt vienādas un vienādas tiesības.

Dažādi procesi var savstarpēji mijiedarboties bez atbilstošiem pasākumiem. Šie uzbrukumi ir pazīstami arī kā uzbrukuma laiks, uzbrukuma laiks vai TOC / TOU uzbrukumi. Sacensību nosacījumu ievainojamības, pirmkārt, pastāv pamata programmēšanas kļūdu dēļ, kuras izstrādātāji parasti rada, un šīs neveiksmes ir izrādījušās dārgas. Ļaunprātīgas organizācijas ir izmantojušas sacensību apstākļus daudziem ļaunprātīgiem mērķiem, t.e., no bezmaksas talonu iegūšanas, lai aplaupītu naudu no tiešsaistes kontiem un ieguldījumu firmām.

Pieņemsim, ka divi paralēli izpildes pavedieni mēģina palielināt globālā mainīgā vērtību par 5. Galu galā globālā mainīgā vērtība būtu 10. Tomēr, ja visi pavedieni darbojas vienlaicīgi, izpilde var būt nepareiza bez resursu bloķēšanas vai sinhronizācijas. Kad pirmais pavediens veic dažas manipulācijas ar šo globālo mainīgo, otrais pavediens to nolasa un sāk veikt citas manipulācijas. Šajā gadījumā galīgā vērtība nebūtu tā, kā gaidīts.

Tas notiek, jo viena pavediena izbeigšanas ietekme ir atkarīga no otra iznākuma. Kad abi pavedieni tiek izpildīti vienlaicīgi, radīsies neparedzētas sekas.

Sacensību stāvokļa uzbrukumu apjoms:

Iedomājieties, ka kaut kas nedaudz kritiskāks tiek izpildīts ar diviem iepriekšminētā piemēra pavedieniem, piemēram, naudas apmaiņa starp bankas kontiem. Lai pareizi nosūtītu naudu, programmai šie uzdevumi būs jāveic šādā secībā; Pārbaudiet, vai sūtītāja kontā ir pietiekami daudz atlikuma, pievienojiet naudu saņēmēja kontam un pēc tam atskaitiet no sūtītāja konta. Bet, ja vienlaikus iesniedzat divus pieprasījumus, iespējams, varēsiet aktivizēt nosacījumu, kurā mainās pavedienu izpildes secība. Šādā situācijā jūs saņemsiet citu summu, nekā paredzēts.

Sacīkšu apstākļu ievainojamību Egors Homakovs atrada vietnē Starbucks. Viņš atklāja veidu, kā bez maksas izveidot bezgalīgu kredīta daudzumu Starbucks dāvanu kuponos, izmantojot dažādas pārlūkprogrammas ar dažādiem sīkfailiem.

Izcilais Meltdown uzbrukums ir sacensību apstākļu neaizsargātības piemērs. Kļūdas uzbrukumā vājums rodas, paralēli apstrādājot datu izguvi no atmiņas un autentificējot, vai lietotājam ir atļauts piekļūt atmiņai. Šis trūkums ļauj rīkam izvairīties no standarta privilēģiju pārbaudēm, kas nošķir uzbrukuma mehānismu no piekļuves OS datiem. Šī nepilnība ļauj jebkuram neatļautam procesam skatīt datus un informāciju no jebkuras citas adreses, kas ir saistīta ar pašreizējā progresa stāvokli atmiņā. Kļūdainas izpildes laikā informācija no neapstiprinātas adreses bieži tiks ātri sakrauta CPU kešatmiņā, no kuras informāciju var atgūt.

Reālās dzīves uzbrukuma scenāriji:

Nepārtraukti iesniedzot daudzus pieprasījumus tīmekļa serverim, varat meklēt un manipulēt ar sacīkšu apstākļiem tīmekļa lietojumprogrammās. Ja vēlaties uzzināt, vai varat izņemt vairāk naudas, nekā ir jūsu bankas kontā, izmantojot čokurošanās funkciju, varat vienlaikus nosūtīt serverim vairākus izņemšanas pieprasījumus.

čokurošanās (izņemt 50000) & (izņemt 50000) & (izņemt 50000) & (izņemt 50000) & (izņemt 50000) & (izņemt 50000)

Jo vairāk prasību iesniedzat īsā laika posmā, jo lielāka ir iespēja, ka jūsu uzbrukums darbosies.

Turklāt, nosūtot asinhronus papildu pieprasījumus, vairākas reizes sekosiet lietotājam, nevis sūtīsit kļūdas atbildi. Es.e., ja pievienojat viltotu galveni, kas satur% s, vienlaikus nometot pieprasījumus, izmantojot turbo iebrucēju, un ielīmējiet šādu pitona kodu:

def followReqs (mērķis, vārdu saraksti):
dzinējs = RequestEngine (galapunkts = mērķis.galapunkts,
savienojumi = 40,
pieprasījumiPerConnection = 100,
cauruļvads = False
)
i diapazonā (40):
dzinējs.rinda (mērķis.req, str (i), vārti = 'pārbaudīt')
dzinējs.openGate ('pārbaudīt')
dzinējs.pabeigts (noildze = 60)
def responseHandle (jautājums, interesanti):
tabula.pievienot (pieprasīt)

Jūs redzēsiet pogu Attack. Pēc tam nospiežot, Turbo Intruder iesniedz 40 vaicājumus un skenē statusa kodus. Ja redzat vairākas atbildes ar statusu 201 Ģenerēts, tas norāda, cik reizes esat sekojis personai.

Pastāv konkurences apstākļu ievainojamība, kurā varat piekļūt vairākām konsolēm, kas tiek piedāvātas bezmaksas kontiem. Lielākajai daļai vietņu, kas nodrošina bezmaksas konsoles, ir bezmaksas konti, standarta un augstākās klases paketes. Bezmaksas konti nodrošina tikai 2 vai 3 konsoles katram lietotājam. Lai pārkāptu šo ierobežojumu un izmantotu neierobežotas konsoles, iejaucieties GET pieprasījumā, vairākas reizes izmantojot NULL lietderīgās kravas, piemēram, 100 vai 200. Un pēc tam, kamēr pavedieni darbojas, manuāli izdzēsiet jebkuru no konsolēm no lietotāja saskarnes.

Secinājums:

Lai mazinātu piekļuves kontroli, tiek iekļauti sacensību apstākļi. Jebkura programma, kas ir atkarīga no piekļuves kontroles mehānismiem, var būt neaizsargāta. Lielāko daļu laika hakeri finanšu iestāžu vietnēs izmanto sacensību apstākļus. Tā kā tas var radīt neierobežotus finansiālus ieguvumus hakerim, ja tiks atklāts sacensību apstāklis ​​tādai svarīgai iezīmei kā skaidras naudas izņemšana, naudas pārskaitījums vai maksājums ar kredītkarti. E-komercijas platformas, video spēles un tiešsaistes balsošanas pakalpojumi ir citas augsta riska tehnoloģijas. Drošas vienlaicības ieviešana ir noslēpums, lai izvairītos no sacīkšu apstākļiem. Un jūs varat izmantot arī resursu slēdzenes. Būs iebūvēta arī bloķēšanas funkcija programmēšanas valodām ar vienlaicīguma spējām, kas palīdz novērst šādus apstākļus. Turklāt, ievērojot drošus kodēšanas standartus, t.e., Vismazāko privilēģiju koncepcija un revīzijas kods samazinās programmas iespējas pārkāpt.

Kā instalēt un spēlēt Doom uz Linux
Ievads liktenī Doom sērija radās 90. gados pēc sākotnējā Doom izlaišanas. Tas bija tūlītējs hīts, un kopš tā laika spēļu sērija ir saņēmusi daudzas ba...
Vulkan Linux lietotājiem
Ar katru jauno grafisko karšu paaudzi mēs redzam, kā spēļu izstrādātāji pārspēj grafiskās uzticamības robežas un tuvojas fotoreālismam. Neskatoties uz...
OpenTTD vs Simutrans
Transporta simulācijas izveide var būt jautra, relaksējoša un ārkārtīgi vilinoša. Tāpēc jums jāpārliecinās, ka izmēģināt pēc iespējas vairāk spēļu, la...