5-súwret Yadtıń tolıp tasıw mashqalası
Bul halda programma jumısın toqtatgandan Tridi quwanıwı anıq. Eger Tridi jáne de sanalılaw bolsa hám buferdi tosınarlı bıytlar menen emes, bálki zárúrli yad adresi menen toldırsa jáne bul yad adresine qandayda bir zıyanlı programma bolsa, ol halda saldamlılaw mashqala bolıwı anıq (6 - súwret).
6-súwret Zıyanlı kodtı júklew
ı
Bul halda Tridi tómendegi eki mashqalaǵa dus keliwi múmkin. Birinshisi, Tridi zıyankes dusturni yaddıń qaysı adresine jazılǵanın bilmaydi. Ekinshisi bolsa, stackda funktsiyanı qaytarda adresin anıq bilmaydi. Tómendegi eki ápiwayı xiyla nátiyjesinde, yadtı to'lib tamaqtasısh procesin tezlestiriw múmkin. Birinshisi bul, zıyankes programma kodın yad boslıqları menen (NOP) toltırıw bolsa, ekinshisi bolsa, qálegen tákirarlanıwshı qaytarda mánzildi qoyıw bolıp tabıladı (7 - súwret).
7-súwret Yadtı NOP penen toltırıw
Bul abay ádetde kóplegen, programmalıq ónim ushın kerekli bolǵan serial giltlerdi buzıwda keń paydalanıladı. Stackni avarıya jaǵdayınan saqlaw.
Stekni avarıyaǵa dús keliwinen qorǵawdıń kóplegen usıllar ámeldegi bolıp, olardan biri bul - programmalastırıw noqatı - názerinen jaqınlaw bolıp tabıladı, yaǵnıy kirisiwde maǵlıwmat ólshemin tekseriw. Bul múmkinshilikler C# hám Java programmalastırıw tillerinde kompilyator tárepinen atqarıladı.
Basqa bir usıl bolsa, yadtı tolǵanın anıqlaw hám avtomatikalıq túrde xabar beriw bolıp tabıladı. Bul halda sistema kod stekda júkleniwden aldın onı toqtatadı. Bunnan tısqarı, funktsiyanı qaytarda adresin tosınarlı túrde yadqa jazıw usılı ámeldegi bolıp, bunda Tridi funktsiyanı qaytarda adresin anıq bilmaydi.
Ortadan turıp ózgertiw. S programmalastırıw tilinde strcpy (buffer, input) funktsiyası ámeldegi bolıp, ol input maǵlıwmattı buffer ga kóshirip jazıwdı atqaradı. Bul halda yadtı to'lib tamaqtasıwınan saqlaw ushın, input maǵlıwmattı ólshemin tekseriw talap etiledi. Bul qorǵaw usılı tek ólshemdi tekserip, maǵlıwmat quramın teksermeydi. Bul halda ortadan turıp ózgertiw abayı bolıwı múmkin. 1Buǵan tómendegishe mısal keltiriw múmkin. Mısalı, paydalanıwshı Veb betten turıp maǵlıwmatlardı kirgizdi hám ol tómendegi soraw formasında ańlatpalandi:
http ://www.things.com/orders/final&custID=l12&num=55A&qty=20&price=10& shipping=5&total=205
Server tárepinen bul maǵlıwmat tómendegishe analizlenedi: paydalanıwshınıń ID nomeri 112 ge teń paydalanıwshı hár birewiniń bahası 10 $ den bolǵan 55 tártip cifrlı ónimnen 20 ta satıp aldı hám 5 $ jetkiziw bahası menen jámi 205 $ dollar tólewdi ámelge asırǵan. Bul soraw server tárepinen tekserilganida hesh qanday qátelik tabilǵan zatdı. Biraq Tridi bul qo'rovni tómendegi soraw menen almastırsa, ne hádiyse júz beredi?
http ://www.things.com/orders/final&custID=112&num=55A&qty=20&price=10& shipping=5&total=25
Bul soraw da aldınǵısı sıyaqlı server tárepinen tekseriwden tabıslı ótedi, biraq onıń manosi birotala basqa!!!
Operativ murojat shárti abayı (Race condition yamasa race jiyirkeniwd). Bul programmalıq ónimdiń yamasa elektron sistemanıń ózin tutıw jaǵdayı bolıp, shıǵıw ma`nisi basqarib bolmaydı basqa hádiyseler izbe-izligi yamasa waqıtına baylanıslı boladı. Programmalastırıwda bul halda qátelik júzege kelip, eki signal birinshi shıǵıw ushın háreket etedi. Bul hádiyse tiykarınan, programmalastırıwda parallel esaplawda (thread) júzege keledi.
Tómende eki aǵıs tárepinen óz ma`nisin birge asırıw ushın atqarǵan operativ murojati keltirilgen. Eger sistema tuwrı islegende tómendegi nátiyje alınıwı shárt edi
Biraq, operativ shaqırıq nátiyjesinde tómendegi jaǵday kelip shıqtı :
Bul abay ámeldegi programmalıq ónimlerde time-of-check -to-time-of-use (TOCTTOU) zaifligi ámeldegi boladı.
Ádetde bul abaylardı aldın alıwda programmalastırıw tillerinde global ózgeriwshin qulflab qoyıw usıllarınan paydalanıladı.
SQL ineksiya (SQL injection). SQL ineksiya abayı maǵlıwmatlar bazasına tiyisli bolǵan abay bolıp, SQL sorawlarǵa qadaǵan etilgen belgilerdi kirgiziw hám bunıń nátiyjesinde maǵlıwmatlar bazasında basqa nátiyje alıwǵa qaratılǵan. Bul abay túri eń kóp ushraytuǵın abay túri bolıp, onıń kólemi jıldan - jılǵa artıp barıp atır. Bul abay tiykarınan qadaǵan etilgen belgilerdi teksermaslik nátiyjesinde kelip shıǵadı. Tómende bul hálsizlikti óz ishine alǵan SQL sorawı keltirilgen:
statement = "SELECT * FROM users WHERE name = '" + userName + "';"
Bul sorawǵa tiykarınan áyne kerekli paydalanıwshı atı maǵlıwmatlar bazasınan qıdırılıp atır. Eger bul soraw buzıwǵa qaratılǵan tárepinen userName ornına ' OR '1'='1 kiritilse, quyidigi soraw payda boladı :
SELECT * FROM users WHERE name = '' OR '1'='1';
Nátiyjede maǵlıwmatlar bazasınan barlıq paydalanıwshılar tuwrısındaǵı maǵlıwmatlar shiǵarıladı. Bul jerde tómendegi qadaǵan etilgen belgiler birikpesinen de paydalanıw múmkin.
' OR '1'='1' --
' OR '1'='1' ({
' OR '1'='1' /*
Bul abaylardı aldın alıwda kiretuǵın soraw arnawlı belgilerge tekseriliwi kerek. Biraq, bul sorawlardı kúnden-kunga jańa túrleri kelip shıǵıp atır
Do'stlaringiz bilan baham: |