こんにちは!
今月は、ネットワーク系の業務を担当しているチームから「ファジングツール」についてご紹介します。
ファジングとは?
まず「ファジングって何?」という方のために、基本的な概念からご説明します。
ファジングとは、プログラムに対して「開発者が想定していないようなデータ(ファズ)を、大量にひたすら送り続ける」テスト手法です。
ファジングの目的は、システムやプログラムの異常な動作、クラッシュ、メモリ漏れ、セキュリティ上の弱点などを発見することです。
出典:ファジング活用の手引き(独立行政法人情報処理推進機構セキュリティセンター)
https://www.ipa.go.jp/security/vuln/fuzzing/ug65p9000001986g-att/000057652.pdf
しかしながら、人の手で問題を引き起こしそうなデータを大量に用意し実行するのは大変です。
そのため、ファジングを効率的に行えるようにファジングツールを活用します。
ファジングツールを使えば自動で大量のデータを用意できるので、コストをかけずにソフトウェアの品質を高めることができるわけです。
世の中には様々なファジングツールが存在しているため、業務内容により適したファジングツールを採用できるように、私たちは日々ノウハウを収集しています。
今回は、ファジングツールの中でも特にネットワークプロトコルのテストに特化したツール「AFLNet」を試してみました。その使用感や魅力についてご紹介したいと思います。
AFLNetとは?
AFLNetとは、有名なファジングツールであるAFL(American Fuzzy Lop)をベースにネットワークプロトコルのファジング機能を追加したツールです。
AFLNetは、現在公式でHTTPやFTP等、全17種類ものプロトコルをサポートしています。
オープンソースなので誰でも無料で利用することができ、利用者が改修して機能を拡張することも可能です。
AFLNetの特徴
状態遷移を考慮する
サーバとの通信では、「ログイン」→「ファイル選択」→「ダウンロード」のように正しい手順を踏まないとテストできない機能が多く存在しますが、従来のファジングツールではこの状態遷移を考慮できませんでした。
AFLNetは、サーバからの応答をもとに現在の状態を推定します。
入力したテストデータが新しい状態を引き起こした場合には、それを重点的にテストすることでシステムのより深いところにある機能のテストを進めることができる仕組みになっています。
プロトコルの仕様定義が不要
従来のファジングツールは、利用時にテスト対象のプロトコル仕様を記述した定義ファイルを用意する必要がありました。
AFLNetは、実際の通信データを初期テストケースとして与えるだけでファジングを開始することができます。
実際に使ってみた!
今回は、チュートリアルに従ってLive555メディアストリーミングサーバをターゲットにAFLNetを試してみました。
準備
AFLNetの導入は、GitHubのリポジトリからクローンしてビルドするだけなので比較的簡単です。
詳しい手順は下記のREADMEを参考にしてください。
https://github.com/aflnet/aflnet
AFLNetのセットアップ
Live555のセットアップ
ファジングの実行
以下のコマンドでファジングを実行することができます。
オプションの説明
-i: 入力ディレクトリ(初期テストケース)
-o: 出力ディレクトリ
-N: ファジング対象のネットワークサービスのアドレスとポート
-x: カスタム辞書ファイル
-P: ファジング対象のアプリケーション層プロトコル
-D: 応答の待ち時間
‐q: 入力キュー内の各テストケースを処理する回数
-s: プロトコルの状態遷移の深さ
このコマンドでは、./testOnDemandRTSPServer 8554で立ち上げたサーバに対し、初期データとして-iオプションで指定したフォルダ内のファイルを送信することで、RTSPプロトコルの試験を行っています。
以下のような画面が表示されたらファジングが正常に開始されたことを示します。
この画面ではファジングの進行状況、効率、発見された問題など様々な情報を確認することができます。
特に注目すべきなのはoverall resultsという項目です。
ここではファジングの実行結果を確認することができます。
・ overall results:ファジング全体の集計結果を示す
・ cycles done:ファジングサイクルが完了した回数
・ total paths:発見されたユニークな実行パスの総数
・ uniq crashes:発見されたユニークなクラッシュの総
・ uniq hangs:発見されたユニークなハングの総数
まとめ
今回は、AFLNetというネットワークプロトコルに特化したファジングツールをご紹介しました。
簡単な導入・操作で効率的なファジングを行える魅力的なツールだと感じていただけたでしょうか。
重要なのは「テスト対象の特性や目的」に応じて最適なツールを使い分けることです。AFLNetは、ネットワークプロトコルの堅牢性を高める上で非常に強力な選択肢の一つです。
皆さんもネットワークプロトコルの試験を行う際には、ぜひAFLNetの使用も検討してみてください!
いかがでしたでしょうか?
今回の記事を通してエム・ソフトをより深く知っていただくきっかけになれば幸いです!
ぜひ当社公式サイトも見てみてください!
https://www.msoft.co.jp/
https://en-gage.net/msoft_career/
【転機診断チェックシート】
あなたの現状をチェックしてみませんか
https://www.msoft.co.jp/download/Qiita/

最後までお読みいただき、ありがとうございました。






