私はファイルレスマルウェアの定義を理解しています。
ファイルベースではないがメモリにのみ存在するマルウェア...より具体的に言えば、ファイルなしのマルウェア...メモリのアクティブプロセスに自分自身を添付する...
記憶の中のアクティブなプロセスに自分自身をリンクすることがどのように機能するかを説明できる人はいますか?
また、そのような攻撃に対してどのような(カーネル)保護/強化機能がありますか?
ベストアンサー1
ファイルレスマルウェアは、ブラウザのフラッシュプラグインやネットワークプロトコルの脆弱性を悪用してターゲットを攻撃します。
Linuxプロセスはシステムコールを介して変更可能ptrace()
。このシステムコールは、通常、デバッガ内のターゲットプロセスの内部状態を調べて管理するために使用され、ソフトウェア開発に役立ちます。
たとえば、PID 1234のプロセスを考えてみましょう。/proc
プロセスの完全なアドレス空間は、擬似ファイルシステムの場所にあります/proc/1234/mem
。この擬似ファイルを開いてから、ptrace()
このプロセスに接続できます。これを行った後、プロセススペースを使用して書き込むpread()
ことができます。pwrite()
char file[64];
pid = 1234;
sprintf(file, "/proc/%ld/mem", (long)pid);
int fd = open(file, O_RDWR);
ptrace(PTRACE_ATTACH, pid, 0, 0);
waitpid(pid, NULL, 0);
off_t addr = ...; // target process address
pread(fd, &value, sizeof(value), addr);
// or
pwrite(fd, &value, sizeof(value), addr);
ptrace(PTRACE_DETACH, pid, 0, 0);
close(fd);
(次から取得したコードここ。 ptrace エクスプロイトに関する別の論文が出版されました。ここ.)
これらの攻撃に対するカーネル中心の防御の唯一の方法は、カーネルベンダーパッチをインストールするか、特定の攻撃ベクトルを無効にすることです。たとえば、ptraceを使用すると、ptraceブロックモジュールをカーネルにロードできます。これは特定のシステムコールを無効にします。これは明らかにデバッグにptraceを使用するのを防ぎます。