Share via


Nicht verwalteter Code

Aktualisiert: November 2007

Bestimmter Bibliothekscode muss nicht verwalteten Code aufrufen (z. B. APIs in systemeigenem Code wie Win32). Hierbei ist größte Vorsicht geboten, da der verwaltete Code sich nicht mehr im sicheren Bereich befindet. Bei sicherheitsneutralem Code muss sowohl der Code als auch sämtlicher aufrufender Code über die Berechtigung für nicht verwalteten Code verfügen (SecurityPermission, wobei das UnmanagedCode-Flag angegeben ist).

In den meisten Situationen ist es jedoch nicht sinnvoll, dem Aufrufer so weit reichende Berechtigungen zu gewähren. In solchen Fällen kann der vertrauenswürdige Code die Verbindung darstellen, vergleichbar mit dem verwalteten Wrapper- oder Bibliothekscode, der unter Sichern von Wrappercode beschrieben wird. Wenn die zugrunde liegenden nicht verwalteten Codefunktionen vollständig sicher sind, kann der Code direkt verfügbar gemacht werden. Andernfalls muss zuerst eine geeignete Berechtigungsüberprüfung (Forderung) ausgeführt werden.

Wenn der Code nicht verwalteten Code aufruft, die Aufrufer jedoch nicht über die Berechtigung für den Zugriff auf nicht verwalteten Code verfügen sollen, müssen Sie eine Assertion für dieses Recht ausführen. Eine Assertion sperrt den Stackwalk im Stapelrahmen. Achten Sie darauf, dass die Sicherheit dadurch nicht beeinträchtigt wird. Dies gewährleisten Sie üblicherweise, indem von den Aufrufern eine angemessene Berechtigung gefordert wird und der nicht verwaltete Code dann ausschließlich die Aktionen ausführen kann, die entsprechend zulässig sind. In einigen Fällen (z. B. bei einer Funktion zum Abrufen der Uhrzeit) kann nicht verwalteter Code ohne Sicherheitsüberprüfungen direkt für Aufrufer verfügbar gemacht werden. Code mit Assertionen ist jedoch grundsätzlich für die Sicherheit zuständig.

Da verwalteter Code, der einen Codepfad für systemeigenen Code angibt, ein Angriffsziel für bösartigen Code darstellen kann, müssen Sie umsichtig bestimmen, welcher Code auf welche Weise sicher verwendet werden kann. Verwalteter Code darf teilweise vertrauenswürdigen Aufrufern grundsätzlich nie direkt verfügbar gemacht werden. Bei der Verwendung von nicht verwaltetem Code in Bibliotheken, die von eingeschränkt vertrauenswürdigem Code aufgerufen werden können, kann die Sicherheit anhand von zwei wesentlichen Aspekten beurteilt werden:

  • Funktionen. Stellt die nicht verwaltete API Funktionen bereit, die das Ausführen potenziell gefährlicher Operationen durch Aufrufer verhindern? Die Codezugriffssicherheit stützt sich auf Berechtigungen, um den Zugriff auf Ressourcen zu erzwingen. Untersuchen Sie also, ob die API Dateien, eine Benutzeroberfläche oder Threading verwendet und ob geschützte Informationen verfügbar gemacht werden. Wenn dies der Fall ist, muss der sie umfassende verwaltete Code die entsprechenden Berechtigungen fordern, bevor der Zugang gewährt wird. Darüber hinaus muss, wenn keine Berechtigungen festgelegt sind, der Speicherzugriff auf strikte Typsicherheit beschränkt werden.

  • Parameterüberprüfung. Bei einem normalen Angriff werden unerwartete Parameter an verfügbar gemachte API-Methoden in nicht verwaltetem Code übergeben, um eine fehlerhafte Ausführung zu erzwingen. Pufferüberläufe mit Index- oder Offsetwerten außerhalb des Bereichs sind typische Beispiele für solche Angriffe, wie auch alle anderen Parameter, die einen Fehler im zugrunde liegenden Code bewirken sollen. Selbst wenn APIs in nicht verwaltetem Code für teilweise vertrauenswürdige Aufrufer (nach den nötigen Forderungen) funktional sicher sind, muss der verwaltete Code auch die Gültigkeit der Parameter eingehend überprüfen, um sicherzustellen, dass bösartiger Code keine unbeabsichtigten Aufrufe über die Wrapperschicht des verwalteten Codes vornehmen kann.

Siehe auch

Weitere Ressourcen

Richtlinien für das Schreiben von sicherem Code