3.22.2010

Conficker dan bagaimana mengenalinya

Sebenarnya sudah cukup banyak tulisan yang dibuat mengenai conficker:
  1. Apa itu conficker
  2. Blocking virus conficker
  3. Download domain conficker
  4. Memblok akses untuk download content conficker
Tulisan yang akan disajikan di bawah ini pendekatannya hampir sama dengan cara 2 dan 3 cuma scriptingnya tidak dilakukan di mikrotik melainkan di laptop ubuntu penulis. Data domain conficker diambil dari http://www.epicwinrar.com/conficker/domains.txt. Langkah-langkahnya sebagai berikut:

  1. Download data domain conficker.
  2. Buat script untuk query setiap domain conficker.
  3. Extract alamat ip domain conficker yang exist (resolvable).
  4. Sortir ip conficker yangg diperoleh dari domain yang exist dan cari ip conficker yang kemunculannya paling banyak  (modulus).
  5. Berdasarkan ip conficker yang diperoleh dari no 4 di atas, cari kemunculannya di ip dns cache mikrotik.
  6. Jika ada datanya, masukkan ip tersebut ke ip firewall address-list untuk diproses lebih lanjut.
Sebenarnya langkah ini bisa lebih singkat yakni sampai nomor 3 saja, langkah selanjutnya adalah masukan domain conficker yang exist tersebut seperti yang dijelaskan di http://wiki.mikrotik.com/wiki/Conficker-Virus-Blocking. Domain conficker yang exist ada sekitar 30 ribu lebih. Apa puluhan ribu data ini mau dimasukkan semuanya ke ip firewall address-list ? Karena belum tentu domain conficker ini meski ada (exist), juga aktif sebagai inang conficker. Beberapa domain conficker sudah diambil alih dan dihandle oleh badan yang namanya Conficker Holding Account. Cek siapa yang memiliki domain conficker qvqgzdwrnnr.info. Disitu jelas tertulis data lengkap pemegang domain. Apakah ini benar alamat yang si pembuat virus conficker? Tidak mungkin kan ? Padahal Microsoft menjanjikan uang $250,000 bagi siapa yang bisa membekuk si biang kerok ini.
Domain ini kalau kita buka di browser dan pakai opendns, aksesnya diblok seperti ditunjukkan pada gambar di bawah:
akses ke qvqgzdwrnnr.info diblok oleh opendnsSebenarnya yang penting di sini adalah bukanlah mencari dan memilah ini domain conficker exist (dan aktif) atau bukan melainkan mencari client-client mana yang terkena virus conficker dan aktif melakukan request ke domain-domain conficker meski domain yang dituju sudah tidak exist atau dormant sehingga bisa diambil tindakan:
  1. Memberitahu client bahwa jaringan atau pcnya terkena virus conficker.
  2. Jika ada client yang mengeluh koneksi internet lambat, itu karena dampak virus conficker :) .
Tambahan lagi apakah mikrotik tidak terkena dampak dari sebaran virus conficker ini? Dns cache mikrotik di sini sudah 2x pada hari yang sama mengalami cache size dns terpakai semua (baca cache used > cache size), sebagai akibatnya request dns dari client lambat atau gagal! Untuk itu langkah pencegahan di sisi mikrotik:
  1. Besarkan dns cache.
    /ip dns set cache-size=10240
  2. Buat schedule untuk meng-flush dns cache apabila pemakaiannya melebihi nilai tertentu. Script di bawah akan flush dns cache bila ukurannya lebih dari 5120KiB.
    :local a [ /ip dns get cache-used ];
    :if ($a>=5120) do { /ip dns cache flush };
Langkah pertama, download domain conficker:
$ wget -O domains_conficker.txt \

http://www.epicwinrar.com/conficker/domains.txt

Langkah kedua, buat script untuk query setiap domain conficker yang diperoleh dari cari di atas:
#!/bin/bash
#
# File: cek_domains_conficker.sh
#
CONFICKER="domains_conficker.txt"
DNSISP="1.2.3.4"
cat $FILE | while read domain
do
  ip=`dig @$DNSISP +time=1 +short $CONFICKER`
  echo "$CONFICKER:$ip" >> ip_domain_conficker.txt
done
Jalankan dengan perintah bash cek_domains_conficker.sh
Ekseskusi ini akan memakan waktu lama karena ada 113501 domain conficker sejak tulisan ini dibuat yang perlu dicek exist tidaknya. Sebelum menginjak langkah ketiga, coba kita lihat sebagian data ip_domain_conficker.txt yang diperoleh dari langkah no 2:
qegiche.ws:64.70.19.33
ovdbkbanqw.com:
lxmpzyiq.com:
gkrobqo.com:
hunqbpya.net:
lmhfcocgiz.org:
epzyytco.ws:64.70.19.33
ampavhunh.com:
pzzyxnzhuv.com:
frdyiaosiir.ws:64.70.19.33
kvfvpszaxv.biz:
gopfgie.net:
ibrdykqf.ws:149.20.56.32
199.2.137.252
205.188.161.4
74.208.64.145
83.68.16.6
97.74.200.45
143.215.143.11
xwfxr.ws:205.188.161.4
74.208.64.145
83.68.16.6
97.74.200.45
143.215.143.11
149.20.56.32
199.2.137.252
Terlihat bahwa ada beberapa domain conficker yang tidak exist ditunjukkan dengan warna abu-abu. Beberapa domain memiliki multi ip address.

Langkah ketiga di bawah untuk mengekstrak ip domain conficker yang exist dan menyimpan hasilnya ke file ip_domain_conficker_exist:
$ grep -oe "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" \
ip_domain_conficker | sort > ip_domain_conficker_exist

Langkah keempat buat script untuk menghitung jumlah ip yang sama berdasarkan data ip_domain_conficker:
#!/bin/bash
# File: hitung_modulus_ip_conficker.sh
file=ip_domain_conficker_exist
i=0
iplama='Inisialisasi'
while read ipbaru
do
  if [ $ipbaru == $iplama ]
  then
    i=$((i+1))
  else
    i=$((i+1))
    echo "$iplama: $i"
    i=0
    iplama=$ipbaru
  fi
  done <$file
  echo "$iplama: $((i+1))"
done
Jalankan scriptnya bash hitung_modulus_ip_conficker.sh.
Beberapa baris hasil perintah di atas ditunjukkan pada tampilan di bawah:
Inisialisasi: 1
110.75.195.7: 2
113.11.195.12: 1
114.167.126.140: 1
116.254.252.21: 1
117.74.76.174: 1
119.42.231.250: 6
121.101.213.189: 1
12.180.115.1: 1
122.249.22.110: 1
123.100.2.87: 1
124.217.198.74: 1
124.248.32.60: 1
124.42.122.43: 1
124.42.8.188: 1
124.47.0.2: 1
125.72.127.36: 1
127.0.0.1: 2
143.215.143.11: 30508
149.20.56.32: 30574
161.58.230.16: 1

Daftar ip conficker yang mempunyai frekuensi kemunculan terbanyak (tidak diurut berdasarkan ranking):
64.70.19.33
66.90.81.140
72.167.51.186
74.208.46.216
74.208.64.145
83.68.16.6
97.74.200.45
143.215.143.11
149.20.56.32
199.2.137.252
205.188.161.4
221.7.91.31

Langkah kelima, ambil salah satu ip yang kemunculannya terbanyak, 221.7.91.31, cek apakah datanya ada di ip dns cache mikrotik (penulis gunakan mikrotik versi 3.30, versi sebelumnya kemungkinan tidak mempunyai filtering untuk menampilkan kolom data):
ip conficker di dns cache mikrotik

Langkah keenam, buat rule di ip firewall address-list:
/ip firewall address
add address=64.70.19.33 list=conficker
add address=66.90.81.140 list=conficker
add address=72.167.51.186 list=conficker
add address=74.208.46.216 list=conficker
add address=74.208.64.145 list=conficker
add address=83.68.16.6 list=conficker
add address=97.74.200.45 list=conficker
add address=143.215.143.11 list=conficker
add address=149.20.56.32 list=conficker
add address=199.2.137.252 list=conficker
add address=205.188.161.4 list=conficker
add address=221.7.91.31 list=conficker

Kemudian buat rule di ip firewall filter untuk “menangkap akses” dari client ke ip-ip conficker berdasarkan address-list di atas:
/ip firewall filter
add chain=forward action=add-src-to-address-list dst-address-list=conficker address-list=src-conficker \
address-list-timeout=3d comment="ADD to address-list src-conficker"
Penulis buat timeout untuk 3 hari. Taruh filter ini di baris sebelum baris forward atau jump forward:
/ip firewall filter print
...
54 ;;; ADD src-add to conficker
   chain=forward action=add-src-to-address-list dst-address-list=conficker \
   address-list=src-conficker  address-list-timeout=3d
55 chain=forward action=jump jump-target=tcp protocol=tcp
56 chain=forward action=jump jump-target=udp protocol=udp
57 chain=forward action=jump jump-target=icmp protocol=icmp

Setelah beberapa jam. berikut tampilan ip firewall address-list:
list ip client yang akses ke ip conficker

Mengenali akses ke ip conficker di router linux
Untuk mengenali akses ke ip-ip conficker di linux, kita buat langkah-langkah sebagai berikut:
  1. Buat list ip coficker yang telah diperoleh dari cara di atas di /etc/conficker/ip.conficker.
    $ cat /etc/conficker/ip.conficker
    64.70.19.33
    66.90.81.140
    72.167.51.186
    74.208.46.216
    74.208.64.145
    83.68.16.6
    97.74.200.45
    143.215.143.11
    149.20.56.32
    199.2.137.252
    205.188.161.4
    221.7.91.31
  2. Buat script iptables.conficker.sh untuk menandai akses ke ip conficker.
    #!/bin/sh
    LAN_IFACE="eth0"
    IPTABLES="/usr/sbin/iptables"
    FIPCONFICKER="/etc/conficker/ip.conficker"
    while read IPCONFICKER
    do
      # uncomment 2 baris di bawah untuk blok akses ke ip conficker untuk kernel 2.6
      #$IPTABLES -t nat -I PREROUTING -i $LAN_IFACE -d $IPCONFICKER -j DROP \
      #   -m comment --comment "IP Conficker"
      # uncomment 1 baris di bawah untuk blok akses ke ip conficker untuk kernel 2.4
      #$IPTABLES -t nat -I PREROUTING -i $LAN_IFACE -d $IPCONFICKER -j DROP
      # log akses ke ip conficker dan simpan ke /var/log/syslog
      $IPTABLES -t nat -I PREROUTING -i $LAN_IFACE -d $IPCONFICKER -m limit \
          --limit 1/hour --limit-burst 1 -j LOG --log-prefix "CONFICKER " --log-ip-options
    done <$FIPCONFICKER
  3. Jalankan scriptnya sh iptables.conficker.sh
  4. Untuk melihat client yang akses ke ip conficker.
    $ sudo grep 'CONFICKER ' /var/log/syslog|cut -f1,2,3,10,11 -d' '
    Dec 21 16:21:23 SRC=192.168.0.252 DST=221.7.91.31

Terakhir, beritahu client agar cek PC windows apakah benar-benar terkena virus conficker dengan mengunjungi alamat http://www.confickerworkinggroup.org/infection_test/cfeyechart.html

Hasil tangkapan log dari salah satu warnet A:
Dec 22 14:40:34 SRC=192.168.0.19 DST=143.215.143.11
Dec 22 14:40:34 SRC=192.168.0.19 DST=205.188.161.4
Dec 22 14:40:34 SRC=192.168.0.19 DST=97.74.200.45
Dec 22 14:40:34 SRC=192.168.0.19 DST=83.68.16.6
Dec 22 14:40:35 SRC=192.168.0.19 DST=199.2.137.252
Dec 22 14:40:42 SRC=192.168.0.19 DST=221.7.91.31
Dec 22 14:40:49 SRC=192.168.0.19 DST=149.20.56.32
Dec 22 14:40:50 SRC=192.168.0.19 DST=74.208.64.145
Dec 22 22:08:58 SRC=192.168.0.19 DST=74.208.64.145
Dec 22 22:08:58 SRC=192.168.0.19 DST=199.2.137.252
Dec 22 22:08:58 SRC=192.168.0.19 DST=221.7.91.31
Dec 22 22:09:06 SRC=192.168.0.19 DST=205.188.161.4
Dec 22 22:09:06 SRC=192.168.0.19 DST=143.215.143.11
Dec 22 22:09:13 SRC=192.168.0.19 DST=83.68.16.6
Dec 22 22:09:13 SRC=192.168.0.19 DST=97.74.200.45
Dec 22 22:09:21 SRC=192.168.0.19 DST=149.20.56.32

Apa kesimpulan anda ?

Tidak ada komentar: