Ich habe eine Anwendung, die Ausnahme-Strack-Traces protokolliert, und ich wollte, dass diese Stack-Traces bei der Bereitstellung in der Produktion Dateinamen und Zeilennummern enthalten. Ich habe herausgefunden, wie die Debug-Symbole mit der Assembly bereitgestellt werden, aber bei der Untersuchung des Problems bin ich auf diese Frage gestoßen , was impliziert, dass es keine gute Idee ist, PDF-Dateien in eine Produktionsumgebung aufzunehmen. In einem Kommentar zur akzeptierten Antwort heißt es: "... Debugging-Informationen können vertrauliche Daten preisgeben und ein Angriffsvektor sein. Je nachdem, was Ihre App ist."
Welche sensiblen Daten könnten also offengelegt werden? Wie können Debug-Symbole verwendet werden, um eine Anwendung zu gefährden? Ich bin neugierig auf die technischen Details, aber was ich wirklich suche, ist eine praktische Möglichkeit, das Risiko des Einfügens von Debug-Symbolen für eine bestimmte Anwendungs- und Produktionsumgebung zu bewerten. Oder anders ausgedrückt: Was ist das Schlimmste, was passieren kann?
EDIT: Anschlussfrage / Klarstellung
Aufgrund der bisherigen Antworten aller scheint diese Frage für .NET-Anwendungen etwas vereinfacht zu werden. Dieses Stück aus dem John Robbins-Blog, das in Michael Maddox 'Antwort verlinkt ist , ist mir irgendwie aufgesprungen:
Ein .NET-PDB enthält nur zwei Informationen, die Quelldateinamen und ihre Zeilen sowie die lokalen Variablennamen. Alle anderen Informationen befinden sich bereits in den .NET-Metadaten, sodass nicht dieselben Informationen in einer PDB-Datei dupliziert werden müssen.
Für mich wiederholt dies, was andere über Reflector gesagt haben, mit der Folge, dass das eigentliche Problem der Zugriff auf die Baugruppen ist. Sobald dies festgelegt wurde, müssen Sie in Bezug auf PDBs nur noch entscheiden, ob Sie Dateinamen, Zeilennummern und lokale Variablennamen offenlegen möchten oder nicht (vorausgesetzt, Sie zeigen Endbenutzern zunächst keine Stapelspuren an). Oder habe ich das zu stark vereinfacht?
Antworten:
Hier ist eine weitere Frage:
Gibt es Sicherheitsprobleme, wenn die PDB-Debug-Dateien auf den Live-Servern verbleiben?
Und mehr Infos zu PDB-Dateien:
PDB-Dateien: Was jeder Entwickler wissen muss
Im Allgemeinen füge ich immer PDF-Dateien in meine Bereitstellungen ein. Die Gewinne sind zu groß, um sie zu ignorieren.
Wenn Sie Ihren Benutzern niemals einen Stack-Trace zur Verfügung stellen (und dies im Allgemeinen auch nicht tun sollten), besteht für die Bereitstellung von PDB-Dateien kein zusätzliches Sicherheitsrisiko.
Wenn eine vom Benutzer sichtbare Stapelverfolgung auftritt, kann der Benutzer die vollständige Stapelverfolgung einschließlich Ihres Dateinamens und der Dateizeilennummern sehen. Dies könnte ihnen eine Vorstellung davon geben, wie Ihre App aufgebaut ist, was ihnen möglicherweise beim Hacken helfen würde.
Eine größere Sicherheitsbedrohung ist so etwas wie Reflector, mit dem sie bei Verwendung in Ihren DLLs Ihren Quellcode mit oder ohne PDF-Dateien anzeigen können.
quelle
Wenn Sie in einer Produktionsumgebung in Ihrer eigenen Organisation bereitstellen, ist dies kein Sicherheitsproblem.
Wenn Sie Ihre Software an andere Unternehmen verkaufen, kann die .pdb-Datei jemandem, der an Reverse Engineering interessiert ist, einen Vorsprung verschaffen - das kann für Sie ein Problem sein oder auch nicht.
Um klar zu sein, möchten Sie jedoch nicht, dass Ihre Stack-Traces dem Client angezeigt werden - unabhängig davon, ob die .pdbs verfügbar sind oder nicht. Wenn Sie jedoch nur die Traces protokollieren und dem Client eine "hübsche" Fehlerseite anzeigen, ist dies kein Problem.
quelle
Durch Debugging-Symbole kann ein Angreifer interessierende globale Variablen, Funktionsversätze usw. bestimmen.
So konnte er sehen, dass Ihr System eine Funktion hat wie:
AddAdminUser(string name, string password);
Und kennen Sie seinen Versatz. Wenn Ihr Programm kompromittiert ist, kann er diese Funktion aufrufen, um sich Administratorrechte zu verschaffen.
Oder so etwas wie:
typedef enum {Basic, NTLM} AuthenticationMode; AuthenticationMode g_authenticationMode;
Und weiß, was Sie tun müssen, um Ihre Anwendung in einen unsicheren Modus zu versetzen.
Alternativ würde dies einige Zeit für das Reverse Engineering in Anspruch nehmen, um dies herauszufinden. Keine unüberwindliche Zeit.
Aber . . . Dies alles impliziert, dass Ihr Angreifer bereits in der Lage ist, Ihr Programm zu gefährden. Wenn das der Fall ist, haben Sie bereits verloren.
Wenn Sie einen guten geschäftlichen Grund haben, PDF-Symbole bereitzustellen, fahren Sie fort. Durch die Bereitstellung von PDBs werden Sie nicht unsicher. Wenn Sie keinen guten Grund für die Bereitstellung haben, sollten Sie dies nicht tun, da dies Angriffe etwas erleichtert.
Sie können auch öffentliche PDB-Dateien erstellen - diese entfernen bestimmte Informationen, geben Ihnen jedoch genügend Symbole, um eine Stapelverfolgung zu generieren und ein grundlegendes Debugging durchzuführen. Details finden Sie hier . Microsoft stellt öffentliche PDBs auf seinem Symbolserver bereit, damit alle sie verwenden können.
BEARBEITEN: Das meiste, was ich gesagt habe, bezieht sich auf die Bedenken hinsichtlich der Bereitstellung von PDBs für nativen Code. Ich denke, viele dieser Bedenken werden auch auf .NET übertragen, obwohl Assembly-Metadaten bereits einiges davon vermitteln.
quelle
Jemand kann den vollständigen Quellcode Ihrer Anwendung "wiederherstellen". Wenn es Open Source ist, brauchen Sie sich keine Sorgen zu machen. Wenn es eine IP hat (Algorithmen, Schutz, Lizenzen), ist es wahrscheinlich keine gute Idee.
Es ist wahr, dass Tools wie Reflector Teile Ihres Codes auch ohne PDB-Dateien rekonstruieren können, aber Verschleierungen können helfen (na ja, nur ein bisschen).
quelle