Source code Review / SAST Tools
Wskazówki i lista narzędzi
Narzędzia wielojęzyczne
Jest darmowy pakiet do przeglądania PR-ów.
To narzędzie open source.
Obsługiwane języki
Kategoria | Języki |
---|---|
GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
Beta | Kotlin · Rust |
Eksperymentalny | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
Szybki start
Możesz również użyć rozszerzenia semgrep VSCode, aby uzyskać wyniki wewnątrz VSCode.
Istnieje instalowalna darmowa wersja.
Szybki start
CodeQL
Istnieje darmowa wersja do zainstalowania, ale zgodnie z licencją możesz używać darmowej wersji codeQL tylko w projektach Open Source.
Instalacja
Szybki start - Przygotuj bazę danych
Pierwszą rzeczą, którą musisz zrobić, to przygotować bazę danych (utworzyć drzewo kodu), aby później zapytania mogły być na niej uruchamiane.
Możesz pozwolić codeql na automatyczne zidentyfikowanie języka repozytorium i utworzenie bazy danych
To zwykle spowoduje błąd, mówiący, że określono więcej niż jeden język (lub automatycznie wykryto). Sprawdź następne opcje, aby to naprawić!
Możesz to zrobić ręcznie wskazując repo i język (lista języków)
Jeśli twoje repozytorium używa więcej niż 1 język, możesz również utworzyć 1 bazę danych na język, wskazując każdy język.
Możesz również pozwolić
codeql
na identyfikację wszystkich języków za Ciebie i utworzenie bazy danych dla każdego języka. Musisz podać GITHUB_TOKEN.
Szybki start - Analiza kodu
Teraz w końcu nadszedł czas na analizę kodu
Pamiętaj, że jeśli użyłeś kilku języków, baza danych na każdy język zostanie utworzona w ścieżce, którą określiłeś.
Szybki start - Skryptowany
Możesz wizualizować wyniki w https://microsoft.github.io/sarif-web-component/ lub używając rozszerzenia VSCode SARIF viewer.
Możesz również użyć rozszerzenia VSCode, aby uzyskać wyniki wewnątrz VSCode. Nadal będziesz musiał ręcznie utworzyć bazę danych, ale potem możesz wybrać dowolne pliki i kliknąć Prawy przycisk myszy
-> CodeQL: Uruchom zapytania w wybranych plikach
Istnieje darmowa wersja do zainstalowania.
Szybki start
Możesz również użyć rozszerzenia snyk VSCode, aby uzyskać wyniki wewnątrz VSCode.
Jest Open Source, ale wygląda na nieutrzymywane.
Obsługiwane języki
Java (Maven i Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# i Javascript (Node.js).
Szybki start
Darmowe dla publicznych repozytoriów.
NodeJS
yarn
pnpm
nodejsscan: Statyczny skaner bezpieczeństwa kodu (SAST) dla aplikacji Node.js zasilany przez libsast i semgrep.
RetireJS: Celem Retire.js jest pomoc w wykrywaniu użycia wersji bibliotek JS z znanymi lukami.
Electron
electronegativity: To narzędzie do identyfikacji błędnych konfiguracji i wzorców antybezpieczeństwa w aplikacjach opartych na Electronie.
Python
Bandit: Bandit to narzędzie zaprojektowane do znajdowania powszechnych problemów z bezpieczeństwem w kodzie Pythona. Aby to zrobić, Bandit przetwarza każdy plik, buduje z niego AST i uruchamia odpowiednie wtyczki na węzłach AST. Gdy Bandit zakończy skanowanie wszystkich plików, generuje raport.
safety: Safety sprawdza zależności Pythona pod kątem znanych luk w zabezpieczeniach i sugeruje odpowiednie rozwiązania dla wykrytych luk. Safety można uruchomić na maszynach deweloperów, w pipeline'ach CI/CD oraz na systemach produkcyjnych.
Pyt: Nieutrzymywane.
.NET
RUST
Java
Zadanie | Komenda |
---|---|
Wykonaj Jar | java -jar [jar] |
Rozpakuj Jar | unzip -d [output directory] [jar] |
Utwórz Jar | jar -cmf META-INF/MANIFEST.MF [output jar] * |
Base64 SHA256 | sha256sum [file] | cut -d' ' -f1 | xxd -r -p | base64 |
Usuń podpis | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Usuń z Jara | zip -d [jar] [file to remove] |
Dekompiluj klasę | procyon -o . [path to class] |
Dekompiluj Jar | procyon -jar [jar] -o [output directory] |
Skompiluj klasę | javac [path to .java file] |
Idź
PHP
Wordpress Plugins
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Discovery
Burp:
Spider i odkryj zawartość
Sitemap > filtr
Sitemap > kliknij prawym przyciskiem na domenę > Narzędzia zaangażowania > Znajdź skrypty
waybackurls <domain> |grep -i "\.js" |sort -u
Static Analysis
Unminimize/Beautify/Prettify
Zobacz niektóre z narzędzi wymienionych w 'Deobfuscate/Unpack' poniżej.
Deobfuscate/Unpack
Uwaga: Może nie być możliwe pełne deobfuskowanie.
Znajdź i użyj plików .map:
Jeśli pliki .map są dostępne, można je wykorzystać do łatwego deobfuskowania.
Zwykle foo.js.map mapuje do foo.js. Ręcznie ich szukaj.
Użyj JS Miner, aby ich szukać.
Upewnij się, że przeprowadzono aktywne skanowanie.
Przeczytaj 'Tips/Notes'
Jeśli znajdziesz, użyj Maximize, aby deobfuskować.
Bez plików .map, spróbuj JSnice:
Odnośniki: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
Wskazówki:
Jeśli używasz jsnice.org, kliknij przycisk opcji obok przycisku "Nicify JavaScript" i odznacz "Infer types", aby zredukować zaśmiecanie kodu komentarzami.
Upewnij się, że nie zostawiasz pustych linii przed skryptem, ponieważ może to wpłynąć na proces deobfuskacji i dać niedokładne wyniki.
Dla niektórych nowocześniejszych alternatyw dla JSNice, możesz spojrzeć na następujące:
Javascript decompiler, unpacker i unminify toolkit
Wakaru to dekompilator Javascript dla nowoczesnych frontendów. Przywraca oryginalny kod z zbundlowanego i transpilego źródła.
Deobfuscate obfuscator.io, unminify i unpack bundled javascript
Un-minify Javascript code using ChatGPT
To narzędzie wykorzystuje duże modele językowe (jak ChatGPT i llama2) oraz inne narzędzia do un-minify Javascript code. Zauważ, że LLM nie dokonują żadnych zmian strukturalnych – tylko dostarczają wskazówki do zmiany nazw zmiennych i funkcji. Ciężka praca wykonywana jest przez Babel na poziomie AST, aby zapewnić, że kod pozostaje 1-1 równoważny.
Używanie LLM do odwracania minifikacji nazw zmiennych JavaScript
Użyj
console.log()
;
Znajdź wartość zwracaną na końcu i zmień ją na
console.log(<packerReturnVariable>);
, aby deobfuskowany js był drukowany zamiast wykonywany.Następnie wklej zmodyfikowany (i nadal obfuskowany) js do https://jsconsole.com/, aby zobaczyć deobfuskowany js zalogowany w konsoli.
Na koniec wklej deobfuskowany wynik do https://prettier.io/playground/, aby go upiększyć do analizy.
Uwaga: Jeśli nadal widzisz spakowany (ale inny) js, może być rekurencyjnie spakowany. Powtórz proces.
References
Tools
Less Used References
Last updated