Welches Risiko besteht bei der Bereitstellung von Debug-Symbolen (PDF-Datei) in einer Produktionsumgebung?

81

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?

Matt
quelle
@Matt: Ist das eine Desktop-Anwendung, Web, Compact oder ...?
Kb.
@Kb - In diesem speziellen Fall handelt es sich um eine Konsolen-App, die wir mit einem Scheduler ausführen. Es wurde intern für den internen Gebrauch entwickelt, sodass jeder, der die PDF-Datei sehen kann, auch den Quellcode sehen kann, sodass ich mir über diese spezielle App keine allzu großen Sorgen mache. Ich interessiere mich mehr für den allgemeinen / praktischen Fall, damit ich entscheiden kann, ob ich ihn mit anderen Apps riskieren möchte oder nicht, z. B. einer Desktop-App, die auf Laptops installiert ist, die gelegentlich mit vertraulichen Daten in unserem Netzwerk verbunden sind.
Matt

Antworten:

58

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.

Michael Maddox
quelle
3
Danke für die Links. Es sieht also so aus, als ob zumindest ein Teil der Gleichung darin besteht, wo die Anwendung bereitgestellt wird (dh Desktop gegen Webserver).
Matt
15

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.

Michael Burr
quelle
Ich glaube, Matt spricht von .Net. Welche zusätzlichen Informationen könnte man von einem PDB erhalten, der nicht bereits über ein Tool wie Lutz 'Reflector verfügbar ist?
Lars Truijens
Quell- und Zeileninformationen fallen sofort ein. Ich glaube nicht, dass lokale Variablennamen in den Metadaten vorhanden sind.
Michael
@Lars - Ich habe nie gesagt, dass es helfen würde :) Ich denke, diese ganze Angst um PDBs und Reverse Engineering ist sehr fehl am Platz. Die Art von Person, die PDBs zum Reverse Engineering verwenden kann, kann einen anständigen Disassembler verwenden, der Anmerkungen unterstützt.
Michael
1
Ich kann sehen, wie lokale Variablennamen in sehr langen Methoden beim Reverse Engineering helfen können, aber Quelldateinamen und Zeileninformationen? Kein wirkliches Risiko im Vergleich zu Tools wie Reflector, wenn Sie mich fragen :)
Lars Truijens
1
@Lars - Ich denke, dass eine andere Möglichkeit, um auszudrücken, was Michael Maddox und ich sagen, darin besteht, dass die Weitergabe der .pdbs an jemanden, der die Assemblys hat, oft kein wirkliches Sicherheitsrisiko darstellt. Es kann sein, dass jemand, der nicht über die Assmeblies verfügt, einen Stack-Trace zur Verfügung stellt.
Michael Burr
11

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.

Michael
quelle
6
Ich glaube, Matt spricht von .Net. Sie können bereits ohne PDB die gesamte Quelle von einem Tool wie Lutz 'Reflector abrufen.
Lars Truijens
@Lars - Mein Kommentar wurde aktualisiert, um darauf hinzuweisen, dass das meiste davon nativer Code ist. Ich denke, viele Leute haben nur eine irrationale Angst, dass PDBs Reverse Engineering ermöglichen, und glauben, dass Angreifer nicht wissen, wie man Disassembler wie IDA Pro einsetzt. Ich glaube, diese Befürchtungen werden auch fälschlicherweise in verwalteten Code eingebracht.
Michael
2

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).

db_
quelle
1
Ich glaube, Matt spricht von .Net. Sie können bereits ohne PDB die gesamte Quelle von einem Tool wie Lutz Reflector abrufen.
Lars Truijens
Lars, ich stimme vollkommen zu, Reflector ist ein großartiges Werkzeug für das Reverse Engineering. Aber manchmal ist der Ergebniscode nicht sehr gut lesbar, insbesondere wenn die Quelle verschleiert wurde. PDB-Dateien machen das Leben noch besser.
db_