hacktricks/network-services-pentesting/pentesting-web/code-review-tools.md

20 KiB

소스 코드 검토 / SAST 도구

{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}

가이드 및 도구 목록

다국어 도구

Naxus - AI-Gents

PR 검토를 위한 무료 패키지가 있습니다.

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 Extension을 사용하여 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 %}

  • 당신은 수동으로 repo언어를 지정할 수 있습니다 (언어 목록)

{% 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개의 DB를 생성할 수도 있습니다.

{% 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모든 언어를 식별하고 언어별로 DB를 생성하도록 허용할 수 있습니다. 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 %}

여러 언어를 사용했다면, 언어별 DB가 지정한 경로에 생성되었음을 기억하세요.

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

빠른 시작 - 스크립트 기반

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

You can also use the snyk VSCode Extension to get findings inside VSCode.

Insider

It's Open Source, but looks unmaintained.

Supported Languages

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

Quick Start

# 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: Node.js 애플리케이션을 위한 정적 보안 코드 스캐너(SAST)로 libsastsemgrep로 구동됩니다.
# 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

자바

# 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 [output directory] [jar]
Jar 생성 jar -cmf META-INF/MANIFEST.MF [output jar] *
Base64 SHA256 sha256sum [file] | cut -d' ' -f1 | xxd -r -p | base64
서명 제거 rm META-INF/.SF META-INF/.RSA META-INF/*.DSA
Jar에서 삭제 zip -d [jar] [file to remove]
클래스 디컴파일 procyon -o . [path to class]
Jar 디컴파일 procyon -jar [jar] -o [output directory]
클래스 컴파일 javac [path to .java file]

Go

https://github.com/securego/gosec

PHP

PsalmPHPStan.

Wordpress Plugins

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

Solidity

JavaScript

Discovery

  1. Burp:
  • Spider 및 콘텐츠 발견
  • Sitemap > 필터
  • Sitemap > 도메인 우클릭 > Engagement tools > Find scripts
  1. WaybackURLs:
  • waybackurls <domain> |grep -i "\.js" |sort -u

Static Analysis

Unminimize/Beautify/Prettify

Deobfuscate/Unpack

Note: 완전한 디오브퓨스케이션이 불가능할 수 있습니다.

  1. .map 파일 찾기 및 사용:
  • .map 파일이 노출되면 쉽게 디오브퓨스케이션할 수 있습니다.
  • 일반적으로 foo.js.map은 foo.js에 매핑됩니다. 수동으로 찾아보세요.
  • JS Miner를 사용하여 찾아보세요.
  • 활성 스캔이 수행되도록 하세요.
  • 'Tips/Notes'를 읽어보세요.
  • 발견되면 Maximize를 사용하여 디오브퓨스케이션하세요.
  1. .map 파일 없이 JSnice 시도:
  • 참조: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
  • 팁:
  • jsnice.org를 사용하는 경우 "Nicify JavaScript" 버튼 옆의 옵션 버튼을 클릭하고 "Infer types"의 선택을 해제하여 코드에 주석으로 혼란을 줄이세요.
  • 스크립트 앞에 빈 줄을 남기지 않도록 하세요. 이는 디오브퓨스케이션 과정에 영향을 미쳐 부정확한 결과를 초래할 수 있습니다.
  1. JSNice의 더 현대적인 대안으로는 다음을 확인할 수 있습니다:

Wakaru는 현대 프론트엔드를 위한 Javascript 디컴파일러입니다. 번들 및 트랜스파일된 소스에서 원래 코드를 복원합니다.

이 도구는 대형 언어 모델(예: ChatGPT 및 llama2)과 기타 도구를 사용하여 Javascript 코드를 언미니파이합니다. LLM은 구조적 변경을 수행하지 않으며, 변수 및 함수 이름을 바꾸기 위한 힌트만 제공합니다. 무거운 작업은 Babel이 AST 수준에서 수행하여 코드가 1-1 동등성을 유지하도록 합니다.

  1. console.log() 사용:
  • 끝에서 반환 값을 찾아 console.log(<packerReturnVariable>);로 변경하여 디오브퓨스케이션된 js가 실행되는 대신 출력되도록 합니다.
  • 그런 다음 수정된(여전히 디오브퓨스케이션된) js를 https://jsconsole.com/에 붙여넣어 디오브퓨스케이션된 js가 콘솔에 기록되는 것을 확인합니다.
  • 마지막으로 디오브퓨스케이션된 출력을 https://prettier.io/playground/에 붙여넣어 분석을 위해 아름답게 만듭니다.
  • Note: 여전히 패킹된(하지만 다른) js가 보인다면, 재귀적으로 패킹되었을 수 있습니다. 과정을 반복하세요.

References

Tools

Less Used References

{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}