
Sicherheitsorientierte statische Analyse für das Phoenix Framework
Sobelow ist ein sicherheitsorientiertes statisches Analysetool für Elixir und das Phoenix-Framework. Für Sicherheitsforscher ist es ein nützliches Werkzeug, um schnell einen Überblick über interessante Punkte zu erhalten. Für Projektbetreuer kann es verwendet werden, um die Einführung einer Reihe häufiger Sicherheitslücken zu verhindern.
Derzeit erkennt Sobelow einige Arten der folgenden Sicherheitsprobleme:
Potenzielle Schwachstellen werden je nach Sicherheitsvertrauen in verschiedenen Farben markiert. Hohes Vertrauen ist rot, mittleres Vertrauen ist gelb und geringes Vertrauen ist grün.
Ein Fund wird normalerweise als "geringes Vertrauen" markiert, wenn es so aussieht, als ob eine Funktion unsicher verwendet werden könnte, aber nicht zuverlässig festgestellt werden kann, ob die Funktion benutzereingegebene Daten akzeptiert. D.h. Wenn ein Fund grün markiert ist, kann er möglicherweise kritisch unsicher sein, erfordert jedoch eine gründlichere manuelle Überprüfung.
Hinweis: Dieses Projekt befindet sich in ständiger Entwicklung, und mit der Zeit werden zusätzliche Schwachstellen markiert. Wenn Sie auf einen Fehler stoßen oder zusätzliche Funktionen oder Sicherheitsprüfungen anfordern möchten, öffnen Sie bitte ein Issue!
Um Sobelow zu verwenden, können Sie es zu den Abhängigkeiten Ihrer Anwendung hinzufügen.
def deps do
[
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}
]
end
Sie können Sobelow auch global installieren, indem Sie Folgendes in der Befehlszeile ausführen:
$ mix escript.install hex sobelow
Um vom Master-Branch statt der neuesten Version zu installieren, kann der folgende Befehl verwendet werden:
$ mix escript.install github nccgroup/sobelow
Nach der Installation besteht die einfachste Möglichkeit, ein Phoenix-Projekt zu scannen, darin, Folgendes aus dem Stammverzeichnis des Projekts auszuführen:
$ mix sobelow
Hinweis: Alle Pfadargumente sollten absolute Pfade oder relativ zum Anwendungsstammverzeichnis sein.
--root oder -r - Gibt das Stammverzeichnis der Anwendung an. Akzeptiert ein Pfadargument, z.B. ../my_project.
--verbose oder -v - Gibt Codeausschnitte und zusätzliche Funddetails aus.
--ignore oder -i - Ignoriert angegebene Fundtypen. Akzeptiert eine durch Kommas getrennte Liste von Modulnamen, z.B. XSS.Raw,Traversal.
--ignore-files - Ignoriert Dateien. Akzeptiert eine durch Kommas getrennte Liste von Dateinamen, z.B. config/prod.exs.
--details oder -d - Ruft Details zu einem Fundtyp ab. Akzeptiert einen einzelnen Modulnamen, z.B. Config.CSRF.
Sobelow ermöglicht es Benutzern, häufig verwendete Optionen in einer Konfigurationsdatei zu speichern. Wenn Sie beispielsweise ständig Folgendes ausführen:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
Sie können das Flag --save-config verwenden, um Ihre Konfigurationsdatei .sobelow-conf zu erstellen:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
Dieser Befehl erstellt die Datei .sobelow-conf im Stammverzeichnis Ihrer Anwendung. Sie können diese Datei direkt bearbeiten, um Änderungen vorzunehmen.
Sie können den Befehl auch ohne Optionen ausführen:
$ mix sobelow --save-config
Wenn Sie dieses Paket zum ersten Mal verwenden, wird die generierte Konfigurationsdatei mit den Standardwerten für jede Option gefüllt. (Dies hilft, das Paket schnell in eine bestehende Codebasis zu integrieren.)
Wenn Sie Sobelow nun mit der gespeicherten Konfiguration ausführen möchten, können Sie Sobelow mit dem Flag --config ausführen.
$ mix sobelow --config
Sobelow bevorzugt Überberichterstattung gegenüber Unterberichterstattung. Daher können bei einem typischen Scan eine Reihe von Falschpositiven auftreten. Diese Funde können einzeln ignoriert werden, indem ein Kommentar # sobelow_skip zusammen mit einer Liste von Modulen vor der Funktionsdefinition hinzugefügt wird.
# sobelow_skip ["Traversal"]
def vuln_func(...) do
...
end
Bei der Integration von Sobelow in ein neues Projekt kann es eine große Anzahl von Falschpositiven geben. Um alle gedruckten Funde als falsch positiv zu markieren, führen Sie Sobelow mit dem Flag --mark-skip-all aus.
Sobald Sie die entsprechenden Funde markiert haben, führen Sie Sobelow mit dem Flag --skip aus.
$ mix sobelow --skip
Während Kommentare # sobelow_skip nur Funde auf Funktionsebene markieren können (und daher nicht zum Überspringen von Konfigurationsproblemen verwendet werden können), kann das Flag --mark-skip-all verwendet werden, um jeden Fundtyp zu überspringen.
Fundkategorien sind in Module unterteilt. Diese Module können dann verwendet werden, um entweder Klassen von Funden zu ignorieren (über die Optionen ignore und skip) oder um Schwachstellendetails zu erhalten (über die Option details).
Diese Liste und andere hilfreiche Informationen finden Sie in der Befehlszeile:
$ mix help sobelow
Um Sobelow mit einem einzigen Befehl gegen alle untergeordneten Apps in einer Umbrella-App auszuführen, können Sie einen Alias für sobelow in Ihrer Stammdatei mix.exs hinzufügen:
defp aliases do
[
sobelow: ["cmd mix sobelow"]
]
end
Wenn Sie Konfigurationsdateien in einer Umbrella-App verwenden möchten, erstellen Sie ein .sobelow-conf in jeder untergeordneten Anwendung und verwenden Sie das Flag --config.
Beim Scannen eines Projekts sucht Sobelow gelegentlich nach Updates und gibt eine Warnung aus, wenn eine neue Version verfügbar ist. Sobelow verfolgt die letzte Update-Prüfung, indem es eine .sobelow-Datei im Stammverzeichnis des gescannten Projekts erstellt.
Wenn diese Funktionalität nicht gewünscht ist, kann das Flag --private mit dem Scan verwendet werden.
--all-details - Ruft Details zu allen Fundtypen ab.
--private - Überspringt Update-Prüfungen.
--router - Gibt den Router-Standort an. Dies muss nur verwendet werden, wenn der Router-Standort nicht dem Standard entspricht. Akzeptiert ein Pfadargument, z.B. my/strange/router.ex.
--exit - Gibt einen Exit-Status ungleich Null bei oder oberhalb eines Vertrauensschwellenwerts von low, medium oder high zurück. Standardmäßig false, was einen Exit-Status von Null zurückgibt.
--threshold - Gibt Funde mit einem Vertrauensniveau von low (Standard), medium oder high oder höher zurück.
--format oder -f - Gibt das Ausgabeformat der Funde an. Akzeptiert ein Format, z.B. txt oder json.
Beachten Sie, dass Optionen wie --verbose mit dem json-Format nicht funktionieren. Alle Funde im json-Format enthalten einen type-, file- und line-Schlüssel. Andere Schlüssel können variieren.
--quiet - Gibt eine einzelne Zeile mit der Anzahl der Funde zurück. Andernfalls wird keine Ausgabe zurückgegeben, wenn es keine Funde gibt.
--compact - Minimale, einzeilige Funde mit farbiger Ausgabe je nach Vertrauensniveau.
--flycheck - Minimale, einzeilige Funde, die mit flycheck-basierten Tools kompatibel sind.
--save-config - Generiert eine Konfigurationsdatei basierend auf Befehlszeilenoptionen. Weitere Informationen finden Sie unter Configuration Files.
--config - Führt Sobelow mit einer Konfigurationsdatei aus. Weitere Informationen finden Sie unter Configuration Files.
--mark-skip-all - Markiert alle angezeigten Funde als überspringbar.
--clear-skip - Löscht die durch --mark-skip-all erstellte Konfiguration.
--skip - Ignoriert Funde, die zum Überspringen markiert wurden. Weitere Informationen finden Sie unter False Positives.
--version - Gibt die aktuelle Version von Sobelow aus. Dies ist nützlich für CI-Schritte oder die Integration mit anderen Tools wie Salus.