Freigeben über


Sicherheitsüberlegungen in der Debug-API

Bei Verwendung der Debug-API der Common Language Runtime (CLR) sollten die folgenden Sicherheitsüberlegungen berücksichtigt werden:

  • Anfügen an einen Prozess. Unter Windows NT und Windows 2000 muss der zu debuggende Prozess mit einem Sicherheitsdeskriptor erstellt werden, der dem Debugger vollen Zugriff gewährt. Für den Debugprozess muss die SE_DEBUG_NAME-Berechtigung gewährt und aktiviert worden sein, um Prozesse zu debuggen. Einem Windows NT- oder Windows 2000-Administrator wird diese Berechtigung standardmäßig gewährt. Windows 95, Windows 98 und Windows CE bieten diese Sicherheitsebene nicht, da sie keine speziellen Anforderungen zum Anfügen an einen Prozess verlangen.

  • Dynamische Codeeinfügung. Eine Assembly wird überprüft, wenn sie geladen wird. Bei der dynamischen Codeeinfügung ändert der Debugger Code und sendet eine Delta-PE (Portable Executable)-Datei an den zu debuggenden Prozess. Die Delta-PE-Datei wird nicht überprüft. Die aktualisierten Methoden werden überprüft, nachdem sie vom Just-In-Time (JIT)-Compiler kompiliert wurden. Weitere Informationen zur dynamischen Codeeinfügung finden Sie unter Dynamisches Einfügen von Code mit der Debug-API.

  • Änderung der Metadaten einer signierten Assembly. Die Integrität einer Assembly wird überprüft, und die erforderlichen Berechtigungen werden nur dann gewährt, wenn eine signierte Assembly geladen wird. Wenn ein Debugger den ausgeführten Code ändert, indem er die Metadaten der zu debuggenden Komponente umschreibt, ändert sich dadurch der Hash, der die Signatur der Assembly berechnet. Dieser Vorgang bewirkt keine zusätzlichen Sicherheitsüberprüfungen. Berechtigungen, die von der Laufzeit zugewiesen wurden, sind weiterhin gültig.

  • Debuggen eines schädlichen Prozesses. Aus zwei Gründen sollten Sie die Debug-API nicht zum Debuggen eines potenziell schädlichen Prozesses verwenden. Zum einen ist die Debuginfrastruktur gegenüber raffiniert entwickelten Prozessen, die Schwachstellen ausnutzen können, nicht immun. Zum anderen kann das Beenden eines Prozesses beim Debuggen von ausschließlich verwaltetem Code dazu führen, dass es vor der eigentlichen Beendigung zu einer Verzögerung kommt. Daher gibt es keine Garantie dafür, dass eine bestimmte Codezeile nicht ausgeführt wird.

Siehe auch

Konzepte

Übersicht über das Debugging in der CLR

Weitere Ressourcen

Debuggen (Referenz zur nicht verwalteten API)