セキュリティ ポリシーを調べて適用する必要がある Java ソース コードがあります [CWE の適用など]。AST を使用してツリーをたどる初心者向けに、いくつかのアイデアがあります。その他には、正規表現の使用が含まれます。そのようなプロセスに使用できる AST または正規表現以外のオプションはありますか。
4 に答える
AST は適切な選択であり、正規表現よりもはるかに優れています。
多数の Java パーサーが利用可能です。ANTLR の Java 文法はその一例です。
OpenJDK からコンパイラのソース コードを適合させることもできます。javac
PMDなどの一部の静的分析ツールは、多くの作業を行わなくても多くのチェックを実行できるようにするユーザー定義のルールをサポートしています。
関心のある脆弱性に焦点を当てた既存の静的分析ツールを取得するか、カスタム分析を構築するための強力な基盤を備えたツールを取得する必要があります。
AST に解析するだけでは、分析を行うための多くのサポートは得られません。シンボルがどこで何を意味するか (スコープ、シンボル テーブル、型解決など) を知る必要があり、多くの場合、ソフトウェア要素を構成するソフトウェア要素間で情報がどのように流れるか(継承グラフ、呼び出しグラフ、制御フロー、データ フロー)を知る必要があります。システム。ANTLR のようなツールはこれを提供しません。それらはパーサージェネレーターです。
この情報を Java で利用できるツール基盤は、DMS Software Reengineering ToolkitとそのJava フロント エンドです。
多くの静的ソース コード分析 (SCA) ツールは、正規表現のコレクションを使用して、脆弱な可能性のあるコードを検出します。Java 用の SCA ツールは数多くありますが、私は最良のオープン ソースをすぐには知りません。Coverityは、私が使用した中で最高の Java SCA ツールであり、競合状態も検出できるため、単なる正規表現よりもはるかに高度です。
私が言えることは、このアプローチは多くの偽陽性と偽陰性を生み出すということです. CWE システムは何百もの異なる脆弱性をインデックス化しており、それらすべてをカバーすることは完全に不可能です。
求めていることの一部またはすべてを実行する既存のツールが多数あります。ソース コード レベルのものもあれば、バイト コードの解析によるものもあります。
見てください - CheckStyle - FindBugs - PMD
これらはすべて何らかの方法で拡張可能であるため、多くの標準チェックに加えて、チェックしたいものをチェックさせることができます。