社会インフラで使われているシステムの脆弱性を検証
OpenSSLにHeartbleedの脆弱性が発見されたのは記憶に新しいつい先日(4月)ですが、今月6月、今度は日本の研究者である菊池さん(株式会社レピダム)がCCS Injectionと呼ばれる脆弱性を発見し、話題になりました。OpenSSLはWebの世界におけるサーバやクライアントのプログラムで幅広く利用されているオープンソースソフトウェアであることから、社会的インパクトも大きく、これらの脆弱性は注目を集めました。
一方、今回ご紹介するレポートが調査の対象とした制御システム用ソフトウェア(以下ICSソフトウェア)は、発電所やガス、水道、鉄道、ビル管理、といった社会の重要インフラなどで利用される、我々の生活を支える存在です。Webのように、一般に注目されやすい分野ではないかもしれませんが、これらのソフトウェアが安定して安全に動いているからこそ、社会インフラが滞りなく運用されています。
逆に言えば、ICSソフトウェアにセキュリティ上の脆弱性が存在し、脆弱性がサイバー攻撃の脅威にさらされるということは、社会インフラそのものが脅威にさらされるということでもあり、さらに言えば、社会インフラを末端で利用する私たちの生活そのものが脅威にさらされる可能性がある、と考えることもできます。
そんな社会インフラを支えるICSソフトウェアにおける脆弱性の現状を確認するために、調査を行いまとめたのが下記のレポートです。
ICSソフトウェアに含まれる脆弱性の傾向
調査レポートでは、ICSソフトウェアの脆弱性の概要をまとめるとともに、JPCERT/CCのサイトで公開している「CERT Cコーディングスタンダード」のルールをICSソフトウェアの開発者の皆様にも活用していただくために、脆弱性を作り込まないために有効な推奨コーディングルールをピックアップしています。
調査は米国のICS-CERTが公開している脆弱性アドバイザリを対象に行ったのですが、ICS-CERTは、2010年から2013年末までの期間に445件の脆弱性を公開しており、脆弱性の種類には次のグラフのような傾向が見られます(図1、調査レポート9ページのデータを元に作成)。
傾向としては、入力データを確認しないことが原因で作り込まれる脆弱性(CWE-20)が全体の31%を占めるほか、C/C++言語のコーディングでありがちなバッファオーバーフロー系の脆弱性(CWE-118)が全体の29%を占めることなどが分かりました。
また、ICSソフトウェアの脆弱性の3割以上に、脆弱性が攻撃可能であることを実証するコード(Proof-of-Concept)が存在することも分かり、意外な発見でした(図2)。
調査レポートではその他の観点からもICSソフトウェアの脆弱性の傾向を概観しています。