Sicurezza in .NET Remoting

Come sviluppatore di applicazioni .NET Remoting, è necessario avere una buona comprensione delle implicazioni di protezione non solo riguardanti .NET Remoting, ma anche le applicazioni distribuite in generale. Senza un'implementazione sicura, chiunque potrebbe chiamare un metodo sull'oggetto remoto o intercettare informazioni riservate mentre vengono inviate a o da un oggetto remoto. Per evitare che ciò accada, sarà necessario autenticare i client (e possibilmente i server) e crittografare la comunicazione tra i due.

Ci sono anche problemi di risoluzione meno semplice. Si consideri un oggetto remoto che definisce un metodo che prende un delegato come parametro. Uno sviluppatore malintenzionato potrebbe utilizzare il delegato per imporre all'applicazione server di eseguire codice di qualsiasi tipo. Quando un delegato esegue il wrapping di un metodo statico, qualsiasi chiamata su quel delegato non avviene in remoto; il codice viene chiamato nel dominio applicazione che ha richiamato il delegato. Ad esempio, un client non autorizzato può utilizzare questa vulnerabilità per effettuare una chiamata all'oggetto remoto e passare un delegato che esegue il wrapping di un metodo statico. L'assembly che implementa il metodo statico può essere copiato nel server e quando il delegato viene richiamato, il metodo statico viene eseguito nel server. Per evitare che ciò accada bisogna sempre dichiarare i delegati utilizzati in oggetti remoti con tipi e parametri personalizzati che i pirati informatici non possano indovinare facilmente. Non si deve inoltre mai consentire a un client di definire e passare un tipo all'oggetto remoto che deve essere deserializzato.

Descrive i vari approcci alla protezione in base ad alcune decisioni prese durante la progettazione. Qui non sono elencate tutte le situazioni possibili, ma questi argomenti sono un buon punto di partenza.

Protezione dall'accesso di codice

La protezione dall'accesso di codice è un meccanismo che consente di limitare l'accesso del codice alle risorse e alle operazioni protette. Normalmente quando il codice tenta di accedere a una risorsa protetta, viene eseguito un percorso stack per assicurarsi che tutti gli stack frame dispongano delle autorizzazioni per accedere alla risorsa. Quando viene effettuata una chiamata su un oggetto remoto, questo percorso stack non viene eseguito attraversando il limite .NET Remoting. Pertanto l'infrastruttura .NET Remoting richiede autorizzazione FullTrust per eseguire operazioni sul client o sul server. Le autorizzazioni FullTrust, in sostanza, disattivano la protezione dall'accesso di codice. Qualsiasi utilizzo non autorizzato di un'applicazione .NET Remoting fornisce accesso non autorizzato alle autorizzazioni FullTrust.

NoteNota:

Molti tipi di sistema estendono MarshalByRefObject ma eseguono anche controlli di protezione a runtime per impedire che qualsiasi cosa esterna al dominio applicazione richiami in modalità remota un oggetto di quel tipo. AppDomaine System.Windows.Forms.Form sono due esempi di tali tipi di sistema.

Considerazioni sulla protezione in applicazioni .NET Remoting

In generale, ci sono due aspetti della protezione che devono essere affrontati con la massima attenzione in un'applicazione distribuita: la protezione del canale di comunicazione e la protezione dell'applicazione contro l'utilizzo improprio.

Proteggere il canale di comunicazione significa assicurare che i messaggi vengano crittografati e che non vengano modificati in transito. Proteggere un'applicazione contro l'utilizzo improprio, comporta l'autenticazione e autorizzazione dei chiamanti. L'autenticazione di un chiamante serve a verificare che il chiamante sia chi dice di essere. L'autorizzazione di un chiamante serve a verificare che il chiamante abbia i privilegi necessari per effettuare una certa chiamata o accedere a una risorsa protetta.

I canali incorporati supportano la protezione nel modo seguente:

HttpChannel - Supporta l'autenticazione solo quando gli oggetti remoti sono ospitati da IIS (Internet Information Services). La crittografia è supportata solo quando IIS è configurato per utilizzare SSL.

TcpChannel - Supporta autenticazione e crittografia.

IpcChannel - Supporta l'autenticazione.

NoteNota:

L'autorizzazione va fornita nel codice. I canali incorporati non possono farlo al posto dell'utente, perché non conoscono il funzionamento del codice e le restrizioni imposte dall'utente.

Caution noteAttenzione:

.NET Framework Remoting non esegue l'autenticazione o la crittografia per impostazione predefinita. È pertanto consigliato che vengano effettuati tutti i passaggi necessari per assicurarsi dell'identità di client o server prima di interagirvi in modalità remota. Poiché l'esecuzione delle applicazioni di .NET Framework Remoting richiede autorizzazioni di tipo FullTrust, se si concede l'accesso al proprio server a un client non autorizzato, questi potrebbe eseguire codice come se fosse completamente attendibile. Autenticare sempre i client e crittografare i flussi di comunicazione.

Vedere anche

Riferimenti

RemotingConfiguration
ChannelServices
Context
MethodCall
RemotingServices

Concetti

Autenticazione con il canale HTTP

Altre risorse

Panoramica di .NET Framework Remoting

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.