Site icon BGA Cyber Security – Siber Güvenlik Çözümleri

Linux Sistemlerde Zararlı Yazılım Analizi – Temel Seviye Dinamik Analiz

Temel seviye dinamik analizde zararlı çalıştırılarak ağ, dosya sistemi, süreçler ve diğer işletim sistemi bileşenleri üzerindeki etkileri gözlemlenir. Zararlının çalıştığı sistemde ve ağda kalıcı etkileri olabileceğinden dolayı dinamik analizin izole bir ortamda yapılması önerilir. Örneklere “Temel Seviye Statik Analiz” ) yazısında kullanılan zararlı ile devam edilmiştir.

Zararlı çalıştırıldığında “ps” komutu ile sistem süreçleri listelenir, “-ef” parametreleri verilerek süreçlerin PPID (parent process id) gibi detayları da listelenir. Bu sayede grep komutunun da yardımı ile dosya isminden yola çıkarak ilk süreç, ilk sürecin PID değerinden yola çıkarak da başlattığı diğer süreçler bulunur.

ps -ef |grep elknot |grep -v grep
remnux    1702     1  0 04:00 ?        00:00:00 ./elknot

ps -ef|grep 1702|grep -v grep
remnux    1702     1  0 04:00 ?        00:00:00 ./elknot
ps çıktısında zararlının başlattığı başka bir süreç bulunmadığı görülüyor.

Daha sonra “strace” komutuyla sürecin yaptığı sistem çağrıları izlenir. Bu sayede yaptığı işlemler hakkında oldukça fazla bilgi edinilebilir.

strace ./elknot
execve(“./elknot”, [“./elknot”], [/* 44 vars */]) = 0
…..
readlink(“/proc/1851/exe”, “/home/remnux/Desktop/elknot”, 1024) = 27
stat64(“/home/remnux/Desktop/elknot”, {st_mode=S_IFREG|0755, st_size=1223123, …}) = 0
getppid()                               = 1850
readlink(“/proc/1850/exe”, “/usr/bin/strace”, 255) = 15
readlink(“/proc/1851/exe”, “/home/remnux/Desktop/elknot”, 1024) = 27
readlink(“/proc/1851/exe”, “/home/remnux/Desktop/elknot”, 1024) = 27
readlink(“/proc/1851/exe”, “/home/remnux/Desktop/elknot”, 1024) = 27
readlink(“/proc/1851/exe”, “/home/remnux/Desktop/elknot”, 1024) = 27
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x9476878) = 1852
exit_group(0)                           = ?

Örnekte zararlı çalışmasını “fork” ile dallandırdığı için “strace” çıktısı faydalı bir bilgi sağlamıyor. Böyle durumlarda fork edilen süreçleri de takip etmek için “-f” parametresi kullanılır.

strace -f ./elknot
….
open(“/dev/null”, O_RDWR)               = 3
fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), …}) = 0
dup2(3, 0)                              = 0
dup2(3, 1)                              = 1
dup2(3, 2)                              = 2
close(3)                                = 0
open(“/tmp/”, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
fstat64(3, {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, …}) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
getdents64(3, /* 14 entries */, 4096)   = 496
getdents64(3, /* 0 entries */, 4096)    = 0
close(3)                                = 0
nanosleep({1, 0}, NULL)                 = 0
open(“/tmp/moni.lod”, O_RDWR)           = -1 ENOENT (No such file or directory)
nanosleep({1, 0}, NULL)                 = 0
open(“/tmp/bill.lock”, O_RDWR)          = -1 ENOENT (No such file or directory)
unlink(“/tmp/bill.lock”)                = -1 ENOENT (No such file or directory)
access(“/tmp/gates.lod”, F_OK)          = 0
open(“/tmp/gates.lod”, O_RDWR)          = 3

flock(3, LOCK_EX|LOCK_NB)               = 0
flock(3, LOCK_UN)                       = 0
close(3)                                = 0
access(“/tmp/gates.lod”, F_OK)          = 0
open(“/tmp/gates.lod”, O_RDWR)          = 3

…..
Process 1898 resumed (parent 1897 ready)
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7768938) = 1898
[pid  1898] execve(“/sbin/insmod”, [“insmod”, “/home/remnux/Desktop/xpacket.ko”], [/* 44 vars */]) = 0
[pid  1898] brk(0)                      = 0x81a9000
[pid  1898] access(“/etc/ld.so.nohwcap”, F_OK) = -1 ENOENT (No such file or directory)
[pid  1898] mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb779a000

[pid  1907] socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
[pid  1907] setsockopt(4, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
[pid  1907] setsockopt(4, SOL_SOCKET, SO_LINGER, {onoff=1, linger=0}, 8) = 0

[pid  1907] time(NULL)                  = 1419240360
[pid  1907] fcntl64(4, F_GETFL)         = 0x2 (flags O_RDWR)
[pid  1907] fcntl64(4, F_SETFL, O_RDWR|O_NONBLOCK) = 0
[pid  1907] connect(4, {sa_family=AF_INET, sin_port=htons(25000), sin_addr=inet_addr(“23.251.63.37”)}, 16) = -1 EINPROGRESS (Operation now in progress)
[pid  1907] fcntl64(4, F_GETFL)         = 0x802 (flags O_RDWR|O_NONBLOCK)
[pid  1907] fcntl64(4, F_SETFL, O_RDWR) = 0
[pid  1907] getsockname(4, {sa_family=AF_INET, sin_port=htons(41238), sin_addr=inet_addr(“172.16.63.160”)}, [16]) = 0
[pid  1907] open(“/home/remnux/Desktop/conf.n”, O_RDWR|O_CREAT, 0644) = 5
[pid  1907] flock(5, LOCK_EX)           = 0
[pid  1907] write(5, “E ”, 4)      = 4
[pid  1907] write(5, “