A MCS felhőplatform biztonsági auditja

A MCS felhőplatform biztonsági auditja
SkyShip Dusk SeerLight által

Bármely szolgáltatás felépítése elengedhetetlenül magában foglalja a biztonság folyamatos fejlesztését. A biztonság egy folytonos folyamat, amely magában foglalja a termék védelmének folyamatos elemzését és javítását, a sebezhetőségekről szóló hírek figyelemmel kísérését és sok egyebet. Ide tartoznak az auditok is. Az auditokat végezhetjük saját erőkkel, vagy külső szakértők segítségével, akik drámaian javíthatják a biztonságot, mivel nem dolgoznak a projekten, és friss szemmel néznek a dolgokra.

A cikk azokról a friss szemű külső szakértőkről szól, akik segítettek a Mail.ru Cloud Solutions (MCS) csapatának tesztelni a felhőszolgáltatást, és arról, amit felfedeztek. A „külső erőként” az MCS a Digital Security céget választotta, amely a kibervédelem körében ismert magas szintű szakértelméről. Ebben a cikkben áttekintünk néhány érdekes sebezhetőséget, amelyeket a külső audit keretében találtak — hogy elkerülhessétek az ilyen buktatókat, amikor a saját felhőszolgáltatásotokkal foglalkoztok.

Termék leírása

Mail.ru Cloud Solutions (MCS) egy platform a virtuális infrastruktúra felépítésére a felhőben. IaaS-t, PaaS-t, a fejlesztők számára kész alkalmazásképeket tartalmazó piacteret foglal magában. Az MCS architektúrájának figyelembevételével a termék biztonságát a következő irányokban kellett ellenőrizni:

  • a virtualizációs környezet infrastruktúrájának védelme: hipervizorok, irányítás, tűzfalak;
  • az ügyfelek virtuális infrastruktúrájának védelme: egymástól való elszigetelés, beleértve a hálózati elszigetelést, privát hálózatok az SDN-ben;
  • OpenStack és nyílt komponensei;
  • saját fejlesztésű S3;
  • IAM: multi-tenant projektek szerepkör-alapú modell alapján;
  • Vision (gépészeti látás): API és sebezhetőségek képkidolgozás közben;
  • webes felület és klasszikus webes támadások;
  • PaaS komponensek sebezhetőségei;
  • minden komponens API-ja.

Talán a legfontosabbak a jövő történetéhez — ennyi.

Milyen munkákat végeztek és miért van rá szükség?

A biztonsági audit célja a sebezhetőségek és konfigurációs hibák feltárása, amelyek személyes adatok szivárgásához, érzékeny információk módosításához vagy a szolgáltatások elérhetőségének megsértéséhez vezethetnek.

A munkálatok során, amelyek átlagosan 1-2 hónapig tartanak, az audítorok megismétlik a potenciális támadók lépéseit, és keresik a sebezhetőségeket a kiválasztott szolgáltatás kliens- és szerveroldalán. Az MCS felhőplatform audit keretében a következő célokat határozták meg:

  1. Az autentikáció elemzése a szolgáltatásban. A sebezhetőségek ebben az összetevőben lehetővé tennék, hogy azonnal belépjenek mások fiókjába.
  2. A szerepkörmodell és a hozzáférés korlátozásának vizsgálata a különböző fiókok között. A támadónak a lehetőség, hogy hozzáférjen egy másik virtuális géphez – vonzó cél.
  3. A kliensoldali sebezhetőségek. XSS/CSRF/CRLF/stb. Lehet, hogy van lehetőség más felhasználók megtámadására rosszindulatú linkeken keresztül?
  4. A szerveroldali sebezhetőségek: RCE és különböző injekciók (SQL/XXE/SSRF stb.). A szerversebezhetőségek általában nehezebben találhatók meg, de azonnali tömeges felhasználói kompromittálódáshoz vezetnek.
  5. A felhasználói szegmensek hálózati szintű izolációjának elemzése. A támadónak az izoláció hiánya jelentősen megnöveli a támadási felületet más felhasználók ellen.
  6. Az üzleti logika elemzése. Lehet-e átverni a vállalkozást, és ingyenes virtuális gépeket létrehozni?

A projekt keretében a munkálatokat „Gray-box” modellen végezték: az audítorok a szolgáltatással a szokásos felhasználói jogosultságokkal léptek kapcsolatba, de részben hozzáfértek az API forráshoz, és lehetőségük volt további részleteket elkérni a fejlesztőktől. Ez általában a legkényelmesebb, és ugyanakkor elég reális munkamódszer: a belső információkat a támadók úgyis összegyűjthetik, ez csupán idő kérdése.

Felfedezett sebezhetőségek

Mielőtt az auditor különböző payloadokat (azokat a hasznos terheket, amelyekkel a támadást végrehajtják) indítana véletlenszerű helyekre, először át kell nézni, hogy mi hogyan működik, milyen funkciók vannak jelen. Elsőre haszontalannak tűnhet, mivel a legtöbb vizsgált helyen nem található sebezhetőség. De csak az alkalmazás felépítésének és működési logikájának megértése ad lehetőséget a legbonyolultabb támadási vektorok felfedezésére.

Fontos megtalálni azokat a helyeket, amelyek gyanúsnak tűnnek, vagy valamilyen szempontból eltérnek másoktól. És az első veszélyes sebezhetőséget pontosan így találták meg.

IDOR

Az IDOR sebezhetőség (Insecure Direct Object Reference, nem biztonságos közvetlen objektumreferencia) a leggyakoribb sebezhetőségek egyike az üzleti logikában, amely lehetővé teszi, hogy valamilyen módon hozzáférést nyerjünk olyan objektumokhoz, amelyekhez valójában nem engedélyezett a hozzáférés. Az IDOR sebezhetőségek lehetőséget biztosítanak különböző fokú érzékeny felhasználói adatok megszerzésére.

Az IDOR egyik változata az, amikor a felhasználók, bankszámlák, bevásárlókocsik objektumaival végzett műveleteket manipulación által hajtják végre, amelyek a hozzáférési azonosítók manipulálásával valósulnak meg. Ez a legváratlanabb következményekhez vezethet. Például lehetővé válhat egy pénzátutaló fiók megváltoztatása, aminek segítségével pénzt lehet lopni más felhasználóktól.

A MCS esetében az auditorok éppen az IDOR sebezhetőséget fedezték fel, amely a nem biztonságos azonosítókhoz kapcsolódott. A felhasználói fiókban bármilyen objektumhoz való hozzáféréshez UUID azonosítókat használtak, amelyek a biztonsági szakemberek szerint lenyűgözően nem voltak feltörhetők (tehát védettek a bruteforce támadásokkal szemben). De egyes entitások esetében kiderült, hogy a felhasználói információk megszerzéséhez egyszerűen előre meghatározott számokat használnak. Gondolom, kitalálja, hogy a felhasználó ID-ját eggyel meg lehetett változtatni, azaz megismételni a kérdést, így megkerülve az ACL-t (hozzáférés-ellenőrző lista, mely a folyamatok és felhasználók adat hozzáférési szabályaival foglalkozik).

Server Side Request Forgery (SSRF)

Az OpenSource termékek előnye, hogy óriási mennyiségű fórum áll rendelkezésre a felmerült problémák részletes technikai leírásával, és ha szerencséd van, a megoldás leírásával is. De ennek a dolognak van egy másik oldala is: a részletesen leírt ismert sebezhetőségek. Például az OpenStack fórumon nagyszerű leírások találhatók sebezhetőségekről [XSS] és [SSRF], amelyeket valamiért senki sem siet javítani.

A gyakori alkalmazási funkció, hogy a felhasználó linket küld a szervernek, amelyen a szerver navigál (például, hogy egy képet töltsön le a megadott forrásból). Ha a biztonsági eszközök nem megfelelően szűrik a linkeket vagy a felhasználóknak visszaküldött válaszokat, akkor ezt a funkciót a támadók könnyen kihasználják.

Az SSRF sebezhetőségek jelentősen előre mozdíthatják a támadások fejlődését. A támadó hozzáférést szerezhet:

  • korlátozott hozzáférést a támadott helyi hálózathoz, például csak bizonyos hálózati szegmensekhez és egy meghatározott protokollal;
  • teljes hozzáférést a helyi hálózathoz, ha lehetséges a csökkentés az alkalmazási szintről a szállítási szintre, és ennek következményeként a teljes irányítás a terhelés fölött az alkalmazási szinten;
  • hozzáférést a helyi fájlok olvasásához a szerveren (ha támogatott a file://// séma);
  • Őszintén szólva, nem értem, hogyan került el ez a hír a Habr elől. Ebben a cikkben röviden leírjuk, hogyan használhatjuk az API-t, és bemutatunk néhány gyakorlati példát

Az OpenStackben régóta ismert egy "vak" jellegű SSRF sebezhetőség: a szerverhez való hozzáféréskor nem kapsz választ tőle, de különböző hibákat vagy késlekedéseket kapsz a kérés eredményétől függően. Ezen alapjain végrehajtható a portok beolvasása a belső hálózaton lévő gazdagépeken, minden azt követő következménnyel, amit nem szabad alábecsülni. Például, egy terméknek lehet API-ja a háttérben, amely csak a vállalati hálózatból érhető el. Ha a dokumentáció a birtokunkban van (ne feledkezzünk meg a belső informátorokról), a támadó SSRF segítségével hozzáférhet a belső metódusokhoz. Például, ha valamilyen módon sikerült megszerezni egy hozzávetőleges hasznos URL-ek listáját, akkor az SSRF segítségével végigmehet rajtuk és kérdést indíthat — mondjuk, pénzt átutalni egyik számláról a másikra vagy megváltoztatni a limiteket.

Ez nem az első eset, hogy SSRF sebezhetőséget fedeztek fel az OpenStackben. A múltban volt lehetőség közvetlen hivatkozásról ISO-képeket betölteni, ami szintén hasonló következményekhez vezetett. Jelenleg ez a funkció eltávolításra került az OpenStackből. Nyilvánvalóan a közösség ezt tartotta a legegyszerűbb és legmegbízhatóbb megoldásnak a problémára.

És a mellékelt A HackerOne (h1) szolgáltatásából származó nyilvános jelentésben a nem vak SSRF kihasználása, amely lehetőséget biztosít az instance metainformációk olvasására, hozzáférést biztosít a Shopify teljes infrastruktúrához.

Az MCS-ben két hasonló funkcionalitású helyen fedeztek fel SSRF sebezhetőségeket, de gyakorlatilag kibővítetlenek voltak a tűzfalak és más védelmek miatt. Akárhogy is, az MCS csapata megoldotta ezt a problémát anélkül, hogy a közösségre várt volna.

XSS a "shell" betöltése helyett

Annak ellenére, hogy több száz tanulmány készült, évről évre az XSS (keresztoldali szkriptelési támadás) még mindig a leg gyakrabban előforduló webes sebezhetőség (vagy támadás?).

A fájlok feltöltése a biztonsági kutatók kedvenc helye. Gyakran előfordul, hogy tetszőleges szkriptet (asp/jsp/php) tölthetünk fel, és parancsokat hajthatunk végre az operációs rendszeren, amit a pentesterek a „shell feltöltése” terminológiával illetnek. De az ilyen sebezhetőségek népszerűsége kétélű fegyver: emlékeznek rájuk és fejlesztenek ellenük eszközöket, így az utóbbi időben a „shell feltöltésének” valószínűsége közel nullához közelít.

A támadó csapatnak (a Digital Security képviseletében) szerencséje volt. Rendben, az MCS szerveroldalon ellenőrizték a feltöltött fájlok tartalmát, csak képek voltak engedélyezve. De az SVG is egy kép. Milyen veszélyt rejthetnek az SVG képek? Azért, mert JavaScript-fragmensek ágyazhatók beléjük!

Kiderült, hogy a feltöltött fájlok minden MCS szolgáltatás felhasználó számára hozzáférhetők — vagyis támadhatjuk a felhő más felhasználóit, nevezetesen — az adminisztrátorokat.

A MCS felhőplatform biztonsági auditja
XSS-támadással történő beépítés példa egy phishing bejelentkezési űrlapra

XSS-támadás kihasználásának példái:

  • Miért próbáljunk meg ellopni egy munkamenetet (főleg, mivel manapság mindenhol HTTP-Only cookie-k vannak, amelyek védve vannak a js-skriptek által végzett lopásokkal), ha a feltöltött szkript azonnal hívhatja az erőforrás API-ját? Ilyen esetben a hasznos terhelés XHR-kéréseken keresztül megváltoztathatja a szerver konfigurációját, például hozzáadhatja a támadó nyílt SSH-kulcsát, és SSH-hozzáférést kaphat a szerverhez.
  • Ha a CSP-politika (tartalomvédelmi politika) megtiltja a JavaScript beépítését, a támadó nélküle is megoldhatja. Tiszta HTML-ben elkészíthet egy hamis bejelentkezési űrlapot, és így lophatja el az adminisztrátor jelszavát egy fejlett phishing módszerrel: a felhasználó számára a phishing oldal ugyanazon az URL-en jelenik meg, így nehezebben észlelhető.
  • Végül a támadó megvalósíthatja a kliens DoS-t — olyan sütiket állít ki, amelyek nagyobbak 4 KB-nál. A felhasználónak csupán annyit kell tennie, hogy egyszer megnyit egy hivatkozást — és az egész webhely elérhetetlenné válik, amíg fel nem ismeri, hogy külön kell törölnie a böngészőt: a többségében a webkiszolgáló visszautasítja az ilyen klienst.

Nézzük meg egy másik felfedezett XSS példáját, ezúttal egy ügyesebb kihasználással. Az MCS szolgáltatás lehetővé teszi a tűzfalbeállítások csoportosítását. A csoport nevében volt a felfedezett XSS. Az volt a jellemzője, hogy a vektor nem azonnal lépett működésbe, nem a szabályok listájának megtekintésekor, hanem a csoport törlésekor:

A MCS felhőplatform biztonsági auditja

Tehát a következő forgatókönyv alakult ki: a támadó tűzfal szabályt hoz létre "terheléssel" a nevében, az adminisztrátor egy idő után észreveszi, elindítja az eltávolítási folyamatot. És ekkor lép működésbe a rosszindulatú JS.

A MCS fejlesztőinek a Digital Security csapata azt javasolta, hogy XSS támadások elleni védekezés érdekében az SVG-fájlok feltöltésénél (ha azoktól nem lehet eltekinteni):

  • A felhasználók által feltöltött fájlokat külön domain-en tárolják, amelynek nincs köze a "sütikhez". A skript más domain keretein belül fog futni, így nem jelenthet fenyegetést a MCS-re.
  • A szerver HTTP-válaszában hozzá kell adni a "Content-disposition: attachment" fejlécet. Így a fájlok a böngésző által letöltésre kerülnek, nem futtatásra.

Továbbá, a fejlesztők számára ma már számos mód áll rendelkezésre a XSS kihasználás kockázatainak csökkentésére:

  • a "HTTP Only" jelzőt használva a "Cookies" munkameneti fejlécet hozzáférhetetlenné tehetjük a rosszindulatú JavaScript számára;
  • a helyesen implementált CSP politika jelentősen megnehezítheti a XSS kihasználását a támadók számára;
  • a modern sablonmotorok, mint az Angular vagy a React, automatikusan megtisztítják a felhasználói adatokat, mielőtt a böngészőbe továbbítják őket.

A kétfaktoros hitelesítés sebezhetőségei

A felhasználóknak mindig ajánlott bekapcsolni a 2FA-t (kétfaktoros hitelesítést) a fiókjaik biztonsága érdekében. Valóban, ez egy hatékony módja a támadó hozzáférésének megakadályozására a szolgáltatáshoz, ha a felhasználói adatok kompromittálódtak.

De vajon mindig garantálja a második hitelesítési tényező használata a fiók védelmét? A 2FA megvalósításában olyan biztonsági problémák merülhetnek fel:

  • Az OTP kód (egyszeri jelszavak) durva brute force támadása. Ennek ellenére az OTP brute force védelme hiánya, ilyen hibák még a nagy cégeknél is előfordulnak: a Slack esetében, a Facebook esetében.
  • Gyenge generálási algoritmus, például a következő kód előrejelzésének lehetősége.
  • Logikai hibák, például a lehetőség, hogy más OTP-jét kérje a saját telefonszámára, ahogy ez történt a Shopify esetében.

A MCS esetében a 2FA a Google Authenticator és a Duo alapjain valósult meg.A protokoll már kiválóan bevált, de az alkalmazáson belüli kód ellenőrzés implementálását érdemes ellenőrizni.

A MCS-nél a 2FA több helyen is használható:

  • A felhasználó hitelesítésekor. Itt van védelmi mechanizmus a bruteforce támadások ellen: a felhasználónak csupán néhány próbálkozása van az egyszer használatos jelszó megadására, ezt követően a belépés egy időre le lesz blokkolva. Ez megakadályozza az OTP-k bruteforce módszerrel történő kitalálását.
  • Offline backup kódok generálásakor a 2FA végrehajtásához, valamint annak letiltásakor. Itt a bruteforce kontrollt nem implementálták, ami lehetővé tette, hogy egy fiók jelszavának és egy aktív munkamenetnek a birtokában a backup kódokat újragenerálják vagy teljesen letiltsák a 2FA-t.

Tekintettel arra, hogy a backup kódok ugyanabban a számérték-tartományban helyezkedtek el, mint az alkalmazás által generált OTP-k, a kódok rövid időn belüli kitalálásának esélye jelentősen magasabb volt.

A MCS felhőplatform biztonsági auditja
Az OTP kitalálásának folyamata a 2FA letiltásához a „Burp: Intruder” eszköz segítségével.

Eredmény

Összességében a MCS termék biztonságosnak bizonyult. A tesztelés során a pentest csapatnak nem sikerült hozzáférnie az ügyfél virtuális gépeihez és adataikhoz, a feltárt sebezhetőségeket pedig a MCS csapata gyorsan javította.

Fontos megjegyezni, hogy a biztonság egy folyamatos munka. A szolgáltatások nem statikusak, folyamatosan fejlődnek. Teljesen olyan terméket fejleszteni, amely mentes a sebezhetőségektől, lehetetlen. De időben fel lehet ismerni őket és minimalizálni a megismétlődésük esélyét.

Jelenleg az összes említett sebezhetőség már ki lett javítva a MCS-ben. Annak érdekében, hogy az új sebezhetőségek száma minimalizálódjon és a létezésük időtartama csökkenjen, a platform csapata folyamatosan ezt teszi:

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster