1. HOME
  2. ブログ
  3. DX時代に求められるIoT機器向け組込みソフトのセキュリティ対策とは?

DX時代に求められるIoT機器向け組込みソフトのセキュリティ対策とは?

「社会の安定を目指し、情報セキュリティリスクの根本解決を実現する」というビジョンのもと、セキュリティのオンリーワン企業を標榜するATTC。
同社が独自開発したのがIoT組み込み対策用セキュリティ製品「ATTC Control Flow Integrity」(以下、ATTC CFI)です。ここでは、DX時代に新たな課題として浮上しているセキュリティの脅威動向と、その対策を中心に解説します。

「Out of bounds write」~急上昇している組込み機器のセキュリティリスク

最近のセキュリティリスクを調べると、組込み機器において「任意のコード実行を引き起こす可能性がある領域外書き込み」(Out of bounds write)の危険度が急上昇しています。実際にCWEのトップ25の動向をみると、このOut of bounds write(CWE-787)の危険度は年々上っており、2019年に12位だった危険度が、とうとう2021年には第1位に跳ね上がってしまいました【★写真1】。

【★写真1】
トップ25にける近年の脆弱性危険度の状況。組込み機器において「任意のコード実行を引き起こす可能性がある(メモリー)領域外書き込み」(Out of bounds write)が急上昇していることがわかる。

この大きな原因には、DXの進展にともなって、システムの共通化やオープンソースの利用が進んで、隠れた脆弱性が散在してしまったこと、それに加えてソフトウェアが多機能化して規模が大きくなり、脆弱性を十分に把握し切れないという実情があるようです。
このような状況のなかで、CWE787の脆弱性を突く、「ROP」(Return-Oriented Programming)と呼ばれる攻撃のリスクも急上昇しています。

では、そもそもROP攻撃とは一体どのようなものなのでしょう? 実はROP攻撃は、C/C++言語特有の皆様がご存知のバッファオーバーフロー(BOF)攻撃の発展形となるものです。

BOF攻撃とは、どのような攻撃? 復習を兼ねて基本をおさらい

まずROP攻撃を説明する前に、BOF攻撃について簡単に触れておきます。これは「想定のサイズを超えるデータをバッファに送り込み、誤作動を起こさせる攻撃」のこと。バッファが確保されるスタック(関数内のローカル変数が格納される領域)には、この他に関数の戻り先となる「リターンアドレス」も格納されています。このアドレスは関数が呼び出し元に戻るための大変重要な情報で、これを書き換えればプログラムを乗っ取ることができるわけです。そして問題は、ローカル変数とリターンアドレスがスタックに混在して格納されていることに他なりません。これによりバッファオーバーフローを利用すればリターンアドレスが書き換えられる可能性があるからです。

ここで例えばマルウェアが仕掛けるBOF攻撃が行われると、データがあふれてスタック領域内のリターンアドレスが書き換えられ、送りつけたデータ中に仕込んだ不正プログラムが実行されてしまうことになります。このようにリターンアドレスを書き換えることで、不正プログラムを実行するのが一般的な手法です。その結果、システムの誤作動や、コンピュータの乗っ取り、踏み台などのリスクが高まります【★写真2】。

【★写真2】
従来のバッファオーバーフロー(BOF)攻撃。攻撃者が処理能力以上のデータをバッファに送り込んで誤作動を起こさせる攻撃のこと。 送りつけたデータ中に仕込んだ不正プログラムが実行される恐れあり。

BOF攻撃の発展形、さらに巧妙化されたROP攻撃とは?

ここまでがBOF攻撃によるリスクの簡単な説明です。さらに「ROP攻撃」は、BOF攻撃よりも巧妙になります。ROP攻撃は、BOF攻撃のように不正プログラムをスタック領域に送りつけて実行するものではありません。通常のBOF攻撃と同じようにプログラムの戻りアドレスを書き換える点は同じですが、もともとプロセス空間にプログラムロジックとして存在している複数の命令の断片を数珠つなぎに実行するため、スタックを実行不可にするといった従来の対策では守れないのです。つまりプログラムロジックを構成する命令を部品として複数組み合わせて、不正なプログラムとして巧妙に動作させるわけです【★写真3】。

【★写真3】
BOFの発展型となるROF攻撃の仕組み。通常のBOF攻撃のようにリターンアドレスを書き換える点は同じだが、もともとメモリー領域に存在する複数コードの断片を数珠つなぎに実行する点が異なる。

ROP攻撃の対策として開発された「ATTC Control Flow Integrity」

そこで、IoT組み込み機器のセキュリティ対策として登場したのが、冒頭で触れたATTC CFIです。本製品は、アプリケーションビルド時に、プログラム自体に防御ロジックを組み込みます。そして関数実行時には呼び出し元に戻る前にリターンアドレスの正当性がチェックされるようになっています。さらに、二重の防御として、監視プロセスにより、リターンアドレスの改ざんをチェックします。なお、ROP攻撃を検知するとプログラムを終了させる仕組みになっています【★写真4】。

【★写真4】
「ATTC Control Flow Integrity」。アプリケーションのビルド時にリターンアドレス改変を検査する処理を埋め込み、常に監視を行う。関数の実行ごとにリターンアドレス検査を行い、ROP攻撃を検知するとプログラムを終了させる。

今回は、ROP攻撃のターゲットとしてRaspberry Piなどを使用するIoT機器が狙われた事例を示しました。産業界のDX推進によって、 産業システムがこれまで以上に脅威にさらされる危険があるわけです。ATTC CFIを導入することで、Raspberry Piで動作するようなプログラムに対して、ROP攻撃を根本的に無効化できるようになります。

今後このATTC CFIに関する詳細を本サイトの連載などでご紹介する機会があるかもしれません。その際は是非よろしくお願いします。


当記事の修正につきまして。
当記事掲載時は、2019年にNASAジェット推進機構のネットワークにおいて、無許可で接続されていたIoTデバイス(Raspberry Pi)がハックされた件をROPによる攻撃と記載しましたが、再確認によりROP攻撃とは断定されていないことが判明しました。つきましては、当該文章を削除させていただきました。
今後このようなことがないように、より細心の注意を払うようにいたします。
読者のみなさまには大変ご迷惑をおかけしたことをお詫び申し上げます。

関連記事

サイバーセキュリティの課題をテーマ別に紹介中!!