Ha van valami, amit a kiberbűnözők szeretnek, az az adat. Az ellopott adatok rendkívül értékesek az illegális piacokon, és a privát adatbázisokhoz való hozzáférés nagyszerű módja lehet a rosszindulatú szereplőknek, hogy profitot szerezzenek vállalkozásaikból. A privát adatok elérésének egyik módja az SQL injekció. De mi is pontosan az SQL injekció, hogyan működik, és megelőzhető-e egy ilyen támadás?
Mi az SQL-injekció?
A szoftverprogramok működése a kódra támaszkodik. A kód az a nyelv is, amelyet a gépek a műveletek végrehajtására használnak, és számos formában előfordulhat (Python, JavaScript, C++ stb.). A kiberbűnözők gyakran kódon keresztül támadhatják meg az áldozatokat, és az SQL-injekciók (vagy SQLis) sem különböznek egymástól. Ezek lehetővé teszik a rosszindulatú szereplők számára, hogy káros kódot „injektáljanak” egy SQL utasításba.
Először nézzük meg, mit jelent az SQL.
Az SQL a Structured Query Language rövidítése. Ez egy másik fajta programozási nyelv kifejezetten az adatbázisok kezelésére használják. Az IBM által az 1970-es években kifejlesztett SQL képes kezelni, tárolni és visszakeresni az adatbázis-információkat. A világ számos adatbázis-kommunikációs rendszere használja az SQL-t, így nem meglepő, hogy a fenyegetések szereplői olyan módszereket dolgoztak ki, amelyekkel visszaélhetnek az adatbázisok megcélzása érdekében.
Az SQL utasítások az adatbázis-kommunikáció kulcsfontosságú részét képezik. Az SQL utasítás egy parancs ami sokféle formában jelentkezik. Egyesek megváltoztatják az adatokat, mások lekérik vagy törlik azokat, mások pedig magának az adatbázisnak a szerkezetét módosíthatják. Amikor SQL-befecskendezés történik, a rosszindulatú kód egy SQL-utasításba kerül.
Természetesen egy webhelynek vagy alkalmazásnak az SQL programozási nyelvet kell használnia ahhoz, hogy lehetséges legyen az SQL injekció. De hogyan működik ez a támadási vektor?
Tegyük fel, hogy van egy szabályos kódsora, amelyet egy alkalmazás használ. Amikor egy számítógépes bûnözõ rosszindulatú SQL-befecskendezést szúr be, egy olyan kódsor kerül hozzáadásra, amely megzavarhatja az alkalmazás által az adatbázisába küldött lekérdezéseket. Ezzel az adatbázist úgy lehet kihasználni, hogy a fenyegetés szereplője olyan adatokat tekintsen meg, amelyekhez egyébként nem férhetne hozzá.
Innen a kiberbûnözõ adatokat lophat, hogy azokat közvetlenül, ill eladni a sötét weben vagy máshol. Ezenkívül módosíthatják, hozzáadhatják vagy törölhetik az adatokat a célzott adatbázisból. Az SQL injekciós támadás mértékétől függően sok kárt okozhat. Ha fizetési adatokhoz, társadalombiztosítási számokhoz vagy más személyes adatokhoz hozzáférnek, sok embert kizsákmányolhatnak.
Másrészt, ha a támadónak sikerül jelentősen megváltoztatnia az adatbázist, nagy mennyiségű adat végleg elveszhet. Összességében elmondható, hogy az SQL-befecskendezések egyetlen támadással egész adatbázisokat tönkretehetnek. Noha 1998 óta léteznek, napjainkban is aktuálisak és veszélyesek.
Amint azt a Open Web Application Security Project (OWASP)2021-ben 274 000 SQL-injektálást azonosítottak, amikor az alkalmazásokat tesztelték ilyen támadások jelenlétére.
Az SQL-befecskendezés típusai
Az SQL-injektálásnak néhány fajtája létezik, a fő három a vak, sávon belüli és sávon kívüli injekció.
Vak (vagy kikövetkeztető) SQL-befecskendezés történik, amikor az alkalmazást vagy webhelyet megtámadja a injekciót, de a HTTP (Hypertext Transfer Protocol) válaszok nem tartalmazzák az eredményt SQL lekérdezés. Más szóval, a megtámadott adatbázisból semmilyen adatot nem adnak át a kiberbűnözőknek. Szóval, mi értelme ennek?
A vak SQL-befecskendezés segítségével a támadó adatokat küld a célkiszolgálónak, majd magának a HTTP-válasznak a természetén keresztül felismer bizonyos dolgokat az adatbázissal kapcsolatban. Ezen felül a HTTP-válaszhoz kapcsolódó tényezők segíthetik a támadót egy újabb, hatékonyabb SQL-befecskendezés létrehozásában az adatbázis eléréséhez.
A vak SQL-injektálásnak két kulcsfontosságú típusa van, ezek időalapú és logikai adatok. Ez a két változat természetükben meglehetősen hasonló. Mind a logikai, mind az időalapú SQL-injektálás igen vagy nem válaszkérdések tömbjét küldi el, bár ez utóbbihoz az adatbázisnak várnia kell egy rövid ideig, mielőtt válaszolna a lekérdezésekre.
Ezután következnek a sávon belüli SQL injekciók. A sávon belüli SQL injekciók lehetővé teszik a kezelő számára, hogy ugyanazon a csatornán keresztül hajtsa végre a támadást és érje el a kívánt eredményt. A sávon belüli SQL-injektálások a leggyakrabban használtak, egyszerűen azért, mert ezeket a legkönnyebb végrehajtani, mivel csak egy csatornát igényelnek.
Végül van egy sávon kívüli SQL injekció. Ez lényegében a sávon belüli SQL injekció alternatív változata, ahol a támadó nem hajthatja végre a támadást összesen egyetlen csatornán keresztül. Alternatív megoldásként a támadásnak sávon kívüli SQL-befecskendezést kell alkalmaznia, ha a célkiszolgáló egyszerűen nem elég gyors ahhoz, hogy eredményeket hozzon.
Ezek a tényezők kissé megnehezítik a folyamatot, vagyis bizonyos funkciókra kell támaszkodnia ahhoz, hogy a célzott adatbázison aktív legyen a siker érdekében. Például a támadott platformon nem kell bemeneti fertőtlenítést végezni. Emiatt a sávon belüli SQL-befecskendezések sokkal gyakoribbak, mint a sávon kívüli SQL-befecskendezések. De még mindig előfordulnak.
Elkerülhetők-e az SQL-injekciók?
Az SQL-injekciók jobban foglalkoztatják a vállalkozásokat és szervezeteket, mint az átlagos magánszemélyeket. De vannak dolgok, amelyeket ezek a potenciális célpontok tehetnek annak érdekében, hogy csökkentsék annak esélyét, hogy egy ilyen támadás eltalálja őket.
A bemenetek megtisztítása az SQL-befecskendezések elkerülésének kulcsfontosságú általános gyakorlata. Ez egy szűrési folyamat, amely átvizsgálja és megtisztítja a veszélyes karaktereket. Ha az SQL-kódot a tisztítás előtt dolgozzák fel, az SQL-befecskendezés esélye természetesen megnő.
Ezenkívül a paraméterezett lekérdezések segíthetnek elkerülni az SQL-injekciókat. Ezek olyan lekérdezések, amelyek végrehajtásához legalább egy paraméterre van szükség. A paraméterek alkalmazása megnehezíti a kiberbűnözők számára az SQL injekciós támadás sikeres végrehajtását.
De nincs biztos módszer az SQL-injektálás megakadályozására. Mint sok kibertámadás esetében, szinte lehetetlen teljesen légmentesen tartani az eszközöket és rendszereket. Ha SQL-befecskendezésekről van szó, a legjobb, amit tehet, ha megtisztítja az összes bemenetet, és paraméterezett lekérdezéseket hoz létre.
Az SQL-injekciók elöregedtek, de még mindig veszélyt jelentenek
Bár az SQL-befecskendezések már több mint 20 éve léteznek, még mindig kockázatot jelentenek számos webhely és alkalmazás számára. Érdemes tehát szem előtt tartani ezt a támadási formát, és megtenni a szükséges lépéseket a megelőzés érdekében, mivel ez a jövőben valamikor veszélyt jelenthet az adatbázisaira.