jak hack nezabezpečené webové aplikace

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.

přehled stránek

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:

přihlašovací stránka

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:

 Youtube video z útoku MITM

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 ' :

SQL Injection-protokolování

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:

 SQL Injection-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:

 popraskané hash

první je hframe, druhá je rgraves. 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:

sekce Správce

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ů.

Write a Comment

Vaše e-mailová adresa nebude zveřejněna.