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 SerializationBinder
BinaryFormatter
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:
- XmlSerializer és DataContractSerializer az objektumdiagramok XML-be és xml-ből történő szerializálásához. Ne tévessze össze
DataContractSerializer
a .NetDataContractSerializer - BinaryReader xml és BinaryWriter JSON esetén.
- Az System.Text.Json objektumdiagramok JSON-ba szerializálására alkalmas API-k.
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
- Bináris szerializálás
- YSoSerial.Net, hogy a támadók hogyan támadják meg az alkalmazásokat.
BinaryFormatter
- A deszerializálási biztonsági rések általános háttere:
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: