Tuesday, December 27, 2016

Regular Expression Basics - 2

We are continuing the regular expression basics with this post
  
/(cbc|dnn)/g
You can "OR" the characters with the "|" metacharacter

Watchdnn&cbcforthenews

/h(ale|asan)/g

Don'tcomewithhaleorhasan99

/(Java|Lava)Script/g

LearnJavaScriptinsteadofLavaScript!

----

/^wow/g

The above regular expression matches the strings beginnign with wow.

wow!great! 100?wow!! woxxw!whatchataling?wow

 ----

/wow$/g

The above regular expression matches the strings endinig with wow.

wow!great! 100?wow unbelievable!wow!

----

/x(?=y)/g

The above regular expression matches "x" if it is followed by "y".

fixitorleavethegataxy isittoxic?orfoxy

----

/x(?!y)/g

The above regular expression matches "x" if it is not followed by "y".

fixitorleavethegataxy isittoxic?orfoxy laxairport

----

/^[0-9]{4}-[0-9]{3}-[0-9]{4}$/g

0555-444-2233 312-444-7766 0462-6667788 0462-222-0099

----

/^\w*@\w*\.\w*$/g

abc@def.com abidik99@gubidik.com 
 
----

/grea?t/g

0 or 1 "a"

great grept gret greet greaaat!

----

/bo+t/g

1 or more "o"

boot booth bot booots orbots say_booooooots

----

/le*d/g

 0 or more "e"

led leeeed gled gleed fled fleed fleeeeed hold told folder foleds

 

Thursday, December 22, 2016

Regular Expressions vs Perl

A funny cartoon about regular expressions and Perl.

Thursday, December 15, 2016

Regular Expression Basics - 1

In this post I wanna share some basic regular expression rules. But first I need to write down the metacharacters. Metacharacters are those characters which have a special meaning in regular expressions. i.e. "-" and "[" handled differently in regular expressions. Metacharcters are are as follows:
 
+

/1.5/g
Dot (.) matches anything, except for the line breaks.

1a5, 41e5y, 1x5o, 89xy1&5P55 are all the same

****

If you need to include dot (.) in your search than you have to put a backslash (\) before the dot (.)
/3\.9/g
According to the above expression it matches only the characters "3" and "9" in between they have a "."
 
93.96, a3.9t, 13.9s, x3.9t

----
 
If you want to search more characters which you don't want to type one-by-one than there is a solution which is called quantifiers.
For example if you want to search 10 "b"s than you have to type either /bbbbbbbbbb/g or /b{10}/g. If you're gonna search 10 "b"s than that's may be okay but if you're gonna search 100 "b"s it doesn't seem so straightforward.
If you want to search at least 6 "b"s than you have to put a comma (,) after the number which is between paranthesis. /b{6,}/g won't catch 5 "b"s it will only catch "b"s which are 6 or more.
If you want at least 7 "b"s but at most 10 "b"s then you have to type two numbers in between the paranthesis. i.e. /b{7,10}/g

----
 
/[gyb]/g
This regexp matches either "g", or "y" or "b". This regexp finds only "1" occurence of one of these letters.

----
 
/[gyb]+/g
If you put a "+" after the square bracket then it will find any occurences of "g" or "y" or "b".
 
ggyybb, gyyyybbb, bbb, yy, bgyyy, yyggaaa, lkbgyata, 12hytbyggg90g0b

----
 
/[a-z]+/g
If you want to catch all the letters of the English alphabet in the regexp than you can define a range. The regular expression above catches every letter of the English alphabet. But it doesn't catch any numbers or symbols regardless of their occurences.
 
abjuyr, amnxc5, 77yhbbd76dg76, xbn8dmmdn, %!98hnsb!!mmcasd98lk=

----
 
/[a-z0-9]+/g
The expression above detects all the letters of the English alphabet and all the letters regardless of their occurences.
11009hsndh%88uj, 56+67=123=xyz, $var=99

----
 
/[a-zA-Z0-9_]+/g equals to /\w+/g
There are some shortcuts of the whole English alphabet and whole numbers. i.e. the regular expressions /[a-z0-9_]+/g and /\w+/g are the same. Both find the letters (small or capital) and numbers including the underscore (_) regardless of their occurences.

----
 
/[0-9]+/g equals to /\d+/g
If you want to match only numbers then you have to use the one of the above regular expressions.

----

/^[m-z]+/g
You can negate the classes with the "^" character. With the above regular expression you will catch the characters other than [t-z]. namely the regular expressin will match the small letters a, b, c, d, e, f, g, h, i, j, k, l and all the capital letters from A to Z and also the numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 and also symbols like %, & etc.

whatta99yathink88? iaint77do21ANYTHING%% HappyNewYear-In-2017!!!

----

/^\w+/g = /\W+/g
The above regualar expression above matches anything that's not the letter or number or underscore (_)

Mr.&MrsBrown_werein1960!s

----

/^\d+/g = /\D+/g

The above regular expression above matches anything that is not a number.

14mfly1ngt0C4n4ry15l4nd 4w0rldw1th0utr3g3xp5??!!
 

Thursday, December 8, 2016

What Does "Malware" Mean?

A very short but valuable description of malware:
 
The word "mal" has its origin in Latin and means "bad" in English. "Ware", on the other hand, carries the meaning of "products". Hence, when we put these two together, we get the sense of having bad products or goods made with a bad intent.
Learning Network Forensics - Samir Datt

Tuesday, December 6, 2016

Star Wars over Telnet


 
Anybody wanna watch Star Wars over telnet? If yes try this: "telnet towel.blinkenlights.nl"
 
I mean, open a command prompt in your computer, type "telnet towel.blinkenlights.nl", hit ENTER and just watch. Well. Have fun! =))

Monday, October 3, 2016

SIEM SIEM Dedikleri...

SIEM (Security Information and Event Management) kavramını esprili ve anlaşılır bir dille anlatan güzel bir yazıyı paylaşmak istiyorum buradan.

Yazı gerçekten güzel kaleme alınmış. En sondaki şiir ise cabası. Köroğlu, sistem yöneticisi olsaydı herhalde o da böyle bir şeyler yazardı. =))

https://www.linkedin.com/pulse/1-siem-nedir-2-neden-al%C4%B1n%C4%B1r-episode-1-evren-pazoglu

Wednesday, September 7, 2016

Suricata "Content" Parametresi

Suricata saldırı tespit/engelleme sistemi -beklendiği üzere- şifrelenmemiş paketlerin "veri" (payload) kısmına da bakarak saldırı örüntülerini (pattern) tespit edebilmektedir.
 
Bu tespitleri yapabilmek için Suricata imzalarında bir "content" alanı bulunmaktadır. Bu yazımızda Suricata imzalarındaki "content" alanıyla ilgili bilgi vermeye çalışacağız.
 
Öncelikle içeriğinde "content" geçen rastgele bir örnek imza aşağıda verilmiştir:
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"ET USER_AGENTS Lowercase User-Agent header purporting to be MSIE"; flow:established,to_server; content:"user-agent|3a 20|Mozilla/4.0|20|(compatible|3b 20|MSIE|20|"; http_header; content:!"|0d 0a|VIA|3a 20|"; http_header; classtype:trojan-activity; sid:2012607; rev:4;)

Örnekten de görülebileceği gibi bir Suricata imzasının içerisinde birden fazla "content" alanı da olabilmektedir.
 
"content" parametresiyle, gelen paketin veri (payload) kısmında aranacak harf-rakam kombinasyonunun tırnak içerisine yazılması gerekiyor. Örneğin Suricata imzasında content:"SALDIRIYORUM ULEYYNNN!!" yazmış olduğunuz takdirde Suricata, gelen paketlerin veri kısımlarında "SALDIRIYORUM ULEYYNNN!!" içeriği olan paketleri tespit edecektir.
 
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"YABAN SALDIRISI!!!"; flow:established,to_server; content:"SALDIRIYORUM ULEYYNNN!!"; classtype:yaban-activity; sid:2222220; rev:3;)
 
"content" parametresinin içerisine harflerin, rakamların ya da özel karakterlerin hexadecimal karşılıkları da yazılabilmektedir.

Suricata imzasının içerisine yazacağımız; content: "|53 41 4c 44 49 52 49 59 4f 52 55 4d 20 55 4c 45 59 59 4e 4e 4e 21 21|" ile content:"SALDIRIYORUM ULEYYNNN!!" aynı anlama gelmektedir. Harflere karşılık gelen hexadecimal değerler aşağıda verilmiştir.
S = 53, A =41, L = 4c, D = 44, I = 49, R = 52,I = 49, Y = 59, O = 4f, R = 52, U = 55, M = 4d, = 20, U = 55, L = 4c, E = 45, Y = 59, Y = 59, N = 4e, N = 4e, N = 4e, ! = 21, ! = 21
Normal karakterler iki adet "<örnek>" (tırnak) arasına yazılırken, hexadecimal karakterler iki tane |<örnek>| (pipe) arasına yazılmaktadır.

Bazı karakterler imzanın okunmasında karışıklığa yol açtıklarından dolayı bu karakterleri Suricata imzasının içerisine iki tırnak arasına yazmak mümkün olmamaktadır. Bu karakterleri imzanın içerisine mutlaka hexadecimal olarak yazmak gerekmektedir. Bu karakterler ve hexadecimal karşılıkları aşağıda verilmiştir:
" = |22|
; = |3B|
: = |3A|
| = |7C|
Buna bir örnek vermek gerekirse; Suricata imzasının içerisine content:"http://" yazılamamaktadır. Bunun yerine content:"http|3A|//" yazılabilmektedir. 
"content" parametresinin içeriği büyük-küçük harf duyarlıdır. Yani content:"SALDIRIYORUM ULEYYNNN!!" ile content:"saldiriyorum uleyynnn!!" aynı anlama gelmemektedir. Büyük-küçük harf duyarlılığımı iptal etmek için imzanın içerisinde "nocase" parametresinin kullanılması gerekmektedir.
 
Örneğin; content:"SALDIRIYORUM ULEYYNNN!!"; nocase; ile content:"saldiriyorum uleyynnn!!"; nocase; aynı anlama gelmektedir.
Peki bir Suricata imzası içinde iki adet "content" parametresi olması durumunda Suricata nasıl davranmaktadır? Öncelikle bu, anlaması biraz zor bir algoritmaya dayanmaktadır. Bu algoritmanın ayrıntılarına girmeyeceğiz. Genel olarak; "content" parametresi içerisindeki "daha uzun" (longer) ve "en çok değişen" (varied) harf/rakam kombinasyonları tercih edilmektedir.
 
Örneğin: Suricata imzası içerisinde content:"SALDIRIYORUM ULEYYNNN!!" ve content:"YAKALA oni!" parametrelerinin bulunduğunu kabul edelim. Birinci "content"in içerisinde 23 karakter bulunmakta, ikinci "content"in içerisinde de 11 karakter bulunmaktadır. Bu durumda Suricata content:"SALDIRIYORUM ULEYYNNN!!" parametresine öncelik verecektir.
 
"En çok değişen" kavramına da bir örnek vermeye çalışalım: content:"SALDIRIYORUM ULEYYNNN!!" ile content:"S|41|LD|49|R|49|YORUM ULEYY|4E||4E||4E|!!" arasında bir karar verilmek istenmesi durumunda Suricata content:"S|41|LD|49|R|49|YORUM ULEYY|4E||4E||4E|!!" parametresini tercih edecektir. Çünkü ikinci "content"in bizim tabirimizle "değişen parçaları" daha fazladır. (|41|, |49| vb...)

Suricata imzalarında "daha az değişen" veya "daha kısa" olan değişkenlere öncelik vermek istediğimiz takdirde de "fast_pattern" adlı parametreyi kullanmamız gerekmektedir. Örneğin, Suricata'ya daha uzun ve değişeni daha çok olan content:"SALD|49|R|49|YORUM ULEYY|4E||4E||4E|!!" yerine daha kısa ve değişeni olmayan content:"az bi dakka!" parametresini tercih ettirmek istiyorsak bunların imzanın içerisine aşadaki gibi yazılması gerekmektedir:
content:"SALD|49|R|49|YORUM ULEYY|4E||4E||4E|!!"; content:"az bi dakka!"; fast_pattern;
 
(İki adet "en çok değişen" ve iki adet "daha uzun" parametrelerine sahip olan "content" için bkz. https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Suricata_Fast_Pattern_Determination_Explained)
 
Suricata imzasındaki "content" parametresi http trafiği için de özelleştirilmiştir. "content" parametresinin http trafiğinde nasıl kullanıldığını da başka bir yazıya bırakalım.

Friday, August 12, 2016

"Traceroute" Nasıl Çalışır?

İnternette "traceroute" programının ne işe yaradığına dair -doğru, yanlış- birçok bilgi olmasına rağmen bu programın çalışma prensibine dair pek fazla doyurucu doküman bulunmamakta. (İngilizce olarak bazı bilgilere ulaşmak mümkün olsa da bu konuyla ilgili Türkçe bilgi bulmak oldukça zor.) Bundan dolayı bu yazıda "traceroute" programının çalışma prensibini anlatmayı düşünüyorum.
 
Bundan önce TTL (time to live) kavramından kısaca bahsetmekte fayda var. TTL, IP başlığında (IP header) yer alan bir baytlık bir alandır. TTL değeri, IP paketinin oluşturulduğu işletim sistemi tarafından belirlenir ve işletim sisteminden işletim sistemine farklılık gösterir. IP paketi hedefine doğru giderken, her bir "hop"ta IP başlığında yer alan bu TTL değeri "bir" düşürülerek bir sonraki "hop"a gönderilir. TTL değeri "1" olan bir IP paketini alan bir yönlendirici bu paketi düşürür. Böylece IP paketlerinin ağ üzerinde sonsuz bir şekilde dolaşmasının önüne de geçilmiş olunur. Yani IP başlığında yer alan TTL alanının temel amacı, ağlarda ortaya çıkması muhtemel IP yönlendirme döngülerinin (IP routing loop) zararlarını en aza indirmektir.
 
Bu bilgilerden sonra "traceroute" programının nasıl çalıştığına gelelim.

Yazıya başlamadan önce bir başka noktayı daha hatırlatmakta fayda var: Yazımızda IP paketlerinin geçtiği her "hop"u yönlendirici (router) olarak adlandırdık. Fakat bu "hop"ların yönlendirici olmasına gerek yoktur. Bu "hop"ların yönlendirme yapabilen herhangi bir cihaz olması yeterlidir. Normal bir bilgisayar, bir sunucu ya da bir üçüncü katman anahtarı da yönlendirme yapabilmektedir.
Örneğimizde bilgisayarımızın 216.58.212.36 adresine "traceroute" yapmaya çalıştığını farzediyoruz. Bilgisayarımız bu adrese gitmeye çalışırken üç adet yönlendiriciden geçtiğini düşünüyoruz. Birinci "hop" 61.61.61.61, ikinci "hop" 72.14.218.250 ve üçüncü "hop" da 176.22.1.20 olsun. Bundan sonra da hedef IP adresimiz olan 216.58.212.36 ulaşıyoruz.. Yani:
 
192.168.61.1 -> 61.61.61.61 -> 72.14.218.250 -> 176.22.1.20 -> 216.58.212.36
 
Bilgisayarımız ilk olarak kaynak IP adresi kendi IP adresi olan üç adet paket oluşturur. Bu paketlerin hedef IP adresinde hedefimiz olan 216.58.212.36 IP adresi vardır. Oluşturulan bu paketlerinin IP başlıklarının içindeki TTL değerleri de "1" yapılmıştır. ("traceroute" da hedefe her defasında üç adet paket gönderilir.)
 
Bu paketler ilk olarak 61.61.61.61 IP adresine sahip olan yönlendiriciye ulaşır. 61.616.61.61 IP adresine sahip olan yönlendirici TTL değeri "1" olan bir IP paketi aldığı zaman bu IP paketini bir sonraki "hop"a yönlendirmez ve bu IP paketini düşürür. IP paketini düşürdükten sonra da paketin gelmiş olduğu IP adresine (yani bizim bilgisayarımıza) bir ICMP mesajı gönderir. Bu ICMP mesajının adı "TTL time exceeded" mesajıdır. Bu mesaj, ICMP başlığındaki Type:11 ve Code:0 değerlerine denk gelmektedir.

Bilgisayarımız bu durumda bir sonraki "hop"undan bir adet "TTL time exceeded" mesajı almıştır. Bu alınan mesajdan sonra bilgisayarımız hedef IP adresinde 216.58.212.36 olan üç adet IP paketi daha oluşturur. Bu sefer bu IP paketlerinin TTL değeri "2" yapılmıştır. Bu paketler ilk olarak 61.61.61.61 IP adresine giderler. 61.61.61.61 IP adresine sahip olan bilgisayar "2" olan TTL değerini "1" yaparak paketi bir sonraki "hop" olan 72.14.218.250 IP numaralı yönlendiriciye gönderir.

72.14.218.250 IP numaralı yönlendiriciye gelen IP paketinin TTL değeri "bir" azaltılarak "0" yapılır. 72.14.28.250 IP numaralı yönlendirici TTL değeri "0" olan bu IP paketlerini bir sonraki yönlendiriciye göndermez ve bu paketleri düşürür. Bu IP paketlerinin gelmiş olduğu kaynak IP adresine de -yani bizim bilgisayarımıza- "ICMP TTL time exceeded" mesajını gönderir.

Bilgisayarımız bu durumda iki tane "TTL time exceeded" mesajı almıştır.
 
Bu alınan ikinci "ICMP TTL time exceeded" mesajından sonra bilgisayarımız hedef IP adresinde 216.58.212.36 olan üç adet daha IP paketi oluşturur. Bu IP paketlerinin başlığındaki TTL değeri bu sefer "3" yapılmıştır. Bu IP paketleri ilk olarak 61.61.61.61 IP numaralı yönlendiriciye gider. Burada TTL değerleri "bir" düşürülerek "2" yapılır. Bu paketlerin bir sonraki durağı 72.14.218.250 IP numaralı yönlendiricidir. Bu yönlendirici almış olduğu bu IP paketlerinin TTL değerlerini "bir" düşürerek "1" yapar ve IP numarası 176.22.1.20 olan bir sonraki yönlendiriciye gönderir. Bu yönlendiricide IP paketlerinin TTL değeri "bir" azaltılarak "0" yapılır. 176.22.1.20 IP numaralı yölnendirici TTL değeri "0" yapılmış olan bu IP paketlerinin düşürür ve bu paketlerin gelmiş olduğu kaynak IP adresine -yani bizim bilgisayarımıza- "ICMP TTL time exceeded" mesajını yollar.
Bilgisayarımız bu durumda üç adet "ICMP TTL time exceeded" mesajı almıştır. Bundan sonra bilgisayarımız hedef IP adresinde yine 216.58.212.36 olan üç adet IP paketi daha oluşturur. Bu IP paketlerinin TTL değerleri bu sefer "4" yapılır. IP paketleri 61.61.61.61 IP numaralı yönlendiriciye geldikleri zaman TTL değerleri "3", 72.14.218.250 IP numaralı yönlendiriciye geldikleri zaman TTL değerleri "2", 176.22.1.20 IP numaralı yönlendiriciye geldikleri zaman da TTL değerleri "1" yapılır. 176.22.1.20 IP numaralı yönlendiriciden sonra IP paketleri 216.58.212.26 IP numaralı hedef bilgisayarımıza gelir. Hedef bilgisayarımız bu IP paketlerine "ICMP Echo Reply" mesajıyla cevap verir. Çünkü gelen IP paketlerinin "Hedef IP" kısmında kendi IP adresi yer almaktadır. ICMP Echo Reply mesajı, ICMP başlığında Type:0 Code:0 değerlerini almaktadır.

"ICMP Echo Reply" mesajını alan bilgisayarımız göndermiş olduğu IP paketlerinin hangi yönlendiricilere uğramış olduğunu görmüş olur. Son olarak "ICMP Echo Reply" mesajını almış olduğu için de aynı hedefe başka IP paketi göndermez. Böylece "traceroute" işlemi de sonlandırılmış olur.

 

Friday, August 5, 2016

Suricata Rule Thresholding


Three types of threshold values can be defined in Suricata rules: limit, threshold and both. I want to make some further explanations about them because this concept may be a bit confusing.

The notation of rule thresholding in Suricata is shown below:

threshold: type <threshold|limit|both> track , count <M>, seconds <T>

type threshold
Type threshold alerts every M times we see this event during the time interval.

threshold: type threshold track by_src, count 4, seconds 360;

In the above example the rule generates "1" alarm everytime the event is met "4" times in "360" seconds.

The figure below depicts "type threshold":

type limit
Type limit alerts on the 1st M events during the time interval, then ignores events for the rest of the time interval. 

threshold:type limit, track by_src, count 4 , seconds 360;

In the above example the rule generates "4" alarms if the event is met first "4" times in "360" seconds. After the detections it doesn't generate any alarms in the rest of the 360 seconds.

The figure below depicts "type limit":
 
type both
Type both alerts once per time interval after seeing M occurrences of the event, then ignores any additional events during the time interval.

threshold:type both, track by_src, count 4 , seconds 360;

In the above example the rule generates "1" alarm if the event is met "4" times in "360" seconds. After the detection it doesn't generate an alarm in the rest of the 360 seconds.

The figure below depicts "type both":







Thursday, July 21, 2016

Türkilizce #4


İşi az çok bilen bir teknik personelden her an duyabileceğiniz bir ifadeye aşağıda yer vermek istedim. Hani duyarsanız şok olmayın. Şimdiden haberiniz olsun. Bu cümleyi kuranı dövmeye karar verirseniz beni de çağırın. =))
 
"Lokıl netvörkteki viktim hostlarınızın kompromayzd olduğu durumlarda aypiesinizdeki signiçırları ve fayrvolunuzdaki ruulları çek etmeniz tavsiye edilir."
 
İngilizce kelimelerin orijinallerini kullanırsak da aşağıdaki gibi bir garabet çıkıyor karşımıza:
 
"Local network"teki "victim host"larınızın "compromised" olduğu durumlarda IPS'inizdeki "signature"ları ve "firewall"unuzdaki "rule"ları "check" etmeniz tavsiye edilir.
 
Ülke olarak dilimizin içine ediyoruz ve bundan da hiçbir şekilde rahatsız değiliz. Bunu bir espri kaynağı olarak görüyoruz. Efendim? Birisi "Bizden adam olmaz." mı dedi? Ne? "Bu Orta Doğu halkından bir ..... olmaz." mı dedi yoksa? Ama niye böyle söylüyorsunuz ya? Ayıp deel mi leyğn?
 
"Alooov!!? Türk Dil Gurumuyğan mı gorüşüyom? He, hee. Sennen gonuşacaadım. Uyuyonuz mu leyğn hala? Türkçe biliyonğuz deel mi? Bi şe deyceem de. Beter olun la teresler! Ne işe yarassınğıslassiz? Sulu yoğurduğn içiğnde yüzeğn yeşil şeyler!"

IP Blacklists

A quite honest approach about IP blacklisting:

"The notion of blacklisting communication sources has been a well-established defensive measure since the origins of the Internet community. In particular, the practice of compiling and sharing lists of the worst offenders of unwanted traffic is a blacklisting strategy that has remained virtually unquestioned over many years."

Source: J. Zhang, P. Porras, and J. Ullrich, “Highly predictive blacklisting,” in Proc. of USENIX Security ’08 (Best Paper award), San Jose, CA, USA, Jul. 2008, pp. 107–122.

Wednesday, June 8, 2016

A Little RFC History

An old -but still good- article about RFCs by Stephen D. Crocker who is the inventor of RFC concept. He is also the author of the very first RFC which is called RFC1. (https://tools.ietf.org/html/rfc1)
 

Wednesday, April 27, 2016

UDP Flow Control?

An interesting approach for 4-bytes long "UDP Checksum" field of the UDP header by David P. Reed. I think that the approach makes sense. But I'm not sure if the IT world is ready for that. =)

I've noticed following especially:
"...4 bytes wasted is not a battle I wanted to fight, and you didn’t have to actually compute or check the UDP checksum."

IP Address Space of MIT


A sarcastic old article about the "tiny" real IP address space owned by M.I.T. from VooDoo which is the magazine published by M.I.T.

Their real IP space is real tiny(!). They own 1 "A class", 4 "B class" and 26 "C class" real IP addresses which makes totally 17,046,016 IP addresses. (17 million real IP addresses! WOW! Who said that IPv4 addresses are exhausted?) What can I say? Just read the article and try to enjoy it.

 
http://web.mit.edu/voodoo/www/archive/pdfs/1995-Fall.pdf

Tuesday, March 8, 2016

Pasif Tarama (Idle Scan)


Bu yazımızda "idle scan" diye bilinen bir tarama çeşidinden bahsetmeyi düşünüyorum. Türkçe'ye çevirmekte çok zorlandım "idle scan" tamlamasını. Çok güzel bir tercüme olmadığının farkındayım fakat "pasif tarama" şeklinde çevirdim. Fakat yazı boyunca "idle scan" olarak yazacağım.
 
"Idle scan"i anlamadan önce bazı kavramların bilinmesinde fayda var:
 

IP ID

Ağda iletilen paketlerin bir IP ID numarası vardır. IP ID numarasının ne olduğuna bu yazıda değinmeyeceğiz. Bu yazı kapsamında bu IP ID numarasının, her bir paket için işletim sistemi tarafından her paket için "1" artırıldığını bilmemiz yeterli olacaktır. Bazı işletim sistemlerinin IP ID numarasını "1" değil de daha fazla artırabildiğinin de altını çizelim. (bkz. https://tools.ietf.org/html/rfc6864) IP ID numarasının bu özelliği kullanarak, bir saldırgan hedefinde yer alan bilgisayara gelip giden paketlerin IP ID değerine bakarak bu hedef bilgisayara kaç adet paket geldiğini tespit edebilmektedir.
 

TCP Bayrakları

TCP başlığında yer alan bayrakların durumuna göre hedef bilgisayarların verdiği cevaplar da değişmektedir. "Idle scan"in anlaşılabilmesi için aşağıdaki durumların bilinmesi gereklidir:
 
1) Bir bilgisayar SYN ve ACK (SYN/ACK) bayrakları "1" yapılmış bir TCP segmenti aldığı zaman buna RST bayrağını "1" yaparak cevap verir.
2) Bir bilgisayar açık olan portuna SYN bayrağı "1" yapılmış bir TCP segmenti aldığı zaman buna SYN ve ACK (SYN/ACK) bayraklarını "1" yaparak cevap verir.
3) Bir bilgisayar kapalı olan portuna SYN bayrağı "1" yapılmış bir TCP segmenti aldığı zaman buna RST bayrağını "1" yaparak cevap verir.
 4) Bir bilgisayarın filtrelenmiş olan portuna SYN bayrağı "1" yapılmış bir TCP segmenti gönderilirse hedefteki bilgisayar bu TCP segmentini almayacağı için buna cevap veremeyecektir. Çünkü hedefteki bilgisayarın önünde bir güvenlik duvarı ya da bu bağlantıyı engelleyen bir cihaz bulunmaktadır ve gönderdiğimiz bu segment hedefteki bilgisayara ulaşmamaktadır.
 
Özetlemek gerekirse. Hedef bilgisayara bir SYN segmenti gönderilirse:
1) Hedef bilgisayardaki port açıksa hedef bilgisayar SYN/ACK döner
2) Hedef bilgisayardaki port kapalıysa hedef bilgisayar RST döner
3) Hedef bilgisayardaki port filtrelenmişse hedef bilgisayar cevap dönmez.

"Idle scan"i üç farklı senaryo için düşünmek durumundayız. Hedefteki bilgisayarın tarayacağımız portu; "açık" iken, "kapalı" iken ve "filtrelenmiş" iken.

"Idle scan"i gerçekleştirmek için genellikle "zombi" diye isimlendirilen bir köle bilgisayara ihtiyacımız olacaktır. Bu bilgisayarın üzerinde çok fazla trafik olmaması "Idle scan" için önemlidir. (Yazının sonunda ve satır aralarında bunun sebebine değinilecektir.) Burada bilgisayar yerine ağa bağlı herhangi bir cihaz da olabilir. Bu yazıda, yazım kolaylığı açısında "bilgisayar" olarak niteleyeceğiz.

"Idle Scan" (Hedef Port Açık)

Bu bilgiler ışığında şimdi hedef portun açık olması durumunda "idle scan"in nasıl gerçekleştirildiğini anlatmaya çalışalım:

1) "Idle scan"de ilk olarak ağ trafik yoğunluğu düşük olan bir bilgisayar (köle) tespit edilir. Bu bilgisayara SYN/ACK segmenti gönderilir.
2) SYN/ACK segmentini alan köle bilgisayar bu segmente RST segmentiyle cevap verir. Bu arada IP ID numarasını da "1" artırır.
Saldırgan bu ikinci adımdan sonra köle bilgisayarın IP ID değerini (6162) de öğrenmiş olur.
 
3) Köle bilgisayarın IP ID değerini öğrenmiş olan saldırgan bu sefer hedef bilgisayara bir SYN segmenti gönderir. Göndermiş olduğu bu segmentin kaynak IP adresi kısmında köle bilgisayarın IP adresi yazılıdır. Yani saldırgan, köle bilgisayarın IP adresini taklit etmiştir (spoofed IP).
4) SYN segmentini alan hedef bilgisayarın ilgili portu açıksa bu segmente SYN/ACK segmenti ile cevap verecektir. Fakat cevabı saldırganın bilgisayarına değil de 192.168.34.34 IP adresine sahip olan köle bilgisayara gönderecektir. Çünkü kendisine gelen segmentin IP adresi köle bilgisayarın IP adresiydi.
5) Böylece köle bilgisayar herhangi bir TCP bağlantısı kurmamış olduğu bir bilgisayardan bir SYN/ACK segmenti almıştır. Köle bilgisayar bu segmente RST segmentiyle cevap verecektir ve IP ID numarasını da bir artırarak 6163 yapacaktır. 
6) Bundan sonra saldırgan bilgisayar, köle bilgisayara tekrar bir SYN/ACK segmenti gönderir.

7) Köle bilgisayar bu segmente RST segmentiyle cevap verecek ve IP ID değerini de yine "1" artırarak 6164 yapacaktır. Saldırgan bilgisayarın köle bilgisayardan almış olduğı ilk IP ID değeri 6162 idi. Bu sefer almış olduğu değer 6164 olacaktır. IP ID değeri "2" artmış olduğu için saldırgan bilgisayar, hedef bilgisayarın ilgili portunun "AÇIK" olduğu sonucuna varacaktır.
Dikkat edilecek olursa hedef bilgisayarın portu köle bilgisayar IP ID değeri kullanılarak tespit edilmiştir. Bu tarama türünde hedef bilgisayar üzerinde saldırgan bilgisayarına ait herhangi bir kayıt düşme olasılığı da yoktur. Çünkü tüm bağlantı işlemlerini köle bilgisayar yapmıştır. Burada altı çizilmesi gereken husus şudur: Bu işlemler sırasında köle bilgisayar, üçüncü başka bir bilgisayarla haberleşme yaparsa IP ID değeri değişeceği için tarama sonucumuzda hatalar olabilecektir. Bundan dolayı köle bilgisayarımızı ağ trafiği az olan bir bilgisayar olarak seçmemiz bu tarama türü için önemlidir. Bu tarama türüne bundan dolayı "idle scan" denilmiştir. Köle bilgisayarımızın "idle" yani boş olması önemlidir.
 

"Idle Scan" (Hedef Port Kapalı)

Şimdi de hedef bilgisayarındaki portun kapalı olması durumunu inceleyelim:
 
Bu durumda ilk üç adım aynı olacaktır.
 
1) Saldırgan bilgisayar, köle bilgisayara SYN/ACK segmenti gönderir.
2) SYN/ACK segmentini alan köle bilgisayar bu segmente RST segmentiyle cevap verir. Bu arada IP ID numarasını da "1" artırır.
3) Köle bilgisayarın IP ID değerini öğrenmiş olan saldırgan bu sefer hedef bilgisayara bir SYN segmenti gönderir. Göndermiş olduğu bu segmentin kaynak IP adresi kısmında köle bilgisayarın IP adresi yazılıdır. Yani saldırgan, köle bilgisayarın IP adresini taklit etmiştir (spoofed IP).
4) Hedef bilgisayar kapalı olan portuna bir SYN segmenti almış olduğu için bu segmente RST segmenti ile cevap verecektir. Cevabı da 192.168.34.34 IP adresine sahip olan köle bilgisayara göndrecektir. Köle bilgisayar herhangi bir bağlantı başlatmamış olduğu bir IP adresinden RST segmenti alınca da bu segmenti dikkate almayacaktır. Dolayısıyla IP ID değeri de değişmemiş olacaktır.
Bu adımdan sonraki adımlar da oldukça benzerdir.
 
5) Saldırgan bilgisayar, köle bilgisayara tekrar bir SYN/ACK segmenti gönderir.
6) Köle bilgisayar bu segmente RST segmentiyle cevap verecek ve IP ID değerini de yine "1" artırarak 6163 yapacaktır. Saldırgan bilgisayarın köle bilgisayardan almış olduğı ilk IP ID değeri 6162 idi. Bu sefer almış olduğu değer 6163 olacaktır. IP ID değeri "1" artmış olduğu için saldırgan bilgisayar, hedef bilgisayarın ilgili portunun "KAPALI" ya da "FİLTRELENMİŞ" olduğu sonucuna varacaktır.

"Idle Scan" (Hedef Port Filtrelenmiş)

Son olarak da hedef portun filtrelenmiş olduğu durumu inceleyelim. Yani saldırgan bilgisayarıyla hedef bilgisayarı arasında bir güvenlik duvarı olduğunu düşünelim. Bu durumda elde edeceğimiz sonuç hedef portun kapalı olduğu durumdakiyle aynıdır. Yani "idle scan" ile hedef portun "KAPALI" ya da "FİLTRELENMİŞ" olduğunun ayrımına varabilmek mümkün olmamaktadır.
 
İlk üç adım yine aynıdır:
 
1) Saldırgan bilgisayar, köle bilgisayara SYN/ACK segmenti gönderir.
2) SYN/ACK segmentini alan köle bilgisayar bu segmente RST segmentiyle cevap verir. Bu arada IP ID numarasını da "1" artırır.
3) Köle bilgisayarın IP ID değerini öğrenmiş olan saldırgan bu sefer hedef bilgisayara bir SYN segmenti gönderir. Göndermiş olduğu bu segmentin kaynak IP adresi kısmında köle bilgisayarın IP adresi yazılıdır. Yani saldırgan, köle bilgisayarın IP adresini taklit etmiştir. Fakat hedef bilgisayara gönderilen bu trafik güvenlik duvarı tarafından engellenmiştir. Saldırgan bilgisayardan gönderilen trafik hedef bilgisayara ulaşmamıştır.
4) Diğer durumlarda olduğu gibi saldırgan bilgisayar, köle bilgisayara tekrar bir SYN/ACK segmenti gönderir.
5) Köle bilgisayar bu segmente RST segmentiyle cevap verecek ve IP ID değerini de yine "1" artırarak 6163 yapacaktır. Saldırgan bilgisayarın köle bilgisayardan almış olduğı ilk IP ID değeri 6162 idi. Bu sefer almış olduğu değer 6163 olacaktır. IP ID değeri "1" artmış olduğu için saldırgan bilgisayar, hedef bilgisayarın ilgili portunun "KAPALI" ya da "FİLTRELENMİŞ" olduğu sonucuna varacaktır.