Otthon » SQL Injection 101: Mi az SQLi és hogyan lehet megelőzni a támadásokat

SQL Injection 101: Mi az SQLi és hogyan lehet megelőzni a támadásokat

2022. augusztus 06. • biztonság

Mi az SQL befecskendezés

Az SQL befecskendezés (SQLi) egy olyan támadástípus, amely lehetővé teszi a bűnözők számára, hogy rosszindulatú SQL utasításokat hajtsanak végre sebezhető webalkalmazások ellen. A támadók hozzáférhetnek érzékeny adatokhoz, például ügyfélinformációkhoz, személyes adatokhoz, üzleti titkokhoz és még sok máshoz az alkalmazásbiztonsági intézkedések megkerülésével. Itt megvitatjuk az SQL befecskendezést, annak működését és azt, hogyan előzhetjük meg a támadásokat.

Az SQL befecskendezéses támadások bármely olyan weboldalon előfordulhatnak, amely SQL adatbázist használ. Ez a támadástípus lehetővé teszi a támadók számára, hogy hozzáférjenek az alapvető adatokhoz. Láthatják a fogyasztói információkat, személyes adatokat, üzleti titkokat és szellemi tulajdont. Ez az egyik legsúlyosabb támadástípus a webalkalmazások ellen az OWASP szerint.

Az SQL befecskendezés típusai

Az SQL befecskendezés típusai

Sávon belüli SQLi

In-band SQL injection is an attack where the attacker uses the same channel to send and receive queries. In-band means that the response is obtained using the same communications medium. The attacker’s goal is to get the response in a web browser immediately, if possible when carrying out the attack manually with a web browser.

Példa in-band SQL befecskendezésre

The most common way for an attacker to do an in-band SQL injection is to change the request so they can see the personal information of the current user. This can be done by changing the value sent as part of the request. For example, if the statement was supposed to display the user’s name, the attacker could change it so that their name is displayed instead.

SELECT * FROM felhasználók WHERE felhasználó_id LIKE 'aktuális_felhasználó'

Az in-band SQL befecskendezés két leggyakoribb formája a hiba alapú SQLi és az unió alapú SQLi.

Hiba alapú SQLi

An error-based SQLi technique is an in-band SQL injection approach that takes advantage of database server error messages to discover the database’s architecture. Error-based SQL injection is the most common type of in-band SQL injection.

Példa hiba alapú SQLi-re:

Ha egy támadó megpróbál bejelentkezni a következő hitelesítő adatokkal:

felhasználónév: ' OR 'a'='ajelszó: bármi

Az adatbázis hibát fog visszaadni, mert az utasítás szintaktikailag helytelen. A hibaüzenet információkat fed fel az adatbázisról, amelyeket a támadó előnyére használhat.

Unió alapú SQLi:

Az in-band SQL befecskendezés egy módja annak, hogy információt szerezzenek egy weboldalról az UNION operátor használatával, amely két vagy több SELECT utasítás kimeneteit kombinálja.

Vak SQL befecskendezés

A vak SQL befecskendezés egy olyan támadás, ahol a támadó megpróbál válaszokat kapni az adatbázisból olyan kérdések feltevésével, amelyek igaz vagy hamis választ eredményeznek. A támadó hibaüzeneteket használ, hogy lássa, az alkalmazás másképp reagál-e, amikor egy adott kódot használnak.

Amikor egy hacker SQL befecskendezést használ, a webalkalmazás kritikus adatbázis figyelmeztető üzeneteket jeleníthet meg, amelyek azt állítják, hogy az SQL lekérdezés szintaxisa helytelen. A vak SQL befecskendezés ugyanúgy működik, mint a hagyományos SQL befecskendezés, kivéve, hogy az adatokat hogyan szerzik meg az adatbázisból. Ha egy adatbázis nem rendelkezik elegendő információval ahhoz, hogy a támadó kihasználhassa, a támadónak kérdéssorozatot kell feltennie az adatok megszerzéséhez.

A vak SQL befecskendezés vak-logikai alapú SQLi-re és vak-idő alapú SQLi-re oszlik.

Logikai alapú vak SQLi

A logikai alapú vak SQL befecskendezés egy olyan támadás, ahol a támadó megpróbál válaszokat kapni az adatbázisból olyan kérdések feltevésével, amelyek igaz vagy hamis választ eredményeznek. A támadó hibaüzeneteket használ, hogy lássa, az alkalmazás másképp reagál-e, amikor egy adott kódot használnak.

Példa logikai alapú vak SQLi-re:

Ha egy támadó meg akarja tudni az adatbázis típusát, a következő utasítást használja:

SELECT * FROM users WHERE user_id LIKE 'current_user' és database() like '%type%'

Ha az adatbázis MySQL, a kimenet valami ilyesmi lenne:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘and database() like ‘%type%” at line

Idő alapú vak SQL befecskendezés

Az idő alapú vak támadás az, amikor egy SQL parancsot küldenek a szervernek olyan kóddal, amely lassabban hajtja végre a lekérdezéseket.

Time-based Blind attacks allow attackers to extract data based on access time. Such an attack is known as a blind or inferential injection assault. This is a type of assault in which no data flows between the attacker and the database, but because there is no response, it’s also known as a blind injection attack.

A válaszidő jelzi, hogy a válasz helyes vagy helytelen. Ha a válasz negatív, a betolakodó újabb kérést tesz. Ez a támadási technika lassú, mert a hackernek minden karaktert egyenként kell végigmennie, különösen, ha hatalmas adatbázisokat támad.

Példa vak SQLi-re

Ebben a példában a támadó megpróbálja meghatározni, hogy a 999-es azonosítójú felhasználó létezik-e az adatbázisban. Ehhez a következő utasítást használja:

IF(SUBSTRING((SELECT password FROM users WHERE user_id=999),0, LEN('titkos'))='titkos', SLEEP(30), 'hamis')

Ha a 999-es azonosítójú felhasználó létezik az adatbázisban és a jelszava titkos, akkor az alkalmazás 30 másodpercig aludni fog. Az alkalmazás hamisat ad vissza, ha a felhasználó nem létezik az adatbázisban.

Sávon kívüli SQLi

Valaki, aki adatokat akar lopni, SQL kódot küldhet egy adatbázis szervernek olyan módon, amely nem része a szokásos kommunikációnak a szerver és más számítógépek között. Ezt meg lehet tenni azzal, hogy információkat küldenek a szervernek DNS vagy HTTP kéréseken keresztül.

The app’s response will not be affected by whether or not any data is returned, whether or not there is a problem with the database, or how long it takes to execute the query. Out-of-band can be used in network interactions to fire events at will. Depending on an injected condition, these may be activated conditionally to gain knowledge one bit at a time.

Data can also leak via several networking protocols from network interactions. The visual represents the request sent from the web application to the app’s database.

Példa out-of-band SQLi-re

Ebben a példában a támadó megpróbálja meghatározni, hogy egy adott felhasználó létezik-e az adatbázisban. Ehhez a következő utasítást használja:

SELECT user_id FROM users WHERE username='$username' AND password='$password' LIMIT 0,0 UNION SELECT NULL,'' INTO OUTFILE '/var/opt/databases/$filename.php'; --

Az alkalmazás visszaadja a felhasználó azonosítóját, ha a felhasználó létezik az adatbázisban. Ha a felhasználó nem létezik az adatbázisban, akkor az alkalmazás létrehoz egy fájlt, amely PHP kódot tartalmaz, amely rendszerparancsok végrehajtására használható. A támadó ezután ezt a fájlt használhatja parancsok futtatására a szerveren.

Hogyan előzzük meg az SQL befecskendezést

The best way to protect against SQL injection attacks is to use input validation, prepared statements, and parametrized queries. The code should never make direct use of the user’s input. Developers must sanitize all input instead of simply web form inputs such as login forms. Single quotes should be eliminated from any questionable code components. It’s also a good idea to hide database problems on live sites to avoid inadvertently revealing them. SQL injection may provide information about a database system that attackers can use to their advantage.

If you find a problem with your website, you should take it offline immediately and contact your hosting provider. They can help you determine whether or not your site has been compromised and what steps you need to take to fix the problem. In the meantime, ensure that all of your website’s users know about the problem and change their passwords as soon as possible.

Megelőzési tippek az SQL befecskendezések elkerülésére

Van néhány módja annak, hogy elkerüljük az SQL befecskendezési sebezhetőségeket a programozási nyelvünkben és az adatbázis beállításunkban. Ezek a technikák a legtöbb adatbázissal, például XML-lel is használhatók. Ezeket a technikákat használhatjuk az adatbázisok biztonságosabbá tételére.

1) Megfelelően felépített tárolt eljárások használata

A kezdőknek azzal kell kezdeniük, hogy megtanulják, hogyan hozzanak létre utasításokat változókkal. Ez könnyebb, mint dinamikus lekérdezéseket létrehozni, és könnyebb megérteni. A paraméterezett lekérdezések esetén a fejlesztő létrehozza az összes SQL kódot, majd később adja meg az egyes paramétereket. Ez a módszer lehetővé teszi az adatbázis számára, hogy megkülönböztesse a forráskódot és az információkat.

Prepared statements help ensure that a query’s goal is not changed, even if someone tries to give SQL instructions.

2) Engedélyezőlista alapú bemeneti érvényesítés

SQL queries use bind variables in specific places for data. For example, if you’re using Python, you would use the %s helykitöltő. Használhatunk reguláris kifejezést a felhasználói bemenet érvényesítésére az engedélyezőlistával szemben, hogy milyen karakterek engedélyezettek az egyes kötési változókban.

If you’re using JavaScript, you can use \w az alfanumerikus és aláhúzás karakterek illesztésére.

Az engedélyezőlistának a lehető legspecifikusabbnak kell lennie a téves pozitívok elkerülése érdekében.

For example, if you’re looking for a US phone number, you would use the following regular expression:

/^\d{11}$/

This would match a string of 11 digits that could be a phone number. If someone tried to submit something like ‘abcdef‘, it would not match, and the input would be invalid.

This will help make sure your data is safe and sound. If you need to use values from code instead of user parameters, that’s okay too!

Azonban, ha a felhasználói paraméterértékek konkrét táblázat- és oszlopneveket céloznak meg, akkor a paraméterértékeket a megfelelő táblázat- és oszlopnevekre kell térképezni annak biztosítása érdekében, hogy az érvénytelenített felhasználói bemenet ne kerüljön a lekérdezésbe.

3) Fehérlisták használata

Ne szűrjük a felhasználói bemenetet rossz karakterek feketelistái alapján. Sokkal hatékonyabb a jó karakterek engedélyezőlistáinak használata, amelyek várhatóak az adott mezőkben. Ez megállítja az SQL befecskendezési támadásokat, mielőtt elkezdődnének.

Például, csak számjegyeket és kötőjeleket engedélyezzünk a bemeneti mezőben, ha telefonszámot várunk. Ha e-mail címet várunk, csak azokat a karaktereket engedélyezzük, amelyek érvényesek egy e-mail címben.

4) Használjuk a legfrissebb platformokat

A PHP nem rendelkezik SQLi védelemmel a régebbi webfejlesztési platformokon. Használjuk a legfrissebb programozási környezet, nyelv és kapcsolódó technológiák elérhető kiadását. Ebben a példában a PHP helyett inkább a PDO-t használjuk.

5) Rendszeresen vizsgáljuk át webalkalmazásunkat

Az SQL befecskendezéseket nagyon nehéz észrevenni. Fontos, hogy rendszeresen vizsgáljuk át webalkalmazásunkat a sebezhetőségek szempontjából.

6) Legkisebb jogosultság érvényesítése

A legkisebb jogosultság elve egy biztonsági koncepció, amely korlátozza a felhasználókat a munkájuk elvégzéséhez szükséges minimális hozzáférésre. Ez magában foglalja a felhasználók által birtokolt fiókok számának és azok jogosultságainak korlátozását.

A legkisebb funkcionális korlátozás (LRF) a felhasználói jogok, fiókok és számítási folyamatok korlátozásának gyakorlata és koncepciója csak az alapvető, elfogadható feladatokhoz szükséges erőforrásokra. Ez segít fenntartani a minimális felhasználói jogokat vagy engedélyszinteket, ami létfontosságú az emberek számára, hogy hatékonyan végezhessék munkájukat.

A legkisebb jogosultság egy biztonsági elv, amely megköveteli, hogy az alkalmazások, rendszerek és eszközök csak a szükséges engedélyekkel rendelkezzenek egy adott feladat elvégzéséhez. Így ha valaki kihasznál egy sebezhetőséget és kárt okoz, a hatás korlátozott lesz. Ez ellentétben áll azzal, hogy a felhasználóknak több engedélyt adunk, mint amennyire szükségük van, ami növeli a jelentős károk kockázatát egy SQL támadás során.

SQL Injection – Frequently asked questions

 
Mi a leggyakoribb SQL injekció?

Az in-band SQL befecskendezés a leggyakoribb típusú SQL befecskendezési támadás. Ez akkor fordul elő, amikor a támadó ugyanazt a kommunikációs csatornát használhatja a payload továbbítására és az eredmények összegyűjtésére.

Mi a legjobb védekezés az SQL injekció ellen?

A legjobb védelem az SQL befecskendezés ellen a paraméterezett lekérdezések használata. Ez a fajta lekérdezés helyőrző értékeket használ a paraméterekhez, amelyeket később adnak meg. Ez a módszer lehetővé teszi az adatbázis számára, hogy megkülönböztesse a forráskódot és az információt.

Hogyan észlelhető az SQL befecskendezés?

Az SQL befecskendezés többféleképpen is észlelhető. Az egyik módszer egy webalkalmazás tűzfal (WAF) használata. A WAF egy hardver vagy szoftver, amely a webalkalmazás és az internet között helyezkedik el. Vizsgálja a forgalmat rosszindulatú tevékenységek után, és képes blokkolni az SQL befecskendezési támadásokat.

Mi az a másodrendű SQL befecskendezés?

A másodlagos SQL befecskendezés akkor fordul elő, amikor a támadó olyan kódot tud befecskendezni, amelyet a webalkalmazás tárol, majd később végrehajt. Ez a támadástípus nehezebben kivitelezhető, mert a támadónak rendelkeznie kell egy módszerrel a tárolt kód végrehajtásának kiváltására.

Mi az a vak SQL befecskendezés?

A vak SQL befecskendezés egy olyan támadás, ahol a támadó nem látja közvetlenül a saját kódjának eredményeit. Ehelyett igaz vagy hamis állításokat kell használnia, hogy következtetéseket vonjon le az adatbázisból. Ez a fajta támadás nehezebben kivitelezhető, de ugyanolyan veszélyes lehet, mint más típusú SQL befecskendezések.

Mi az a halmozott lekérdezés?

A halmozott lekérdezés egy olyan SQL befecskendezés, ahol a támadó több lekérdezést használ az adatbázisból származó információk kinyerésére. Ez a támadástípus nehezebben végrehajtható, de siker esetén nagyon veszélyes lehet.

Mi az a hiba alapú SQL befecskendezés?

A hibaalapú SQL befecskendezés egy olyan támadás, ahol a támadó adatbázis hibákat használ fel arra, hogy információt szerezzen az adatbázisból. Ez a támadás nehezebben kivitelezhető, de ha sikeres, nagyon veszélyes lehet.

szerző avatár

biztonság

admin a Government Technology vezető munkatársa. Korábban a PYMNTS és a The Bay State Banner számára írt, és a Carnegie Mellon Egyetemen szerzett B.A. diplomát kreatív írásból. Boston környékén él.

hu_HUHungarian