Nozomi Networks ラボは、産業組織をより安全にするサイバーセキュリティ研究の実施に取り組んでいます。マルウェアの研究、脆弱性の開示、脅威情報のキュレーションなど、さまざまな方法でこれを実施しています。私たちの活動の概要は、こちらをご覧ください。
私たちが支援する方法のひとつに、調査を容易にしたり、脅威をチェックしたりするツールの作成や改良があります。例えば、ソフトウェアをテストするためのオープンソースのファジングツールであるRadamsaを最近改良しました。私たちの新しいコードにより、PLCやRTUなどの産業用ネットワーク上で通信するデバイスのセキュリティ脆弱性をより速く簡単にテストできるようになりました。
これがなぜ重要なのか、そして私たちがどのようにコード貢献を開発したのかについては、続きをお読みいただきたい。
Radamsaがテストをスピードアップし、ソフトウェアのセキュリティを強化
ラダムサは、ソフトウェアの堅牢性と安全性を向上させるテストケース生成ツール、すなわちファジングツールとして知られている。フィンランドのオウル大学のアキ・ヘリンによって作成された。
Radamsaは、対象を理解するという点で、人による多くの入力を必要とせずにセキュリティ上の問題を特定するための汎用ツールである。そのコンセプトは、このツールがサンプル入力に対して一定数の突然変異を実行し、突然変異を起こしたデータでプログラムがどのように振る舞うかをテストするというものである。
Radamsaのウェブサイトで作者たちが概説しているように、さまざまな種類の脆弱性を見つけるのに非常に便利で効果的だ。
Nozomi Networks ラダムサの歴史は長く、創業以来使用しています。Nozomi Networks 製品をより堅牢にし、ソフトウェア開発ライフサイクルの早い段階でバグを特定するための自動テストプラットフォームで使用しています。
また、PLCやRTUなどの脆弱性を(半)自動的に発見するためのスクリプト/ツールセットの一部としてRadamsaを使用している。
ラダムサについて
- Radamsaは汎用のテストケース・ジェネレーターであり、他の人が簡単に貢献できるため、より安全なソフトウェア開発が可能になる。
- これはオウル大学のセキュア・プログラミング・グループ(OUSPG)によって開発された。
- このツールは、開発ライフサイクルの早い段階で簡単にエラーを明らかにするために、プログラム用に様々な不正な入力文書を生成しようとするものである。その目的は、脆弱性が発見され、多くの類似のアドホック・ツールを使って脅威行為者に悪用される可能性がある前に、脆弱性を特定することである。
- Radamsaは、ベンダーや独立系ソフトウェア開発者が、最先端の自動ブラックボックス1ロバストネステストにアクセスしやすくなるように設計されている。Radamsaはコマンドラインツールとして設計されており、テストが必要なデータセットを指定するだけで使用できる。
オウル大学ラダムサ校より引用
ラダムサ・プロジェクトがPCAPNGの寄付を受け入れる
汎用のテストケースジェネレーターの課題は、ホワイトボックス テスト3よりも興味深いケースを生成するために多くのサイクルを必要とすることである。ラダムサは、重要な領域、つまり、問題が疑われるソフトウェアの一部を利用しないすべてのバリエーションを排除することに重点を置いていない。
そのため、Radamsaプロジェクトは最近、パケットキャプチャ(PCAPNG2)ファイルを変異させる際に、ツールがより集中的に動作するようにする私たちのプルリクエストを受け入れてくれました。
Nozomi Networks Labsの貢献により、RadamsaはPCAPNGファイルをパケット自体にのみ焦点を当てて変異させることができる。これは、PCAPNGフォーマット自体が使用するバイトとデータ構造を排除し、パケットのファイルへの記録を管理するために必要な追加的なものを保存します。
ラダムサ貢献の技術的概要
Radamsa PCAPNGコードをどのように開発したかを理解するために、一歩下がってRadamsaの特徴を考えてみよう。Schemeプログラミング言語の関数型方言であるOwl Lispで書かれている。プラグインや拡張機能はサポートしていない。
この特殊性から、ユーザーが特に変更を許可しない限り、元のプログラムの動作を変えないように、注意して直接修正することになった。その方法を説明するには、まずプログラムがどのように動作するかを理解する必要がある。
ラダムサは、ジェネレーターと呼ばれる特定の内部コンポーネントが生成するバイトブロックのストリームに条件付きで変異を適用することで動作する。各入力ブロックに対して、ラダムサはそれを変異させるかどうかを決定する。そして、変異の結果か、あるいは元のブロックを変更せずに出力する。
突然変異はある確率で起こり、それは実行全体にわたって動的に更新される。パターン・ オプションの設定(同じ突然変異を複数回適用する、しないなど)に応じて、さまざまな方法で実行することができます。
デフォルトでは、複数のジェネレーターが同時に使用され、異なる入力が効果的にミックスされる。私たちの場合、単一のジェネレーター・シナリオ、つまり入力としてPCAPNGファイルを持つジェネレーターだけに興味がありました。単一の入力ジェネレーターを使用することで、何が変異され、したがって出力がどのように見えるかを制御することができます。
入力ファイルのデフォルト・ジェネレーターはfileと呼ばれ、入力を単にランダムなサイズのブロックに分割する。しかし、この入力処理方法はPCAPNGファイルの構造を破壊します。PCAPNGファイル
はブロックのシーケンスであり、各ブロックは独自の構造を持っている。各ブロックには、メタデータ(キャプチャ情報など)または実際のトラフィックデータ(パケット)が格納される。数種類存在するブロックのうち、パケットを保存するために一般的に使用されるブロックとして、エンハンスト・パケット・ブロックに注目した。
私たちの最初のステップは、Radamsaにファイルジェネレーターのようにランダムサイズのブロックではなく、PCAPNGブロック単位で変異を適用させることでした。これは、Radamsaの出力が、多かれ少なかれPCAPNGファイルに似たブロックのシーケンスであることを保証するために必要だった。
そこで、PCAPNGファイルからPCAPNGブロックのストリームを正確に生成するpcapngという新しいジェネレーターを作成した。
その時点で、私たちには解決すべき別の問題が2つあった:
- パケットを含むブロックには、保存したい構造とメタデータがあり、突然変異によってもたらされる変化によって、それを適応させなければならないかもしれない。
- パケットを含まないブロック(ネットワーク・インターフェイス・ブロックなど)は変異させたくない。
1.に対処するため、ブロックに含まれる実際のパケットだけが変異するように、すべての変異にインスツルメンテーションを適用した。具体的には
- ブロックからパケットを取り出す
- 基礎となる変異を適用する
- その結果を使って、元のブロックのメタデータと、その下にある突然変異の結果に基づいて新しいブロックを構築する。
例えば、基礎となる変異が新しいバイトを追加するとき、インスツルメンテーションは、パケットサイズが適切に1つインクリメントされ、アライメント要件がまだ満たされていることを確認する。
2.に対処するため、私たちはブロック述語を定義し、興味深いブロック(変異させたいブロック)とそうでないブロック(温存したいブロック)を見分けることができるようにした。私たちが試した最初の解決策は、インスツルメンテーション関数が興味のないブロックに遭遇するたびに、何もしないNOP変異を適用することでした。
というのも、Radamsaが生成する出力ファイルがすべて一意であることを保証するために使っているチェックサム機構を壊してしまうからだ。そのため、より侵襲的だが、それでも必要なアプローチに移行しなければならなかった。それは、与えられたブロックに変異を適用するかどうかを決定するためにRadamsaが採用する条件を強化することであった。
PCAPNGジェネレーターが使用されたときのみ有効化されるこれらの変更により、最終的に当初の目標を達成することができた。
私たちの貢献を試してみたい方は、現在の開発版Radamsaを以下のように実行してください:
radamsa --generators pcapng --count 10 --output mutation_%02n.pcapng input.pcapng
要約すると、Nozomi Networks ラダムサへのラボの貢献は、主に3つの要素で構成されている:
- PCAPNGファイルを解析する新しいジェネレーター
- パケットデータのみを変異させ、有効なPCAPNGブロックを生成する変異インスツルメンテーション。
- Radamsaがトラフィックを含まないPCAPNGブロックを変異させないようにする述語
Nozomi Networks ラボ、より安全なICSソフトウェアのためにRadamsaを強化
ラダムサの貢献が認められたことで、世界中の研究者やエンジニアは、ネットワーク対応機器の堅牢性をテストするためのより良いツールを手に入れた。
特に、プロトコル・スタックの堅牢性をテストする。これは、PLC、RTU、そして一般的にOT-デバイス・ソフトウェアがより注力する必要がある分野です。ゼロデイ脆弱性やその他のセキュリティ問題を防止するためには、より高い品質が求められます。
私たちは、多くの個人や企業が私たちのRadamsaへの変更に価値を見出し、プロジェクトに独自の貢献を加えてくれることを願っています。私たちは共に、ICSソフトウェアの安全性を確保するためのより良い方法を生み出すことができるのです。