
Mininodeは、ソースコードの静的解析を使用してNode.jsアプリケーションの攻撃対象領域を削減するCLIツールです。2つの削減モードをサポートしています。(1) coarse, (2) fine。
Mininodeは、メインファイル(アプリケーションのエントリポイント)から開始して、アプリケーションの依存関係グラフ(使用されているモジュールと関数)を構築します。Mininodeは、エントリポイントをpackage.jsonファイルのmainフィールドに設定します(存在する場合)。存在しない場合はデフォルトでindex.jsになります。
使用例: node index.js <path to Node application root folder> --mode=(coarse|fine)。以下はMininodeに渡すことができるオプションのリストです。
mininodeに渡すことができるコマンドラインオプションのリスト。
--destination, -d: mininodeが削減されたNode.jsアプリケーションを保存するパス。デフォルト値: mininode。--dry-run: 初期アプリケーションを変更せずにmininode.jsonを生成するだけです。--mode, -m: 削減モード。値はcoarseまたはfineのいずれかです。coarseモードでは、mininodeは粗粒度の削減のみを実行します。一方、fineモードでは、mininodeは細粒度の削減を実行します。一般的に、粗粒度の削減の方が信頼性が高いです。なぜなら、mininodeはモジュール内の未使用関数を削減しようとしないからです。デフォルト値: coarse。--silent: コンソール出力を無効にします。これによりmininodeのパフォーマンスが向上します。--verbose: コンソールに追加情報を出力します。デフォルト値: false--log: mininodeは内部にログファイルを生成します。このログファイルにはアプリケーションの依存関係グラフがJSON形式で含まれます。デフォルト値: true。--log-output: mininodeによって生成されるログファイルの名前。デフォルト値: mininode.json。--compress-log: 最終的なログファイルを圧縮します。デフォルトではすべてをログファイルにダンプします。本番環境ではスペースを節約するために--compress-logフラグを渡すことをお勧めします。--seeds: mininodeが依存関係グラフの構築を開始するシードファイル。コロンで区切って複数のシードファイルを指定できます。--skip-stat: 統計情報の計算をスキップします--skip-reduction: このオプションを渡すと、mininodeはJavaScriptファイルを削減しません。デフォルト値: false。--skip-remove: このオプションを渡すと、mininodeは未使用のJavaScriptファイルを削除しません。デフォルト値: false。evalなどの動的動作を使用するNode.jsアプリケーションの攻撃対象領域を削減できません。Mininodeがアプリケーション内で動的動作を検出した場合、エラーDYNAMIC_BEHAVOUR_DETECTEDで終了します。私たちの研究の詳細については、以下の研究論文をご覧ください:
Mininode: Reducing the Attack Surface of Node.js Applications [PDF]
Igibek Koishybayev, Alexandros Kapravelos
Proceedings of the International Symposium on Research in Attacks, Intrusions and Defenses (RAID), 2020
研究でMininodeを使用する場合は、以下のBibTeXエントリを使用して引用することを検討してください:
@conference{mininode-raid20,
title = {{Mininode: Reducing the Attack Surface of Node.js Applications}},
author = {Koishybayev, Igibek and Kapravelos, Alexandros},
booktitle = {{Proceedings of the International Symposium on Research in Attacks, Intrusions and Defenses (RAID)}},
year = {2020}
}
私たちはsemistandardに従っています。