Dijital Pazarlama - Seo Ajansı

Bilgi güvenliği - Öğrenmeye Başla

 ☀  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.

Hangi alandan başlamanız gerektiğini merak edeceksiniz, sadece Kodlama - Programlama ile başlamanızı tavsiye ederim. Bilgisayar dünyasında hangi alanda eğitim alıyor olursa olsun, tüm gençlere her zaman şunu tavsiye ediyorum.

Çünkü basitçe, bir programcının mantıksal düşünmesine sahip olduğunuzda her şey daha kolay hale gelecektir. Unutmayın, bilgisayarlar 1 ve 0 olmak üzere doğru ve yanlış, doğru ve yanlış olmak üzere 2 mantık bitinden oluşur. Yani bu yolda devam etmek için ihtiyacınız olan şeyin mantık olduğu %100 açıktır.

En azından kendinizi şu konularda temel bilgilerle donatın: İşletim Sistemi, Veri Yapıları ve ayrıca 3 veya daha fazla dilde programlama becerisi.

Kendi tutkunuzu öğrenmenin ve sürdürmenin bir yolunu bulun.

Bana gelince, PHP programlamayla başladım, internette bulunamayan küçük araçlar yaratmak hoşuma giden bir şey. Siz de aynısını yapmalı, ilgi alanlarınızı bulmalı ve bunları yaratacak araçları kullanmalısınız, sıkılmadan daha derinlemesine öğrenmeye ilgi duymanız sizin için motivasyon olacaktır.

Ben sadece sevdiği şeyin peşinden giden ve pes etmeyen bir çocuğum.

Hangi dilin diğerinden daha iyi veya daha güçlü olduğunu karşılaştırmayın. Sonuçta bu sadece insanların istediklerini hızlı ve otomatik olarak yapmaları için bir araçtır. Şöyle cümleler duydum:

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.

Yukarıdakilerin her ikisini de birleştiren asil bir kişidir. Yapay zeka bugünkü haline geldi çünkü insanlar onu buna göre hazırladılar ama birdenbire akıllı hale gelmiyor.

Tamam, yukarıda belirtilen ana alanlarla başlamaya dönelim.

Hangi alanı seçmelisiniz?

Bu muhtemelen yeni başlayanlar için en endişe verici şeydir. Ben ise uzun süredir bu işin içinde olan, her alanı ve o alanda uzmanlaşmış kişileri gözlemleyen biriyim. Her alanın güzel olduğunu, her alanın bir sanat olduğunu ve sürekli bir öğrenme süreci gerektirdiğinin farkındayım.

Önemli olan şu; nelerden hoşlanıyorsunuz, neleri kendinize uygun buluyorsunuz, neleri yaparken en çok mutlu oluyorsunuz?

Yukarıda da bahsettiğim gibi ilk önce web programlamayla başladım, çünkü küçükken yan taraftaki internetçiyi not defterine html yazıp bir web sitesi hazırlarken gördüm.

Bu yüzden bunu ilginç buluyorum ve aynı zamanda göz alıcı bir web sitesi yapmayı da seviyorum, bu yapmaktan keyif aldığım ve mutlu olduğum bir şey. Dolayısıyla o dönemde Web Uygulama Güvenliği segmentiyle başlamak benim için en uygunuydu.

Bir şey hakkında uzun süre düşünüyorsan ve onu düşünmek günün dörtte birinden fazlasını alıyorsa, bence bu hoşuna giden bir şeydir.

Yukarıdaki alanlar hakkında gerçekten hiçbir şey bilmiyorsanız, o zaman... hepsini deneyin, ama hızlıca deneyin, o alanda CTF (Capture The Flag) oynamayı deneyin, beğenip beğenmediğinizi görün, beğenmediyseniz başka bir alanı deneyin.

Daha sonra arkanıza yaslanın ve ne yaparken en mutlu olduğunuzu düşünün. İşte bu, hayatta her şeyin iyi/kötü yanları vardır, önemli olan sizin neyi sevdiğinizdir. Çünkü mutlu olmak zorundasın, o zaman çabanı ve coşkunu buna koyacaksın, ancak o zaman çok gelişebilir, yoksa her şey kaotik hale gelir, hiçbir şey olmaz, sadece benim için zaman kaybı.

Yetenekli olsanız bile her şey yine de 10.000 saat kuralına uymak zorundadır. Bu, pirinç lapası yapabilmek için 10.000 saat pratik yapmanız gerektiği anlamına geliyor.

Bunun nedeni, insanların küçük yaşlardan itibaren tutku geliştirmesi gerektiğini düşünüyorum, çünkü o zaman fazla düşünmeyeceksiniz, etrafınızdaki şeyler, yiyecek, kıyafet, para vb. hakkında endişelenmenize gerek kalmayacak.


“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 🙁

Her alandaki ilginç noktaları analiz etmeye başlayın.

Web Uygulama Güvenliği (Web uygulaması)

Bilgi çok derin olmadığı için erişimi kolaydır. İşletim Sistemlerine veya Veri Yapılarına aşina olmanıza gerek yoktur, ancak yine de yapabilirsiniz. Programlamayı bilmeniz yeterli. Çünkü programlamayı öğrendiğinizde bu hataları yapan siz olursunuz.

Öğrenmenin en hızlı ve en zor yolu, tökezleyip kendi hatalarınızı düzeltmektir.
Çok fazla Target var, bundan bahsetmek savunuculuk yapmak değil. Ancak günümüzde www (World-Wide-Web) dünyası son derece büyük olduğu açıktır; herkes kendi web sitesini oluşturabilir.

Herkesin uygulayabileceği pek çok "kum torbası" bulunmasının nedeni budur. Ama unutmayın inşa etmek zordur, yıkmak ise çok kolaydır. Düşünceli ve bilinçli olun gençler.

Pek çok araç/belge var çünkü bu, çoğu insanın erişebildiği alandır ve oluşturdukları araçlar orantılıdır. Tek bir hatadan yararlanmak için binlerce araç yaratılmıştır (tipik: SQL Enjeksiyonu).

Bu nedenle senaryo çocuğu, bu konuda herhangi bir prensip bilmeyen insanlar yine de onu başarıyla kullanabilirler. Bu kritik bir nokta, buna daha sonra değineceğim.

www'nin bugün bilmeniz gereken teknikleri / çalışma prensipleri var, çok sayıda var ve her gün değişiyorlar, ancak bunlar yalnızca temel bilgiler etrafında dönüyor, eğer onu iyi kavrarsanız, bir tekniği özümserseniz Yeni teknikler veya prensipler çok zor değildir.

Ayrıca aşağıdaki gibi modern tarayıcılardaki koruma önlemleri (azaltma) ilkelerini de güncellemelisiniz: Chrome/Edge/Firefox/...

  • 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.
P/S: Bu yazı kapsamında size onlarca kitap vermek yerine, mümkün olduğu kadar az kitap vereceğim, bir çok şeyi indirmek yerine, belli bir kitabı okumaya çalışmalısınız diye düşünüyorum. , her şeyden biraz, hiçbir şey (Ben böyleydim, işte tavsiyem).

Belirli bir miktarda bilgiyi anladığınızı bildiğinizde, daha sonra ne yapmanız ve okumanız gerektiğini otomatik olarak bileceksiniz.

Tersine mühendislik

Belli bir miktar bilgi gerektirir, temel olarak tersine mühendislik, bir programın nasıl çalıştığını anlamanıza yardımcı olur, örneğin bir mp3 dosyasının bir müzik programına indirildiğinde onu nasıl çaldığını, hangi seslerin yayıldığını, bunun yapısının ne olduğunu anlamanıza yardımcı olur. mp3 dosyası? Program hangi parçayı ve hangi notayı çalacağını nasıl biliyor?

Bugün bile telif hakkıyla korunan müzikleri dinlemek ciddi hale geldi; örneğin Spotify gibi müzik çalarlar, kullanıcıların bunları yasa dışı olarak indirmesini, saklamasını ve dağıtmasını önlemek için bu müzik dosyalarına şifreleme uyguladı.

Birçok kişi RE'nin (Tersine Mühendislik) yalnızca "tapınaklar" kullanmak için yazılımın kilidini açma/kırma ile sınırlı olduğunu düşünüyor. Belki yanlış anladınız, RE'nin amacı, nasıl çalıştığını analiz etmek bile olabilir, "öğrenmek" istediğiniz rakip bir şirketin belirli bir programının arkasındaki şık algoritma, hatta yukarıdaki örnekte olduğu gibi, kodun nasıl çözüleceğini analiz ediyor olabilir.

Spotify müzik dosyası. Dolayısıyla, bir programı RE'lemenize yardımcı olacak bilgi, üzerinde çalıştığınız nesnenin karmaşıklığına ve türüne bağlıdır. Örneğin, belirli bir çekirdek modülünü kaynak koda dönüştürmeniz gerekiyorsa, elbette Dosya Sistemi/Aygıt Kontrolü IO/Sistem Çağrıları/... hakkında ek bilgiye sahip olmanız gerekir.

Temel bilgiye gelince, şu şekilde olacaktır:
  • 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ı,...)
Bununla birlikte, kaynak koda dönüştürme/hata ayıklamayla mücadele için de teknikler var, birçok teknik/püf noktası var ve her gün iki taraf hala diğer tarafı durdurmanın yollarını bulmaya çalışıyor. Biraz kedi fare oyununa benziyor, en azından şimdilik daireler çizerek koşuşuyoruz.

  • 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.
Buna ek olarak, RE'yi öğrenmenin iyi bir yolu, birçok farklı programı, işlevi, farklı algoritmayı programlamak, derlemek ve eğer varsa, oluşturulan montaj kodunu görmek için derleyici programlara atmaktır. IDA Hex-rays veya kullanıyorsanız.

C sözde kodu oluşturmak için benzer bir Decompiler programı kullanın, ardından... bunu geçici olarak unutun ve montaj dilini, makine kodunu ve talimatların nasıl çalıştığını okumaya alışın.

Sağlam temelleri öğrenmeye çalışın, çünkü uzun mesafelere gitmek için yalnızca bunlara güvenemezsiniz. Bunları sağlam bilgiyle çözmeniz, hatta bu bilgiye dayanarak kendi araçlarınızı oluşturmanız gereken durumlar olacaktır.

Ana konuya dönelim.

Yazılımdan Yararlanma (Yazılım)

Bu sadece yazılımdaki güvenlik hatalarını bulmak ve kullanmaktır. Bu segment ile Web Uygulama Güvenliği arasındaki en önemli ve aynı zamanda en büyük ortak nokta, hataları bulmanız gerektiğidir. Çünkü onu istismar edebilmeniz için önce bir hatanın olması gerekir. Bu alanda en çok kullanılan hataları bulmanın iki yolu vardır:

Fuzzing, temel olarak, hataları bulmak için bir programa rastgele girdi sağlamak üzere fuzzer adı verilen otomatik bir program yazmanızdır. Diyelim ki aşağıdaki gibi bir C fonksiyonum var:

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.

  
        ¯\_(ツ)_/¯
---------------------------------
# Kriptografi (Kriptografi)

# Adli Tıp (Dijital Kanıt Araştırması)

# Ağ Güvenliği
---------------------------------
         ¯\_(ツ)_/¯




Şimdilik buradayım, vakit buldukça yazmaya devam edeceğim.

03.06.2024'de güncellendi, zamanla bölümlere fikir ekleyebiliyorum, dolayısıyla daha önce okuduğunuz bölümlerin içeriği değişmiş olabilir, bu nedenle ara sıra tekrar kontrol etmelisiniz.

[©] HACKİNG.COM.TR 2024

Yorumunuz..

Daha yeni Daha eski