Debate

🐧 [VIP Elite] Linux Kernel Exploitation: eBPF ile Container Hapishanesinden Kaçış

Iniciado por İMRAN · 06 ene 2026 23:34 · 5 Visitas · 0 Respuestas
Autor del tema #0
⚠️ YASAL UYARI VE SORUMLULUK REDDİ (DISCLAIMER):

Bu doküman, Cloud Security, DevSecOps ve Kernel Research alanlarında çalışan uzmanlar için; Linux çekirdek zafiyetlerini ve Container Escape (Konteynerden Kaçış) yöntemlerini analiz etmek amacıyla EĞİTİM AMAÇLI hazırlanmıştır.

Burada anlatılan yöntemlerin (CVE-2022-0185, CVE-2021-3490 varyasyonları vb.) izniniz olmayan sunucular veya Kubernetes kümeleri üzerinde denenmesi suçtur. Bu içeriğin kötüye kullanımından doğacak her türlü yasal sorumluluk uygulayıcıya aittir. Yazar ve ArchiveForum.org yönetimi sorumluluk kabul etmez.

1. Giriş: Çekirdeğin İçindeki Truva Atı

eBPF (Extended Berkeley Packet Filter), Linux çekirdeğinin "JavaScript"i gibidir. Nasıl ki tarayıcıda JavaScript çalıştırıp web sitesini manipüle edebiliyorsak, eBPF ile de çekirdeğin (Ring 0) içinde güvenli bir şekilde kod çalıştırabiliriz. Google, Facebook, Netflix; ağ izleme ve güvenlik için bunu kullanır.

Normalde eBPF, Verifier (Doğrulayıcı) adı verilen çok sıkı bir güvenlik mekanizmasıyla korunur. Bu mekanizma, yüklediğiniz kodun çekirdeğe zarar vermeyeceğinden emin olur.

Saldırı Mantığı:Eğer biz bu Verifier'ı kandırabilirsek (Logic Bug), çekirdek seviyesinde rastgele bellek okuma/yazma (Arbitrary Read/Write) yetkisi kazanırız. Çekirdek belleğini yazabilmek demek, Container sınırlarının buharlaşması demektir.


2. Ön Gereksinimler: Kapıyı Kim Açacak?

Bu saldırıyı yapmak için genellikle konteyner içinde root olmanız yetmez, belirli yeteneklere (Capabilities) ihtiyacınız vardır. Ancak Kubernetes ortamlarında bunlar sıkça açık unutulur:

  1. CAP_BPF veya CAP_SYS_ADMIN: Bu yetki, konteynerin çekirdeğe eBPF kodu yüklemesine izin verir. (Privileged Container'larda varsayılan olarak vardır).
  2. Unprivileged BPF: Eğer sistemde kernel.unprivileged_bpf_disabled=0 ise (ki eski dağıtımlarda böyledir), root olmaya bile gerek kalmadan saldırı yapılabilir.

3. Saldırı Aşaması 1: Verifier Bypass (Yalan Söyleme Sanatı)

eBPF Verifier, kodun her olası yolunu simüle eder. "Burada bellek dışına taşma var mı?" diye bakar.

Saldırganlar, Verifier'ın matematiksel hatalarını (Integer Overflow, Bounds Check Bypass) kullanır.

Örnek Mantık (CVE-2021-3490 benzeri):

  1. Saldırgan: "Elimde 32-bitlik bir sayı var." (Verifier: Tamam, güvenli.)
  2. Saldırgan: "Buna 1 ekledim." (Verifier: Tamam.)
  3. Saldırgan: "Şimdi bunu 64-bitlik bir işlemde kullanacağım." (Verifier burada bir hata yapar ve sayının sınırlarını yanlış hesaplar.)
  4. Sonuç: Verifier kodun sadece 10 bayt okuduğunu sanar, ama kod aslında çekirdeğin kritik bellek adreslerinden 1 GB veri okuyabilir veya yazabilir hale gelir (Out-of-Bounds Read/Write).

4. Saldırı Aşaması 2: Container Escape (Hapisten Kaçış)

Çekirdek belleğine yazma yetkisini aldık (Arbitrary Write). Peki konteynerden nasıl çıkacağız?

Hedefimiz: task_struct ve cred yapıları.

Linux'ta her işlemin (process) kimliği cred (credentials) yapısında saklanır:

  • uid (User ID)
  • gid (Group ID)
  • namespaces (Hangi konteynerde olduğu)
Vuruş:Saldırgan, eBPF programını kullanarak kendi işleminin cred yapısını bellekte bulur ve şunları yapar:

  1. UID'yi Sıfırla: uid = 0 (Artık Root'sunuz).
  2. Namespace'i Temizle: pid_namespace = &init_pid_ns (Artık konteynerde değil, ana sunucunun (Host) işlem uzayındasınız).
Bu işlem milisaniyeler sürer. Bir anda Docker shell'inden düşüp, Host makinenin root shell'ine düşersiniz.


5. Saldırı Aşaması 3: Kalıcılık (modprobe_path)

Sistemi ele geçirdik ama yeniden başlatılırsa yetkimiz gider. Kalıcılık sağlamak için en klasik Kernel Exploitation tekniği modprobe_path üzerine yazmaktır.

Linux, bilinmeyen bir dosya türüyle karşılaştığında (örneğin bozuk bir binary), bunu işlemek için /sbin/modprobe aracını çağırır. Bu yol, çekirdek belleğinde saklanır.

Biz eBPF ile bu bellek alanını değiştirip /tmp/evil.sh yaparsak ne olur?

  1. Saldırgan sunucuda geçersiz bir dosya çalıştırmayı dener.
  2. Çekirdek "Bunu nasıl açacağımı bilmiyorum, modprobe'u çağırayım" der.
  3. Ama modprobe yerine bizim /tmp/evil.sh scriptimiz Root yetkisiyle çalışır.

6. Blue Team: Çekirdeği Nasıl Zırhlarız?

Bu saldırılar çok sofistikedir ve standart Antivirüsler tarafından yakalanamaz (Çünkü zararlı kod çekirdeğin kendi parçası gibi çalışır).

Savunma Stratejileri:

  1. Unprivileged BPF'i Kapatın:sysctl -w kernel.unprivileged_bpf_disabled=1Bu komut, yetkisiz kullanıcıların eBPF yüklemesini engeller. En etkili çözümdür.
  2. Seccomp Profilleri: Docker ve Kubernetes'te varsayılan Seccomp profillerini aktif tutun. Bu, bpf sistem çağrısını (syscall) engelleyebilir.
  3. No New Privileges: Konteynerleri başlatırken securityContext.allowPrivilegeEscalation: false ayarını kullanın.
  4. Güncel Kernel: eBPF zafiyetleri genellikle yeni çıkan özelliklerde bulunur. Stabil ve LTS (Long Term Support) çekirdek sürümlerini kullanın.

7. Sonuç: Bulutun Altındaki Bomba

Konteynerler güvenli odalar gibidir, ama hepsi aynı temelin (Kernel) üzerinde durur. eBPF exploitleri, zemini patlatarak tüm odaların duvarlarını yıkar. Bir Kubernetes kümesinde tek bir pod'u ele geçirmek, doğru Kernel açığıyla tüm kümeyi (Cluster) ele geçirmek anlamına gelebilir.

Debes haber iniciado sesión para responder.

0 citas seleccionadas