Platformkód integritása
A Microsoft Azure-hoz hasonló összetett rendszerek működtetésének jelentős kihívása annak biztosítása, hogy csak engedélyezett szoftverek futnak a rendszerben. A jogosulatlan szoftverek számos kockázatot jelentenek minden vállalkozás számára:
- Biztonsági kockázatok, például dedikált támadási eszközök, egyéni kártevők és ismert biztonsági résekkel rendelkező harmadik féltől származó szoftverek
- Megfelelőségi kockázatok, ha a jóváhagyott változáskezelési folyamatot nem használják új szoftverek behozására
- A külső fejlesztésű szoftverek minőségkockázata, amely nem feltétlenül felel meg az üzlet működési követelményeinek
Az Azure-ban ugyanazzal a kihívással és jelentős összetettséggel szembesülünk. Több ezer, mérnökök által fejlesztett és karbantartott szoftvert futtató kiszolgálóval rendelkezünk. Ez egy nagy támadási felületet jelenít meg, amelyet nem lehet egyedül üzleti folyamatokon keresztül felügyelni.
Engedélyezési kapu hozzáadása
Az Azure egy gazdag mérnöki folyamatot használ, amely kapukat implementál az üzembe helyezhető szoftverek biztonságára, megfelelőségére és minőségére. Ez a folyamat magában foglalja a forráskód hozzáférés-vezérlését, a társkódok felülvizsgálatát, a biztonsági rések statikus elemzését, a Microsoft biztonsági fejlesztési életciklusának (SDL) követését, valamint a funkcionális és minőségi tesztelést. Garantálnunk kell, hogy az üzembe helyezendő szoftver végigfolyt ezen a folyamaton. A kódintegritás segít elérni ezt a garanciát.
Kódintegritás engedélyezési kapuként
A kódintegritás egy kernelszintű szolgáltatás, amely a Windows Server 2016-tól vált elérhetővé. A kódintegritás szigorú végrehajtási vezérlési szabályzatot alkalmazhat az illesztőprogram vagy egy dinamikusan csatolt kódtár (DLL) betöltésekor, végrehajtható bináris fájl végrehajtásakor vagy parancsfájl futtatásakor. Hasonló rendszerek, például a DM-Verity linuxos rendszerekhez léteznek. A kódintegritási szabályzatok olyan engedélyezési jelzőkből állnak, amelyek kódaláíró tanúsítványokból vagy SHA256-fájlkivonatokból állnak, amelyeket a kernel a bináris vagy szkriptek betöltése vagy végrehajtása előtt egyezik meg.
A kódintegritás lehetővé teszi a rendszergazda számára, hogy olyan szabályzatot definiáljon, amely csak olyan bináris fájlokat és szkripteket engedélyez, amelyeket adott tanúsítványok írtak alá, vagy amelyek megfelelnek a megadott SHA256-kivonatoknak. A kernel úgy kényszeríti ki ezt a szabályzatot, hogy blokkolja a beállított szabályzatnak nem megfelelő összes végrehajtást.
A kódintegritási szabályzatokkal az a gond, hogy ha a szabályzat nem teljesen helyes, blokkolhatja a kritikus fontosságú szoftvereket az éles környezetben, és üzemkimaradást okozhat. Ennek az aggodalomnak a fényében felmerülhet a kérdés, hogy miért nem elegendő biztonsági monitorozással észlelni, hogy mikor hajtottak végre jogosulatlan szoftvereket. A kódintegritás olyan naplózási móddal rendelkezik, amely a végrehajtás megakadályozása helyett riasztást küld jogosulatlan szoftverek futtatásakor. A riasztások természetesen sok értéket adhatnak a megfelelőségi kockázatok kezelésében, de az olyan biztonsági kockázatok esetében, mint a zsarolóprogramok vagy az egyéni kártevők, a válasz néhány másodperccel történő késleltetése a védelem és a támadók közötti különbség, amely állandó lábra áll a flottában. Az Azure-ban jelentős befektetést hajtottunk végre a kódintegritási kockázat kezelése érdekében, amely hozzájárul egy ügyfél kimaradásához.
Létrehozási folyamat
Ahogy fentebb említettük, az Azure buildrendszer számos teszttel rendelkezik annak biztosítása érdekében, hogy a szoftvermódosítások biztonságosak és megfelelőek legyenek. Miután egy build az ellenőrzésen keresztül haladt, a buildrendszer egy Azure-buildtanúsítvánnyal aláírja azt. A tanúsítvány azt jelzi, hogy a build átment a teljes változáskezelési folyamaton. Az utolsó teszt, amelyen a build végighalad, kód aláírás-ellenőrzésnek (CSV) nevezzük. A CSV megerősíti, hogy az újonnan létrehozott bináris fájlok megfelelnek a kódintegritási szabályzatnak, mielőtt üzembe helyeznénk az éles környezetben. Ez nagy bizalmat ad nekünk, hogy nem okozunk olyan ügyfelet, aki a helytelenül aláírt bináris fájlok miatt kimaradásba ütközik. Ha a CSV hibát talál, az összeállítási törések és a megfelelő mérnökök lapra kerülnek a probléma kivizsgálásához és kijavításához.
Biztonság az üzembe helyezés során
Annak ellenére, hogy minden buildhez CSV-t végzünk, még mindig fennáll annak az esélye, hogy az éles környezetben valamilyen változás vagy inkonzisztencia kódintegritással kapcsolatos kimaradáshoz vezethet. Előfordulhat például, hogy egy gép a kódintegritási szabályzat egy régi verzióját futtatja, vagy nem kifogástalan állapotban van, amely hamis pozitív értékeket eredményez a kódintegritásban. (Azure-skálán mindent láttunk.) Ezért továbbra is védelmet kell nyújtanunk a kimaradás kockázatával szemben az üzembe helyezés során.
Az Azure-ban az összes módosítást több fázison keresztül kell üzembe helyezni. Ezek közül az első a belső Azure-tesztelési példányok. A következő szakasz csak más Microsoft-termékcsapatok kiszolgálására szolgál. Az utolsó szakasz harmadik féltől származó ügyfeleket szolgál ki. A módosítás üzembe helyezésekor az egyes szakaszokra lép, és szünetelteti a szakasz állapotának mérését. Ha úgy találja, hogy a módosításnak nincs negatív hatása, akkor a következő szakaszba kerül. Ha egy kódintegritási szabályzatot hibásan módosítunk, a rendszer észleli a módosítást a szakaszos üzembe helyezés során, és visszagördül.
Incidenskezelés
Még ebben a rétegzett védelemben is előfordulhat, hogy a flotta egyes kiszolgálói blokkolhatják a megfelelően engedélyezett szoftvereket, és problémát okozhatnak az ügyfeleknek, ami az egyik legrosszabb esetünk. Az utolsó védelmi rétegünk az emberi vizsgálat. Minden alkalommal, amikor a kódintegritás blokkolja a fájlokat, riasztást küld az ügyeleti mérnököknek a vizsgálathoz. A riasztás lehetővé teszi a biztonsági vizsgálatok indítását és a beavatkozást, függetlenül attól, hogy a probléma valós támadás, hamis pozitív vagy más, az ügyfeleket érintő helyzet jelzése. Ez minimálisra csökkenti a kódintegritással kapcsolatos problémák elhárításához szükséges időt.
Következő lépések
A platform integritásának és biztonságának biztosításához a következő témakörben talál további információt: