Denial of Service
Denial of Service treedt op wanneer een systeem op een zodanige manier wordt overweldigd dat berichten niet kunnen worden verwerkt of als ze zeer langzaam worden verwerkt.
Overtollig geheugenverbruik
Er kan een probleem optreden bij het lezen van een XML-document met een groot aantal unieke lokale namen, naamruimten of voorvoegsels. Als u een klasse gebruikt die is afgeleid van XmlReader, en u de LocalNameeigenschap , Prefix of NamespaceURI eigenschap voor elk item aanroept, wordt de geretourneerde tekenreeks toegevoegd aan een NameTable. De verzameling die door de NameTable verzameling wordt bewaard, neemt nooit in grootte af, waardoor een virtueel 'geheugenlek' van de tekenreeksgrepen ontstaat.
Oplossingen zijn onder andere:
Afgeleid van de NameTable klasse en een maximumgroottequotum afdwingen. (U kunt het gebruik van een NameTable of de schakeloptie NameTable niet voorkomen wanneer deze vol is.)
Vermijd het gebruik van de vermelde eigenschappen en gebruik in plaats daarvan waar mogelijk de MoveToAttribute methode met de IsStartElement methode. Deze methoden retourneren geen tekenreeksen en voorkomen zo het probleem van het overvullen van de NameTable verzameling.
Kwaadwillende client verzendt overmatige licentieaanvragen naar service
Als een kwaadwillende client een service bebomt met overmatige licentieaanvragen, kan dit ertoe leiden dat de server overmatig geheugen gebruikt.
Risicobeperking: Gebruik de volgende eigenschappen van de LocalServiceSecuritySettings klasse:
MaxCachedCookies: bepaalt het maximum aantal tijdgebonden
SecurityContextToken
s dat de server naSPNego
ofSSL
onderhandelings in de cache opgeslagen.IssuedCookieLifetime: bepaalt de levensduur van de
SecurityContextTokens
server die aan het volgenSPNego
ofSSL
onderhandelen is. De server slaat de s gedurende deze periode in deSecurityContextToken
cache op.MaxPendingSessions: bepaalt het maximum aantal beveiligde gesprekken dat is ingesteld op de server, maar waarvoor geen toepassingsberichten zijn verwerkt. Dit quotum voorkomt dat clients beveiligde gesprekken bij de service tot stand brengen, waardoor de service de status per client onderhoudt, maar nooit gebruikt.
InactivityTimeout: bepaalt de maximale tijd dat de service een veilig gesprek actief houdt zonder dat er een toepassingsbericht van de client voor het gesprek wordt ontvangen. Dit quotum voorkomt dat clients beveiligde gesprekken bij de service tot stand brengen, waardoor de service de status per client onderhoudt, maar nooit gebruikt.
WSDualHttpBinding of dubbele aangepaste bindingen vereisen clientverificatie
Standaard is beveiliging WSDualHttpBinding ingeschakeld. Het is echter mogelijk dat als de clientverificatie is uitgeschakeld door de ClientCredentialType eigenschap in te Nonestellen op , een kwaadwillende gebruiker een denial of service-aanval op een derde service kan veroorzaken. Dit kan gebeuren omdat een kwaadwillende client de service kan leiden om een stroom berichten naar een derde service te verzenden.
U kunt dit verhelpen door de eigenschap niet in te stellen op None
. Houd ook rekening met deze mogelijkheid bij het maken van een aangepaste binding met een dubbel berichtpatroon.
Controlegebeurtenislogboek kan worden ingevuld
Als een kwaadwillende gebruiker begrijpt dat controle is ingeschakeld, kan die aanvaller ongeldige berichten verzenden waardoor controlevermeldingen worden geschreven. Als het auditlogboek op deze manier wordt ingevuld, mislukt het controlesysteem.
Als u dit wilt verhelpen, stelt u de SuppressAuditFailure eigenschap true
in op en gebruikt u de eigenschappen van de Logboeken om het controlegedrag te beheren. Zie Logboeken voor meer informatie over het gebruik van de Logboeken om gebeurtenislogboeken weer te geven en te beheren. Zie Controle voor meer informatie.
Ongeldige implementaties van IAuthorizationPolicy kunnen ertoe leiden dat de service niet meer reageert
Het aanroepen van de Evaluate methode voor een foutieve implementatie van de interface kan ertoe leiden dat de IAuthorizationPolicy service niet meer reageert.
Risicobeperking: gebruik alleen vertrouwde code. Gebruik dus alleen code die u hebt geschreven en getest, of die afkomstig is van een vertrouwde provider. Sta niet toe dat niet-vertrouwde extensies niet IAuthorizationPolicy zonder rekening worden gehouden met uw code. Dit geldt voor alle extensies die worden gebruikt in een service-implementatie. WCF maakt geen onderscheid tussen toepassingscode en refererende code die is aangesloten met behulp van uitbreidbaarheidspunten.
De maximale grootte van het Kerberos-token moet mogelijk worden gewijzigd
Als een client tot een groot aantal groepen behoort (ongeveer 900, hoewel het werkelijke aantal afhankelijk van de groepen varieert), kan er een probleem optreden wanneer het blok van een berichtkop groter is dan 64 kilobytes. In dat geval kunt u de maximale grootte van het Kerberos-token verhogen. Mogelijk moet u ook de maximale WCF-berichtgrootte verhogen voor het grotere Kerberos-token.
Automatische inschrijving resulteert in meerdere certificaten met dezelfde onderwerpnaam voor machine
Automatische inschrijving is de mogelijkheid van Windows Server 2003 om gebruikers en computers automatisch in te schrijven voor certificaten. Wanneer een computer zich in een domein bevindt waarvoor de functie is ingeschakeld, wordt een X.509-certificaat met het beoogde doel van clientverificatie automatisch gemaakt en ingevoegd in het persoonlijke certificatenarchief van de lokale computer wanneer een nieuwe computer aan het netwerk wordt toegevoegd. Automatische inschrijving gebruikt echter dezelfde onderwerpnaam voor alle certificaten die in de cache worden gemaakt.
De impact is dat WCF-services niet kunnen worden geopend op domeinen met automatische inschrijving. Dit treedt op omdat de standaardservice X.509-zoekcriteria voor referenties dubbelzinnig kunnen zijn omdat er meerdere certificaten bestaan met de fully qualified Domain Name System (DNS)-naam van de computer. Eén certificaat is afkomstig van automatische inschrijving; de andere kan een zelf uitgegeven certificaat zijn.
Om dit te verhelpen, verwijst u naar het exacte certificaat dat moet worden gebruikt met behulp van een nauwkeuriger zoekcriterium op de serviceCredentials>.< Gebruik bijvoorbeeld de FindByThumbprint optie en geef het certificaat op met de unieke vingerafdruk (hash).
Zie Certificaat automatisch inschrijven in Windows Server 2003 voor meer informatie over de functie voor automatisch inschrijven.
Laatste van meerdere alternatieve onderwerpnamen die worden gebruikt voor autorisatie
In het zeldzame geval dat een X.509-certificaat meerdere alternatieve onderwerpnamen bevat en u autoriseert met de alternatieve onderwerpnaam, kan autorisatie mislukken.
Configuratiebestanden beveiligen met ACL's
U kunt vereiste en optionele claims opgeven in code- en configuratiebestanden voor door CardSpace uitgegeven tokens. Dit resulteert in overeenkomende elementen die worden verzonden in RequestSecurityToken
berichten die naar de beveiligingstokenservice worden verzonden. Een aanvaller kan code of configuratie wijzigen om vereiste of optionele claims te verwijderen, waardoor de beveiligingstokenservice een token kan uitgeven dat geen toegang tot de doelservice token toestaat.
Om dit te verhelpen: Toegang tot de computer vereisen om het configuratiebestand te wijzigen. Gebruik toegangsbeheerlijsten (ACL's) voor bestandstoegang om configuratiebestanden te beveiligen. WCF vereist dat code zich in de toepassingsmap of de algemene assemblycache bevindt voordat deze code vanuit de configuratie kan worden geladen. Gebruik map-ACL's om mappen te beveiligen.
Maximum aantal beveiligde sessies voor een service is bereikt
Wanneer een client is geverifieerd door een service en er een beveiligde sessie met de service tot stand is gebracht, houdt de service de sessie bij totdat de client deze annuleert of de sessie verloopt. Elke gevestigde sessie telt mee tegen de limiet voor het maximum aantal actieve gelijktijdige sessies met een service. Wanneer deze limiet is bereikt, worden clients die proberen een nieuwe sessie met die service te maken geweigerd totdat een of meer actieve sessies verlopen of worden geannuleerd door een client. Een client kan meerdere sessies met een service hebben en elk van deze sessies telt mee voor de limiet.
Notitie
Wanneer u stateful sessies gebruikt, is de vorige alinea niet van toepassing. Zie How to: Create a Security Context Token for a Secure Session(s) voor meer informatie over stateful sessies.
Om dit te verhelpen, stelt u de limiet in voor het maximum aantal actieve sessies en de maximale levensduur voor een sessie door de SecurityBindingElement eigenschap van de SecurityBindingElement klasse in te stellen.