Pentester Olmak İster Misin?
Pentester Olmak İster Misin?
Ömür Uğur
Penetration Tester / Siber Güvenlik Uzmanı
Yıldız Teknik Üniversitesi
Her şeyden önce bir Pentester olmak için sürekli olarak yeni şeyler öğrenmeye istekli olmalısınız veya çabucak evde olmalısınız. İkinci olarak, ağ ve web güvenliği konusunda güçlü bir temel anlayışa sahip olmanız ve en az bir kodlama dilini bilmeniz gerekir. Üçüncüsü, becerilere ihtiyaç duyarsınız. Dördüncü olarak, bazen yapacağınız projelerin sıkıcı veya tekrarlayıcı olacağı gerçeğini kabul etmeye istekli olmalısınız. Beşinci olarak… Eğer hala bu yazıyı okuyorsanız, o zaman bir Pentester olmak için gerekenlere sahip olduğunuza eminim, o zaman ayrıntılarına geçelim!
>Teknik Beceriler:
Evet, teknik beceriler, bir güvenlik uzmanının can damarı. Şimdi, bir Pentester olmak, sadece network pentesting veya web apps gibi tek bir şeye odaklanmanız anlamına gelmez. Aslında, teknik bir uzmanlık alanında başarılı olmak ve hatta bir Pentester olarak mükemmel olmak için geniş bir bilgi birikimine sahip olmanız gerekir. Çünkü ağ pentestleri, kırmızı takım çalışmaları, fiziksel güvenlik değerlendirmeleri ve hatta donanım güvenlik değerlendirmeleri, yeni başlayanlar için çok fazla bir şey yapmıyor ve genellikle çok daha gelişmiş test kullanıcıları için planlanıyor. Ama bu, bunları yapamayacağınızı ve kendinizi kanıtladıktan sonra bunları yapmayacağınız veya daha fazlasını yapma fırsatınızın olmadığı anlamına gelmez. Aynı zamanda uzmanlığınızın ne olduğuna bağlı olarak, muhtemelen bu alanda projeler yapacaksınız. Genel olarak en çok istenen ise değerlendirme…
Bir sonraki bölümde, bir Pentester haline gelmenin (ve belirli bir düzende olmayan) yolu olarak gördüğüm bir dizi teknik beceri listeleyeceğim. Bu becerilerin en az 1-2'sini (web uygulamaları dâhil) orta düzeyde olmak ve bu becerilerin en az 3/4'ünü üst düzeyde olmak için kullanmayı bilmelisiniz.
Her bir yetenekle birlikte, neler yapabileceğinize dair kısa bir açıklama yapacağım, ardından başlamanıza ya da konu hakkında daha fazla bilgi edinmenize yardımcı olacak bir kaynak listesi vereceğim.
1. Web Uygulama Güvenliği:
Web uygulamaları, günümüzde bir web tarayıcısı aracılığıyla kullanıcılara daha fazla yazılım uygulaması sunduğundan günümüz organizasyonlarında hayati bir rol oynamaktadır. İnternette yapmış olabileceğiniz hemen hemen her şey bir web uygulamasının kullanımını içeriyor: Bir etkinlik için kayıt yaptırmak, çevrimiçi ürün satın almak, faturalarınızı ödemek, hatta oyun oynamak vb.
Web uygulamaları geniş çaplı kullanımı nedeniyle, genellikle internetteki en çok saldırıya uğrayan varlıktır ve genellikle Panera Bread ve Equifax Breach gibi geniş çaplı bir uzlaşmaya sahiptirler.
Bu ihlallerin önlenebileceği doğru mu? Evet! Ancak sadece web uygulamaları dâhili olarak veya bir danışmanlık firması tarafından iyice test edilirse. Fakat o durumda da bu tür güvenlik açıkları gözden kaçırılmış olabilir.
Bu neden olabilir? Dürüst olmak gerekirse, vasıfsız test ediciler, kısıtlayıcı kapsam, çok geniş bir proje süresi, çok az test zamanı, çok fazla web uygulaması ve yeterli sayıda testçi, kaynak kodu bulunmayışı vb. Liste uzayıp gidiyor.
Sonuçta, web uygulamalarını anlayan, nasıl oluşturulduğunu, nasıl çalıştığını, nasıl iletişim kurduklarını, hangi kütüphaneleri kullandıklarını detaylıca bilen, bir web uygulamasının saldırıya açık veya ilgi çekici kısımlarını kolayca anlayabilecek yetenekli bir testçi gerekmektedir. Testçi her şeyi tespit edebilecek mi? Hayır, elbette, insanüstü değiliz, ancak deneyim ve iyi bir bilgi birikimiyle, bir web uygulamasını gelecekteki saldırılardan en iyi şekilde koruyabilecek yeterli güvenlik açıklarını bulabileceksiniz.
Bir Pentester olarak, WAPT'ları; banka uygulamaları, internet platformları, barındırma hizmetleri, çevrimiçi mağazalar ve daha fazlası üzerinde yapacaksınız! Dolayısıyla, XSS, SQli ve CSRF gibi temel web uygulama güvenlik açıklarından daha fazlasını anlamalısınız. XXE, XML/JSON enjeksiyonu, LDAP enjeksiyonu, kod enjeksiyonu&RCE, alt alan alımı, açık yönlendirmeler, SSRF, LFI ve RFI gibi güvenlik açıklarını bilmeniz gerekir. Örneğin, belirli protokolleri ve bunların uygulamalarını bilmeniz gerekir. OAuth ve SSO gibi farklı platformların kullanımını ve Jenkins & ElasticSearch gibi güvenlik açıklarını da anlamanız gerekir.
Buna ek olarak, birçok WAPT'ın kod incelemeleri ile eşleştirilmesi, web uygulamasının oluşturulduğu dili daha iyi anlamanızı sağlar. Yani Java, JavaScript, Scala, AJAX, PHP ve Ruby gibi dilleri bilmek, kara kutuda ortaya çıkamayan gizli mücevherlerin yerini bulmaya gerçekten yardımcı olacaktır.
Araçlar:
- OWASP WAPT Testing Guide
- OWASP Top 10
- Hacker 101
- PentesterLab Bootcamp
- HackerOne Hacktivity
- Bug Bounty Writeups
- James Kettle / Albinowax Research
- Detectify Security Blog
- GracefulSecurity
- SANS Penetration Testing Blog
- The Web Application Hacker’s Handbook: Finding and Exploiting Security Flaws
- The Tangled Web: A Guide To Securing Modern Web Applications
- Apps for Testing & Practice
- SANS 2016 Holiday Hack Challenge
2. Ağ Güvenliği:
Bir ağ pentesti, ağ aygıtlarında ve bunlara bağlı ana bilgisayarlarda / sistemlerde olduğu kadar, kurumsal veya endüstriyel ağlardaki güvenlik açıklarını belirlemeyi ve bunlardan yararlanmayı amaçlar. Bu tür değerlendirmeler ile bilgisayar korsanı, şirketin iç ağına erişim sağlamak için gerçek dünyadaki bir saldırıyı simüle eder.
Şimdi, bir ağ % 100 güvenli olabilir mi? Tabii ki hayır! Hiçbir şey % 100 güvenli değil! Örneğin, Hacking Team Breach'i ele alalım. Yeterli zaman, para ve kaynaklara sahip herhangi bir karmaşık saldırgan bir şirketi ihlal edebilir; ama bu durum, ağ içinde olduklarında onlar için kolay olması gerektiği anlamına gelmez!
Başka bir örnek Ukrayna'da NotPetya malware olabilir. Bu, yeterli zaman ve kaynağa sahip bilgisayar korsanlarının bir şirkete nasıl zarar vereceğine ve diğer hedeflere karşı daha fazla saldırıya geçmek için onları nasıl kullanacaklarına dair harika bir örnektir.
Bir Pentester olarak, gerçek bir ihlal riskini değerlendirmeye çalışmakla görevlendirilirsiniz. Bu, yalnızca DC'de alan adı yöneticisi almayı değil, açıkta hangi türden özel verilerin korunmasız olduğunu kontrol etmekle ilgilidir. Değerlendirme sırasında kullanıcı hesaplarının ve kimlik bilgilerinin kolay erişilebilir olup olmadığını kontrol etmelisiniz. Müşteri bilgileri ve kredi kartları kolayca erişilebilir mi? Şirketin üyeleri kimlik avı gibi güvenlik konularında ne kadar iyi eğitim görmüş? Teknolojiler ve korumalar iyi yerleştirilmiş ve uygun şekilde yapılandırılmış mı? Ve dahası!
Network pentesti gerçekleştirebilmek için ağların nasıl çalıştığını, TCP / IP, LDAP, SNMP, SMB, VoIP, vb. teknolojileri ve iletişim protokollerini gerçekten anlamanız gerekir. Active Directory'nin yanı sıra güvenlik duvarları, IDS / IPS, Sysmon, Antivirüsler, vb. korumaları anlamanızın, bununla birlikte Windows ve Linux içsellerinin nasıl çalıştığını ve diğer kullanıcıları daha fazla tehlikeye atmak için nasıl kullanılabileceğini de anlamanız gerekir.
Network pentestleri karmaşık ve birçok hareketli parça gerektirse de, öğrenilmesi zor değildir. Ağ çevresinde nasıl hareket edeceğine dair temel bilgileri öğrendikten sonra, geri kalan her şey deneyimle gelir – benzer birçok şey gibi!
Araçlar:
- Windows APIs
- Red Team Tips
- The Hacker Playbook 3: Practical Guide to Penetration Testing
- Adversarial Tactics, Techniques & Common Knowledge
- AD Security
- Harmj0y Blogs
- HackTheBox
- IppSec’s Videos
- Awesome Pentest
- CTF Series: Vulnerable Machines
- Windows Privilege Escalation Fundamentals
- Metasploitable
- SANS Penetration Testing Blog
- Pen Test Partners Blog
- Penetration Testing Lab
- Pentestit Lab Writeups
- SANS 2017 Holiday Hack Challenge
3. Kod İnceleme:
Kod incelemesi, uygulamalardaki güvenlik açıklarını ve yanlış yapılandırmaları tanımlamak için muhtemelen en etkili tekniktir. Otomatik test araçlarının kullanımı ile birlikte kodun manuel olarak gözden geçirilmesi, mantık kusurları, yetkilendirme sorunları, yanlış şifreleme yapılandırmaları ve hatta enjeksiyon saldırıları gibi bir kara kutu pentesti gerçekleştirilirken daha önce bulunmamış olabilecek kusurların tespit edilmesine yardımcı olabilir.
Kod gözden geçirmenin tek dezavantajı, çok zaman alıcı olması ve tek bir test cihazının tüm uygulamayı kapsayacak kadar zamanının olmamasıdır. Bununla mücadele etmek için test aracı, dikkatini bilinen güvenlik açıklarına ve uygulamada yazılan dildeki tehlikeli işlev çağrılarının kullanımına odaklamaya çalışır. Örneğin, C'de strcpy () işlevinin savunmasız olduğu bilinir. PHP'de, düzgün kullanılmadığında exec () işlevi, uzaktan kod yürütülmesine yol açabilir.
Eğer kod incelemesi olmasaydı, o zaman Heartbleed, Shellshock, Drupalgeddon gibi en üretken böceklerin bazıları bulunmazdı, bu yüzden kod incelemesinin ne kadar önemli olduğu aşikârdır!
Bir pentester olarak muhtemelen C, C ++, Java, JavaScript, Scala, Ruby, PHP, Python ve hatta Go kullanılarak yapılmış birçok uygulamayı gözden geçireceksiniz. Uygulamayı ayrıntılı bir şekilde gözden geçirebilir ve ortaya çıkabilecek sorunları iyi anlamak için gereken güvenlik açıklarını veya güvenlik sorunlarını bulabilirsiniz.
Bazı güvenlik açıklarının yalnızca belirli dillerde daha yaygın olduğunu unutmayın; örneğin, bellek taşmaları, C ve C ++ gibi alt düzey dillerde daha az, Python ve Ruby gibi yüksek düzey dillerde daha fazla bulunabilir. Aynı zamanda, Python, Ruby ve Java'nın aksine C ve C ++'da çok fazla desantralizasyon zafiyeti bulamayabilirsiniz.
Sonuç olarak, bir pentester olma yolunda ilerlemenize yardımcı olacak bir programlama dili öğrenmek gerçekten iyi bir fikir. Bu durum sadece kaynak kodun belirli güvenlik açıklarını gözden geçirmenize ve anlamanıza yardımcı olmayacak, aynı zamanda angajman sırasında kullanılabilecek komut dosyaları ve istismarlar oluşturmanıza da olanak sağlayacaktır.
Araçlar:
- OWASP Code Review Introduction
- OWASP Code Review Project
- 24 Deadly Sins of Software Security: Programming Flaws and How to Fix Them
- Awesome Code Review
- Awesome Static Analysis
- Static Code Analysis Tools
- Codecademy
4. İkili Tersine Mühendislik:
Tersine mühendislik, bir hacker’ın bazı tuhaf dilleri okuduğu ve bazı büyülü sebeplerden dolayı bir istismar yarattığı veya uygulamanın nasıl işlediği açıklanamayan olgulardan oluşur.
İkili tersine mühendislik ise bir programın nasıl kullanılacağını veya belirli güvenlik açıklarını bulabilmesi için nasıl çalıştığını görmek için ayrım yapma işlemidir. Bu uygulama, sıfırıncı gün arandığında veya belirli endüstrilerdeki katılımlarda, hatta kaynak kodu sağlanmadığında sık sık kullanılmaktadır. Tersine mühendislik sayesinde, bir testçi, uygulamanın belirli işlemleri nasıl gerçekleştirdiğini, verileri nasıl depoladığını, hatta IDA Pro, Binary Ninja ve Radare2 gibi bir disassembler kullanarak nasıl belleğe yazdığını öğrenebilir.
Tersine mühendisliğin kötü amaçlı yazılımların işlevlerini tam olarak anlayabilmesi için WannaCry malware gibi örnek bir kötücül yazılım analizi kullandığını düşünebilirsiniz, ama durum böyle değil! Kötü amaçlı yazılım sadece başka bir program bu yüzden analizin sonunda bu uygulamayı tersine çeviriyorsunuz…
Örneğin, Cisco IOS için 1 günlük istismar geliştirme, Cisco Router'lardaki bir güvenlik açığından yararlanmak için tersine mühendislik ve hata ayıklama işlemlerini kullandı. Bu, basit bir pentesting ile yapılamayacak bir şey.
Bir Pentester olarak, tersine mühendislik temellerini biliyorsanız, genellikle araştırma için bilgilerinizi kullanır, sıfırıncı gün ve güvenlik açıklarını arar, özellikle donanım gömülü aygıtlarda kaynak kodun sağlanmadığında uygulamaların nasıl işlediğini anlarsınız. Ayrıca BIOS ve SMM, sanallaştırma, kapsayıcılar, güvenli önyükleme ve daha fazlasını test edebilirsiniz! Bu işi iyi yapmak için, x86 ve x64 ASM (Assembly) mimarisi hakkında bir bilginizin olması ve yığın / yığın bellek ayırma ile birlikte nasıl çalıştığı hakkında bilgi sahibi olmanız gerekir. Aynı zamanda, işletim sistemlerinin iç işleyişi hakkında düşük düzeyde de olsa bilgi sahibi olmak çok faydalı!
Bunun için öğrenme eğrisi genellikle çok yüksektir ve bu konuda yetkin olmak biraz zaman alır ama öğrendikten sonra, cephanenizde bir nükleer bomba var gibi düşünülebilirsiniz. Daha sonra da kendinizi tam teşekküllü bir hacker olarak adlandırabilirsiniz!
Araçlar:
- Introductory Intel x86: Architecture, Assembly, Applications, & Alliteration
- Introductory Intel x86-64: Architecture, Assembly, Applications, & Alliteration
- Intermediate Intel x86: Architecture, Assembly, Applications, & Alliteration
- Introduction to Reverse Engineering Software
- Introduction to Software Exploits
- Hacking, The Art of Exploitation 2nd Edition
- The Shellcoder’s Handbook: Discovering and Exploiting Security Holes
- HackDay: Learn to Reverse Engineer X86_64 Binaries
- Getting Started With Reverse Engineering
- Reverse Engineering Resources
- LiveOverflow Videos
- Exploit Exercises
5. Donanım / Gömülü Cihazlar Güvenliği:
Tersine mühendisliğin adımlarını yakından takip etmenin yolu tersine mühendisliği gerçekten iyi bir şekilde tamamlayan donanım / gömülü cihazlardır. IoT cihazlarının geliştirilmesindeki artışla, artık bu tür gömülü sistemler için güvenlik konusunda da artan bir ilgi var. Gömülü sistemler neredeyse her yerde görülüyor ve mikrodenetleyicilere dayanıyor olduğundan, bazı bilgisayar ve elektronik mühendisliği bilgisi devreye giriyor.
Bir pentester olarak, herhangi bir donanım veya gömülü cihaz güvenliği yapıyorsanız, SPI, şemaları, FPGA, UART, JTAG, vb. şeyleri anlamanız gerekir. x86 / x64 ASM ve ARM Architecture'ı bilmek, sistem görüntüsünü flash bellekten çektiğinizde veya kaynak koduna erişebildiğinizde bu tür cihazları test etmede oldukça yardımcı olacaktır.
Tersine mühendislik gibi büyük bir öğrenme eğrisi vardır, ancak temelleri öğrendikten sonra geri kalanı kolaylaşır ve zamanla çoklu değerlendirmeler yaparak deneyim kazanırsınız. Dürüst olmak gerekirse, öğrenmenin en iyi yolu ateşe atlamak ve giderken öğrenmektir.
Araçlar:
- Introduction to ARM
- Azeria Labs - ARM Tutorials
- Introduction to Basic Electronics
- How to Read a Schematic
- Reverse Engineering Flash Memory for Fun and Benefit
- Reverse Engineering Hardware of Embedded Devices
- Practical Firmware Reversing and Exploit Development for AVR-Based Embedded Devices
- DEF CON 24 Internet of Things Village - Elvis Collado - Reversing and Exploiting Embedded Devices
- Embedded Devices and Hardware Security - Introduction
- Coursera: Introduction to the Internet of Things and Embedded System
- LiveOverflow Videos - Riscure Embedded Hardware CTF
- Micro Corruption Embedded CTF
- GreatScott! Videos - Awesome Electronics Tutorials, Projects and How To’s
- EEVBlog Videos
- Hack a day Blog
- Reading Silicon: How to Reverse Engineer Integrated Circuits
6. Fiziksel Güvenlik:
Dünyanın en iyi güvenlik sistemlerine ve en iyi güvenlik ekibine sahip olabilirsiniz, ancak bir saldırgan sadece sunucularınızı ön kapıdan yürütebiliyorsa, fiziksel güvenlik devreye giriyor!
Duyulmamış bir şey, hackerların şirketlere girmesi… FRONT DOOR aracılığıyla!
Ama dürüstçe bu konuyu değerlendirmek için bir saniye ayırın. Bilgisayar sistemlerimizin, web uygulamalarımızın, fiziksel boyutta güvenlik açığını göremediğimiz ağların güvenliği ile ilgili çok şey önemsemiyoruz. Herkes uygun olmayan güvenlik kontrollerine sahip, veri çalan, kötü amaçlı yazılım üreten, hatta yıkıcı eylemler gerçekleştiren bir şirkete girebilir.
Bir Pentester olarak, bir fiziksel güvenlik değerlendirmesi yapıyorsanız, psikoloji, gözetleme, kilitleme, kilitleme baypasları, RFID, kamera sistemleri ve evrensel anahtarların kullanımı gibi çok çeşitli konuları anlamanız gerekir. Genel değerlendirmeler; fiziksel bir yeri araştırmanızı, giriş / çıkış noktalarını, korumalar, kameralar, basınç sensörleri, hareket sensörleri, arka kapak savunmaları ve daha fazlası gibi yer güvenliğini detaylandırmanızı gerektirir.
Araçlar:
- Lockpicking 101
- Lockpicking - by Deviant Ollam
- Awesome Lockpicking
- TOOOL: The Open Organisation of Lockpickers
- Lock Bypass
- Lock Wiki
- Deviant Ollam Youtube
- RFID Cloning
- UFMCS, “The Applied Critical Thinking Handbook”
- Red Team: How to Succeed By Thinking Like the Enemy
- 10 Psychological Studies That Will Boost Your Social Life
- The Ethics of Manipulation
- Psychological Manipulation Wiki
7. Mobil Güvenlik:
Android ve iOS gibi cep telefonlarının giderek artan kullanımı ile akıllı telefonlar saldırganlar için sıcak bir hedef olmaya başladı. Herkes resimlerini, belgelerini, şifrelerini, kredi kartlarını ve daha fazlasını içeren tüm yaşamlarını telefonlarında saklıyor.
Örneğin bu başlığı ele alalım, “Milyonlarca Android Cihazı, Kutusunun Dışında Zarar Görebilir!” Birçoğumuz, Google ve Apple gibi şirketlerin, eşyalarının güvenli olduğundan emin olmalarını, yani “Google'ın Kritik Android Güvenlik Açıklarını Düzeltir ” gibi başka bir başlık görmeyi bekliyoruz.
Android'in StageFright’ı, Apple’ın ImageIO'su gibi güvenlik açıklarından Qualcomm gibi üçüncü taraf satıcıların bile zayıflıklarına kadar örnekler görmek mümkün! Bu tür saldırılar en güvenli kullanıcıları bile tehlikeye atabildiğinden, mobil güvenlik konusu araştırma ve güvenlik değerlendirmelerinde ilk sıralara yükseldi.
Bir Pentester olarak, eğer mobil güvenlik alanında çalışacaksanız, o zaman ARM mühendisliği, tersine mühendislik uygulamalarını ve çekirdek işletim sistemi ile ilgili bir çok konuyu anlamanız gerekir. Android için Java ve Android Runtime'ı öğrenmek ve anlamak en iyisidir, ancak iOS için Swift ve Objective-C'yi öğrenmeniz gerekir.
Araçlar:
- Mobile Security Wiki
- Awesome Mobile Security
- The Mobile Application Hacker’s Handbook
- Android Hacker’s Handbook
- iOS Hacker’s Handbook
- iOS Application Security: The Definitive Guide for Hackers and Developers
- Android Security Internals: An In-Depth Guide to Android’s Security Architecture
- Azeria Labs - ARM Tutorials
- Reverse Engineering iOS Apps: Hacking on Lyft
- Reverse Engineering iOS Apps - iOS 11 Edition (Part 1)
- Beginners Guide to Reverse Engineering Android Apps
- Reverse Engineering APIs from Android Apps
- Reverse Engineering Android APK’s