Denial of Service (Negazione del servizio)Denial of Service

Si verifica un attacco Denial of Service quando un sistema viene sommerso da una quantità di messaggi tale da non poter essere elaborata o da poter essere elaborata solo molto lentamente.Denial of service occurs when a system is overwhelmed in such a way that messages cannot be processed, or they are processed extremely slowly.

Eccessivo consumo di memoriaExcess Memory Consumption

Quando viene letto un documento XML con un numero elevato di nomi locali, spazi dei nomi o prefissi univoci, può verificarsi un problema.A problem can occur when reading an XML document with a large number of unique local names, namespaces, or prefixes. Se si usa una classe che deriva da XmlReader e si chiama la proprietà LocalName, Prefix o NamespaceURI per ogni elemento, la stringa restituita viene aggiunta a una classe NameTable.If you are using a class that derives from XmlReader, and you call either the LocalName, Prefix or NamespaceURI property for each item, the returned string is added to a NameTable. Le dimensioni della raccolta contenuta nella classe NameTable non diminuiscono mai, creando una "perdita di memoria" virtuale degli handle di stringa.The collection held by the NameTable never decreases in size, creating a virtual "memory leak" of the string handles.

Le mitigazioni includono:Mitigations include:

  • Derivare dalla classe NameTable e imporre una quota della dimensione massima.Derive from the NameTable class and enforce a maximum size quota. Non è possibile impedire l'uso di una classe NameTable o cambiare la classe NameTable quando è completa.(You cannot prevent the use of a NameTable or switch the NameTable when it is full.)

  • Evitare di usare le proprietà citate e impiegare invece il metodo MoveToAttribute con il metodo IsStartElement quando possibile; questi metodi non restituiscono stringhe e non provocano quindi problemi di superamento della capacità della raccolta NameTable.Avoid using the properties mentioned and instead use the MoveToAttribute method with the IsStartElement method where possible; those methods do not return strings and thus avoid the problem of overfilling the NameTable collection.

Il client dannoso invia un numero eccessivo di richieste di licenza al servizioMalicious Client Sends Excessive License Requests to Service

Se un client dannoso bombarda un servizio con un numero eccessivo di richieste di licenza, può costringere il server a usare troppa memoria.If a malicious client bombards a service with excessive license requests, it can cause the server to use excessive memory.

Mitigazione: Usare le proprietà seguenti del LocalServiceSecuritySettings classe:Mitigation: Use the following properties of the LocalServiceSecuritySettings class:

  • MaxCachedCookies: controlla il numero massimo di classi SecurityContextToken temporali memorizzate nella cache dal server dopo la negoziazione SPNego o SSL.MaxCachedCookies: controls the maximum number of time-bounded SecurityContextTokens that the server caches after SPNego or SSL negotiation.

  • IssuedCookieLifetime: controlla la durata della classe SecurityContextTokens rilasciata dal server in seguito alla negoziazione SPNego o SSL.IssuedCookieLifetime: controls the lifetime of the SecurityContextTokens that the server issues following SPNego or SSL negotiation. Il server memorizza nella cache la classe SecurityContextToken per questo periodo di tempo.The server caches the SecurityContextTokens for this period of time.

  • MaxPendingSessions: controlla il numero massimo di conversazioni protette stabilite nel server, per cui però non sono stati elaborati messaggi dell'applicazione.MaxPendingSessions: controls the maximum number of secure conversations that are established at the server but for which no application messages have been processed. Questa quota impedisce ai client di stabilire conversazioni protette nel servizio, facendo così in modo che il servizio mantenga lo stato per client, senza mai usare i client.This quota prevents clients from establishing secure conversations at the service, thereby causing the service to maintain state per client, but never using them.

  • InactivityTimeout: controlla il tempo massimo in cui il servizio mantiene attiva una conversazione protetta senza ricevere un messaggio dell'applicazione dal client per la conversazione.InactivityTimeout: controls the maximum time the service keeps a secure conversation alive without receiving an application message from the client for the conversation. Questa quota impedisce ai client di stabilire conversazioni protette nel servizio, facendo così in modo che il servizio mantenga lo stato per client, senza mai usare i client.This quota prevents clients from establishing secure conversations at the service, thereby causing the service to maintain state per client, but never using them.

Necessità dell'autenticazione client per WSDualHttpBinding o per le doppie associazioni personalizzateWSDualHttpBinding or Dual Custom Bindings Require Client Authentication

Per impostazione predefinita, WSDualHttpBinding ha la sicurezza abilitata.By default, the WSDualHttpBinding has security enabled. È tuttavia possibile che, se l'autenticazione client viene disattivata impostando la proprietà ClientCredentialType su None, un utente malintenzionato provochi un attacco Denial of Service in un terzo servizio.It is possible, however, that if the client authentication is disabled by setting the ClientCredentialType property to None, a malicious user can cause a denial of service attack on a third service. Ciò può verificarsi perché un client dannoso può indicare al servizio di inviare un flusso di messaggi a un terzo servizio.This can occur because a malicious client can direct the service to send a stream of messages to a third service.

Per prevenire il problema, non impostare la proprietà su None.To mitigate this, do not set the property to None. Occorre essere consapevoli di questa possibilità quando si crea un'associazione personalizzata con un modello di messaggio doppio.Also be aware of this possibility when creating a custom binding that has a dual message pattern.

Possibilità di riempimento del registro eventi di controlloAuditing Event Log Can Be Filled

Se un utente malintenzionato comprende che è attivato il controllo, può inviare messaggi non validi che causano la scrittura di voci di controllo.If a malicious user understands that auditing is enabled, that attacker can send invalid messages that cause audit entries to be written. Ciò comporta a sua volta la generazione di errori nel sistema di controllo.If the audit log is filled in this manner, the auditing system fails.

Per ridurre questo problema, impostare la proprietà SuppressAuditFailure su true e usare le proprietà del Visualizzatore eventi per controllare il comportamento di controllo.To mitigate this, set the SuppressAuditFailure property to true and use the properties of the Event Viewer to control the auditing behavior. Per altre informazioni sull'utilizzo nel Visualizzatore eventi per visualizzare e gestire i registri eventi, vedere Visualizzatore eventi.For more information about using the Event Viewer to view and manage event logs, see Event Viewer. Per altre informazioni, vedere controllo.For more information, see Auditing.

Implementazioni non valide di IAuthorizationPolicy possono provocare un servizio smette di rispondereInvalid Implementations of IAuthorizationPolicy Can Cause Service to Become Unresponsive

Chiama il Evaluate metodo in un'implementazione non corretta del IAuthorizationPolicy interfaccia può causare il servizio smette di rispondere.Calling the Evaluate method on a faulty implementation of the IAuthorizationPolicy interface can cause the service to become unresponsive.

Mitigazione: Usare solo codice attendibile.Mitigation: Use only trusted code. In altre parole, usare solo codice scritto e verificato o proveniente da un provider attendibile.That is, use only code that you have written and tested, or that comes from a trusted provider. Non consentire l'aggiunta nel codice di estensioni non attendibili di IAuthorizationPolicy senza la dovuta considerazione.Do not allow untrusted extensions of IAuthorizationPolicy to be plugged into your code without due consideration. Questo vale per tutte le estensioni usate in un'implementazione del servizio.This applies to all extensions used in a service implementation. WCF non distinzioni tra codice dell'applicazione e codice esterno viene aggiunto utilizzando punti di estensibilità.WCF does not make any distinction between application code and foreign code that is plugged in using extensibility points.

Possibile necessità di ridimensionamento per la dimensione massima dei token KerberosKerberos Maximum Token Size May Need Resizing

Se un client appartiene a un gran numero di gruppi (circa 900, anche se il numero effettivo varia a seconda dei gruppi), può verificarsi un problema quando il blocco dell'intestazione di un messaggio supera i 64 kilobyte.If a client belongs to a large number of groups (approximately 900, although the actual number varies depending on the groups), a problem may occur when a message header's block exceeds 64 kilobytes. In tal caso, è possibile aumentare la dimensione massima dei token Kerberos, come descritto nell'articolo di supporto tecnico Microsoft "l'autenticazione Kerberos di Internet Explorer non funziona a causa di un buffer insufficiente la connessione a IIS."In that case, you can increase the maximum Kerberos token size, as described in the Microsoft Support article "Internet Explorer Kerberos authentication does not work because of an insufficient buffer connecting to IIS." È necessario anche aumentare la dimensione massima del messaggio WCF in base al più ampio token Kerberos.You may also need to increase the maximum WCF message size to accommodate the larger Kerberos token.

Generazione da parte della registrazione automatica di più certificati per computer con lo stesso nome di soggettoAutoenrollment Results in Multiple Certificates with Same Subject Name for Machine

La registrazione automatica è la funzionalità di Windows Server 2003Windows Server 2003 per registrare automaticamente gli utenti e computer per i certificati.Autoenrollment is the capability of Windows Server 2003Windows Server 2003 to automatically enroll users and computers for certificates. Quando un computer si trova in un dominio con questa funzionalità attivata, viene automaticamente creato un certificato X.509 con l'obiettivo di eseguire l'autenticazione client, tale certificato viene quindi inserito nell'archivio dei certificati personali del computer locale ogni qualvolta un nuovo computer viene associato alla rete.When a machine is on a domain with the feature enabled, an X.509 certificate with the intended purpose of client authentication is automatically created and inserted into the local computer's Personal certificates store whenever a new machine is joined to the network. Tuttavia, la registrazione automatica usa lo stesso nome di soggetto per tutti i certificati creati nella cache.However, autoenrollment uses the same subject name for all certificates it creates in the cache.

L'impatto è che i servizi WCF possono non riuscire aprire sui domini con la registrazione automatica.The impact is that WCF services may fail to open on domains with autoenrollment. Ciò si verifica perché i criteri predefiniti per la ricerca delle credenziali X.509 del servizio potrebbero essere ambigui, dal momento che esistono più certificati con il nome DNS (Domain Name System) completo del computer.This occurs because the default service X.509 credential search criteria might be ambiguous because multiple certificates with the machine's fully qualified Domain Name System (DNS) name exist. Un certificato ha origine dalla registrazione automatica, l'altro potrebbe invece essere un certificato autorilasciato.One certificate originates from autoenrollment; the other might be a self-issued certificate.

Per risolvere questo problema, fare riferimento al certificato esatto da usare con un criterio di ricerca più preciso sul <serviceCredentials >.To mitigate this, reference the exact certificate to use by using a more precise search criterion on the <serviceCredentials>. Usare, ad esempio, l'opzione FindByThumbprint e specificare il certificato in base all'identificazione personale univoca (hash).For example, use the FindByThumbprint option, and specify the certificate by its unique thumbprint (hash).

Per altre informazioni sulle funzionalità di registrazione automatica, vedere registrazione automatica dei certificati in Windows Server 2003.For more information about the autoenrollment feature, see Certificate Autoenrollment in Windows Server 2003.

Uso per l'autorizzazione dell'ultimo dei diversi nomi di soggetto alternativiLast of Multiple Alternative Subject Names Used for Authorization

Nel raro caso che un certificato X.509 contenga più nomi di soggetto alternativi e si esegua l'autorizzazione usando il nome di soggetto alternativo, l'autorizzazione potrebbe avere esito negativo.In the rare case when an X.509 certificate contains multiple alternative subject names, and you authorize using the alternative subject name, authorization may fail.

Protezione dei file di configurazione con elenchi di controllo di accesso (ACL)Protect Configuration Files with ACLs

È possibile specificare attestazioni obbligatorie e facoltative nei file di codice e la configurazione per i token rilasciati CardSpace.You can specify required and optional claims in code and configuration files for CardSpace issued tokens. Ciò comporta l'emissione di elementi corrispondenti nei messaggi RequestSecurityToken inviati al servizio token di sicurezza.This results in corresponding elements being emitted in RequestSecurityToken messages that are sent to the security token service. L'autore di un attacco può modificare il codice o la configurazione per rimuovere attestazioni obbligatorie o facoltative, facendo in modo che il servizio token di sicurezza rilasci un token che non consente l'accesso al servizio di destinazione.An attacker can modify code or configuration to remove required or optional claims, potentially getting the security token service to issue a token that does not allow access to the target service.

Per attenuare: Richiedere l'accesso al computer per modificare il file di configurazione.To mitigate: Require access to the computer to modify the configuration file. Usare elenchi di controllo di accesso (ACL) per proteggere i file di configurazione.Use file access control lists (ACLs) to secure configuration files. WCF, è necessario che codice si trovi nella directory dell'applicazione o nella global assembly cache prima consentirà di tale codice deve essere caricato dalla configurazione.WCF requires that code be in the application directory or the global assembly cache before it will allow such code to be loaded from configuration. Usare elenchi di controllo di accesso alle directory per proteggere le directory.Use directory ACLs to secure directories.

Raggiunto il numero massimo di sessioni protette per un servizioMaximum Number of Secure Sessions for a Service Is Reached

Quando un client viene correttamente autenticato da un servizio e viene stabilita una sessione protetta con il servizio, il servizio tiene traccia della sessione fino a quando il client non la annulla o la sessione non scade.When a client is successfully authenticated by a service and a secure session is established with the service, the service keeps track of the session until the client cancels it or the session expires. Ogni sessione stabilita viene conteggiata a fronte del numero massimo consentito di sessioni attive simultanee con un servizio.Every established session counts against the limit for the maximum number of active simultaneous sessions with a service. Quando viene raggiunto questo limite, i client che tentano di creare una nuova sessione con il servizio in questione vengono rifiutati fino a quando una o più sessioni attive non scadono o non vengono annullate da un client.When this limit is reached, clients that attempt to create a new session with that service are rejected until one or more active sessions expire or are canceled by a client. Un client può avere più sessioni con un servizio e ognuna di esse viene conteggiata per il raggiungimento del limite.A client can have multiple sessions with a service, and each one of those sessions counts toward the limit.

Nota

Se si usano sessioni con stato, non vale quanto detto nel paragrafo precedente.When you use stateful sessions, the previous paragraph does not apply. Per altre informazioni sulle sessioni con state, vedere come: Creare un contesto di sicurezza Token per una sessione protetta.For more information about stateful sessions, see How to: Create a Security Context Token for a Secure Session.

Per prevenire il problema, impostare il limite per il numero massimo di sessioni attive e la durata massima di una sessione impostando la proprietà SecurityBindingElement della classe SecurityBindingElement.To mitigate this, set the limit for the maximum number of active sessions and the maximum lifetime for a session by setting the SecurityBindingElement property of the SecurityBindingElement class.

Vedere ancheSee also