Source code Review / SAST Tools

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)!

Άλλοι τρόποι υποστήριξης των HackTricks:

Καθοδήγηση και Λίστες εργαλείων

Εργαλεία Πολλαπλών Γλωσσών

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

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

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

ΚατηγορίαΓλώσσες

GA

C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX

Beta

Kotlin · Rust

Πειραματικό

Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp ·

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

# 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

Μπορείτε επίσης να χρησιμοποιήσετε το επέκταση VSCode του semgrep για να λάβετε τα ευρήματα μέσα στο 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 να αναγνωρίσει αυτόματα τη γλώσσα του αποθετηρίου και να δημιουργήσει τη βάση δεδομένων

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

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

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

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

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. Θα πρέπει ακόμα να δημιουργήσετε μια βάση δεδομένων χειροκίνητα, αλλά στη συνέχεια μπορείτε να επιλέξετε οποιαδήποτε αρχεία και να κάνετε κλικ στο Right Click -> 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 για να λάβετε ευρήματα μέσα στο 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 audit
npm audit
  • pnpm

# Install
npm install -g pnpm
# Run
cd /path/to/repo
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 και σε συστήματα παραγωγής.

# 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

FindBugs

FindBugs είναι ένα εργαλείο εύρεσης σφαλμάτων σε κώδικα Java. Ελέγχει τον κώδικα για συνήθη λάθη και προβλήματα ασφάλειας.

Για να χρησιμοποιήσετε το FindBugs, απλά εκτελέστε το εργαλείο στον κώδικά σας και εξετάστε τα αποτελέσματα για πιθανά προβλήματα.

# 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
ΕργασίαΕντολή

Εκτέλεση Jar

java -jar [jar]

Αποσυμπίεση Jar

unzip -d [κατάλογος εξόδου] [jar]

Δημιουργία Jar

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

Base64 SHA256

sha256sum [αρχείο] | cut -d' ' -f1 | xxd -r -p | base64

Αφαίρεση Υπογραφής

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

Διαγραφή από το Jar

zip -d [jar] [αρχείο προς αφαίρεση]

Αποκωδικοποίηση κλάσης

procyon -o . [διαδρομή προς την κλάση]

Αποκωδικοποίηση Jar

procyon -jar [jar] -o [κατάλογος εξόδου]

Συναρμολόγηση κλάσης

javac [διαδρομή προς το αρχείο .java]

Πήγαινε

https://github.com/securego/gosec

PHP

Psalm και PHPStan.

Wordpress Plugins

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

Solidity

JavaScript

Ανακάλυψη

  1. Burp:

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

  • Χάρτης ιστότοπου > φίλτρο

  • Χάρτης ιστότοπου > δεξί κλικ στον τομέα > Εργαλεία συμμετοχής > Εύρεση σεναρίων

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

Στατική Ανάλυση

Αναίρεση Ελάχιστης/Ομορφοποίηση/Καλλωπισμός

Απόκρυψη/Ξεκλείδωμα

Σημείωση: Ενδέχεται να μην είναι δυνατή η πλήρης απόκρυψη.

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

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

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

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

  • Βεβαιωθείτε ότι πραγματοποιείται ενεργός σάρωση.

  • Εάν βρεθούν, χρησιμοποιήστε το Maximize για απόκρυψη.

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

  • Συμβουλές:

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

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

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

Το Wakaru είναι το αποσυνθέτη για μοντέρνο frontend. Επαναφέρει τον αρχικό κώδικα από ένα συστοιχισμένο και μεταγλωττισμένο πηγαίο κώδικα.

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

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

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

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

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

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

Αναφορές

Εργαλεία

Λιγότερο Χρησιμοποιούμενες Αναφορές

Μάθετε το χακάρισμα AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated