PDA

Orijinalini görmek için tıklayınız : Linux Yaz Kampında Bro ve Tshark ile Trafik Analizi



erkolay
20.Ağustos.2015, 12:20
Her sene düzenlenen Linux Yaz Kampı'nda BilgiO ekibi olarak hem sponsor olduk hem de 4 eğitmenle katıldık. Anlatmak için önerdiğimiz konular arasından seçilen Bilgi Güvenliğine Giriş hakkında konuşmak bana düştü ve 12 Ağustos 2015'de Linux 2 sınıfında dersi gerçekleştirdik.
Toplamda 8 saat süren eğitimde amaç hem Bilgi Güvenliği'ne giriş anlamında çerçeve çizmek hem de somut ve gerçek hayattan örneklerle Bilgi Güvenliği'nin savunma bacağında farkındalığı arttırmak olarak kararlaştırılmıştı. Sınıfın seviyesi Linux 2 olduğu için sabah saatlerinde ilk iş olarak tüm katılımcılardan gün boyunca kendi laptoplarında promiscious mode'da packet capture yapmalarını rica ettim. Diske kayıt ettiğimiz pcap dosyalarını akşam 19:00'dan itibaren açıp inceleyeceğimiz bilgisini de paylaşarak.

Bolu Abant İzzet Baysal Üniversitesi'nin sağladığı misafir kablosuz ağına bağlı sınıftaki laptoplar arasında gün boyunca çeşitli port scan teknikleri de deneyerek bu trafik loglarında hem organik trafik hem de kasıtlı üretilmiş aktiviteleri biriktirdik.


Hem Linux Yaz Kampı notlarımızı katılımcılarla paylaşmak, hem de Bro ile network analizine giriş yapmak adına sınıfta topladığımız pcap dosyalarının kasıtlı ve rastlantısal olarak ağda gözümüze çarpan garipliklerin kaba bir analizini bu yazıyla yayınlıyoruz.
Paketlerin toplanması
Sabah saatlerindeki ilk dersimizde öncelikle katılımcılardan makinalarına tcpdump, ngrep, nmap, bro ve wireshark yüklemelerini istedim. Bu yazılımlardan wireshark haricinde diğerleri sadece konsoldan çalıştırılabilen uygulamalar. Yaz kampında topladığımız pcap dosyaları üzerinde analiz yapmadan önce paketleri nasıl topladığımızı da açıklayalım. Konsol üzerinden paketleri toplamak için öncelikle sistemde aktif kullanımda olan network kartının belirlenmesi iyi olur. Bunun için :


atmaca:~ # cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
docker0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
wlp1s0: 293903917 256679 0 0 0 316426 0 0 28499235 188617 0 0 0 0 0 0
lo: 566373478 3958227 0 0 0 0 0 0 566373478 3958227 0 0 0 0 0 0
vboxnet0: 0 0 0 0 0 0 0 0 67076 261 0 0 0 0 0 0


Linux sisteminde bir çok durum ve değer, ara bir yazılım kullanımına gerek kalmaksızın /proc ve /sys dosya sistemlerinden öğrenilebilir. /proc/net/dev'e bakarak en çok trafiğin wlp1s0 adlı interface'den yapıldığını görebiliyoruz. Bu interface üzerinde akan tüm trafiği alıp tcpdump kullanarak diske yazacağız. Hem analizi kolaylaştırması, hem de disk alanını daha doğru yönetebilme adına tcpdump'la kayıt ederken 200MBlik dosyalar halinde parçalara bölmesini ve sıkıştırmasını istiyoruz. Bunun için :


atmaca:/mnt/pcap # tcpdump -i wlp1s0 -C 200M -z gzip -w atmaca.pcap -p -s 0
tcpdump: listening on wlp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes


yazmamız yeterli. Parametrelerin açıklmaları :
- -i wlp1s0 : Hangi network kartından dinleme yapmak istediğimizi belirliyoruz.
- -C 200M : 200M lik dosyalar halinde diskde dosyalar oluşturulması
- -z gzip : Oluşturulan dosyaları, dosya kapatıldıktan sonra diskte az yer kaplaması için gzip ile sıkıştırılması
- -w atmaca.pcap : Oluşturulacak olan dosya adı
- -p : Dinleme yapılan network kartının kendisine gönderilmeyen kabloda geçen tüm paketleri yakalamasını (tcpdump varsayılan mode'u bu)
- -s 0 : Paket içeriğinin tümüyle kayıt edilmesi. Dilenirse bu diske yazılan datayı azaltmak için 0 yerine 64 gibi hedef protokole göre değişen bir miktar belirtilebilir. (tcpdump varsayılan değer zaten 0)

Yukarıdaki tcpdump komutunu kabaca sabah 10:00'dan itibaren akşam 19:00'a kadar sınıftaki tüm katılımcı makinalarında çalıştırdık. Öğlen 14:00'den itibaren olan seans boyunca da sınıftaki katılımcı IP'leri arasında ve wifi ile bağlı bulunan subnet'ler üzerinde nmap ile TCP ve UDP port scan teknikleri denedik.

Günün en son seansında 19:00'a geldiğimizde, katılımcı bilgisayarlarında aşağı yukarı aynı miktarlarda data birikeceğini varsaydık, ancak ne kadar data biriktirdiklerini sorduğumuzda gelen tablo yanıldığımızı ortaya çıkardı. Birkaç katılımcının bilgisayarındaki data miktarı 200 MB'nin altındaydı çünkü tcpdump komutu kesintiye uğramıştı. Çoğu katılımcıda biriken data 500-600 MB civarındaydı ki bu miktar katılımcıların gün boyunca zamanlarının büyük bir kısmını dersi dinleyerek, arka tarafta download ya da surf yapmadan geçirdiklerinden dolayı normal gözüküyordu. Ancak 2 katılımcıda 6 - 7 GB boyutunda data birikmişti. Fazla miktarda data biriken katılımcılardan bir tanesi BilgiO da bu yaz stajyer olarak yer aldığından ilk ona yöneldim ve gün boyu ne tür aktiviteler yaptığını sordum. Makinasında Fedora yüklüydü ve ne o kadar data oluşturacak download yapmıştı ne de internette gezmişti.
Tablo garip olduğu için bir USB anahtarda biriken 7 GB'lik datanın kabaca 2.3 GB'ini sunum için kullandığım kendi bilgisayarıma aktardım. Buradaki analiz çalışması hem derste hem de sonrasında gerçekleştirdiğim kaba analizi özetliyor. Paketlerin birleştirilmesi
Birikecek paketlerin miktarını önden bilemediğimzden ötürü 200 MB'lik küçük parçalar halinde oluşturmuştuk. Ancak 2.3 GB boyutu 8G Ram'li bir makina için Wireshark'la açılıp analiz edilebilecek limitlerde olduğu için birleştirebilir kıvamda. Gelen dosyaların isimleri deneme.pcap, ... , deneme.pcap11 şeklindeydi, toplamda 12 dosya. Bu bölümde kullanacağımız konsol uygulamalarının tümü aslında bir grafik arayüz olan Wireshark uygulamasıyla birlikte geliyor. Paketleri birleştirmek için Wireshark'la gelen şu komutu çalıştırdık :


atmaca:/mnt/pcap/lyk # mergecap -F pcap -w lyk.pcap deneme.pcap*


Bu komut sonunda diziminiz :


atmaca:/mnt/pcap/lyk # ls -goh
total 4.5G
-rw-r--r-- 1 191M Aug 12 11:12 deneme.pcap
-rw-r--r-- 1 191M Aug 12 12:23 deneme.pcap1
-rw-r--r-- 1 191M Aug 12 14:42 deneme.pcap10
-rw-r--r-- 1 191M Aug 12 14:51 deneme.pcap11
-rw-r--r-- 1 191M Aug 12 12:33 deneme.pcap2
-rw-r--r-- 1 191M Aug 12 13:06 deneme.pcap3
-rw-r--r-- 1 191M Aug 12 13:26 deneme.pcap4
-rw-r--r-- 1 191M Aug 12 13:34 deneme.pcap5
-rw-r--r-- 1 191M Aug 12 13:44 deneme.pcap6
-rw-r--r-- 1 191M Aug 12 13:52 deneme.pcap7
-rw-r--r-- 1 191M Aug 12 14:03 deneme.pcap8
-rw-r--r-- 1 191M Aug 12 14:24 deneme.pcap9
-rw-r--r-- 1 2.3G Aug 16 16:00 lyk.pcap


yukarıda görüldüğü gibi 2.3G boyutunda yeni bir pcap dosyasında tüm pcap'leri birleştirdik. mergecap uygulaması okuduğu dosyalardaki trafik bilgisini zamana göre sıralayarak yeni dosya oluşturmalı ancak bu her zaman mümkün olmuyor. Yeni oluşan dosya içerisindeki paket istatistikleri, hangi zaman dilimine ait veriyi barındırdığının bilgisini almak için :


atmaca:/mnt/pcap/lyk # capinfos -A lyk.pcap
File name: lyk.pcap
File type: Wireshark/tcpdump/... - pcap
File encapsulation: Ethernet
Packet size limit: file hdr: 65535 bytes
Number of packets: 1932 k
File size: 2400 MB
Data size: 2369 MB
Capture duration: 15055 seconds
Start time: Wed Aug 12 10:40:05 2015
End time: Wed Aug 12 14:51:00 2015
Data byte rate: 157 kBps
Data bit rate: 1258 kbps
Average packet size: 1225.93 bytes
Average packet rate: 128 packets/sec
SHA1: 277a007b83dacf48ce6aa5a793ea6806fcd5fc08
RIPEMD160: c8d5c2ca561cc0163e3c67ecb55a1843e4ada59c
MD5: aa680288a6722916aa0236268a596371
Strict time order: False


capinfos uygulamasının belirttiği gibi "Strict time order: False" yani zaman sıralamasına uymamış frame'lere rastlanmış. Bu tek seferlik analiz gerçekleştirilecek dosyalarda çok önemli olmayabilir, ancak detaylı analiz gerçekleştirilecekse zaman sıralamasının düzgün olması analizi hızlandıracaktır. Sıralamayı düzeltmek için :


atmaca:/mnt/pcap/lyk # reordercap lyk.pcap lyk.pcap2



1932492 frames, 1 out of order


Zaman sırası düzeltilmiş yeni bir dosya oluşturduk, doğrulamak için :


atmaca:/mnt/pcap/lyk # capinfos -A lyk.pcap2
File name: lyk.pcap2
File type: Wireshark/tcpdump/... - pcap
File encapsulation: Ethernet
Packet size limit: file hdr: 65535 bytes
Number of packets: 1932 k
File size: 2400 MB
Data size: 2369 MB
Capture duration: 15055 seconds
Start time: Wed Aug 12 10:40:05 2015
End time: Wed Aug 12 14:51:00 2015
Data byte rate: 157 kBps
Data bit rate: 1258 kbps
Average packet size: 1225.93 bytes
Average packet rate: 128 packets/sec
SHA1: 9574040a3e0c2f7c94f7226a0f8f56132dc981fd
RIPEMD160: 02b86bf3d5afc30e84fdb32f7a29186ad8453c02
MD5: 6fed732987ba7245c56897c2e34455f4
Strict time order: True


"Strict time order: True" olarak doğrulandı. capinfos'un belirttiğine göre analiz yapacağımız paketler "Wed Aug 12 10:40:05 2015" ile "Wed Aug 12 14:51:00 2015" arasındaki döneme ait. Toplamda 4 saat 11 dakikalık bir zaman diliminde 128 packet/sec ile data birikmiş.

Bro ile analize girişmeden önce tshark ile bu dosya üzerindeki temel metriklere göre gruplandırarak göz atalım :


atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z io,phs > io
atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z http,stat, > http
atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z expert > expert
atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z hosts > hosts
atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z conv,eth > flow-eth
atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z conv,ip > flow-ipv4
atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z conv,ipv6 > flow-ipv6
atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z conv,tcp > flow-tcp
atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z conv,udp > flow-udp


Yukarıdaki istatistik işlemleri uzun sürebilir, her birinin output'unu ayrı dosyalara yönlendirerek geriye dönüp tekrar bakabilmek için kayıt altına alıyoruz. tshark'ın en temel özelliği, yakalanmış olan ağ trafiğinde hızlı analizler yapabilmemiz için konsoldan çok detaylı gruplandırma olanakları sunması. Network analizinde garip veya sıradışı trafiği yakalarken OSI ağ katmanlarına göre L2'deki Mac adresi seviyesinden başlayarak, L3'deki IPv4 ve IPv6 katmanlarına, oradan da TCP ve UDP protokollerinin yer aldığı L4 e doğru derinleşeceğiz. Bro ile L4'den itibaren yer alan derin paket analizi DPI (Deep Packet Inspection) yapmadan önce tshark ile L4 ve üstüne bu seviyede göz atmak oldukça faydalı olur.

tshark'ın analizi biraz zaman alabilir, bittiğinde oluşan dosyalarda kaçar satır olduğuna, yani aslında kaçar bağlantı olduğuna hızlıca bakmak için :


atmaca:/mnt/pcap/lyk # wc -l flow-*
6596 flow-eth
8502 flow-ipv4
6644 flow-ipv6
39053 flow-tcp
103586 flow-udp
164381 total


Şu haliyle baktığımızda bile sanki networke bağlı tek bir makina üzerinden bir switch değil de SPAN ya da Port Mirror üzerinden oldukça fazla bağlantının geçtiği bir noktayı dinlemişiz fikri oluşuyor. Normalde promisc mode a koyduğumuz bir network kartı, düzgün yapılandırılmış bir switch yapısında 6596 adet MAC2MAC iletişime rastlamamalı. Buna istisna olarak broadcast türü trafiklerden oluşan durumu belirtebiliriz. Bu şüpheden yola çıkarak flow-eth dosyasındaki tepe 25 satıra baktığımızda :


atmaca:/mnt/pcap/lyk # head -n 25 flow-eth
================================================== ==============================
Ethernet Conversations
Filter:<No Filter>
| <- | | -> | | Total | Relative | Duration |
| Frames Bytes | | Frames Bytes | | Frames Bytes | Start | |
f0:f7:55:c4:62:bf <-> d0:53:49:24:95:21 0 0 227885 514212431 227885 514212431 44.349743000 15008.1465
f0:f7:55:c4:62:bf <-> 48:5a:b6:bd:86:c7 0 0 182973 283531510 182973 283531510 54.741060000 6008.9237
f0:f7:55:c4:62:bf <-> d0:53:49:1e:25:bb 0 0 155631 273849298 155631 273849298 48.682514000 15006.0653
f0:f7:55:c4:62:bf <-> dc:85:de:d6:de:31 0 0 113227 256553820 113227 256553820 9768.584938000 5179.6656
f0:f7:55:c4:62:bf <-> 08:3e:8e:69:2e:91 0 0 106586 104318802 106586 104318802 44.462241000 15010.1971
f0:f7:55:c4:62:bf <-> dc:a9:71:34:a4:63 36727 4080899 39039 62068503 75766 66149402 4.103751000 14997.1682
f0:f7:55:c4:62:bf <-> 28:c2:dd:27:cb:21 0 0 60398 85074430 60398 85074430 6198.344637000 8848.6653
f0:f7:55:c4:62:bf <-> 6c:71:d9:57:8b:87 0 0 58376 68510983 58376 68510983 51.105996000 13081.8260
f0:f7:55:c4:62:bf <-> 44:6d:57:4e:93:dd 0 0 53307 66112516 53307 66112516 44.348219000 15007.6249
f0:f7:55:c4:62:bf <-> ac:81:12:41:b6:59 0 0 51849 117069327 51849 117069327 6241.804765000 8197.5325
f0:f7:55:c4:62:bf <-> 54:27:1e:4f:50:29 0 0 42555 83641724 42555 83641724 6189.340543000 368.0126
f0:f7:55:c4:62:bf <-> 50:b7:c3:ae:37:f4 0 0 32900 49417840 32900 49417840 10058.523086000 4993.1339
f0:f7:55:c4:62:bf <-> 20:6e:9c:90:2e:43 0 0 31437 42759162 31437 42759162 6280.691880000 8769.1715
f0:f7:55:c4:62:bf <-> 74:2f:68:c4:60:5e 0 0 28625 14840639 28625 14840639 6189.583044000 8864.7232
f0:f7:55:c4:62:bf <-> 1c:4b:d6:25:f5:44 0 0 25771 35837774 25771 35837774 3673.061514000 1089.4056
ff:ff:ff:ff:ff:ff <-> 08:3e:8e:69:2e:91 23013 3876374 0 0 23013 3876374 0.919358000 15053.4418
f0:f7:55:c4:62:bf <-> 24:0a:64:16:6a:0f 0 0 19276 34496485 19276 34496485 11733.994557000 833.5819
f0:f7:55:c4:62:bf <-> 18:67:b0:ab:32:b7 0 0 18049 19956335 18049 19956335 10613.901327000 4407.2822
f0:f7:55:c4:62:bf <-> 50:cc:f8:d0:ce:06 0 0 16021 24136566 16021 24136566 11881.510579000 3162.0310
f0:f7:55:c4:62:bf <-> 78:31:c1:bf:c3:12 0 0 15988 39409858 15988 39409858 6189.308619000 8852.7856


görebiliyoruz. "Total Frames" e göre sıralanmış olan bu tabloda "f0:f7:55:c4:62:bf" MAC adresinin Cisco'nun prefixi yani F0F755 ile başladığını görebiliyoruz. Listenin tepesinde yer alan 5 MAC adreslerinin aynı switch'e bağlı olan farklı makinalar oldukarını ve bunların sırasıyla 514M, 283M, 273M, 256M ve 104M trafik yaptığını söyleyebiliriz. 2.3G lik dosyamızın içinde yakalanmış olan trafiğin kabaca 1.4G'si bu 5 MAC adresi tarafından yapılmış. Normal şartlar altında, doğru config edilmiş bir network'de Cisco Switch'le herhangi bir makina arasındaki trafiği dinleyemememiz gerekiyordu. Şu tabloya bakarak yani switch MAC'i ile 5 farklı MAC arasında 1.4G'lik transfer toplamını görerek bizim dinleyemememiz gereken bir şekide data sniff ettiğimizi söyleyebiliriz.

Bir katman ilerleyip L2 seviyesinden L3 seviyesine geçerek, flow-ipv4 dosyasına benzer şekilde bakarsak :


atmaca:/mnt/pcap/lyk # head -n 25 flow-ipv4
================================================== ==============================
IPv4 Conversations
Filter:<No Filter>
| <- | | -> | | Total | Relative | Duration |
| Frames Bytes | | Frames Bytes | | Frames Bytes | Start | |
87.248.217.134 <-> 10.64.107.103 0 0 118753 237190780 118753 237190780 14342.809200000 711.9386
74.125.11.85 <-> 10.64.108.202 0 0 79972 215800990 79972 215800990 9345.900228000 2964.5403
185.65.204.174 <-> 10.64.94.83 0 0 69340 130247376 69340 130247376 1452.357998000 653.0781
94.103.32.100 <-> 10.64.94.83 0 0 37648 46934459 37648 46934459 339.881647000 1759.4434
216.58.211.46 <-> 10.64.107.72 0 0 22978 58499288 22978 58499288 13423.245071000 501.3866
255.255.255.255 <-> 10.64.108.218 22569 3840170 0 0 22569 3840170 0.919358000 15053.4418
195.175.116.74 <-> 10.64.107.163 0 0 22424 43797686 22424 43797686 6189.340543000 368.0126
195.175.112.147 <-> 10.64.102.57 0 0 22001 32437684 22001 32437684 3856.735832000 877.4850
31.13.84.15 <-> 10.64.108.202 0 0 20725 55753366 20725 55753366 6516.090940000 4620.4871
173.194.150.235 <-> 10.64.106.96 0 0 19542 51574502 19542 51574502 11125.104648000 251.4764
195.175.116.64 <-> 10.64.107.163 0 0 19036 38268762 19036 38268762 6189.349005000 368.0041
195.142.2.50 <-> 10.64.94.83 0 0 17967 32335238 17967 32335238 2382.874050000 208.7959
193.140.192.33 <-> 10.64.108.9 8363 573921 8937 21513609 17300 22087530 2598.166844000 7690.2329
173.194.150.231 <-> 10.64.106.96 0 0 15461 41433979 15461 41433979 10097.733365000 672.2845
224.0.0.251 <-> 10.64.105.112 14425 807800 0 0 14425 807800 0.406720000 15053.9545
185.94.84.233 <-> 10.64.108.218 0 0 14128 1434244 14128 1434244 9976.970122000 5077.6892
10.64.111.255 <-> 10.64.108.94 12411 3546654 0 0 12411 3546654 0.815757000 15053.6474
185.94.84.247 <-> 10.64.108.218 0 0 11734 1108969 11734 1108969 6190.156382000 3785.6731
193.140.13.91 <-> 10.64.75.192 0 0 11186 27737418 11186 27737418 516.024121000 2690.9741
255.255.255.255 <-> 0.0.0.0 10805 2622319 0 0 10805 2622319 18.421411000 15033.2794


en tepedeki 5 bağlantının farklı boyutlarda transferler gerçekleştirdiğini görebiliyoruz. Yine top 5'e bakarsak sırasıyla 237M, 215M, 130M, 46M ve 58M trafik gerçekleşmiş ve bu trafik lokal ağ'daki 10.64.X.X IP bloğuyla genel İnternet IP adresleri arasında olmuş. L2 seviyesinde baktığımızda 514M ile en çok transferi gerçekleştiren MAC adresini burada ilk bakışta göremiyoruz. Ancak 2 farklı yöntemle bu MAC adresinin ne tür trafik yaptığının analizini hızlıca yapabiliriz :


atmaca:/mnt/pcap/lyk # tshark -q -r lyk.pcap2 -z conv,ip,"eth.addr == d0:53:49:24:95:21" > d0:53:49:24:95:21.log


ile kimlerle trafik yaptığını görebileceğimiz gibi, istersek lyk.pcap2 dosyasından bu MAC adresinin yaptığı trafiği bir başka dosyaya yazarak analiz gerçekleştirebiliriz :


atmaca:/mnt/pcap/lyk # tcpdump -r lyk.pcap2 ether host d0:53:49:24:95:21 -w top1.pcap


En çok trafiği yapan MAC adresi şu IP'lerle konuşmuş :


atmaca:/mnt/pcap/lyk # head -n 25 d0\:53\:49\:24\:95\:21.log
================================================== ==============================
IPv4 Conversations
Filter:eth.addr == d0:53:49:24:95:21
| <- | | -> | | Total | Relative | Duration |
| Frames Bytes | | Frames Bytes | | Frames Bytes | Start | |
74.125.11.85 <-> 10.64.108.202 0 0 79972 215800990 79972 215800990 9345.900228000 2964.5403
31.13.84.15 <-> 10.64.108.202 0 0 20725 55753366 20725 55753366 6516.090940000 4620.4871
173.194.150.233 <-> 10.64.108.202 0 0 9665 26361132 9665 26361132 7827.238853000 1257.4134
173.194.151.25 <-> 10.64.108.202 0 0 8916 23785492 8916 23785492 6353.687314000 366.7208
173.194.150.251 <-> 10.64.108.202 0 0 8204 22352971 8204 22352971 6845.870447000 835.8458
173.194.150.231 <-> 10.64.108.202 0 0 7249 19551255 7249 19551255 8187.405721000 882.8160
173.194.150.236 <-> 10.64.108.202 0 0 5329 14299466 5329 14299466 8772.682908000 100.3534
173.194.150.247 <-> 10.64.108.202 0 0 4366 11220074 4366 11220074 8598.328983000 456.2978
31.13.64.1 <-> 10.64.108.202 0 0 3757 3194140 3757 3194140 6191.025133000 8665.5475
50.116.54.17 <-> 10.64.108.202 0 0 3165 6840324 3165 6840324 44.349743000 8963.2525
216.58.209.206 <-> 10.64.108.202 0 0 3148 3080932 3148 3080932 6354.756969000 8696.2641
74.125.11.75 <-> 10.64.108.202 0 0 3041 8286453 3041 8286453 8390.593924000 101.9251
10.64.105.50 <-> 10.64.81.250 2937 165364 42 2940 2979 168304 14925.224755000 63.4550
54.230.201.82 <-> 10.64.108.202 0 0 2887 6614225 2887 6614225 9885.683099000 386.3900
31.13.91.2 <-> 10.64.108.202 0 0 2624 2637332 2624 2637332 7342.864622000 6262.6217
149.3.176.174 <-> 10.64.108.202 0 0 2589 7013941 2589 7013941 7149.363198000 91.3989
45.55.186.201 <-> 10.64.108.202 3 360 2519 185691 2522 186051 7430.570704000 7209.5948
31.13.84.4 <-> 10.64.108.202 0 0 2471 5664591 2471 5664591 6510.287985000 6920.4738
216.58.208.110 <-> 10.64.108.202 0 0 2379 1799849 2379 1799849 6206.535803000 7247.9316
149.3.176.176 <-> 10.64.108.202 0 0 2199 5666996 2199 5666996 9211.615041000 168.4312


Bro ile analize giriş
Şu ana kadar anlattıklarımız, aslında yaz kampında beklemediğimiz bir durumdan kaynaklandı. Network switch seviyesindeki bir hatadan dolayı planlanmadığı halde katılımcıların bazılarında wifi networkünde istemediğimiz yerleri de dinlemek durumunda kaldık (Özellikle f0:f7:55:c4:62:bf <-> d0:53:49:24:95:21, f0:f7:55:c4:62:bf <-> 48:5a:b6:bd:86:c7, f0:f7:55:c4:62:bf <-> d0:53:49:1e:25:bb trafiklerine yoğunlaştık). Blog postu daha uzatmamak adına garipliğin adını switch config hatası olarak belirterek ve analizi bu seviyede bırakıp, Bro ile port scan ve diğer garipliklerin analizine geçiyoruz.

Bro'nun kurulumunu anlatmayı bir başka blog post a bırakalım. Bro'nun hazır kurulu olduğu bir makinada, yukarıda kullandığımız pcap dosyasını kullanarak base ve policy analizleri gerçekleştireceğiz. Bro, IDS olarak tanınmak istemeyen aslında Network Analizi için bir çerçeve ve araç kiti sunan bir uygulama. Ürettiği sonuçlarda alarm değil, sadece bilgi (notice) üretmek amacıyla var olduğunu söyleyebiliriz. Bro script tabanlı programlama arabirimi üzerinden yönetiliyor. Kurulumla birlikte Base ve Policy adında 2 temel grup script diziniyle birlikte geliyor. Benim laptobumda bunlar :


atmaca:~ # ls -gh /opt/bro/share/bro
total 0
drwxr-xr-x 1 bro 130 Aug 4 22:30 base
drwxr-xr-x 1 bro 136 Aug 4 22:30 broctl
drwxr-xr-x 1 bro 46 Aug 4 22:30 broxygen
drwxr-xr-x 1 bro 80 Aug 4 22:30 policy
drwxrwsr-x 1 bro 114 Aug 4 22:30 site


dizininde yer alıyorlar. base dizinindeki script'ler büyük oranda derin paket analizi (Layer 7 Extraction) amaçlı. policy dizinindeki script'ler ise gariplik tespiti için kullanılıyor.

Bro ile port scan yakalama
bro script'lerini teker teker ya da tümden çağırabilmek mümkün. Ders esnasında nmap ile katımcıların hem içinde bulundukları networkü hem de birbirlerini scan ettiklerini belirtmiştik. Bro nun port scan tespiti için kullandığı özel bir script var ve şu lokasyonda görülebilir : /opt/bro/share/bro/policy/misc/scan.bro
scan.bro script'ini ister canlı network interface'i üzerinde istersek de önceden kayıt edilmiş network trafik dosyasın üzerinde çalıştırabiliriz. scan.bro script'inin içine göz attığımızda Scan adında bir modul tanımlandığını ve bu modülde de Address_Scan ve Port_Scan adında 2 değişken üzerinde hareket ettiğini görebiliyoruz. Address_Scan bir IP adresinden birden çok IP üzerindeki belirgin bir porta bağlantı kurulduğu durumda (horizontal scan), Port_Scan değişkeninin de bir IP adresinden bir başka IP'deki bir çok porta bağlantı kurulduğunda tetiklendiğini belirtelim. bro'yu lyk.pcap2 dosyasına karşı scan.bro ile test ettirmek için :


atmaca:/mnt/pcap/lyk/bro # bro -C -r ../lyk.pcap2 -b policy/misc/scan


Bu işlem 1 dk kadar sürebilir. Bittiğinde komutu çalıştırdığımız dizinde notice.log ve weird.log dosyalarını göreceğiz. bro, her türlü analiz sonucunu diske log dosyası olarak yazmak üzere dizayn edilmiş. Dolayısıyla ürettiği log dosyalarını doğru okuma becerisi bro ile çalışmakta bir numaralı altın kural. Tüm bro log dosyaları ve scan.bro scriptinin çıktılarını göreceğimiz notice.log dosyasının ilk 8 satırında log dosyasının formatı tarif ediliyor :


atmaca:/mnt/pcap/lyk/bro # head -n8 notice.log
#separator \x09
#set_separator ,
#empty_field (empty)
#unset_field -
#path notice
#open 2015-08-16-21-20-58
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude
#types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double


7. satırda görebileceğimiz gibi ts, uid, id.orig_h,...., remote_location.longtitude değerlerinin logda yer aldığını görebiliyoruz. bro log dosyalarını daha kullanılabilir hale getirmek için bro ile birlikte gelen bro-cut uygulamasını kullanacağız.


atmaca:/mnt/pcap/lyk/bro # bro-cut -d ts src dst note msg < notice.log
2015-08-12T11:00:04+0300 fe80::ebd:51ff:fe4b:9d5a - Scan::Address_Scan fe80::ebd:51ff:fe4b:9d5a scanned at least 25 unique hosts on port 443/tcp in 4m6s
2015-08-12T11:49:58+0300 10.64.102.57 - Scan::Address_Scan 10.64.102.57 scanned at least 25 unique hosts on port 80/tcp in 4m42s
2015-08-12T11:53:04+0300 fe80::bab4:2eff:feb7:716d - Scan::Address_Scan fe80::bab4:2eff:feb7:716d scanned at least 25 unique hosts on port 443/tcp in 2m57s
2015-08-12T12:27:24+0300 10.64.109.221 - Scan::Address_Scan 10.64.109.221 scanned at least 25 unique hosts on port 80/tcp in 0m48s
2015-08-12T12:29:05+0300 10.64.113.39 - Scan::Address_Scan 10.64.113.39 scanned at least 25 unique hosts on port 443/tcp in 3m5s
2015-08-12T13:04:40+0300 10.64.108.202 - Scan::Address_Scan 10.64.108.202 scanned at least 25 unique hosts on port 443/tcp in 4m3s
2015-08-12T13:26:59+0300 10.64.108.218 - Scan::Address_Scan 10.64.108.218 scanned at least 25 unique hosts on port 80/tcp in 1m37s
2015-08-12T13:27:54+0300 10.64.107.103 - Scan::Address_Scan 10.64.107.103 scanned at least 25 unique hosts on port 443/tcp in 1m14s
2015-08-12T13:28:38+0300 10.64.108.211 - Scan::Address_Scan 10.64.108.211 scanned at least 25 unique hosts on port 443/tcp in 0m45s
2015-08-12T13:36:26+0300 10.64.82.169 - Scan::Address_Scan 10.64.82.169 scanned at least 25 unique hosts on port 443/tcp in 1m10s
2015-08-12T13:38:39+0300 10.64.108.109 - Scan::Address_Scan 10.64.108.109 scanned at least 25 unique hosts on port 443/tcp in 3m11s
2015-08-12T13:43:06+0300 10.64.72.44 - Scan::Address_Scan 10.64.72.44 scanned at least 25 unique hosts on port 80/tcp in 0m58s
2015-08-12T13:43:53+0300 10.64.108.85 - Scan::Address_Scan 10.64.108.85 scanned at least 25 unique hosts on port 443/tcp in 1m40s
2015-08-12T13:48:34+0300 10.64.102.231 - Scan::Address_Scan 10.64.102.231 scanned at least 25 unique hosts on port 443/tcp in 2m46s
2015-08-12T14:02:13+0300 10.64.107.203 - Scan::Address_Scan 10.64.107.203 scanned at least 25 unique hosts on port 443/tcp in 1m51s
2015-08-12T14:18:54+0300 10.64.107.72 - Scan::Address_Scan 10.64.107.72 scanned at least 25 unique hosts on port 80/tcp in 3m46s
2015-08-12T14:23:54+0300 10.64.108.202 - Scan::Address_Scan 10.64.108.202 scanned at least 25 unique hosts on port 80/tcp in 3m8s
2015-08-12T14:34:41+0300 10.64.107.103 - Scan::Address_Scan 10.64.107.103 scanned at least 25 unique hosts on port 443/tcp in 1m51s
2015-08-12T14:37:07+0300 10.64.108.218 - Scan::Address_Scan 10.64.108.218 scanned at least 25 unique hosts on port 80/tcp in 1m44s
2015-08-12T14:46:17+0300 10.64.106.96 - Scan::Address_Scan 10.64.106.96 scanned at least 25 unique hosts on port 80/tcp in 1m5s


Yukarıda görüldüğü gibi 2 si IPv6 olmak üzere toplam 17 adet IP'nin network'de port taraması gerçekleştirdiğini görebiliyoruz. Bu sayı, aynı zamanda Linux 2 sınıfının katılımcı sayısına eşit, yani tüm katılımcılar birbirlerine ve bulundukları networke karşı port taraması gerçekleştirebilmiş.

Bro ile derin paket analizi (dpi ve L7 extraction)

bro yu lyk.pcap2 dosyasına karşı varsayılan script lerle çalıştırdığımızda :


atmaca:/mnt/pcap/lyk/bro # bro -C -r ../lyk.pcap2


bulunduğu dizinde bir çok log dosyası oluşturacak :


atmaca:/mnt/pcap/lyk/bro # ls -goh
total 79M
drwx------ 1 26 Aug 16 21:48 .state
-rw-r--r-- 1 25M Aug 16 21:48 conn.log
-rw-r--r-- 1 108K Aug 16 21:48 dhcp.log
-rw-r--r-- 1 40M Aug 16 21:48 dns.log
-rw-r--r-- 1 46K Aug 16 21:48 dpd.log
-rw-r--r-- 1 3.8M Aug 16 21:48 files.log
-rw-r--r-- 1 1.9M Aug 16 21:48 http.log
-rw-r--r-- 1 4.6K Aug 16 21:21 notice.log
-rw-r--r-- 1 253 Aug 16 21:48 packet_filter.log
-rw-r--r-- 1 643 Aug 16 21:48 ssh.log
-rw-r--r-- 1 1.3M Aug 16 21:48 ssl.log
-rw-r--r-- 1 6.8K Aug 16 21:48 tunnel.log
-rw-r--r-- 1 3.5M Aug 16 21:48 weird.log
-rw-r--r-- 1 4.2M Aug 16 21:48 x509.log


Bu dosyaların her biri, bro içinde gelen protokol analiz ve decoder larının anlamlandırabildiği bilgi parçacıklarını barındırıyor. Networkdeki anomaly ve garipliklerin bir çoğu kendisini DNS protolünde gösterdiği için öncelikle dns.log dosyasını analiz edeceğiz. dns.log dosyasındaki önemli parametrelerden biri id.resp_p, yani DNS sorgusunun yönlendirildiği ve cevap vermesi beklenen port :


atmaca:/mnt/pcap/lyk/bro # bro-cut id.resp_p < dns.log | sort | uniq -c | sort -rn
101638 5355
81032 5353
61369 137
28875 53


Rastlanma sayılarına göre sıraladığımızda yukarıdaki liste karşımıza çıkıyor. Bu standart portların isimleri :
- 5355 : LLMNR (Link-Local Multicast Name Resolution)
- 5353 : Multicast DNS
- 137 : Netbios Name Service
- 53 : Domain Name Server
Dolayısıyla pcap dosyamızda en çok Microsoft'un yaygınca kullandığı lokal ağda DNS sorguları yapılmasını sağlayan protokol olduğunu görebiliyoruz. Benzer şekilde qtype_name değerine göre gruplandırıp baktığımızda da :


atmaca:/mnt/pcap/lyk/bro # bro-cut qtype_name < dns.log | sort | uniq -c | sort -nr
89231 -
89164 A
60993 NB
15021 PTR
10678 AAAA
7400 *
261 TXT
139 NBSTAT
16 SRV
8 SOA
2 NS
1 DS


NetBios (NB) protokolüyle gelen sorgu türlerinin oldukça fazla olduğunu görebiliyoruz. Buraya kadar herşey normal, net olarak Windoze ağırlıklı bir network dinlediğimizi söyleyebiliriz. Detaya inip query'lere geldiğimizde ise :


atmaca:/mnt/pcap/lyk/bro # bro-cut query < dns.log | sort | uniq -c | sort -nr | head -n 25
55707 -
45215 wpad
40039 isatap
25744 WPAD
22180 ISATAP
9860 _googlecast._tcp.local
5104 user-pc
3766 USER-PC
2946 _services._dns-sd._udp.local
2626 WORKGROUP
1466 _ipp._tcp.local
954 daisy.ubuntu.com
937 _ipps._tcp.local
764 baba 002._device-info._tcp.local
701 _airplay._tcp.local
649 safebrowsing-cache.google.com
645 pc
565 _raop._tcp.local
558 asus-bilgisayar.local
459 www.facebook.com
394 ADAIT
341 gizem-2.local
335 www.google.com
315 _migo._tcp.local
288 DIFFERENTIA.RU


en çok sorgunun wpad, isatap, WPAD ve ISATAP isimleri için olduğunu görebiliyoruz. WPAD (Web Proxy AutoDiscovery Protocol) ve ISATAP (Intra-Site Automatic Tunnel Addressing Protocol) ile yine Windoze makinalardan kaynaklandığını söyleyebiliriz. query listesinin biraz ortalarına doğru ilerlediğimizde bizi garip ve random olduğu kesin olan isimler karşılıyor :


9 ZIXINQUB
9 XPKMOYJTJLQE
9 TCPDUMP.ORG
9 SEREFCAN
9 OVRRZFB
9 MONSTER
9 JWMOSDTYBJWA
9 JICUYWYBWP
9 HURGENERAL91
9 EIJBZUNROQE
9 DLIEBWBVGQDP
9 BZYLLYCTS
9 BVUWSNXFLK
9 6.3.5.2.c.7.e.f.f.f.2.9.2.d.e.0.0.0.0.0.0.0.0.0.0. 0.0.0.0.8.e.f.ip6.arpa
9 4bac056f._sub._apple-mobdev2._tcp.local
9 4.4.5.f.5.2.e.f.f.f.6.d.b.4.e.1.0.0.0.0.0.0.0.0.0. 0.0.0.0.8.e.f.ip6.arpa
9 4.2.5.f.2.7.e.f.f.f.b.4.a.3.6.8.0.0.0.0.0.0.0.0.0. 0.0.0.0.8.e.f.ip6.arpa
9 2.5.6.1.5.b.e.f.f.f.8.0.0.4.e.6.0.0.0.0.0.0.0.0.0. 0.0.0.0.8.e.f.ip6.arpa
9 169.115.64.10.in-addr.arpa
9 1.8.d.e.0.2.e.f.f.f.3.c.7.b.2.5.0.0.0.0.0.0.0.0.0. 0.0.0.0.8.e.f.ip6.arpa
8 zucbumzdprjrcju
8 ztkrtgvgpemiik
8 zqujoexcphqkg
8 zkpeqfhezbef
8 zjwqyquficy
8 zffmdib
8 zfdwyin
8 zdxlltrmufms
8 zbenjnebizwxwau
8 yyczvvdps
8 ywjxnrqakxnqh
8 yvezvjvsawdxb
8 yofgibjpieep
8 ynvkvwnxfgva
8 ymp.local


Bu garip query'lerin insan eliyle oluşturulmamış sorgular olduğunu farketmek çok zor değil. Bir çok botnet C&C sunucularıyla haberleşmede DNS üzerinden hızlı değişen DNS isimleriyle haberleşir. Yukarıdaki sorguların internete değil, lokal networke doğru broadcast veya multicast ile gönderildiğini gözlemleyebiliyoruz :


atmaca:/mnt/pcap/lyk/bro # bro-cut query id.resp_p id.resp_h < dns.log | sort | uniq -c | sort -nr
9 ZIXINQUB 137 10.64.111.255
9 XPKMOYJTJLQE 137 10.64.111.255
9 TCPDUMP.ORG 137 10.64.111.255
9 SEREFCAN 137 10.64.111.255
9 OVRRZFB 137 10.64.111.255
9 MONSTER 137 10.64.111.255
9 JWMOSDTYBJWA 137 10.64.111.255
9 JICUYWYBWP 137 10.64.95.255
9 HURGENERAL91 137 10.64.111.255
9 EIJBZUNROQE 137 10.64.111.255
9 DLIEBWBVGQDP 137 10.64.111.255
9 BZYLLYCTS 137 10.64.111.255
9 BVUWSNXFLK 137 10.64.111.255
9 6fea36c1870d3d33._gamecenter._tcp.local 5353 ff02::fb
9 4bac056f._sub._apple-mobdev2._tcp.local 5353 224.0.0.251
9 4.4.5.f.5.2.e.f.f.f.6.d.b.4.e.1.0.0.0.0.0.0.0.0.0. 0.0.0.0.8.e.f.ip6.arpa 5353 ff02::fb
9 249.89.64.10.in-addr.arpa 5353 224.0.0.251
9 169.115.64.10.in-addr.arpa 5353 224.0.0.251
9 - 137 10.64.105.181
8 xyrkyslyjfz 5355 ff02::1:3
8 xyrkyslyjfz 5355 224.0.0.252
8 www.youtube-nocookie.com 53 10.11.0.8
8 www.martinfowler.com 53 10.11.0.7
8 www.google-analytics.com 53 8.8.4.4
8 www.bizographics.com 53 10.11.0.7
8 widget.intercom.io 53 10.11.0.8
8 w.sharethis.com 53 10.11.0.7
8 vnrbfmyc 5355 ff02::1:3
8 vnrbfmyc 5355 224.0.0.252
8 tex.stackexchange.com 53 10.11.0.7
8 swift.tango.me 53 10.11.0.8
8 stjtzhzrstr 5355 ff02::1:3
8 stjtzhzrstr 5355 224.0.0.252
8 serverfault.com 53 10.11.0.7
8 seher-pc 5355 224.0.0.252
8 securityoniontest-virtualbox.local 5353 ff02::fb
8 scifi.stackexchange.com 53 10.11.0.7
8 s3.amazonaws.com 53 10.11.0.8


BilgiO da ağırlıkla sunucu networkünde iz sürmeye alıştığımızdan dolayı, internete çıkmayan ama sadece lokal ağda kalan bir botnet aktivitesi olabilir mi düşüncesiyle bu DGA (Domain Generation Algorithm) ile oluşturulduğu isimlerin bir kaçının (örneğin xyrkyslyjfz) peşine düştüm. İlk yaptığım bu sorguları gönderen IP'leri tespit etmek oldu :


atmaca:/mnt/pcap/lyk/bro # bro-cut id.orig_h query < dns.log | grep -E "xyrkyslyjfz|yvezvjvsawdxb|ztkrtgvgpemiik" | sort | cut -f 1 | uniq
10.64.106.164
10.64.108.146
10.64.80.240
fe80::5129:a1ce:d695:d694
fe80::b0d4:fdbb:fd0d:affb
fe80::e09c:3206:d38c:5486


Sonra bu IP'lerle olan tüm trafiği bir başka PCAP dosyasına aldım :


atmaca:/mnt/pcap/lyk/bro # tcpdump -r ../lyk.pcap2 "host 10.64.106.164 or host 10.64.108.146 or host 10.64.80.240" -w shortlist.pcap
reading from file ../lyk.pcap2, link-type EN10MB (Ethernet)


Yeni oluşturduğum pcap dosyasını Wireshark'la açıp göz gezdirdiğimde şu paterni kolaylıkla gözlemledim :
- Her IP 3 adet random domain name oluşturuyor.
- Önce NetBios üzerinden broadcast adresine
- Sonra LLMNR üzerinden A sorgusuyla multicast adresine
- En son olarak tekrar LLMNR üzerinden AAAA sorgusuyla multicast adresine
isim sorguları gönderiyor. Bu paterne uyan bir malware/botnet olup olmadığını araştırmak için Google'a yönlendiğimde cevap hemen karşıma çıkıyor. Google'ın Chrome için geliştirdiği DNS prefetch özelliği bu tarz bir davranış sergiliyor. DNS prefetch ile önceden DNS cache'leme yaptığı gibi beraberinde DNS hijacking'in de farkına varabilmek üzere cevapsız dönecek olan rastgele query'ler oluşturuyor. Basit ama etkili, öte yandan da botnet davranışına bir o kadar benzeyen bir yöntemi kullanıyor Chrome. Konsol mu GUI mi?
Burada yapılan analiz çalışmasını web tabanlı bir uygulama olarak NtopNG ile de gerçekleştirebilmek mümkün. Bir sonraki pcap analizi yazımızda burada kullandığımız PCAP dosyalarını ve NtopNG kullanarak hızlı ağ analizine devam edeceğiz. Her zaman olduğu gibi, konsolda yapılan bu ve benzeri çalışmalar GUI'den daha fazla hakimiyet sağlar, GUI'ler (Wireshark ve NtopNG) görsel olarak canlı olsalar da büyük miktarlardaki dataları işleme konusunda yetersiz kalırlar. Özet :
Linux Yaz Kampında Bilgi Güvenliğine Giriş dersinde incelemek üzere topladığımız ağ loglarında detaylı bir çalışma yaptık. Sonuçta networkde göze batan 2 temel garipliği yorumladık, bu çalışma esnasında her türlü ağ analizi çalışmasında kullanılabilecek temel araçlara giriş yaptık.

Kayra OTANER - BilgiO (https://www.bilgio.com/author/kayra/)