SQL Injection: Difference between revisions
(9 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
'''Nimi:''' Marti Reinsaar<br /> | '''Nimi:''' Marti Reinsaar<br /> | ||
''' | '''Rühm:''' A21 (2013/2014)<br /> | ||
Teema on avatud vabal valikul soovijale täiendamiseks. | |||
''Järgmine väide pole alati õige: Ründaja saab eksitada serverit ning seejärel käivitada mitmeid käske või hankida teavet ilma, et peaks olema autoriseeritud.'' | |||
''Peaks ära tooma ka selle, mis asi on SQLi, mainima ka seda, et on olemas raamistikud ja prepare lause, ütlema, et kõige mõjusam kaitse on programmi parandamine, mitte tulemüürimine.'' | |||
''SQL süstimiseks sobivad paljud mootorid, kuna lisaks SQL võimalustele, mis iseenesest on juba päris rikkalikud pakutakse tihti ka muud. | |||
''Tihti hoitakse andmebaasis parooliräsi (soolatud) ja selgitus järgnev selgitus pole õige:'' | |||
OR EXISTS(SELECT * FROM users WHERE name='jake' AND password LIKE '__w%') AND ''=' //(Kas täht w ON paroolis kolmandal kohal | |||
'''Margus Ernits''' | |||
== Sissejuhatus == | == Sissejuhatus == | ||
Line 24: | Line 37: | ||
== (SQL) Injection tüüpi ründed == | == (SQL) Injection tüüpi ründed == | ||
SQL, OS, LDAP Injection tüüpi rünnete puhul kasutatakse ära mitmeid teatud nõrkusi | SQL, OS, LDAP Injection tüüpi rünnete puhul kasutatakse ära mitmeid teatud nõrkusi. | ||
Ründaja saab eksitada serverit ning seejärel käivitada mitmeid käske või hankida teavet ilma, et peaks olema autoriseeritud. | Ründaja saab eksitada serverit ning seejärel käivitada mitmeid käske või hankida teavet ilma, et peaks olema autoriseeritud. | ||
Line 30: | Line 43: | ||
Põhiline manipuleerimine käibki kasutaja sisendiga, sisestades vastavasse vormi päringuid, mida enne käivitamist eraldi ei kontrollita. Samuti ei piirata info ligipääsu autoriseerimata kasutajatele või vale taseme autoriseeritud kasutajatele arvates, et vastava päringulahtri mittekuvamine teeb info kättesaamise võimatuks. Enamasti on andmebaasid aga ühtsed ning suvalisest päringuvormist saame kätte mistahes andmed. | Põhiline manipuleerimine käibki kasutaja sisendiga, sisestades vastavasse vormi päringuid, mida enne käivitamist eraldi ei kontrollita. Samuti ei piirata info ligipääsu autoriseerimata kasutajatele või vale taseme autoriseeritud kasutajatele arvates, et vastava päringulahtri mittekuvamine teeb info kättesaamise võimatuks. Enamasti on andmebaasid aga ühtsed ning suvalisest päringuvormist saame kätte mistahes andmed. | ||
''MS SQL Server on paljude veebirakenduste andmebaasimootor ja tänu oma rikkalikele programmeerimisvõimalustele väga sobilik SQLi süstimiseks. Järjest uuemates SQL Serveri versioonides on küll kasutusel järjest paremad tehnikad süstimise vältimiseks (TEXTCOPY utiliidi keelamine, DDL päästikprotsessid, operatsioonisüsteemi poole pöörduvate süsteemsete protseduuride aktiveerimiseks tuleb ligipääs eraldi lubada jne.), kuid parim tõrje on ikkagi programmeerija poolt õieti ja teadlikult süstimist vältivate lausekonstruktsioonide koostamine.'' | |||
''SQL süstimine ise toimub nõnda, et teadlikult valitud sisendparameetrite koostamisega saab muuta algset, programmeerija poolt loodud baasipäringu loogika mõtet.'' | |||
''Allikas:'' ''http://www.am.ee/SQL'' | |||
== Näited SQLi rünnetest == | == Näited SQLi rünnetest == | ||
Line 55: | Line 74: | ||
[[File:Gsql1test.PNG]] | [[File:Gsql1test.PNG]] | ||
''Allikas:'' ''https://wiki.itcollege.ee/images/1/1b/Gsql1test.PNG'' | |||
Ründe sooritamine | Ründe sooritamine | ||
Line 60: | Line 81: | ||
[[File:Gsql1testtulem.PNG]] | [[File:Gsql1testtulem.PNG]] | ||
''Allikas:'' ''https://wiki.itcollege.ee/index.php/File:Gsql1testtulem.PNG'' | |||
Väljavõte ründest | Väljavõte ründest | ||
Line 76: | Line 99: | ||
*http://en.wikipedia.org/wiki/OWASP | *http://en.wikipedia.org/wiki/OWASP | ||
*https://www.youtube.com/watch?v=AuPiYZr5Yfw&hd=1 - Lihtne videodemonstratsioon SQL rünnetest | *https://www.youtube.com/watch?v=AuPiYZr5Yfw&hd=1 - Lihtne videodemonstratsioon SQL rünnetest | ||
*http://www.am.ee/SQL - Arvutimaailma artikkel Injection rünnetest | |||
== Kasutatud kirjandus == | == Kasutatud kirjandus == | ||
Line 84: | Line 108: | ||
*https://wiki.itcollege.ee/index.php/GreenSQL | *https://wiki.itcollege.ee/index.php/GreenSQL | ||
[[Category:IT_infrastruktuuri_teenused]] | [[Category:IT_infrastruktuuri_teenused]] |
Latest revision as of 17:49, 20 May 2014
Autor
Nimi: Marti Reinsaar
Rühm: A21 (2013/2014)
Teema on avatud vabal valikul soovijale täiendamiseks.
Järgmine väide pole alati õige: Ründaja saab eksitada serverit ning seejärel käivitada mitmeid käske või hankida teavet ilma, et peaks olema autoriseeritud.
Peaks ära tooma ka selle, mis asi on SQLi, mainima ka seda, et on olemas raamistikud ja prepare lause, ütlema, et kõige mõjusam kaitse on programmi parandamine, mitte tulemüürimine.
SQL süstimiseks sobivad paljud mootorid, kuna lisaks SQL võimalustele, mis iseenesest on juba päris rikkalikud pakutakse tihti ka muud. Tihti hoitakse andmebaasis parooliräsi (soolatud) ja selgitus järgnev selgitus pole õige:
OR EXISTS(SELECT * FROM users WHERE name='jake' AND password LIKE '__w%') AND =' //(Kas täht w ON paroolis kolmandal kohal
Margus Ernits
Sissejuhatus
OWASP (Open Web Application Security Project) on Injection tüüpi ründed liigitanud 2013 Top10 seisuga esikohale.
Siin kirjatükis keskendume SQL Injection tüüpi rünnetele ning anname aimu millega on üldse tegemist.
Klassid
Klassikaline SQLI Blind või Inference SQL injection Andmebaasisüsteemi spetsiifiline SQLI Ühendatud SQLI ründed *SQL injection + ebaturvaline autentimine *SQL injection + DDoS ründed *SQL injection + DNS ründed *SQL injection + XSS
(SQL) Injection tüüpi ründed
SQL, OS, LDAP Injection tüüpi rünnete puhul kasutatakse ära mitmeid teatud nõrkusi.
Ründaja saab eksitada serverit ning seejärel käivitada mitmeid käske või hankida teavet ilma, et peaks olema autoriseeritud.
Põhiline manipuleerimine käibki kasutaja sisendiga, sisestades vastavasse vormi päringuid, mida enne käivitamist eraldi ei kontrollita. Samuti ei piirata info ligipääsu autoriseerimata kasutajatele või vale taseme autoriseeritud kasutajatele arvates, et vastava päringulahtri mittekuvamine teeb info kättesaamise võimatuks. Enamasti on andmebaasid aga ühtsed ning suvalisest päringuvormist saame kätte mistahes andmed.
MS SQL Server on paljude veebirakenduste andmebaasimootor ja tänu oma rikkalikele programmeerimisvõimalustele väga sobilik SQLi süstimiseks. Järjest uuemates SQL Serveri versioonides on küll kasutusel järjest paremad tehnikad süstimise vältimiseks (TEXTCOPY utiliidi keelamine, DDL päästikprotsessid, operatsioonisüsteemi poole pöörduvate süsteemsete protseduuride aktiveerimiseks tuleb ligipääs eraldi lubada jne.), kuid parim tõrje on ikkagi programmeerija poolt õieti ja teadlikult süstimist vältivate lausekonstruktsioonide koostamine.
SQL süstimine ise toimub nõnda, et teadlikult valitud sisendparameetrite koostamisega saab muuta algset, programmeerija poolt loodud baasipäringu loogika mõtet.
Allikas: http://www.am.ee/SQL
Näited SQLi rünnetest
'OR''='
' UNION SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.TABLES;# --
' UNION SELECT user_login,user_pass FROM wp.wp_users; #
' OR EXISTS(SELECT * FROM users WHERE name='jake' AND password LIKE '%w%') AND ''=' //(Kas eksisteerib täht w)
' OR EXISTS(SELECT * FROM users WHERE name='jake' AND password LIKE '__w%') AND ''=' //(Kas täht w on paroolis kolmandal kohal)
' OR EXISTS(SELECT 1 FROM dual WHERE database() LIKE '%j%') AND ''=' //(Kas valitud andmebaas sisaldab tähte J)
' OR EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='one') AND ''=' //(Kas tabel one asub andmebaasis test)
' OR (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE '%j%')>1 AND ''=' //(Kas on rohkem kui üks tabel andmebaasis, sialdades tähte J)
Allikas: https://wiki.itcollege.ee/images/1/1b/Gsql1test.PNG
Ründe sooritamine
Allikas: https://wiki.itcollege.ee/index.php/File:Gsql1testtulem.PNG
Väljavõte ründest
Kaitse SQL Injection tüüpi rünnete vastu
Üks levinud variant on kasutada SQL rünnete vastu mõnda SQL tulemüüri - näiteks GreenSQL.
Tulemüür jälgib andmebaasi nö kasutamist, õpib näiteks nädal aega ja selle aja jooksul jätab meelde kasutusmetoodika ja mis päringuid kasutatakse. Ülejäänud heidetakse kõrvale.
GreenSQL - https://wiki.itcollege.ee/index.php/GreenSQL
Kasulik materjal
- http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202013.pdf - OWASP TOP10 2013
- http://en.wikipedia.org/wiki/OWASP
- https://www.youtube.com/watch?v=AuPiYZr5Yfw&hd=1 - Lihtne videodemonstratsioon SQL rünnetest
- http://www.am.ee/SQL - Arvutimaailma artikkel Injection rünnetest