Rizika deserializace při použití BinaryFormatter a souvisejících typů

Tento článek se vztahuje na následující typy:

Tento článek se vztahuje na následující implementace .NET:

  • .NET Framework – všechny verze
  • .NET Core 2.1 – 3.1
  • .NET 5 a novější

Upozorňující

Typ BinaryFormatter je nebezpečný a nedoporučuje se pro zpracování dat. Aplikace by se měly co nejdříve přestat používat BinaryFormatter , i když se domnívají, že data, která zpracovávají, jsou důvěryhodná. BinaryFormatter je nezabezpečený a nedá se zabezpečit.

Ohrožení zabezpečení deserializace

Ohrožení zabezpečení deserializace jsou kategorie hrozeb, ve které jsou datové části požadavků zpracovávány nezabezpečeně. Útočník, který tyto chyby zabezpečení úspěšně využívá proti aplikaci, může způsobit odepření služby (DoS), zpřístupnění informací nebo vzdálené spuštění kódu v cílové aplikaci. Tato riziková kategorie konzistentně činí OWASP Top 10. Cíle zahrnují aplikace napsané v různých jazycích, včetně C/C++, Javy a C#.

V .NET je největší cíl rizika aplikace, které používají BinaryFormatter typ k deserializaci dat. BinaryFormatter je široce používán v celém ekosystému .NET kvůli své síle a snadnému použití. Stejná síla ale útočníkům dává možnost ovlivnit tok řízení v rámci cílové aplikace. Úspěšné útoky můžou vést k tomu, že útočník dokáže spustit kód v kontextu cílového procesu.

Jako jednodušší analogie předpokládejme, že volání BinaryFormatter.Deserialize přes datovou část je ekvivalentem interpretace této datové části jako samostatného spustitelného souboru a jeho spuštění.

Ohrožení zabezpečení BinaryFormatter

Upozorňující

Metoda BinaryFormatter.Deserialize není nikdy bezpečná při použití s nedůvěryhodným vstupem. Důrazně doporučujeme, aby spotřebitelé místo toho zvažovali použití jedné z alternativ popsaných dále v tomto článku.

BinaryFormatter byla implementována před ohroženími zabezpečení deserializace byla dobře pochopená kategorie hrozeb. V důsledku toho kód nedodržuje moderní osvědčené postupy. Metodu Deserialize lze použít jako vektor pro útočníky k provádění útoků DoS proti využívání aplikací. Tyto útoky můžou způsobit, že aplikace nereaguje nebo způsobí neočekávané ukončení procesu. Tuto kategorii útoku nelze zmírnit pomocí SerializationBinder přepínače konfigurace ani jiného BinaryFormatter přepínače konfigurace. .NET považuje toto chování podle návrhu a nevydá aktualizaci kódu pro úpravu chování.

BinaryFormatter.Deserialize může být ohrožena jinými kategoriemi útoků, jako je zpřístupnění informací nebo vzdálené spuštění kódu. Používání funkcí, jako je vlastní SerializationBinder , nemusí být pro správné zmírnění těchto rizik nedostatečné. Existuje možnost, že se zjistí nová ohrožení zabezpečení, pro které .NET nemůže prakticky publikovat aktualizaci zabezpečení. Spotřebitelé by měli posoudit jednotlivé scénáře a zvážit jejich potenciální vystavení těmto rizikům.

Doporučujeme, aby BinaryFormatter spotřebitelé prováděli individuální posouzení rizik ve svých aplikacích. Je výhradní odpovědností spotřebitele určit, zda se má využívat BinaryFormatter. Pokud uvažujete o jeho použití, měli byste vyhodnotit bezpečnostní, technické, dobré jméno, právní a regulační důsledky.

Upřednostňované alternativy

.NET nabízí několik in-box serializátorů, které mohou bezpečně zpracovávat nedůvěryhodná data:

Nebezpečné alternativy

Vyhněte se následujícím serializátorům:

Předchozí serializátory všechny provádějí neomezené polymorfní deserializace a jsou nebezpečné, stejně jako BinaryFormatter.

Rizika za předpokladu, že data budou důvěryhodná

Vývojář aplikace se často může domnívat, že zpracovává jenom důvěryhodný vstup. Případ bezpečného vstupu je pravdivý v některých výjimečných případech. Je ale mnohem častější, že datová část překročí hranici důvěryhodnosti, aniž by si ji vývojář uvědomil.

Vezměte v úvahu místní server , kde zaměstnanci používají desktopového klienta ze svých pracovních stanic k interakci se službou. Tento scénář se může zdát naïvely jako "bezpečné" nastavení, kde je BinaryFormatter použití přijatelné. Tento scénář ale představuje vektor malwaru, který získá přístup k počítači jednoho zaměstnance, aby se mohl rozšířit v rámci celého podniku. Tento malware může využít podnikové použití BinaryFormatter k pozdějšímu přesunu z pracovní stanice zaměstnance na back-endový server. Pak může exfiltrovat citlivá data společnosti. Taková data můžou zahrnovat obchodní tajemství nebo zákaznická data.

Zvažte také aplikaci, která používá BinaryFormatter k zachování stavu uložení. Může se zdát, že jde o bezpečný scénář, protože čtení a zápis dat na vašem vlastním pevném disku představuje menší hrozbu. Sdílení dokumentů přes e-mail nebo internet je ale běžné a většina koncových uživatelů by nevnímala otevírání těchto stažených souborů jako rizikového chování.

Tento scénář lze využít k nefaktnímu efektu. Pokud je aplikace hra, uživatelé, kteří sdílejí soubory, se neúmyslně riskují. Sami vývojáři můžou být také cílem. Útočník může poslat technickou podporu vývojářům e-mailem, připojit škodlivý datový soubor a požádat pracovníky podpory, aby ho otevřeli. Tento druh útoku by mohl útočníkovi poskytnout stopu v podniku.

Dalším scénářem je, kdy je datový soubor uložený v cloudovém úložišti a automaticky se synchronizuje mezi počítači uživatele. Útočník, který může získat přístup k účtu cloudového úložiště, může datový soubor otrávit. Tento datový soubor se automaticky synchronizuje s počítači uživatele. Při příštím otevření datového souboru se spustí datová část útočníka. Útočník tak může k získání úplných oprávnění ke spuštění kódu využít ohrožení zabezpečení účtu cloudového úložiště.

Představte si aplikaci, která přechází z modelu instalace na stolní počítač na cloudový první model. Tento scénář zahrnuje aplikace, které se přesouvají z desktopové aplikace nebo bohatého klientského modelu na webový model. Všechny modely hrozeb vytažené pro desktopovou aplikaci nemusí nutně platit pro cloudovou službu. Model hrozeb pro desktopovou aplikaci může zavřít danou hrozbu jako "není zajímavé pro klienta, aby se napadal sám". Stejná hrozba ale může být zajímavá, když se domnívá, že vzdálený uživatel (klient) napadá samotnou cloudovou službu.

Poznámka:

Obecně platí, že záměr serializace je přenést objekt do aplikace nebo z aplikace. Cvičení modelování hrozeb téměř vždy označuje tento druh přenosu dat jako překročení hranice důvěryhodnosti.

Viz také