Sfondo
Molti sviluppatori stanno riducendo inutilmente la sicurezza del registro eventi o richiedono l'esecuzione di applicazioni in modalità amministratore solo per poter utilizzare il registro eventi con questo codice C # o VB:
EventLog.[WriteEntry][1]("MyBadApp", "This will cause an exception for ASP.NET and non admins", EventLogEntryType.Error, 10);
.. e quindi non creare un programma di installazione che crei le chiavi di registro necessarie per "MyBadApp"
Ulteriori informazioni
Se viene eseguito in Network Service
, ASP.NET, WCF, un account di servizio e sta utilizzando un account non amministratore, si verificherà la seguente eccezione ... ma chissà se o dove verrà registrato (Incollare per il bene di Google)
System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.
at System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly)
at System.Diagnostics.EventLog.SourceExists(String source, String machineName)
at System.Diagnostics.EventLog.VerifyAndCreateSource(String sourceName, String currentMachineName)
at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type, Int32 eventID)
at **YOUR.CUSTOM.BROKEN.CODE.HERE(ResolvedMessageEventSource source, QueuedMessageEventArgs e) in c:\test2\YourProjectHere\Class1.cs:line 116**
---- SNIP Possibly more stuff here --
System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)
The Zone of the assembly that failed was:
MyComputer
Microsoft è a conoscenza di questo problema, ma è in base alla progettazione per un accesso EventLog rapido e sporco. Ogni volta che viene chiamato WriteEntry , il sistema enumera il registro e cerca "Sourcename" l'applicazione specificata . Se non esiste, verrà creato.
Il problema è che durante l'enumerazione, il registro di sicurezza viene colpito e viene generata un'eccezione. Gli sviluppatori che non creano un programma di installazione o che altrimenti creano una chiave di registro per "MyBadApp" ricadranno nella creazione di eventi dinamici vedranno questo problema.
Questo è di progettazione e influenza WriteEntry e meno frequentemente WriteEvent (Gli sviluppatori WriteEvent di solito creano un programma di installazione)
Soluzione
Ci sono 3 soluzioni di cui sono a conoscenza:
-
Rendi l'applicazione eseguita come amministratore (non valido)
-
Modifica le autorizzazioni sulle chiavi di registro
-
Creare un programma di installazione che renda la chiave di registro per l'applicazione (soluzione migliore)
Domanda
Qual è la cosa peggiore che può accadere per un'applicazione che modifica le autorizzazioni della chiave del Registro di sicurezza?
-
Può leggere il registro degli eventi di sicurezza?
-
Può modificare o modificare le voci del registro eventi di sicurezza?
-
Può spoofare eventi di sicurezza che non sono propri?
-
Può portare a un tentativo?