☀ Bilgi güvenliğini öğrenmek için ne gerektiğini merak mı ediyorsunuz?
Ne öğrenilmeli ve nasıl öğrenilmeli?
Bugün bilgisayar güvenliğini araştırmaya yeni başlayanlar için bir not yazmak istiyorum. Her alanın yanı sıra kavramlar ve araçlar hakkında çok fazla ayrıntıya girmeyeceğim;
sadece bir not, nereden başlamanız gerektiğini ve nasıl başlayacağınızı kolayca görselleştirmeniz için bir yol haritası.
Temel olarak, mevcut bilgisayar güvenliği aşağıdaki alanlara ayrılmıştır:
- Web Uygulama Güvenliği (Web uygulaması)
- Tersine mühendislik
- Yazılım Sömürüsü (Yazılım Sömürüsü)
- Kriptografi (Kriptografi)
- Adli Tıp (Dijital Kanıt Araştırması)
- Ağ Güvenliği
Programlamayı öğrenelim.
Kendi tutkunuzu öğrenmenin ve sürdürmenin bir yolunu bulun.
Bilgisayarlar hızlı ve doğru olmalarına rağmen daha az akıllıdırlar. İnsanlar son derece zekidir ancak çok yavaş ve kusurludur.
Hangi alanı seçmelisiniz?
“Neden?” diye sorma alışkanlığını edinin.Yaptığınız her şeyde, çalıştırdığınız her araçta kendinize “Neden?” diye sorun, nasıl çalışıyor, neden başarısız oluyor, neden bu şekilde sömürülmek zorunda, neden ve nedenoooo.Ayrıca belirli bir güvenlik açığının kavramını öğrenmek yerine, yapmayın!. Öğrenmenin en iyi yolu şudur: Tam olarak o hatayı yapın, benzer sorunları olan bir programcı olun, o zaman bunu en net, sistematik ve mantıklı şekilde anlayacaksınız.Bu, izlemeniz gereken uzun yolculuk için öğrenmenin doğru yoludur.İnan bana, farklı bir şekilde öğren. Artık aracı çalıştırmayın 🙁
Web Uygulama Güvenliği (Web uygulaması)
- Yaygın hatalar: Ekleme (SQL/Komut/Şablon/…), Siteler Arası Komut Dosyası Çalıştırma (XSS), Siteler Arası İstek Sahteciliği (CSRF), Sunucu Tarafı İstek Sahteciliği (SSRF), Güvenli Olmayan Doğrudan Nesne Referansları (IDOR), XML Harici Varlık (XXE),…
- HTTPS
- İçerik Güvenliği Politikası (CSP)
- Kökenlerarası Kaynak paylaşımı (COR'lar)
- X Çerçevesi
Karmakarışık Web: Modern Web Uygulamalarının Güvenliğini Sağlama Kılavuzu(Bu kitap www'nin neredeyse tamamını kapsıyor ve efsanevi bir hacker tarafından yazıldı 🙂)Uzman olunması gereken diller: HTML / Javascript / Java / PHP / ASPX / Ruby / Pythonİpuçları: Güncel kalmanın, diğer ninja web sitelerinin iyiliğini ve yaratıcılığını görmenin iyi bir yolu, hackerone / bugcrowd veya writeup'taki hata ödül raporlarını takip etmektir. Nasıl düşündüklerini, sonuç almak için nasıl mantık yürüttüklerini öğrenin.
Tersine mühendislik
- Makine kodu bilgisi (makine kodu, işlem kodu).
- Assembly dilini okuyup anlayın ve ASM kullanarak bir fonksiyon (örn. strlen?) yazabilirsiniz.
- CPU/kayıt bilgisi.
- Bir işlevin genel ve temel çalışma şekli (arabellek, çağrı kuralı, yığın çerçevesi, çağrı yığını,...)
- Anti-VM / Anti-sandbox, ikili dosyayı sanal makinede veya sanal alan ortamında çalıştırmaya karşı, ikili dosyanın yazarı bunu tespit etmenin bir yolunu bulacaktır.
- Hata ayıklamayı önleme, analistlerin kolayca hata ayıklayıcının altında çalışmasını veya hata ayıklayıcıya bağlanmasını engelleyen teknikler/püf noktaları kullanır.
- Makine/montaj kodunun kafa karıştırıcı olması, otomatik analiz programlarının analiz edilmesini zorlaştırır.
- Temel olarak ambalajlama, ikili bir dosyayı belirli bir kutuya "paketleme", tel ve bantla kafa karıştırıcı bir şekilde sarma tekniğidir ve bunu yalnızca paketleme yöntemini icat eden kişinin kolayca anlayabileceği şekilde açar. ...ama bazen onu açmak için bir kağıt kesici kullanmanız gerekir... :lulz:
- Aşağıdaki kitaptan öğrenebileceğiniz başka birçok teknik var.
Yazılımdan Yararlanma (Yazılım)
int main(){char buffer[256];scanf("%256s",buffer);printf(buffer);}
Dize biçimi hatasını kolayca bulmak amacıyla bu program için bir fuzzer yazmak için python'u kullanabilirsiniz (ancak aslında bu programda başka bir hata vardır). Çok sayıda belge var, şu videoya başvurabilirsiniz: Hacking Livestream #17: Gynvael Coldwind'in yazdığı fuzzing temelleri. Bu adamın hackleme ve CTF hakkında bir serisi var. Vaktiniz varsa araştırmalısınız.
Kabaca ve genel olarak bir fuzzer aşağıdaki adımlara sahiptir:
- Derlem sağlayın (özelleştirilmiş)
- Girişi değiştir
- Programı yukarıdaki girişle çalıştırın.
- Programın çöküp çökmediğini öğrenin.
- 2. adıma geri dönün
Çağdaş fuzzer'larda, 2. ve 3. adımlarda, aynı zamanda girdinin programda nereye gittiğini tanımak ve girdiyi bu verilere göre "akıllıca" değiştirmek anlamına gelen Geri Bildirim odaklı stratejiyi de kullanırlar. Genellikle bunu yapmak için kapsama alanını kullanırlar.
Şu anda, fuzzing de ana akım haline geliyor, tüm topluluk ilgileniyor, ayrıca çok ilginç algoritmalara sahip, son derece standart ve açık kaynaklı birçok araç var: afl-fuzz, libFuzzer, honggfuzz,... Yazmak istersen yazmak istersen
Belirli bir program için fuzzer kullanıyorsanız, kendiniz için fikir edinmek amacıyla yukarıdaki araçların kaynak kodunu okumalısınız. Hataların tespitinin daha doğru ve karmaşık hale gelmesine yardımcı olmak için kütüphanelerden/araçlardan alınan destekle birlikte sunulur (örneğin: AdresSanitizer, valgrind, ...). Bu araçların neden çalıştığını sormayı unutmayın; belgeleri ve kaynak kodunu okuyarak öğrenin.
Aslında, C/C++ ile yazılmış programların güvenliğini sağlamada daha proaktif olabilmek için geliştiricilerin kendi ürünlerini anlamalarına ve fuzz etmelerine yardımcı olmak amacıyla fuzzing ve libFuzzer'ın nasıl kullanılacağı hakkında bazı ön bilgiler yazmayı veya bir atölyede sunmayı planlıyorum. Ama ne zaman şansım olur bilmiyorum.
Fuzzing'in etkililiğinin de tartışılmasına gerek yok, bulunan ve bulunan hataların çoğu büyük ölçüde fuzzing'den kaynaklanmaktadır, çünkü bu, genellikle yalnız çalışırken bilgisayarınızı 7/24 otomatik olarak çalışacak şekilde ayarlamanıza yardımcı olur. günde sadece 8-12 saat, değil mi :p
Şöyle bir örneğim var, diyelim ki Sayın Beckham bu klipteki gibi 3 top atmak zorunda. Bazı insanlar bu klibin sahte olduğunu düşünüyor boşverin ama uzun paslarının gerçek olduğu gerçeği. Bunu yapabilmek için uzun yıllar boyunca gece gündüz pratik yapması gerekir, ancak bunu %100 yapabileceği kesin değildir.
Ama oyunun kuralları diyelim ki, 5 dakika içinde klipteki gibi kovadaki 3 balığı deneme sayısında sınırlama olmaksızın yakalamalısınız. Burada örneğin tenis ya da beyzboldaki antrenman makinesi gibi bir top atma makinesi yaratacağım.
Nasıl yapabilirim? Saniyede en az 2 atış yapabiliyor, yani 5 dakikada en az 600 atış yapabiliyorum. Ve inanıyorum ki, bu şansla, doğru atış yaparak çaba harcamadan 3 gol atacağım, sadece nesnenin nasıl çalıştığını bilmem ve o otomatik aracı yaratmam gerekiyor.
Ancak usta olmak için, üzerinde çalıştığınız hedef (nesne) hakkında daha fazla bilgi edinmek ve aracı en etkili şekilde yönlendirmek amacıyla kod incelemesini birleştirmelisiniz. Kod incelemesi nasıl çalışır? Daha fazlasını öğrenelim.
Kod incelemesi, kaynak kodunu okuyup anlamanız ve bu anlayışa dayalı olarak hataları aramanız gereken bir iştir. Bazen okuyacak kaynak kodunuz olmayabilir, onu anlamak için RE tekniklerini kullanmanız gerekir, yani üzerinde çalıştığınız şeye bağlı olarak bu alan da Tersine Mühendislik becerileri gerektirir, ancak her durumda, eğer Bu alanla ilgileniyorsanız, kendinizi bu alanı çevreleyen bilgilerle donatmalısınız.
Bir programı okuduktan ve anladıktan sonra, bulunması kolay (muhtemelen imzalarla) temel hatalar için, ancak karmaşık, mantıksal hatalar için, girdiden itibaren birleştirme oyununu oynamanız gerekir. hatalı kod satırı, bu tamamen zamanla eğitilen bir beceridir.
Bu süreç, fuzzer'ın muhtemelen ulaşamayacağı daha karmaşık hataları bulmanıza yardımcı olabilir. Çünkü ne olursa olsun belli bir açıdan bakıldığında insan beyni hâlâ aletlerden daha akıllıdır.
Kısacası, fuzzing ve kod incelemesini kendiniz dengeleyin, neyi sevdiğinizin ve güçlü olduğunuzun farkına varın ve bence ikisini birleştirmenin en iyisi olduğunu düşünüyorum.
- Bundan sonra, mevcut hatalardan yararlanma adımları, hafifletici önlemlerin nasıl atlanacağı, bu programdan yararlanma stratejileri, kayıtları kontrol etme vb. adımlar olacak. Hiçbir şey bilmeyen biri için bunu öğrenmenin en iyi yolu CTF oynamak ve yazıları okumaktır. Suto, peternguyen, meepwn/piggybird/babyphd/nightstorm ctf ekibi gibi kişilerin bloglarını Vietnamca okuyabilirsiniz. İngilizce çok geniştir. Ama unutmayın, kendi yeteneğinizle kendiniz çözmeye çalışın, sonra makalelere başvurun.
- Şu anda, bu alan hakkında daha fazla bilgi edinmek için tüm zamanımı Web segmentine odaklamayı geçici olarak bıraktım, ancak gelecekte Uygulama Güvenliği'nin (uygulama güvenliğiyle ilgili her şey, belki web, Windows'ta yazılmış bir uygulama olabileceğini düşünüyorum) herhangi bir dil) güçlü bir alan ve daha tutkuyla iş yapma fırsatı olacaktır. Genel olarak, çok fazla okuma becerisi ve hata bulma becerisi gerektirir. Bana göre hataları bulmak Bilgi Güvenliğindeki en ilginç iştir. Çünkü bu iş yaratıcılıkla dolu ve ben tekrarlayan ve biraz sıkıcı olan şeylerle pek ilgilenmiyorum.
- Yazılım hatalarından yararlanma sanatı - Nguyen Thanh Nam
- Hacking: Sömürü Sanatı
- Çevrimiçi olarak birçok laboratuvar ve kurs bulunmaktadır; şu adrese başvurabilirsiniz: https://github.com/RPISEC/MBE. Bana gelince, ben sadece Bay NamNT'nin kitabını okudum ve CTF oynayarak pratik yaptım, çünkü bu kitap temel olarak gerekli tüm bilgileri içeriyor, gerisini kendi başınıza çözmeniz ve seviyenizi geliştirmeniz gerekecek.
Yorum Gönder