20 KiB
Kaynak kod İnceleme / SAST Araçları
AWS hackleme konusunda sıfırdan kahramana dönüşün htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile öğrenin!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!
- Resmi PEASS & HackTricks ürünlerini edinin
- PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- **💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking püf noktalarınızı paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Kılavuz ve Araç Listeleri
- https://owasp.org/www-community/Source_Code_Analysis_Tools
- https://github.com/analysis-tools-dev/static-analysis
Çoklu Dil Araçları
Naxus - AI-Gents
PR'ları incelemek için ücretsiz bir paket bulunmaktadır.
Semgrep
Bu bir Açık Kaynak aracıdır.
Desteklenen Diller
Kategori | Diller |
---|---|
GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
Beta | Kotlin · Rust |
Deneysel | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
Hızlı Başlangıç
{% 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 %}
Ayrıca, bulguları VSCode içinde almak için semgrep VSCode Eklentisini kullanabilirsiniz.
SonarQube
Yüklenebilir bir ücretsiz sürüm bulunmaktadır.
Hızlı Başlangıç
{% 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
Kurulabilir ücretsiz bir sürüm bulunmaktadır ancak lisansa göre yalnızca Açık Kaynak projelerinde ücretsiz CodeQL sürümünü kullanabilirsiniz.
Kurulum
{% 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 %}
Hızlı Başlangıç - Veritabanını Hazırlayın
{% hint style="success" %} Yapmanız gereken ilk şey, veritabanını hazırlamak (kod ağacını oluşturmak) ve daha sonra sorguların üzerinde çalıştırılmasını sağlamaktır. {% endhint %}
- Kodql'nin depodaki dilini otomatik olarak tanımlamasına ve veritabanını oluşturmasına izin verebilirsiniz
{% 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" %} Bu genellikle birden fazla dil belirtildiği (veya otomatik olarak algılandığı) bir hata tetikler. Bunun düzeltilmesi için aşağıdaki seçenekleri kontrol edin! {% endhint %}
- Bu işlemi manuel olarak yapabilirsiniz, repo ve dili belirterek (dil listesi)
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
- Eğer depo 1'den fazla dil kullanıyorsa, her dil için bir DB oluşturabilirsiniz.
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 %}
- Ayrıca
codeql
'e tüm dilleri tanımasına izin verebilir ve dil başına bir veritabanı oluşturabilirsiniz. Bir GITHUB_TOKEN vermeniz gerekmektedir.
{% 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/*
Hızlı Başlangıç - Kodu Analiz Et
{% hint style="success" %} Şimdi nihayet kodu analiz etme zamanı geldi {% endhint %}
Birden fazla dil kullandıysanız, belirttiğiniz yol üzerinde her dil için bir DB oluşturulmuş olacaktır.
# 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 %}
Hızlı Başlangıç - Betimlenmiş
{% 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 %}
Buluntuları https://microsoft.github.io/sarif-web-component/ adresinde görselleştirebilirsiniz veya VSCode eklentisi SARIF viewer kullanabilirsiniz.
Ayrıca buluntuları VSCode içinde görmek için VSCode eklentisini kullanabilirsiniz. Hala veritabanını manuel olarak oluşturmanız gerekecek, ancak daha sonra herhangi bir dosyayı seçebilir ve Sağ Tıkla
-> CodeQL: Run Queries in Selected Files
seçeneğine tıklayabilirsiniz.
Snyk
Yüklenebilir ücretsiz bir sürüm bulunmaktadır.
Hızlı Başlangıç
# 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
Insider
VSCode içinde sonuçları almak için snyk VSCode Extension'ı da kullanabilirsiniz.
Bu Açık Kaynak kodlu, ancak bakımsız görünüyor.
Desteklenen Diller
Java (Maven ve Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# ve Javascript (Node.js).
Hızlı Başlangıç
# 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
Genel depolar için ücretsizdir.
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: Node.js uygulamaları için libsast ve semgrep tarafından desteklenen Statik güvenlik kod tarayıcısı (SAST).
# 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'ın amacı, bilinen güvenlik açıklarına sahip JS kütüphane sürümlerinin kullanımını tespit etmenize yardımcı olmaktır.
# Install
npm install -g retire
# Run
cd /path/to/repo
retire --colors
Electron
- electronegativity: Electron tabanlı uygulamalardaki yanlış yapılandırmaları ve güvenlik karşı desenleri belirlemek için bir araçtır.
Python
- Bandit: Bandit, Python kodunda yaygın güvenlik sorunlarını bulmak için tasarlanmış bir araçtır. Bunun için Bandit her dosyayı işler, bir AST oluşturur ve uygun eklentileri AST düğümlerine karşı çalıştırır. Bandit tüm dosyaları taramayı bitirdiğinde bir rapor oluşturur.
# Install
pip3 install bandit
# Run
bandit -r <path to folder>
- safety: Safety, Python bağımlılıklarını bilinen güvenlik açıkları açısından kontrol eder ve tespit edilen güvenlik açıkları için uygun çözümler önerir. Safety, geliştirici makinelerinde, CI/CD boru hatlarında ve üretim sistemlerinde çalıştırılabilir.
# Install
pip install safety
# Run
safety check
Pyt: Bakımsız.
.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
Java dili, güvenlik açıklarını tespit etmek için birçok araç ve kütüphane sunar. Java kod incelemesi yaparken aşağıdaki araçları kullanabilirsiniz:
- FindBugs: Java kodunuzu analiz ederek potansiyel hataları ve kötü uygulamaları belirler.
- PMD: Kod tabanınızı inceleyerek hatalı kodlama uygulamalarını tespit eder.
- Checkstyle: Kod tabanınızı belirli bir kodlama standardına göre kontrol eder ve uyumsuzlukları raporlar.
- SpotBugs: FindBugs'un devamı niteliğinde olan bu araç, Java kodunuzu analiz ederek hataları tespit eder.
Bu araçlar, Java kodunuzdaki güvenlik açıklarını tespit etmenize ve düzeltmenize yardımcı olabilir.
# 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
Görev | Komut |
---|---|
Jar Dosyasını Çalıştır | java -jar [jar] |
Jar Dosyasını Çıkart | unzip -d [çıktı dizini] [jar] |
Jar Oluştur | jar -cmf META-INF/MANIFEST.MF [çıktı jar] * |
Base64 SHA256 | sha256sum [dosya] | cut -d' ' -f1 | xxd -r -p | base64 |
İmzayı Kaldır | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Jardan Sil | zip -d [jar] [silinecek dosya] |
Sınıfı Çözümle | procyon -o . [sınıfın yolu] |
Jar Dosyasını Çözümle | procyon -jar [jar] -o [çıktı dizini] |
Sınıfı Derle | javac [.java dosyasının yolu] |
Gitmek
https://github.com/securego/gosec
PHP
Wordpress Eklentileri
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Keşif
- Burp:
- Örümcek ve içerik keşfet
- Site haritası > filtre
- Site haritası > alanına sağ tıklayın > Etkileşim araçları > Betikleri bul
waybackurls <domain> |grep -i "\.js" |sort -u
Statik Analiz
Unminimize/Beautify/Prettify
- https://prettier.io/playground/
- https://beautifier.io/
- Ayrıca 'Deobfuscate/Unpack' bölümünde belirtilen bazı araçlara bakın.
Deobfuscate/Unpack
Not: Tamamen deobfuscate etmek mümkün olmayabilir.
- .map dosyalarını bulun ve kullanın:
- .map dosyaları açığa çıkarılmışsa, bunları kolayca deobfuscate etmek için kullanılabilir.
- Genellikle, foo.js.map foo.js'e eşlenir. Bunları manuel olarak arayın.
- Onları bulmak için JS Miner kullanın.
- Aktif taramanın yapıldığından emin olun.
- 'İpuçları/Notlar'ı okuyun
- Bulunduysa, deobfuscate etmek için Maximize kullanın.
- .map dosyaları olmadan, JSnice'ı deneyin:
- Referanslar: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
- İpuçları:
- jsnice.org'u kullanıyorsanız, "Nicify JavaScript" düğmesinin yanındaki seçenekler düğmesine tıklayın ve "Infer types" seçeneğini kaldırarak kodu yorumlarla karıştırmadan temizleyin.
- Kodun başında boş satır bırakmamaya dikkat edin, çünkü bu deobfuscation sürecini etkileyebilir ve yanıltıcı sonuçlar verebilir.
- JSNice'a modern alternatifler için aşağıdakilere bakabilirsiniz:
- https://github.com/pionxzh/wakaru
-
Javascript decompiler, unpacker ve unminify araç seti
Wakaru, modern frontend için Javascript decompiler'dır. Paketlenmiş ve transpile edilmiş kaynaktan orijinal kodu geri getirir.
- https://github.com/j4k0xb/webcrack
-
Obfuscator.io'yu deobfuscate etme, unminify ve paketlenmiş javascript'i açma
- https://github.com/jehna/humanify
-
ChatGPT kullanarak Javascript kodunu un-minify etme
Bu araç, Javascript kodunu un-minify etmek için büyük dil modelleri (ChatGPT ve llama2 gibi) ve diğer araçları kullanır. LLM'ler yapısal değişiklikler yapmaz - yalnızca değişkenleri ve fonksiyonları yeniden adlandırmak için ipuçları sağlar. Kodun 1-1 eşdeğer kalmasını sağlamak için AST seviyesinde Babel tarafından ağır işleme yapılır.
- https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html
-
JavaScript değişken adı minifikasyonunu tersine çevirmek için LLM'leri kullanma
console.log()
kullanın;
- Sonuç değerini bulun ve onu
console.log(<packerReturnVariable>);
olarak değiştirin, böylece deobfuscated js yerine konsola yazdırılır. - Daha sonra, değiştirilmiş (ve hala obfuscated) js'i https://jsconsole.com/ adresine yapıştırarak konsola yazdırılan deobfuscated js'i görebilirsiniz.
- Son olarak, deobfuscated çıktıyı analiz için https://prettier.io/playground/ adresine yapıştırın ve güzelleştirin.
- Not: Hala paketlenmiş (ancak farklı) js görüyorsanız, muhtemelen tekrar paketlenmiştir. İşlemi tekrarlayın.
Referanslar
- YouTube: DAST - Javascript Dinamik Analiz
- https://blog.nvisium.com/angular-for-pentesters-part-1
- https://blog.nvisium.com/angular-for-pentesters-part-2
- devalias'ın GitHub Gists:
- Obfuscated Web Uygulama Kodunu Deobfuscate Etme / Unminify Etme
- Webpack Uygulamalarını Tersine Mühendislik Etme
- vs