Linux Sistemlerde Bellek Analizi – III (Süreçler)

Bellek analizinde ağ hareketlerinden (bkz: http://blog.bga.com.tr/2014/09/linux-sistemlerde-bellek-analizi-ii-ag.html) sonra gerek bağlantılarla ilişkili süreçlerin, gerekse diğer şüpheli süreçlerin incelenmesi gerekir. Bellekteki süreçler, Volatility kullanılarak etraflıca analiz edilebilir.

İlk olarak “vol.py linux_pslist”    komutu ile bellek dökümünün alındığı anda sistemde çalışan tüm süreçler listelenir. Ağ hareketlerinden görülen 4145 PID’li sürecin Uid, Gid ve Start Time gibi detayları da bu listede görülebilir.


Offset     Name                 Pid             Uid             Gid    DTB        Start Time
———- ——————– ————— ————— —— ———- ———-
………
0xece30cd0 bash                 3945            1000            1000   0x2a8f6000 2014-09-26 11:28:43 UTC+0000
0xec024010 scsi_eh_4            4068            0               0      ———- 2014-09-26 11:34:17 UTC+0000
0xec020000 usb-storage          4069            0               0      ———- 2014-09-26 11:34:17 UTC+0000
0xec0219a0 udevd                4072            0               0      0x2c6ce000 2014-09-26 11:34:18 UTC+0000
0xe290a670 kworker/0:0          4133            0               0      ———- 2014-09-26 11:38:42 UTC+0000
0xedf4a670 73b0d95541c8496      4145            1000            1000   0x23ce8000 2014-09-26 11:38:54 UTC+0000
0xec1d8cd0 kworker/0:1          4449            0               0      ———- 2014-09-26 11:53:45 UTC+0000
0xec1d8000 mount.ntfs           4523            0               0      0x0263e000 2014-09-26 11:57:08 UTC+0000
0xec36b340 flush-8:32           4541            0               0      ———- 2014-09-26 11:57:29 UTC+0000
0xec36a670 sudo                 4550            0               1000   0x146df000 2014-09-26 11:57:51 UTC+0000
0xec36c010 lmg                  4551            0               0      0x15d26000 2014-09-26 11:57:51 UTC+0000
0xe29fc010 insmod               4570            0               0      0x2dcb6000 2014-09-26 11:57:51 UTC+0000
0xe29f8cd0 kworker/0:2          4571            0               0      ———- 2014-09-26 11:58:47 UTC+0000

Şüpheli sürecin Uid ve Gid değerlerinin 1000 olduğu çıktıdan görülebilir. Sürecin hangi kullanıcı ve grubun yetkileriyle çalıştırıldığı “grep 1000 /etc/{passwd,group}”    komutuyla görüntülenir.

remnux@remnux:/media/usb/volatility$ grep 1000 /etc/{passwd,group}
/etc/passwd:remnux:x:1000:1000:REMnux User,,,:/home/remnux:/bin/bash
/etc/group:remnux:x:1000:

Çıktıdan 1000 değerinin remnux kullanıcısına ve remnux grubuna karşılık geldiği anlaşılıyor. Süreçler arasındaki ilişkiyi de gösteren bir listeye ihtiyaç duyulursa “./vol.py linux_pstree”    komutu kullanılır.

Name                 Pid             Uid
………
..[lxterminal]       1104            1000          
..bash               1105            1000          
..bash               2469            1000          
..bash               3619            1000          
…sudo              4550            0             
….lmg              4551            0             
…..insmod          4570            0  
           
..bash               3945            1000          
.vmtoolsd            1084            1000          
.gvfsd               1089            1000          
.gvfs-fuse-daemo     1097            1000          
.menu-cached         1103            1000          
.udisks-daemon       1168            0             
..udisks-daemon      1169            0             
.gvfs-gdu-volume     1166            1000          
.gvfs-gphoto2-vo     1222            1000          
.gvfs-afc-volume     1229            1000          
.gconfd-2            1279            1000          
.vmware-vmblock-     1333            0             
.vmtoolsd            1373            0             
.gvfsd-trash         1465            1000          
.mount.ntfs          1652            0             
.gvfsd-metadata      3943            1000          
.73b0d95541c8496     4145            1000          
.mount.ntfs          4523            0             
[kthreadd]           2               0             
.[ksoftirqd/0]       3               0             
.[kworker/u:0]       5               0             
.[migration/0]       6               0             
.[cpuset]            7               0             

Çıktıda şüpheli sürecin dışında, isimleri köşeli parantezlerin içinde gözüken süreçler normalde sistem süreçleridir. Ancak bazı zararlılar gizlilik adına bu kendilerine bu şekilde isim verebilirler. Bunun yanı sıra “bash->sudo->lmg->insmod” olarak gözüken süreç ağacı da bellek dökümü almak için kullanılan lmg aracının (bkz …) bellekte değişikliğe sebep olduğunu hatırlatır niteliktedir.

Sürecin kullandığı harici kütüphaneler, diskte bulunduğu tam yol, bellekteki başlangıç ve bitiş adresleri, bellekteki bu bölümlerin izinleri gibi detaylar “./vol.py linux_proc_maps -p 4145” komutu ile görüntülenir. Bu çalışan bir sistemde “cat /proc/4145/maps”    komutuna karşılık gelir.

Pid      Start              End                Flags       Pgoff Major  Minor  Inode      File Path
——– —————— —————— —— ———- —— —— ———- ———
    4145 0x0000000000295000 0x0000000000296000 r-x           0x0      0      0          0 [vdso]
    4145 0x0000000008048000 0x00000000080cb000 r-x           0x0      8      1     676442 /home/remnux/Desktop/73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489
    4145 0x00000000080cb000 0x00000000080cd000 rw-       0x82000      8      1     676442 /home/remnux/Desktop/73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489
    4145 0x00000000080cd000 0x00000000080d2000 rw-           0x0      0      0          0
    4145 0x0000000008e24000 0x0000000008e46000 rw-           0x0      0      0          0 [heap]
    4145 0x00000000b779e000 0x00000000b779f000 rw-           0x0      0      0          0
    4145 0x00000000bfbab000 0x00000000bfbcd000 rw-           0x0      0      0          0 [stack]

Elde edilen bilgilerle süreç bellekten diske “./vol.py linux_dump_map -p 4145 -s 0x0000000008048000 -D ../output” komutuyla kaydedilir.

-p 4145 (sürecin PID değeri)
-s 0x0000000008048000 (sürecin bellekteki başlangıç adresi)
-D ../output (kaydedilecek dizin)

Volatility Foundation Volatility Framework 2.4
Task       VM Start   VM End         Length Path
———- ———- ———- ———- —-
      4145 0x08048000 0x080cb000    0x83000 ../output/task.4145.0×8048000.vma

file ../output/task.4145.0×8048000.vma”    komutuyla dosyanın türü doğrulanabilir.

output/task.4145.0×8048000.vma: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped

Bu aşamada elde edilen şüpheli dosya Virustotal’e yüklenebilir ve static/dinamik diğer analiz yöntemleriyle incelenebilir.

“./vol.py linux_psaux”    komutu çalışan bir sistemdeki “ps aux” komutuna karşılık gelir. Komut “linux_pslist” komutundan farklı olarak süreçlerin komut satırı argümanlarını da görüntüler. Çıktı incelenirken bazı zararlıların çalışma anında bellekteki komut satırı argümanlarının üzerine başka değerler yazarak gizleyebildiklerini de unutmamak gerekir.

Pid    Uid    Gid    Arguments                                                      
……                            
3945   1000   1000   /bin/bash                                                      
4068   0      0      [scsi_eh_4]                                                    
4069   0      0      [usb-storage]                                                  
4072   0      0      udevd –daemon                                                 
4133   0      0      [kworker/0:0]                                                  
4145   1000   1000   ./73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489
4449   0      0      [kworker/0:1]                                                  
4523   0      0      /sbin/mount.ntfs /dev/sdc1 /media/usb/ -o rw                   
4541   0      0      [flush-8:32]                                                   
4550   0      1000   sudo ./lmg                                                     
4551   0      0      /bin/bash ./lmg                                                
4570   0      0      insmod lime-3.0.0-32-generic-i686.ko format=lime path=/media/usb/capture/remnux-2014-09-26_07.57.52/remnux-2014-09-26_07.57.52-memory.lime

Benzer şekilde “./vol.py linux_psenv -p 4145”    komutuyla sürecin çevre değişkenleri listelenir.

Volatility Foundation Volatility Framework 2.4
Name   Pid    Environment
73b0d95541c8496   4145   SSH_AGENT_PID=1048
………
XAUTHORITY=/home/remnux/.Xauthority _=./73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489 ./73b0d955

“./vol.py linux_lsof -p 4145” komutu ile sürecin sahip olduğu dosya handleları görüntülenir. Linux’de cihaz, socket vb. IO yapılarına da uygulama bazında dosya gibi davranıldığı için çıktısından faydalı birçok bilgi edinilebilir. Örneğin FD (file descriptor) alanındaki 0 stdin, 1 stdout, 2 stderr ve 3 kernel modulü anlamlarını taşımaktadır.

Volatility Foundation Volatility Framework 2.4
Pid      FD       Path
——– ——– —-
    4145        0 /dev/pts/3
    4145        1 /dev/pts/3
    4145        2 /dev/pts/3
    4145        3 socket:[24583]

Son olarak “./vol.py linux_bash” komutuyla bash kabuğu geçmişi ve “./vol.py linux_bash_env” ile bash çevre değişkenleri görüntülenebilir. Bash geçmişinden kabuk erişimi aracılığıyla çalıştırılmış komutlar dolayısıyla sistemde yapılan değişiklikler tespit edilebilir.

Pid      Name                 Command Time                   Command
   3945 bash                 2014-09-26 11:31:23 UTC+0000   unzip linux_73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489.zip
    3945 bash                 2014-09-26 11:31:24 UTC+0000   ls
   3945 bash                 2014-09-26 11:31:40 UTC+0000   file 73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489
    3945 bash                 2014-09-26 11:37:50 UTC+0000   chmod +x 73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489
   3945 bash                 2014-09-26 11:38:55 UTC+0000   ./73b0d95541c84965fa42c3e257bb349957b3be626dec9d55efcc6ebcba6fa489
    3945 bash                 2014-09-26 11:41:08 UTC+0000   netstat -nta