最近、いくつかのルートキットが特定のファイルやサービスなどをカーネルモードまたはユーザーモードのプログラムから隠す方法を学びました。
これは私に不思議に思いました:通常、これらを検出するためにルートキットによって隠されているファイル名に共通の文字列を含む「カナリアファイル」を使用するアンチウイルスプログラムまたは他の侵入検知システムはありますか?
つまり:
1.)MyRootkit.vir
は、ファイル名に文字列 ".vir"を含むファイルを非表示にすることが知られています。
2。)インストール(または署名の更新)時にMyAV
はC:\ Program Files\MyAV\Canary Files \にMyRootkitcanary.vir
を配置します
3。)スキャン中にMyAV
が実行されますcmd -c dir "C:\Program Files\MyAV\Canary Files\"
4。)MyRootkitcanary.vir
がシステムの応答に含まれていない場合、MyAV
はシステムがMyRootkit.vir
に感染している可能性があることを警告します。
これを行うエンドユーザー向けの一般的なウイルス対策製品については知りません。
ただし、多くのルートキットは、絶対パスを使用するか、ファイルを既知のオペレーティングシステムフォルダーに配置します。したがって、カナリアファイルを任意のフォルダーに配置するアプローチは、多くのルートキットをキャッチする可能性は低いです。
しかし、カナリアファイルをアンチウイルスフォルダーの外に置くと、実際の感染に対する疑いが高まる可能性があります。これにより、追加のサポートリクエストが作成され、最悪の場合、報道が不利になる可能性があるため、アンチウイルスベンダーの活動は非常に困難になります。
専用のルートキット検出ツールがこのアプローチを試す可能性があります。一見すると chkrootkit は、主に不整合の検出に基づいています。たとえば、プロセス(chkproc)とフォルダー(checkdirs)を一覧表示する方法はさまざまです。
より堅牢な検出手法は、ディスクからファイルシステムカタログを直接読み取り、そこに報告される内容と、オペレーティングシステムにどのファイルが存在するかを尋ねた結果を比較することです。結果が予期しない方法で異なる場合は、ルートキットがある可能性があります。他の人々が報告したように、あなたが提案するメカニズムはルートキットが自分のファイルを隠すだけでは不十分であることに依存しています。
出力にexpectedの違いがあることに注意してください。たとえば、HFS +ファイルシステムのカタログファイルには、適切な実装ではOSに公開されない内部ハウスキーピング用のファイルのコレクションがあります。
良いアイデア。一部のルートキットハンターは、あなたが説明するように、同様のカナリアテストを実装しています。コンセプトを少し正式化しましょう。ルートキットの存在によって変更されるリソースを作成します。
多くのLinuxルートキットは、uidまたはgidに基づいてプロセスなどを非表示にします。ユーザー/グループごとにカナリアを作成できます。
for uid in {0..65535}; do
touch /root/tmp/canary_$uid
chown $uid:$gid /root/tmp/canary_$uid
done
次に、lsによって表示されたファイルを数えます
if (( $(ls -la | head -n +1 | grep total | cut -d\ -f 2) -ne 65536 )); do
echo "missing canary file, possible RK detected"
done
また、一部のルートキットハンターは、どのリソースを使用可能にする必要があるかをチェックしますが、使用不可です。つまり、ソケットとプロセスIDです。利用可能なすべてのtcp/udpポートにバインドしようとするプログラムを簡単に作成できます。プログラムが失敗した場合は、すでにそのポートにバインドされている「何かが隠されている」ことを示します。
しかし、それはこれらのテクニックがどれだけ進んでいるかについてであり、簡単に覆すことができます。ルートキットは他のプロセス内で(スレッドとして)実行でき、通信用の共有リソースの割り当てを回避できます(バインドではなくスニッフィング)。
また、チェックアウトすることもできます: http://www.rootkit.nl/projects/rootkit_hunter.html