ファイルレスマルウェアの定義を理解しています。
ファイルベースではないがメモリにのみ存在する悪意のあるコード…特に、ファイルレスの悪意のあるコードは…メモリ内のアクティブなプロセスに自分自身を追加します…
誰かがメモリ内のアクティブなプロセスにそれ自体を追加する方法を説明できますか?
また、そのような攻撃に対してどのような(カーネル)保護/強化を利用できますか?
ファイルレスマルウェアの定義を理解しています。
ファイルベースではないがメモリにのみ存在する悪意のあるコード…特に、ファイルレスの悪意のあるコードは…メモリ内のアクティブなプロセスに自分自身を追加します…
誰かがメモリ内のアクティブなプロセスにそれ自体を追加する方法を説明できますか?
また、そのような攻撃に対してどのような(カーネル)保護/強化を利用できますか?
回答:
ファイルレスマルウェアは、ブラウザのFlashプラグインやネットワークプロトコルなどの脆弱性を利用してターゲットを攻撃します。
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-blockingモジュールをカーネルにロードできます。これにより、ptraceをデバッグに使用できなくなります。
/proc/PID/mem
。神話や誤った情報を永続させるのではなく、他の個人よりも回答の更新や修正に抵抗力がないことを願っています。
プロセスをクラッシュさせた場合、プロセスにメモリにデータを挿入させることができます。これを行う非常に一般的な方法は、バッファオーバーフローを使用することです。
これはどのように作動しますか ?たとえば、プロセスがポートxでリッスンしていて、たとえば15バイトの特定の機能用のバッファがあることを知っています。この関数は、15バイトのデータ+ nバイト(実行するコード)で呼び出します。プログラムがデータを適切に検証しない場合、隣接するメモリがコードで上書きされるため、コードはメモリ内に存在します。このコードを実行できる場合は、システムを所有しています。たとえば、プロセスは割り当てられた領域外のメモリに書き込むことができないなどの制限があります。
すべてのOSに脆弱性の長いリストがあり、バッファオーバーランによりクラッカーがターゲットのメモリにデータを注入できるようになります。