Halaman ini menjelaskan tugas yang dapat Anda lakukan untuk mengonfirmasi validitas temuan rootkit mode kernel dari Virtual Machine Threat Detection. Temuan rootkit mode kernel menunjukkan bahwa memori kernel VM berpotensi dirusak oleh malware.
Saat Anda menerima temuan rootkit mode kernel dari Deteksi Ancaman VM, sebaiknya jalankan perintah Linux ini pada instance Compute Engine yang terpengaruh untuk menyelidiki sistem Anda terkait titik data yang mungkin menunjukkan anomali, seperti panggilan sistem yang dibajak atau modul kernel tersembunyi.
Atau, Anda dapat menjalankan skrip pengumpulan data yang disediakan di VM yang terpengaruh. Skrip menjalankan perintah yang dijelaskan di halaman ini.
Kecuali dinyatakan lain, setiap tugas inspeksi di halaman ini relevan dengan semua temuan rootkit mode kernel.
Dokumen ini mengasumsikan hal berikut:
Anda melakukan tugas-tugas dalam dokumen ini setelah menerima temuan rootkit mode kernel dari Deteksi Ancaman VM. Untuk mengetahui daftar kategori temuan yang relevan, lihat Temuan ancaman rootkit mode kernel.
Anda memahami alat command line Linux dan kernel Linux.
Tentang VM Threat Detection
Virtual Machine Threat Detection adalah layanan bawaan Security Command Center yang tersedia di paket Enterprise dan Premium. Layanan ini memindai virtual machine untuk mendeteksi aplikasi yang berpotensi berbahaya, seperti software penambangan mata uang kripto, rootkit mode kernel, dan malware yang berjalan di lingkungan cloud yang terkompromi.
Deteksi Ancaman VM adalah bagian dari rangkaian deteksi ancaman Security Command Center dan dirancang untuk melengkapi kemampuan Deteksi Ancaman Peristiwa dan Deteksi Ancaman Container yang sudah ada.
Untuk mengetahui informasi tentang VM Threat Detection, lihat Ringkasan Virtual Machine Threat Detection. Untuk mempelajari cara melihat detail temuan Deteksi Ancaman VM, lihat Meninjau temuan di konsol Google Cloud .
Sebelum memulai
Untuk mendapatkan izin yang diperlukan untuk melihat semua resource dan temuan di Security Command Center dan mengelola instance Compute Engine yang terpengaruh, minta administrator Anda untuk memberi Anda peran IAM berikut:
-
Security Center Admin Viewer (
roles/securitycenter.adminViewer
) di organisasi -
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) pada instance Compute Engine
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Identifikasi VM yang terpengaruh
- Lihat detail temuan.
- Di bagian Resource yang terpengaruh, di kolom Nama lengkap resource, klik link. Tampilan detail instance Compute Engine yang terpengaruh akan terbuka di tab baru.
- Hubungkan ke instance. Untuk mengetahui informasi selengkapnya, lihat Menghubungkan ke VM Linux dalam dokumentasi Compute Engine.
Menemukan modul kernel yang tidak terduga
Keberadaan modul yang tidak terduga di VM dapat menunjukkan bahwa memori kernel VM berpotensi disusupi.
Untuk menemukan modul kernel yang tidak terduga, ikuti langkah-langkah berikut:
Mencantumkan semua modul kernel yang dimuat di VM:
lsmod cat /proc/modules
Buat daftar entri
sysfs
untuk modul yang dimuat dan dibongkar:ls -l /sys/module/
Bandingkan hasil daftar ini dengan daftar dari VM lain dalam project. Cari modul yang muncul di VM yang terpengaruh, tetapi tidak di VM lainnya.
Telusuri syslog
untuk modul di luar pohon
Tanda bahwa modul di luar pohon telah dimuat di VM dapat menunjukkan bahwa modul kernel yang tidak biasa telah dimuat. Anda dapat menelusuri buffer log kernel dan pesan syslog
untuk menentukan apakah modul di luar pohon telah dimuat. Dalam entri log, modul di luar pohon ditandai sebagai pemuatan yang rusak.
Di buffer log kernel dan pesan syslog
, telusuri entri log yang menyerupai berikut ini:
MODULE_NAME: loading out-of-tree module taints kernel.
Telusuri buffer log kernel untuk menemukan entri log yang menunjukkan keberadaan modul di luar struktur:
sudo dmesg | grep out-of-tree
Telusuri semua pesan
syslog
untuk entri log yang menunjukkan keberadaan modul di luar pohon:grep "out-of-tree" /var/log/syslog*
Memeriksa livepatching
Livepatching di VM dapat mengganggu deteksi Deteksi Ancaman VM dan dapat memicu temuan positif palsu.
Untuk memeriksa livepatching, ikuti langkah-langkah berikut:
Periksa
syslog
untuk penginstalan dan logging modul livepatching. Patching langsung biasanya mengubah kode kernel dengan menginstal titikftrace
kernel.sudo grep livepatch /var/log/syslog*
Telusuri modul kernel baru yang diinstal untuk livepatching (biasanya diawali dengan
livepatch
):sudo lsmod | grep livepatch
Menelusuri file patch:
sudo ls -l /sys/kernel/livepatch
Untuk mengetahui informasi tentang livepatching, lihat Livepatch di dokumentasi Kernel Linux.
Periksa aktivitas berpotensi berbahaya lainnya yang terdeteksi di VM
- Di Security Command Center, lihat detail temuan Deteksi Ancaman VMyang sedang Anda selidiki.
- Di bagian Resource yang terpengaruh, di kolom Nama lengkap resource, klik panah drop-down, lalu klik Tampilkan semua temuan dengan nama lengkap resource ini. Kueri temuan diperbarui untuk hanya menampilkan temuan untuk VM ini.
- Periksa temuan yang mengarah pada potensi aktivitas cryptomining, malware, pemberian IAM yang tidak biasa, dan ancaman keamanan lainnya.
Memeriksa apakah software antivirus menyebabkan temuan positif palsu
Software antivirus dapat mengganggu deteksi Deteksi Ancaman VM dan dapat memicu temuan positif palsu.
Memeriksa semua proses yang berjalan di sistem
Keberadaan proses yang tidak terduga dapat menunjukkan bahwa temuan VM Threat Detection valid dan VM telah disusupi.
Mencantumkan semua proses yang berjalan di VM:
ps -eAf
Cari proses debugger—seperti
gdb
,strace
, danpstack
—yang biasanya tidak Anda jalankan di VM ini. Proses debugger dapat mengintai proses lain.Cari proses mencurigakan lainnya di VM.
Memeriksa kernel yang di-boot
Periksa kernel yang di-boot untuk mengidentifikasi kernel Linux Anda:
cat /proc/version
Jika nilai yang ditampilkan bukan versi kernel yang Anda harapkan, hal itu dapat mengindikasikan serangan pembajakan yang dilakukan dengan mengeksploitasi alat kexec
di kernel. Alat
kexec
dapat melakukan softboot pada sistem untuk menggunakan kernel yang berbeda.
Tugas tambahan untuk Unexpected system call handler
Lakukan tugas ini jika Anda mendapatkan temuan Defense Evasion: Unexpected system call handler
.
Mengaudit panggilan sistem dan mencari anomali dalam penggunaan dan pemanggilnya. Log audit memberikan informasi tentang proses dan argumen pemanggilan untuk panggilan sistem. Anda juga dapat melakukan tugas verifikasi untuk memeriksa perilaku yang diharapkan dari panggilan sistem umum. Untuk mengetahui informasi selengkapnya, lihat Contoh pemeriksaan dengan rootkit Diamorphine di halaman ini.
Tugas tambahan untuk Unexpected interrupt handler
Lakukan tugas ini jika Anda mendapatkan temuan Defense Evasion: Unexpected interrupt handler
.
Buat daftar handler interupsi langsung di sistem dan bandingkan hasilnya dengan informasi dari VM serupa lainnya dalam project. Handler interupsi yang tidak terduga dapat menunjukkan bahwa VM telah disusupi.
Untuk mencantumkan handler interupsi aktif, jalankan perintah berikut:
cat /proc/interrupts
Outputnya akan terlihat seperti berikut:
CPU0 CPU1 0: 44 0 IO-APIC 0-edge timer 1: 9 0 IO-APIC 1-edge i8042 4: 17493 0 IO-APIC 4-edge ttyS0 8: 0 0 IO-APIC 8-edge rtc0 9: 0 0 IO-APIC 9-fasteoi acpi 12: 0 152 IO-APIC 12-edge i8042 24: 16 0 PCI-MSI 81920-edge virtio2-config 25: 0 40194 PCI-MSI 81921-edge virtio2-inflate 26: 58528 0 PCI-MSI 81922-edge virtio2-deflate 27: 0 966356 PCI-MSI 81923-edge virtio2-stats 28: 0 0 PCI-MSI 49152-edge virtio0-config 29: 0 0 PCI-MSI 49153-edge virtio0-control 30: 0 0 PCI-MSI 49154-edge virtio0-event 31: 0 555807 PCI-MSI 49155-edge virtio0-request 32: 0 0 PCI-MSI 98304-edge virtio3-config 33: 184 0 PCI-MSI 98305-edge virtio3-input 34: 0 0 PCI-MSI 65536-edge virtio1-config 35: 556203 0 PCI-MSI 65537-edge virtio1-input.0 36: 552746 1 PCI-MSI 65538-edge virtio1-output.0 37: 1 426036 PCI-MSI 65539-edge virtio1-input.1 38: 0 408475 PCI-MSI 65540-edge virtio1-output.1
Tugas tambahan untuk Unexpected processes in runqueue
Lakukan langkah-langkah berikut jika Anda mendapatkan temuan Defense Evasion: Unexpected processes in
runqueue
. Bagian ini membantu Anda mengumpulkan titik data tambahan untuk menyelidiki temuan Anda. Titik data ini mungkin tidak secara langsung menunjukkan masalah malware.
Dalam tugas ini, Anda akan meninjau antrean penjadwal per-CPU. Meskipun beberapa proses mungkin berumur pendek, Anda tetap dapat mengevaluasi perilaku antrean penjadwal dengan proses yang berjalan per CPU untuk mencari perilaku anomali.
Menampilkan detail tentang jumlah waktu yang dihabiskan setiap proses yang sedang berjalan per CPU. Hal ini membantu Anda melihat apakah CPU tertentu sangat sibuk. Anda dapat mengorelasikan hasil dengan interupsi yang disematkan ke CPU dari
/proc/interrupts
.cat /proc/schedstat
Untuk mengetahui informasi selengkapnya tentang perintah ini, lihat Statistik Scheduler dalam dokumentasi Kernel Linux.
Mencantumkan semua tugas yang dapat dijalankan saat ini dan detail tentang peralihan konteks untuk setiap CPU.
cat /proc/sched_debug
Outputnya akan terlihat seperti berikut:
Sched Debug Version: v0.11, 5.4.0-1081-gke #87-Ubuntu ktime : 976187427.733850 sched_clk : 976101974.761097 cpu_clk : 976101973.335113 jiffies : 4538939132 sched_clock_stable() : 1 sysctl_sched .sysctl_sched_latency : 12.000000 .sysctl_sched_min_granularity : 1.500000 .sysctl_sched_wakeup_granularity : 2.000000 .sysctl_sched_child_runs_first : 0 .sysctl_sched_features : 2059067 .sysctl_sched_tunable_scaling : 1 (logarithmic) cpu#0, 2199.998 MHz .nr_running : 0 .nr_switches : 16250401 .nr_load_updates : 0 .nr_uninterruptible : 12692 .next_balance : 4538.939133 .curr->pid : 0 .clock : 976101971.732857 .clock_task : 976101971.732857 .avg_idle : 880408 .max_idle_balance_cost : 500000 runnable tasks: S task PID tree-key switches prio wait-time sum-exec sum-sleep ----------------------------------------------------------------------------------------------------------- S systemd 1 51740.602172 326778 120 0.000000 165741.786097 0.000000 0 0 /init.scope S kthreadd 2 1482297.917240 1361 120 0.000000 112.028205 0.000000 0 0 / I rcu_sched 11 1482642.606136 1090339 120 0.000000 17958.156471 0.000000 0 0 / S cpuhp/1 15 537.058588 8 120 0.000000 2.275927 0.000000 0 0 / S idle_inject/1 16 -2.994953 3 49 0.000000 0.012780 0.000000 0 0 / S migration/1 17 0.000000 245774 0 0.000000 5566.508869 0.000000 0 0 / S ksoftirqd/1 18 1482595.656315 47766 120 0.000000 1235.099147 0.000000 0 0 / I kworker/1:0H 20 536.961474 5 100 0.000000 0.043908 0.000000 0 0 / S kdevtmpfs 21 11301.343465 177 120 0.000000 3.195291 0.000000 0 0 / I netns 22 6.983329 2 100 0.000000 0.021870 0.000000 0 0 / Srcu_tasks_kthre 23 10.993528 2 120 0.000000 0.010200 0.000000 0 0 / S kauditd 24 1482525.828948 319 120 0.000000 14.489652 0.000000 0 0 /
Cari hal berikut:
- Nama proses yang sedang berjalan.
- Jumlah pengalihan konteks per CPU. Lihat apakah suatu proses mengalami terlalu sedikit atau terlalu banyak peralihan pada CPU.
- Waktu CPU yang dihabiskan (waktu tidak dalam kondisi idle).
Contoh pemeriksaan dengan rootkit Diamorphine
Bagian ini menunjukkan pemeriksaan VM yang telah menginstal rootkit Diamorphine. Diamorphine adalah modul kernel yang dapat dimuat (LKM) yang populer. Rootkit ini memicu kategori temuan berikut:
Defense Evasion: Unexpected system call handler
Defense Evasion: Unexpected kernel modules
Defense Evasion: Unexpected kernel read-only data modification
Untuk mengetahui informasi selengkapnya tentang kategori temuan ini, lihat Temuan ancaman rootkit mode kernel.
Langkah-langkah pemeriksaan yang dilakukan dan gejala yang diamati pada VM adalah sebagai berikut:
Telusuri
syslog
untuk semua modul kernel di luar pohon yang dimuat.Menelusuri buffer log kernel:
sudo dmesg | grep out-of-tree
Output:
diamorphine: loading out-of-tree module taints kernel.
Menelusuri pesan
syslog
:grep "out-of-tree" /var/log/syslog*
Output:
/var/log/syslog: diamorphine: loading out-of-tree module taints kernel.
Cari
syslog
jika ada kegagalan verifikasi modul (tidak tersedia di semua distribusi Linux).Menelusuri buffer log kernel:
sudo dmesg | grep "module verification failed"
Output:
diamorphine: module verification failed: signature and/or required key missing - tainting kernel
Menelusuri pesan
syslog
:sudo grep "module verification failed" /var/log/syslog*
Output:
/var/log/syslog: diamorphine: module verification failed: signature and/or required key missing - tainting kernel
Konfirmasi bahwa modul disembunyikan dari perintah
/proc/modules
danlsmod
.sudo grep diamorphine /proc/modules sudo lsmod | grep diamorphine
Tidak ada hasil yang ditampilkan.
Pastikan modul memiliki entri di
sysfs
.sudo cat /sys/module/diamorphine/coresize
Output:
16384
Dapatkan tabel panggilan sistem untuk arsitektur:
sudo ausyscall --dump
Output:
Using x86_64 syscall table: 0 read 1 write 2 open 3 close
Audit anomali dalam panggilan sistem—seperti
kill
dangetdents
—yang biasanya dirusak oleh rootkit.Untuk memeriksa apakah ada gangguan pada pengendali panggilan sistem, audit panggilan sistem dan periksa apakah ada perilaku anomali. Perilaku ini bervariasi untuk setiap panggilan sistem.
Panggilan sistem yang biasanya diretas adalah panggilan
kill
. Anda dapat memeriksa apakah panggilan sistemkill
telah dilewati. Pada contoh berikut, panggilan sistemkill
diaudit.Instal
auditd
dan amati perilaku VM tanpa rootkit Diamorphine:$ sudo apt-get update && sudo apt-get install auditd $ # Add audit rules for specific system calls $ sudo echo "-a exit,always -F arch=b64 -S kill -k audit_kill" >> /etc/audit/rules.d/audit.rules $ sudo /etc/init.d/auditd restart Restarting auditd (via systemctl): auditd.service. $ # Behavior observed without rootkit $ sleep 600 & [1] 1119 $ sudo kill -9 1119 $ sudo ausearch -k audit_kill | grep -A 3 "pid=1119" type=OBJ_PID msg=audit(1677517839.523:198): opid=1119 oauid=1001 ouid=0 oses=1 obj=unconfined ocomm="sleep" type=SYSCALL msg=audit(1677517839.523:198): arch=c000003e syscall=62 success=yes exit=0 a0=45f a1=9 a2=0 a3=7f61c64b2ac0 items=0 ppid=1034 pid=1035 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined key="audit_kill" $ sleep 600 & [1] 1087 $ sudo kill -31 1087 $ sudo ausearch -k audit_kill | grep -A 3 "pid=1087" type=OBJ_PID msg=audit(1677517760.844:168): opid=1087 oauid=1001 ouid=0 oses=1 obj=unconfined ocomm="sleep" type=SYSCALL msg=audit(1677517760.844:168): arch=c000003e syscall=62 success=yes exit=0 a0=43f a1=1f a2=0 a3=7f61c64b2ac0 items=0 ppid=1034 pid=1035 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined key="audit_kill"
Pada titik pemeriksaan ini, rootkit Diamorphine telah diinstal. Langkah berikutnya menunjukkan perilaku VM setelah penginstalan rootkit.
Konfirmasi bahwa entri log audit untuk sinyal kini tidak ada setelah rootkit Diamorphine diinstal:
$ sudo ausearch -k audit_kill | grep -A 3 "pid=1158" $ sleep 600 & [2] 1167
Periksa detail di entri log audit untuk sinyal. Dalam contoh ini, meskipun sinyal khusus ini tidak sepenuhnya dibajak oleh rootkit, informasi tentang proses pemanggil tersedia.
$ sudo kill -9 1167 $ sudo ausearch -k audit_kill | grep -A 3 "pid=1167" type=OBJ_PID msg=audit(1677518008.586:237): opid=1167 oauid=1001 ouid=0 oses=1 obj=unconfined ocomm="sleep" type=SYSCALL msg=audit(1677518008.586:237): arch=c000003e syscall=62 success=yes exit=0 a0=48f a1=9 a2=0 a3=7f61c64b2ac0 items=0 ppid=1034 pid=1035 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined key="audit_kill"
Men-debug skrip pengumpulan data
Skrip berikut melakukan banyak tugas penelusuran bug yang dijelaskan di halaman ini. Anda dapat menjalankan skrip ini dalam mode sudo
atau root
. Skrip hanya membaca
informasi debug dari sistem.
$ cat kprot.sh
#!/bin/bash
echo "Boot command line"
cat /proc/cmdline
echo "=================================================="
echo "Loaded modules"
cat /proc/modules
echo "=================================================="
echo "Current tracer"
cat /sys/kernel/debug/tracing/current_tracer
echo "=================================================="
echo "Tracing event enable"
cat /sys/kernel/debug/tracing/events/enable
echo "=================================================="
echo "Tracing sub events enable"
for en in `find /sys/kernel/debug/tracing/events/*/enable`; do printf "\b$en\n"; cat $en; done
echo "=================================================="
echo "IP table rules"
iptables -L
echo "=================================================="
echo "Ftrace list"
cat /sys/kernel/debug/tracing/enabled_functions
echo "=================================================="
echo "Kprobes enabled"
cat /sys/kernel/debug/kprobes/enabled
echo "=================================================="
echo "Kprobes list"
cat /sys/kernel/debug/kprobes/list
echo "=================================================="
echo "Kprobes blocklist"
cat /sys/kernel/debug/kprobes/blacklist
echo "=================================================="
echo "BPF trace"
sudo apt update && sudo apt-get update && sudo apt-get install bpftrace
bpftrace -l
echo "=================================================="
echo "BPF prog list"
sudo apt update && sudo apt install linux-tools-`uname -r`
bpftool prog
echo "=================================================="
Langkah berikutnya
- Pelajari lebih lanjut Virtual Machine Threat Detection
- Pelajari cara menggunakan Virtual Machine Threat Detection