Frage

in diesen Tagen, ich interessiere mich für software-Sicherheit.Als ich die Zeitung Lesen sehe ich, dass es viele Angriffe und Forscher versuchen zu erfinden, neue Methoden für die Software zu erhalten, mehr sicherer Systeme.

diese Frage kann einen Allgemeinen, einschließlich aller Arten von Angriffen.Hier sind viele erfahrene Programmierer, ALSO, ich möchte nur lernen, was Sie verwenden, um überprüfen Sie Ihren code gegen diese Angriffe ?Gibt es irgendwelche tools, die Sie verwenden oder die Sie nicht interessieren ?

Zum Beispiel hörte ich über statische/dynamische code-Analysen und Tests.

  • SQL-injection-Angriffe
  • Cross-Site-Scripting
  • Bufferoverflow-Angriffe
  • Logische Fehler
  • Jede Art von Malware
  • Verdeckte Kanäle
  • ... ...

vielen Dank

War es hilfreich?

Lösung

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

Wirklich, Sie möchten sich daran gewöhnen, eine Website/Anwendung manuell zu durchlaufen und mit verschiedenen Parametern usw. zu spielen. Proxy -Tools sind also von großer Hilfe (sie ermöglichen es Ihnen, Formulare zu erfassen und mit ihnen zu interagieren, bevor sie den Server erreichen):

LiveHttpheaders - Firefox -Plugin.
Burp -Proxy - Java basiert.

Offensichtlich gibt es einen Punkt, an dem man sich manuell krochet, dass eine ganze Website zeitaufwändig/langweilig wird, und hier können automatisierte Scan -Tools hilfreich sein.

Flugschreiber:

WebSecurify - Nicht benutzt, aber es wurde von einem bekannten Web -App -Sicherheitsanlagen erstellt.
Überspringen - Google hat dies kürzlich veröffentlicht, also ist es wahrscheinlich einen Blick wert.

Und es gibt viele andere kommerzielle Tools: Whitehat Sentinel, HP Web Inspect und wahrscheinlich viele andere, an die ich mich nicht erinnern kann.

Weiße Kiste:

Ein Großteil der akademischen Forschung, die ich gesehen habe, bezieht sich auf statische Tools für Codeanalysen. Ich habe keine verwendet, weil sie sich alle nur auf PHP konzentriert haben und einige Einschränkungen hatten.

Andere Ressourcen:

ha.ckers.org - Toller Blog mit einem aktiven Forum in Bezug auf Web App Sec.Owasp - Wie deutlich erwähnt, gibt es hier viele aufschlussreiche Artikel/Leitfäden/Tutorials.

Wenn Sie mehr über manuell angreifende Websites selbst erfahren möchten, die Verdammte verletzliche Web -App ist ein schönes Lernprojekt. Damit meine ich, es handelt sich um eine Webanwendung, die so geschrieben wird, dass Sie absichtlich unsicher sind, sodass Sie Ihr Wissen über Sicherheitslücken für Webanwendungen legal testen können.

Ich schrieb einen Black Box -Scanner in Perl für meine Dissertation im dritten Jahr, die ein ziemlich interessantes Projekt war. Wenn Sie selbst etwas bauen wollten, bestand es wirklich nur aus:

  • Crawler
  • Parser
  • Angreifer

Andere Tipps

Etwas, das Sie nicht erwähnt haben, aber ich denke, wichtig: Code -Bewertungen.

Wenn Sie nur versuchen, etwas so schnell wie möglich zu implementieren, ist es einfach, ein Sicherheitsproblem zu übersehen. Ein zweites Augenpaar kann viele Probleme oder potenzielle Probleme auf sich nehmen, insbesondere wenn der Rezensent beim Erkennen typischer Sicherheitslöcher erlebt.

Ich glaube, dass es in vielen Fällen möglich ist, manuelle Codebewertungen ohne spezielle Tools durchzuführen. Setzen Sie sich einfach zusammen am selben Computer oder drucken Sie den Code sogar aus und führen Sie die Überprüfung in der Papierkopie aus. Da Sie jedoch speziell nach Tools gefragt haben, ist ein Tool zur Unterstützung der manuellen Codeüberprüfung Rietveld. Ich habe es selbst nicht benutzt, aber es basiert auf den gleichen Ideen, die intern bei Google verwendet werden (und von demselben Mann geschrieben, der auch der Autor von Python ist).

Sicherheit ist definitiv ein Problem und Entwickler sollten sich zumindest der allgemeinen Schwachstellen bewusst sein (und wie man sie vermeidet). Hier sind einige Ressourcen, die ich interessant finde:

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

Implementierungsfehler erscheinen normalerweise in einem bestimmten Bereich im Code, sie sind relativ leicht zu erkennen und (normalerweise) nicht zu kompliziert, um sie zu beheben. Sie können (die meisten) mit automatisierten Tools erkennen, die eine statische Codeanalyse durchführen (Tools wie Verstärkung oder Unze), obwohl diese Tools teuer sind. Vor diesem Hintergrund müssen Sie sich noch daran erinnern, dass es keine "Silberkugeln" gibt und Sie sich nicht nur auf die Toolausgabe verlassen können, ohne dass eine manuelle Codeüberprüfung das tatsächliche Risiko für die Probleme, die die Toolberichte haben, zu bestätigen/zu verstehen.

Das andere Problem sind Designfehler, das ist eine andere Geschichte. Es handelt sich normalerweise um komplexe Probleme, die keine Folge eines Fehlers im Code haben, sondern eine schlechte Auswahl in der Gestaltung oder Architektur der Anwendung. Diese können nicht durch ein automatisiertes Tool identifiziert werden und können wirklich nur manuell durch einen Code-/Design-/Architektur -Überblick erkannt werden. Sie sind normalerweise sehr hart und teuer, um die Entwurfsphase zu beheben.

Ich empfehle daher, Ihren Code für 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 Toolergebnisse) und die Überprüfung Ihres Designs für Sicherheitsfehler (keine Tools dafür, müssen durchgeführt werden, müssen erledigt werden von jemandem, der über Sicherheit weiß).

Für eine gute Lektüre über die Softwaresicherheit und die Komplexität hinter dem Entwerfen sicherer Software finden Sie die Softwaresicherheit: Erstellen von Sicherheit in, von Gary McGraw (Amazon Link)

Ich benutze Werkzeuge, um Hilfe bei der Jagd nach Schwachstellen, aber Sie können nicht nur das Feuer aus einigen test-und nehme an, alles ist okay.Wenn ich auditing eines Projekts schaue ich mir den code und ich versuche, und bekommen ein Gefühl für den Programmierer Stil und skill-level.Wenn der code sieht chaotisch, dann stehen die Chancen sind Sie ein Anfänger, und Sie werden wahrscheinlich machen Anfänger Fehler.

Es ist wichtig zu ermitteln, sicherheitsrelevante Funktionen in einem Projekt und manuell audit Sie. Tamperdata ist sehr hilfreich für die manuelle überwachung und exploit-Entwicklung, denn Sie können erstellen Sie benutzerdefinierte http-Anfragen.Ein gutes Beispiel für die manuelle überwachung für PHP:Verwenden Sie mysql_real_escape_string($var) oder sind Sie mit htmlspecialchars($var,ENT_QUOTES) beenden Sie sql-injection?(ENT_QUOTES nicht aufhören, backslashes, die nur so gefährlich, wie die Anführungszeichen für mysql, mssql ist eine andere Geschichte.) Security-Funktionen sind auch Plätze für "Logik-Fehler" zu beschneiden oben und kein Werkzeug ist in der Lage sein, dies zu erkennen, erfordert dies die manuelle überwachung.

Wenn Sie das tun, web-Anwendung testen, dann Acunetix die beste Test-tool, die Sie verwenden können. Wapiti ist ein sehr gutes open-source-alternative.Obwohl jedes Werkzeug kann verwendet werden, nicht ordnungsgemäß.Bevor Sie eine web-Anwendung testen, stellen Sie sicher, dass die Fehlerberichterstattung aktiviert ist, und auch machen sicher, Sie sind nicht unterdrücken sql-Fehler, wie mit einer try/catch.

Wenn Sie das tun, Automatisierte Statische Code-Analyse, um Schwachstellen wie Buffer Overflows dann Coverity ist das beste Werkzeug, das Sie verwenden können(Stärken ist fast identisch mit Coverity).Coverity Kosten Zehntausende von Dollar, aber die großen Namen, wie das Department Of Homeland Security verwendet. RATTEN ist ein open-source-alternative, obwohl Coverity ist weitaus komplexer, ein Werkzeug.Diese beiden tools werden produzieren eine Menge von false positives und false negatives.RATTEN sieht für die Fiese Funktion Aufrufe, aber nicht sieht, wenn seine immer noch sicher.So RATTEN-Bericht wird jeden Aufruf von strcpy() strcat() sprintf(), aber diese können sicher sein, wenn zum Beispiel sind Sie einfach zu kopieren statischen text.Dies bedeutet, dass Sie haben zu Graben, obwohl eine Menge Mist, aber wenn Sie tun, eine peer-review-dann RATTEN hilft viel durch die Verengung der manuellen Suche.Wenn Sie sind versuchen zu finden, eine einzige ausnutzbare Sicherheitsanfälligkeit in einer großen code-Basis wie Linux, dann Ratten ist nicht zu helfen, viel.

Ich habe verwendet, Coverity und Ihr sales-team wird behaupten, es wird "erkennen **** * * * ALLE**** Schwachstellen in Ihrem code-Basis." Aber ich kann Ihnen sagen, aus Erster hand Erfahrung, die ich gefunden Vanille-stack-basierte buffer overflows mit peach das Coverity nicht erkennen.(RATTEN führte jedoch heben diese Probleme, zusammen mit 1.000+ andere Funktion aufruft, dass, wo sicher...), Wenn Sie möchten eine sichere Anwendung oder Sie wollen finden einem ausnutzbaren Pufferüberlauf dann Pfirsich, ist die Plattform Werkzeug, das Sie verwenden können, zu bauen, die Werkzeuge, die Sie brauchen.

Wenn Sie sind auf der Suche nach mehr exotischen Speicher Korruption Themen wie Baumelnde Zeiger dann Valgrind helfen.

Es gibt eine Reihe von Sicherheitsscannern von Webanwendungen auf dem Markt

Schauen Sie sich diese Liste an:

WASC - Webanwendungssicherheits -Scannerliste und Netsparker Community Edition : Welches ist die kostenlose Version von Netsparker.

Ein Tool weiß nicht, ob Ihr Code unsicher ist.

Nur du tust (und die Angreifer).

Bestenfalls wird das Tool ein paar Schwachstellen eines Typs in Ihrem Code erkennen und Sie erkennen, dass Sie nie vor dieser Art von Sicherheitsanfälligkeit geschützt sind.

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