Linux Sistemlerde Bellek Analizi – IV (Kernel ve Dosya Sistemi)

Linux sistemlerde bellek analizinin son adımında şüpheli kernel aktiviteleri ve dosya sistemi işlemleri tespit edilmeye çalışılır. Bu sayede sisteme bağlı olan IO cihazları, son yapılan IO aktiviteleri, rootkit gibi kernel seviyesinde çalışan zararlıların etkileri gözlenir.

İlk olarak “./vol.py linux_dmesg” komutuyla sistem mesajları görüntülenir. Örnekte sisteme bağlanılan USB belleğin adı (Kingston DataTraveler) ve atanan cihaz adı (sdc) vurgulanmıştır.

<3>[12287.092572] Buffer I/O error on device sdb1, logical block 484581
<3>[12287.092579] Buffer I/O error on device sdb1, logical block 484582
<3>[12287.092582] Buffer I/O error on device sdb1, logical block 484583
<3>[12287.092585] Buffer I/O error on device sdb1, logical block 484584
<3>[12287.092587] Buffer I/O error on device sdb1, logical block
[7214815481442954862.7214815481] mber 4
<6>[10002.044303] usb 2-2.1: new full speed USB device number 5 using uhci_hcd
<6>[10677.008140] Netfilter messages via NETLINK v0.30.
<6>[10756.954499] ip_tables: (C) 2000-2006 Netfilter Core Team
<7>[11644.083407] [0]: VMCI: Updating context from (ID=0x37093099) to (ID=0x37093099) on event (type=0).
<6>[11644.198071] usb 2-2.1: USB disconnect, device number 5
<6>[11644.472391] usb 2-2.1: new full speed USB device number 6 using uhci_hcd
<6>[12282.195248] usb 1-1: new high speed USB device number 3 using ehci_hcd
<6>[12283.877530] scsi4 : usb-storage 1-1:1.0
<5>[12284.879229] scsi 4:0:0:0: Direct-Access     Kingston DataTraveler SE9 PMAP PQ: 0 ANSI: 4
<5>[12284.884714] sd 4:0:0:0: Attached scsi generic sg2 type 0
<5>[12284.885713] sd 4:0:0:0: [sdc] 31014912 512-byte logical blocks: (15.8 GB/14.7 GiB)
<5>[12284.888359] sd 4:0:0:0: [sdc] Write Protect is off

<7>[12284.888411] sd 4:0:0:0: [sdc] Mode Sense: 23 00 00 00

Daha sonra “./vol.py linux_lsmod” ile sistemde yüklü kernel modülleri listelenir. Standart dışı modüllerin belirlenip detaylı incelenmesi gerekir. “-P” parametresi ile modüllerin parametreleri “-S” parametresi ile de modüllerin bölümleri (.bss, .data vb.) listelenebilir.

f0ad6020 lime 17710
f0a7d1c0 xt_tcpudp 12531
f0a230e0 xt_NFQUEUE 12630
f0a18040 iptable_filter 12706
f0ade180 ip_tables 18106
………
f0877100 mptscsih 39377
f0895020 mptbase 96811
f085f2c0 scsi_transport_spi 25532
f084e180 vmxnet 22204
f083e160 vmw_pvscsi 18334
f081b180 vmxnet3 44926

Şüpheli görülen modüller “./vol.py linux_moddump -D ~/Desktop/dump -r xt_NFQUEUE” ile dump edilir. -r parametresi ile ayıklanacak modül, -D ile de kaydedileceği yer belirlenir.

FIXING
walking 12 syms to be fixed….
adding section .note.gnu.build-id | 52 with size 36 | 36
………
added section                        .strtab with size 1940816 file offset  29140 len(section_data):  29088
Wrote 1970583 bytes to xt_NFQUEUE.0xf0a230e0.lkm

Modülün doğru bir şekilde ayıklandığı “file ~/Desktop/dump/xt_NFQUEUE.0xf0a230e0.lkm” ile doğrulanır. Çıktını bir ELF dosyası olması beklenmektedir. Devamında readelf, strings, veya harici disassambler  araçlarıyla dosya üzerinde statik analiz yapılabilir.

/home/remnux/Desktop/dump/xt_NFQUEUE.0xf0a230e0.lkm: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

Analize dosya sistemindeki etkilerle devam etmek makul bir seçim olacaktır. Öncelikle
“./vol.py linux_mount” ile sisteme bağlanmış diskler görüntülenir.  Örnekte /media/usb dizinine iki farklı diskin bağlandığı görülebilir.

/dev/disk/by-uuid/ca8458f6-f0fc-47d5-a201-373f147c79f4 /                                   ext4         rw,relatime                                                      
tmpfs                     /run                                tmpfs        rw,relatime,nosuid                                               
devpts                    /dev/pts                            devpts       rw,relatime,nosuid,noexec                                        
sysfs                     /sys                                sysfs        rw,relatime,nosuid,nodev,noexec                                  
/dev/sdb1                 /media/usb                          fuseblk      rw,relatime,nosuid,nodev                                         
none                      /run/lock                           tmpfs        rw,relatime,nosuid,nodev,noexec                                  
none                      /run/shm                            tmpfs        rw,relatime,nosuid,nodev                                         
/dev/sdc1                 /media/usb                          fuseblk      rw,relatime,nosuid,nodev                                         
fusectl                   /sys/fs/fuse/connections            fusectl      rw,relatime                                                      
gvfs-fuse-daemon          /home/remnux/.gvfs                  fuse         rw,relatime,nosuid,nodev                                         
udev                      /dev                                devtmpfs     rw,relatime                                                      
none                      /sys/kernel/security                securityfs   rw,relatime                                                      
vmware-vmblock            /run/vmblock-fuse                   fuse         rw,relatime,nosuid,nodev                                         
…….

Daha sonra “/vol.py linux_enumerate_files” ile VFS’nin (virtual file system) bellekteki kalıntıları kullanılarak sistemdeki dosya ve dizinler listelenir. Komutun çıktısını grep ile filtreleyerek incelenecek bölümü daraltmak genelde tercih edilmesi gereken bir yaklaşımdır. 

/home/remnux
/home/remnux/Desktop
/home/remnux/Desktop/73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489
/home/remnux/.gvfs
/home/remnux/.cache
/home/remnux/.cache/openbox
/home/remnux/.cache/openbox/openbox.log
/home/remnux/.local
/home/remnux/.local/share
/home/remnux/.local/share/route
/home/remnux/.xsession-errors

“./vol.py linux_recover_filesystem -D ~/Desktop/files” ile bellekteki dosyaları kurtarmak mümkün olabilir. Buna karşın seçilen belli dosyaları ayıklamaya çalışmak daha etkili bir çözüm olacaktır. Bunun için “./vol.py linux_find_file -F /home/remnux/Desktop/73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489”  ile listelenen dosyanın inode adresi bulunur.

node Number          Inode File Path
—————- ———- ———
          676442 0xe00b71c0 /home/remnux/Desktop/73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489
Daha sonra “./vol.py linux_find_file -i 0xe00b71c0 -O ~/Desktop/dump/t.dump” ile -i parametresine inode adresi, -O parametresine de kaydedilecek dosya adı verilip hedef dosya ayıklanır. Elde edilen dosya üzerinde türüne göre gerekli çalışmalar yapılarak analiz sonlandırılır.