Source code Review / SAST Tools

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Leiding en & Lys van gereedskap

Multi-Taal Gereedskap

Daar is 'n gratis pakket om PRs te oorsien.

Dit is 'n Open Source gereedskap.

Ondersteunde Tale

KategorieTale

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 ·

Vinnige Begin

# Install https://github.com/returntocorp/semgrep#option-1-getting-started-from-the-cli
brew install semgrep

# Go to your repo code and scan
cd repo
semgrep scan --config auto

Jy kan ook die semgrep VSCode-uitbreiding gebruik om die bevindinge binne VSCode te kry.

Daar is 'n installeerbare gratis weergawe.

Vinnige Begin

# Run the paltform in docker
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
# Install cli tool
brew install sonar-scanner

# Go to localhost:9000 and login with admin:admin or admin:sonar
# Generate a local project and then a TOKEN for it

# Using the token and from the folder with the repo, scan it
cd path/to/repo
sonar-scanner \
-Dsonar.projectKey=<project-name> \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token=<sonar_project_token>

CodeQL

Daar is 'n installeerbare gratis weergawe maar volgens die lisensie kan jy slegs die gratis CodeQL weergawe in Open Source projekte gebruik.

Installeer

# Download your release from https://github.com/github/codeql-action/releases
## Example
wget https://github.com/github/codeql-action/releases/download/codeql-bundle-v2.14.3/codeql-bundle-osx64.tar.gz

# Move it to the destination folder
mkdir ~/codeql
mv codeql-bundle* ~/codeql

# Decompress it
cd ~/codeql
tar -xzvf codeql-bundle-*.tar.gz
rm codeql-bundle-*.tar.gz

# Add to path
echo 'export PATH="$PATH:/Users/username/codeql/codeql"' >> ~/.zshrc

# Check it's correctly installed
## Open a new terminal
codeql resolve qlpacks #Get paths to QL packs

Vinnige Begin - Berei die databasis voor

Die eerste ding wat jy moet doen is om die databasis voor te berei (skep die kodeboom) sodat die navrae later daaroor uitgevoer kan word.

  • Jy kan codeql toelaat om outomaties die taal van die bewaarplek te identifiseer en die databasis te skep

codeql database create <database> --language <language>

# Example
codeql database create /path/repo/codeql_db --source-root /path/repo
## DB will be created in /path/repo/codeql_db

Dit sal gewoonlik 'n fout veroorsaak wat sê dat meer as een taal gespesifiseer was (of outomaties opgespoor is). Kyk na die volgende opsies om dit te reg te stel!

  • Jy kan dit handmatig aandui deur die repo en die taal (lys van tale)

codeql database create <database> --language <language> --source-root </path/to/repo>

# Example
codeql database create /path/repo/codeql_db --language javascript --source-root /path/repo
## DB will be created in /path/repo/codeql_db
  • As jou repo meer as 1 taal gebruik, kan jy ook 1 DB per taal skep wat elke taal aandui.

export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create <database> --source-root /path/to/repo --db-cluster --language "javascript,python"

# Example
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create /path/repo/codeql_db --source-root /path/to/repo --db-cluster --language "javascript,python"
## DBs will be created in /path/repo/codeql_db/*
  • Jy kan ook codeql toelaat om alle tale vir jou te identifiseer en 'n DB per taal te skep. Jy moet dit 'n GITHUB_TOKEN gee.

export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create <database> --db-cluster --source-root </path/to/repo>

# Example
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create /tmp/codeql_db --db-cluster --source-root /path/repo
## DBs will be created in /path/repo/codeql_db/*

Vinnige Begin - Analiseer die kode

Nou is dit uiteindelik tyd om die kode te analiseer

Onthou dat as jy verskeie tale gebruik het, 'n DB per taal sou geskep gewees het in die pad wat jy gespesifiseer het.

# Default analysis
codeql database analyze <database> --format=<format> --output=</out/file/path>
# Example
codeql database analyze /tmp/codeql_db/javascript --format=sarif-latest --output=/tmp/graphql_results.sarif

# Specify QL pack to use in the analysis
codeql database analyze <database> \
<qls pack> --sarif-category=<language> \
--sarif-add-baseline-file-info \ --format=<format> \
--output=/out/file/path>
# Example
codeql database analyze /tmp/codeql_db \
javascript-security-extended --sarif-category=javascript \
--sarif-add-baseline-file-info --format=sarif-latest \
--output=/tmp/sec-extended.sarif

Vinnige Begin - Geskript

export GITHUB_TOKEN=ghp_32849y23hij4...
export REPO_PATH=/path/to/repo
export OUTPUT_DIR_PATH="$REPO_PATH/codeql_results"
mkdir -p "$OUTPUT_DIR_PATH"
export FINAL_MSG="Results available in: "

echo "Creating DB"
codeql database create "$REPO_PATH/codeql_db" --db-cluster --source-root "$REPO_PATH"
for db in `ls "$REPO_PATH/codeql_db"`; do
echo "Analyzing $db"
codeql database analyze "$REPO_PATH/codeql_db/$db" --format=sarif-latest --output="${OUTPUT_DIR_PATH}/$db).sarif"
FINAL_MSG="$FINAL_MSG ${OUTPUT_DIR_PATH}/$db.sarif ,"
echo ""
done

echo $FINAL_MSG

Jy kan die bevindinge visualiseer op https://microsoft.github.io/sarif-web-component/ of deur die gebruik van die VSCode-uitbreiding SARIF viewer.

Jy kan ook die VSCode-uitbreiding gebruik om die bevindinge binne VSCode te kry. Jy sal steeds 'n databasis handmatig moet skep, maar daarna kan jy enige lêers kies en op Right Click -> CodeQL: Run Queries in Selected Files klik.

Daar is 'n installeerbare gratis weergawe.

Vinnige Begin

# Install
sudo npm install -g snyk

# Authenticate (you can use a free account)
snyk auth

# Test for open source vulns & license issues
snyk test [--all-projects]

# Test for code vulnerabilities
## This will upload your code and you need to enable this option in: Settings > Snyk Code
snyk test code

# Test for vulns in images
snyk container test [image]

# Test for IaC vulns
snyk iac test

Jy kan ook die snyk VSCode-uitbreiding gebruik om bevindinge binne VSCode te kry.

Dit is Oopbron, maar lyk ongeag.

Ondersteunde Tale

Java (Maven en Android), Kotlin (Android), Swift (iOS), .NET Volledige Raamwerk, C#, en Javascript (Node.js).

Vinnige Begin

# Check the correct release for your environment
$ wget https://github.com/insidersec/insider/releases/download/2.1.0/insider_2.1.0_linux_x86_64.tar.gz
$ tar -xf insider_2.1.0_linux_x86_64.tar.gz
$ chmod +x insider
$ ./insider --tech javascript  --target <projectfolder>

Gratis vir openbare repos.

NodeJS

  • yarn

# Install
brew install yarn
# Run
cd /path/to/repo
yarn audit
npm audit
  • pnpm

# Install
npm install -g pnpm
# Run
cd /path/to/repo
pnpm audit
# Install & run
docker run -it -p 9090:9090 opensecurity/nodejsscan:latest
# Got to localhost:9090
# Upload a zip file with the code
  • RetireJS: Die doel van Retire.js is om jou te help om die gebruik van JS-biblioteekweergawes met bekende kwesbaarhede op te spoor.

# Install
npm install -g retire
# Run
cd /path/to/repo
retire --colors

Electron

  • electronegativity: Dit is 'n instrument om wanopsetlikhede en sekuriteitsantipatrone in Electron-gebaseerde toepassings te identifiseer.

Python

  • Bandit: Bandit is 'n instrument wat ontwerp is om algemene sekuriteitskwessies in Python-kode te vind. Om dit te doen, verwerk Bandit elke lêer, bou 'n AST daarvan, en hardloop toepaslike invoegtoepassings teen die AST-node. Sodra Bandit klaar is met die skandering van al die lêers, genereer dit 'n verslag.

# Install
pip3 install bandit

# Run
bandit -r <path to folder>
  • veiligheid: Safety toets Python afhanklikhede vir bekende sekuriteitskwessies en stel die regte regstellings vir opgespoorde kwessies voor. Safety kan op ontwikkelaar rekenaars, in CI/CD pyplyne en op produksie stelsels uitgevoer word.

# Install
pip install safety
# Run
safety check
  • Pyt: Nie onderhou nie.

.NET

# dnSpy
https://github.com/0xd4d/dnSpy

# .NET compilation
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe test.cs

ROES

Rust is 'n veilige, mededingende programmeertaal wat geskep is deur Mozilla. Dit is baie gewild vir sy sterkte en betroubaarheid.

# Install
cargo install cargo-audit

# Run
cargo audit

#Update the Advisory Database
cargo audit fetch

Java

FindBugs

FindBugs is 'n statiese bronanalise-instrument wat gebruik kan word om Java-bronkode te vind. Dit kan potensiële programmeerfoute, geheuelekasies en stileringsprobleme identifiseer.

PMD

PMD is 'n bronkode-analise-instrument wat gebruik kan word om potensiële programmeerprobleme in Java-bronkode te identifiseer. Dit kan help om bronkode te verbeter deur die identifisering van sleutelareas vir verbetering.

Checkstyle

Checkstyle is 'n raamwerk vir die implementering van statiese kode-analise om te verseker dat die Java-bronkode voldoen aan 'n spesifieke kodekonvensie. Dit kan help om konsistensie in die kodebasis te handhaaf en om potensiële programmeerfoute te verminder.

# JD-Gui
https://github.com/java-decompiler/jd-gui

# Java compilation step-by-step
javac -source 1.8 -target 1.8 test.java
mkdir META-INF
echo "Main-Class: test" > META-INF/MANIFEST.MF
jar cmvf META-INF/MANIFEST.MF test.jar test.class
TaakOpdrag

Voer Jar uit

java -jar [jar]

Ontpak Jar

unzip -d [uitvoer gids] [jar]

Skep Jar

jar -cmf META-INF/MANIFEST.MF [uitvoer jar] *

Base64 SHA256

sha256sum [lêer] | cut -d' ' -f1 | xxd -r -p | base64

Verwyder Ondertekening

rm META-INF/.SF META-INF/.RSA META-INF/*.DSA

Verwyder van Jar

zip -d [jar] [lêer om te verwyder]

Ontkompilieer klas

procyon -o . [pad na klas]

Ontkompilieer Jar

procyon -jar [jar] -o [uitvoer gids]

Kompilieer klas

javac [pad na .java lêer]

Gaan

https://github.com/securego/gosec

PHP

Psalm en PHPStan.

Wordpress Inproppe

https://www.pluginvulnerabilities.com/plugin-security-checker/

Solidity

JavaScript

Ontdekking

  1. Burp:

  • Spider en ontdek inhoud

  • Sitemap > filter

  • Sitemap > klik met regterknoppie op domein > Betrokkenheidstools > Vind skripte

  • waybackurls <domein> |grep -i "\.js" |sort -u

Statische Analise

Ontminify/Verfraai

Deobfuscate/Unpack

Nota: Dit mag dalk nie moontlik wees om heeltemal te deobfuscate nie.

  1. Vind en gebruik .map-lêers:

  • As die .map-lêers blootgestel word, kan hulle gebruik word om maklik te deobfuscate.

  • Gewoonlik map foo.js.map na foo.js. Soek handmatig daarna.

  • Gebruik JS Miner om daarna te soek.

  • Maak seker dat 'n aktiewe skandering uitgevoer word.

  • Indien gevind, gebruik Maximize om te deobfuscate.

  1. Sonder .map-lêers, probeer JSnice:

  • Wenke:

  • As jy jsnice.org gebruik, klik op die opsies-knoppie langs die "Nicify JavaScript" knoppie, en skakel "Infer types" af om die kode nie met kommentaar te oorlaai nie.

  • Maak seker dat jy geen leë lyne voor die skripsie los nie, aangesien dit die deobfuscation-proses kan beïnvloed en onakkurate resultate kan gee.

  1. Vir 'n paar meer moderne alternatiewe vir JSNice, kan jy na die volgende kyk:

Wakaru is die Javascript-dekompiler vir moderne front-end. Dit bring die oorspronklike kode terug van 'n gebundelde en getranspileerde bron.

Hierdie gereedskap gebruik groot taalmodelle (soos ChatGPT & llama2) en ander gereedskappe om Javascript-kode te un-minify. Let daarop dat LLM's geen strukturele veranderinge aanbring nie - hulle verskaf net wenke om veranderlikes en funksies te hernoem. Die swaar ligging word deur Babel op AST-vlak gedoen om te verseker dat die kode 1-1-ekwivalent bly.

  1. Gebruik console.log();

  • Vind die terugvoerwaarde aan die einde en verander dit na console.log(<packerReturnVariable>); sodat die deobfuscated js afgedruk word in plaas van uitgevoer te word.

  • Plak dan die gewysigde (en steeds geobfuskeerde) js in https://jsconsole.com/ om die deobfuscated js gelog na die konsole te sien.

  • Plak uiteindelik die deobfuscated uitset in https://prettier.io/playground/ om dit te verfraai vir analise.

  • Nota: As jy steeds verpak (maar verskillende) js sien, kan dit herhaaldelik verpak wees. Herhaal die proses.

Verwysings

Gereedskappe

Minder Gebruikte Verwysings

Last updated