10 Stimmen

Tools zum Testen von Software gegen jegliche Angriffe für Programmierer?

In diesen Tagen interessiere ich mich für die Sicherheit von Software. Beim Lesen von Artikeln sehe ich, dass es viele Angriffe gibt und Forscher versuchen, neue Methoden für Software zu entwickeln, um sicherere Systeme zu erhalten.

Es gibt viele erfahrene Programmierer in SO, ich möchte nur lernen, was Sie verwenden, um Ihren Code gegen diese Angriffe zu überprüfen? Gibt es irgendwelche Tools, die Sie verwenden oder ist es Ihnen egal?

Ich habe zum Beispiel von statischer/dynamischer Codeanalyse und Fuzz-Testing gehört.

  • SQL-Injection-Angriffe
  • Cross-Site-Scripting
  • Bufferoverflow-Angriffe
  • Logische Fehler
  • Jegliche Art von Malwares
  • Verdeckte Kanäle
  • ... ...

danke

0 Stimmen

Beantwortet nicht Ihre Frage ... aber ein gutes Papier suif.stanford.edu/papers/usenixsec05.pdf

6voto

Adam Taylor Punkte 7095

Ich werde mich hier auf die Sicherheit von Webanwendungen konzentrieren...

Sie wollen sich wirklich daran gewöhnen, eine Website/Anwendung manuell zu durchforsten und mit verschiedenen Parametern usw. zu spielen, daher sind Proxy-Tools eine große Hilfe (sie ermöglichen es Ihnen, Formulare zu erfassen und mit ihnen zu interagieren, bevor sie den Server erreichen):

LiveHTTPHeader - FireFox-Plugin.
Rülps-Proxy - Java-basiert.

Natürlich gibt es einen Punkt, an dem das manuelle Crawlen einer ganzen Website sehr zeitaufwändig und mühsam wird, und das ist der Punkt, an dem automatisierte Scanning-Tools eine Hilfe sein können.

Schwarzer Kasten:

WebSecurify - Ich habe es nicht benutzt, aber es wurde von einem bekannten Experten für Web-App-Sicherheit entwickelt.
Skipfish - Google hat dies vor kurzem veröffentlicht, so dass es wahrscheinlich einen Blick wert ist.

Außerdem gibt es viele andere kommerzielle Tools: WhiteHat Sentinel, HP Web Inspect und wahrscheinlich viele andere, an die ich mich nicht mehr erinnern kann.

Weißer Kasten:

Ein großer Teil der akademischen Forschung, die ich gesehen habe, bezieht sich auf statische Code-Analyse-Tools; ich habe keine verwendet, weil sie sich alle nur auf PHP konzentrierten und einige Einschränkungen hatten.

Andere Ressourcen:

ha.ckers.org - großartiger Blog mit einem aktiven Forum zum Thema Web App Sec. OWASP - Wie bereits erwähnt, gibt es hier eine Menge aufschlussreicher Artikel, Leitfäden und Anleitungen.

Wenn Sie mehr über manuelle Angriffe auf Websites erfahren möchten, können Sie die Verdammt anfällige Web-App ist ein schönes Lernprojekt. Damit meine ich, dass es sich um eine Webanwendung handelt, die absichtlich unsicher geschrieben wurde, damit Sie Ihr Wissen über die Sicherheitsschwachstellen von Webanwendungen legal testen können.

Für meine Dissertation im dritten Jahr schrieb ich einen Blackbox-Scanner in Perl, was ein recht interessantes Projekt war. Wenn man selbst etwas bauen wollte, bestand es eigentlich nur aus:

  • Raupenfahrzeug
  • Parser
  • Angreifer

2voto

Mark Byers Punkte 761508

Etwas, das Sie nicht erwähnt haben, das ich aber für wichtig halte: Code-Reviews.

Wenn man nur versucht, etwas so schnell wie möglich zu implementieren, kann man leicht ein Sicherheitsproblem übersehen. Ein zweites Paar Augen kann viele Probleme oder potenzielle Probleme erkennen, vor allem wenn der Prüfer Erfahrung im Aufspüren typischer Sicherheitslücken hat.

Ich glaube, dass es in vielen Fällen möglich ist, manuelle Code-Reviews ohne spezielle Werkzeuge durchzuführen. Setzen Sie sich einfach gemeinsam an einen Computer oder drucken Sie den Code aus und führen Sie die Überprüfung auf dem Papier durch. Aber da Sie speziell nach Tools gefragt haben, ist ein Tool, das bei der manuellen Codeüberprüfung hilft Rietveld . Ich habe es nicht selbst benutzt, aber es basiert auf denselben Ideen, die intern bei Google verwendet werden (und wurde von demselben Mann geschrieben, der zufällig auch der Autor von Python ist).

1voto

Pascal Thivent Punkte 548176

Sicherheit ist auf jeden Fall ein Thema, und die Entwickler sollten zumindest die gängigen Schwachstellen kennen (und wissen, wie sie diese vermeiden können). Hier sind einige Ressourcen, die ich interessant finde:

1voto

flpmor Punkte 861

Es gibt 2 Arten von Softwarefehlern, die Sicherheitsprobleme verursachen können: Implementierungsfehler und Entwurfsfehler.

Implementierungsfehler treten in der Regel in einem bestimmten Bereich des Codes auf, sie sind relativ leicht zu erkennen und (in der Regel) nicht allzu kompliziert zu beheben. Sie können (die meisten) dieser Fehler mit automatisierten Tools zur statischen Codeanalyse (Tools wie Fortify oder Ounce) aufspüren, obwohl diese Tools teuer sind. Dennoch sollten Sie nicht vergessen, dass es keine "Silberkugeln" gibt und dass Sie sich nicht blind auf die Ergebnisse des Tools verlassen können, ohne eine manuelle Codeüberprüfung durchzuführen, um das tatsächliche Risiko hinter den vom Tool gemeldeten Problemen zu bestätigen bzw. zu verstehen.

Das andere Problem sind Konstruktionsfehler, das ist eine andere Geschichte. Dabei handelt es sich in der Regel um komplexe Probleme, die nicht auf einen Fehler im Code zurückzuführen sind, sondern auf eine schlechte Wahl bei der Gestaltung oder Architektur der Anwendung. Diese können nicht durch ein automatisiertes Tool erkannt werden, sondern nur manuell durch eine Überprüfung von Code, Design und Architektur. Sie sind in der Regel sehr schwer und teuer zu beheben, wenn die Entwurfsphase vorbei ist.

Ich empfehle daher, Ihren Code auf Implementierungsfehler zu überprüfen, die sich auf die Sicherheit auswirken können (Codeüberprüfung mit automatisierten Tools wie Fortify/Ounce + manuelle Überprüfung der Tool-Ergebnisse), und Ihren Entwurf auf Sicherheitsmängel zu überprüfen (dafür gibt es keine Tools, das muss von jemandem gemacht werden, der sich mit Sicherheit auskennt).

Eine gute Lektüre über Softwaresicherheit und die Komplexität der Entwicklung sicherer Software finden Sie unter Software-Sicherheit: Building Security In, von Gary McGraw ( Amazonas-Link )

1voto

rook Punkte 64487

Ich verwende Tools, um bei der Suche nach Schwachstellen zu helfen, aber man kann nicht einfach irgendeinen Test abfeuern und annehmen, dass alles in Ordnung ist. Wenn ich ein Projekt prüfe, sehe ich mir den Code an und versuche, ein Gefühl für den Stil und die Fähigkeiten des Programmierers zu bekommen. Wenn der Code unordentlich aussieht, dann ist er wahrscheinlich ein Anfänger und wird wahrscheinlich Anfängerfehler machen.

Es ist wichtig, sicherheitsrelevante Funktionen in einem Projekt zu identifizieren und sie manuell zu prüfen. Tamperdata ist sehr hilfreich für die manuelle Prüfung und die Entwicklung von Exploits, da Sie benutzerdefinierte http-Anfragen erstellen können. Ein gutes Beispiel für die manuelle Prüfung von PHP ist: Verwenden sie mysql_real_escape_string($var) oder verwenden sie htmlspecialchars($var,ENT_QUOTES) um Sql-Injection zu stoppen? (ENT_QUOTES verhindert keine Backslashes, die genauso gefährlich sind wie Anführungszeichen für mysql, mssql ist eine andere Geschichte). Sicherheitsfunktionen sind auch Orte, an denen "Logikfehler" auftauchen können, und kein Tool wird in der Lage sein, dies zu erkennen; dies erfordert eine manuelle Prüfung.

Wenn Sie Webanwendungen testen, dann Acunetix ist das beste Testwerkzeug, das Sie verwenden können. Wapiti ist eine sehr gute Open-Source-Alternative. Allerdings kann jedes Tool unsachgemäß verwendet werden. Bevor Sie eine Webanwendung testen, stellen Sie sicher, dass die Fehlerberichterstattung eingeschaltet ist, und stellen Sie auch sicher, dass Sie keine Sql-Fehler unterdrücken, z. B. mit einem try/catch.

Wenn Sie eine automatisierte statische Codeanalyse für Schwachstellen wie Buffer Overflows durchführen, dann Coverity ist das beste Werkzeug, das Sie verwenden können (Fortify ist fast identisch mit Coverity). Coverity kostet Zehntausende von Dollar, aber große Namen wie das Department of Homeland Security verwenden es. RATTEN ist eine quelloffene Alternative, obwohl Coverity ein weitaus komplexeres Werkzeug ist. Beide Tools produzieren eine Menge falsch positiver und falsch negativer Ergebnisse. RATS sucht nach unangenehmen Funktionsaufrufen, prüft aber nicht, ob sie noch sicher sind. So meldet RATS jeden Aufruf von strcpy(), strcat(), sprintf(), die aber sicher sein können, wenn Sie z. B. nur statischen Text kopieren. Das bedeutet, dass man sich durch eine Menge Mist wühlen muss, aber wenn man eine Peer Review macht, hilft RATS sehr, indem es die manuelle Suche einschränkt. Wenn Sie versuchen, eine einzelne ausnutzbare Schwachstelle in einer großen Codebasis wie Linux zu finden, dann wird Rats nicht viel helfen.

Ich habe Coverity benutzt und das Verkaufsteam behauptet, dass es "****ALL**** Schwachstellen in Ihrem Code aufspürt". Aber ich kann Ihnen aus erster Hand sagen, dass ich Vanilla-Stack-basierte Pufferüberläufe gefunden habe mit Pfirsich die Coverity nicht entdeckt hat. (RATS hat diese Probleme jedoch erkannt, zusammen mit 1.000+ anderen Funktionsaufrufen, die sicher waren...) Wenn Sie eine sichere Anwendung wollen oder einen ausnutzbaren Pufferüberlauf finden wollen, dann ist Peach das Plattform-Tool, das Sie verwenden können, um die Werkzeuge zu bauen, die Sie brauchen.

Wenn Sie nach exotischeren Speicherkorruptionsproblemen wie z.B. Dangling Pointers suchen, dann Valgrind wird helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X