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, “