Überlegungen zur Sicherheit: Microsoft Windows Shell

Dieses Thema enthält Informationen zu Sicherheitsüberlegungen im Zusammenhang mit der Windows-Shell. Dieses Dokument kann nicht alles bereitstellen, was Sie über Sicherheitsprobleme wissen müssen – verwenden Sie es stattdessen als Ausgangspunkt und Verweis für diesen speziellen Technologiebereich.

Die Shell steuert eine Reihe wichtiger Aspekte des Systems, einschließlich mehrerer, die potenzielle Sicherheitsrisiken darstellen, wenn Sie nicht ordnungsgemäß behandelt werden. In diesem Thema werden einige der gängigeren Probleme und deren Behebung in Ihren Anwendungen erläutert. Beachten Sie, dass Sicherheit nicht auf Internet basierte Exploits beschränkt ist. Auf freigegebenen Systemen, einschließlich Systemen, auf die über Terminal Dienste zugegriffen werden kann, müssen Sie sicherstellen, dass Benutzer nichts tun können, was anderen Benutzern das System möglicherweise schadet.

Ordnungsgemäße Installation der Anwendung

Die Mehrzahl potenzieller shellsicherheitsprobleme können durch eine ordnungsgemäße Installation der Anwendung behoben werden.

  • Installieren Sie die Anwendung unter dem Ordner "Programme".

    Betriebssystem Standort
    Windows XP, Windows Server 2003 und früher CSIDL- _ Programm _ Dateien
    Windows Vista und höher Folderid _ Program Files, folderid _ ProgramFilesX86, folderid _ ProgramFilesX64, folderid _ programfilescommon, folderid _ ProgramFilesCommonX86 oder folderid _ ProgramFilesCommonX64. Einzelheiten finden Sie unter KNOWNFOLDERID .
  • Speichern Sie Benutzerdaten nicht im Ordner "Programme".

    Verwenden Sie den entsprechenden Datenordner für Daten, die allen Benutzern gemeinsam sind.

    Betriebssystem Standort
    Windows XP, Windows Server 2003 und früher Allgemeine CSIDL- _ _ AppData
    Windows Vista und höher Folderid- _ programmdata

    Verwenden Sie den entsprechenden Ordner für Benutzerdaten für Daten, die zu einem bestimmten Benutzer gehören.

    Betriebssystem Standort
    Windows XP, Windows Server 2003 und früher CSIDL _ AppData, CSIDL _ Personal und andere.
    Windows Vista und höher Folderid _ roamingappdata, folderid _ -Dokumente und andere.
  • Wenn Sie an einem anderen Speicherort als dem Ordner "Programme" installieren müssen, stellen Sie sicher, dass Sie Zugriffs Steuerungs Listen (ACLs) ordnungsgemäß festlegen, damit Benutzer nicht auf ungeeignete Teile des Dateisystems zugreifen können. Alle Daten, die für einen bestimmten Benutzer spezifisch sind, sollten über eine ACL verfügen, die verhindert, dass andere Benutzer darauf zugreifen können.

  • Wenn Sie Dateizuordnungen einrichten, stellen Sie sicher, dass Sie die Befehlszeile ordnungsgemäß angeben. Verwenden Sie einen voll qualifizierten Pfad, und packen Sie alle Elemente, die Leerzeichen enthalten, in Anführungszeichen. Umbruch von Befehlsparametern in separaten Anführungszeichen. Andernfalls wird die Zeichenfolge möglicherweise falsch analysiert, und die Anwendung wird nicht ordnungsgemäß gestartet. Hier werden zwei Beispiele für ordnungsgemäß formatierte Befehlszeilen angezeigt.

    "C:\Program Files\MyApp\MyApp.exe" "%1" "%2"
    C:\MyAppDir\MyApp\MyApp.exe "%1"
    

Hinweis

Der Speicherort der Standard Installationsordner kann von System zu System abweichen. Um den Speicherort eines Standard Ordners für ein bestimmtes Windows Vista-oder ein späteres System zu erhalten, wenden Sie shgetknownfolderpath mit dem entsprechenden KNOWNFOLDERID -Wert an. In Windows XP, Windows Server 2003 oder früheren Systemen, rufe Sie shgetfolderlocation oder SHGetFolderPath mit dem entsprechenden CSIDL -Wert auf.

Shlwapi

Die Shell Lightweight API (shlwapi) umfasst eine Reihe von Funktionen zur Zeichen folgen Bearbeitung. Wenn diese Funktionen nicht ordnungsgemäß verwendet werden, kann dies zu unerwarteten abgeschnittene Zeichen folgen führen, ohne dass eine Benachrichtigung über die zurückgegebene abgeschnittene In den folgenden Fällen sollten die shlwapi-Funktionen nicht verwendet werden. Die aufgeführten Alternativen Funktionen, die weniger Risiken darstellen, sollten an ihrer Stelle verwendet werden.

Shlwapi-Funktion Alternative Funktion
" Strauch", "strauncat " StringCchCat, stringcbcat und verwandte Funktionen
" Strincpy", " straucpyn " StringCchCopy, stringcbcopy und verwandte Funktionen
wnsprintf, wvnsprintf StringCchPrintf, stringcbprintf und verwandte Funktionen

Legen Sie mit Funktionen wie pathrelativepathto , die einen Dateipfad zurückgeben, die Größe des Puffers immer auf Max _ . Pfad Zeichen fest. Dadurch wird sichergestellt, dass der Puffer groß genug ist, um den größtmöglichen Dateipfad und ein abschließendes NULL-Zeichen zu speichern.

Weitere Informationen zu den alternativen Zeichen folgen Funktionen finden Sie unter Informationen zu "tresafe. h".

AutoVervollständigen

Verwenden Sie die Funktion "Auto Vervollständigen" nicht für Kenn Wörter.

Es gibt mehrere Shellfunktionen, mit denen Sie Anwendungen starten können: ShellExecute, ShellExecuteEx, winexecund shkreateprocessasuserw. Stellen Sie sicher, dass Sie eine eindeutige Definition der Anwendung angeben, die ausgeführt werden soll.

  • Wenn Sie den Pfad der ausführbaren Datei bereitstellen, geben Sie den voll qualifizierten Pfad an. Verwenden Sie die Shell nicht, um nach der Datei zu suchen.
  • Wenn Sie eine Befehlszeilen Zeichenfolge bereitstellen, die Leerzeichen enthält, schließen Sie die Zeichenfolge in Anführungszeichen ein. Andernfalls interpretiert der Parser möglicherweise ein einzelnes Element, das Leerzeichen als mehrere Elemente enthält.

Verschieben und Kopieren von Dateien

Ein Schlüssel für die Systemsicherheit ist das ordnungsgemäße Zuweisen von ACLs. Sie können auch verschlüsselte Dateien verwenden. Stellen Sie sicher, dass beim Verschieben oder Kopieren von Dateien die richtige ACL zugewiesen wird und dass Sie nicht versehentlich entschlüsselt wurden. Dies umfasst auch das Verschieben von Dateien in den Papierkorb und innerhalb des Dateisystems. Verwenden Sie IFileOperation (Windows Vista oder höher) oder SHFileOperation (Windows XP und früher). Verwenden Sie nicht " muvefile", wodurch möglicherweise nicht die erwartete ACL für die Zieldatei festgelegt wird.

Schreiben sicherer Namespace Erweiterungen

Shell-Namespace Erweiterungen sind eine leistungsstarke und flexible Möglichkeit, um dem Benutzerdaten zur Verfügung zu stellen. Allerdings können Sie einen Systemfehler verursachen, wenn Sie nicht ordnungsgemäß geschrieben wurden. Beachten Sie dabei einige wichtige Punkte:

  • Gehen Sie nicht davon aus, dass Daten wie Bilder ordnungsgemäß formatiert sind.
  • Gehen Sie nicht davon aus, dass _ der maximale Pfad der Anzahl von Bytes in einer Zeichenfolge entspricht. Dabei handelt es sich um die Anzahl der Zeichen.

Sicherheitswarnungen

In der folgenden Tabelle werden einige Features aufgelistet, die ggf. die Sicherheit Ihrer Anwendungen beeinträchtigen können.

Feature Minderung
ShellExecute, ShellExecuteEx Suchvorgänge, die davon abhängen, dass eine Reihe von Standard Speicherorten zum Suchen nach einer bestimmten Datei überprüft wird, können in einem Spoofing-Angriff verwendet werden. Verwenden Sie einen voll qualifizierten Pfad, um sicherzustellen, dass Sie auf die gewünschte Datei zugreifen.
StrCat Das erste Argument, psz1, muss groß genug sein, um psz2 und das schließende ' \ 0 ' aufzunehmen. andernfalls kann ein Pufferüberlauf auftreten. Verwenden Sie stattdessen eine der folgenden Alternativen. Stringcbcat, stringcbcr Ex, stringcbcr n, stringcb-netX, StringCchCat, stringcch|Ex, stringcchkat}oder stringcchkatkatx.
Strauch Es ist nicht garantiert, dass die endgültige Zeichenfolge mit NULL endet. Verwenden Sie stattdessen eine der folgenden Alternativen. Stringcbcat, stringcbcr Ex, stringcbcr n, stringcb-netX, StringCchCat, stringcch|Ex, stringcchkat}oder stringcchkatkatx.
"Erw" Es ist nicht garantiert, dass die endgültige Zeichenfolge mit NULL endet. Verwenden Sie stattdessen eine der folgenden Alternativen. Stringcb-Ex, stringcbcr-x, stringcch| Exoder stringcchcr-x.
StrCpy Das erste Argument, psz1, muss groß genug sein, um psz2 und das schließende ' \ 0 ' aufzunehmen. andernfalls kann ein Pufferüberlauf auftreten. Verwenden Sie stattdessen eine der folgenden Alternativen. Stringcbcopy, stringcbcopyex, stringcbcopyn, stringcbcopynetx, StringCchCopy, stringcchcopyex, stringcchcopynoder stringcchcopynetx.
"Straucpyn" Es ist nicht garantiert, dass die kopierte Zeichenfolge auf NULL endet. Verwenden Sie stattdessen eine der folgenden Alternativen. Stringcbcopy, stringcbcopyex, stringcbcopyn, stringcbcopynetx, StringCchCopy, stringcchcopyex, stringcchcopyn, stringcchcopynetx.
StrDup Bei der über Bildung wird angenommen, dass lpsz eine auf NULL endenden Zeichenfolge ist. Außerdem ist die zurückgegebene Zeichenfolge nicht garantiert NULL-terminiert. Verwenden Sie stattdessen eine der folgenden Alternativen. Stringcbcat, stringcbcopyex, stringcbcopyn, stringcbcopynetx, StringCchCopy, stringcchcopyex, stringcchcopynoder stringcchcopynetx.
StrNCat Das erste Argument, pszfront, muss groß genug sein, um pszback und das schließende ' \ 0 ' aufzunehmen. andernfalls kann ein Pufferüberlauf auftreten. Beachten Sie, dass das letzte Argument, cchmax, die Anzahl der Zeichen ist, die in pszfront kopiert werden sollen, nicht notwendigerweise die Größe von pszfront in Bytes. Verwenden Sie stattdessen eine der folgenden Alternativen. Stringcbcat, stringcbcr Ex, stringcbcr n, stringcb-netX, StringCchCat, stringcch|Ex, stringcchkat}oder stringcchkatkatx.
wnsprintf Es ist nicht garantiert, dass die kopierte Zeichenfolge auf NULL endet. Verwenden Sie stattdessen eine der folgenden Alternativen. Stringcbprintf, stringcbprintfex, stringcbvprintf, stringcbvprintfex, StringCchPrintf, stringcchprintfex, stringcchvprintfoder stringcchvprintfex.
wvnsprintf Es ist nicht garantiert, dass die kopierte Zeichenfolge auf NULL endet. Verwenden Sie stattdessen eine der folgenden Alternativen. Stringcbprintf, stringcbprintfex, stringcbvprintf, stringcbvprintfex, StringCchPrintf, stringcchprintfex, stringcchvprintfoder stringcchvprintfex.

Microsoft Security

Security Developer Center

Microsoft Solution Accelerators

Sicherheits-TechCenter

Informationen zu "strausafe. h"