Delen via


Deserialisatierisico's bij gebruik van BinaryFormatter en gerelateerde typen

Dit artikel is van toepassing op de volgende typen:

Dit artikel is van toepassing op de volgende .NET-implementaties:

  • .NET Framework alle versies
  • .NET Core 2.1 - 3.1
  • .NET 5 en hoger

Waarschuwing

Het BinaryFormatter type is gevaarlijk en wordt niet aanbevolen voor gegevensverwerking. Toepassingen moeten zo snel mogelijk stoppen met gebruik BinaryFormatter , zelfs als ze geloven dat de gegevens die ze verwerken betrouwbaar zijn. BinaryFormatter is onveilig en kan niet veilig worden gemaakt.

Deserialisatieproblemen

Deserialisatieproblemen zijn een bedreigingscategorie waarbij nettoladingen van aanvragen onveilig worden verwerkt. Een aanvaller die deze beveiligingsproblemen tegen een app gebruikt, kan denial of service (DoS), openbaarmaking van informatie of uitvoering van externe code in de doel-app veroorzaken. Deze risicocategorie maakt de OWASP Top 10 consistent. Doelen zijn onder andere apps die zijn geschreven in verschillende talen, waaronder C/C++, Java en C#.

In .NET is het grootste risicodoel apps die gebruikmaken van het BinaryFormatter type om gegevens te deserialiseren. BinaryFormatter wordt veel gebruikt in het hele .NET-ecosysteem vanwege de kracht en het gebruiksgemak ervan. Dezelfde kracht biedt aanvallers echter de mogelijkheid om de controlestroom binnen de doel-app te beïnvloeden. Geslaagde aanvallen kunnen ertoe leiden dat de aanvaller code kan uitvoeren binnen de context van het doelproces.

Als eenvoudigere analogie wordt ervan uitgegaan dat het aanroepen BinaryFormatter.Deserialize van een nettolading het equivalent is van het interpreteren van die nettolading als zelfstandig uitvoerbaar bestand en het starten ervan.

Beveiligingsproblemen met BinaryFormatter

Waarschuwing

De BinaryFormatter.Deserialize methode is nooit veilig wanneer deze wordt gebruikt met niet-vertrouwde invoer. We raden consumenten ten zeerste aan een van de alternatieven te gebruiken die verderop in dit artikel worden beschreven.

BinaryFormatter is geïmplementeerd voordat beveiligingsproblemen met deserialisatie een goed begrepen bedreigingscategorie waren. Als gevolg hiervan volgt de code geen moderne aanbevolen procedures. De Deserialize methode kan worden gebruikt als vector voor aanvallers om DoS-aanvallen uit te voeren tegen het gebruik van apps. Deze aanvallen kunnen ertoe leiden dat de app niet meer reageert of leidt tot onverwachte procesafbreking. Deze aanvalscategorie kan niet worden verzacht met een SerializationBinder of andere BinaryFormatter configuratieswitch. .NET beschouwt dit gedrag als standaard en geeft geen code-update uit om het gedrag te wijzigen.

BinaryFormatter.Deserialize kan kwetsbaar zijn voor andere aanvalscategorieën, zoals openbaarmaking van informatie of uitvoering van externe code. Het gebruik van functies zoals een aangepaste SerializationBinder functie is mogelijk onvoldoende om deze risico's correct te beperken. De mogelijkheid bestaat dat er een nieuw beveiligingsprobleem wordt gedetecteerd waarvoor .NET geen beveiligingsupdate kan publiceren. Consumenten moeten hun individuele scenario's beoordelen en hun potentiële blootstelling aan deze risico's overwegen.

We raden consumenten aan BinaryFormatter afzonderlijke risicobeoordelingen uit te voeren op hun apps. Het is de enige verantwoordelijkheid van de consument om te bepalen of deze moet worden gebruikt BinaryFormatter. Als u overweegt deze te gebruiken, moet u de gevolgen van beveiliging, technische, reputatie, juridische en regelgeving beoordelen.

Voorkeursalternatieven

.NET biedt verschillende in-box serializers waarmee niet-vertrouwde gegevens veilig kunnen worden verwerkt:

Gevaarlijke alternatieven

Vermijd de volgende serializers:

De voorgaande serializers voeren allemaal onbeperkte polymorfe deserialisatie uit en zijn gevaarlijk, net als BinaryFormatter.

De risico's van het aannemen van gegevens die betrouwbaar zijn

Een app-ontwikkelaar kan vaak geloven dat ze alleen vertrouwde invoer verwerken. De veilige invoercase is in zeldzame gevallen waar. Maar het is veel gebruikelijker dat een nettolading een vertrouwensgrens overschrijdt zonder dat de ontwikkelaar dit realiseert.

Overweeg een on-premises server waarbij werknemers een bureaubladclient van hun werkstations gebruiken om te communiceren met de service. Dit scenario kan naïef worden gezien als een 'veilige' installatie waarbij het gebruik BinaryFormatter acceptabel is. Dit scenario biedt echter een vector voor malware die toegang krijgt tot de machine van één werknemer om zich in de hele onderneming te kunnen verspreiden. Deze malware kan gebruikmaken van het gebruik van BinaryFormatter de onderneming om lateraal van het werkstation van de werknemer naar de back-endserver te gaan. Vervolgens kunnen de gevoelige gegevens van het bedrijf worden geëxfiltreerd. Dergelijke gegevens kunnen handelsgeheimen of klantgegevens omvatten.

Overweeg ook een app die wordt gebruikt BinaryFormatter om de opslagstatus te behouden. Dit lijkt in eerste instantie een veilig scenario te zijn, omdat het lezen en schrijven van gegevens op uw eigen harde schijf een kleine bedreiging vormt. Het delen van documenten via e-mail of internet is echter gebruikelijk en de meeste eindgebruikers zouden het openen van deze gedownloade bestanden niet als riskant gedrag ervaren.

Dit scenario kan worden gebruikt voor kwaadwillend effect. Als de app een game is, kunnen gebruikers die bestanden delen, zichzelf onbewust risico lopen. De ontwikkelaars zelf kunnen ook worden gericht. De aanvaller kan de technische ondersteuning van de ontwikkelaars e-mailen, een schadelijk gegevensbestand toevoegen en het ondersteuningspersoneel vragen het te openen. Dit soort aanvallen kan de aanvaller een voet in de onderneming geven.

Een ander scenario is waarin het gegevensbestand wordt opgeslagen in cloudopslag en automatisch wordt gesynchroniseerd tussen de computers van de gebruiker. Een aanvaller die toegang kan krijgen tot het cloudopslagaccount kan het gegevensbestand vergiftigen. Dit gegevensbestand wordt automatisch gesynchroniseerd met de computers van de gebruiker. De volgende keer dat de gebruiker het gegevensbestand opent, wordt de nettolading van de aanvaller uitgevoerd. De aanvaller kan dus inbreuk maken op een cloudopslagaccount om volledige machtigingen voor het uitvoeren van code te verkrijgen.

Overweeg een app die wordt verplaatst van een desktop-installatiemodel naar een cloud-first model. Dit scenario omvat apps die overstappen van een desktop-app of uitgebreid clientmodel naar een webmodel. Bedreigingsmodellen die zijn getekend voor de desktop-app, zijn niet noodzakelijkerwijs van toepassing op de cloudservice. Het bedreigingsmodel voor de bureaublad-app kan een bepaalde bedreiging negeren als 'niet interessant voor de client om zichzelf aan te vallen'. Maar diezelfde bedreiging kan interessant worden wanneer deze een externe gebruiker (de client) beschouwt die de cloudservice zelf aanvalt.

Notitie

In het algemeen is het de bedoeling van serialisatie om een object naar of uit een app te verzenden. Een bedreigingsmodelleringsoefening markeert dit soort gegevensoverdracht bijna altijd als het overschrijden van een vertrouwensgrens.

Zie ook