v tomto článku bych chtěl ukázat, jak snadné je získat důvěrné informace z webové aplikace, která… no, nevěnuje příliš velkou pozornost bezpečnosti. S čím budu pracovat, je ukázková Java aplikace, kterou jsem vytvořil v Spring Boot pro demonstrační účely. Provedené útoky však platí pro jakýkoli jiný programovací jazyk nebo rámec. Některé chyby zabezpečení a bezpečnostní problémy, které budou prokázány, zahrnují:
- SQL Injection
- expozice citlivých dat
- nedostatečné protokolování
- nefunkční autentizace
nastavení
budeme pracovat s fiktivní webovou aplikací, která vám umožní přihlásit se jako uživatel, který je součástí nějaké skupiny. Na základě role uživatele může zobrazit základní nebo důvěrné údaje. V takovém případě uvidíte seznam zaměstnanců ve společnosti, jejich stav atd.
zdroje této aplikace najdete v mém Githubu: https://github.com/rapasoft/hackme.
útok # 1: Muž ve středním útoku
Představte si, že sedíte v restauraci a chtěli byste něco zkontrolovat ve výše uvedené aplikaci. Připojíte se k síti Wi-Fi restaurace, otevřete přihlašovací stránku, zadejte přihlašovací údaje a získáte požadované informace (např. seznam konkrétních zaměstnanců). Co teď možná ne, je, že Vaše přihlašovací údaje byly ohroženy. Podívejme se pozorně na přihlašovací stránku:
Tato aplikace nepoužívá SSL/TLS (např. To znamená, že všechny zaslané informace může kdokoli, kdo má přístup ke komunikaci mezi klientem a serverem, považovat za prostý text.
to je přesně to, co se děje v tzv. Přesněji řečeno, v tomto případě byl ARP spoofing použit jako způsob, jak otrávit celou síť, aby si útočník byl vědom všeho, co se děje, a mohl čichat na všechny pakety. Nebudu se zabývat podrobnostmi o tom, jak ARP spoofing funguje, ale předvedu to na tomto videu:
možná budete muset otevřít toto video Youtube v novém okně a na celé obrazovce, abyste viděli více podrobností
co můžete vidět výše, je, že jsem začal Ettercap, což je komplexní sada pro útoky MITM, a provedl ARP spoofing v mé místní síti. Mezitím, když uživatel (me přes iPad) zadá přihlašovací údaje, jsou viditelné jak v Ettercapu, tak ve Wiresharku(nástroj pro analýzu síťového provozu).
útok #2: SQL Injection
pokračujeme v naší roli útočníka této aplikace a nyní máme přihlašovací údaje pro uživatele hgraves
s heslem P4SSW0RD
. Můžete vidět, že nejen tato aplikace nepoužívá TLS, má velmi slabou politiku hesel, která uživatelům umožňuje vybrat opravdu hrozná hesla.
přihlašujeme se pomocí výše uvedených přihlašovacích údajů a vidíme jedno vstupní pole s možností vyhledat seznam lidí. Po stisknutí Search
dostaneme úplný seznam lidí. Pokud dáme například „Fra“, dostaneme filtrované výsledky na základě vyhledávání. Co kdybychom tam dali nějaký nelegální charakter? Je zřejmé, že za touto aplikací je nějaká databáze, takže zkusme znak '
:
nejen, že to selhalo, ale můžeme vidět, že POST
požadavek selhal s velmi specifickou chybovou zprávou, která odhaluje strukturu celého příkazu SQL. Vidíme, že WHERE P.NAME LIKE '%'%'
se používá na konci.
zkušený hacker nepotřebuje více. Úprava vyhledávacího řetězce může po několika pokusech přinést tyto výsledky:
injekce v tomto případě vytvořil union vybrat příkaz, který načte uživatelská jména a hesla spolu s jejich rolí. Nejen, že se to podařilo, ale podařilo se nám to zobrazit v původní klientské aplikaci.
nyní máme pověření všech uživatelů a jejich role (zobrazené celým číslem ve sloupci „věk“). Pokud hframe
má roli 1, rgraves
musí být tedy důležitější uživatel s rolí 3.
útok #3: Útočící slabě hashovaná hesla
při prvním útoku jsme se dozvěděli, že pro tuto aplikaci pravděpodobně nejsou nastaveny žádné Zásady hesla. To by nám dalo naději, že rgraves
nevěnuje příliš velkou pozornost ani bezpečnosti.
nejjednodušší způsob, jak prolomit hash hesla, který používá nedostatečný hashovací algoritmus (jako MD5 v tomto případě), je provést slovníkový nebo duhový útok. Existuje mnoho možností, ale nejjednodušší je použít Internetové služby, které již mají velkou databázi kombinací hesla k hash:
první je
hframe
, druhá jergraves
.smorgan
zdá se, že používá silnější hesla než ostatní, protože není ve slovníku.
můžete vidět, že heslo pro rgraves
je mečoun, což znamená, že nyní nemá, jak důležité je zvolit heslo bez slovníku ;). Nyní nám nic nebrání přihlásit se jako tento uživatel a objevit sekci „admin“ a důvěrné informace:
nečtěte to, pokud jste Němec 🙂
jak to opravit?
dalo by se říci, že tomu všemu lze snadno zabránit. Dalo by se říct, že to byly nováčkovské chyby. To může být pravda, ale je také pravda, že projekt zabezpečení otevřených webových aplikací uvádí injekci jako zranitelnost # 1 ve webových aplikacích(a to už několik let).
takže, pokud jste zjistili, že přemýšlíte, jak tomu všemu zabránit, rekapitulujme:
- při odesílání na server vždy používejte SSL / TLS. Nemusí to být pověření, v současné době je obecně považováno za dobrou praxi. I když na své stránce nemáte vůbec žádné vstupy! Nejjednodušší způsob je poskytnout certifikát prostřednictvím služeb, jako je Let ‚ s Encrypt.
- nezapomeňte, že certifikáty s vlastním podpisem mohou zmírnit problém expozice dat, ale nebrání tomu, aby útočník MITM předstíral celý web svým vlastním podepsaným certifikátem.
- při práci s SQL dotazy vždy uniknout parametry získané z klienta. Nejjednodušší způsob, jak toho dosáhnout, je použít možnosti vašeho frameworku, např. na jaře můžete použít NamedParameterJdbcTemplate, což je dobré i pro čitelnost.
- buďte paranoidní. Ověřte jakýkoli vstup uživatele. Opět v Java / Spring world můžete přidat pravidla ověření pomocí
JSR-380
Bean validation implementace jako Hibernate validator a anotovat parametry, např@Pattern(regexp = "*") String name
by se zabránilo vstupu'
. - Zaznamenejte všechny pokusy o předání neplatného vstupu v aplikaci. Navíc v případě chyby nevystavujte klientovi žádné informace specifické pro implementaci.
- Vylepšete ověření.
- pokud je to možné, použijte alespoň 2faktorovou autentizaci.
- neimplementujte vlastní ukládání hesel nebo šifrovací algoritmy. Je nesmírně obtížné dělat sami a určitě selžete. Existují osvědčená řešení, jako je BCrypt.
- číst a záložku OWASP TOP 10. Začněte tam a pak projděte jejich seznam osvědčených postupů.