hacktricks/network-services-pentesting/pentesting-web/code-review-tools.md
Translator workflow 35c6b081d2 Translated to Greek
2024-02-10 22:40:18 +00:00

28 KiB
Raw Blame History

Αναθεώρηση Πηγαίου Κώδικα / Εργαλεία SAST

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

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Οδηγίες και Λίστες εργαλείων

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

Naxus - AI-Gents

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

Semgrep

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

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

Κατηγορία Γλώσσες
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 ·

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

{% code overflow="wrap" %}

# 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

{% endcode %}

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

SonarQube

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

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

{% code overflow="wrap" %}

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

{% endcode %}

CodeQL

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

Εγκατάσταση

{% code overflow="wrap" %}

# 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

{% endcode %}

Γρήγορη Έναρξη - Προετοιμασία της βάσης δεδομένων

{% hint style="success" %} Το πρώτο πράγμα που πρέπει να κάνετε είναι να προετοιμάσετε τη βάση δεδομένων (δημιουργία του δέντρου κώδικα), έτσι ώστε αργότερα να εκτελούνται οι ερωτήσεις πάνω σε αυτήν. {% endhint %}

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

{% code overflow="wrap" %}

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

{% endcode %}

{% hint style="danger" %} Αυτό συνήθως θα προκαλέσει ένα σφάλμα που λέει ότι καθορίστηκαν περισσότερες από μία γλώσσες (ή ανιχνεύθηκαν αυτόματα). Ελέγξτε τις επόμενες επιλογές για να διορθώσετε αυτό! {% endhint %}

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

{% code overflow="wrap" %}

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

{% endcode %}

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

{% code overflow="wrap" %}

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

{% endcode %}

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

{% code overflow="wrap" %}

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

{% endcode %}

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

{% hint style="success" %} Τώρα είναι τελικά η ώρα να αναλύσετε τον κώδικα {% endhint %}

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

{% code overflow="wrap" %}

# 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

{% endcode %}

Γρήγορη Έναρξη - Σεναριοποιημένη

{% code overflow="wrap" %}

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

{% endcode %}

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

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

Snyk

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

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

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

Insider

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

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

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>

DeepSource

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

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 ελέγχει τις εξαρτήσεις της 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

RUST είναι μια γλώσσα προγραμματισμού που έχει σχεδιαστεί για την ανάπτυξη ασφαλών και αποδοτικών συστημάτων λογισμικού. Έχει ένα σύστημα τύπων που επιτρέπει τον έλεγχο των σφαλμάτων κατά τη μεταγλώττιση, εξαλείφοντας τις συνήθεις ευπάθειες ασφάλειας που συνήθως συναντώνται σε άλλες γλώσσες προγραμματισμού. Επιπλέον, η RUST παρέχει αυστηρές κανόνες για τη διαχείριση της μνήμης, εξαλείφοντας τα σφάλματα που σχετίζονται με τη διαχείριση μνήμης όπως τα buffer overflows και τα null pointer dereferences.

Η RUST χρησιμοποιείται ευρέως για την ανάπτυξη λογισμικού υψηλής απόδοσης, όπως λειτουργικά συστήματα, ενσωματωμένα συστήματα και δικτυακές εφαρμογές. Επίσης, η RUST παρέχει εργαλεία για τον έλεγχο του κώδικα, όπως το Rustfmt για τη μορφοποίηση του κώδικα και το Clippy για τον έλεγχο της ποιότητας του κώδικα και την ανίχνευση πιθανών σφαλμάτων.

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

# Install
cargo install cargo-audit

# Run
cargo audit

#Update the Advisory Database
cargo audit fetch

Java

Java είναι μια αντικειμενοστραφής γλώσσα προγραμματισμού που χρησιμοποιείται ευρέως για την ανάπτυξη εφαρμογών. Είναι μια γλώσσα υψηλού επιπέδου και ανεξάρτητη πλατφόρμας, που σημαίνει ότι μπορεί να τρέξει σε διάφορες πλατφόρμες χωρίς να απαιτείται ανακατασκευή του κώδικα. Η γλώσσα Java χρησιμοποιείται ευρέως για την ανάπτυξη web εφαρμογών, κινητών εφαρμογών, ενσωματωμένων συστημάτων και πολλών άλλων εφαρμογών.

Η ανάπτυξη εφαρμογών Java γίνεται συνήθως με τη χρήση ενός ενσωματωμένου ανάπτυξης περιβάλλοντος (IDE) όπως το Eclipse ή το IntelliJ IDEA. Αυτά τα εργαλεία παρέχουν πολλές λειτουργίες για την ανάπτυξη, τη δοκιμή και την αποσφαλμάτωση των εφαρμογών Java.

Για την ανάπτυξη ασφαλών εφαρμογών Java, είναι σημαντικό να γίνει έλεγχος του κώδικα για πιθανές ευπάθειες ασφάλειας. Υπάρχουν διάφορα εργαλεία αναθεώρησης κώδικα που μπορούν να χρησιμοποιηθούν για αυτόν τον σκοπό, όπως το FindBugs, το PMD και το Checkstyle. Αυτά τα εργαλεία ελέγχουν τον κώδικα για πιθανά προβλήματα ασφάλειας, όπως αδυναμίες ελέγχου πρόσβασης, ανεπιθύμητες πρακτικές προγραμματισμού και πιθανές ευπάθειες.

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

Τέλος, είναι σημαντικό να παρακολουθούνται τα ανοικτά προβλήματα ασφάλειας και να ενημερώνεται το λογισμικό Java με τις τελευταίες ενημερώσεις ασφαλείας. Αυτό μπορεί να γίνει μέσω της χρήσης εργαλείων όπως το OWASP Dependency-Check, το οποίο ελέγχει τις εξαρτήσεις του λογισμικού για γνωστά προβλήματα ασφάλειας.

# 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:
  • Ανίχνευση περιεχομένου με το Spider
  • Sitemap > φίλτρο
  • Sitemap > δεξί κλικ στον τομέα > Εργαλεία συμμετοχής > Εύρεση scripts
  1. WaybackURLs:
  • waybackurls <domain> |grep -i "\.js" |sort -u

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

Αναστροφή Ελαχιστοποίησης/Ομορφοποίησης

Αποκωδικοποίηση/Ξεπακετάρισμα

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

  1. Βρείτε και χρησιμοποιήστε αρχεία .map:
  • Εάν τα αρχεία .map είναι προσβάσιμα, μπορούν να χρησιμοποιηθούν για εύκολη αποκωδικοποίηση.
  • Συνήθως, το foo.js.map αντιστοιχεί στο foo.js. Αναζητήστε τα χειροκίνητα.
  • Χρησιμοποιήστε το JS Miner για να τα βρείτε.
  • Βεβαιωθείτε ότι πραγματοποιείται ενεργός σάρωση.
  • Διαβάστε τις 'Συμβουλές/Σημειώσεις'
  • Εάν βρεθούν, χρησιμοποιήστε το Maximize για αποκωδικοποίηση.
  1. Χωρίς αρχεία .map, δοκιμάστε το JSnice:
  • Αναφορές: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
  • Συμβουλές:
  • Εάν χρησιμοποιείτε το jsnice.org, κάντε κλικ στο κουμπί επιλογών δίπλα στο κουμπί "Nicify JavaScript" και απενεργοποιήστε την επιλογή "Infer types" για να μειώσετε την περιττή πληροφορία στον κώδικα με σχόλια.
  • Βεβαιωθείτε ότι δεν αφήνετε κενές γραμμές πριν από το σενάριο, καθώς μπορεί να επηρεάσει τη διαδικασία αποκωδικοποίησης και να δώσει ανακριβή αποτελέσματα.
  1. Χρησιμοποιήστε το console.log();
  • Βρείτε την τιμή επιστροφής στο τέλος και αλλάξτε τη σε console.log(<packerReturnVariable>); ώστε να εκτυπωθεί ο αποκωδικοποιημένος js αντί να εκτελεστεί.
  • Στη συνέχεια, επικολλήστε το τροποποιημένο (και ακόμα αποκωδικοποιημένο) js στο https://jsconsole.com/ για να δείτε το αποκωδικοποιημένο js που καταγράφεται στην κονσόλα.
  • Τέλος, επικολλήστε την αποκωδικοποιημένη έξοδο στο https://prettier.io/playground/ για να την ομορφοποιήσετε για ανάλυση.
  • Σημείωση: Εάν εξακολουθείτε να βλέπετε συμπιεσμένο (αλλά διαφορετικό) js, μπορεί να είναι αναδρομικά συμπιεσμένο. Επαναλάβετε τη διαδικασία.

Αναφορές

Εργαλεία

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

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

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