Megosztás a következőn keresztül:


Deszerializálási kockázatok a BinaryFormatter és a kapcsolódó típusok használatakor

Ez a cikk a következő típusokra vonatkozik:

Ez a cikk a következő .NET-implementációkra vonatkozik:

  • .NET-keretrendszer minden verzió
  • .NET Core 2.1 – 3.1
  • .NET 5 és újabb verziók

Figyelmeztetés

Ez BinaryFormatter a típus veszélyes, és nem ajánlott adatfeldolgozáshoz. Az alkalmazásoknak a lehető leghamarabb le kell állniuk a használatukról BinaryFormatter , még akkor is, ha úgy vélik, hogy az általuk kezelt adatok megbízhatóak. BinaryFormatter nem biztonságos, és nem lehet biztonságossá tenni.

Deszerializálási biztonsági rések

A deszerializálási biztonsági rések olyan fenyegetéskategóriák, amelyekben a kérések hasznos adatai nem biztonságosan dolgozhatók fel. Azok a támadók, akik sikeresen kihasználják ezeket a biztonsági réseket egy alkalmazással szemben, szolgáltatásmegtagadást (DoS), információfeltárást vagy távoli kódvégrehajtást okozhatnak a célalkalmazáson belül. Ez a kockázati kategória következetesen az OWASP 10 legjobbja. A célok közé tartoznak a különböző nyelveken írt alkalmazások, például a C/C++, a Java és a C#.

A .NET-ben a legnagyobb kockázati cél az adatok deszerializálására használt BinaryFormatter alkalmazások. BinaryFormatter a .NET-ökoszisztémában széles körben használják a hatalmuk és a könnyű használatuk miatt. Ugyanez a teljesítmény azonban lehetővé teszi a támadók számára, hogy befolyásolják a célalkalmazáson belüli vezérlési folyamatot. A sikeres támadások azt eredményezhetik, hogy a támadó a célfolyamat kontextusában futtathat kódot.

Egyszerűbb analógiaként tegyük fel, hogy BinaryFormatter.Deserialize a hasznos adatok meghívása egyenértékű azzal, ha a hasznos adatokat önálló végrehajthatóként értelmezi és elindítja.

BinaryFormatter biztonsági rések

Figyelmeztetés

A BinaryFormatter.Deserialize módszer soha nem biztonságos, ha nem megbízható bemenettel használják. Határozottan javasoljuk, hogy a fogyasztók inkább a cikk későbbi részében ismertetett alternatívák egyikét használják.

BinaryFormatter a deszerializálási biztonsági rések egy jól ismert fenyegetéskategóriát jelentettek. Ennek eredményeképpen a kód nem követi a modern ajánlott eljárásokat. Ez a Deserialize módszer vektorként használható a támadók számára doS-támadások végrehajtására az alkalmazások használata ellen. Ezek a támadások nem válaszolnak az alkalmazásra, vagy váratlan folyamatleállást eredményezhetnek. Ez a támadási kategória nem enyhíthető más SerializationBinderBinaryFormatter konfigurációs kapcsolóval. A .NET úgy véli, hogy ez a viselkedés terv szerint működik, és nem ad ki kódfrissítést a viselkedés módosításához.

BinaryFormatter.Deserialize sebezhetők lehetnek más támadási kategóriák, például az információk felfedése vagy a távoli kódfuttatás ellen. Előfordulhat, hogy az egyéni SerializationBinder funkciók használata nem elegendő ezeknek a kockázatoknak a megfelelő mérsékléséhez. Fennáll annak a lehetősége, hogy egy új biztonsági rést fedeznek fel, amelyhez a .NET gyakorlatilag nem tud biztonsági frissítést közzétenni. A fogyasztóknak fel kell mérniük az egyéni forgatókönyveiket, és figyelembe kell venniük az ilyen kockázatoknak való kitettségüket.

Javasoljuk, hogy a BinaryFormatter felhasználók egyéni kockázatértékeléseket végezzenek az alkalmazásaikon. A fogyasztó kizárólagos felelőssége annak meghatározása, hogy használja-e BinaryFormatter. Ha a használatát fontolgatja, érdemes kockázattal felmérni a biztonsági, műszaki, hírnevét, jogi és szabályozási következményeit.

Előnyben részesített alternatívák

A .NET számos beépített szerializálót kínál, amelyek biztonságosan kezelhetik a nem megbízható adatokat:

Veszélyes alternatívák

Kerülje a következő szerializálókat:

Az előző szerializálók mind korlátlan polimorf deszerializálást végeznek, és veszélyesek, ugyanúgy, mint BinaryFormatter.

Az adatok megbízhatónak tételének kockázata

Az alkalmazásfejlesztők gyakran úgy vélik, hogy csak megbízható bemeneteket dolgoznak fel. A biztonságos bemeneti eset bizonyos ritka esetekben igaz. Sokkal gyakoribb azonban, hogy egy hasznos adat átlép egy megbízhatósági határt anélkül, hogy a fejlesztő felismerte volna.

Vegyünk egy helyszíni kiszolgálót , ahol az alkalmazottak asztali ügyfelet használnak a munkaállomásukról a szolgáltatás használatához. Ez a forgatókönyv naiv módon "biztonságos" beállításnak tekinthető, ahol a használat BinaryFormatter elfogadható. Ez a forgatókönyv azonban egy olyan kártevővektort mutat be, amely egyetlen alkalmazott gépéhez fér hozzá, hogy a vállalat egész területén el tudjon terjedni. Ez a kártevő kihasználhatja a vállalat azon használatát BinaryFormatter , hogy oldalirányban helyezze át az alkalmazott munkaállomását a háttérkiszolgálóra. Ezután kiszűrheti a vállalat bizalmas adatait. Ezek az adatok üzleti titkos kulcsokat vagy ügyféladatokat tartalmazhatnak.

Érdemes lehet olyan alkalmazást is használni, amely a mentési állapot megőrzésére használja BinaryFormatter . Ez elsőre biztonságos forgatókönyvnek tűnhet, mivel az adatok olvasása és írása a saját merevlemezén kisebb fenyegetést jelent. A dokumentumok e-mailben vagy interneten való megosztása azonban gyakori, és a végfelhasználók többsége nem tekinti kockázatos viselkedésnek a letöltött fájlok megnyitását.

Ez a forgatókönyv hasznos lehet az elkeskenyedő hatás érdekében. Ha az alkalmazás egy játék, a fájlokat megosztó felhasználók véletlenül veszélybe kerülnek. Maguk a fejlesztők is célzottak lehetnek. A támadó e-mailben elküldheti a fejlesztők technikai támogatását, rosszindulatú adatfájlt csatolhat, és megkérheti a támogatási személyzetet, hogy nyissa meg. Ez a fajta támadás láblécet adhat a támadónak a vállalatban.

Egy másik forgatókönyv az, amikor az adatfájl a felhőbeli tárolóban van tárolva, és automatikusan szinkronizálódik a felhasználó gépei között. Egy támadó, aki hozzáfér a felhőbeli tárfiókhoz, megmérgezheti az adatfájlt. Ez az adatfájl automatikusan szinkronizálódik a felhasználó gépével. Amikor a felhasználó legközelebb megnyitja az adatfájlt, a támadó hasznos adatai futnak. Így a támadó a felhőbeli tárfiókok feltörése révén teljes kódvégrehajtási engedélyeket szerezhet.

Fontolja meg azt az alkalmazást, amely az asztali telepítésű modellről a felhőbeli első modellre kerül. Ez a forgatókönyv olyan alkalmazásokat is tartalmaz, amelyek asztali alkalmazásból vagy gazdag ügyfélmodellből webes modellbe kerülnek. Az asztali alkalmazáshoz készült fenyegetésmodellek nem feltétlenül alkalmazhatók a felhőalapú szolgáltatásra. Az asztali alkalmazás fenyegetésmodellje elvethet egy adott fenyegetést, mivel "nem érdekes, hogy az ügyfél megtámadja magát". Ugyanez a fenyegetés azonban akkor válhat érdekessé, ha úgy véli, hogy egy távoli felhasználó (az ügyfél) magát a felhőszolgáltatást támadja.

Feljegyzés

Általánosságban elmondható, hogy a szerializálás célja egy objektum egy alkalmazásba vagy az alkalmazásból való továbbítása. A fenyegetésmodellezési gyakorlat szinte mindig egy megbízhatósági határ átlépéseként jelöli meg az ilyen típusú adatátvitelt.

Lásd még