Source code Review / SAST Tools
Anleitung und Listen von Tools
Mehrsprachige Tools
Es gibt ein kostenloses Paket zur Überprüfung von PRs.
Es ist ein Open-Source-Tool.
Unterstützte Sprachen
Kategorie | Sprachen |
---|---|
GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
Beta | Kotlin · Rust |
Experimental | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
Schnellstart
Sie können auch die semgrep VSCode-Erweiterung verwenden, um die Ergebnisse innerhalb von VSCode zu erhalten.
Es gibt eine installierbare kostenlose Version.
Schnellstart
CodeQL
Es gibt eine installierbare kostenlose Version, aber gemäß der Lizenz dürfen Sie die kostenlose CodeQL-Version nur in Open-Source-Projekten verwenden.
Installation
Schnellstart - Datenbank vorbereiten
Das erste, was Sie tun müssen, ist die Datenbank vorzubereiten (den Codebaum erstellen), damit später die Abfragen darüber ausgeführt werden können.
Sie können CodeQL erlauben, die Sprache des Repository automatisch zu identifizieren und die Datenbank zu erstellen
Dies wird in der Regel einen Fehler auslösen, der besagt, dass mehr als eine Sprache angegeben wurde (oder automatisch erkannt wurde). Überprüfen Sie die nächsten Optionen, um dies zu beheben!
Sie können dies manuell tun, indem Sie das Repository und die Sprache angeben (Liste der Sprachen)
Wenn Ihr Repository mehr als 1 Sprache verwendet, können Sie auch 1 Datenbank pro Sprache erstellen, wobei jede Sprache angegeben wird.
Sie können
codeql
auch erlauben, alle Sprachen zu identifizieren und eine Datenbank pro Sprache zu erstellen. Sie müssen ihm einen GITHUB_TOKEN geben.
Schnellstart - Code analysieren
Jetzt ist es endlich an der Zeit, den Code zu analysieren.
Denken Sie daran, dass wenn Sie mehrere Sprachen verwendet haben, eine Datenbank pro Sprache im angegebenen Pfad erstellt wurde.
Schnellstart - Skriptgesteuert
Sie können die Ergebnisse unter https://microsoft.github.io/sarif-web-component/ visualisieren oder die VSCode-Erweiterung SARIF viewer verwenden.
Sie können auch die VSCode-Erweiterung verwenden, um die Ergebnisse in VSCode zu erhalten. Sie müssen immer noch manuell eine Datenbank erstellen, können dann jedoch beliebige Dateien auswählen und auf Rechtsklick
-> CodeQL: Abfragen in ausgewählten Dateien ausführen
klicken.
Es gibt eine kostenlose installierbare Version.
Schnellstart
Du kannst auch die Snyk VSCode-Erweiterung verwenden, um Ergebnisse innerhalb von VSCode zu erhalten.
Es ist Open Source, sieht aber nicht gewartet aus.
Unterstützte Sprachen
Java (Maven und Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# und Javascript (Node.js).
Schnellstart
Kostenlos für öffentliche Repositories.
NodeJS
yarn
pnpm
nodejsscan: Statischer Sicherheitscode-Scanner (SAST) für Node.js-Anwendungen, unterstützt durch libsast und semgrep.
RetireJS: Das Ziel von Retire.js ist es, Ihnen dabei zu helfen, die Verwendung von JS-Bibliotheksversionen mit bekannten Sicherheitslücken zu erkennen.
Electron
electronegativity: Ein Tool zur Identifizierung von Fehlkonfigurationen und Sicherheits-Antimustern in auf Electron basierenden Anwendungen.
Python
Bandit: Bandit ist ein Tool, das dazu entwickelt wurde, häufige Sicherheitsprobleme in Python-Code zu finden. Dazu verarbeitet Bandit jede Datei, erstellt einen AST daraus und führt geeignete Plugins gegen die AST-Knoten aus. Sobald Bandit alle Dateien gescannt hat, generiert es einen Bericht.
safety: Safety überprüft Python-Abhängigkeiten auf bekannte Sicherheitslücken und schlägt geeignete Maßnahmen zur Behebung der erkannten Schwachstellen vor. Safety kann auf Entwicklermaschinen, in CI/CD-Pipelines und auf Produktionssystemen ausgeführt werden.
Pyt: Nicht gewartet.
.NET
ROST
Rust ist eine moderne, sichere und performante Systemsprache, die von Mozilla entwickelt wurde. Sie wird oft für die Entwicklung von sicheren und zuverlässigen Systemsoftware verwendet. Rust verhindert Speicherfehler und bietet gleichzeitig Kontrolle über die Ressourcen.
Java
Java ist eine der am häufigsten verwendeten Programmiersprachen für die Entwicklung von Webanwendungen. Es ist wichtig, Java-Code auf Sicherheitslücken zu überprüfen, um potenzielle Schwachstellen zu identifizieren. Hier sind einige Tools, die für die Code-Überprüfung in Java verwendet werden können:
FindBugs
FindBugs ist ein statisches Analysewerkzeug, das entwickelt wurde, um potenzielle Fehler im Java-Code zu identifizieren. Es kann verwendet werden, um häufige Sicherheitslücken wie unsichere Datenvalidierung, unsichere Speicherzuweisung und andere potenzielle Probleme zu erkennen.
PMD
PMD ist ein weiteres statisches Analysewerkzeug, das für Java-Code verwendet werden kann. Es kann dabei helfen, Code-Stilprobleme, Leistungsprobleme und potenzielle Fehler im Code zu identifizieren.
Checkstyle
Checkstyle ist ein Werkzeug, das verwendet wird, um sicherzustellen, dass der Java-Code einem bestimmten Stil entspricht. Es kann dabei helfen, konsistente Codeformatierung und -konventionen durchzusetzen.
SonarQube
SonarQube ist eine Plattform, die verwendet werden kann, um den Java-Code kontinuierlich auf Qualität und Sicherheit zu überprüfen. Es bietet detaillierte Berichte über Codequalität, Sicherheitslücken und Leistungsprobleme.
Aufgabe | Befehl |
---|---|
Jar ausführen | java -jar [jar] |
Jar entpacken | unzip -d [Ausgabeverzeichnis] [jar] |
Jar erstellen | jar -cmf META-INF/MANIFEST.MF [Ausgabe-Jar] * |
Base64 SHA256 | sha256sum [Datei] | cut -d' ' -f1 | xxd -r -p | base64 |
Signatur entfernen | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Aus Jar löschen | zip -d [jar] [zu entfernende Datei] |
Klasse dekompilieren | procyon -o . [Pfad zur Klasse] |
Jar dekompilieren | procyon -jar [jar] -o [Ausgabeverzeichnis] |
Klasse kompilieren | javac [Pfad zur .java-Datei] |
Los
PHP
Wordpress Plugins
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Discovery
Burp:
Spider und Inhalte entdecken
Sitemap > filtern
Sitemap > Rechtsklick auf Domain > Engagement-Tools > Skripte finden
waybackurls <domain> |grep -i "\.js" |sort -u
Statische Analyse
Unminimieren/Verschönern/Verschönern
Siehe auch einige der Tools, die unten unter 'Deobfuscate/Unpack' erwähnt werden.
Deobfuscate/Unpack
Hinweis: Es ist möglicherweise nicht möglich, vollständig zu deobfuskieren.
Finde und verwende .map-Dateien:
Wenn die .map-Dateien freigelegt sind, können sie leicht deobfuskiert werden.
Üblicherweise entspricht foo.js.map zu foo.js. Suche manuell danach.
Verwende JS Miner, um danach zu suchen.
Stelle sicher, dass ein aktiver Scan durchgeführt wird.
Lies 'Tipps/Hinweise'
Wenn gefunden, verwende Maximize zum Deobfuskieren.
Ohne .map-Dateien, versuche JSnice:
Referenzen: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
Tipps:
Wenn du jsnice.org verwendest, klicke auf die Optionen neben dem "Nicify JavaScript"-Button und deaktiviere "Infer types", um den Code nicht mit Kommentaren zu überladen.
Stelle sicher, dass keine leeren Zeilen vor dem Skript stehen, da dies den Deobfuskationsprozess beeinträchtigen und zu ungenauen Ergebnissen führen kann.
Für einige modernere Alternativen zu JSNice, könntest du folgendes betrachten:
Javascript-Decompiler, Unpacker und Unminify-Toolkit
Wakaru ist der Javascript-Decompiler für moderne Frontends. Er bringt den Originalcode aus einer gebündelten und transpilierten Quelle zurück.
Deobfuscate obfuscator.io, unminify und unpack gebündeltes Javascript
Un-minify Javascript-Code mit ChatGPT
Dieses Tool verwendet große Sprachmodelle (wie ChatGPT & llama2) und andere Tools, um Javascript-Code zu un-minifizieren. Beachte, dass LLMs keine strukturellen Änderungen vornehmen - sie geben nur Hinweise zur Umbenennung von Variablen und Funktionen. Die eigentliche Arbeit wird von Babel auf AST-Ebene erledigt, um sicherzustellen, dass der Code 1:1 äquivalent bleibt.
Verwendung von LLMs zur Umkehrung der Minimierung von JavaScript-Variablennamen
Verwende
console.log()
;
Finde den Rückgabewert am Ende und ändere ihn in
console.log(<packerReturnVariable>);
, damit das deobfuskierte js ausgegeben wird, anstatt es auszuführen.Füge dann das modifizierte (und immer noch obfuskierte) js in https://jsconsole.com/ ein, um das deobfuskierte js im Konsolenprotokoll zu sehen.
Füge schließlich die deobfuskierte Ausgabe in https://prettier.io/playground/ ein, um sie für die Analyse zu verschönern.
Hinweis: Wenn du immer noch verpacktes (aber unterschiedliches) js siehst, könnte es rekursiv verpackt sein. Wiederhole den Prozess.
Referenzen
Tools
Weniger verwendete Referenzen
Last updated