近年「製品セキュリティ」と呼ばれ始めたセキュリティの新分野に関する事象を紹介し考察する本連載。今回も前回に続き「ファジング」がテーマとなる。近年の「つながる製品」によって増加している想定外データのリスクと、ファジングが品質、安全、セキュリティをつなぐテストとして重要になっている理由を説明する。
前回は、ファジングが「データ入力に対する耐久テスト」であること、そしてWebセキュリティでは主役になりにくかった背景について述べた。また、製造業が扱う組み込み製品では、入力経路がWebアプリケーションとは大きく異なり、異常入力がサイバー攻撃だけでなく、市場不具合や品質問題にもつながることを確認した。
今回は、近年の「つながる製品」によって増加している想定外データのリスクと、ファジングが品質、安全、セキュリティをつなぐテストとして重要になっている理由を説明する。
⇒連載『武田一城の「製品セキュリティ」進化論』バックナンバーはこちら
近年の製品は、ソフトウェアによって高度に制御されるようになっている。自動車はその代表例である。かつて機械部品や電気回路が中心であった機能も、現在ではECU(電子制御ユニット)やソフトウェアが担う領域が拡大している。
車両は周囲の状況をセンサーで認識し、複数のECUがネットワークを通じて情報を交換し、クラウドやスマートフォンとも連携するようになった。この変化は利便性を高めるという大きなメリットがある一方で、製品に入ってくるデータの種類と量を爆発的に増やした。入力が増えれば、想定外のデータが入り込む可能性も増えていく。
想定外のデータとは何か。それは、「センサーからの不自然な値」「通信メッセージの順序の乱れ」「データ長の異常」「外部機器が返す仕様外の応答」「更新データの破損」というように枚挙にいとまがない。
このようなことは、Webアプリケーションのような整備された環境下(ITでは、かなりの割合がWebアプリケーションの通信で占められ、結果として入力やデータ形式などが整備されている)ではそれほど起こるものではないが、整理された環境が望めない製品の利用環境においては、頻繁に起こり得ることだ。そのため、高品質な製品を市場に出荷したければ、このような事態への対応は必要不可欠となる。
Webアプリケーションであれば、異常が発生してもエラー画面を表示したり、サーバ側で処理を止めたり、ログを確認して修正したりすることが比較的容易である。しかし、それがデジタル製品になるとそう単純ではなくなる。「道路を走行中の自動車」「工場で稼働中の設備」「人の近くで動くロボット」「家庭内で常時動作する家電」などでは、異常入力による停止や誤動作が物理的な影響をもたらす可能性がある。特に安全面での影響は、その製品のメーカーにとっては死活問題になり得る。
製品セキュリティの難しさは、サイバー空間の問題が現実世界の動作に直結する点にある。ITのセキュリティのように画面上のエラーでは済まず、「停止してはいけない場面で停止する」「止まるべき場面で止まらない」「誤った制御(場合によっては暴走)を続ける」といった事態につながる。これらは、それなりの確率で現実世界における重大な事故につながる危険性がある。
製品セキュリティの大きな特徴は、一度出荷された後は、簡単には修正できない点にある。Webサービスのように、サーバ側のプログラムを更新すれば即座に全利用者へ反映されるというわけではない。「製品の利用環境」「ネットワーク接続状況」「販売地域」「保守契約」「各種の法規制」「複雑なサプライチェーン」などによって、更新には大きな手間とコストがかかる。
例えば、その製品がOTA(Over The Air)アップデートに対応していたとしても、更新失敗時の影響や互換性確認は避けて通れない。そして、一般的なIT機器と比べて、製造業の製品は、ソフトウェアが組み込まれているか否かに関係なく、長期間使われることが多い。比較的高額な製品である自動車や産業機器であれば、10年、15年と利用されることは珍しくないのだ。
そのため、出荷後に脆弱(ぜいじゃく)性や重大な不具合が見つかった場合、改修コストは大きくなり、企業の信頼にも深刻な影響を与える。だからこそ、開発段階で異常入力への耐性を確認しておくことが重要なのだ。市場に出てから問題を発見するのではなく、出荷前に自ら「弱点を見つけ」「修正する」ことが、製造業における製品セキュリティの基本姿勢である。
これらは、一般にシフトレフトなどと呼ばれるもので、ITのセキュリティでも重要だといわれている。しかし、出荷後の製品に対応しなければならないという点で、製品セキュリティの方が対応がより難しい。出荷してしまった製品のセキュリティの不具合をアップデートするのは、手元にシステムが存在することが多いITの場合とは、比べものにならないレベルの手間やコストが必要になる。
製造業におけるファジングの価値は、攻撃者に悪用される脆弱性を見つけることだけではない。ファジングは、製品が現実の環境で受けるさまざまな異常入力に対して、どれだけ安全に振る舞えるかを確認するための手法である。これは、製品品質、機能安全、サイバーセキュリティをつなぐテストであるといえる。
通常のテストでは、仕様書に書かれた正常な操作や代表的な異常系を確認することが多い。しかし、製品利用に際しては「仕様書に書かれた入力」が必ずしも来るわけではない。
実際に開発者が想定していなかった順序、長さ、値、タイミング、組み合わせでデータが入ることがしばしば発生する。なぜなら、設計段階で全てのケースを想定することが難しいからだ。ファジングは、このような人手では試しきれない入力パターンを機械的に大量に試すことで、隠れた弱点を発見しやすくするテスト手法だ。
ファジングを実施することで発見できるのは「メモリ破壊」「異常終了」「無限ループ」「リソース枯渇」「状態遷移の破綻」「復帰不能状態」「入力チェックの不足」などだ。これらは、攻撃に悪用される場合もあれば、その製品の利用環境上での偶発的な不具合として現れる場合もある。ファジングとは、結局のところ「セキュリティのための対策」であると同時に、市場に出荷する際の不具合を減らす「品質保証のための対策」でもあるのだ。
Copyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク