ニュース

NTTと早稲田大学、インジェクション攻撃による被害を防ぐためのソフトウェア修正技術を開発

 日本電信電話株式会社(以下、NTT)と学校法人早稲田大学は28日、情報漏えいやサービス停止の原因となり得る“インジェクション攻撃”による被害を防ぐための、ソフトウェアを構成するプログラム中の文字列関数を用いた文字列操作の誤り(バグ)を修正する技術を、世界で初めて実現したと発表した。

 インジェクション攻撃は、サーバーなどへの攻撃手法のひとつで、サーバーで利用しているデータベースなどに対して不正な入力情報を送信して、予期しない動作を引き起こす。この攻撃をもたらす欠陥はインジェクション脆弱性と呼ばれ、プログラム中の文字列操作の誤り(バグ)が主な原因であることが知られている。

 ソフトウェアを構成するプログラム中で、文字列操作を記述する際には、文字列関数が利用される。しかし、文字列関数を利用して文字列操作を行う際には、文字列関数が利用する正規表現やその他の入力情報、文字列関数自体の仕様に関する専門的な知識が要求され、適切に記述することは難しいことが知られている。

 文字列操作を伴うプログラムはさまざまなソフトウェアで幅広く利用され、WebサイトのフォームにユーザーがWebブラウザー経由で入力した情報をWebサイト側で加工処理するなど、多くのサービスを実現している。文字列操作に誤りがあると、サービスの誤動作を引き起こし、情報漏えいやサービス停止の原因となる場合があり、サービスの運用段階におけるソフトウェアの誤りの修正には多大なコストがかかる。また、この誤動作を意図的に起こそうとするサイバー攻撃も顕在化しており、安全なサービスの実現を脅かすリスク要因となっている。

 これまでNTTと早稲田大学は共同で、プログラム中で文字列を扱う操作により発生し得る脆弱性や誤りを自動修正する技術の研究を行ってきたが、その対象は正規表現に限定されていた。

 今回の研究の成果では、プログラム中の文字列関数を使った文字列操作の誤りを、ソフトウェア開発者が与える入出力例を基に修正する技術を世界で初めて実現し、正規表現を含む文字列操作にまで修正対象を広げることを可能とした。

 従来的な入出力のみを提示する例を用いた場合と比べて、ソフトウェア開発者が文字列関数に期待する入出力例を、入力と出力だけでなく、入力のどの部分をどのように変換したいのかも含めて表記できるようになり、適切な修正結果の出力に寄与する。この表記は、プログラムが満たすべき入出力の例を基にプログラムを生成する「Programming by Examples(PBE)」メソッドを用いて与える。

 この定義を用いることで、修正対象の文字列関数に与える情報であるパラメーターが、すべての入出力例を満たすための条件を導き出すことが可能となる。技術では、Webアプリケーションなどで広く利用されている、ECMAScript 2023に準拠した文字列関数の振る舞いを厳密に定義した。これにより、修正結果がすべての入出力例を満たすことを保証できるようになる。

 また、修正結果のパラメーターとなり得る候補を、明らかに入出力例を満たさないものを除外しつつ、網羅的に探索する手法を考案した。この手法では、現実的な時間内に修正処理を終えることが可能となる。修正結果が修正前のパラメーターに対して最小限の変更による修正が可能となり、ソフトウェア開発者が目視で容易に修正結果を確認できるようになる。

 この技術により、ソフトウェアの脆弱性を悪用した攻撃の中でも重大な脅威とされている、インジェクション攻撃の主要な原因とされている、文字列操作の誤りを開発段階で修正可能となるため、修正コストの軽減とソフトウェア開発の品質向上に貢献できるとしている。

文字列関数に対する処理の例

 NTTと早稲田大学では、サービスの運用段階におけるソフトウェアの誤りの修正には多大なコストがかかるが、開発した技術が利用されていくことで、ソフトウェアの開発段階で誤りが修正できるため、コストの軽減と安全なサービスの実現が期待できると説明。また、AIを用いたプログラムの自動生成において、非熟練者がAIを用いて作成したプログラムに含まれる誤りにどう対処するのかという、新しい問題も生まれているが、開発した技術は、AIによる自動化のメリットを損なうことなく、プログラムの安全性向上に寄与できるものと期待されるとして、今後は、文字列操作に伴う脆弱性そのものを修正する技術の研究を進める予定としている。