Mesterséges intelligencia által vezérelt kibertámadások: Hogyan lehet felismerni, megelőzni és megvédeni az intelligens fenyegetéseket?

Olvassa el most
A helyszíni fordításokhoz mesterséges intelligenciát használunk, és bár törekszünk a pontosságra, nem biztos, hogy mindig 100%-os pontosságúak. Megértését nagyra értékeljük.

A Git sebezhetőség CVE-2024-32002 elemzése és elhárítása

a OPSWAT
Ossza meg ezt a bejegyzést
Minh Pham és Thai Do, a Ho Si Minh-völgyi Műszaki Egyetem hallgatói, akik részt vettek az OPSWAT ösztöndíjprogramban OPSWAT
A diákok részt vettek az OPSWAT ösztöndíjprogramban.

A közelmúltban nyilvánosságra hoztak egy kritikus sebezhetőséget a Gitben, amely RCE (távoli kódfuttatás) támadásokat tesz lehetővé, és a Git és a Microsoft Visual Studio 2017 több verzióját érinti. A sebezhetőség lehetővé teszi a támadók számára, hogy almodulok segítségével manipulálják a Git adattárakat, kihasználva a Git egy olyan hibáját, amely lehetővé teszi, hogy az almodul munkafáján kívülre, a .git/ könyvtárba írjanak fájlokat. Ez a hiba lehetővé teszi egy rosszindulatú hook végrehajtását, miközben egy tároló klónozási művelet még fut [1]. 

A CVE-2024-32002 sebezhetőség a Microsoft Visual Studio 2017 15.9-es verzióját és a 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 és 2.39.4 verziónál korábbi Git verziókat érinti. A hiba kihasználható olyan környezetben, ahol a szimbolikus linkek támogatása engedélyezve van a nagy- és kisbetűket nem érzékelő operációs rendszereken. 

CVSS (Common Vulnerability Scoring System) 3.x súlyossági és vektorinformációk, 9.0 alappontszámmal, kritikusnak minősítve, a GitHub, Inc. által rendelkezésre bocsátva.

A Git megértése

A Git egy ingyenes és nyílt forráskódú elosztott verziókezelő rendszer, amelyet arra terveztek, hogy segítse a szoftverfejlesztőket a kódbázisok gyors és hatékony kezelésében. Fokozza a fejlesztőcsapat tagjai közötti együttműködést azáltal, hogy szabványosított, strukturált módon szervezi és követi a fájlok és könyvtárak változásait. 

A Git-et széles körben használják a szoftverfejlesztésben. Az olyan platformok, mint a GitHub, a GitLab és a Bitbucket a Gitre épülnek, hogy erős funkcióinak köszönhetően javítsák a fejlesztők közötti együttműködést: 

  • A kódfájlok nyomon követhető változásainak rögzítése, az úgynevezett commitok
  • Szükség esetén a kódszerkesztések visszaállítása korábbi verziókra. 
  • A különböző ágaktól vagy közreműködőktől származó módosítások hatékony kombinálása. 
  • Az előzmények nyilvántartása arról, hogy ki és mikor hajtott végre változtatásokat.
A .git mappaszerkezet vizuális megjelenítése, amely olyan könyvtárakat jelenít meg, mint a config, HEAD, hooks, objects és refs.

Git horgok 

Amikor egy Git-tárat létrehozunk vagy klónozunk a git init vagy a git clone parancsok segítségével, a munkafa gyökerében létrejön egy .gitkönyvtár. A .git könyvtár könyvtárszerkezete kezdetben így néz ki: 

A Git hooks futtatható szkriptek, amelyek vagy a .git/hooks könyvtárban, vagy a .git/modules/module_type/module_name/hooks könyvtárban találhatók. A horgok automatikusan elindulnak, amikor bizonyos események történnek a Git-tárban.  

Ha a hooks könyvtárban lévő fájl nem rendelkezik .sample utótaggal, akkor a fájlban lévő parancsok a fájl nevében szereplő adott Git-akció előtt vagy után kerülnek végrehajtásra, például a pre-commit, post-commit és post-checkout

Git almodulok

A Git-almodul egy olyan rekord egy Git-tárban, amely egy külső tárban lévő konkrét commitra hivatkozik. Amikor egy almodul hozzáadódik egy adattárhoz, a .gitmodules könyvtárban egy új fájl jön létre az almodul URL címe és a helyi könyvtár közötti leképezés metaadataival. Ha egy tároló több almodulból áll, a .gitmodules fájl mindegyikhez tartalmaz egy-egy bejegyzést. [3] 

A tárolók és almodulok kölcsönhatását bemutató diagram, amely az A tároló, a B almodul és a C mappa közötti kapcsolatot szemlélteti.
Példa egy .gitmodules fájl tartalmára, amely a "Example" nevű almodul konfigurációját mutatja be.
A következő képen látható, hogy néz ki egy .gitmodules fájl: 

Szimbolikus hivatkozások (Symlinks)

A szimbolikus hivatkozás, más néven szimlink vagy lágy hivatkozás egy olyan fájl, amely egy másik fájlra vagy könyvtárra (a továbbiakban "cél") mutat annak elérési útvonalának megadásával. Ha egy szimbolikus linket törölnek, a célpontja érintetlen marad. [4] 

A Symlink a Gitben egy olyan fájlként jön létre, amely metaadatokkal van ellátva, hogy hivatkozásként vagy rövidítésként működjön egy másik fájlhoz. A Symlinkek segítségével több hivatkozást lehet létrehozni egy fájlra anélkül, hogy annak tartalma megismétlődne.

Egy fájlra (A fájl) mutató szimbolikus és hard linkek ábrája, amely megmutatja, hogy ezek a linkek hogyan érik el ugyanazt a fájltartalmat.
A Git a szimbolikus hivatkozásokat speciális fájlokként kezeli, amelyek az általuk hivatkozott fájl vagy könyvtár elérési útvonalát tárolják. 
A szimbolikus linkek vizualizálása egy Git tárolóban, könyvtár- és fájlstruktúrák és a szimbolikus linkek útvonalainak bemutatása.
Amikor egy tárolót vagy egy szimbolikus linket tartalmazó ágat klónozunk vagy kijelentkezünk, a Gitben tárolt szimlink a helyi fájlrendszerben szimlinkké alakul át. 

GIT biztonsági sebezhetőségi elemzés

Foltelemzés

A biztonsági sebezhetőségek mélyebb megértése érdekében a biztonsági szakemberek gyakran végeznek javításelemzést. Ez egy olyan technika, amely segít azonosítani a sebezhető funkciókat és a potenciális támadási vektorokat. Az OPSWAT munkatársai megvizsgálták a javított verzióban a CVE-2024-32002 sebezhetőség kezelése érdekében végrehajtott változtatásokat, és megállapították, hogy két fájlt frissítettek a CVE kezelése érdekében.

Az egyik frissített fájl a submodule--helper.c fájl, amely a Git almodulok klónozását kezelő kódot tartalmazza. Az új commit a javított verzióban a következő kettőt tartalmazta:  

  1. A dir_contains_only_dotgit függvény hozzáadása annak biztosítására, hogy a submodules könyvtár ne tartalmazzon .git fájlokat vagy könyvtárakat.
Kódváltozások a submodule-helper.c nevű fájlban a Git felületen belül, 83 kiegészítést mutat, törlések nélkül
  1. Változások történtek a clone_submodule() függvényben, hogy a függvény tartalmazzon egy olyan feltételt, amely ellenőrzi, hogy az almodul könyvtár létezik-e és üres-e. Ha a könyvtár nem üres, a klónozási folyamat megszakad. 
Részletes kódrészlet egy Git commitból, kiemelve egy függvényt, amely a könyvtárak tartalmát ellenőrzi a szubmodul műveletek során

A második frissítés az új commitban a t/t7406-submodule-update.sh fájlban volt, amely egy tesztszkriptet ad hozzá, amely ellenőrzi, hogy a biztonsági rés megoldódott-e. 

Kibővített kódmódosítások a T7406-submodule-update.sh tesztfájlban, amely részletezi a tesztkonfigurációkat az almodulok elérési útvonalaira és a szimlinkekre vonatkozóan.

Az elemzéstől a hasznosításig

A Symlinkek és almodulok munkafolyamatainak elemzése a Gitben

A javításelemzésből és a CVE-2024-32002 sebezhetőség leírásából nyert ismereteken túlmenően OPSWAT ösztöndíjasai a Symlinkek és almodulok munkafolyamatának vizsgálatán dolgoztak a Gitben. Feltörték az eseménysorozatot, amely akkor történik, amikor egy felhasználó klónoz egy tárat:

  1. A Git a fájlok és könyvtárak letöltésével kezdődik az elsődleges tárolóból. 
  2. A szimlinkfájlokban megadott definíciókat használja fel a megfelelő szimlinkek újbóli létrehozásához a helyi fájlrendszerben.  
  3. Ha a szimlink egy létező fájlra mutat, a szimlink működőképes lesz; ellenkező esetben a szimlink nem működik, amíg a cél helyreállítása meg nem történik.  
  4. Ha a tárolót a --recursive opcióval klónozzuk, a Git klónozza az almodulokat (külső tárolók), és a .gitmodules fájlban megadott könyvtárakba helyezi őket.  
  5. Ha egy szimlink része az almodul elérési útvonalának (például util/module/test, ahol util egy másik könyvtárra mutató szimlink, például symlink_folder), a Git az almodul tartalmát a szimlink által hivatkozott tényleges könyvtárban tárolja (például symlink_folder/module/test), miközben a hozzáférést az eredeti szimlink elérési útvonalon keresztül engedélyezi. 
Egy vizuális folyamatábra, amely bemutatja a tároló klónozásának lépéseit, a fájlok és könyvtárak letöltését, a szimlinkek újrateremtését, az almodulok klónozását és a megfelelő elérési útvonalra való áthelyezését.

A CVE-2024-32002 Git biztonsági rés megértése 

Rosszindulatú tárolók létrehozása

OPSWAT munkatársai tovább vizsgálták a rosszindulatú tárolók létrehozását at/t7406-submodule-update.sh fájlhoz készült frissítések alapján, és ezt a folyamatot a következő lépésekre bontották:

  1. Kijelentkezés utáni horgot tartalmazó tároló létrehozása
Egy terminál kódrészlet, amely bemutatja a parancsokat egy post-checkout hook beállításához a Git-ben, beleértve a könyvtárak létrehozását és a szkriptek hozzáadását is
  1. Egy másik tároló létrehozása, amely tartalmaz egy almodult, és az A/modules/x elérési útvonalon található. Az új almodul hivatkozik a korábban létrehozott tárolóra.
Egy terminál kódrészlet, amely bemutatja egy almodul hozzáadását egy tárolóhoz Git parancsok segítségével
  1. Egy a nevű szimbolikus link létrehozása, amely a .git mappára mutat a Git indexben. 
Egy terminálszkript példa, amely kiemeli a .git fájl létrehozására és átadására vonatkozó parancsokat egy tárolóhelyen segédprogramként.
Egy olyan támadási forgatókönyvet bemutató folyamatábra, amelyben egy rosszindulatú hook-tárat almodulként adnak hozzá egy fő tárhoz, ami szkript végrehajtásához vezet.
Egy diagram, amely bemutatja, hogy egy támadó hogyan használhatja ki a CVE-t egy tárolóhely klónozásával. 

A biztonsági hiba megértése

Amikor a felhasználó az előző lépésben létrehozott rosszindulatú tárolót klónozza az --recursive opció használatával, a checkout utáni kampó rosszindulatú szkriptje elindul, lehetővé téve a támadó számára, hogy veszélyeztesse a felhasználó eszközét. 

Ez a távoli kódfuttatás azért következik be, mert a fő adattár egy a nevű szimbolikus linket észlel, amely klónozáskor a .git könyvtárra mutat. A rekurzív mód engedélyezésével az almodulok is bekerülnek a klónozott tárolóba. Ez a tároló tartalmaz egy hooks mappát, amely a post-checkout hook scriptet tartalmazza, és a helyi könyvtára az A/modules/x könyvtárban van.  

Mivel az a a.git könyvtárra mutat, és a fájlrendszer nem érzékeli a nagy- és kisbetűket, az A-t az a-val egyenértékűnek értelmezi. A Git félrevezetve írja a post-checkout hook szkriptet a .git/modules/query/fast/hooks/ könyvtárba. Ha a . git/modules/{module_type}/{module_name}/hooks mappában található egy post-checkout hook szkript, akkor az elindul a fő adattár klónozásakor a --recursive opcióval. Ennek eredményeként a támadók sikeresen kompromittálhatják a felhasználó eszközét távoli kód futtatásával.

Az áldozat és a rosszindulatú tároló interakcióját szemléltető diagram, beleértve a klónozást, az almodulok lehívását és a nem kívánt szkriptek végrehajtását.
A támadás menetét bemutató diagram

A Git sebezhetőség kihasználásának szimulálása

A korábbi megállapítások alapján OPSWAT munkatársai létrehoztak egy fő adattárat és egy kampót egy rosszindulatú adattár létrehozásának szimulálására:

  1. Kezdetben ajánlott úgy beállítani a Gitet, hogy mindig engedélyezze a protocol.file-t, engedélyezze a core.symlinkeket, és az alapértelmezett ág nevet main-ra állítsa be (a figyelmeztető üzenet elkerülése érdekében). 
Egy terminálrészlet, amely parancsokat mutat be a Git beállításainak globális konfigurálásához a symlinkek kezeléséhez és az alapértelmezett ág beállításához.
  1. Egy rosszindulatú post-checkout hook script kerül a hooks könyvtárba. Annak biztosítása érdekében, hogy a post-checkout szkriptet a felhasználó eszközén végre lehessen hajtani, a bash szkript, amely létrehozza ezt a horgot, a chmod +x fast/hooks/post-checkout parancsot tartalmazza. 
Egy terminálszkript, amely egy rosszindulatú kódolt Python parancsot jelenít meg egy Git post-checkout hookba ágyazva
  1. Egy szimbolikus link jön létre a fő adattárban, amely a .git könyvtárra mutat.
Egy terminálszkript, amely bemutatja a módosítások bevitelének folyamatát a segédprogramok és egy .git fájl beillesztéséhez a tárolóban.
Képernyőkép egy tároló könyvtár listájáról, ahol a Git felületen megjelenített mappák, mint például src, libs, és .gitmodules mappák láthatók.
A sebezhető fő adattár
Pillanatkép egy Git-tár felületéről, amely egy könyvtárat mutat egy post-checkout horoggal

A /hooks mappa egy post-checkout horoggal

Képernyőkép, amely a Git-tárhely klónozásához szükséges terminálparancsokat és egy PowerShell munkamenetet mutat hálózati kapcsolat létrehozásával.
Ha a felhasználó klónozza ezt a rosszindulatú tárolót, a támadó veszélyeztetheti az áldozat eszközét. 

Helyreállítás

A fenyegetés semlegesítése érdekében a felhasználók eltávolíthatják a Git-et, vagy alkalmazhatják a legújabb biztonsági javítást. Alternatív megoldásként egy olyan megoldás, mint a MetaDefender Endpoint azonnal értesíti a felhasználót, és intuitív felületén keresztül megjeleníti a környezetben található összes ismert CVE-t. A MetaDefender Endpoint a több mint 3 millió adatpontot és több mint 30 000 társított CVE-t tartalmazó képességeit kihasználva képes felismerni és mérsékelni a legújabb CVE-ket a súlyossági információkkal együtt. Bármelyik ellenintézkedés végrehajtásával a CVE teljes mértékben elszigetelhetővé válik, megszüntetve a pusztító kibertámadás kockázatát.

Készen áll arra, hogy a MetaDefender Endpoint a kiberbiztonsági stratégiája első vonalába helyezze?


Maradjon naprakész az OPSWAT oldalon!

Iratkozzon fel még ma, hogy értesüljön a vállalat legfrissebb híreiről, történetekről, eseményinformációkról és sok másról.