tom@home.htb:~$

Blog o HTB

3 November 2020

Exponovaná debug, maintenance a administrační rozhraní

Úvod a kontext

Některé z nejnebezpečnějších vstupů do systému nevypadají jako zranitelnost. Vypadají jako pohodlná správa: debug shell, Device Portal, monitorovací administrace, lokální agent, maintenance API nebo dashboard s možností spustit skript. Pro provoz jsou užitečné. Pro útočníka ale představují přesně to, co hledá: rozhraní navržené pro diagnostiku, automatizaci a vzdálené zásahy.

Právě proto dává smysl tato rozhraní spojit do jednoho tématu. Na povrchu jsou různá, ale sdílejí stejný bezpečnostní problém: byla navržená s vyšší důvěrou než běžná uživatelská část systému. Kdo se přes ně dostane dovnitř, obvykle už nepotřebuje složitý exploit chain. Rozhraní samo umí číst citlivé informace, spravovat konfiguraci nebo přímo spouštět příkazy.

Proč jsou tato rozhraní kvalitativně jiná než běžný web

Běžná aplikace většinou řeší:

Debug, maintenance a admin rozhraní naopak často řeší:

To je zásadní rozdíl. Jakmile útočník pronikne do takového rozhraní, nesnaží se obejít aplikační logiku. Použije přímo nástroj, který už má systémovou moc zabudovanou v sobě.

Jaké podoby tato rozhraní mívají

1. Otevřený vývojářský nebo debug shell

To je nejpřímočařejší varianta:

Tam už často nejde ani o exploit. Samotná existence rozhraní znamená foothold.

2. Administrativní dashboard s execution funkcí

Monitoring a management platformy bývají vnímány jako “jen dashboard”. Ve skutečnosti ale často umí:

Jakmile je takové rozhraní dostupné se slabým heslem nebo po prvním shellu, mění se v přímý execution engine.

3. Device nebo agent portál

Některé systémy mají celé samostatné management rozhraní:

Tato rozhraní bývají často mimo hlavní bezpečnostní review, protože “to není produkční web”. Jenže z pohledu útočníka jde právě o produkční správu.

Jak se tenhle vzorec projevil v různých případech

Na jednom hostu ležel přímo veřejný /dev/ shell. Nebylo nutné hledat zranitelnost v aplikaci. Stačilo si všimnout, že server publikuje nástroj určený pro interní práci s příkazy. To je čistý příklad toho, že některé problémy nejsou bug v kódu, ale chyba provozního vystavení.

Jinde se první foothold otevřel přes slabé heslo do Centreon administrace. Samotný dashboard ale nebyl hlavním problémem. Kritické bylo až to, že po přihlášení šlo definovat nebo upravit check tak, aby na serveru vykonal příkaz. Slabé heslo tak neotevřelo “monitoring”, ale rovnou vzdálené spuštění kódu.

Na windowsovém hostu se po získání běžného SSH přístupu ukázalo, že na localhostu běží NSClient++ s API pro nahrání a spuštění vlastního skriptu. Tady je dobře vidět, že interní admin rozhraní není bezpečné jen proto, že neběží veřejně. Jakmile existuje první shell a port forwarding, stává se z něj stejně dosažitelná služba jako jakákoli jiná.

U IoT zařízení byl centrem útoku Windows Device Portal. Nešlo o klasickou webovou aplikaci, ale o plnohodnotné rozhraní pro správu zařízení. Jakmile se našlo maintenance workflow resetující heslo administrátora, nebyla už potřeba další privilege escalation. Samotný portál byl tou nejvyšší řídicí vrstvou systému.

Co mají tato rozhraní společné

Na první pohled se liší, ale spojuje je několik vlastností.

Rozhraní samo už má vysoká oprávnění

Neřeší jen obsah. Řeší zásah do systému:

Bývá chráněné slabším modelem než hlavní aplikace

Časté vzory:

Tým ho často nevnímá jako primární attack surface

Právě proto:

Jak tato rozhraní hledat a hodnotit

Při průzkumu i review se vyplatí položit si několik konkrétních otázek.

Existují cesty, které nejsou běžná uživatelská část aplikace

Umí rozhraní něco vykonat nebo změnit

Jaká ochrana před ním skutečně stojí

Proč “je to jen interní” není obrana

Tohle je nejčastější omyl u těchto rozhraní. Interní nebo maintenance funkce bývá považovaná za bezpečnou proto, že:

Jenže právě taková rozhraní bývají po prvním footholdu nebo po úniku hesla nejcennější. Útočník nehledá další chybu v business logice. Hledá místo, kde systém sám dovoluje provádět administrativní akce.

Obrana a bezpečnější návrh

1. Vypnout nebo odstranit debug funkce v produkci

Veřejný vývojářský shell, interní testovací stránka nebo starý maintenance endpoint nemají v produkci co dělat.

2. Admin rozhraní chápat jako execution boundary

Pokud dashboard umí spouštět checky, nahrávat skripty nebo nastavovat agenty, je potřeba ho chránit stejně přísně jako root shell, ne jako běžný backoffice.

3. Nespoléhat jen na localhost nebo jednu statickou credential

Lokální bind a heslo v konfiguračním souboru nejsou dostatečná obrana pro rozhraní, které umí spouštět kód nebo měnit správu systému.

4. Oddělit role a práva administračních nástrojů

Monitoring, zařízení, agenti a maintenance nástroje nemají běžet s většími právy, než skutečně potřebují. Každé zbytečné oprávnění se při kompromitaci mění v přímý privesc násobič.

5. Auditovat i “pomocnou” správu

Threat model systému musí zahrnovat:

Pokud se neauditují, nevzniká tím slepé místo. Vzniká tím alternativní vstup do systému.

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: admin - debug - maintenance - management