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バージョンを使用できます。
インストール
クイックスタート - データベースの準備
最初に行うべきことは、データベースを準備する(コードツリーを作成する)ことで、後でクエリがそれに対して実行されます。
codeqlにリポジトリの言語を自動的に識別させ、データベースを作成させることができます。
これは通常、複数の言語が指定された(または自動的に検出された)というエラーをトリガーします。次のオプションを確認してこれを修正してください!
あなたはこれを手動で指定することができます、リポジトリと言語を(言語のリスト)
あなたのリポジトリが1つ以上の言語を使用している場合、各言語を示す言語ごとのDBを1つ作成することもできます。
codeql
に すべての言語を特定 させ、言語ごとにデータベースを作成させることもできます。GITHUB_TOKEN を提供する必要があります。
クイックスタート - コードを分析する
ついにコードを分析する時が来ました
複数の言語を使用した場合、言語ごとにDBが指定したパスに作成されることを忘れないでください。
クイックスタート - スクリプト化された
結果をhttps://microsoft.github.io/sarif-web-component/で視覚化するか、VSCode拡張機能SARIF viewerを使用できます。
また、VSCode拡張機能を使用して、VSCode内で結果を取得することもできます。データベースを手動で作成する必要がありますが、その後、任意のファイルを選択し、右クリック
-> CodeQL: 選択したファイルでクエリを実行
をクリックできます。
インストール可能な無料版があります。
クイックスタート
You can also use the snyk VSCode Extensionを使用して、VSCode内での発見を得ることができます。
これはオープンソースですが、メンテナンスされていないようです。
対応言語
Java (MavenおよびAndroid)、Kotlin (Android)、Swift (iOS)、.NET Full Framework、C#、およびJavascript (Node.js)。
クイックスタート
公開リポジトリに対して無料です。
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
タスク | コマンド |
---|---|
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 Plugins
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Discovery
Burp:
スパイダーとコンテンツを発見
サイトマップ > フィルター
サイトマップ > ドメインを右クリック > エンゲージメントツール > スクリプトを見つける
waybackurls <domain> |grep -i "\.js" |sort -u
Static Analysis
Unminimize/Beautify/Prettify
下記の「Deobfuscate/Unpack」で言及されているツールも参照してください。
Deobfuscate/Unpack
注意: 完全にデオブフスケートすることはできない場合があります。
.mapファイルを見つけて使用する:
.mapファイルが公開されている場合、簡単にデオブフスケートできます。
一般的に、foo.js.mapはfoo.jsにマップされます。手動で探してください。
JS Minerを使用して探してください。
アクティブスキャンが実施されていることを確認してください。
'Tips/Notes'を読んでください。
見つかった場合、Maximizeを使用してデオブフスケートします。
.mapファイルがない場合、JSniceを試してください:
ヒント:
jsnice.orgを使用する場合、「Nicify JavaScript」ボタンの隣にあるオプションボタンをクリックし、「Infer types」の選択を外して、コメントでコードが散らかるのを減らしてください。
スクリプトの前に空行を残さないようにしてください。デオブフスケートプロセスに影響を与え、不正確な結果をもたらす可能性があります。
JSNiceの現代的な代替手段として、以下を検討してください:
Javascriptデコンパイラ、アンパッカーおよびアンミニファイツールキット
Wakaruは現代のフロントエンド用のJavascriptデコンパイラです。バンドルされ、トランスパイルされたソースから元のコードを復元します。
obfuscator.ioをデオブフスケートし、ミニファイを解除し、バンドルされたjavascriptをアンパックします
ChatGPTを使用してJavascriptコードをアンミニファイします
このツールは大規模言語モデル(ChatGPTやllama2など)と他のツールを使用してJavascriptコードをアンミニファイします。LLMは構造的な変更を行わず、変数や関数の名前を変更するためのヒントを提供するだけです。重い作業はASTレベルでBabelによって行われ、コードが1-1で同等であることを保証します。
JavaScriptの変数名ミニファイを逆転させるためのLLMの使用
console.log()
を使用する;
最後の戻り値を見つけて、
console.log(<packerReturnVariable>);
に変更し、デオブフスケートされたjsが実行されるのではなく印刷されるようにします。次に、修正された(まだオブフスケートされた)jsをhttps://jsconsole.com/に貼り付けて、デオブフスケートされたjsがコンソールにログされるのを確認します。
最後に、デオブフスケートされた出力をhttps://prettier.io/playground/に貼り付けて、分析のために美化します。
注意: まだパックされた(しかし異なる)jsが表示される場合、それは再帰的にパックされている可能性があります。プロセスを繰り返してください。
References
Tools
Less Used References
Last updated