Source code Review / SAST Tools
ガイダンスとツールのリスト
マルチ言語ツール
PRのレビューに無料のパッケージがあります。
オープンソースツールです。
サポートされている言語
カテゴリ | 言語 |
---|---|
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 · |
クイックスタート
VSCode内で結果を取得するには、semgrep VSCode Extensionを使用することもできます。
インストール可能な無料バージョンがあります。
クイックスタート
CodeQL
インストール可能な無料バージョンがありますが、ライセンスによると無料のCodeQLバージョンはオープンソースプロジェクトでのみ使用できます。
インストール
クイックスタート - データベースの準備
最初にやるべきことは、データベースの準備(コードツリーの作成)です。後でクエリを実行できるようにします。
コードqlにリポジトリの言語を自動的に識別させ、データベースを作成することができます
通常、これは複数の言語が指定されたことを示すエラーをトリガーします(または自動的に検出されます)。 これを修正するための次のオプションを確認してください!
これを手動で行うことができます。リポジトリと言語を指定して(言語のリスト)
もしリポジトリが1つ以上の言語を使用している場合は、各言語を示す1つのDBを作成することもできます。
codeql
にすべての言語を識別させ、言語ごとにDBを作成することもできます。GITHUB_TOKENを提供する必要があります。
クイックスタート - コードの分析
いよいよコードの分析の時間です
複数の言語を使用した場合は、指定したパスに言語ごとのDBが作成されていることを覚えておいてください。
クイックスタート - スクリプト化
見つけた結果をhttps://microsoft.github.io/sarif-web-component/で視覚化するか、VSCode拡張機能SARIF viewerを使用できます。
また、VSCode拡張機能を使用して、VSCode内で結果を取得することもできます。手動でデータベースを作成する必要がありますが、その後は任意のファイルを選択して右クリック
->CodeQL: Run Queries in Selected Files
をクリックできます。
インストール可能な無料バージョンがあります。
クイックスタート
You can also use the snyk VSCode Extension to get findings inside VSCode.
It's Open Source, but looks unmaintained.
Supported Languages
Java (Maven and Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C#, and Javascript (Node.js).
Quick Start
パブリックリポジトリ向けに無料。
NodeJS
yarn
pnpm
nodejsscan: Node.jsアプリケーション向けの静的セキュリティコードスキャナー(SAST)で、libsastとsemgrepによってパワードされています。
RetireJS: Retire.jsの目標は、既知の脆弱性を持つJSライブラリのバージョンの使用を検出することです。
Electron
electronegativity: Electronベースのアプリケーションでの設定ミスとセキュリティアンチパターンを特定するためのツールです。
Python
Bandit: BanditはPythonコードで一般的なセキュリティの問題を見つけるために設計されたツールです。 Banditは各ファイルを処理し、ASTを構築し、ASTノードに適切なプラグインを実行します。 Banditがすべてのファイルのスキャンを終えると、レポートが生成されます。
safety: Safetyは、既知のセキュリティ脆弱性を持つPython依存関係をチェックし、検出された脆弱性に適切な修正を提案します。Safetyは、開発者のマシン、CI/CDパイプライン、および本番システムで実行できます。
Pyt: 未メンテナンス。
.NET
RUST
ラスト
Java
FindBugs
FindBugsは、Javaプログラムのバグを見つけるための静的解析ツールです。FindBugsは、Javaのバイトコードを解析し、潜在的な問題を特定します。
PMD
PMDは、Javaコードの品質を向上させるための静的解析ツールです。PMDは、コードスタイルの問題や潜在的なバグを見つけるのに役立ちます。
タスク | コマンド |
---|---|
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
PHP
Wordpress プラグイン
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Discovery
Burp:
Spider とコンテンツの発見
Sitemap > フィルタ
Sitemap > ドメインを右クリック > Engagement tools > スクリプトを検索
waybackurls <domain> |grep -i "\.js" |sort -u
静的解析
Unminimize/Beautify/Prettify
'Deobfuscate/Unpack' で言及されているツールも参照してください。
Deobfuscate/Unpack
注意: 完全に deobfuscate することができない場合があります。
.map ファイルを見つけて使用する:
.map ファイルが公開されている場合、それらを使用して簡単に deobfuscate できます。
一般的に、foo.js.map は foo.js にマップされます。手動でそれらを探してください。
それらを見つけるために JS Miner を使用します。
アクティブスキャンが実行されていることを確認します。
'Tips/Notes' を読んでください。
見つかった場合、deobfuscate するために Maximize を使用します。
.map ファイルがない場合、JSnice を試してみてください:
ヒント:
jsnice.org を使用する場合、「Nicify JavaScript」ボタンの隣にあるオプションボタンをクリックし、「Infer types」を選択解除して、コードをコメントで混乱させないようにします。
スクリプトの前に空行を残さないようにしてください。これは deobfuscation プロセスに影響を与え、正確な結果を得られなくなる可能性があります。
JSNice のより現代的な代替手法については、次のリンクを参照してください:
Javascript decompiler, unpacker and unminify toolkit
Wakaru はモダンなフロントエンド向けの Javascript decompiler です。バンドルされたトランスパイルされたソースから元のコードを取り戻します。
Deobfuscate obfuscator.io, unminify and unpack bundled javascript
Un-minify Javascript code using ChatGPT
このツールは、大規模な言語モデル(ChatGPT や llama2 のような)および他のツールを使用して、Javascript コードを un-minify します。LLM は構造的な変更を行わないことに注意してください - 変数や関数の名前を変更するヒントのみを提供します。コードは 1-1 に等しく保たれるように、AST レベルで Babel によって重要な作業が行われます。
Using LLMs to reverse JavaScript variable name minification
console.log()
を使用します;
最後に返される値を見つけて、それを
console.log(<packerReturnVariable>);
に変更して、deobfuscated js が実行されるのではなく、コンソールにログが出力されるようにします。次に、修正された(まだ obfuscated されている)js を https://jsconsole.com/ に貼り付けて、コンソールに deobfuscated js がログ出力されるのを確認します。
最後に、deobfuscated 出力を https://prettier.io/playground/ に貼り付けて、解析のために整形します。
注意: まだ packed された(が異なる)js が表示される場合、再帰的に packed されている可能性があります。プロセスを繰り返してください。
参考文献
ツール
あまり使用されていない参考文献
Last updated