Preskúmanie vedier 25 K AWS S3

Problémy s povoleniami skupiny AWS S3 sú také staré ako služba samotná. Myslím si, že 2 najznámejšie výskumy týkajúce sa tohto problému vykonal Skyhigh, pričom poukázal na to, že 7% všetkých vedier S3 je otvorených a Rapid7 poukazuje na to, že dokonca 17% je otvorených. Dnes sme v roku 2018 a rozhodol som sa skontrolovať, aký je aktuálny stav problému. Ďalej chcem predstaviť svoje techniky vykonávania takéhoto výskumu - ak som vynechal nejaký šikovný, dajte mi vedieť v komentároch.

Začnime nejakou teóriou

Všetky segmenty AWS S3 sú prístupné pomocou nasledujúcich adries URL:

https: // [bucket_name] .s3.amazonaws.com /
https: // [aws_endpoint] .amazonaws.com / [bucket_name] /

alebo pomocou AWS CLI:

$ aws s3 ls --region [region_name] s3: // [bucket_name]

Ľudia často poukazujú na potrebu použitia parametra regiónu. Niektoré vedrá však nefungujú bez určenia regiónu. Nevidím vzor, ​​keď to funguje a keď to tak nie je, osvedčeným postupom je vždy pridať tento parameter :)

Takže vo všeobecnosti platí, že nájdenie platného vedra sa rovná nájdeniu subdomény s3.amazonaws.com alebo [aws_endpoint] .amazonaws.com. Ďalej uvádzam 4 metódy, ktoré môžu byť pri tejto úlohe užitočné.

Bruteforcing

Každý názov segmentu musí byť jedinečný a môže obsahovať iba 3 až 63 alfanumerických znakov s niekoľkými výnimkami (môže obsahovať znaky „-“ alebo „“. Ako sme už povedali, sme vyzbrojení dostatočnými vedomosťami, aby sme našli všetky vedrá S3, ale buďme úprimní - skôr by to fungovalo pre krátke mená. Napriek tomu majú ľudia tendenciu používať pomenovanie, napr. [company_name] -dev alebo [company_name] .backups. Akonáhle hľadáte vedro konkrétnej spoločnosti, môžete ľahko automatizovať proces overovania takýchto známych vzorov pomocou nástrojov ako LazyS3 alebo aws-s3-bruteforce. Povedzme, že máme spoločnosť s názvom Rzepsky. Jednoduchý príkaz: $ ruby ​​lazys3.rb rzepsky odhaľuje vedierko rzepsky-dev:

Čo ak však chcete zozbierať čo najviac vedier, bez toho, aby ste na začiatku uviedli konkrétne meno? Pokračujte v čítaní tohto príspevku;)

Wayback Machine

Už ste niekedy počuli o Wayback Machine? Citácia Wikipedia:

The Wayback Machine je digitálny archív webu a ďalších informácií na internete vytvorených internetovým archívom.

Niektoré zdroje v tomto digitálnom archíve sú uložené na amazonskej infraštruktúre. Ak však Wayback Machine indexoval iba jednu fotografiu na vedre S3, môžeme tieto informácie načítať a skontrolovať, či toto vedro neobsahuje nejaké verejné prostriedky. Aj keď už je indexovaná fotografia odstránená (alebo je prístup k nej zakázaný), stále máte názov vedra, čo dáva nádej na nájdenie zaujímavých súborov vo vnútri. Na vyžiadanie API rozhrania Wayback Machine môžete použiť modul Metasploit s názvom enum_wayback:

Ako si možno pamätáte od začiatku tohto príspevku, môžete odkazovať na obsah vedra aj pomocou adresy URL so špecifikáciou oblasti. Aby sme dosiahli ešte lepšie výsledky, môžeme skontrolovať subdomény každého možného koncového bodu Amazon S3 pomocou jednoduchého bashového jednodielneho:

$ pri čítaní -r región; do msfconsole -x "použite \ pomocný / skener / http / enum_wayback; nastaviť doménu $ DOMAIN; \
nastaviť OUTFILE $ region.txt; bežať; exit "; hotovo 

Wayback Machine vám veľmi často vráti niekoľko tisíc obrázkov umiestnených v jednom vedre. Takže musíte urobiť niekoľko operácií, aby ste vytiahli iba platné a jedinečné názvy vedier. Programy ako cut a awk sú tu skvelí priatelia.

The Wayback Machine mi dal 23498 potenciálnych vedier v podobe 398,7 MB txt súborov. 4863 z týchto vedier bolo verejne otvorených.

Dopytovanie tretích strán

Ďalšou technikou, ktorú by som chcel predstaviť, je dopytovanie sa tretích strán, ako je Google, Bing, VirusTotal atď. Existuje mnoho nástrojov, ktoré môžu automatizovať proces získavania zaujímavých informácií z externých služieb. Jedným z nich je Sublist3r:

Opäť by sme mali vyhľadať subdomény každej oblasti a potom vytiahnuť iba jedinečné názvy vedier. Rýchla bash one-liner:

$ pri čítaní -r región; do python3 sublist3r.py -d $ región \
> $ region.txt; hotovo 

výsledkom je 756, z ktorých… bolo možné vyzbierať iba 1 vedro. Pivo pre administrátorov!

Vyhľadávanie v protokoloch transparentnosti certifikátov

Poslednou technikou, ktorú by som vám chcel predstaviť, je vyhľadávanie názvov vedier sledovaním protokolov transparentnosti certifikátov. Ak nemáte prehľad o transparentnosti certifikátov, odporúčame vám pozrieť si túto prezentáciu. V zásade je každý vydaný certifikát TLS protokolovaný a všetky tieto protokoly sú verejne prístupné. Hlavným cieľom tejto myšlienky je overiť, či sa niektorý certifikát nesprávne alebo škodlivo nepoužíva. Myšlienka verejných protokolov však odhaľuje všetky domény vrátane ... áno, aj vedier S3. Dobrou správou je, že už existuje nástroj, ktorý vás vyhľadáva - vedroší prúd. Ešte lepšou správou je, že tento nástroj tiež overuje povolenia do skupiny, ktorú našiel. Zoberme si to:

$ python3 bucket-stream.py --threads 100 --log

Po skontrolovaní 571134 možností mi vedro-skener vrátil späť 398 platných vedier. 377 z nich bolo otvorených.

Overuje sa obsah vedra

Dobre, našli sme tisíce názvov vedier a čo ďalej? Môžete napríklad skontrolovať, či niektoré z týchto vedier umožňujú prístup verejnosti alebo prístup k ľubovoľnému overenému používateľovi AWS (ktorý je v podstate rovnaký ako verejný). Na tento účel môžete použiť môj skript BucketScanner - jednoducho uvádza zoznam všetkých prístupných súborov a tiež overuje oprávnenie WRITE do vedra. Na účely tohto výskumu som však modifikoval metódu bucket_reader nasledujúcim spôsobom:

def bucket_reader (bucket_name):
    region = get_region (bucket_name)
    ak región == 'Žiadne':
        míňať
    else:
        bucket = get_bucket (bucket_name)
        results = ""
        vyskúšajte nasledujúci postup:
            pre s3_object v bucket.objects.all ():
                ak s3_object.key:
                    print "{0} je collectable" .format (bucket_name)
                    results = "{0} \ n" .format (bucket_name)
                    append_output (výsledky)
                    prestávka

Aj keď to nie je najelegantnejší spôsob, ako plní svoju úlohu - ak bol v kbelíku zhromažďovateľný iba jeden súbor, môj upravený skener ho nahlási ako zberateľský.

Riziká

Medzi verejne prístupnými súbormi nájdete naozaj zaujímavé súbory. Avšak únik citlivých údajov nie je jediným rizikom.

Niektoré vedrá sú verejne zapisovateľné. Útočník môže určite použiť takú skupinu ako bod distribúcie škodlivého softvéru. Je to ešte strašidelnejšie, ak používate takúto skupinu na distribúciu legitímneho softvéru medzi svojimi zamestnancami - len si predstavte takýto scenár: Vediete všetkých nováčikov, aby nainštalovali softvér z vedra spoločnosti a tento softvér už prepíše útočník pomocou infikovaný inštalátor. Ďalšou variáciou tohto scenára by boli trolling výskumníci S3 - napr. nahraním infikovaného súboru s lákavým názvom, napríklad „Správa o platoch - 2017.pdf“ (samozrejme všetci zodpovední vedci vždy sťahujú nedôveryhodné súbory do izolovaného prostredia, nie?)

Ďalším rizikom s verejne zapísateľnými vedierkami je ... že môžete prísť o všetky svoje údaje. Aj keď nemáte oprávnenie na odstraňovanie objektov bloku, ale iba povolenie WRITE, môžete prepísať ľubovoľný súbor. Ak však prepíšete akýkoľvek súbor prázdnym, znamená to, že tento súbor už nie je k dispozícii pre nikoho. Pozrime sa na tento príklad:

Jediným mechanizmom, ktorý môže v takomto prípade uložiť vaše údaje, je povolenie verzovania. Tento mechanizmus však môže byť drahý (zdvojnásobuje veľkosť využitého priestoru v vedre) a veľa ľudí sa ho rozhodne použiť.

Tiež som počul argument:

Och, poďme na testovacie účely.

Ak sa z vašej testovacej skupiny stane úložisko nezákonného obsahu, potom ... prepáčte, ale je to vaša kreditná karta pripnutá k tomuto účtu.

Máte jasnejšiu budúcnosť?

Problém s oprávneniami pre vedrá S3 stále existuje a neočakávam v najbližšej budúcnosti výraznú zmenu. Ľudia IMHO poskytujú prístup verejnosti, pretože to vždy funguje - nemusíte sa obávať zadávania povolení, keď služba S3 spolupracuje s inými službami. Ďalším dôvodom môže byť jednoduchá chyba pri konfigurácii povolení (napr. Umiestnenie znaku „*“ na nesprávne miesto v politike skupiny) alebo nepochopenie preddefinovaných skupín (napr. Skupina „Každý overený účet AWS“ môže byť stále nastavený prostredníctvom AWS CLI).

Ďalším problémom je, ako takéto problémy nahlásiť? Do vedra nie je pripnutý žiadny e-mail, takže si nikdy nemôžete byť istí, s kým by ste mali kontaktovať. Názvy vedier môžu naznačovať, že patria do spoločnosti X, ale nezabudnite, že to môže ktokoľvek voľne pomenovať. Takže pozor na trollers!

zhrnutie

Za 24652 naskenovaných vedier som bol schopný zhromaždiť súbory z 5241 vedier (21%) a nahrať ľubovoľné súbory do 1365 vedier (6%). Na základe výsledkov môžem bez pochýb povedať, že problém stále existuje. Zatiaľ čo niektoré vedrá sa úmyselne otvárajú (napríklad slúžia na obrázky, firemné brožúry atď.), Žiadna z nich by nemala byť verejne zapisovateľná. Som si istý, že existujú ďalšie skvelé spôsoby, ako nájsť ešte viac vedier, takže jediným rozumným protiopatrením sa zdá byť ... nastavenie správnych povolení pre váš vedro

Nájdete tiež môjho Sprievodcu siedmimi krokmi, ako zaistiť svoje AWS kráľovstvo.