Upozornění: Tento text je několik let starý a spousta věcí se změnila. Zejména v ASP.NET Core (zde pod starým názvem ASP.NET 5). Článek ponechávám jako referenci, ale obecně doporučuji nalézt novější zdroje, jako napříkad tento seriál.

V šestém dílu seriálu o vytvoření "zlé maliny" pro útoky sociálním inženýrstvím si ukážeme, jak vytvořit webovou aplikaci, která se bude tvářit jako autentizační captive portál a pokusí se z uživatelů vylákat přihlašovací údaje k populárním službám. Použijeme přitom ASP.NET 5 a MVC 6. Aplikace je poměrně triviální a nepochybně by téhož výsledku bylo možno dosáhnout i jednoduššími prostředky. Já jsem zvolil ASP.NET 5 a MVC 6, protože jsem chtěl novou platformu vyzkoušet a také zkusit na Linuxu rozběhnout z .NETu trochu víc, než obligátní "Hello World!".

User experience

Co bude naše aplikace dělat? Pokud se uživatel připojí k otevřenému Wi-Fi hotspotu, každý HTTP požadavek ho přenese na naši aplikaci. Ta mu ukáže úhledný dialog a nabídne, že se může připojit k Internetu, pokud se přihlásí pomocí služeb jako je Facebook, Twitter, Google Account, Microsoft Account nebo místní Seznam.cz:

atropa-gate-step0

Seznam služeb je konfigurovatelný, pro změny stačí editovat soubor config.json a přidat správně pojmenovaný soubor s obrázkem. Poté, co uživatel klepnutím vybere službu, zobrazí se mu přihlašovací dialog a bude vyzván k zadání jména nebo hesla pro příslušnou službu:

atropa-gate-step1

Bez ohledu na to, jaké heslo zadá, bude mu po odeslání zobrazena následující chybová stránka:

atropa-gate-step2

Vše vypadá podle mého názoru velice elegantně a profesionálně. Upřímně řečeno, aplikace je minimálně po vizuální stránce a po stránce podpory pro mobilní zařízení napsána lépe, než většina skutečných přihlašovacích portálů.

Na rozdíl od nich však uživateli Internet nezpřístupní, jenom zaznamená zadané jméno a heslo do obyčejného textového souboru.

Konfigurace aplikace

Aplikace je napsána v ASP.NET 5 a MVC 6, ve Visual Studiu 2015. Je velice jednoduchá, obsahuje jeden controller se čtyřmi akcemi, tři pohledy a celý jeden model. Zdrojové kódy najdete na GitHubu. K dispozici jsou dva releasy. Verze 1.0.0-alpha je naprosto minimální implementace, kde je všechno zapsáno natvrdo a aplikace nemá žádnou grafiku, která by stála za řeč. Verze 1.0.0 už je kompletní aplikace s konfigurací a grafikou.

Klíčovou součástí aplikace je její konfigurace, neboť ta říká, co se vlastně bude dělat. Využívám zde nový konfigurační systém v ASP.NET 5, který je vymyšlený docela dobře, ale zato je mizerně popsaný. Jeho fungování věnuji samostatný článek, zde je jednom návod k použití. Aplikaci řídí soubor config.json, který ve výchozím nastavení vypadá takto:

{
    "ForceHostName": "www.wifigate-login.local",
    "OutputFileName": "wwwroot/passwords.txt",
    "MaximumPasswordLength": 4,
    "IdentityProviders": [
        {
            "Id": "facebook",
            "Title": "Facebook"
        },
        {
            "Id": "google",
            "Title": "Google Account"
        },
        {
            "Id": "twitter",
            "Title": "Twitter"
        },
        {
            "Id": "microsoft",
            "Title": "Microsoft Account"
        },
        {
            "Id": "seznam",
            "Title": "Seznam.cz"
        }
    ]
}

Význam konfiguračních hodnot je následující:

Jak aplikace funguje?

O tvorbě aplikací v ASP.NET 5 napíšu podrobnější článek někdy jindy, zde jenom stručně:

Ostatní soubory jsou standardní a neliší se podstatně od běžné ASP.NET MVC aplikace.

Nasazení na honeypot

Raspberry připravené podle předchozích dílů seriálu připojíme do stejné drátové sítě jako řídící počítač a zapneme. Potřebujeme na něj aplikaci zkopírovat, což lze učinit mnoha způsoby. Já budu používat SCP, což je přenos souborů po SSH. Pokud jste si nainstalovali PuTTY, k čemuž jsem vás vyzýval ve druhém dílu, máte k dispozici řádkovou utilitu pscp.exe.

Smažte na Raspberry Pi obsah složky s obsahem web serveru, tedy /home/pi/www/wifigate, ovšem nikoliv složku samotnou. Můžete tak učinit třeba příkazem rm -rf /home/pi/www/wifigate/*.

Poté pomocí pscp.exe nakopírujte zdrojové kódy aplikace WifiGate.  Použijete k tomu následující příkaz, spuštěný ovšem na Windows:

pscp -r -batch -C -pw raspberry "C:\Users\Altair\Source\Repos\WifiGate\src\WifiGate\*" [email protected]:/home/pi/www/wifigate

Význam parametrů je následující:

Po nakopírování souborů se opět připojte na Raspberry a spusťte obnovu NuGet balíčků příkazem dnu restore /home/pi/www/wifigate.

Nyní raspberry restartujte a počkejte, dokud nenaběhne. Pokud jste vše udělali správně, po restartu začne honeypot vysílat otevřenou síť jménem Internet. Když se k ní připojíte, jakýkoliv HTTP request bude přesměrován na adresu falešného portálu a vyzváni k zadání hesla. Ulovená hesla najdete na adrese brány v souboru passwords.txt.

V dokončení seriálu si ukážeme, jak se útokům tohoto typu bránit z pozice uživatele a z pozice autora serveru.