2010-12-12 6 views
9

Es gibt viele Gründe, warum Apps nicht im debug = "true" -Modus (good rundown from Scott Gu) ausgeführt werden sollten, aber gibt es irgendwelche Angriffsvektoren, die durch diese Vorgehensweise aufgedeckt werden? Es ist keine Frage von "sollten Sie oder sollten Sie nicht", so viel ist klar, es ist eine Frage, ob es irgendwelche spezifischen Schwachstellen einführt.Gibt es ein Sicherheitsrisiko beim Ausführen von Web-Apps in debug = "true"?

Ich bin geneigt zu denken, dass die Fähigkeit zu remotely detect it kombiniert mit den bekannten Leistungsproblemen zu einem Exploit gegen die Verfügbarkeit von Diensten führen kann, aber ich möchte etwas ein wenig genauer. Kennt jemand einen bestimmten Angriff, der gegen eine App orchestriert werden kann, auf der debug = "true" ausgeführt wird?

+1

Warum fragen Sie das nicht auf der [SecuritySE] (http://security.stackexchange.com/)? – AviD

+0

Guter Punkt, ich habe nicht ursprünglich dort, da ich dachte, dass ich die Antwort hier bekommen würde. Ich habe eine Kopie über gesendet: http://security.stackexchange.com/questions/1180/is-there-a-security-risk-running-web-apps-in-de-debug-true –

+0

Ich habe FULL Verbindungszeichenfolgen gesehen (einschließlich Passwörtern) in der Vergangenheit, wo die Anwendung im Debug-Modus ausgeführt wurde, waren benutzerdefinierte Fehler ausgeschaltet und die Verbindung fehlgeschlagen - in diesem Fall nicht wegen eines Problems mit dem Datenbankserver, aber wenn ein anderer Server als einziger DNS-Server für die Gastgeber wurde außer Dienst gestellt. Die Aktivierung des Debug-Modus erhöht das Risiko der Offenlegung sensibler interner Anwendungsinformationen erheblich, aber das wussten Sie bereits. Ich mag die Analogie mit Abstürzen, die nicht von einem Ereignis verursacht werden, sondern von einer Serie, die zusammen das (oft tragische) Ergebnis liefert. – pwdst

Antwort

5

Ich hatte einige interessante Rückmeldungen zu dieser Frage, insbesondere über die Security Stack Exchange. Es gab viele Reaktionen im Zusammenhang mit Stack-Traces (ein benutzerdefiniertes Fehlerproblem, kein Debug-Problem) und Performance (nicht [direkt] ein Sicherheitsproblem). Die überzeugendste Antwort ist, dass bedingte Kompilierungskonstanten (#if DEBUG ...) zu unerwartetem Verhalten führen können, aber dies wiederum ist eher ein Funktionsrisiko (unbeabsichtigter Code wird in einer Live-Umgebung ausgeführt) als ein Sicherheitsrisiko .

Ich vermute, dass der Debug-Modus einige Pfade zu anderen Exploits öffnen kann, basierend auf dem Leistungsaufwand, den er auf die App ausübt, und der Möglichkeit, ihn remote zu erkennen (möglicherweise Servicekontinuitätsrisiko). Ich habe meine Schlussfolgerungen als Teil von OWASP Top 10 for .NET developers part 6: Security Misconfiguration geschrieben.

Also der Vollständigkeit halber scheint die Antwort zu sein, dass es kein klares Sicherheitsrisiko im Debug-Modus gibt, aber es ist sicherlich keine gute Idee für Produktions-Apps angesichts der oben genannten Faktoren.

3

Das hängt etwas davon ab, welcher Code von DEBUG-bedingten Kompilierungen umgeben ist.

Haben Sie Debug-Code, der ausgenutzt werden könnte? Es ist nicht unüblich, die "care blanche" admin Berechtigungen zu finden, die im Debug-Modus gegeben werden ...

Wenn Sie null Debug nur Code haben, dann ist die einzige Sache, die ich denken kann möglicherweise zu viel Stapel Fehlerinformationen in Web-Fehler Berichte.

Der Punkt ist etwas problematisch, wenn Ihre Anwendung über eine gute (konfigurierbare) Protokollierung verfügt, z. B. log4Net.

+0

Guter Punkt, obwohl man argumentieren könnte, dass es mehr um Schwachstellen in der bedingten Logik in der App geht als um eine Schwachstelle im Debug-Modus an sich. Die Frage bezieht sich nicht auf eine bestimmte App, es ist eine allgemeine Frage, ob es sich bei debug nur um ein Perf-Problem oder um ein potenzielles Sicherheitsproblem handelt. –

+0

@Troy Hunt: Stimmt, aber sie gehen Hand in Hand. Ich nehme an, das wäre Teil eines Code Reviews ... –

0

Ich denke, Sie sollten alle Debugging-Operationen auf eine benutzerdefinierte Konsole übertragen, um Debugging-Hinweise zu verhindern, die Angreifer in die Lage versetzen, Sicherheitslücken in Ihrer App zu missbrauchen.

Verwandte Themen