Source code Review / SAST Tools

Υποστήριξη HackTricks

Κατευθύνσεις και Λίστες Εργαλείων

Πολυγλωσσικά Εργαλεία

Υπάρχει ένα δωρεάν πακέτο για ανασκόπηση PRs.

Είναι ένα εργαλείο Ανοιχτού Κώδικα.

Υποστηριζόμενες Γλώσσες

Γρήγορη Εκκίνηση

# 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

Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση semgrep για VSCode για να αποκτήσετε τα ευρήματα μέσα στο VSCode.

Υπάρχει μια εγκαταστάσιμη δωρεάν έκδοση.

Γρήγορη Εκκίνηση

# 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

Υπάρχει μια εγκαταστάσιμη δωρεάν έκδοση αλλά σύμφωνα με την άδεια μπορείτε να χρησιμοποιείτε μόνο την δωρεάν έκδοση codeQL σε έργα Ανοιχτού Κώδικα.

Εγκατάσταση

# 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

Γρήγορη Εκκίνηση - Προετοιμάστε τη βάση δεδομένων

Το πρώτο πράγμα που πρέπει να κάνετε είναι να προετοιμάσετε τη βάση δεδομένων (δημιουργήστε το δέντρο κώδικα) ώστε αργότερα οι ερωτήσεις να εκτελούνται πάνω σε αυτήν.

  • Μπορείτε να επιτρέψετε στο codeql να αναγνωρίσει αυτόματα τη γλώσσα του repo και να δημιουργήσει τη βάση δεδομένων

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

Αυτό συνήθως θα προκαλέσει ένα σφάλμα που λέει ότι έχει καθοριστεί περισσότερη από μία γλώσσα (ή ανιχνεύθηκε αυτόματα). Ελέγξτε τις επόμενες επιλογές για να το διορθώσετε!

  • Μπορείτε να το κάνετε αυτό χειροκίνητα υποδεικνύοντας το repo και τη γλώσσα (λίστα γλωσσών)

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
  • Αν το repo σας χρησιμοποιεί περισσότερες από 1 γλώσσα, μπορείτε επίσης να δημιουργήσετε 1 DB ανά γλώσσα υποδεικνύοντας κάθε γλώσσα.

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/*
  • Μπορείτε επίσης να επιτρέψετε στο codeql να εντοπίσει όλες τις γλώσσες για εσάς και να δημιουργήσει μια βάση δεδομένων ανά γλώσσα. Πρέπει να του δώσετε ένα GITHUB_TOKEN.

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/*

Γρήγορη Εκκίνηση - Ανάλυση του κώδικα

Τώρα είναι επιτέλους η ώρα να αναλύσετε τον κώδικα

Θυμηθείτε ότι αν χρησιμοποιήσατε πολλές γλώσσες, μια βάση δεδομένων ανά γλώσσα θα έχει δημιουργηθεί στη διαδρομή που καθορίσατε.

# 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

Γρήγορη Εκκίνηση - Σενάριο

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

Μπορείτε να οπτικοποιήσετε τα ευρήματα στο https://microsoft.github.io/sarif-web-component/ ή χρησιμοποιώντας την επέκταση VSCode SARIF viewer.

Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση VSCode για να αποκτήσετε τα ευρήματα μέσα στο VSCode. Θα χρειαστεί να δημιουργήσετε μια βάση δεδομένων χειροκίνητα, αλλά στη συνέχεια μπορείτε να επιλέξετε οποιαδήποτε αρχεία και να κάνετε κλικ στο Δεξί Κλικ -> CodeQL: Run Queries in Selected Files

Υπάρχει μια εγκαταστάσιμη δωρεάν έκδοση.

Γρήγορη Εκκίνηση

# 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

Μπορείτε επίσης να χρησιμοποιήσετε την snyk VSCode Extension για να αποκτήσετε ευρήματα μέσα στο VSCode.

Είναι Ανοιχτού Κώδικα, αλλά φαίνεται μη συντηρούμενο.

Υποστηριζόμενες Γλώσσες

Java (Maven και Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C#, και Javascript (Node.js).

Γρήγορη Έναρξη

# 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>

Δωρεάν για δημόσια αποθετήρια.

NodeJS

  • yarn

# Install
brew install yarn
# Run
cd /path/to/repo
yarn install
yarn audit # In lower versions
yarn npm audit # In 2+ versions

npm audit
  • pnpm

# Install
npm install -g pnpm
# Run
cd /path/to/repo
pnpm install
pnpm audit
  • nodejsscan: Στατικός σαρωτής ασφαλείας κώδικα (SAST) για εφαρμογές Node.js που υποστηρίζεται από libsast και semgrep.

# Install & run
docker run -it -p 9090:9090 opensecurity/nodejsscan:latest
# Got to localhost:9090
# Upload a zip file with the code
  • RetireJS: Ο στόχος του Retire.js είναι να σας βοηθήσει να ανιχνεύσετε τη χρήση εκδόσεων βιβλιοθηκών JS με γνωστές ευπάθειες.

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

Electron

  • electronegativity: Είναι ένα εργαλείο για την αναγνώριση κακών ρυθμίσεων και προτύπων ασφαλείας σε εφαρμογές βασισμένες σε Electron.

Python

  • Bandit: Ο Bandit είναι ένα εργαλείο σχεδιασμένο για να βρίσκει κοινά ζητήματα ασφαλείας στον κώδικα Python. Για να το κάνει αυτό, ο Bandit επεξεργάζεται κάθε αρχείο, δημιουργεί ένα AST από αυτό και εκτελεί κατάλληλα πρόσθετα στους κόμβους του AST. Μόλις ο Bandit ολοκληρώσει τη σάρωση όλων των αρχείων, δημιουργεί μια αναφορά.

# Install
pip3 install bandit

# Run
bandit -r <path to folder>
  • safety: Το Safety ελέγχει τις εξαρτήσεις Python για γνωστές ευπάθειες ασφαλείας και προτείνει τις κατάλληλες διορθώσεις για τις ευπάθειες που ανιχνεύονται. Το Safety μπορεί να εκτελείται σε μηχανές προγραμματιστών, σε CI/CD pipelines και σε παραγωγικά συστήματα.

# Install
pip install safety
# Run
safety check
  • Pyt: Μη συντηρούμενο.

.NET

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

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

RUST

# Install
cargo install cargo-audit

# Run
cargo audit

#Update the Advisory Database
cargo audit fetch

Java

# 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

Πηγαίνετε

https://github.com/securego/gosec

PHP

Psalm και PHPStan.

Wordpress Plugins

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

Solidity

JavaScript

Discovery

  1. Burp:

  • Spider και ανακάλυψη περιεχομένου

  • Sitemap > φίλτρο

  • Sitemap > δεξί κλικ στο domain > Engagement tools > Βρείτε scripts

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

Static Analysis

Unminimize/Beautify/Prettify

Deobfuscate/Unpack

Σημείωση: Ίσως να μην είναι δυνατόν να γίνει πλήρης αποσυμπίεση.

  1. Βρείτε και χρησιμοποιήστε αρχεία .map:

  • Αν τα αρχεία .map είναι εκτεθειμένα, μπορούν να χρησιμοποιηθούν για εύκολη αποσυμπίεση.

  • Συνήθως, foo.js.map αντιστοιχεί σε foo.js. Αναζητήστε τα χειροκίνητα.

  • Χρησιμοποιήστε JS Miner για να τα αναζητήσετε.

  • Βεβαιωθείτε ότι διεξάγεται ενεργή σάρωση.

  • Διαβάστε 'Tips/Notes'

  • Αν βρεθούν, χρησιμοποιήστε Maximize για να αποσυμπιέσετε.

  1. Χωρίς αρχεία .map, δοκιμάστε το JSnice:

  • Συμβουλές:

  • Αν χρησιμοποιείτε το jsnice.org, κάντε κλικ στο κουμπί επιλογών δίπλα στο κουμπί "Nicify JavaScript" και αποεπιλέξτε "Infer types" για να μειώσετε την ακαταστασία στον κώδικα με σχόλια.

  • Βεβαιωθείτε ότι δεν αφήνετε κενές γραμμές πριν από το script, καθώς μπορεί να επηρεάσει τη διαδικασία αποσυμπίεσης και να δώσει ανακριβή αποτελέσματα.

  1. Για μερικές πιο σύγχρονες εναλλακτικές στο JSNice, μπορείτε να δείτε τα εξής:

  • Javascript decompiler, unpacker και unminify toolkit Wakaru είναι ο Javascript decompiler για σύγχρονα frontend. Επαναφέρει τον αρχικό κώδικα από μια συσκευασμένη και μεταγλωττισμένη πηγή.

  • Deobfuscate obfuscator.io, unminify και unpack bundled javascript

  • Un-minify Javascript code χρησιμοποιώντας ChatGPT Αυτό το εργαλείο χρησιμοποιεί μεγάλα γλωσσικά μοντέλα (όπως ChatGPT & llama2) και άλλα εργαλεία για να αποσυμπιέσει τον κώδικα Javascript. Σημειώστε ότι τα LLMs δεν εκτελούν καμία δομική αλλαγή – παρέχουν μόνο υποδείξεις για την μετονομασία μεταβλητών και συναρτήσεων. Η βαριά εργασία γίνεται από το Babel σε επίπεδο AST για να διασφαλιστεί ότι ο κώδικας παραμένει 1-1 ισοδύναμος.

  • Χρησιμοποιώντας LLMs για να αντιστρέψετε την ελαχιστοποίηση ονομάτων μεταβλητών JavaScript

  1. Χρησιμοποιήστε console.log();

  • Βρείτε την τιμή επιστροφής στο τέλος και αλλάξτε την σε console.log(<packerReturnVariable>); ώστε ο αποσυμπιεσμένος js να εκτυπώνεται αντί να εκτελείται.

  • Στη συνέχεια, επικολλήστε τον τροποποιημένο (και ακόμα obfuscated) js στο https://jsconsole.com/ για να δείτε τον αποσυμπιεσμένο js να καταγράφεται στην κονσόλα.

  • Τέλος, επικολλήστε την αποσυμπιεσμένη έξοδο στο https://prettier.io/playground/ για να την ομορφύνετε για ανάλυση.

  • Σημείωση: Αν εξακολουθείτε να βλέπετε packed (αλλά διαφορετικό) js, μπορεί να είναι αναδρομικά packed. Επαναλάβετε τη διαδικασία.

References

Tools

Less Used References

Support HackTricks

Last updated