Merhabalar. Konumuzda Penetrasyon Testi Temelleri ve Web Uygulama Güvenliği konularını ele alacağız.
"Temel" kavramının her zaman bana "daha detaylısı" anlamını çağrıştırması doğru mu? yanlış mı? bilemiyorum. Bazı konularda temele indiğimizde bu durumun netliğini sizler test edebilirsiniz. Belirlenmiş net bir tanımın profesyonel olarak detaylıca incelenmesi, genel bir konunun temellerinin incelenmesinden daha kolay olduğunu düşünüyorum :). Bugün çok fazla temele inememekle birlikte yine de değinmemiz gereken noktaları birlikte inceleyeceğiz. Umarım faydalı olur.
Penetrasyon (Sızma) Testi Nedir?
Penetrasyon testi (Penetration Test / Pentest), bir kurumun bilgi sistemleri, ağ altyapısı, uygulamaları ve dijital varlıkları üzerinde gerçekleştirilen kontrollü ve yetkilendirilmiş siber saldırı simülasyonudur. Bu testin temel amacı; gerçek bir saldırganın bakış açısıyla sistemlerde bulunan güvenlik açıklarını tespit etmek ve bu açıkların sömürülebilirliğini ölçmektir.
Dijital Varlık Güvenliği hakkındaki yazıma aşağıdaki bağlantı aracılığıyla erişebilirsiniz.Sızma testleri, yalnızca bir güvenlik açığının varlığını değil; bu açığın hangi yöntemlerle istismar edilebileceğini, hangi sistemlere erişim sağlayabileceğini ve iş süreçleri üzerindeki potansiyel etkisini ortaya koyar. Bu yönüyle penetrasyon testi, klasik zafiyet taramalarından ayrılır.
Bir penetrasyon testi sürecinde temel olarak;
Sızma Testi Çeşitleri Nelerdir?
Sızma testleri, hedef sistem hakkında test ekibine sağlanan bilgi düzeyine ve testin kapsamına göre farklı türlere ayrılır. Bu ayrım, testin gerçekçilik seviyesini ve elde edilecek çıktıların niteliğini doğrudan etkiler.
Bilgi Seviyesine göre Sızma Testi Türleri
Test ekibine hedef sistem hakkında hiçbir ön bilgi verilmez. Gerçek bir dış saldırgan senaryosu simüle edilir. Zaman alıcıdır ancak gerçekçi sonuçlar sunar.
Sistem mimarisi, kaynak kodlar, ağ diyagramları ve kullanıcı bilgileri test ekibiyle paylaşılır. Derinlemesine analiz sağlar ve kritik zafiyetlerin tespitinde oldukça etkilidir.
Kısıtlı bilgi ile gerçekleştirilen test türüdür. Yetkili bir kullanıcı perspektifi sunar ve hem iç hem dış tehdit senaryolarını kapsar.
Kapsamına göre Sızma Testi Türleri
İç ve dış ağ altyapılarında bulunan güvenlik açıklarını tespit etmeye yönelik testlerdir. Firewall, router, switch, VPN, sunucu servisleri ve ağ segmentasyonu bu kapsamda değerlendirilir.
Web tabanlı uygulamalarda bulunan mantıksal hatalar, kimlik doğrulama zafiyetleri, yetkilendirme problemleri ve OWASP Top 10 kapsamındaki açıklar analiz edilir.
REST, SOAP ve GraphQL gibi API servislerinin güvenliğini değerlendirmeye yöneliktir. Yetkilendirme kontrolleri, token yönetimi, veri sızıntıları ve iş mantığı zafiyetleri bu testlerin odak noktasıdır.
Android ve iOS uygulamalarının hem istemci tarafı hem de arka uç iletişimleri analiz edilir. Tersine mühendislik, veri saklama mekanizmaları ve API entegrasyonları test edilir.
Wi-Fi altyapılarının şifreleme yöntemleri, erişim kontrolleri ve yetkisiz bağlantılara karşı dayanıklılığı ölçülür. Rogue Access Point ve MITM saldırıları simüle edilir.
İnsan faktörünü hedef alan testlerdir. Phishing, vishing, fiziksel erişim ve farkındalık senaryoları üzerinden kurum çalışanlarının tehditlere karşı tepkileri değerlendirilir.
Uygulamanın kaynak kodları statik veya dinamik yöntemlerle incelenir. Mantıksal hatalar, güvenli olmayan fonksiyon kullanımları ve arka kapılar bu analizle tespit edilebilir.
Endüstriyel kontrol sistemleri ve kritik altyapılar için yapılan özel testlerdir. PLC, HMI, RTU gibi bileşenlerin güvenliği değerlendirilirken operasyonel süreklilik önceliklendirilir.
AWS, Azure, GCP gibi bulut ortamlarında yanlış yapılandırmalar, erişim politikaları ve servisler arası yetkilendirme sorunları incelenir.
Kurumsal kimlik altyapılarının güvenliğini ölçmeye yöneliktir. Yetki yükseltme, lateral movement ve domain takeover senaryoları test edilir.
Akıllı cihazlar, firmware yapıları ve gömülü sistemlerde donanımsal ve yazılımsal zafiyetler analiz edilir.
Bu test türleri, kurumun faaliyet alanına, kullandığı teknolojilere ve risk önceliklerine göre özelleştirilebilir ve birbirini tamamlayacak şekilde uygulanabilir.
Sızma Testlerinin Önemi
Sızma testleri, kurumların siber güvenlik seviyesini proaktif olarak değerlendirmesini sağlayan en etkili yöntemlerden biridir. Gerçek saldırılar gerçekleşmeden önce zayıf noktaların tespit edilmesine olanak tanır.
Günümüzde siber saldırıların karmaşıklığı ve sıklığı artarken, yalnızca güvenlik ürünlerine güvenmek yeterli değildir. Sızma testleri, bu ürünlerin ve uygulanan güvenlik politikalarının gerçek hayatta ne kadar etkili olduğunu ölçer.
Sızma testlerinin kurumlara sağladığı başlıca faydalar;Ayrıca penetrasyon testleri, CVSS gibi skorlama sistemleriyle birlikte kullanıldığında, tespit edilen zafiyetlerin önceliklendirilmesini sağlar ve kaynakların doğru alanlara yönlendirilmesine katkı sunar.
Sonuç olarak sızma testleri; kurumların dijital varlıklarını korumak, iş sürekliliğini sağlamak ve siber tehditlere karşı dirençli bir yapı oluşturmak için vazgeçilmez bir güvenlik pratiğidir.
Neden Web?
Web Uygulamaları Neden Popüler Hedeftir?
İlk olarak yaygın kullanımı nedeniyle hedef haline geldiğini rahatlıkla söyleyebiliriz. Yıllar önce internet kullanımının büyük bir oranı akademik ve araştırma ortamı olarak kullanılmaktaydı. Şimdi ise World Wide Web (WWW) sayesinde bir çok insanın ve organizasyonun günlük hayatına dahil olmuştur. Web uygulamalarının en büyük avantajlarından biri, kullanıcının yorulmadan varsayılan ayarları kullanarak portatif yani seyyar yayın ve çalışma alanı oluşturmasıdır. Ayrıca masaüstü uygulamalardan daha kolay kurulabilirler. Web uygulamaları sıklıkla hassas ve kişisel bilgileri depolamak, yönetmek ve bunlara erişmek için kullanılır. Banka hesaplarımıza erişmek ve kredi kartlarımızı yönetmek için web uygulamalarını kullanıyor olmamızı örnek gösterebiliriz. Keza aynı şekilde şirketler bu hizmetleri sağlamak amacıyla web uygulamalarını kullanmak durumundadır. Büyük şirketlerin ve devlet kurumlarının vazgeçilmez olarak kullandığı bu web uygulamaları, içerisinde barındırdığı değerli bilgiler nedeniyle açık hedef haline gelerek saldırganların listesinde ilk sıralarda yer alabilirler. Geçmiş yıllarda WEB'in etkileşimi olmayan statik sayfalardan oluştuğundan bahsetmiştik. Günümüzde ise web uygulamaları interaktif olup, dosya paylaşımı ve mobil cihazlar da dahil olmak üzere çok çeşitli amaçlar için kullanılmaktadır. Bu durum SQL injection, Cross-Site Scripting ve bir çok web güvenlik açığının kullanılarak web uygulamalarının sömürülmesinde adeta saldırganlar için yeni bir kapı açılmasına vesile olmuştur. Sadece kişisel verilerin bulunması değil, WEB sitesinin popülerliği de büyük bir etken olabilir.HTTP Protokolü
Hypet Text Transfer Protocol türkçe anlamı ile "Hiper Metin Transferi Protokolü" olarak çağrılabilir. Server-Client / Client-Server yani Sunucu ve İstemci (Kullanıcı) arasında bilginin hangi yol ve kurallarla aktarılacağını belirleyen patikadır. Web servisler için kullanılan temel protokol olup çalışma mantığına ve servisi manipüle etmeye yönelik tekniklere de aşina olmak gerekmektedir. HTTP/HTTPS arasındaki fark ise güvenli bilgi alışverişine sahip olunup olunmadığının vurgulanmasıdır. Protokolün alışverişi güvenli sertifika üzerinden gerçekleştirmesidir. Protokolün sonuna eklenen "S" harfi "Secure Sockets Layer" teknolojisini temsil etmektedir. Türkçe karşılığı "Güvenli Soket Katmanı" yani SSL, bilgi alışverişinde bulunacak olan iki nokta arasındaki iletişim trafiğini şifreli kanal üzerinden geçişini yaparak güvenli şekilde veri iletilmesini sağlayabilen teknolojidir. SSL sertifikasına sahip WEB sunucularının HTTPS üzerinden güvenli(Secure) bağlantı yaptıklarını görebiliriz. Nitekim günümüzde kullandığımız güncel tarayıcılar bu konuda uyarılar da yansıtmaktadır. SSL kullanılması tehlikeli atak vektörlerinin bir çoğunu engelleyebilir.The Tangled Web (Karışık-Dolanmış WEB) @Michael Zalewski (SANS)
Bu öneriyle ilk olarak SANS şirketine ait bir dökümanda karşılaştım. Bu sertifikayı almaktan vazgeçsem bile dökümanı okuyarak ilginç bilgiler edinmem kaçınılmaz oldu. Paylaşımı yasak olduğu için link veremiyorum. "The Tangled Web", Michael Zalewski"nin seçkin bir kitabıdır. Aynı zamanda "p0f", "American Fuzzy Lop" gibi araçlar onun parmaklarından çıkmıştır. Kitap web ile ilişkili olan tasarım ve güvenlik sorunlarını kapsamlı bir şekilde içermektedir. Zalewski'den bahsetmek istememin sebebi, web geçmişinin ve alınan eski kararların günümüzdeki mevcut WEB'i neden etkilemeye devam ettiğini açıklamasıdır. Örneğin; HTTP tarihine bakarak HTTP'nin yazarlarının arzuları ve internetin gittikçe artan önemi arasındaki ilginç bir bağlantıyı keşfedebiliriz. Örneğin Tim Barners-Lee tarafından oluşturulan HTTP/0.9 protokolünün en eski taslağı bir buçuk sayfa uzunluğundaydı ve HTML olmayan (non-HTML) verileri iletmek için gereken esneklik gibi, geleceğe yönelik ihtiyaçları hesaba katamamıştır. Günümüzde tüm istemciler ve sunucular tartışılır bir biçimde HTTP/1.0 süper setini desteklemektedir ve çoğu HTTP/1.1'in makul şekilde dilini yani lehçesini çözümleyip konuşabilmektedir. Hiç bir pratik ve mantıksal gerekçesi olmamasına rağmen bir çok web sunucusu ve tüm yaygın tarayıcılar ise aynı zamanda HTTP/0.9 ile geriye dönük uyumluluğu sürdürmektedirler. Bunun sebebi ise geçmişte alınan yanlış/eksik kararlardır. Nitekim, HTTP/2 Internet Engineering Task Force (IETF) adlı uluslararası standart kuruluşunun HTTP Working Group (httpbis) adlı çalışma grubu tarafından geliştirilmiştir. Bu çalışma grubu, çok sayıda mühendis, protokol uzmanı ve şirket temsilcisinden oluşmaktadır. Dolayısıyla tek bir kişiden çıkan veya bir kaç kişinin tercihlerine bırakılmış olan protokol yapısına çeki düzen verilmiştir. Bu sebeple geliştiricilerin arzularından ve anlık ihtiyaç giderme eğilimlerinden ziyade, yeni teknolojilerde gelecek ve geçmiş arasındaki bağlantı bozulmadan olabilecek en ileri düzey düşünülerek çalışmalar yapılmaktadır. Durumu kitabında daha detaylı ele alan Zalewski, aynı zamanda web uygulamaları hakkında da bir çok önemli konuya değinmektedir. Profesyonel olmak istediğimiz konunun en temeline ve geçmişine inmek çok önemlidir. Bu yüzden günümüze kadar gelen bu teknolojiyi hem teknik hem de psikolojik adımlarıyla incelemenin büyük faydası olacağını düşünmekteyim. Web uygulamaları üzerinde ileri seviye düşünen arkadaşlarıma bu kitabı kesinlikle tavsiye etmekteyim. Türkçe kaynak öneremiyorum :/ "The Tangled Web" hakkında daha fazla bilgi edinmek için bu linki inceleyebilirsiniz.WEB 2.0: Artan İşlevsellik
WEB siteler bilmiyor/anlamıyor olmalarına rağmen arka planda bir çok işlem gerçekleştirerek gerekenden daha fazlasını yapabilirler. WEB istemcileri anlamak, WEB uygulamalar üzerinde güvenlik testi gerçekleştirmek için çalışma ve yapısal mantığını tam anlamıyla idrak etmemiz gerekmektedir. Ayrıca bu bilgi kullanıcılara da aktarılmalıdır. "Web 2.0" ibaresi aslında yıllar boyunca kulaklara aşırı rahatsız edici ve anlamsız gelmekteydi. Buna rağmen "Web 2.0" ibaresinin günümüzde giderek zengin, dinamik ve hatta karmaşık web uygulamaları ile ilişkilendirilebileceği halde olduğunu söylebiliriz. "WEB 1.0" ile sadece okuyucu konumunda olan kullanıcılar, "WEB 2.0" ile birlikte tüketici rolden çıkarak üretici haline gelebilmektedir. WEB uygulamalarının zenginleşmesine olanak sağlayan "WEB 2.0" artık çok anlam ifade etmekte ve siber güvenliğin oluşumunda ise doğrudan rol oynamaktadır. "WEB 2.0" ile birlikte sunulan "Mash-up" teknolojisi artan işlevselliği daha iyi açıklamaktadır. Peki bu teknoloji nedir? kısaca değinelim. "Mash-up", farklı kaynaklarda yer alan metin, görüntü, ses ve video türleri gibi içerikleri bir araya getirerek, yeni bir düzenleme veya tasarım ile yayınlanmasıdır. Bu açıklama ile kafamızda şekillenen şey, günümüzde yaygın olarak kullandığımız fonksyonel WEB siteleri olacaktır. Ayrıca "WEB 2.0" ile birlikte AJAX ve diğer benzeri teknolojilerde entegre hale getirilebilmektedir.Sitelerin biz kullanıcılar için istekte bulunmasına izin vererek, bu isteklerin karşılıklarının çalıştırılmasında rol oynamaktadır. Bu etkileşimi ise WEB uygulamalarıyla arasında arabirim(interface) oluşturan web tarayıcılar ve mobil uygulamalar gibi araçlar gerçekleştirmektedir. Kullanıcıların bilgisayar aygıtlarından yararlanmarının birincil yolu budur. Kısacası WEB uygulamalarının gelişimi ve artan işlevselliği sayesinde WEB, tüm organizasyonlar için merkezi bir konum durumuna gelmiştir. AJAX, aslında WEB 2.0'ı işlevlendirmek için kullanılan klasik örneklerden sadece birisiydi. Eşzamansız olarak JavaScript ve XML'de WEB sayfalarını daha etkileşimli bir hale getirmenin popüler yollarıdır. Tipik WEB siteleri, kullanıcının bir bağlantıyı veya görüntüyü tıklatmasını, isteğin sunucuya gitmesini ve ardından WEB sayfalarının sonuçla birlikte yeniden çizilmesi gerektirir. AJAX ile kullanıcı, siteyle etkileşime girdikçe arama yapmak ve sunucudan veri almak için JavaScript kodu çalıştırır. Sonrasında ise veri alındıkça sayfa dinamik olarak güncellenir. Google haritalar bu teknolojinin mükemmel bir örneğidir.WEB 3.0: Anlamlandıran, Otonom ve Dağıtık
Web 3.0, Web 2.0’ın sunduğu etkileşimli ve dinamik yapının bir adım ötesine geçerek, web’in yalnızca veri sunan veya işleyen değil; veriyi anlayan, yorumlayan ve bağlamsal kararlar verebilen bir yapıya evrilmesini ifade eder. Web 2.0’da web siteleri ve uygulamalar, kullanıcı etkileşimleri sayesinde zenginleşmişti; ancak hâlâ “ne yaptığını bilmeden” işlem yapan sistemler söz konusuydu. Web 3.0 ile birlikte bu durum değişmektedir. Web artık yalnızca işlem yapan değil, anlam çıkaran bir yapıya dönüşmektedir. Web 3.0’ın temelini Anlamsal Web kavramı oluşturur. Bu yaklaşımda amaç, verilerin yalnızca insanlar tarafından değil, makineler tarafından da anlamlandırılabilir hâle gelmesidir. Örneğin:Güncel Güvenlik Testlerinin Önemi
Çoğu büyük kurum ve kuruluş güvenlik testlerine önem veriyor olsa bile, bu testlerin güncel olarak devam ettirilmesi konusunda kararsız ve tedirginlerdir. Çalışan bir sistemin güncellenerek aksamasından, ayrıca ufak test masraflarından çekindiklerini rahatlıkla söyleyebiliriz. Genellikle kurumlar Web'e dağıtılan uygulamaların sadece iş üzerindeki işlevselliğini kontrol ederek sınamaktadır. Güvenlik açıkları çok nadiren test edilmektedir. Bu durum vulnerability mailing listelerinin günlük raporları incelendiğinde daha belirgin bir şekilde ortaya çıkıyor. Güncel zaafiyetleri takip ederek işlem yapmak neredeyse hayati önem taşımaktadır. Yayınlanan binlerce güvenlik açığından hiç birinin sizi etkilemeyeceğine test etmeden nasıl inanabilir siniz? Bu durum genelde sistem yöneticilerinin özgüveni sayesinde ortaya çıkmaktadır. "imkansız" kelimesini kullanamayacağımız nadir konulardan birisi ne yazık ki siber güvenliktir. Common Vulnerabilities and Exposures (CVE) - (Ortak Güvenlik Açıkları ve Etkilenmeler) üzerinde çok sayıda açık olduğunu görebilir, takip edebilirsiniz. Yeni raporlamaların çoğunluğunun artık WEB uygulamalara ait olduğunu görüyoruz. Ayrıca keşif yoğunluğu yine aynı şekilde WEB üzerinde toplanmıştır. Çok kurcalanan sistemde daha fazla zaafiyet keşfedileceği düşünceme şüphesiz sizde katılıyorsunuzdur. WEB uygulamaları zaafiyetleri Exploit Database(EDB) üzerinde de takip edilebilir. Siber güvenlik uzmanlarının zaafiyet paylaşımı gösterdiği uluslararası kabul görmüş bir platformdur. Üzerinde durulması gereken en önemli noktalardan biri ise, WEB uygulamasının yeteneğinini geliştirmek için acele etmemektir. Bu durum zaafiyet oluşturabilir. Kuruluş fonksyonları testlerinden ziyade iş işlevselliği testlerine odaklanılması gerekmektedir. Bu süreç sürekli devam etmeli, güvenlik testlerinin devamı getirilmelidir. Aksi takdirde güncel WEB uygulama açıkları takip edilmediği sürece ortaya çıkacak olan zaafiyetler ciddi derecede zararlara yol açabilir. Ayrıca çeşitli web kusurlarına karşı savunmasız olan sitelerle alakalı duyuruları bulmak için xssed sitesini kontrol edebilirsiniz. Site şuan pasif durumdadır ancak geçmiş çalışmalara göz atmak altyapı için yardımcı olabilir. Pasif halde bulunan ve güncellenmeyen siteler üzerinde bile geçmiş bilgiler sayesinde çok önemli veriler elde edilebilir. Başlık içerisinde bahsettiğim önemli platformların adresleri aşağıda yer almaktadır.Sömürmek için WEB'in Doğru Anlaşılması
Başarılı bir şekilde WEB uygulama penetrasyon testleri gerçekleştirmek için web teknolojilerini daha iyi anlamamız gerekiyor.WEB uygulamalarını exploit edebilmek için, WEB'in nasıl çalıştığı ve nasıl çalışmadığı hakkında daha derin bir anlayışa sahip olmalıyız.Bu anlayış, ortalama kullanıcının bilgi düzeyinden ve hatta geliştiricilerden ve WEB yöneticilerinden daha derin olmalıdır.Pentester normal WEB uygulama kullanıcısından farklı bir bakış açısına sahiptir. Test esnasında kötü niyetli düşünmek, ama profesyonelce davranmak çok önemlidir. Kısıtlamaların atlatılacağı ve yetki yükseltme denemeleri yaparak çeşitli yollara başvurulmalıdır. Hedef sistemin geliştiricileri, yöneticileri ve operatörleri hangi hataları yapmış olabilir? sorusuna yönelik çalışma haritası oluşturarak testimizin daha başarılı olmasına olanak sağlayabiliriz. Bu daha önce bahsettiğim gibi genel olarak geliştiriciler ve yöneticilerden farklı bir zihniyet ortaya koyularak gerçekleştirilir. Uygulamadaki güvenlik kontrollerini bypass etmeye odaklanarak iş mantığı problemlerini bulmakta yine farklı düşünerek elde edilebilecek uygulama açığı olabilir. Dolayısıyla gözümüzü ve anlayışımızı web uygulamalar üzerinde otomatik olarak açığı saptayıcı hale getirmiş olacağız. Profesyonel bir zafiyet araştırmacısı veya pentester olduğunuzda ne demek istediğimi çok daha iyi anlayacaksınız.WEB Uygulama Pentest Metodolojisi
Solid yani katı,sağlam,günenilir WEB uygulamaları üzerinde pentest çalışmaları gerçekleştirmek profesyonellik ve bilgi gerektirmektedir. Scattershot yaklaşımı tamamen yanlıştır! Scattershot gelişigüzel, rasgele anlamına gelmektedir. Hedefe gelişigüzel yaklaşmak bizi amacımıza ulaştıramayacaktır. Metodolojimiz şunlar olmalıdır ; # Kanıtlanmışlık ilkesiyle, daha önce kanıtlanmış ve denenmiş tecrübelerimiz üzerinden yola çıkmalıyız. Buna Track Record denilmektedir. # Tekrarlanabilirlik ilkesiyle, daha önce elde edilip düzeltilen web uygulama hataları yeniden test edilmelidir.Geliştiriciler tarafından tekrar aktif hale getirilmiş olunabilir. # Açıklanabilirlik ilkesiyle, keşfettiğimiz problemleri ve düzeltmeleri anlaşılabilir bir şekilde ifade edebilmeliyiz Başarılı bir WEB penetrasyon testi gerçekleştirmek için bu ilkelere sahip olmalı ve sadık kalmalıyız.Gelişigüzel davranışlar güvenlik açıklarını kaçırmamıza ve işimizi tamamlayamamıza sebebiyet verecektir. Şimdi bu terimleri sektör içerisinde yer edinmiş kalıplarıyla inceleyelim. Proven(Kanıtlanmışlık): Bu method penetrasyon testi gerçekleştiren kişiler tarafından sahiplenilmiş temel ilkedir. Geçmişte elde edilmiş tecrübeler ve bu doğrultuda devam eden çalışmalar sizi her zaman bir adım önde tutacaktır.Nitekim bir çok pentest uzmanı yayınladığı güvenlik açıklarıyla geçmişe yönelik başarılarını kanıtlamaktadır. Repeatable(Tekrarlanabilirlik): Güvenlik testlerinde karşılaşılan en büyük problemlerden birisi yanlış sonuçların ortaya çıkabilmesidir. Bulunan bir zaafiyetin veya bulunamayanların doğruluğunu test etmek için testin tekrarlanması gerekmektedir. Şüpheli bulguları netleştirmek için çok önemlidir. Explainable(Açıklanabilirlik): Sorunları bulabilen ve güvenlik açıklarını düzeltebilen bir uzman olabilirsiniz. Fakat nasıl bulduğunuzu açıklayamıyorsanız çok büyük bir problem sahibisiniz demektir. Geleceğe ve insanların güvence altında olmasına önem veren vizyonlu bir uzman, ne yaptığını öğretebilmeli ve açıklayabilmelidir.Bu ilke ihtiyacınızı karşılayarak sizi daha profesyonel uzman haline getirecektir. Ek bilgi olarak OWASP şirketinin daha fazla detaylandırdığı metodoloji şeması bulunmaktadır. Aslında bu şema pentest kavramının temeline inerek yeni başlayan bireylere yönelik bilgilerde içermektedir.Araç Bilgisi
Araç bilgisi temel esaslardan birisidir. Komut satırı seçeneklerini veya parametrelerini her araç için ezberlememize gerek yoktur. Nitekim araçların ana ve yardım ekranlarında bu bilgi yer almaktadır. Mevcut sızma testi araçlarına aşina olmanız, yeteneklerini anlamanız ve uygun şekilde kullanabilmeniz gerekmektedir. İlerleyen sayfalarda bir çok aracı inceleyeceğiz fakat her aracı burada göremeceğinizden emin olabilirsiniz.En sık kullanılan ve testler için çok önemli olan araçları göreceksiniz. Hangi yardımcı araçların mevcut olduğunu ve hangi testler için geliştirildiğini anlamak çok önemlidir. Her bir aracın kullanımında derin bilgi edinmeliyiz. Araç bilgisini maddeler şeklinde tanımlayacak olursak; # Güçlü ve Zayıf yönlerini bilmek
# Yaygın taktik ve tuzakları anlayabilmek ve kullanabilmek
# Test esnasında bir araçtan alınan bilginin bir diğer aracın
kullanımını besleyebileceğinin farkında olunması
# Araçların genişletilmesi veya geliştirilmesi
# Otomosyon için komut dosyalarının geliştirilmesi
# Mevcut araçlar için yamalar geliştirilmesi
# İhtiyaçlara yönelik yeni araçlar yaratılabilmesi
Test için İzin
Test edeceğimiz sistem yöneticisi veya sahibinden izin almak hayati önem taşımaktadır. Kendinizi dava edilmiş olarak bulabilir, hatta kapis cezasına çarptırılabilirsiniz! Test iznini belgelendirmeniz de çok önemlidir. Herhangi bir yetkiliden imzalı şekilde test izninin verildiğine dair belge edinmelisiniz. Örnek ingilizce bir belgeyi sizin için sunuyorum;WEB Uygulama Pentester Araç Seti (Toolkit)
Profesyonel bir pentester, kendisine ait özel araç seti(toolkit) oluşturmalıdır. Bu pentester'ın "dikkatli, özenli ve planlayıcı" olduğunu gösterir. Bazı önemli hususlar şunlardır; # Atak platformu
# Dinamik WEB uygulama güvenliği tarayıcıları (Scanners)
# Tarayıcılar (Browsers)
# Yol Kesme Vekilleri (Interception Proxies)
I-Atak PLatformu
Windows, Linux, Mac OS X olabilir. Ağ testlerinde bu platformlar çok önemlidir ancak web uygulama testleri için hangisini kullanacağınız pekte önemli değildir. Ancak pentest için geliştirilmiş olunan işletim sistemlerini kullanmanızda elbette fayda vardır. Önceden kurulmuş sanal makinalar testlerinizde zaman kazandırabilir. Daha önce network penetrasyon testi üzerinde çalışanlar, işletim sistemi seçiminin web uygulama pentesti için de ne kadar önemli olduğunu bilirler. Sizin kendinizi kullanırken en rahat hissettiğiniz platform, web penetrasyon testi faaliyetlerizde yeterli olacaktır. Seçtiğiniz işletim sisteminiz üzerinde bazı araçları kullanamayabilirsiniz. Bu durumda diğer işletim sistemleri üzerinde de bilgi sahibi olmak önemlidir. Ayrıca bir çok işletim sisteminin özelliğini taşıyan tarama araçlarını kullanmakta da fayda vardır. Pentest gerçekleştirirken kullanmaya alıştığımız platform her zaman elimizin altında olmalıdır. Bu yüzden çeşitli işletim sistemlerini sanal olarak kurmamız gerekir. Web uygulama penetrasyon tesleri göz önünde bulundurularak oluşturulan Linux tabanlı işletim sistemleri mevcuttur. Özellikle de aşağıdaki üç Linux dağılımı bu alanda dikkat çekmektedir. # Kali - Eskiden Backtrack olarak bilinen Kali, sorgusuz olarak en popüler penetrasyon testi dağılımıdır. Kali özellikle de web uygulama penetrasyon testlerinde başarı sağlayan bir işletim sistemidir. # Parrot Security - Kali gibi penetrasyon testi, güvenlik açıklarının değerlendirilmesi ve azaltılması ve adli bilişim gibi bir çok konuyu içinde barından dağılımdır. # SamuraiWTF - SANS şirketi tarafından web penetrasyon testleri için özel olarak geliştilmiş işletim sistemidir. (Web Testing Framework) Eğer sık kullanılan Kali Linux işletim sistemine sahipseniz, ihtiyacınız olan bir çok araç otomatik olarak içerisinde yer almaktadır. Paketleri güncellemek için aşağıdaki komutu çalıştırabilirsiniz.# apt-get update && apt-get install kali-linux-web
kali-linux-web - Kali Linux Web Uygulama Araçları
kali-linux - Kali Linux Temel Sistem
kali-linux-all - Kali Linux Tüm Paketler
kali-linux-forensic - Kali Linux Adli Bilişim Araçları
kali-linux-full - Kali Linux Complete Sistem
kali-linux-gpu - Kali Linux GPU Araçları
kali-linux-pwtools - Kali Linux Şifre Kırma Araçları
kali-linux-rfid - Kali Linux RFID Araçları
kali-linux-sdr - Kali Linux SDR Araçları
kali-linux-top10 - Kali Linux En Popüler 10 Araç
kali-linux-voip - Kali Linux VoIP Araçları
kali-linux-wireless - Kali Linux Wireless Araçları
II-Web Uygulama Güvenliği Tarayıcıları (Sanners)
Son derece kullanışlı ve zaman kazandırıcı bu otomatik tarayıcılar, web uygulama pentester için bulunmaz nimettirler. Çok sayıda büyük uygulamayı hızlı bir şekilde tarayabilme yeteneğine sahiptirler. Manuel gerçekleştirmemiz gereken testleri hızlı şekilde uygulayarak zamanı iyi değerlendirmemize sebebiyet verirler. Ancak bu otomatik tarayıcılar bizim için güçlü araçlar olsa bile kendimizi onlarla bağdaştırırsak aynı zamanda zayıflığımız da olabilirler. Eğer çok hızlıysak, işin derinliğine inemediğimizin ve bir çok şeyi es geçtiğimizin farkına da varmalıyız. Web uygulama güvenlik tarayıcılarını elbette kullanacağız. Ancak kendimizi tamamen bu araçlara yönelik çalışmaya sokmamalıyız. Araçlardan beklentilerimiz ne kadar fazla olursa, aynı orantıda başarısız olunması kaçınılmazdır. Örnek bazı tarayıcıların isimleri şöyledir;- Burp Pro
- OWASP ZAP
- Acunetix WVS
- Netsparker
- Nikto
- HP WebInspect
- IBM AppScan
- Qualys WAS
- Trustwave App Scanner
- Whitehat Sentinel
- Subgraph Vega
III-Web Tarayıcılar (Browsers)
Web tarayıcılar, penetrasyon testlerinin olmazsa olmazıdır. Nitekim çok önemli testleri onlar olmadan gerçekleştiremeyiz. Tarayıcı seçiminde bir savaş başlatmak istemiyorum :) Fakat tarayıcıların önemle dikkate alınması gerektiğini vurgulamak istiyorum. Tarayıcı seçiminizi kesinlikle hoş gözükmesini sağlayan makyajına göre seçmemelisiniz. Test işlemlerinde konfigürasyonu mümkün ve yetkisi yüksek olarak sunulmuş olanları tercih etmeliyiz. Şu maddeleri ele alabiliriz; # Güvenlik testini gerçekleştirirken destekleyici etkenlere sahip ve bize engel olmayacak bir tarayıcı olması. # Engel olsa bile bunu yapılandırabilme yetkimizin de verilmesi # Tarayıcının yeteneklerini uzantılar(extensions) veya eklentiler(add-ons) sayesinde geliştirerek avantajımız doğrultusunda kullanabilmek # En önemlisi ise tarayıcının davranışlarına ve tepkilerine alışabiliyor olmamızdır. Tarayıcı aynı hatalarda farklı davranışlar sergilememelidir. Bu maddeler tercihimizi kolaylaştırabilir. Tarayıcımızın yeteneğinin genişletilebilir olması çok önemlidir. Ayrıca yukarıda değindiğimiz gibi test esnasında bize engel olmamalıdır. Aksine destekleyici unsurlara sahip olmalıdır. Bu doğrultuda eklenti(add-ons) mağazaları geniş ve çeşitli olan tarayıcılar Firefox ve Chrome' dur. Tercih ettiğimiz tarayıcımızı işe yarar eklentilerle penetrasyon testleri için uygun hale getirmeliyiz. Şablonları kullanışımıza hazır ve zaman kazandırıcı halde yerleştirmeli, ihtiyacımız doğrultusunda eklenti kullanımı hakkında da bilgi sahibi olmalıyız.IV-Yol Kesme Vekilleri (Interseption Proxies)
Yelpazemizin bir tarafında otomatik tarama araçları(sanners) bulunurken, diğer tarafında ise web tarayıcılar(browsers) bulunmaktadır. Yol Kesme Proxy'leri (Interseption Proxies) pentest için oluşturacağımız araç takımının son ana parçasıdır ve bir pentester cephanesinin en önemli rol taşıyan unsurlarından biridir. Bir web uygulama penetrasyon tester için en önemli araçtır. Bu araç basit basmalı tarama araçlarından (push-button scanners) daha mantıklı olmamızı sağlayacaktır. Yol Kesme Proxy'leri web tarayıcılar üzerinde manuel test yapılmasından çok daha faydalı bir şekilde bize yardımcı olarak, doğru hedeflere etkili işlem uygulamamızı sağlamaktadır. Interseption Proxy araçlarının hepsi varsayılan olarak 8080 portu üzerinden dinleme yapmaktadır. Bu tabii ki özel konfigürasyon ile değiştirilebilir. Tarayıcıyı 127.0.0.1:8080 üzerinden vekil tayin ederek karşı sunucudan gelen ve giden istekleri dinlemeye alır. Bu tıpkı ve tamamen aynı diyebileceğimiz Man in the Middle(MITM) yani ortadaki adam saldırısına benzemektedir. Üstünde duracağımız en önemli araçlar Zed Attack Proxy(ZAP) ve Burp Suite olacaktır. Bu araçlar günümüzde en popüler ve en etkili olanlardır.Canlı Uygulama
sudo apt install docker-compose
git clone https://github.com/SasanLabs/VulnerableApp.git
akkus@akkus:~/Desktop/VulnerableAPP$ git clone https://github.com/SasanLabs/VulnerableApp.git
Cloning into 'VulnerableApp'...
remote: Enumerating objects: 7784, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 7784 (delta 4), reused 0 (delta 0), pack-reused 7767 (from 3)
Receiving objects: 100% (7784/7784), 42.43 MiB | 2.30 MiB/s, done.
Resolving deltas: 100% (3932/3932), done.