Source code Review / SAST Tools
Wskazówki i listy narzędzi
Narzędzia wielojęzyczne
Dostępny jest darmowy pakiet do przeglądu PR.
To narzędzie typu Open Source.
Obsługiwane języki
Szybki start
Możesz również użyć rozszerzenia VSCode semgrep, aby uzyskać wyniki wewnątrz VSCode.
Dostępna jest instalowalna darmowa wersja.
Szybki start
CodeQL
Istnieje darmowa wersja instalacyjna, ale zgodnie z licencją możesz korzystać tylko z darmowej wersji CodeQL w projektach typu Open Source.
Instalacja
Szybki start - Przygotowanie bazy danych
Pierwszą rzeczą, którą musisz zrobić, jest przygotowanie bazy danych (utworzenie drzewa kodu), aby później zapytania mogły być na niej uruchamiane.
Możesz pozwolić codeqlowi automatycznie zidentyfikować język repozytorium i utworzyć bazę danych
To zazwyczaj spowoduje błąd mówiący, że określono więcej niż jedny język (lub został automatycznie wykryty). Sprawdź następne opcje, aby to naprawić!
Możesz to zrobić ręcznie wskazując repozytorium i język (lista języków)
Jeśli twoje repozytorium używa więcej niż 1 języka, możesz również utworzyć 1 bazę danych na język, wskazując każdy język.
Możesz również pozwolić
codeql
na zidentyfikowanie wszystkich języków dla Ciebie i utworzenie bazy danych dla każdego języka. Musisz podać GITHUB_TOKEN.
Szybki start - Analiza kodu
Nadszedł wreszcie czas na analizę kodu
Pamiętaj, że jeśli użyłeś kilku języków, baza danych na język została utworzona w ścieżce, którą określiłeś.
Szybki start - Skryptowany
Możesz zwizualizować znalezione elementy na https://microsoft.github.io/sarif-web-component/ lub używając rozszerzenia VSCode SARIF viewer.
Możesz także 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
Dostępna jest darmowa wersja instalacyjna.
Szybki start
Możesz również używać rozszerzenia Snyk dla VSCode, aby uzyskać wyniki wewnątrz VSCode.
To Open Source, ale wygląda na nieutrzymywane.
Obsługiwane języki
Java (Maven i Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# oraz Javascript (Node.js).
Szybki start
Darmowe dla repozytoriów publicznych.
NodeJS
yarn
pnpm
nodejsscan: Statyczne narzędzie skanujące kod pod kątem bezpieczeństwa (SAST) dla aplikacji Node.js oparte na libsast i semgrep.
RetireJS: Celem Retire.js jest pomóc w wykrywaniu użycia wersji bibliotek JS znanymi podatnościami.
Electron
electronegativity: Jest to narzędzie do identyfikowania błędnych konfiguracji i antywzorców bezpieczeństwa w aplikacjach opartych na Electron.
Python
Bandit: Bandit to narzędzie przeznaczone do znajdowania powszechnych problemów związanych z bezpieczeństwem w kodzie Pythona. Aby to zrobić, Bandit przetwarza każdy plik, buduje z niego AST i uruchamia odpowiednie wtyczki przeciwko węzłom AST. Po zakończeniu skanowania wszystkich plików Bandit generuje raport.
safety: Safety sprawdza zależności Pythona pod kątem znanych podatności bezpieczeństwa i sugeruje odpowiednie środki zaradcze dla wykrytych podatności. Safety można uruchamiać na maszynach programistów, w potokach CI/CD oraz na systemach produkcyjnych.
Pyt: Nieaktualizowany.
.NET
RUST
Java
FindBugs
FindBugs to darmowe narzędzie do statycznej analizy kodu Java, które pomaga w identyfikowaniu błędów programistycznych, takich jak wycieki pamięci, nieprawidłowe użycie zmiennych czy błędy wydajnościowe.
PMD
PMD to kolejne narzędzie do analizy statycznej kodu Java, które pomaga w identyfikowaniu potencjalnych problemów w kodzie, takich jak nieoptymalne fragmenty kodu, nieużywane zmienne czy nieprawidłowe formatowanie.
Checkstyle
Checkstyle to narzędzie do automatycznej weryfikacji zgodności z zdefiniowanymi standardami kodu Java. Pomaga w utrzymaniu spójności i czytelności kodu poprzez sprawdzanie zgodności z ustalonymi regułami formatowania.
Go
PHP
Wtyczki Wordpress
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Odkrywanie
Burp:
Spider i odkrywaj zawartość
Mapa witryny > filtr
Mapa witryny > kliknij prawym przyciskiem domenę > Narzędzia zaangażowania > Znajdź skrypty
waybackurls <domena> |grep -i "\.js" |sort -u
Analiza statyczna
Odmień/Rozjaśnij/Upiększ
Zobacz również niektóre z narzędzi wymienionych poniżej w 'Deobfuscate/Unpack'.
Deobfuscate/Unpack
Uwaga: Może nie być możliwe całkowite deobfuskowanie.
Znajdź i użyj plików .map:
Jeśli pliki .map są ujawnione, mogą być użyte do łatwego deobfuskowania.
Zazwyczaj foo.js.map mapuje do foo.js. Szukaj ich ręcznie.
Użyj JS Miner, aby je znaleźć.
Upewnij się, że przeprowadzono aktywne skanowanie.
Przeczytaj 'Wskazówki/Notatki'
Jeśli znalezione, użyj Maximize do deobfuskacji.
Bez plików .map, spróbuj JSnice:
Odnośniki: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
Wskazówki:
Jeśli korzystasz z jsnice.org, kliknij przycisk opcji obok przycisku "Nicify JavaScript" i odznacz "Infer types", aby zmniejszyć zagrzybienie kodu komentarzami.
Upewnij się, że nie pozostawiasz pustych linii przed skryptem, ponieważ może to wpłynąć na proces deobfuskacji i prowadzić do niedokładnych wyników.
Dla niektórych nowoczesnych alternatyw dla JSNice, możesz chcieć spojrzeć na następujące:
Dekompilator JavaScript, narzędzie do rozpakowywania i deobfuskacji
Wakaru to dekompilator JavaScript dla nowoczesnych interfejsów. Przywraca oryginalny kod z połączonego i przetłumaczonego źródła.
Deobfuskacja obfuscator.io, rozpakowywanie i deobfuskacja połączonego JavaScriptu
Rozpakuj kod JavaScript, używając ChatGPT
To narzędzie używa dużych modeli językowych (takich jak ChatGPT i llama2) oraz innych narzędzi do rozpakowania kodu JavaScript. Należy zauważyć, że LLM nie wykonują żadnych zmian strukturalnych - dostarczają tylko wskazówek do zmiany nazw zmiennych i funkcji. Ciężka praca jest wykonywana przez Babel na poziomie AST, aby zapewnić, że kod pozostaje równoważny 1-1.
Korzystanie z LLM do odwrócenia zminifikowania nazw zmiennych w JavaScript
Użyj
console.log()
;
Znajdź wartość zwracaną na końcu i zmień ją na
console.log(<packerReturnVariable>);
, aby zamiast wykonywania, deobfuskowany js został wydrukowany.Następnie wklej zmodyfikowany (i nadal zaszyfrowany) js do https://jsconsole.com/, aby zobaczyć zdeobfuskowany js zapisany w konsoli.
Na koniec wklej wynik deobfuskacji do https://prettier.io/playground/, aby upiększyć go do analizy.
Uwaga: Jeśli nadal widzisz spakowany (ale inny) js, może być rekurencyjnie spakowany. Powtórz proces.
Odnośniki
Narzędzia
Mniej Używane Odnośniki
Last updated