パスワードを忘れた? アカウント作成
218834 story
セキュリティ

ほぼ全てのウィルス対策ソフトウェアに「有害なプログラムの挙動を検知できない」脆弱性あり 18

ストーリー by hylom
過信するなということで 部門より

あるAnonymous Coward 曰く、

セキュリティテスト機関Matousecが、Windows上で動くほぼ全てのウィルス対策ソフトウェアに通じる脆弱性を発見したそうだ(The Register本家/.)。

ウイルス対策ソフトは通常、Windows APIにフックを仕掛け、APIに渡されたパラメータをチェックして安全を確認してからそのAPIを実行する。しかし、パラメータはユーザー空間に格納されているため、パラメータのチェック後に値を書き換えることが可能という。これを利用し、まずは「安全」なパラメータをAPIに渡し、ウイルス対策ソフトによるチェックが完了して本来のAPIが実行される寸前でパラメータを書き換えることで、チェックをすり抜けて危険な処理を実行させることができるという。マルチコアシステムでは同時実行されているスレッドを把握できないことも多いため、より実行しやすいとのこと。

調査レポートによるとこの方法は「権限を制限したWindowsアカウントでも実行可能」とのことだが「標的のマシンに大量のコードをロードする必要があるため、シェルコード攻撃やその他スピードを要する攻撃、またステルス的な攻撃には実用的ではない」とのこと。また、攻撃は標的マシンでバイナリを実行できる状況でのみ可能とのことだ。

ちなみに本家/.コメントによるとこの手法は以前から知られていたもので、NetBSDやOpenBSDでの脆弱性としてすでに報告されているという。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 水牛ルータにDeep Packet Inspectionツールを入れた本来のファイアウォールが販売されるようになるに1.013*10^5ジンバブエドル。

  • ウィルス対策ソフトがすべての引数、およびポインタの参照先のデータをコピーしてからパラメータチェックを行い、本来のAPIをコピーした方のパラメータで呼び出して、出力があるならもう一度本来のアドレスに書き戻してやれば(コピー先まで追いかけて書き換えられない限り)安全な気がします。システムコールが格段に重くなって悲しいと思いますが。
    一見そうとは見えない rootkit を仕込まれていて、APIのフック順でオリジナルのAPIに近い側を取られていてそちらで書き換えられてしまっているのなら打つ手無しです。
    • by Anonymous Coward on 2010年05月12日 2時40分 (#1762336)

      ウィルス対策ソフトがすべての引数、およびポインタの参照先のデータをコピーしてからパラメータチェックを行い、本来のAPIをコピーした方のパラメータで呼び出して、出力があるならもう一度本来のアドレスに書き戻してやれば(コピー先まで追いかけて書き換えられない限り)安全な気がします。システムコールが格段に重くなって悲しいと思いますが。

      常にコピーする必要はないです。システムコールで読むデータのページを書き込み禁止にしておいて、書き込みがあったときだけコピーを作ればほとんど重くはならないと思います。一種のコピーオンライトですね。ウイルス対策ソフトではなく、OSがサポートする必要がありそうですが。

      親コメント
  • by Anonymous Coward on 2010年05月12日 0時50分 (#1762318)
    ヒューリスティックチェックの話だよね?
    普通はブラックリストだから実行段階に入る前に蹴るはず。
    APIに不正動作をさせるパラメータがあるとしたら、それはセキュリティベンダが対策するべきではなくMSに投げてエクスプロイトを一定時間後に公開でもすればいい。

    だけど、根本的にヒューリスティックの精度が低すぎる現状では、回避するまでも無く誤爆と見過ごしの境界線をすり抜けることが可能だから大して意味がある話ではないんじゃないかと思うけど。

    特定のプログラムに干渉して、return to libc系のテクニックも使って規定外の動きをさせるプログラムを数年公開しているけれど、今までアンチウィルスに検出された事はない。
    誤検出はあったけれど、ランタイム側のコードがオフセット込でパターン登録されていて、偶然オフセットが一致した誤検出に過ぎなかった。

    こんなタイミング勝負の博打うつより、すりぬけるコード書くほうが数倍楽なんじゃねぇかな
    タイミング勝負の博打を打つコードってのもヒューリスティックに検出させるべき系統の話だし、ヒューリスティックの技術が未熟すぎる現状ではちょっと先走った研究だと思う。
  • by Anonymous Coward on 2010年05月11日 19時16分 (#1762147)

    ウィルス対策ソフトが万能ではないことは今更そんなこと言われなくても知ってるよ、て感じですが、個人的には制限ユーザーでも有効な方法だということがショッキングです。対処法は特に無い?

  • >ウイルス対策ソフトによるチェックが完了して本来のAPIが実行される寸前
    このタイミングで値の操作って可能なんですか?
    • >> ウイルス対策ソフトによるチェックが完了して本来のAPIが実行される寸前
      > このタイミングで値の操作って可能なんですか?
      値がユーザーモード空間に存在していて、まだスケジューラもユーザーモードスレッドへの切り替えを許している状態なので可能です。
      なおこれはスケジューラやAPIの脆弱性ではありません。なぜならば本来のAPIが実行される寸前は本来ならユーザモードのコードが実行されていたはずで、APIはユーザーモード空間からパラメータをコピーする必要があるからです。その前にサードパーティーのドライバがカーネルパッチで割り込んでいても、OSはそれを認識していないのですからどうしようもありません。サードパーティーソフトの側が自分の責任で対策する必要のあることです(で、ほとんどすべてのソフトが対策をサボってたと)。
      マルチコアのシステムではスケジューラに関係なく別スレッドから値の書き換えが可能なので、さらに攻撃しやすいわけです。
      OSの認識する方法(たとえばフィルタドライバ)で割り込んでいる場合には、パラメータはすでにコピーされているので問題は発生しません。

      親コメント
      • by Anonymous Coward

        書き換えるタイミングはどう計ってるんだろう。
        チェックが済む前に割り込んでも意味がないから、その数STEPを見計らって書き換えないといけないよね?
        ブルートフォースで、偶然にベストタイミングで割り込むまでひたすらトライしてるのかな。

  • by Anonymous Coward on 2010年05月12日 4時17分 (#1762344)

    今回のはユーザーモードでアンチウィルスソフトがすり抜けられるという話ですが、カーネルモードなら何でもありです。

    ルートキットはカーネルを好む傾向、検出・削除が困難に
    http://internet.watch.impress.co.jp/cda/news/2008/06/19/19999.html [impress.co.jp]

    最近のルートキットはファイルシステムまでもを乗っ取ります。
    そこで、最近のアンチウィルスソフトでは直接パーティションにアクセスして独自にntfsを解析して駆除します。
    しかし、今後パーティションまで乗っとるルートキットが出てきてもおかしくはありませんし、いたちごっこは続くでしょう。

    Windows 7ではカーネルドライバに著名が必要になったので安全かと思いきや、勝手証明書の鍵の登録に管理者権限が必要なぐらいなので、まぁ片手落ちでしょう。

    • by Anonymous Coward

      別スレで話題になってるSSDT hookなんかもそうですが、こうした問題に
      対処するのはなかなか難しいですね。ハイパーバイザー使ってOSを仮想化
      に置いて監視するという方法は有効としても、こんどはハイパーバイザー
      を狙うroot kitが現れる(すでにある?)でしょうしハイパーバイザーの
      ハイパーバイザーの…で無限ループに陥りかねない。

      オープンソースでは、ソースが公開されていることが安全を担保する
      という考え方があって、実際にある程度は有効と思うけど
      ユーザーがコードをいちいち精査して自分でビルドしてインストール……
      という手順を踏んでるわけではないので、危険なバイナリをインストールして
      しまうことだって起きる。

      ハイパーバイザーを秘中の秘として公開せず、ハイパーバイザーで
      動くVMに穴がないなら安全は確保できるかも。でも穴を完全にふさぐことが
      可能なのかという話にもなるわけで、なんとなく永遠に続くネタのような
      気がしないでもないですねえ。

  • by Anonymous Coward on 2010年05月12日 11時25分 (#1762455)

    通信するな、と見間違えた。

typodupeerror

計算機科学者とは、壊れていないものを修理する人々のことである

読み込み中...