ソフトウェアの品質を学びまくる

ソフトウェアの品質、ソフトウェアテストなどについて学んだことを記録するブログです。

「IoTセキュリティのための動的テスト(ファジング)」 #IoTテストアドカレ(21)

はじめに

 この記事は、IoTのテストに関するネットの記事を読んでいく、「IoTテスト アドベントカレンダー」の21日目です。いったいいつから・・・アドベントカレンダーはその年のうちに終わると錯覚していた? 20日目はコチラ。

kzsuzuki.hatenablog.com

プロファイル

  • タイトル: 『Security Testing the Internet of Things IoT: Dynamic testing (Fuzzing) for IoT security』
  • 著者: Beyond Security
  • 参照サイト: Beyond Security

ポイント

 IoTのマーケットに各製造業者が押し寄せているが、ネットワークデバイスについての経験がないことが多く、ハードウェア・ソフトウェアのセキュリティ設計・構築の複雑さは見逃されがち。プロダクトが普及した後に脆弱性が発見されると、個人・家庭内・移動体・ビジネスといった各エリアにおいて、攻撃を受けるポテンシャルを抱えてしまうことになる。

静的テストと動的テスト

  • 静的テスト脆弱性の検出の手段としてよく使われるが、プロセッサーやメモリといった、アプリケーションのインストール先に潜む脆弱性を見つけるようには設計されていない。
  • 動的テストでは、静的テストでは見つけられない隠れた欠陥・脆弱性を見つけることができる。たとえば、古いプロセッサー上で新しいコードが動く際の脆弱性を見つけるのに重要な役割を果たす。

ファザー

  • バイスやアプリケーションを攻撃する攻撃者は「ファザー」(fuzzer)を利用している。予期しないような壊れたデータを生成・入力したり、プロトコルの境界を狙ったりして、アプリケーションを破壊する組み合わせを探す。
  • 開発側もファザーを用いることで、脆弱性をできる限り低減しておく必要がある。ただし、多くのファザーはある特定のタイプの脆弱性プロトコルに特化していることが多い。
  • ファザーは、バッファオーバーフローエラーのテスト、プロトコル違反のテスト、ブラックボックステストなどの助けになる。
バッファオーバーフローのテスト
  • バッファオーバーフローの問題がある場合、バッファの外にあるメモリの内容を上書きされ、悪意あるコードを埋め込まれたりするので、脆弱性の元である。
  • beSTORM™では、ヘッダを改竄したパケットを送り込んだりすることで、欠陥を検出する。
プロトコル違反のテスト
  • バイス間の通信のために用いられるAPIに対して、攻撃が行われる。たとえば、入力値に対する誤ったバリデーション・境界値チェックや、設計の瑕疵、プロトコル自体の実装の問題を突く。攻撃の組み合わせの量が膨大になるので、もっともエラーの原因になりそうな箇所から試行したうえで、組み合わせ空間をカバーしていく。
  • 値の操作だけでなく、プロトコルの操作、ロジックの操作といった先進的なアルゴリズムが、ファザーの能力を決める要因である。
  • beSTORM™は、おそらく唯一のマルチプロトコル対応のファザー。50のプロトコルをサポートしているうえ、固有のプロトコルであっても自動的に学習することができる。
ブラックボックステスト
  • アプリケーションの内部について知識がない場合、テスターはまずトラフィックを調べて、それをベースにして、正当な入力、ランダムな入力、おかしな入力を試す。
  • ツールでは、内部エラーを引き起こすために組み立てられた入力を、繰り返しプログラムに食わせる。「フォールトインジェクション」とも言う。
  • beSTORM™は攻撃の組み合わせを徹底的かつ賢く行い、アプリケーションの異常な動作を検出する、強力なブラックボックステストツールである。

所感

この文章って・・・

 ファジングについての話なのですが、beSTORM™という特定プロダクトをやたら推してくる。

bestorm.jp

のはまあいいとして、とにかく読みづらい・・・! 文章と文章のつながりがわかりづらい部分が多く、読み進めるのに苦労しました。で、内容も理解できない点が多かったので、いろいろ調べていると・・・。

Open Source Fuzzing Tools

Open Source Fuzzing Tools

 なんか、この本*1文章がものすごく似ているんですよね。読みづらいのも当然で、書籍の文章が、この記事の複数箇所に切り貼りされているんです。これは何なんだ、記事と書籍の著者が同じならいいのかもしれないけれど・・・。
 まああまり闇に突っ込みたくないので、記事では不明だった点を、書籍の方の記述に基づいて少し補足しておきます。

ファジングの技術

 ファジングの技術として、「値の操作」「プロトコルの操作」「ロジックの操作」というのがありました。具体的には、以下のようなことみたいです。

  • 値の操作: たとえばTCPセグメントにおけるポート番号のフィールドに、記号を入れたり、RFC規定の外の数字を入れたりして、アプリケーションに送り込むこと。各フィールドの意味自体は気にせず、エラーを引き起こしそうな入力パターンを試します。
  • プロトコルの操作: たとえばHTTPにおいて、「GET GET GET」などと送り込んでみる。プロトコルのフィールドやコマンドの意味を把握したうえで、それを壊そうとする試みのようです。
  • ロジックの操作: たとえばSMTPにおいて、EHLOの前にRCPT TOを送り込む。プロトコルの正規手順を理解したうえで、例外的な手順だったり違反した手順を試して脆弱性を探すイメージでしょうか。

ファジングって動的テストなの?

 正直申しまして、動的テストとファジングによるテストの違いがわかっていません。ファジングは動的テストの一種?
 過去にIBM AppScanを見たことがありますが、これはファザーなのか?

www-03.ibm.com

 ネットワークセキュリティの調査では、BreakingPointに関わったこともありました。ちょっとだけ。

jp.ixiacom.com

 なおJaSST'17 Tokyoでは、ベリサーブの松木さんが「IoT時代に立ち向かうテスト・ファジング技術入門」というチュートリアルを行う予定になっていますね。   

 ソフトウェア化していく世界のなか、まずコンピュータがクラウドという形で結実し、昨今はモノのソフトウェア化=IoTが進んでいます。実在の世界における"環境変数"を事前に想定することがどんどん難しくなっていくこれからの時代に立ち向かうために、いわゆる"異常系"の膨大なテストを実現する「ファジング」技術についてその概要、およびウェブサーバを例にとったファザー設計の実例をお話します。

 興味のある方は、受講してみてはいかがでしょうか。

 22日目はコチラです。(いつの日か公開されます)

http://kzsuzuki.hatenablog.com/entry/ac_20161222kzsuzuki.hatenablog.com

*1:っていうかこんな本が売られていて、かつ7,992円というのに驚いた。円安かよ。