tom@home.htb:~$

Blog o HTB

27 October 2020

Password reuse a rozpad hranic mezi aplikací, SSH, WinRM a admin nástroji

Úvod a kontext

Spousta útoků ve skutečnosti nestojí na nové zranitelnosti, ale na starém provozním zvyku: stejné heslo, passphrase nebo tajemství funguje na více místech zároveň. Jednou se objeví v credentials.txt, podruhé v databázové konfiguraci, potřetí v logu nebo ve starém image artefaktu. Samo o sobě to může vypadat jako lokální detail. Jakmile ale stejné tajemství otevře SSH, WinRM, Webmin nebo jiný administrativní kanál, hranice mezi aplikací a systémem se rozpadne.

To je přesně důvod, proč má password reuse smysl chápat jako samostatný bezpečnostní vzorec. Problém není jen ve slabém hesle. Problém je v tom, že jedno tajemství současně rozhoduje o více vrstvách prostředí, které by měly být oddělené.

Proč je reuse tak nebezpečný

Bezpečnostní model mnoha systémů předpokládá, že jednotlivé vrstvy se brání nezávisle:

Jakmile se ale stejné heslo objeví ve dvou nebo více z nich, tento model přestává platit. Útočník nemusí exploitovat druhou vrstvu. Stačí mu jen pochopit, kde jinde stejné tajemství vyzkoušet.

Právě to dělá z password reuse jednu z nejpraktičtějších post-exploitation technik. Nízkoprivilegovaný nález v aplikaci se během chvíle může změnit v plnohodnotný shell nebo v administrativní přístup.

Kde se reuse v praxi rodí

Stejné heslo se mezi vrstvami obvykle neobjeví náhodou. Důvody bývají velmi provozní:

Všechny tyto situace vypadají na první pohled jako drobné provozní rozhodnutí. V útoku ale znamenají přesně to, že jedna nalezená hodnota může otevřít několik různých služeb.

Jak reuse vypadá v konkrétních vzorech

1. Tajemství z webu otevře shell

Častý scénář je, že webová aplikace nebo její záloha vydá:

V tu chvíli je potřeba položit si otázku, jestli nalezené heslo patří jen aplikaci, nebo i člověku či systémovému účtu. U více rozborů strojů právě tohle rozhodlo přechod z webového nálezu na SSH nebo su.

Typický příklad vypadá takto:

$dbUser = 'theseus';
$dbPass = 'iamkingtheseus';

Samo o sobě to ještě není shell. Jakmile ale v systému existuje účet theseus a stejné nebo odvozené heslo funguje i lokálně, databázové tajemství přestává být jen databázové.

2. Tajemství z jedné služby otevře jiný admin kanál

Reuse nebývá jen mezi webem a SSH. Velmi častý je i mezi:

To je bezpečnostně nebezpečné právě proto, že admin nástroje mají obvykle širší dopad než první kompromitovaná vrstva. Útok pak nepokračuje exploitem, ale prostým přihlášením.

3. Provozní tajemství unikne z vedlejší vrstvy

Někdy ani nejde o heslo ve formuláři nebo configu, ale o artefakt, který k aplikaci přiléhá:

Taková hodnota může působit okrajově, ale v reálném řetězci často funguje jako klíč k úplně jiné službě.

Jak tento vzorec vypadal v různých případech

V jednom případě veřejně dostupné administrativní soubory vydaly seznam přístupových údajů a skutečná hodnota přišla až ve chvíli, kdy se jedno z hesel potvrdilo na SSH účtu waldo. Rozhodující nebyl samotný únik textového souboru, ale zjištění, že údaje nejsou omezené jen na FTP nebo WordPress.

Jinde webový shell odhalil databázový účet a hodnoty z aplikační tabulky. Až jejich reuse na systémovém účtu theseus proměnil webový foothold v trvalý SSH přístup. Útočník v takové chvíli nepotřebuje další zranitelnost, jen správně přečíst vztah mezi aplikací a hostem.

Na windowsovém hostu vedla záloha webu a provozní logy k heslu administrátora Umbraca. Po prvním footholdu se ale ukázalo, že lokálně uložené TeamViewer tajemství funguje i pro Administrator přes WinRM. Tady je krásně vidět, že reuse nemusí vypadat jako stejný login ve dvou formulářích. Může jít i o sdílené tajemství mezi desktopovým nástrojem a privilegovaným systémovým účtem.

Další případ stál na tom, že passphrase k nalezenému id_rsa.bak nebyla důležitá jen pro klíč samotný. Stejná hodnota otevřela i lokální účet a následně správu ve Webminu. Tím se z jednoho na první pohled vedlejšího artefaktu stal průchod hned přes několik vrstev.

Jak reuse disciplinovaně ověřovat

Password reuse se neověřuje chaotickým “zkusím to všude”. Užitek přináší hlavně tehdy, když se testuje podle kontextu.

Nejdřív určit, komu credential pravděpodobně patří

Pak hledat realistické cíle

A teprve potom zkoušet reuse

Rozumný postup tedy není “střílet heslo všude”, ale spojit:

Právě to odděluje užitečnou analýzu od hlučného credential sprayingu.

Jaké artefakty reuse často prozradí

Při post-exploitation i při review se vyplatí cíleně hledat:

Každý z těchto zdrojů může obsahovat tajemství, které se samo tváří lokálně, ale ve skutečnosti žije i jinde.

Obrana a provozní hygiena

1. Každá vrstva má mít vlastní credential

Heslo do aplikace, heslo uživatele na SSH, heslo do Webminu a tajemství desktopového nástroje nesmějí být stejné. Jinak neexistuje skutečné oddělení vrstev.

2. Provozní tajemství považovat za privilegovaný materiál

TeamViewer heslo, passphrase k privátnímu klíči nebo tajemství z image vrstvy nejsou “vedlejší provozní údaje”. Jsou to přihlašovací materiály se stejnou citlivostí jako běžné heslo.

3. Omezit, kde se vůbec dá stejná credential použít

Pokud účet nepotřebuje interaktivní login, neměl by ho mít. Pokud je heslo určeno pro aplikaci, nemá fungovat i na shellu nebo v admin nástroji.

4. Hlídání reuse zahrnout i do incident response

Při nálezu uniklého hesla nestačí změnit jednu službu. Je potřeba dohledat, kde všude stejná hodnota nebo její varianta funguje, a teprve potom mluvit o nápravě.

5. Logy a zálohy chránit stejně jako produkci

Mnoho reuse řetězců nezačíná ve veřejné aplikaci, ale v logu, backupu nebo support archivu. Pokud tyto artefakty obsahují hesla nebo provozní tajemství, jejich únik má stejnou hodnotu jako únik produkční databáze.

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: passwords - auth - ssh - winrm - operations