SCAN DISPATCH :PC内のプログラムを組み替えて悪意のあるコードを作成
SCAN DISPATCH は、アメリカのセキュリティ業界及ハッカーコミュニティから届いたニュースを、狭く絞り込み、深く掘り下げて掲載します。
国際
海外情報
──
PCに既にインストールされているプログラムを拝借してそのコードを組み替え、悪意のある動作をさせてしまう……、そんな信じられない新しいカテゴリの攻撃を解説したホワイトペーパーが発表されている。カリフォルニア大学サンディエゴ校の研究者らが発表したホワイトペーパー「When Good Instructions Go Bad:Generalizing Return-Oriented Programming to RISC」がそれだ。著者の一人、Ryan Roemer 氏とメールインタビューが成功したので紹介しよう。
この、「良い」コードから適当に命令を選んで悪意のあるコードを作ることを Return-Oriented Programming と呼ぶ。「ちょうど、700ページある本から語句を適当に選んで、50ページの全く関係ない小説を書いてしまうのと同じ」と、同校のプレスリリースでは説明している。この名前は、悪意のあるコードを作る際に必要な“良い命令”が、リターンで終わっている必要があることからつけられたそうだ。
Return Oriented Programing のアイデア自体は新しいものではない。今回このペーパーを共著した同校の Hovav Shacham 教授が昨年、そのコンセプトを発表している。が、非常に高度な技術を持った人が、1行づつ手作業でコーディングしなければならなかったし、x86のみに限定されたものだと思われていたため、現実的なエクスプロイトの可能性は低いと考えられていた。ところが、今回のこのペーパーで、プラットフォームを限定しないことと、悪意のあるコードを作る作業が自動化できることがわかり、現実的なセキュリティ・リスクであると再び注目を浴びることになったのだ。
この攻撃は、まずリモートの攻撃者がなんらかの方法でPCにアクセスすることから始まる。ひとたびターゲットのPCにアクセスできたら、そのPCにあるプログラムのバグを利用して runtime stack を書き換えてしまう。それにより、例えば、ブラウザを勝手に立ち上げてプログラムを勝手にダウンロードさせることやキーロガーとして動作させること、メールクライアントにスパムを送らせることなどが可能となる。
実際にこの攻撃を行うためには、プログラムの解析をしてバグを見つける必要があるが、例えば、C++のスタンダードのライブラリ・ファンクションにバグがあるとうすると、そのファンクションを使っているプログラムは全て、この攻撃に利用できることになる。ホワイトペーパーの著者が「Return-Oriented Programming は、今まで考えられていたよりも深刻な問題であることが分かった」と言うように、この攻撃により、悪意のあるコードの動作をストップするタイプのセキュリティ製品は全く役に立たなくなってしまう。例えば、IntelやAMDのチップには特定のメモリ領域ではコードが実行できないようになっており、OSはこれを利用してインプットされたデータをコードとして実行できないようにしている。が、 Return-Oriented Programming を利用した攻撃の場合、悪意のあるコードが実効されたのでなく、スタックが“ハイジャック”されて良いコードを悪意のある方法で実行されているため、こうしたセキュリティ手段が無効になってしまう。
既存のプログラムが改変されていないか、怪しいプログラムやコードが存在しないかをスキャンする方法のアンチウイルスプログラムも無効である。ペーパーの著者の一人、Ryan Roemer 氏によると「(僕らが作ったエクスプロイトでは)32ビットのアドレスを持ったかなり大きいバッファのペイロードのストリングを注入するから、これを固定領域のインテジャーとして認識できるから、インジェクションが行われているかどうかをチェックする方法ならば、Return-Oriented のペイロードを検知することも理論的には可能」ということだ。
ペーパーでは、エクスプロイトも例としてあげている。それには
(1)インジェクションの脆弱性があるプログラム(ペーパーではstrcpy string buffer overflowの脆弱性があるものを使っている)
(2)Return-Oriented gadgetの命令シークエンスの、アドレスの場所を推測あるいは計算できること
(3)エクスプロイトのペイロードをまとめて注入する、
というステップがあればエクスプロイトは作れるとしている。そのため Ryan Roemer 氏は、エクスプロイトの現実性という点では「研究成果として発表した、turning-completeのガジェットのセットやエクスプロイトAPI、専用エクスプロイトコンパイラに匹敵する複雑な攻撃はまだ実際には目にしていない。が、これらの技術の一部が、一つのLibc function以外の場所にもジャンプする先進的なreturn-to-libc のエクスプロイト(”古典的”で一般的なreturn-to-libcエクスプロイトの場合は一つのLibc functionにしかジャンプしない)に使用されているという証拠がある。例えば、CCS Security Conferenceでも、他の研究者たちがワイアレス・センサー・ノードへの攻撃に、Return-Oriented Programmingを使っていた」ということで、将来的には「Return-Oriented Programmingを使用した攻撃が増えることは間違いない」とペーパーでは予測している。
さて、この攻撃を阻止する方法はどうだろうか…
【執筆:米国 笠原利香】
【関連リンク】
When Good Instructions Go Bad:
Generalizing Return-Oriented Programming to RISC
http://cse.ucsd.edu/~rroemer/doc/sparc.pdf
──
※ この記事は Scan購読会員向け記事をダイジェスト掲載しました
購読会員登録案内 http://www.ns-research.jp/cgi-bin/ct/p.cgi?w02_ssw
《ScanNetSecurity》