A 25K AWS S3 vödör felfedezése

Az AWS S3 vödrök engedélyével kapcsolatos problémák olyan régiak, mint maga a szolgáltatás. Úgy gondolom, hogy a Skyhigh elvégezte a témáról 2 legismertebb kutatást, rámutatva, hogy az összes S3 vödör 7% -a nyitva van, és a Rapid7 szerint, még 17% nyitva van. Ma 2018-ban vagyunk, és úgy döntöttem, hogy ellenőriztem a probléma jelenlegi állását. Ezen felül szeretném bemutatni az ilyen kutatások elvégzésének technikáit - ha elmulasztott valamelyik okosat, kérlek, ossza meg nekem a hozzászólásokban.

Kezdjük néhány elmélettel

Az összes AWS S3 vödör a következő URL-ekkel érhető el:

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

vagy az AWS CLI használatával:

$ aws s3 ls - régió [régió_neve] s3: // [bucket_name]

Az emberek nem gyakran mutatnak rá egy régióparaméter használatának szükségességére. Néhány vödör azonban nem működik régió meghatározása nélkül. Nem látok mintát, amikor működik, és amikor nem olyan jó gyakorlat, hogy ezt a paramétert mindig hozzáadjuk :)

Tehát általában véve egy érvényes vödör megtalálása megegyezik az s3.amazonaws.com vagy [aws_endpoint] .amazonaws.com aldomainjének megtalálásával. Az alábbiakban négy módszert veszek át, amelyek hasznosak lehetnek ebben a feladatban.

Bruteforcing

Minden vödörnévnek egyedinek kell lennie, és néhány kivételtől eltekintve csak 3– 63 alfanumerikus karaktereket tartalmazhat (tartalmazhat „-” vagy „.”, De nem lehet elindítani vagy befejezni). Ennek ellenére elegendő tudással fegyverzetünk van ahhoz, hogy megtaláljuk az összes S3 vödröt, de legyünk őszinték - inkább a rövid neveknél működne. Ennek ellenére az emberek hajlamosak bizonyos mintákat alkalmazni a nevek megadására, pl. [cégnév] -dev, vagy a [cégnév] .backups. Ha egy adott társaság vödröt keres, akkor az ilyen jól ismert minták hitelesítését egyszerűsítheti olyan eszközökkel, mint a LazyS3 vagy az aws-s3-bruteforce. Tegyük fel, hogy van egy Rzepsky nevű cég. Egy egyszerű parancs: $ ruby ​​lazys3.rb rzepsky rzepsky-dev vödröt mutat:

De mi van, ha annyi vödröt szeretne betakarítani, amelyen nincs megadva konkrét név? Olvassa tovább ezt a bejegyzést;)

Wayback gép

Hallottál már valaha a Wayback Machineről? Idéző Wikipedia:

A Wayback Machine egy digitális archívum a világhálóról és az interneten található egyéb információkról, amelyeket az Internet Archívum hozott létre.

A digitális archívum bizonyos forrásait az Amazon infrastruktúrája tárolja. Ennek ellenére, ha a Wayback Machine csak egy fényképet indexelt egy S3 vödörbe, akkor lekérdezhetjük ezt az információt és ellenőrizhetjük, hogy ez a vödör tartalmaz-e nyilvános erőforrásokat. Még akkor is, ha az indexelt fényképet már eltávolították (vagy megtagadták annak hozzáférését), akkor továbbra is megvan a vödör neve, ami reményt kínál arra, hogy érdekes fájlokat találjanak benne. A Wayback Machine API-jának megkérdezéséhez használhat egy metasploit modult, az enum_wayback néven:

Amint ez a bejegyzés elejétől emlékszik, hivatkozhat a vödör tartalmára egy régiót meghatározó URL-címmel is. Tehát a még jobb eredmények elérése érdekében ellenőrizhetjük az összes lehetséges Amazon S3 végpont aldomaineit egy egyszerű bash vonal segítségével:

$ olvasás közben -r régió; nem az msfconsole -x "használata \ segéd / szkenner / http / enum_wayback; állítsa be a DOMAIN $ régiót; \
set OUTFILE $ region.txt; fuss; exit "; kész 

A Wayback Machine nagyon gyakran néhány ezer képet küld vissza egyetlen vödörbe helyezve. Tehát néhány műveletet meg kell tennie, hogy csak érvényes és egyedi vödörneveket húzzon ki. Az olyan programok, mint a cut és az awk, nagyszerű barátok itt.

A Wayback Machine 23498 potenciális vödröt adott nekem 398,7 MB txt fájlok formájában. A vödrök közül 4863 nyilvános volt.

Harmadik felek lekérdezése

Egy másik módszer, amelyet szeretnék bemutatni, a harmadik felek lekérdezése, mint például a Google, a Bing, a VirusTotal stb. Sok olyan eszköz létezik, amely automatizálja az érdekes információk külső szolgáltatásokból történő begyűjtését. Az egyik a Sublist3r:

Meg kell vizsgálnunk az egyes régiók aldomaineit, majd csak az egyedi vödörneveket ki kell húzni. Gyors bash egy bélés:

$ olvasás közben -r régió; do python3 sublist3r.py -d $ region \
> $ region.txt; kész 

756 eredményt ad, amelyből… csak egy vödör gyűjthető be. Sör az adminisztrátoroknak!

Keresés a tanúsítvány átlátszó naplóiban

Az utolsó módszer, amelyet szeretnék bemutatni, a vödörnevek keresése a tanúsítványok átlátszó naplóinak figyelésével. Ha nem ismeri a tanúsítvány átláthatóságát, azt javaslom, hogy nézze meg ezt a bemutatót. Alapvetően minden kiadott TLS tanúsítvány naplózódik, és ezek a naplók nyilvánosan hozzáférhetők. Ennek az ötletnek a fő célja annak ellenőrzése, hogy valamelyik tanúsítványt nem használják-e tévesen vagy rosszindulatúan. A nyilvános naplók gondolata azonban felfedi az összes domaint, ideértve… igen, az S3 vödröket is. Jó hír az, hogy van már elérhető eszköz, amely keres téged - a vödör-patak. Még jobb hír az, hogy ez az eszköz igazolja a megtalált vödör engedélyeit is. Nézzünk egy képet:

$ python3 bucket-stream.py - szálak 100 --log

Az 571134 lehetőségek ellenőrzése után a vödör-leolvasó 398 érvényes vödröt adott vissza. 377 közülük nyitva volt.

A vödör tartalmának ellenőrzése

Rendben, ezer vödörnevet találtunk, és mi lesz? Nos, ellenőrizheti például, hogy az említett vödrök lehetővé teszik-e nyilvános hozzáférést vagy bármely hitelesített AWS-felhasználó (amely alapvetően megegyezik a nyilvános) hozzáférést. Erre a célra használhatja a BucketScanner szkriptet - egyszerűen felsorolja az összes elérhető fájlt, és ellenőrzi a vödör WRITE engedélyeit is. Ennek a kutatásnak azonban a következőképpen módosítottam egy bucket_reader módszert:

def bucket_reader (vödr_neve):
    region = get_region (vödör_neve)
    ha régió == „Nincs”:
        elhalad
    más:
        vödör = get_bucket (vödör_neve)
        eredmények = ""
        próbálja meg:
            s3_object esetén a bucket.objects.all () -ben:
                ha s3_object.key:
                    "{0} gyűjthető" nyomtatás .formátum (vödr_neve)
                    eredmények = "{0} \ n" .formátum (vödr_neve)
                    append_output (eredmények)
                    szünet

Noha nem a legelegánsabb módon végzi el a munkáját - ha csak egy fájlt gyűjthettek be a vödörbe, akkor a módosított szkennerem ezt a vödröt gyűjthetőnek jelentette.

A kockázatok

A nyilvánosan elérhető fájlok között találhat igazán érdekes fájlokat. Az érzékeny adatok kiszivárgása azonban nem az egyetlen kockázat.

Néhány vödör nyilvánosan írható. A támadó biztosan használhat ilyen vödröt rosszindulatú programok terjesztési pontjaként. Még ennél is félelmesebb, ha egy ilyen vödröt használ a legális szoftver terjesztésére az alkalmazottak között - csak képzelje el ezt a forgatókönyvet: az összes újoncot arra irányítja, hogy telepítsen egy szoftvert a vállalat vödöréből, és ezt a szoftvert már felülírja egy támadó fertőzött telepítő. A forgatókönyv másik változata az S3 kutatók vonzása lenne - pl. feltöltve egy fertőzött fájlt egy csábító névvel, például “Fizetésjelentés - 2017.pdf” (természetesen minden felelős kutató mindig letölti a nem megbízható fájlokat a homokozóba helyezett környezetbe, nem?)

Egy másik kockázat a nyilvánosan írható vödör esetén az, hogy elveszítheti az összes adatát. Még akkor sem, ha nem rendelkezik TÖRLÉS engedélyekkel a vödör objektumaihoz, de csak egy SZERKEZÉS engedélyével bármilyen fájlt felülírhat. Ennek ellenére, ha valamelyik fájlt felülírja üres fájllal, az azt jelenti, hogy ez a fájl már senki számára nem elérhető. Vessen egy pillantást erre a példára:

Az egyetlen olyan mechanizmus, amely megmentheti az adatait egy ilyen forgatókönyvben, a verziózás engedélyezése. Ez a mechanizmus azonban drága lehet (megduplázza a vödörben felhasznált terület méretét), és nem sok ember dönt úgy, hogy használja.

Azt is hallottam egy érvről:

Ja, ez csak egy vödör a tesztelési célokra.

Nos, ha a „teszt” vödör illegális tartalom tárolójává válik, akkor… bocs haver, de ez az Ön hitelkártyája, amely erre a fiókra van rögzítve.

Van valami fényesebb jövő?

Az S3 vödör engedélyekkel kapcsolatos probléma továbbra is fennáll, és nem várom el látványos változást a közeljövőben. Az IMHO-emberek hozzáférést biztosítanak a nyilvánosság számára, mert ez mindig működik - nem kell aggódnia az engedélyek megadása miatt, amikor az S3 szolgáltatás más szolgáltatásokkal együttműködik. A másik ok egy egyszerű hiba az engedélyek konfigurálásában (pl. Egy “*” karakter rossz helyre helyezése a vödör házirendjében), vagy az előre definiált csoportok meg nem értése (pl. Egy “Bármely hitelesített AWS-fiók” csoport továbbra is beállítható az AWS-en keresztül CLI).

Egy másik probléma az, hogy hogyan lehet ilyen problémákat bejelenteni? Nincs vödörhez rögzített e-mail, így soha nem lehet biztos benne, hogy kivel kell kapcsolatba lépni. A vödrök nevei azt jelezhetik, hogy tartoznak az X céghez, de ne feledje, hogy bárki lazán megnevezheti. Tehát vigyázz a trollokra!

összefoglalás

24652 beolvasott vödörhez 5241 vödörből (21%) tudtam fájlokat gyűjteni, és tetszőleges fájlokat töltöttem 1365 vödörbe (6%). Az eredmények alapján kétség nélkül elmondhatom, hogy a probléma továbbra is fennáll. Míg néhány vödör szándékosan nyitva van (pl. Képeket, vállalati brosúrákat stb. Szolgál fel), egyikük sem lehet nyilvánosan írható. Biztos vagyok benne, hogy vannak még jó módszerek a még vödör megtalálására, tehát az egyetlen ésszerű ellenintézkedés úgy tűnik, hogy… a vödörre vonatkozó helyes engedélyek beállítása

Kérjük, olvassa el a hét lépésből álló útmutatóomat az AWS Királyság biztosításához.