hacktricks/network-services-pentesting/pentesting-web/code-review-tools.md
2024-02-11 02:13:58 +00:00

21 KiB

Ukaguzi wa Msimbo wa Chanzo / Zana za SAST

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Mwongozo na Orodha ya Zana

Zana za Lugha Mbalimbali

Naxus - AI-Gents

Kuna pakiti ya bure ya kukagua PRs.

Semgrep

Ni zana ya chanzo wazi.

Lugha Zinazoungwa Mkono

Jamii Lugha
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 ·

Mwanzo wa Haraka

{% 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 %}

Unaweza pia kutumia Kifaa cha Upanuzi cha semgrep VSCode ili kupata matokeo ndani ya VSCode.

SonarQube

Kuna toleo la bure linaloweza kusakinishwa.

Mwanzo wa Haraka

{% 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

Kuna toleo la bure linaloweza kusakinishwa lakini kulingana na leseni unaweza kutumia toleo la bure la codeQL katika miradi ya chanzo wazi tu.

Sakinisha

{% 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 %}

Mwanzo wa Haraka - Andaa database

{% hint style="success" %} Jambo la kwanza unalohitaji kufanya ni kuandaa database (umba mti wa nambari) ili baadaye maswali yaweze kutekelezwa juu yake. {% endhint %}

  • Unaweza kuruhusu codeql kutambua lugha ya repo kiotomatiki na kuunda database

{% 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" %} Hii kawaida itasababisha kosa linalosema kwamba lugha zaidi ya moja zilitajwa (au ziligunduliwa kiotomatiki). Angalia chaguo zifuatazo ili kurekebisha hili! {% endhint %}

  • Unaweza kufanya hivi kwa kuelezea kwa mkono repo na lugha (orodha ya lugha)

{% 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 %}

  • Ikiwa repo yako inatumia zaidi ya lugha 1, unaweza pia kuunda 1 DB kwa kila lugha ikionyesha kila lugha.

{% 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 %}

  • Unaweza pia kuruhusu codeql kutambua lugha zote kwa ajili yako na kuunda DB kwa kila lugha. Unahitaji kumpa 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/*

{% endcode %}

Mwanzo wa Haraka - Tathmini Kanuni

{% hint style="success" %} Sasa ni wakati wa mwisho wa kuchambua kanuni {% endhint %}

Kumbuka kwamba ikiwa ulitumia lugha kadhaa, DB kwa kila lugha itakuwa imeundwa katika njia uliyotaja.

{% 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

Mwanzo wa Haraka - Kwa Kutumia Script

{% 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 %}

Unaweza kuona matokeo katika https://microsoft.github.io/sarif-web-component/ au kwa kutumia kifaa cha VSCode SARIF viewer.

Unaweza pia kutumia kifaa cha VSCode ili kupata matokeo ndani ya VSCode. Bado utahitaji kuunda database kwa mkono, lakini kisha unaweza kuchagua faili yoyote na bonyeza Right Click -> CodeQL: Run Queries in Selected Files

Snyk

Kuna toleo la bure linaloweza kusakinishwa.

Mwanzo wa Haraka

# 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

Unaweza pia kutumia snyk VSCode Extension kupata matokeo ndani ya VSCode.

Insider

Ni Open Source, lakini inaonekana haijasasishwa.

Lugha Zinazoungwa Mkono

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

Mwanzo wa Haraka

# 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

Bure kwa repos za umma.

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: Lengo la Retire.js ni kukusaidia kugundua matumizi ya toleo la maktaba ya JS lenye mashimo ya usalama yanayojulikana.
# Install
npm install -g retire
# Run
cd /path/to/repo
retire --colors

Electron

  • electronegativity: Ni chombo cha kutambua mipangilio isiyofaa na mifano ya usalama katika programu zinazotumia Electron.

Python

  • Bandit: Bandit ni chombo kilichoundwa ili kutambua matatizo ya kawaida ya usalama katika nambari za Python. Bandit hufanya hivi kwa kusindika kila faili, kujenga AST kutoka kwake, na kukimbia programu husika dhidi ya nodi za AST. Mara Bandit imekamilisha uchunguzi wa faili zote, inazalisha ripoti.
# Install
pip3 install bandit

# Run
bandit -r <path to folder>
  • usalama: Usalama hufanya ukaguzi wa utegemezi wa Python kwa ajili ya kasoro za usalama zinazojulikana na kupendekeza marekebisho sahihi kwa kasoro zilizogunduliwa. Usalama unaweza kukimbia kwenye mashine za watengenezaji, kwenye mifumo ya CI/CD na kwenye mifumo ya uzalishaji.
# Install
pip install safety
# Run
safety check
  • Pyt: Haijasasishwa.

.NET

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

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

RUST

RUST ni lugha ya programu inayojulikana kwa usalama wake na utendaji wake wa juu. Inatumika sana katika maendeleo ya programu za mfumo na zana za usalama. Hapa kuna zana kadhaa za ukaguzi wa nambari ambazo zinaweza kutumiwa kwa ukaguzi wa nambari ya RUST:

Clippy

Clippy ni zana ya ukaguzi wa nambari ya RUST ambayo inasaidia kugundua na kurekebisha kasoro za kawaida za programu. Inatoa vidokezo vya kuboresha ubora wa nambari na kuzuia makosa ya kawaida.

Rustfmt

Rustfmt ni zana ya muundo wa nambari ya RUST ambayo inasaidia kubadilisha muundo wa nambari ili iweze kufuata viwango vya muundo vilivyowekwa. Inasaidia kudumisha muundo wa nambari wa kawaida na kufanya iwe rahisi kusoma na kuelewa.

Cargo-audit

Cargo-audit ni zana ya ukaguzi wa usalama ya RUST ambayo inasaidia kugundua na kurekebisha kasoro za usalama katika dependencies za mradi wa RUST. Inasaidia kuzuia matumizi ya dependencies ambazo zina kasoro za usalama.

Rust-analyzer

Rust-analyzer ni zana ya uchambuzi wa nambari ya RUST ambayo inasaidia kutoa vidokezo vya kuboresha ubora wa nambari. Inatoa huduma za kiotomatiki kama vile autocompletion, refactoring, na uchambuzi wa nambari ili kusaidia watumiaji kuandika nambari bora na yenye ufanisi.

RustSec

RustSec ni zana ya ukaguzi wa usalama ya RUST ambayo inasaidia kugundua na kurekebisha kasoro za usalama katika dependencies za mradi wa RUST. Inatoa habari muhimu kuhusu kasoro za usalama na inasaidia kuchukua hatua za haraka za kurekebisha kasoro hizo.

Rust Language Server (RLS)

Rust Language Server (RLS) ni zana ya kusaidia maendeleo ya programu ya RUST ambayo inasaidia kutoa huduma za kiotomatiki kama vile autocompletion, refactoring, na uchambuzi wa nambari. Inasaidia watumiaji kuandika nambari bora na yenye ufanisi kwa kutumia lugha ya RUST.

# Install
cargo install cargo-audit

# Run
cargo audit

#Update the Advisory Database
cargo audit fetch

Java

Java ni lugha ya programu inayotumika sana kwa maendeleo ya programu za kompyuta. Inajulikana kwa usalama wake na uwezo wake wa kufanya kazi kwenye majukwaa tofauti. Hapa chini ni zana kadhaa za ukaguzi wa nambari za Java ambazo zinaweza kutumika katika mchakato wa ukaguzi wa nambari:

  • FindBugs: Zana hii inachunguza nambari ya Java kwa makosa ya kawaida na kasoro. Inaweza kugundua matumizi mabaya ya API, matumizi ya kumbukumbu, na mifumo ya kudhibiti ubora wa nambari.

  • PMD: Zana hii inachunguza nambari ya Java kwa makosa ya kawaida, mazoea bora, na kasoro. Inaweza kugundua matumizi mabaya ya API, matumizi ya kumbukumbu, na mifumo ya kudhibiti ubora wa nambari.

  • Checkstyle: Zana hii inachunguza nambari ya Java kwa kufuata viwango vya kubuni na miongozo. Inaweza kugundua kasoro za kubuni, kama vile matumizi yasiyofaa ya nafasi na alama za uandishi.

  • SonarQube: Zana hii inachunguza nambari ya Java kwa kasoro, makosa, na mazoea mabaya. Inaweza kugundua matumizi mabaya ya API, matumizi ya kumbukumbu, na mifumo ya kudhibiti ubora wa nambari.

  • FindSecBugs: Zana hii inachunguza nambari ya Java kwa kasoro za usalama. Inaweza kugundua matumizi mabaya ya API, matumizi ya kumbukumbu, na mifumo ya kudhibiti ubora wa nambari.

  • SpotBugs: Zana hii inachunguza nambari ya Java kwa makosa ya kawaida na kasoro. Inaweza kugundua matumizi mabaya ya API, matumizi ya kumbukumbu, na mifumo ya kudhibiti ubora wa nambari.

  • FindBugs-Security-Extras: Zana hii inachunguza nambari ya Java kwa kasoro za usalama. Inaweza kugundua matumizi mabaya ya API, matumizi ya kumbukumbu, na mifumo ya kudhibiti ubora wa nambari.

  • Error Prone: Zana hii inachunguza nambari ya Java kwa makosa ya kawaida na kasoro. Inaweza kugundua matumizi mabaya ya API, matumizi ya kumbukumbu, na mifumo ya kudhibiti ubora wa nambari.

  • Infer: Zana hii inachunguza nambari ya Java kwa kasoro na makosa. Inaweza kugundua matumizi mabaya ya API, matumizi ya kumbukumbu, na mifumo ya kudhibiti ubora wa nambari.

  • Find-Security-Bugs: Zana hii inachunguza nambari ya Java kwa kasoro za usalama. Inaweza kugundua matumizi mabaya ya API, matumizi ya kumbukumbu, na mifumo ya kudhibiti ubora wa nambari.

# 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
Kazi Amri
Tekeleza Jar java -jar [jar]
Fungua Jar unzip -d [directory ya matokeo] [jar]
Unda Jar jar -cmf META-INF/MANIFEST.MF [jar ya matokeo] *
Base64 SHA256 sha256sum [faili] | cut -d' ' -f1 | xxd -r -p | base64
Ondoa Saini rm META-INF/.SF META-INF/.RSA META-INF/*.DSA
Futa kutoka Jar zip -d [jar] [faili ya kuondoa]
Fungua darasa procyon -o . [njia ya darasa]
Fungua Jar procyon -jar [jar] -o [directory ya matokeo]
Kompaili darasa javac [njia ya faili ya .java]

Endelea

https://github.com/securego/gosec

PHP

Psalm na PHPStan.

Wordpress Plugins

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

Solidity

JavaScript

Ugunduzi

  1. Burp:
  • Spider na ugundue maudhui
  • Sitemap > chuja
  • Sitemap > bofya kulia kwenye kikoa > Zana za Ushiriki > Tafuta hati
  1. WaybackURLs:
  • waybackurls <kikoa> |grep -i "\.js" |sort -u

Uchambuzi Statisa

Unminimize/Beautify/Prettify

Deobfuscate/Unpack

Note: Huenda isingewezekana kufanya deobfuscate kikamilifu.

  1. Tafuta na tumia faili za .map:
  • Ikiwa faili za .map zimefunuliwa, zinaweza kutumika kufanya deobfuscate kwa urahisi.
  • Kawaida, foo.js.map inaonyesha foo.js. Tafuta kwa mkono.
  • Tumia JS Miner kuzitafuta.
  • Hakikisha uchunguzi wa moja kwa moja unafanywa.
  • Soma 'Machapisho/Maelezo'
  • Ikiwa zimepatikana, tumia Maximize kufanya deobfuscate.
  1. Bila faili za .map, jaribu JSnice:
  • Marejeo: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
  • Vidokezo:
  • Ikiwa unatumia jsnice.org, bofya kitufe cha chaguo karibu na kitufe cha "Nicify JavaScript", na usichague "Infer types" ili kupunguza uchafuzi wa kificho na maoni.
  • Hakikisha hauachi mistari tupu kabla ya hati, kwani inaweza kuathiri mchakato wa deobfuscation na kutoa matokeo yasiyo sahihi.
  1. Tumia console.log();
  • Tafuta thamani ya kurudi mwishoni na ibadilishe kuwa console.log(<packerReturnVariable>); ili kificho kilichofanyiwa deobfuscate kiweze kuchapishwa badala ya kutekelezwa.
  • Kisha, nakili kificho kilichobadilishwa (na bado kimefichwa) kwenye https://jsconsole.com/ ili uone kificho kilichofanyiwa deobfuscate kikichapishwa kwenye konsoli.
  • Hatimaye, nakili matokeo ya deobfuscate kwenye https://prettier.io/playground/ ili kufanya kificho kuwa safi kwa ajili ya uchambuzi.
  • Note: Ikiwa bado unaona kificho kilichofungwa (lakini tofauti), huenda kimefungwa kwa njia ya kurudia. Rudia mchakato.

Marejeo

Zana

Marejeo Yasiyotumiwa Sana

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: