この質問にはすでに答えがあります:
私がこれを求めている理由は、私がそれが存在することを知ることができずに、コンピュータにウイルスが存在する可能性があるのかどうか興味があるからです。より具体的には、いかなる種類の兆候も出さないウイルス。
この質問にはすでに答えがあります:
私がこれを求めている理由は、私がそれが存在することを知ることができずに、コンピュータにウイルスが存在する可能性があるのかどうか興味があるからです。より具体的には、いかなる種類の兆候も出さないウイルス。
回答:
ルートキットと呼ばれるオペレーティングシステムから完全に身を隠すことができるマルウェアのクラスがあります。
ルートキットは、職場の他のマルウェアの証拠を隠すために使用され、オペレーティングシステムに非常に深く埋め込まれています。深く埋め込まれているため、プロセスリスト、ファイルシステムテーブル、その他の重要な構造をオンザフライで操作できます。
メモリ内のファイルシステム構造を操作することにより、ディレクトリに対して誤った結果または誤解を招く結果を返す可能性があり、特にメインのマルウェア自体に関連するファイルは表示されません。ファイルはそこにあり、Linux LiveCDなどの感染していないオペレーティングシステムを起動すると、どこかに保存する必要があるため、ファイルが表示されます。
同様に、ルートキットは、タスクマネージャなどのプログラムにレポートされる特定のプロセスを単にドロップできます。オペレーティングシステムコアはそれらを認識します。それらをスケジュールするために必要であるため、外部の世界にそれらを知らせることはブロックされています。
shutdown -r -t 0
、特権は必要ありません)か、ユーザーが再起動するまで待つことができます。
すべての通常のプログラムがそこに表示されますが、...
svchost
プロセス(ほとんどの場合)の下でスレッドとして実行されるため、特定のsvchostインスタンスの下でサービスが実行されていることを簡単に指摘することはできません。ルートキットを検出するために設計されたプログラムがいくつかあります。それらは、たとえば、実行用にプログラムされたスレッドのリストとシステム内のプロセスのリスト(どのプロセスにも属さないスレッドは隠しプロセスの兆候です)、または高レベルで見られるファイルのリストをチェックすることにより、ディスクパーティションから手動で読み取るファイルと比較します。
それでも、一度感染すると、ウイルスはその存在を非常に隠すことができるため、検出することはほとんど不可能です。これらは通常、APT(高度な持続的脅威)と呼ばれます。
オペレーティングシステムには、カーネルと呼ばれるコンポーネントがあります。カーネルの(多くの)責任の1つは、システムメモリ(物理メモリと仮想メモリの両方)を管理することです。
これを行う一環として、カーネルは利用可能なメモリをユーザーモードとカーネルモードとして知られる2つの異なる領域に分割します。カーネルとドライバーはカーネルモードメモリを共有し、ユーザープログラムと重要性の低いシステムコンポーネントはユーザーモードメモリ領域に存在します。
ユーザーモードのプロセスは、特別に指定され制御されたチャネルを経由する場合を除き、一般的にカーネルモードのプロセスと通信できません。
完全を期すために、ユーザーモードで実行されているプロセスも互いに分離されていますが、プログラムがそうするように設計されていれば、オペレーティングシステムが提供する機能を使用してより自由に相互通信できます。
カーネルは、ユーザーモードでプロセスを起動する機能を提供します。プロセスが作成されると、現在存在するプロセスの内部リストに追加されます。タスクマネージャーなどのプログラムがプロセスのリストを要求すると、ユーザーごとのアクセス許可によってフィルター処理された、このリスト内の情報のサブセットを受け取ります。
ルートキットなどのマルウェアの存在を隠す手段の1つは、このテーブルから直接自分自身を削除することです。これを実行しても実行できますが、通常の方法で取得したプロセスリストには表示されなくなります。
これらのプロセスはまだ実際に存在して実行されるため、プロセスが開いているリソース(ファイルなど)に関する情報を保持するハンドルテーブルなど、他のカーネルデータ構造の検査によって、またはより多くのメモリ割り当てを調べることによって見つけることができますソフトウェアの機能を妨げずに隠すことは困難です。
物理ハードウェアデバイスとの対話を含む多くのことに使用されるカーネルモードドライバー。これらは必要に応じてカーネルの制御下で実行されますが、ユーザーモードプロセスではないため、プロセスのテーブルには表示されません。したがって、タスクマネージャーや、プロセス専用のその他のツールには表示されません。
カーネルモードでコードを実行できることは、実行中のコードの存在を効果的に隠すことができる重要なステップです。通常の環境では、Windowsでは実行するためにカーネルモードのコードに署名する必要があるため、マルウェアはオペレーティングシステム、他のソフトウェア、またはソーシャルエンジニアリングのエクスプロイトを使用してここに到達する必要がありますが、コードがカーネルモードで実行されると非表示になります簡単になります。
要約すると、プロセスの存在の証拠を隠すことができます。プロセスが存在することを示す何らかの兆候が常に存在する可能性があります。その検出は特定のマルウェアに依存します。
ウイルスは最近非常に洗練されています。コンピュータにウイルスが存在する可能性がありますが、タスクマネージャには表示されません。タスクマネージャ(およびオペレーティングシステムの他の部分)自体が侵害され、ウイルスが隠される可能性があります。たとえば、ルートキット。
タスクマネージャーを使用してウイルスをチェックすることを計画している場合は、ここで停止する必要があります。アンチウイルスをインストールすると、アンチウイルスでさえPC上のウイルスを検出できない場合があります。
他の回答ですでにうまく説明されている他のものとは別に、「ウイルスを隠す」もう1つの簡単な方法があります。
侵害されたDLL(動的にリンクされたライブラリ)
多くのプログラム-ほぼすべての非凡なプログラム-を実行するには、1つ以上のDLLが必要です。OS自体に属しているもの(Windowsのハードウェアアクセスを抽象化するhal.dllなど)、1つのプログラムでのみ使用されているもの、より小さな部分(コア機能を備えた.exeファイルと.dllファイル、プラグインなど)通常のプロセスやサービスのようにウイルスが常に実行されるわけではありませんが、完全に無害なプログラムまたはプログラムコンポーネントのように見えるため、ウイルスを見つけるのは非常に困難です。
さらに読む:http : //msitpros.com/?p=2012
そして、この種のウイルス作成に関して非常に魅力的なことが1つあります。これは、このまたはその理由でコンピューター上で失われる可能性のあるdllの無料(無料)ダウンロードを提供するWebサイトがたくさんあります。元の.dllファイルと新しい .dllファイルのチェックサムを比較する可能性は非常に限られており、ほとんど誰も気にしないので、dllウイルスは気付かれずに長時間システムに侵入したり、滞在したりします(もちろん、ウイルス対策プログラムが検出しない限りそれらとユーザーは削除に同意します-パターンはすでに表示されています)。
ここでWindowsのことを話すという質問からですが、この手法は他のOSにも適用される可能性があります。
TL; DR: Windowsのタスクマネージャはかなりそれが何ができるかに制限され、それが*ありません、これまでお使いのシステム上で実行中のすべてのプロセスを示しています。証明したいですか?タスクマネージャーに表示されているプロセスが使用しているRAMの量を(大まかに)カウントし、システムのRAM使用量と比較します。少なくとも100MBのRAMを使用する必要がありますが、システムの使用目的によっては1GB程度になることもあります。また、グラフィックカードは、RAMからメモリとGDDR RAMを使用できます。*
Pavel Petmanの答えを拡張するために、ゲーム用の多くの洗練されたチートエンジンは、チートを有効にするコードをゲームDLLに注入することに依存していると付け加えます。
このタイプの侵害を検出するのは非常に難しく、この質問にも同じ手法を適用できます。たとえば、ウイルスが検出されないようにしたい場合、システムディレクトリに自身を抽出するタイプのWindowsアップデートとして装い、ウイルスは重要なシステムファイルを上書きする可能性があります。ほとんどのウイルス対策プログラムはこのタイプのウイルスを検出しません。つまり、ウイルスは重要なWindows DLL(および.exe)にウイルスコードを挿入することができます。
私のクライアントが異常な行動をすると、私は常にProcess Explorer(Microsoftからダウンロード)を実行して、実行中のウイルスを検出します。プロセスエクスプローラーは、実行中のプロセス(タスクマネージャーにないものも含む)と、使用しているDLLモジュールを正確に知ることができます。