SMB Relay
Jaký je nejčastěji fungující útok v interní síti? Jak vypadá, co za ním stojí a jak se bránit? O tom se dozvíte v tomto článku. Jako první ukážeme útok prakticky a v dalších odstavcích se pak budeme věnovat některým technickým detailům. Nakonec přidáme pár tipů, jak se proti tomuto útoku bránit.
Vypnuté SMB podepisování (SMB signing) je jedna z nejčastějších miskonfigurací interní sítě, se kterou se potkáváme. Přitom s dostatkem času je díky tomuto nastavení interní útočník schopný získat přístup k některému ze serverů s pravděpodobností hraničící s jistotou. Jak?
SMB (Server Message Block) je komunikační protokol sloužící převážně ke sdílenému přístupu k souborům, či tiskárnám v síti a poskytuje také autentizační mechanismus. Bez zapnutého podepisování je však zranitelný na útoky Man-in-the-middle a umožňuje tak aktivnímu naslouchajícímu útočníkovi v síti vstoupit do komunikace a využít odchycenou komunikaci k tomu, aby se on sám autentizoval vůči vybranému serveru a spustil na něm libovolný příkaz, aniž by musel znát heslo.
Ukázka útoku
Jeden z nástrojů, které je možné využít pro provedení útoku je v powershellu napsaný Windows Inveight (https://github.com/Kevin-Robertson/Inveigh) společně s Invoke-TheHash (https://github.com/Kevin-Robertson/Invoke-TheHash). To teoreticky umožňuje provést útok na (kompromitované) uživatelské stanici bez nutnosti instalace dalších nástrojů, což je důvodem, proč byla zrovna tato ukázka vybrána. Nevýhodou tohoto přístupu je fakt, že Windows používá porty 139, 445 (SMB) i 5355 (LLMNR) a není proto možné je využít k útoku. Tím se omezují protokoly, které můžeme pro útok využít a zůstávají jen http(s) protokol a NBNS spoofing.
V ukázkovém scénáři jsou role následující:
Útočník: 192.168.50.11, Win10, běžný uživatel
Oběť: 192.168.50.10, Win7, admin
Cíl útoku: 192.168.50.100, Windows Server 2008
Na počítači útočníka spustíme Inveight a zadáním příkazů
V parametru command je příkaz, který bude při úspěšném útoku spuštěn na serveru. Typicky by to mohl být příkaz pro navázání spojení se serverem útočníka nebo přidání nového administrátorského účtu. Pro ukázku byl použit jednoduchý ping příkaz na IP adresu útočníka a během útoku budeme ve wiresharku kontrolovat, zda přicházejí ping packety.
Nyní Inveigh naslouchá na síti a čeká na uživatele, který se k němu bude chtít připojit nebo odešle broadcastový NBNS dotaz. Všimněte si upozornění, že Inveigh neběží pod privilegovaným účtem a Windows Firewall je zapnutý, ani jedno z toho nebrání úspěšnému provedení scénáře, není tedy nutné disponovat administrátorským účtem.
Předpokládejme, že oběť nechtěně zadá do prohlížeče souborů například string datovysevrer a stiskne enter.
Bez zpětných lomítek na začátku se windows automaticky pokusí přistoupit na http://datovysevrer.
Neboť server s takovým jménem v síti neexistuje, zachytí Inveigh broadcastový dotaz na překlad tohoto jména a ochotně odpoví, že datovysevrer je on. Vyžádá si autentizaci a údaje uživatele přepošle na vybraný cílový server. V případě, že uživatelský účet má na daném serveru práva spouštět příkazy, vykoná se na něm příkaz zadaný v parametru command.
V prvním řádku bílé barvy je vidět NTLMv2 challenge-response hash, který byl odchycen a který je také uložen na disk. Ačkoli nelze znovu použít pro přímou komunikaci, stále je možné se pokusit ho cracknout a získat tak heslo v plaintextu.
Všimněme si posledních 5 řádků, které nás informují o tom, že uživatel může spouštět příkazy na cílovém serveru a že příkaz byl spuštěn. V tomto případě to byl jen jednoduchý ping pro ověření a ve wiresharku můžeme vidět přicházející packety z IP adresy 192.168.50.100.
Co se ve skutečnosti děje?
NTLM
NTLM protokol je challenge – response autentizační protokol, což znamená, že odchycené informace nelze použít kdykoli znovu a provést klasický Pass-the-Hash útok. Při žádosti o připojení pošle server náhodně vygenerovanou hodnotu – challenge, která figuruje společně s hashem hesla jako vstupní hodnota při výpočtu odpovědi, kterou posílá uživatel pro ověření. Při každém pokusu o připojení je tedy challenge a tím pádem response jiná. Při použití NTLM autentizace probíhá komunikace mezi klientem a serverem zjednodušeně takto:
V momentě, kdy se útočník dostane do pozice mezi oběť a server, všechny zprávy jednoduše přepošle, kromě poslední, ve které server potvrzuje, že autentizace byla úspěšná.
Jak se dostat do pozice man-in-the-middle
Provedení útoku je tedy, jak jsme viděli, velmi snadné. Přirozenou otázkou zůstává, jak se útočník může dostat mezi svou oběť a server? Krásné na tomto útoku je fakt, že to není složité a teoreticky existují dvě cesty, jak toho dosáhnout.
První možností je, že je v síti přítomný nějaký agent či úloha, která se pod privilegovaným účtem pravidelně připojuje ke všem přítomným klientům. To může být například kvůli kontrole či změně konfigurace nebo nainstalovaných záplat. V takovém případě se server s účtem pokusí připojit přímo vůči počítači útočníka, který požadavek jednoduše přepošle na jiný, jím vybraný server. Čekání na takovou příležitost však může trvat dny i týdny.
Druhou možností, která se typicky využívá během penetračních testů, je LLMNR a NetBIOS-NS poisoning. LLMNR je zkratka pro Link-Local Multicast Name Resolution, NetBIOS-NS pak pro NetBIOS Name Service. Oba protokoly se používají v lokální síti pro překlad jmen na IP adresy, podobně jako DNS a vstupují do hry právě v případě, kdy DNS selže. LLMNR se používá od Windows Vista a je považován za nástupce NetBIOS-NS.
Řekněme, že uživatel chce přistoupit k souborům na sdíleném disku \\server\files. Při psaní adresy ovšem namísto toho omylem napíše \\sevrer\. DNS server pak odpoví, že takovou adresu nezná a uživatel odešle broadcastový dotaz, zda někdo nezná IP adresu pro sevrer. Toho bleskově využije útočník a odpoví na broadcastový dotaz tvrzením, že on je hledaný sevrer a vyžádá si autentizaci[AH3] . Uživatel pak ochotně odpoví útočníkovi s využitím svých přihlašovacích údajů, které on přepošle na vybraný server.
Jak se bránit
Nejspolehlivějším řešením, jak předejít těmto útokům je přejít na Kerberos, nicméně z mnoha různých důvodů je toto pro firmy nemožné řešení. Jednoznačně však můžeme doporučit nakonfigurovat SMB signing pro všechny počítače v síti. Defaultně je toto nastavení zapnuté pouze pro doménové kontrolery.