SQLi védelem

Védelem az SQL-injekciók (SQLi) és az XSS-sebezhetőségek (cross-site Scripting) ellen.

Strukturált lekérdezési nyelv (SQL) jelentése

A strukturált lekérdezési nyelv (SQL) az adatbázis lekérdezéséhez használt szabványos nyelv. (Ne feledje, hogy a keresőmotorokban, például a Google-ban vagy a Bingben végrehajtott lekérdezések eltérőek.)

  • Hiba alapú SQLi

    A támadók SQL lekérdezéseket fecskendeznek

  • UNION-alapú SQLi

    Támadók az UNION SQL operátort használják az adatbázishoz

  • Idő alapú

    Támadó a lekérdezés eredményének válaszidejét másodpercben vizsgálja

Strukturált lekérdezési nyelv (SQL) jelentése

Az SQL-befecskendezés (SQLi) a támadás egy olyan típusa, amelyben a számítógépes bűnözők megpróbálják kihasználni az alkalmazás kódjában lévő sebezhetőségeket úgy, hogy SQL-lekérdezést szúrnak be szokásos beviteli vagy űrlapmezőkbe, például felhasználónévbe vagy jelszóba. Az SQL utasítás ezután átadásra kerül az alkalmazás mögöttes SQL-adatbázisnak.

Az SQL injekciós  támadások akkor sikeresek, ha a webalapú beviteli űrlap lehetővé teszi, hogy a felhasználó által generált SQL utasítások közvetlenül lekérdezzék az adatbázist. Ezek a támadások a megosztott kódbázisok, például a WordPress beépülő modulok használatával is elterjedtek, amelyek a mögöttes kódmintában biztonsági rést tartalmaznak. Ez a sérülékenység a teljes alkalmazásra átragad, és  több százezer webhelyet érinthet , amelyek mindegyike ezt a megosztott kódot használja.

A kár hatalmas lehet. Egy támadó, aki jól ismeri az SQL-t, lekérdezéseket hajt végre egy webalapú alkalmazásban, ahol nincsenek bemeneti érvényesítési paraméterek, majd könnyedén hozzáfér a vállalat ügyfélfájljaihoz vagy bizalmas pénzügyi információihoz.

Mik azok az SQL-lekérdezések?

A lekérdezések a felhasználó által megadott kritériumok alapján meghatározott adatok keresésére szolgálnak. Az SQL egyike annak a számos nyelvnek, amelyek az alkalmazások adatbázisait futtatják, amelyeket belső használatra építhetnek fel egy szervezet, vagy közzétehetnek az interneten és elérhetőek a nyilvánosság számára. Az adatok keresése mellett az SLQ-lekérdezések számításokat is végezhetnek, adatokat összegezhetnek, és automatizálhatják a feladatokat.

Mik azok az SQL-lekérdezések?

Az SQL-injekciók típusai

Sávon belüli SQLi

A sávon belüli SQLi a támadások gyakori típusa, egyszerűségéről és hatékonyságáról ismert. Ennek a módszernek két változata van: hibaalapú és szakszervezeti alapú. 

1. Hiba alapú SQLi

A támadók SQL lekérdezéseket fecskendeznek be abban a reményben, hogy az adatbázis hibaüzeneteket ad vissza, amelyek információkat adhatnak a támadóknak az adatbázisról és annak szerkezetéről. 

2. UNION-alapú SQLi

Ebben a forgatókönyvben a támadók az UNION SQL operátort használják az adatbázishoz, hogy egyetlen HTTP-választ küldjenek vissza. A támadók ezután kiértékelhetik a választ az adatbázis tartalmára vonatkozó nyomok után. 

Következtető (vak) SQLi

Következtető vagy vak SQLi-támadások esetén a csalók lekérdezik az adatbázist, és megfigyelik a kiszolgáló viselkedését, hogy információkat gyűjtsenek az adatbázis szerkezetéről. Az ilyen típusú támadások lassabbak, de ugyanolyan károsak lehetnek, mint az SQLi más típusai. Két típusa van: logikai és időalapú. 

1. Logikai

A támadó lekérdezi az adatbázist, és megvizsgálva, hogy a HTTP-válasz módosult-e vagy változatlan maradt-e, meg tudja állapítani, hogy az eredmény igaz vagy hamis volt-e. 

2. Idő alapú

Ahogy a neve is sugallja, a támadó a lekérdezés eredményének válaszidejét másodpercben vizsgálja. A logikai típushoz hasonlóan a támadó alaposan megvizsgálja a HTTP-választ, hogy megállapítsa, igaz vagy hamis volt-e a lekérdezés.

Sávon kívüli SQLi

Ez egy speciális SQLi eset, amely csak akkor működik, ha az alkalmazás által használt adatbázis-kiszolgáló bizonyos szolgáltatásai be vannak kapcsolva. A sávon kívüli SQLi a sávon belüli és következtetési technikák alternatívája. A sávon kívüli SQLi nem hagyatkozik arra, hogy a támadó lekérdezze az adatbázist, hogy megvizsgálja a hibaüzeneteket vagy a HTTP-válaszokat. Ehelyett azt várja a szervertől, hogy DNS- vagy HTTP-kéréseket generáljon, hogy a támadó adatokat, például felhasználóneveket és jelszavakat szerezhessen meg. 

 

Példák SQL-befecskendezésre (SQLi)

Az SQL-befecskendezés egy szabványos SQL-lekérdezést manipulál, hogy kihasználja az alkalmazás mögöttes adatbázisának sebezhetőségeit. Nézzünk meg néhány kódpéldát, hogy lássuk, hogyan működik ez. 

Egy tipikus SQL adatbázis-lekérdezés egy e-kereskedelmi alkalmazáshoz a következőképpen nézhet ki:

SELECT ProductName, ProductDescription
FROM Products
WHERE ProductNumber = ProductNumber

Ha egy támadó hozzá akar férni az adatbázisban található összes terméknévhez és -leíráshoz – még azokhoz is, amelyekhez nem fér hozzá –, a támadó ehhez hasonló egységes erőforrás-keresőt (URL) ír be a képernyőn megjelenő webes űrlapon: http: //www.ecommercesite.com/products/products.asp?productid=999 vagy 1=1. A megfelelő SQL lekérdezés a következő lesz: 

SELECT Product Name, Product Description
FROM Products
WHERE ProductNumber = 999 VAGY 1=1

Ha egy támadó egy teljes adatbázist akar törölni, kihasználhatja a helytelenül szűrt karaktereket, és beírhatja a http://www.ecommercesite.com/products/products.asp?productid=999 címet; DROP TABLE a következő SQL lekérdezés generálásához:

SELECT Product Name, Product Description
FROM Products
WHERE ProductNumber = 999; DROP TABLE FELHASZNÁLÓK

Ennek eredményeként a teljes felhasználói adatbázis eldobható vagy törölhető.

Hogyan lehet megakadályozni az SQL-injekciót (SQLi)

Fertőtlenítés

Ha a támadók váratlan lekérdezést tudnak bevinni, amelyet az alkalmazás elfogad, akkor az adatok védelme érdekében érdemes korlátozni a beviteli funkciókat. A fejlesztők alkalmazhatnak bemenet-ellenőrzést vagy megtisztítást, így az alkalmazás csak bizonyos beviteleket fogad el az űrlapmezőkbe, és elutasítja azokat, amelyek nem megfelelőek. A webfelhasználók ismerik ezt a gyakorlatot. Példa erre, amikor a rendszer felkéri őket, hogy hozzanak létre egy jelszót, amelynek meghatározott számú karakterből kell állnia, és legalább egy speciális karaktert kell tartalmaznia.

Ez azonban nem ideális megoldás, mert nehéz megtervezni az összes megengedett bemeneti kombinációt. Jelentős számú hiba származhat a felhasználókból, akik lehetnek alkalmazottak vagy ügyfelek. Ez jelentősen befolyásolhatja az üzleti tevékenységet. 

Szűrés és érvényesítés

Az SQLi kiszűrésére és a potenciális fenyegetések blokkolására a vállalatok  webalkalmazás-tűzfalat (WAF) telepíthetnek . A WAF a rosszindulatú SQL-lekérdezések meghiúsítása érdekében az alkalmazás bemeneteit az ismert aláírások nagy listájához egyezteti. A listát rendszeresen frissítik és javítják, hogy a szervezet lépést tudjon tartani a fejlődő fenyegetésekkel.

Az SQL parancsok hatókörének korlátozása

Bár az SQLi  szűrése  szükséges, az SQL-lekérdezések 100%-os blokkolása nem kivitelezhető. Előfordulhat, hogy az alkalmazottaknak, partnereknek vagy biztonsági iparági szakértőknek tesztelniük kell az alkalmazást, és ehhez engedélyre lesz szükségük. A WAF a kérés blokkolása előtt keresztellenőrzi a bemenetet az Internet Protocol (IP) adataival. 

Kerülje a nem biztonságos URL-paramétereket

Ha egy webhely nem használ Hypertext Transfer Protocol Secure-t (HTTPS), amely a titkosításhoz a biztonságos socket réteg/szállítási réteg biztonságát (SSL/TLS) használja, a támadó az SQLi segítségével manipulálhatja a munkamenet-cookie-t, hogy hozzáférjen az adatbázishoz. Ennek megakadályozása érdekében a szervezeteknek biztosítaniuk kell webhelyeik és webalkalmazásaik URL-címét.

A fejlesztők alkalmazhatnak bemenet-ellenőrzést vagy megtisztítást, így az alkalmazás csak bizonyos beviteleket fogad el az űrlapmezőkbe, és elutasítja azokat, amelyek nem megfelelőek.

A hackerek SQL-befecskendezést használnak, hogy jogosulatlanul hozzáférjenek a webalkalmazások adatbázisában tárolt adatokhoz – vagy az adatokkal kapcsolatos információkhoz.

Az SQL-befecskendezés többnyire illegális, bár ez a joghatósági határoktól függ.

Az SQL-befecskendezés (SQLi) a támadás egy olyan típusa, amelyben a számítógépes bűnözők megpróbálják kihasználni az alkalmazás kódjában lévő sebezhetőségeket úgy, hogy SQL-lekérdezést szúrnak be szokásos beviteli vagy űrlapmezőkbe, például felhasználónévbe vagy jelszóba.

A szervezetek IP-adatokat használhatnak a lekérdezés eredeti beviteli helyének észlelésére, de a támadó személyazonosságát nem lehet megerősíteni pusztán az SQL-befecskendezési lekérdezés vizsgálatával.