Siber Güvenlik alanında kendimi nasıl geliştirebilirim ? Nereden başlamalıyım ?

Selamlar,

Bugün kişisel mail kutumda birikmiş 157 e-mail’i tek tek okurken karar verdiğim, kuvvetle muhtemel bu blog adresi üzerinde uzunca bir süre son yazı olarak kalacak olan, tüm öğrencilerin ortak sorusuna dair kendi cevabımı hazırladığım yazıya hoş geldiniz. Bu yazıyı yazma sebebim, ayrı ayrı e-postalarda yazmaktan yorulduğum bir hususa tek kalemde cevabı vermek.

Baştan belirtmek istediğim bir kaç husus var. Şöyle ki;

  • Bu yazıda tüm ifadeler bana göre doğru olan düşünceler üzerinedir. Bu doğrular bir başkasına göre yanlış olabilir. Pek tabi münakaşa edilebilir. Bunun için en altta yorum alanı var. Düşüncelerinizi oraya alabiliriz.
  • Bu konuda gelen e-postaların hemen hemen hepsi bilgisayar mühendisliği ve/veya bilgi teknolojileri kapsamına alınabilecek bölümlerde okuyan öğrencilerden gelmekte. Bu noktaya değineceğim ana bir bölüm olacaktır. Bu demek değildir ki, sadece bilgisayar mühendisleri siber güvenlik uzmanı olmalıdır. Haşa. Sadece bilgisayar mühendisliği okuyan arkadaşlara fazladan söyleyeceğim sözlerim var.

Siber Güvenlik Alanında “Uzman” Olmak ?

Benim için uzman, tecrübeli, kıdemli gibi kelimeler bir meslek alanında kaç yıl çalışıldığı ile ilgili değildir. Bu tür terimler ne zaman söz konusu olsa, aklıma bir ekip arkadaşımın iş çıkışı kurduğu şu cümle gelir aklıma.

İlanlarda 5 yıllık tecrübeli uzman dedikleri şeyi şimdi anladım sanırım. Mevzu neyi nasıl yapabileceğini söylemek değil, gerçekten oturup kısıtlı zamanı mundar etmeden yapabilmek ile ilgiliymiş.

Evet, teorik olarak bir konu hakkında fikir yürütmek veya “şöyle şöyle yapılır” demek ile onu gerçekten yapmak arasında çok ama çok ciddi bir fark var. Tecrübe kelimesinin işe dahil olduğu noktada tam olarak burası. Uzman olmak; güvenlik testlerinde kullandığımız araç setlerinin teknik özelliklerini, güçlü ve güçsüz yanlarını teknik detayına kadar bilmekten tutun da mevzu bahsi konunun teknolojik alt yapısını bilmeye kadar uzanmaktadır.

Yani siber güvenlik uzmanı olmak temelde; bol bol pratik tecrübe edinmek ve hemen hemen her şeyi öğrenmeye çalışmaktan geçmektedir. Bu iki temel konuya yazının kalan bölümlerinde sıkça değiniyor olacağım.

Sizlere önerebileceğim hususları madde madde yazmaya gayret gösterdim. Hemde önem sırasına göre.

1 – İngilizce

Konu çok net.

2 – Linux

Linux’ü öğrenmek elzem ve bence tek yöntemi Linux haricinde kalan her şeyi ister sonsuza kadar ister bir süreliğine hayatınızdan çıkartmak. Kastettiğim şey, bu yazı yazılırkenki adı Kali Linux olan dağıtımı ve üzerindeki araç setlerini öğrenmek değil. Konu Linux’u bilmek! Ben zamanında her şeyi kişisel bilgisayarımda Archlinux, sunucu taraflı dünyada ise Centos ile öğrendim.

3 – Üniversite Eğitimi ve Bilgisayar Mühendisliği’ne Bakış Açısı

Bu yazının konusu üniversitelerin mevcut durumu, eğitim kalitesi veya sistemi ile ilgili değildir. Bu konuları ne ben, ne de bu yazıyı okuyanlar önümüzdeki en az 10 sene içerisinde çözemeyeceğiz. Bu nedenle durumu şikayet etmek yerine işimize bakmalıyız. Zira ben üniversite yıllarımda da tam olarak bunu yaptım. Durumu olduğu şekilde kabul edip, işime baktım.

Son 5 sene içerisinde 300’den fazla gönüllü kursiyere eğitim verme şerefine nâil olan bendeniz en çok şu cümleyi duymuşumdur.

Hocam bize sizin anlattıklarınızı okulda anlatmıyorlar ki ? Okul pek bir işe yaramıyor.

Yazının başında dedim ya, tüm ifadeler şahsi düşüncelerimdir diye. En sık duyduğum bu cümleye pek katılmadığımı ifade etmek isterim. Okulların mevcut durumu ve problemleri bir yana dursun, ben üniversite okuduğum yıllarda olaya nasıl baktığımı anlatayım.

Öncelikle, hiçbir bilginin gereksiz olmadığını düşünmekteyim. “Biçimsel diller dersi, Otomatalar, Diferansiyel Denklemler dersleri beni Siber Güvenlik alanında uzman yapmıyor ?” cümlesini ve/veya benzerlerini, öğrenci olan ve bu alanda çalışmak isteyen hemen herkesten duymaktayım. Bu konudan o kadar rahatsız olmuş olmalıyım ki, son zamanlarda üniversite etkinliklerinde tamamiyle bu konu üzerinde konuşmalar gerçekleştirdim. Özetle durum şu;

Bir öğrenci, 4 yıllık üniversite öğreniminde 240 AKTS, ortalama 48 ders almaktadır. Bu dersler içerisinde de 1 yada en fazla 2 ders siber güvenlik ile ilgilidir. Bu rakamlar nedeniyle de en çok “Bize siber güvenlik öğretmiyorlar ki ?” cümlesi sık sık kulaklarıma  çalınmakta. Şimdi 1. sınıf derslerine bakalım.(PS: Bu yazı içerisinde ifade edilen ders isimleri okuldan okula farklılık gösterebilir.)

Matematik I
Lineer Cebir
Algoritma ve Programlama I
Bilişim Teknolojileri
Fizik I
Bilgisayar Mühendisliğine Giriş 
Türk Dili
Matematik II
Algoritma ve Programlama II
Olasılık ve İstatistik
Web Teknolojileri
Fizik II
İngilizce*

Sizlere, siber güvenlik ile üniversite öncesinde tanışmış birisi olarak, üniversite okurken aldığım derslere hangi gözle baktığımı ifade etmek isterim.

Algoritma ve Programlama

Öncelikle bir çok okulda 1. sınıf dersi olan Algoritma ve Programlama dersine bakalım siber güvenlik açısında. 2004 yılından bu yana 120’yi aşkın uygulama/proje/ürün’de güvenlik açığı bulup internet üzerinde yayınlamış birisi olarak, en çok haşır neşir olduğum husus programlama dilleri olmuştur. Bu çalışmalar esnasında onlarca farklı yazılımcının, farklı teknolojileri kullanarak icra ettiği projelerin kaynak kodlarını okudum.

Bu dersi okulda iyi dinleyin candostlar. Okulda verilen ile kalmayıp üzerine düşünün ve merak edin.

Çünkü bir yazılım içerisinde güvenlik zafiyeti bulurken de, ilgili zafiyeti sömüren saldırı kodlarını yazarken de ihtiyacınız olacak. Ya da ileride eğitimler verdiğinizde, Blind SQL Injection tekniklerini düz metin gibi okuyup anlatmaktansa; tekniğin temelini verip ardından sınıfa “Bu işi nasıl hızlandırabiliriz ?” diye sormak inanın çok daha fazla katma değere sahiptir. Kuvvetle muhtemel 1. sınıfta okuyan arkadaşlar, en temel yaklaşımlardan birisi olan binary search’ü yıllardır aynı şekilde siber güvenlik alanında kullandığımızı bilmemektedirler.

Matematik 1-2/Lineer Cebir/Fizik/Olasılık ve diğer “sayısal” dersler

Üniversite tercihlerinin %80’i gibi yüksek bir oranın “Puanım nereye yeterse ?” mantığı ile yapılmak zorunda kalındığı güzide ülkemizde; 1. sınıf öğrencileri bırakın siber güvenliği, okudukları bölümlerden mezun olduktan sonra ne yapacaklarını bilememektedir. Bu dert tasalar ise 3. sınıfta başlar genellikle. Bir kısmı özel sektörü denerken, bir kısmı ise akademik hayata devam etmek durumundadır. Bu nedenle aramızda üniversiteden mezun olduktan sonra akademik hayata devam etmek isteyen pek çok arkadaşımız olmuştur. Çoğunluğunun hangi alanda çalışacağını bilemediği, çok yakın bir geçmişte hemen hemen aynı konuları üniversite sınavı için zaten çalışmış olan genç arkadaşların karşısına matematik bir kez daha gelmiştir.

Bu derslere benim baktığım açı şu olmuştu.

Hazırlamak istediğim bir çalışma vardı. Elimde bir dünya log, hangilerinin siber saldırı hangilerininse normal kullanıcı trafiği olduğunu oturup günlerce elle işaretlemiştim(öğrencilik işte.). Yani elimizde iki tür veri var. Biri saldırı kayıtları, diğeri ise normal kullanıcı trafiğini ifade eden kullanıcı kayıtları.

Keşke bu verileri kullanarak, yeni gelen bir kullanıcı aktivitesinin saldırı olup olmadığını önceden hızlıca anlayabilsek ?

İşte bu hususlara bendeniz girmeye çalıştığım yıllarda karşıma classification algoritmaları, distance function’lar, bunları anlamaya çalıştığımda ise matematik çıktı. Amacım ise siber güvenlik :-) Şimdilerde ise özellikle makine öğrenmesi siber güvenliğin en sıcak konusu.

Bahsetmeye çalıştığım şu ki, özellikle akademik alanda siber güvenlik çalışmak istiyorsanız, bu sayısal dersler sizin can simidiniz. Zira ben can simidine tutun(a)madığım için boğulmuştum.

İkinci sınıf derslerine baktığımızda ise tablo hemen hemen şu şekilde.

Diferansiyel Denklemler
Mantık Devreleri
Nesneye Dayalı Programlama
Sayısal Analiz
Veri Yapıları
Elektrik Devre Temelleri
Bilgisayar Organizasyonu
Elektronik Devreler ve Laboratuarı
Nesneye Dayalı Programlama 2
Ayrık İşlemsel Yapılar
Programlama Dillerinin Prensipleri

Bilgisayar’a Dair Her şey

Ne yalan söyleyeyim, en önemli ders bu listede Bilgisayar Organizasyonudur. Konu burada siber güvenlikte değil. Günde ortalama 15 saatimi birlikte geçirdiğim bu şeyin nasıl çalıştığını, neleri barındırdığını bilemiyor olmak insana koyan bir şey olmalı.

Siber güvenlikte doğrudan ilişkili olan Veri Yapıları ve Programlama Dilleri dersleri ayrı bir öneme sahip. Ben tüm anlatılan konuları siber güvenlik alanında kullanmaya çalıştım o yıllarda. Şimdi ise adeta bu iki ana konu ile yaşıyorum mesleğimi icra ederken. Uygulamaların adres alanları üzerinde tuttuğu verilerin değiştirilmesi, hafıza taşması zafiyetleri, bu zafiyetlerin sömürülmesi vs vs vs karşımıza hep Veri Yapıları çıkmakta. Üniversite yıllarında bu dersi alırken bir yanda da corelanc0d3r’da ki eğitim serisini çalışıyor, hafıza taşması zafiyetleri ile ilgileniyordum. Bu dersin siber güvenlik alanında işime yarayacağını anlayıp özenle çalıştığımdan, Heap ne ya ? Stack ne ? linked list mi ?! suallerini pek sormama gerek kalmamıştı. Çok hayrını gördüm. Hala başka araştırmacılar tarafından yayınlanan teknik yazıları okurken görmeye de devam etmekteyim.

Öte yandan, bir yazılım geliştiricinin dünyasını bilmeden sızma testi alanında “uzman” olmak bence mümkün değildir. Nedenlerini anlatmak bir başka yazı olabilecek kadar uzun olan “programlama dili bilgisi ve tecrübesi” hususu en kritik konudur. Yazılımcıları, kullandıkları dilleri ve onların dünyasını anlamak bunca yıllık meslek hayatımda işimi her ama her zaman çok kolaylaştırmıştır. Özellikle PHP Object Injection zafiyetlerini bilirken, nesne dayalı programlamanın inceliklerinin ne kadar işime yaradığını görmüşken, bu dersleri büyük bir hevesle çalıştım. Şöyle örnek vereyim birde, Java teknolojileri hakkında fikir sahibi olmamın verdiği “avantaj” ile Symantec Messaging Gateway ürünü üzerinde gerçekleştirdiğim güvenlik araştırmasında son derece kritik bir zafiyet tespit etmiştim. Bakınız bu hikaye ile ilgili özet şurada. (https://pentest.blog/unexpected-journey-5-from-weak-password-to-rce-on-symantec-messaging-gateway/). Siz bence altını çizmeye çalıştığım şeyi anladınız.

Üçüncü sınıf dersleri:

Biçimsel Diller ve Soyut Makinalar
İşletim Sistemleri
Veri tabanı yönetim sistemleri
İşaretler ve Sistemler
Veri İletişimi
Bilgisayar Ağları
Web Programlama
Sistem Programlama
Yazılım Mühendisliği

NFA/DFA ve DOS

Bir programlama dili regex ifadeyi nasıl koşturur ? Hangi dil hangi automata sistemini kullanmakta ? Üniversite yıllarında bir dünya halka çizip “bu buradan şuraya gider, buda şuraya gider” diye diye erindiğiniz bir ders size siber güvenlikte ne katabilir ki ?

Bu konuda daha önce yazmışım, buyrunuz cevaplar burada.

ReDoS ( Regular Expression DoS ) Zafiyetleri

Öte yandan tek tek değinsem roman olur bu derslere. Hepsinde siber güvenlik kamyonla var. Kam-yon-la. Bu derslerin vize finallerine sıkılarak çalışmak imkansız olsa gerek. Bilgisayar ağlarında öğrendiğiniz konular her pentestte karşınızda olmakta. Web programlama dersinde yazdığınız kodlar XSS ve SQL Injection kaynamakta. Neden meslek hayatınızda tanışasınız ki XSS ile ? Bakın öncesinde tanışmak için çiçek gibi fırsat. XSS ile tanıştıktan bu konuda öğrenilecek hususlar 3 ay sürer belkide. Yazın niye dota/lol/cs oynayasın ? Bak öğrenilecek çok şey var.

Özetle, çoğunluğa zor gelebilen okul hayatına dair bakış açısını değiştirerek üniversite öğreniminizde siber güvenlik çalışabileceğinizi fark edin isterim.

4 – İşinizin %70’i Okumak ve Araştırmak

Basılı yayım olarak aldığım ve okuduğum kitapların olduğu dolabımın fotoğrafı aşağıda. Mevzu bahis siber güvenlik ise hemen hemen her şey hakkında temel bilgiye sahip olmanız gerektiği kanaatindeyim.

Bu nedenle ömrümde hiç yazmadığım bir dil .NET’ hakkında bir kitap var. Bu kitap ile MVC ve WebForm arasındaki farkları öğrendim. Artık bir web uygulamasının arayüzüne baktığımda, webform uygulamanın otomatik tablo özelliğiyle ekrana verilerin geldiğini görüp bu duruma özel saldırı kodları ve yöntemlerini kullanmaya başlamaktayım. Öte yandan .NET projelerin konfigürasyon dosyalarının yerini ve içeriğini öğrendim ki bu da çok işe yaradı geçmişimde.

Bir başka örnek. Burp Suite aracına plug-in yazmak istediğimde Swing kitabında zamanında okuduğum ve şimdi unuttuğum hususları, elimle koymuş gibi hızlıca bulup sızma testlerinde kendime özel araç setlerini yazma konusunda çok zorlanmamaktayım.

Örnekler uzar gider… Özetle benim zamanımın %70’i hala araştırmak ile geçmektedir. Teknoloji hızla gelişiyor ve sürekli yeni şeyler çıkıyor. Bu yeni şeyler T süre sonra sızma testlerinde karşınızda gelmekte ve işin aslı, yaptığım “sızma testi” olayın sadece %30’u.

Ayrıca; işin birde internet yayınları bacağı var. Ben takip edilmesi gerektiğini düşündüğüm blog ve adreslerin listesini RSS okuyucuma ekledim. Her gün sabah işe başlamadan önce 1 saat gelişmeleri okumaya gayret ediyorum. Şiddetle tavsiye ederim. Takip ettiğim listeyi almak isteyen arkadaşların mail atması yeterlidir :-)

5 – Ücretli Kurslara Hayır

Coursera, udemy, pluralsight bunlar güzel kaynaklar. Lakin öğrenci iken vaktiniz gerçekten çok. Gidip ücret ödeyerek bir kurumdan eğitim almanızda büyük yarar olmadığını düşünüyorum. ( Cyber-Struggle hariç. Kubilay özel bir adam. Yaptığı işe inanılmaz imreniyorum.)

Kurumların personelleri için bu eğitimleri organize etmesini anlıyor ve hatta bizzat kendimde yapıyor olmakla beraber, öğrenci arkadaşların bu eğitimlere çok ihtiyacı olmadığı düşüncesindeyim. Okulunuzun eşek kadar kütüphanesi var. Yok ise @klavyedelikanlari var çiçekler gibi kitap dağıtıyorlar. Oda olmazsa bana istediğiniz kitabı söyleyin, hediye etmeye çalışayım. Yeter ki okuyalım.

Ücretsiz olan ve topluluklar tarafından organize edilen kurslar içinde iki organizasyonu şiddetle tavsiye ederim. Akademik Bilişim ve Linux Yaz Kampı. Öte yandan Hacktrick ekibi her sene etkinlikler organize etmekte. Takip etmekte fayda var. Son olarak; kadınlara özel  her yıl Almanya’nın Bremen kentinde düzenlenen Informatica Feminale var.

6 – Siber Güvenlik Alt Disiplini Tercihi

Bildiğiniz üzere siber güvenlik içerisinde farklı uzmanlık alanları mevcut. Bir insanın siber güvenliğin her alanında “uzman” ulabilmesi mümkün değildir. Lakin tüm alanlar hakkında da temel bilgileri bilmesi gerektiği kanaatindeyim. Bu nedenle başlangıçta her alan ile ilgili çalışmalar yapmak, öğrenmeye uğraşmak önemlidir. Zaten daha sonraları, hangi alanda daha eğlenerek çalıştığınızı fark edebilirsiniz. Böylece uzmanlaşacağınız alanı tercih etme imkanınız olacaktır.

Bu konuda ben deniz aynı yaklaşımı ekibimimiz için uygulamaya özen göstermekteyim. Sızma testi ekibimizde; mobil, reverse engineering, malware development, web app ve network olmak üzere her birinde uzmanlaşmış farklı ekip arkadaşlarımız bulunmakta.

Sevgiler,

Mehmet.