tom@home.htb:~$

Blog o HTB

2 December 2020

Automatizované zpracování souborů a bezpečnostní pipeline

Úvod a kontext

Řada organizací dnes soubory jen neukládá. Hned po přijetí je přesouvá mezi složkami, rozbaluje, kontroluje, analyzuje, převádí nebo z nich vytěžuje další data. Taková pipeline obvykle vznikne z dobrého důvodu: antimalware analýza, PDF export, centrální zpracování logů, interní schvalování nebo monitoring. Bezpečnostní problém ale často neleží v jedné konkrétní zranitelnosti parseru. Leží v orchestrace kolem něj.

RE, Patents a Haystack ukazují tři různé varianty stejného vzorce:

Smysl článku proto není v tom, jak funguje jeden konkrétní parser. Smysl je v tom, jak bezpečnostně číst celý řetězec: kdo soubor přijme, kdo ho přesune, kdo ho přejmenuje, kdo ho analyzuje, kdo výsledku věří a s jakými právy to všechno běží.

Proč je pipeline nebezpečnější než jeden parser

Když se mluví o chybách při zpracování souborů, pozornost obvykle padne na:

To je ale jen část obrazu. Praktický dopad často vznikne až spojením několika kroků:

  1. útočník dodá soubor do vstupního prostoru,
  2. systém ho automaticky přesune nebo přejmenuje,
  3. další komponenta ho rozbalí nebo otevře,
  4. výstup zpracování se dostane do citlivější vrstvy,
  5. a někdo předpokládá, že už jde o “interní” nebo “ověřený” artefakt.

Právě mezi těmito kroky mizí původní nedůvěra. To je bezpečnostní jádro celé třídy problémů.

Pět opakujících se slabin v pipeline

1. Vstupní prostor je dostupnější, než by měl být

Sdílená složka, upload adresář nebo lokální konzole bývají považované za “jen vstup”. Ve skutečnosti je to začátek privilegovaného workflow.

2. Pipeline mění význam souboru za běhu

Přejmenování .ods na .zip, opětovné zabalení do .rar, převod HTML do PDF nebo vygenerování JS konfigurace mění nejen formát. Mění i to, který nástroj další krok použije a jaké má bezpečnostní vlastnosti.

3. Ověření je slabší než zbytek workflow

Yara pravidla, MIME kontrola nebo základní filtr názvů často působí jako ochrana. Pokud ale po jejich obejití pipeline soubor otevře v plné aplikaci nebo pošle do dalšího backendu, je ochrana jen kosmetická.

4. Lokální pomocné soubory se začnou chovat jako příkazový kanál

Log, dočasný soubor nebo generovaný artefakt někdy přestane být “jen výstup”. Další služba ho začne interpretovat jako instrukci.

5. Pomocná komponenta má zbytečně silný kontext

Konverzní worker, log processor nebo lokální admin konzole často běží s širším přístupem k souborům, localhostu nebo interním tajemstvím, než bylo potřeba pro samotné zpracování.

RE: malware pipeline, která sama otevře útočníkův dokument

RE je výborný hlavní příklad, protože celý řetězec je explicitně vidět ve skriptu process_samples.ps1. Pipeline dělá přesně to, co organizace potřebovala pro analýzu vzorků:

To je učebnicový příklad toho, jak bezpečnostní problém nevzniká jen v parseru. Vzniká v orchestrace:

Právě proto mohl .ods s makrem po nahrání do malware_dropbox otevřít shell jako luke. Kdyby se někdo soustředil jen na jednu část řetězce, třeba jen na Yara nebo jen na Office, přehlédne to hlavní: problém je celá pipeline důvěry.

Patents: konverze dokumentu není jeden proces, ale řetězec backendů

Patents ukazuje podobný problém z webové strany. Veřejné artefakty jako installed.json a release notes prozradí, že uploadovaný dokument nekončí v jedné PHP funkci. Putuje přes convert.php do backendu gears/pdf a vedle webu navíc běží další služba na 8888/tcp.

To je užitečné právě proto, že útoková plocha se rozpadá na více částí:

Patents tak dobře připomíná, že při review podobných systémů nestačí hledat chybu v upload.php. Je potřeba dohledat celou pipeline:

Haystack: když monitoring stack začne vykonávat obsah souboru

Haystack posouvá téma z dokumentů do log processingu, ale bezpečnostní logika je stejná. Po získání účtu security je dostupná lokální Kibana vrstva na 127.0.0.1:5601, která umí načíst vlastní /tmp/tm.js. To je první posun: pomocná lokální konzole přestane být neškodná, jakmile se k ní dostane útočník po footholdu.

Ještě důležitější je však navazující Logstash workflow. Soubory logstash_tm.log a logstash_tm2.log nejsou v tomto modelu jen logy. Pipeline je čte a řádky Ejecutar comando: interpretuje jako instrukce, které běží s vysokými právy.

To je extrémně poučné, protože tu vůbec nejde o parser dokumentu. Jde o stejný trust bug v jiné podobě:

Haystack je proto důležitá protiváha k RE a Patents. Ukazuje, že bezpečnostní pipeline nemusí pracovat s Office dokumenty. Stačí, aby pracovala s artefaktem, který přestane být braný jako nedůvěryhodný.

Jak podobné pipeline hledat

Při analýze hostu nebo aplikace se vyplatí jít po konkrétních otázkách.

Kde je vstupní bod

Co je další krok po přijetí souboru

Která komponenta běží s největší důvěrou

Kde se ztrácí informace o původu vstupu

Typicky ve chvíli, kdy někdo řekne:

Právě tohle je kritický okamžik, kdy se pipeline stává zranitelnou.

Rozdíl proti článku o document workflow

Téma se částečně překrývá s dokumentovým workflow, ale důraz je jiný.

Jinými slovy: tam je středem dokument. Tady je středem automatizace.

Obrana a hardening

1. Držet každý krok pipeline jako samostatnou trust boundary

Soubor, který prošel Yara nebo kontrolou formátu, není automaticky bezpečný pro další krok. Každá další komponenta musí pracovat s tím, že stále jde o nedůvěryhodný vstup.

2. Omezit schopnosti workerů a pomocných služeb

Konverzní a analýzové procesy nemají mít přístup k citlivým cestám, k localhost-only admin API ani k interním tajemstvím, která nesouvisí s jejich úkolem.

3. Nenechat logy a dočasné soubory fungovat jako instrukční kanál

Log processing nebo helper skript nesmí interpretovat volný text v souboru jako příkaz, akci nebo cestu bez velmi tvrdé validace a oddělení důvěryhodných zdrojů.

4. Auditovat orchestrace, ne jen jednotlivé nástroje

Bezpečnostní review nemá končit větou “LibreOffice je aktualizovaný” nebo “Logstash má poslední verzi”. Důležitější je, kdo mu dává vstup, v jakém formátu a co se stane po zpracování.

5. Dělat explicitní model toku souboru

U každého kritického workflow má smysl umět stručně odpovědět:

  1. odkud soubor přišel,
  2. kdo ho poprvé otevřel,
  3. kdo ho převedl nebo přejmenoval,
  4. kdo věří výsledku,
  5. a s jakými právy to celé běží.

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: files - pipeline - automation - ops - security - processing