bagaimana cara kerja malware fileless di linux?

10

Saya mengerti definisi malware fileless:

Kode berbahaya yang bukan berbasis file tetapi hanya ada di memori ... Lebih khusus lagi, kode berbahaya tanpa fileless ... menambahkan dirinya ke proses aktif dalam memori ...

Adakah yang bisa menjelaskan bagaimana cara menambahkan ini ke proses aktif dalam memori?

Juga, perlindungan / pengerasan (kernel) apa yang tersedia terhadap serangan semacam itu?

Martin Vegter
sumber
Misalnya, dengan mengeksploitasi buffer overflow dalam aplikasi jaringan, dan kemudian mengunduh kode jahat yang berjalan di dalam aplikasi, dan menyebar melalui jaringan. Tidak ada file yang terlibat. Bagian kedua dari pertanyaan ini sangat luas, pada dasarnya sama dengan "penanggulangan apa terhadap malware yang ada"?
dirkt
Pertanyaan ini mungkin lebih baik dijawab di https://security.stackexchange.com/ .
rubynorails
@rubynorails - Saya hanya tertarik pada jawaban spesifik linux. SecuritySE bersifat umum. Jika saya meminta jawaban spesifik linux di sana, mereka akan mengirim saya ke sini.
Martin Vegter

Jawaban:

6

Malware fileless menyerang target dengan mengeksploitasi kerentanan misalnya dalam plugin Flash browser, atau dalam protokol jaringan.

Proses Linux dapat dimodifikasi dengan menggunakan panggilan sistem ptrace(). Panggilan sistem ini biasanya digunakan oleh para debugger untuk memeriksa dan mengelola keadaan internal dari proses target, dan berguna dalam pengembangan perangkat lunak.

Sebagai contoh, mari kita pertimbangkan sebuah proses dengan PID 1234. Ruang alamat keseluruhan proses ini dapat dilihat dalam sistem file semu /procdi lokasi /proc/1234/mem. Anda dapat membuka pseudofile ini, lalu lampirkan ke proses ini melalui ptrace(); setelah melakukannya, Anda dapat menggunakan pread()dan pwrite()menulis ke ruang proses.

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);

(Kode diambil dari sini . Makalah lain tentang exploit ptrace tersedia di sini .)

Mengenai pertahanan yang berorientasi kernel terhadap serangan-serangan ini, satu-satunya cara adalah menginstal tambalan vendor kernel dan / atau menonaktifkan vektor serangan tertentu. Misalnya, dalam kasus ptrace Anda dapat memuat modul ptrace-blocking ke kernel yang akan menonaktifkan panggilan sistem tertentu; jelas ini juga membuat Anda tidak dapat menggunakan ptrace untuk debugging.

dr_
sumber
Sama seperti jawaban lainnya , ini juga sudah ketinggalan jaman - seperti yang dijelaskan di sini Anda tidak perlu lagi menelusuri proses untuk membaca atau menulis /proc/PID/mem. Saya harap Anda kurang tahan api daripada orang lain untuk memperbarui dan memperbaiki jawaban Anda, alih-alih mengabadikan mitos dan informasi yang salah.
pizdelect
... yang mana hal ini dapat memiliki konsekuensi, karena orang mungkin secara keliru menganggap bahwa dengan menelusuri suatu proses mereka dapat mencegah proses lain dari membaca ingatannya.
pizdelect
@pizdelect Terima kasih atas tautannya. Akan lebih baik jika Anda menambahkan konten sebagai jawaban lain.
dr_
Tidak, saya tidak akan menambahkan jawaban lain. Saya mengharapkan Anda untuk memperbaiki milik Anda.
pizdelect
Ingatlah bahwa Anda dapat mengedit jawaban orang lain juga. Anda tampaknya memiliki pengetahuan yang lebih baik daripada saya tentang topik khusus ini, jadi Anda dipersilakan untuk melakukannya.
dr_
1

Ketika Anda berhasil menghentikan suatu proses, Anda dapat menyebabkan proses memasukkan data ke dalam memori. Cara yang sangat populer untuk melakukan ini adalah dengan menggunakan buffer overflows .

Bagaimana cara kerjanya? Anda tahu, misalnya, bahwa suatu proses mendengarkan pada port x dan memiliki buffer untuk fungsi tertentu, misalnya, 15 Bytes besar. Anda memanggil fungsi itu dengan 15 Bytes data + n Bytes (kode Anda akan dieksekusi). Jika program tidak memvalidasi data dengan benar, itu akan menimpa memori yang berdekatan dengan kode Anda dan dengan demikian, kode tersebut tinggal di memori. Jika Anda dapat menjalankan kode ini, Anda memiliki sistemnya. Ada batasan, misalnya, suatu proses tidak dapat menulis ke memori di luar ruang yang dialokasikan .

Ada daftar panjang kerentanan di semua OS 'di mana buffer overruns memungkinkan cracker untuk menyuntikkan data ke dalam memori target.

sampah
sumber