ファイルレスマルウェアはLinuxでどのように機能しますか?


10

ファイルレスマルウェアの定義を理解しています。

ファイルベースではないがメモリにのみ存在する悪意のあるコード…特に、ファイルレスの悪意のあるコードは…メモリ内のアクティブなプロセスに自分自身を追加します…

誰かがメモリ内のアクティブなプロセスにそれ自体を追加する方法を説明できますか?

また、そのような攻撃に対してどのような(カーネル)保護/強化を利用できますか?


たとえば、ネットワークアプリケーションのバッファオーバーフローを利用して、アプリケーション内で実行され、ネットワークを介して拡散する悪意のあるコードをダウンロードします。関連するファイルはありません。質問の2番目の部分は非常に広範であり、本質的には「マルウェアに対する対策が存在する」ことになりますか?
dirkt 2017年

この質問は、https://security.stackexchange.com/でより適切に回答される可能性があります
rubynorails 2017年

@rubynorails-私はLinux固有の回答のみに関心があります。SecuritySEは一般的です。そこでLinux固有の回答を要求すると、ここに送られてきます。
Martin Vegter 2017年

回答:


6

ファイルレスマルウェアは、ブラウザの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をデバッグに使用できなくなります。


他の回答と同様に、これも古くなってます。ここで説明するように、プロセスの読み取りまたは書き込みのためにプロセスをptraceする必要はありません/proc/PID/mem。神話や誤った情報を永続させるのではなく、他の個人よりも回答の更新や修正に抵抗力がないことを願っています。
-pizdelect

...これはこの場合、結果をもたらす可能性があります。人々がプロセスをトレースすることにより、他のプロセスがそのメモリを読み取るのを防ぐことができると誤って想定する可能性があるためです。
pizdelect

@pizdelectリンクをありがとう。別の回答としてコンテンツを追加するとよいでしょう。
dr_

いいえ、別の答えを追加するつもりはありません。私はあなたがあなたのものを修正することを期待しています。
pizdelect

他の人の回答も編集できることを覚えておいてください。あなたはこの特定のトピックについて私よりも良い知識を持っているようですので、そうすることを歓迎します。
dr_

1

プロセスをクラッシュさせた場合、プロセスにメモリにデータを挿入させることができます。これを行う非常に一般的な方法は、バッファオーバーフローを使用することです。

これはどのように作動しますか ?たとえば、プロセスがポートxでリッスンしていて、たとえば15バイトの特定の機能用のバッファがあることを知っています。この関数は、15バイトのデータ+ nバイト(実行するコード)で呼び出します。プログラムがデータを適切に検証しない場合、隣接するメモリがコードで上書きされるため、コードはメモリ内に存在します。このコードを実行できる場合は、システムを所有しています。たとえば、プロセスは割り当てられた領域外のメモリに書き込むことができないなどの制限があります

すべてのOSに脆弱性の長いリストがあり、バッファオーバーランによりクラッカーがターゲットのメモリにデータを注入できるようになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.