Co jsou to injekční útoky LDAP a jak jim předcházet
Útoky vkládání kódu jsou některé z nejběžnějších a nejúspěšnějších online útoků. webové aplikace, mobilní aplikace, desktopové programy, API s, databází , webové servery atd., všechny mohou být zranitelné vůči útokům vkládání kódu, pokud přijímají vstup uživatele bez řádného ověření.
Jedním z nejběžnějších útoků na vkládání kódu je injekce LDAP a o tom budeme diskutovat v tomto příspěvku. Podíváme se na to, co je LDAP, jak funguje injekce LDAP a poskytneme tipy na zmírnění tohoto útoku.
Co je LDAP?
LDAP je zkratka pro Lightweight Directory Access Protocol. Je to protokol adresářové služby používaný k vyhledávání seznamů adresářů v databázi LDAP, nejčastěji uživatelských jmen a hesel. Jak jeho název napovídá, LDAP je velmi lehký, a proto se velmi dobře škáluje a dnes jej používá obrovské množství organizací.
Adresář LDAP se skládá z atributů založených na schématu LDAP. Každá položka ve schématu/adresáři je opatřena jedinečným identifikátorem, který se nazývá rozlišovací jméno (DN). Níže je uveden příklad záznamu pro falešného uživatele Johnnynyho Theguye.
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
Mnoho organizací používá LDAP pro jednotné přihlášení poskytnout zaměstnancům přístup k více aplikacím v rámci podnikové sítě, aniž by museli být přihlášeni ke každé jednotlivé aplikaci. Ale kromě pouhého ověřování uživatelských pověření se LDAP používá k zodpovězení dotazů na informace a také zahrnuje různé příkazy používané ke správě databází LDAP. A to dává smysl, vzhledem k množství informací (kromě uživatelských jmen a hesel), které databáze LDAP obsahují – což také zdůrazňuje nebezpečí útoků injekcí LDAP.
LDAP dotazy
Dotazy LDAP odeslané na server se označují jako vyhledávací filtry LDAP a jsou vytvářeny pomocí předpony. Typický dotaz LDAP obvykle zahrnuje následující:
- Připojení relace : Uživatel se připojí k serveru LDAP.
- Žádost : Uživatel odešle dotaz na server (například vyhledávání uživatele).
- Odezva : Protokol LDAP se dotazuje na adresář, vyhledá požadované informace a poskytne je uživateli.
- Dokončení : Uživatel se odpojí od serveru LDAP.
Jakmile jsou uživatelé uvnitř databáze, mohou formulovat dotazy pro provádění operací přes server LDAP. Níže je uveden seznam běžných operací, které může LDAP databáze/server provádět:
- Přidat : Používá se k přidávání nových dat do databáze.
- Svázat (ověřit) : Používá se pro ověřování a šifrování.
- Vymazat : Používá se k odstranění dat z databáze.
- Hledat a porovnávat : Operace vyhledávání se používá k vyhledávání a čtení záznamů.
- Modifikovat : Používají klienti LDAP k požadavku, aby server LDAP provedl změny existujících položek
- Zrušit vazbu : Používá se k uzavření spojení.
V rámci svých dotazů podporuje LDAP následující metaznaky:
- & Booleovské AND
- | Booleovský NEBO
- ! Booleovské NE
- = Rovná se
- ~= Cca
- >= Větší než
- <= Méně než
- * Jakákoli postava
- () Seskupování závorek
Zde je několik příkladů dotazů LDAP.
Typický požadavek na ověření uživatele (tj. přihlášení uživatele) by vypadal takto:
|_+_|
Pokud se zaslaná pověření shodují s pověřeními na serveru LDAP, uživatel Johnny bude ověřen.
Další příklady by byly:
Najděte všechny uživatele, kteří si při příštím přihlášení potřebují změnit heslo:
|_+_|
Tento dotaz by vrátil seznam všech uživatelů nalezených v databázi, kteří mají atribut pwdLastSet s hodnotou: 0.
Najděte všechny uživatele s „pass“ nebo „pwd“ v jejich popisu
|_+_|
Tento dotaz vrátí seznam všech uživatelů nalezených v databázi, kteří mají uvedené atributy pass nebo pwd.
Injekce LDAP
Nyní, když víme, co je LDAP a jak funguje, zaměřme svou pozornost na injekci LDAP.
Injekční útok LDAP může být pro vaši organizaci naprosto zničující. Je to z důvodu množství vysoce hodnotných informací, které může databáze LDAP pojmout. Hovoříme o jménech, uživatelských jménech, heslech, e-mailových adresách, telefonních číslech, pracovních názvech, oprávněních atd.
Přidejte k tomu skutečnost, že útok injekce LDAP může znamenat mnoho věcí. Jinými slovy, útoky injekcí LDAP jsou vícevektorové. Útočník může zneužít nezabezpečený systém LDAP mnoha různými způsoby. Mohli vložit škodlivý kód, který jim umožní zobrazit všechna uživatelská jména a hesla obsažená v databázi. Nebo se mohou přidat jako uživatel do databáze LDAP s oprávněními správce systému. Útočník by dokonce mohl požadavek na uživatelská jména a hesla úplně obejít. Jádrem útoku LDAP injection je poskytnout serveru dotaz, který server přiměje k ověření, zda je dotaz pravdivý nebo platný.
Aby byl útok LDAP injekcí úspěšný nebo neúspěšný, hraje roli mnoho faktorů: úroveň znalostí a dovedností útočníka, bezpečnostní opatření IT organizace a například informace obsažené v databázi LDAP. V každém případě však úspěšný injekční útok LDAP bude pro útočníka obvykle velkou výhrou a značnou bolestí pro kompromitovanou organizaci.
Podívejme se na několik příkladů, jak toho lze dosáhnout.
Příklady útoků injekcí LDAP
Vynechání ověřování pomocí metaznaku „&“.
Vezměme si náš první příklad výše uvedeného dotazu na přihlášení uživatele:
|_+_|
Na zranitelné databázi LDAP by mohl zákeřný činitel zcela obejít mechanismus ověřování vytvořením škodlivého dotazu vložením metaznaku & mezi uživatele a atributy hesla dotazu. To by vypadalo takto:
|_+_|
Protože LDAP analyzuje pouze první dva atributy, stává se příkaz ekvivalentní:
|_+_|
Pokud by byl výše uvedený dotaz proveden na zranitelné databázi/serveru LDAP, výsledek by se vrátil jako pravdivý a náš zákeřný uživatel „cokoli“ by byl ověřen.
Vynechání ověřování pomocí metaznaků „*“ a „|“.
Použijme podobný příklad jako výše ('cn' znamená obecný název):
|_+_|
Můžeme dosáhnout stejného jako výše pomocí * a | metaznaky. Pokud nastavíme hodnotu uživatelského jména na |_+_|, filtr vyhledávání bude:
|_+_|
Protože LDAP analyzuje pouze první dva atributy, je výše uvedený dotaz vždy vrácen jako pravdivý. Tento dotaz by útočníkovi umožnil obejít ověřovací mechanismus LDAP bez řádného ověření vstupu.
Výpis všech uživatelů v databázi s „*“
Níže uvedený dotaz je vyhledávací dotaz LDAP.
|_+_|
Výše uvedený zápis filtru prefixů dává dotazu pokyn najít uzel LDAP s daným uživatelským jménem a heslem. Pokud je však databáze LDAP zranitelná vůči vkládání LDAP, útočník by mohl nahradit cn a heslo ve výše uvedeném příkladu znakem *, například takto:
|_+_|
To by změnilo zamýšlený význam dotazu a databáze by vrátila seznam všech uživatelů.
Rizika spojená s injekcí LDAP
Škody, které mohou nastat při injekčních útokech LDAP, jsou podobné jako u jiných injekčních útoků. Vložení kódu do serveru znamená schopnost získávat informace a upravovat informace. Útoky injekce LDAP tedy mohou vést k následujícímu:
Únik citlivých dat
Jak jsme viděli v našem posledním příkladu, je možné manipulovat s dotazy LDAP odeslanými na zranitelný server tak, aby vypisovaly nechtěné informace. V našem příkladu výše jsme ukázali, jak by mohl škodlivý dotaz vést databázi k výstupu seznamu všech uživatelů v databázi.
Pokud je však server zranitelný vůči vkládání LDAP, mohl by být zpracován tak, aby vydával další citlivá data. Databáze LDAP mají tendenci ukládat více dat než pouhá uživatelská jména a hesla – což by již v případě úniku bylo dostatečně škodlivé. Kvůli tomu by útočník mohl vytvářet dotazy LDAP, aby získal citlivé informace, jako jsou e-mailové adresy, telefonní čísla a dokonce i čísla sociálního zabezpečení. Takže kromě kompromitovaných účtů a neoprávněného přístupu ke zdrojům společnosti (což může být zničující) by injekce LDAP mohla vést také ke krádeži identity, cílené phishing kampaně atd. Ošklivý.
Útoky odepření služby
LDAP injekční útoky mohou také vést k přímým a velmi účinným útoky typu denial of service (DoS). . Tento útok lze nasadit proti aplikaci, která komunikuje s adresářovým serverem, nebo proti samotnému adresářovému serveru. Pokud se útočníkovi podaří vytvořit dostatek škodlivých LDAP dotazů, které jsou vysoce časově náročné a náročné na zdroje, může spotřebovat všechny dostupné zdroje, takže ostatní požadavky nemohou projít.
Dále předpokládejme, že aplikace byla navržena tak, aby uchovávala všechny položky vrácené z vyhledávacího dotazu v paměti. V takovém případě by dotaz určený k vrácení mnohem více položek, než se očekávalo, mohl vést k tomu, že aplikace spotřebovává veškerou dostupnou paměť ke zpracování tohoto požadavku. Výsledkem by bylo, že aplikace spadne.
Změněné soubory a poškození dat
Viděli jsme, jak může škodolibě vytvořený dotaz odhalit útočníkovi nechtěná data. Je však také možné přimět databázi, aby aktualizovala nechtěné soubory, ať už s nevyžádanou poštou, aby došlo k poškození souboru, nebo úpravou hesel na heslo nastavené útočníkem. Pokud se útočníkovi podaří oklamat aplikaci, aby hledala nesprávné položky, může ji přimět k aktualizaci nesprávných položek, což by mohlo způsobit ztrátu nebo poškození dat.
Jak zabránit útokům injekce LDAP
Nyní, když znáte hrozby, zde jsou některá opatření, která můžete podniknout, abyste zabránili útokům injekce LDAP.
Vynutit ověření vstupu
Jinými slovy: nedůvěřujte uživatelskému vstupu. Bez ohledu na typ uživatele (ověřený, interní nebo veřejný) považujte tento vstup za nedůvěryhodný. Pokud je to možné, zakažte svým aplikacím kopírování uživatelsky ovladatelných dat do dotazů LDAP. Pokud to není možné, ověřte vstup uživatele podle seznamu povolených řetězců nebo znaků. A toto ověření by mělo vždy probíhat na straně serveru, i když byl vstup dříve ověřen na straně klienta.
K ověření strukturovaných vstupů, jako jsou čísla sociálního pojištění, telefonní čísla a e-mailové adresy, můžete použít silný vzor regulárních výrazů. Vstupy, jako jsou uživatelská jména, by měly být ověřeny podle schválené sady znaků, které vylučují metaznaky LDAP. Mezi znaky, které by měly být blokovány, patří ( );, * | &= a mezery
Escape vstup s kódováním
Escape uživatelem ovládané vstupní řetězce, aby žádné řídicí znaky ve vstupu nezměnily zamýšlený význam vyhledávacího filtru LDAP. Například v aplikaci Java lze metaznaky dotazu LDAP zadat se zpětnými lomítky jako znaky escape. Tímto způsobem jsou nedůvěryhodné vstupy připojeny k vyhledávacímu dotazu jako hodnoty doslovného řetězce, nikoli jako predikáty LDAP.
Důrazně se také doporučuje používat k útěku existující knihovny – nepište si vlastní, protože riskujete zavedení nechtěných zranitelností.
Uplatňovat zásadu nejmenšího privilegia
Princip nejmenšího privilegia je zásada zabezpečení IT, která uvádí, že uživateli, který vyžaduje přístup ke zdroji, by se měla přidělovat pouze minimální nezbytná práva. Tato práva by rovněž měla platit po co nejkratší možnou dobu. Konkrétně by měl mít omezený přístup účet LDAP používaný pro vazbu adresáře v aplikaci. Na serveru LDAP by měly být prováděny pouze autorizované dotazy LDAP.
Zabalit
Takže to jsou výhody a nevýhody injekčních útoků LDAP. Jsou docela ošklivé a stejně jako mnoho (ne-li většina) online útoků mohou být jejich následky katastrofální. Jak už to u těchto druhů útoků bývá, dezinfekce uživatelského vstupu je zde nejdůležitějším zmírňujícím opatřením. Nedezinfikovat vstupy vašich uživatelů je jako mít odemčené vstupní dveře do vašeho domu – kdokoli může jednoduše otočit knoflíkem a vstoupit. To není to, co od webové aplikace/serveru chcete. Doufejme, že výše uvedené tipy vám pomohou tomuto scénáři předejít.
Jako vždy zůstaňte v bezpečí.