web-dev-qa-db-ja.com

仮想マシンはマルウェアが害を及ぼすのを防ぎますか?

仮想マシンのホストシステム(私の場合はVM-VirtualBox OSE)がマルウェアを実行しても安全かどうかを知りたいです。

ウイルスが発生して、ホストシステムからデータを読み書きすることはできますか? VMでインターネット接続を無効にすると、インターネット接続を確立できますか?

VMはウイルスが何をしているかを調べるために安全な環境ですか?

メモリーを実際の合計メモリーの約1/4に減らした場合、フォークボムはホストシステムを「殺す」ことができますか?どのくらいのCP​​U時間/リソースを使用できますか?

66
Martin Thoma

理論的には、ゲストシステムはVMによって完全に分離されており、ホストを「見る」ことさえできず、攻撃することもできません。そのため、ゲストはVMから抜け出すことができません。もちろん、実際には たまに起こりましたウェブアーカイブリンク )。攻撃では、VM実装、またはVMが構築されているハードウェア機能のセキュリティ問題(つまり、厄介な結果をもたらすことが判明したプログラミングバグ)を悪用する必要があります。 VMからのデータの出口ルートはほとんどありません。たとえば、インターネットアクセスの場合、VMは仮想ネットワークカードをエミュレートし、完全なTCP/IPではなく最低レベルのパケットのみを処理します。したがって、ほとんどのIPスタックの問題はVM自体。したがって、VMからの脱出につながるバグは、まれにしか発生しない傾向があります。

VMが非常に効果的な攻撃にはいくつかの種類があります。フォーク爆弾。ホストシステムの観点からは、VMは単一のプロセスです。ゲストのフォーク爆弾はguestOSのスケジューラをひざまずきますが、ホストの場合、これは完全に無害です。同様にメモリの場合:VMは、特定の量のRAMで物理マシンをエミュレートし、効率的にバックアップするには、その量の「実際の」RAMが必要になります。ゲストの動作に関係なく、VMがそれ以上RAMを独占することは決してありません。 (VM RAMサイズを、たとえば実際のRAMサイズの最大1/2に制限する必要があります。追加の「実際の」RAMはディスクキャッシングに便利であり、ホストOSも一部を使用する必要があります。

55
Tom Leek

免責事項:私は比較的高いレベルの理解を求めています。詳細なガイドが必要な場合は、範囲外です。さらに、これが適用されない仮想マシンを実装する他の方法(完全にソフトウェアで)があります。私はまた、仮想化メカニズムのみによる「突破」に焦点を合わせています。つまり、実際のハードネットワークホストでPC間が発生する可能性があるメカニズムではありません。

私はディテールが好きなので、ここでいくつか行きます。まず、codeprojectには x86 CPUのさまざまなモード(実数、保護され、長い)virtualization の使用に関するいくつかの優れたアセンブラリファレンスがあります。 Intel VT blog (Intelがこれを書いたかどうかはわかりません)があり、最後に Rootkit Arsenal の最初の部分はx86の説明に特化しており、優れた読み物です。ウォークスルーとニース図を完備しています。それをすべて理解するには忍耐力が必要です。そのため、ここでやることは、それがどのように機能するかを非常に簡単に紹介することです。

DOSを実行したときの揺れ方

DOSおよび初期の16ビットリアルモードシステムは、セグメント化されたメモリモデルを操作します。セグメントのサイズを制御することはできず、これらのセグメントには保護スイッチがありません。コードはメモリのセグメントに読み込まれ、実行されます。それは他のセグメントにはるかに飛び込むことができるので、任意のコードがどこにでも何かを変更することができます。たとえば、IVTエントリ(割り込みベクターテーブル)の1つをその空間のアドレスに単にポイントするTSR(終了して常駐する)コードの生成を含みます。オリジナルを実行する前に。基本的に、保護はありません。無し。なだ。

32ビットプロテクトモードの登場

保護モードはすぐに複雑になります。これには、セグメンテーション、ページング、PAEの3つの部分があります。それぞれには、CPUにそのセグメント、ページ、またはアドレススペース(PAE)の拡張を通知するデータのテーブルが必要です。これらには、プロセス分離を実装する有名なリングフラグ(セグメントとページに適用されます)が含まれます。ページングは​​、RAMからデータをディスクにロードし、仮想メモリなどのファンシーなものを作成する方法です(Word仮想を参照してください!

ロングモード

ロングモードでは、セグメンテーションが不要になり、PAE /ページング構造が要求されます。繰り返しになりますが、OSの実装を完全に簡単にするために、ページングは​​メモリ内の構造体によって制御され、その後、特別な命令によってセットアップされます。ほら、正しい設定でプロセスの分離を実現できます。繰り返しますが、私は少しささいなことをしています...

仮想化してください!

はい。仮想化は同じ一般概念です。仮想マシンは、仮想マシンの制御構造を使用してセットアップされます。この構造は、メモリが物理メモリにどのようにマッピングされるかを指示しますページングのようなもの。重要なことに、特定の条件下では、仮想マシンはホストオペレーティングシステムに何かを要求する必要がありますちょっとしたプロセスの分離、ちょっとソフトウェアの割り込みのような。これらは、VM終了と呼ばれ、終了時のレジスタの状態などの情報をホストに提供します。システムコールと同様のKinda

マルウェアが仮想マシンから発生する可能性はありますか?

したがって、VMに関する限り、ホストOSには独自のメモリ領域がすべてあり、必要に応じて感染/破損/破壊される可能性があります。

ホストメモリに直接影響を与えるという点では、仮想マシンはそれを認識できないため、それを行うことができません。ホストは、必要なメモリを仮想マシン空間にマップする必要があります。また、そのメモリ空間にBIOSからすべてを実装する必要があります。特定のタスクで特定のホストデバイスと通信するには、ホストマシンがこれらのVM終了条件を設定し、ターゲットVMがそれらをトリガーする必要があります。発生すると、制御がホストに転送されます。

したがって、2つのリスクのある領域が考えられます。

  1. VM exitに応答してホストが実行するアクション。この処理にバグがある場合は、ホストに実行してはいけないことを実行するように説得することができます。
  2. ゲストマシンのメモリ空間へのホストアクセス。リング0で実行されているホストマシンのコードは、ワルツを入れてパーティをクラッシュさせる可能性があることを覚えておいてください。たまたま、ゲストからゲストのメモリを設定することができます(驚くほど)。

これにより、エクスプロイトメカニズムにつながります。 VM出口ルーチンに処理のバグが必要な場合、そのコードを説得してメモリを実行できるようにする必要があります。理想的には、ゲストvmからページに挿入するだけのコードです。 、カンザスにさようならを言ってください。

トム・リークが言うように、VMはフォーク爆弾からの防御に非常に効果的です。 OSがプロセスが割り当てることができるメモリの量を制限できる方法と同様に、VMにマップされるメモリの量を制限できます。実行すると、ゲストOSは物理メモリが不足していると認識します。ホストはそれ以上割り当てることはありませんnless VM exitを実装してこれを実行します。これは少し危険であり、これが実行されたとは信じていません。

これはどの程度可能性がありますか?

それほどではありません。これは、これらのVM出口の実装に完全に依存するか、読み取りコードに素敵なバグがあるホスト上のゲストからメモリを読み取るかどうかに依存します。また、このバグにより、ホストが保持しているメモリアドレスを強制的に実行できるような方法VM出口はそのメモリにアクセスできなければなりません。

カバーしていないものはありますか?

  1. TCPIPなどの既存のソフトウェアスタックに対する攻撃。ここでの脆弱性は、とにかく実際に2つの物理PCがあった場合と同じです。
  2. 完全にソフトウェアで実装された仮想化。
  3. 他のタイプのチップでの仮想化。これはIntel VT互換のセットアップに適用されます。

最後に、 私は以前に説明しました は、プロセスの分離がサンドボックスの形式であると主張しました。その答えとこの答えを読むと、なぜ私がそれらをそのように定義するのかを理解できるはずです。 x86のプロセス分離と仮想マシンの間には、顕著な類似点があります。

更新

だから、私はこれについてさらに深く、特に青い錠剤の研究について詳しく調べました。私が説明したのは、非常に単純化された高レベルのビューです。詳細を見つけました。以下は、Invisible Things Labからの 専用の全論文 です。それらの defences トークには、リング0からのユーザーモードページへの実行アクセスを拒否するという概念が含まれているため、仮想マシンがメモリに配置したデータを直接実行することはできません。 これはIntel CPUに実装されていることがわかります およびパッチは現在Linuxカーネルに存在します。したがって、状況によっては、エクスプロイトが存在しても、この性質の攻撃がはるかに困難になる場合があります。

31
user2213

VM-ほとんどの場合、backtrack4を使用して1つのホストから別のホストに侵入します。主にVMware Workstationユーザーです。

最大の問題は、VMのネットワーク接続がホストOSに転送される可能性にあります。ネットワークを完全に無効にするか、ホストにアクセスできないネットワークを使用する必要があります。 。

メモリを制限することをお勧めします。私は通常、あなたと同じようにそれをおよそ四分の一に保ちます。 CPU時間は、コアの数、または(ソフトウェアに細かい制御がある場合)特定のVMに定義されたCPU時間の割合に制限されます。

仮想環境から抜け出すことができる標的型攻撃は存在しており、市販されています-cloudburst @Hendrickの言及のように-比較的まれです。仮想化パッチを最新の状態に保つことは非常に良い考えです。

詳細は herehere 、および here を参照してください。

11
Tim Brigham

ウイルスがV​​Mから逃れることができるかどうかについてのすべての良い情報に加えて、考慮すべき別の問題を指摘させてください。

悪意のあるコードが仮想マシン内で実行されているかどうかを 検出する可能性があります 。これはしばしば virtual machine detection または 「red pills」 という名前で呼ばれます、そして manytechniques が利用可能です。

さらに、一部のウイルスやその他のマルウェアは、これらの手法を使用して、VMで実行されているかどうかを検出し、実行されている場合は、ペイロードを遮断します(悪意のあるアクションを実行しないでください)。彼らは、マルウェアをリバースエンジニアリングしたり、マルウェアを検出したりするのを困難にするためにこれを行っています。

したがって、VMは、マルウェアが何をしているかを知るための良い方法ではありません。マルウェアはVMから抜け出すことができないかもしれませんが、同時に、 VM内で実行しているときに何かを実行します。VMで実行しても何も実行されない場合は、無害であると判断し、VM-所有される可能性があります。

10
D.W.