
Ein Projekt-Sicherheits-/Schwachstellen-/Risikoscanning-Tool
Es gibt heutzutage modernere Optionen für dich und dein Projekt. Falls du die Wartung des Projekts übernehmen möchtest, kannst du mich gerne kontaktieren. Du findest Wege, mich zu erreichen, auf meiner persönlichen Homepage.
.
.
.
.
.
.
Der Hawkeye scanner-cli ist ein Werkzeug zur Hervorhebung von Projektsicherheit, Schwachstellen und allgemeinen Risiken. Es ist dafür gedacht, in Ihre Pre-Commit-Hooks und Ihre Pipelines integriert zu werden.
Der Hawkeye scanner-cli geht davon aus, dass Ihre Verzeichnisstruktur so ist, dass die Dateien der Toolchain auf der obersten Ebene liegen. Im Großen und Ganzen läuft es auf Folgendes hinaus:
package.json auf der obersten EbeneGemfile auf der obersten Ebenerequirements.txt auf der obersten Ebenecomposer.lock auf der obersten Ebenebuild- (Gradle) oder target-Ordner (Maven) und enthalten .java- und .jar-Dateienbuild- (Gradle) oder target-Ordner (Maven) und enthalten .kt- und .jar-Dateientarget-Ordner (sbt mit sbt-native-packager- oder sbt-assembly-Plugins) und enthalten
.scala- und .jar-Dateien. Schauen Sie sich dieses Repository für eine laufende Demo an.Cargo.toml auf der obersten EbeneDiese Liste ist nicht abschließend, da manchmal Tools weitere Dateien benötigen. Um zu verstehen, wie die Module entscheiden, ob sie ein Projekt bearbeiten können, lesen Sie bitte den Abschnitt How it works und den Ordner modules.
Das Docker-Image ist mit Abstand der einfachste Weg, den Scanner zu nutzen. Bitte beachten Sie, dass Ihr Projektstamm (z.B. $PWD) auf /target gemountet sein muss.
docker run --rm -v $PWD:/target hawkeyesec/scanner-cli:latest
Wenn Sie den Scanner verwenden, um eine JSON-Datei zu schreiben (über die -j- und --json-CLI-Flags und die json-Einstellung in der .hawkeyerc), stellen Sie sicher, dass die korrekte UID und GID verwendet wird über docker run -u $(id -u):$(id -g). Andernfalls könnte dies zu nicht löschbaren Dateien führen, z.B. beim Ausführen in Jenkins.
Der Docker-Build ist auch die empfohlene Methode, um den Scanner in Ihren CI-Pipelines auszuführen. Dies ist ein Beispiel für die Ausführung von Hawkeye gegen eines Ihrer Projekte in GoCD:
<pipeline name="security-scan">
<stage name="Hawkeye" cleanWorkingDir="true">
<jobs>
<job name="scan">
<tasks>
<exec command="docker">
<arg>pull</arg>
<arg>hawkeyesec/scanner-cli</arg>
<runif status="passed" />
</exec>
<exec command="bash">
<arg>-c</arg>
<arg>docker run --rm -v $PWD:/target hawkeyesec/scanner-cli:latest</arg>
<runif status="passed" />
</exec>
</tasks>
</job>
</jobs>
</stage>
</pipeline>
Sie können hawkeye in einem Node.js-Projekt installieren und ausführen über
npm install --save-dev @hawkeyesec/scanner-cli
npx hawkeye scan
Diese Methode wird in einem Node.js-Projekt empfohlen, wenn die anderen Toolchains (z.B. Python, Ruby) nicht benötigt werden.
Bei dieser Methode wird auch empfohlen, den Scanner in einem Git-Pre-Commit-Hook (z.B. über das pre-commit-Paket) aufzurufen, um den Commit fehlschlagen zu lassen, wenn Probleme gefunden werden.
Sie können den Scanner über .hawkeyerc- und .hawkeyeignore-Dateien in Ihrem Projektstamm konfigurieren.
Die .hawkeyerc-Datei ist eine JSON-Datei, mit der Sie Folgendes konfigurieren können ...
{
"all": true|false,
"staged": true|false,
"modules": ["files-ccnumber", "java-owasp", "java-find-secbugs"],
"sumo": "http://your.sumologic.foobar/collector",
"http": "http://your.logger.foobar/collector",
"json": "log/results.json",
"failOn": "low"|"medium"|"high"|"critical",
"showCode": true|false
}
Die .hawkeyeignore-Datei ist eine Sammlung von regulären Ausdrücken, die Pfade und Modul-Fehlercodes abgleichen, um sie vom Scan auszuschließen. Sie entspricht der Verwendung des --exclude-Flags. Zeilen, die mit # beginnen, werden als Kommentare betrachtet.
Bitte beachten Sie, dass alle Sonderzeichen, die in regulären Ausdrücken reserviert sind (-[]{}()*+?.,^$|#\s), maskiert werden müssen, wenn sie als Literal verwendet werden!
Beachten Sie auch, dass die Modul-Fehlercodes normalerweise nicht angezeigt werden, da sie für den Benutzer nicht primär relevant sind. Wenn Sie eine bestimmte Falschmeldung ausschließen möchten, können Sie die Modul-Fehlercodes mit dem Flag --show-code oder der Eigenschaft showCode in der .hawkeyerc anzeigen.
^test/
# Dies ist ein Kommentar
^README.md
Verwenden Sie hawkeye modules, um die verfügbaren Module und deren Status aufzulisten.
> npx hawkeye modules
[info] Version: v1.4.0
[info] Modulstatus
[info] Aktiviert: files-ccnumber
[info] Durchsucht Dateiinhalte, die wahrscheinlich Kreditkartennummern enthalten
[info] Aktiviert: files-contents
[info] Durchsucht Dateiinhalte, die wahrscheinlich Geheimnisse enthalten
[info] Deaktiviert: files-entropy
[info] Durchsucht Dateien auf Zeichenfolgen mit hoher Entropie, die wahrscheinlich Passwörter enthalten
[info] Aktiviert: files-secrets
[info] Durchsucht verdächtige Dateinamen, die wahrscheinlich Geheimnisse enthalten
[info] Aktiviert: java-find-secbugs
[info] Findet häufige Sicherheitsprobleme in Java-Code mit findsecbugs
[info] Aktiviert: java-owasp
[info] Durchsucht Java-Projekte auf Gradle/Maven-Abhängigkeiten mit bekannten Schwachstellen mit dem OWASP-Abhängigkeitsprüfer
[info] Aktiviert: node-npmaudit
[info] Überprüft Node-Projekte auf Abhängigkeiten mit bekannten Schwachstellen
[info] Aktiviert: node-npmoutdated
[info] Überprüft Node-Projekte auf veraltete npm-Module
[info] Aktiviert: node-yarnaudit
[info] Überprüft Yarn-Projekte auf Abhängigkeiten mit bekannten Schwachstellen
[info] Aktiviert: node-yarnoutdated
[info] Überprüft Node-Projekte auf veraltete Yarn-Module
[info] Aktiviert: php-security-checker
[info] Überprüft, ob die composer.lock Abhängigkeiten mit bekannten Schwachstellen enthält, mit security-checker
[info] Aktiviert: python-bandit
[info] Durchsucht Python-Code auf häufige Sicherheitsprobleme mit bandit.
[info] Aktiviert: python-piprot
[info] Durchsucht Python-Abhängigkeiten auf veraltete Pakete
[info] Aktiviert: python-safety
[info] Überprüft Python-Abhängigkeiten auf bekannte Sicherheitslücken mit dem safety-Tool.
[info] Aktiviert: ruby-brakeman
[info] Führt eine statische Analyse von Rails-Code auf Sicherheitsprobleme mit Brakeman durch.
[info] Aktiviert: ruby-bundler-scan
[info] Durchsucht Ruby-Gems mit bekannten Schwachstellen mit bundler
Verwenden Sie hawkeye scan, um einen Scan zu starten:
> npx hawkeye scan --help
[info] Version: v1.3.0
Verwendung: hawkeye-scan [Optionen]
Optionen:
-a, --all Alle Dateien scannen, unabhängig davon, ob ein Git-Repository gefunden wurde. Standardmäßig werden nur getrackte Dateien in Git-Repositorys gescannt.
-t, --target [/path/to/project] Der zu scannende Ort. Standardmäßig $PWD.
-f, --fail-on [low|medium|high|critical] Legt die Schwelle fest, bei der hawkeye einen Exit-Code ungleich Null zurückgibt. Standardmäßig low.
-m, --module [Modulname] Ein bestimmtes Modul ausführen. Standardmäßig alle zutreffenden Module.
-e, --exclude [Muster] Ein oder mehrere Ausschlussmuster angeben (z.B. test/*). Kann mehrfach angegeben werden.
-j, --json [/path/to/file.json] Ergebnisse in eine Datei schreiben.
-s, --sumo [https://sumologic-http-connector] Ergebnisse an SumoLogic senden.
-H, --http [https://your-site.com/api/results] Ergebnisse an eine bestimmte URL senden.
--show-code Zeigt den Code an, den das Modul für die Berichterstattung verwendet. Nützlich, um bestimmte Fehlalarme zu ignorieren.
-g, --staged Nur git-gestagte Dateien scannen.
-h, --help Hilfe zu dieser Ausgabe anzeigen
Der scanner-cli antwortet mit den folgenden Exit-Codes:
Wenn Sie die Konsolen-Logger-Ausgabe umleiten möchten, ist die empfohlene Methode, auf stdout zu verwenden. In diesem Beispiel nutzen wir sowohl JSON- als auch stdout-Ergebnisse:
docker run --rm -v $PWD:/target hawkeyesec/scanner-cli:latest -j hawkeye-results.json -f critical 2>&1 | tee hawkeye-results.txt
Standardmäßig gibt der Scanner seine Ergebnisse in tabellarischer Form auf der Konsole aus.
Die Ergebnisse können an einen SumoLogic-Collector Ihrer Wahl gesendet werden. In diesem Beispiel haben wir einen Collector mit einer einzigen HTTP-Quelle.
hawkeye scan --sumo https://collectors.us2.sumologic.com/receiver/v1/http/your-http-collector-url
In SumoLogic suchen Sie nach _collector="hawkeye" | json auto:

Ähnlich wie im SumoLogic-Beispiel kann der Scanner die Ergebnisse an jeden beliebigen HTTP-Endpunkt senden, der POST-Nachrichten akzeptiert.
hawkeye scan --http http://your.logging.foobar/endpoint
Die Ergebnisse werden mit User-Agent: hawkeye gesendet. Ähnlich wie bei der Konsolenausgabe wird für jeden Fund das folgende JSON per POST gesendet:
{
"module": "files-contents",
"level": "critical",
"offender": "testfile3.yml",
"description": "Private key in file",
"mitigation": "Check line number: 3"
}
Hawkeye ist so konzipiert, dass es durch Hinzufügen von Modulen und Writern erweiterbar ist.
Module sind im Grunde kleine Code-Stücke, die entweder ihre eigene Logik implementieren oder ein Drittanbieter-Tool umschließen und die Ausgabe standardisieren. Sie laufen nur, wenn die erforderlichen Kriterien erfüllt sind. Beispiel: Das Modul npm outdated würde nur laufen, wenn eine package.json im Scan-Ziel erkannt wird – als Ergebnis müssen Sie Hawkeye nicht mitteilen, welche Art von Projekt Sie scannen.
-m files-entropy.Cargo.lock Abhängigkeiten mit bekannten Schwachstellen enthält, mit cargo auditWenn Sie eine Idee für ein Modul haben, können Sie gerne eine Funktionsanfrage im Bereich „Issues“ stellen. Wenn Sie etwas Zeit haben, ziehen Sie bitte in Betracht, uns einen Pull-Request zu senden. Um zu sehen, wie Module funktionieren, gehen Sie bitte zum Ordner modules, um zu erfahren, wie die Dinge arbeiten.