
私はファイルレスマルウェアの定義を理解しています。
ファイルベースではないがメモリにのみ存在するマルウェア...より具体的に言えば、ファイルなしのマルウェア...メモリのアクティブプロセスに自分自身を添付する...
記憶の中のアクティブなプロセスに自分自身をリンクすることがどのように機能するかを説明できる人はいますか?
また、そのような攻撃に対してどのような(カーネル)保護/強化機能がありますか?
答え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を使用するのを防ぎます。
答え2
プロセスの競合が発生した場合、プロセスにメモリにデータを挿入させることができます。非常に人気のある方法は次のとおりです。バッファオーバーフロー。
どのように動作しますか?たとえば、プロセスがポートxでリッスンしていて、15バイトサイズの一部の機能のバッファがあることがわかります。 15バイトのデータ+ nバイト(実行するコード)を使用して関数を呼び出します。プログラムがデータを正しく検証しないと、隣接するメモリがコードで上書きされるため、コードがメモリに残ります。このコードを実行できる場合は、システムを備えています。たとえば、プロセスは自分の外部のメモリに書き込めないなど、いくつかの制限があります。割り当てられたスペース。
バッファオーバーフローによりクラッカーがターゲットメモリにデータを注入する可能性があるすべてのオペレーティングシステムには、多数の脆弱性のリストがあります。