Was ist das Risiko Debug-Symbole für die Bereitstellung (PDB-Datei) in einer Produktionsumgebung?

StackOverflow https://stackoverflow.com/questions/1307482

Frage

Ich habe eine Anwendung, die Ausnahme Strack Spuren protokolliert und ich wollte die Stack Spuren Dateinamen und Zeilennummern enthalten, wenn in der Produktion eingesetzt. Ich habe herausgefunden, wie die Debug-Symbole w / die Baugruppe bereitstellen, aber in dem Prozess die Frage der Erforschung Ich lief quer durch diese Frage , die, dass es nicht eine gute Idee, umfasst pDB-Dateien in einer Produktionsumgebung impliziert. Ein Kommentar zu der akzeptierten Antwort sagt: „... Debug-Informationen können sensible Daten weggeben und einen Angriffsvektor sein. Je nachdem, was Ihre Anwendung ist.“

Also, welche Art von sensiblen Daten könnten ausgesetzt werden? Wie können Debug-Symbole verwendet werden, um eine Anwendung zu beeinträchtigen? Ich bin gespannt auf die technischen Details, aber was ich wirklich bin auf der Suche nach ist ein praktischer Weg, um die Gefahr des Einschlusses von Debug-Symbolen für jede gegebene Anwendung und Produktionsumgebung zu bewerten. Oder anders ausgedrückt:? Was ist das Schlimmste, was passieren könnte

EDIT: Follow-up-Frage / Klarstellung

So basierten Antworten auf jedem so weit, wie es scheint, diese Frage kann ein wenig für .NET-Anwendungen vereinfacht werden. Dieses Bit aus dem John Robbins Blog in Michael Maddox Antwort Art sprang von mir aus:

  

Eine .NET PDB enthält nur zwei Stücke   Informationen, die Quelldateinamen und   ihre Linien und die lokale Variable   Name. Alle anderen Informationen   bereits in den .NET-Metadaten so gibt   ist nicht erforderlich, das gleiche zu duplizieren   Informationen in einer PDB-Datei.

Für mich wiederholt das, was andere über Reflector gesagt, mit der Implikation, dass das eigentliche Problem Zugang zu der Baugruppen ist. Sobald das bestimmt worden ist, die einzige Entscheidung in Bezug auf PDBs zu machen, ist, ob Sie kümmern Dateinamen über aussetzt, Zeilennummern und lokale Variablennamen (unter der Annahme, dass Sie nicht Stapel zeigen Spuren Benutzer zu Ende zu beginnen). Oder habe ich diese zu viel zu stark vereinfacht?

War es hilfreich?

Lösung

Hier ist eine andere Frage, zu betrachten:

Sind es Sicherheitsprobleme, die PDB Debug-Dateien auf den Live-Servern zu verlassen?

Und weitere Informationen über PDB-Dateien:

PDB-Dateien: Was muss jeder Entwickler wissen

Im Allgemeinen ich immer auch PDB-Dateien in meinen Installationen, die Gewinne zu groß sind, zu ignorieren.

Wenn Sie noch nie einen Stack-Trace an den Benutzer aussetzen (und soll generell nicht), es nicht wirklich zusätzliches Sicherheitsrisiko für die Bereitstellung von PDB-Dateien ist.

Wenn ein Benutzer sichtbar Stack-Trace geschieht, kann der Benutzer den vollständigen Stack-Trace einschließlich Ihren Dateinamen und Zeilennummern sehen. Dies könnte ihnen eine Vorstellung davon geben, wie Ihre App architected die möglicherweise ihnen, wenn Hacker helfen würde.

Eine größere Bedrohung für die Sicherheit ist so etwas wie Reflector die, wenn sie auf Ihrem DLLs verwendet werden es ihnen ermöglichen, den Quellcode, mit oder ohne pDB-Dateien anzuzeigen.

Andere Tipps

Wenn Sie sich zu einer Produktion environement in der eigenen Organisation bereitstellen, dann ist es kein Sicherheitsproblem.

Wenn Sie Ihre Software an andere Unternehmen zu verkaufen, dann PDB-Datei jemand interessiert sich für Reverse-Engineering-up ein Bein geben kann -., Die kein Problem für Sie sein kann oder

Allerdings (klar sein), möchten Sie nicht Ihre Stack-Traces auf dem Client angezeigt werden - ob die .pdbs zur Verfügung stehen. Aber wenn Sie nur die Spuren der Anmeldung und eine ‚ziemlich‘ Fehlerseite an den Client zu präsentieren, ist es kein Problem.

Mit dem Debug-Symbolen kann ein Angreifer globale Variablen bestimmt, Funktionsverschiebungen usw. von Interesse.

So ist er Ihr System sehen kann, eine Funktion wie:

AddAdminUser(string name, string password);

Und wissen seine Offset. Wenn Ihr Programm gefährdet ist, könnte er diese Funktion aufrufen, sich Administratorrechte zu geben.

oder so etwas wie:

typedef enum {Basic, NTLM} AuthenticationMode;
AuthenticationMode g_authenticationMode;

Und weiß, was Flip biss Ihre Anwendung in einem unsicheren Modus zu wechseln.

Alternativ würde dies einiges an Reverse-Engineering-Zeit, um herauszufinden. Kein unüberwindbares Menge an Zeit, aber.

Aber. . . Dies bedeutet, den Angreifer ist bereits in einer Position, wo er das Programm gefährden kann. Wenn das der Fall ist, haben Sie bereits verloren.

Wenn Sie ein gutes Geschäft Grund haben pdb Symbole zu implementieren, gehen Sie voran. HVE der Einsatz von nicht Sie unsicher machen. Wenn Sie nicht einen guten Grund haben zu implementieren, sollten Sie dies nicht tun, wie es Angriffe etwas leichter machen wird.

Sie können auch öffentliche PDB-Dateien erstellen - diese Streifen bestimmten Informationen, sondern geben Ihnen genug Symbole einen Stack-Trace zu erzeugen und grundlegendes Debugging zu tun. Details sind hier . Microsoft öffentlichen HVE der auf seinem Symbol Server setzt für alle zu nutzen.

EDIT: Das meiste, was ich sagte zu den Anliegen gilt um HVE der für nativen Code bereitstellen - ich glaube, viele dieser Sorgen über Menschen tragen auch .NET, obwohl Montage Metadaten bereits einiges an diese vermittelt <. / p>

Jemand kann „wiederherstellen“ den vollständigen Quellcode der Anwendung. Wenn es Open Source ist brauchen Sie sich keine Sorgen machen. Wenn es einige IP (Algorithmen, Schutz, Lizenzen) hat, ist es wahrscheinlich keine gute Idee.

Es ist wahr, dass Werkzeuge wie Reflector Teile des Codes auch ohne PDB-Dateien rekonstruieren können, aber Verschleierungen können helfen (gut, nur ein wenig).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top