Bilgisayarlı programlamada, çatal bombası (İngilizce: Fork Bomb, tavşan virüsü veya wabbit[1] olarak da adlandırılır), bir işlemin mevcut sistem kaynaklarını tüketmek, kaynak yetersizliği nedeniyle sistemi yavaşlatmak ve sonunda tamamıyla çökertmek için sürekli olarak kendini kopyaladığı bir hizmet reddi saldırısıdır.

Çatal bombasının çalışma biçimini gösteren şekil. Süreçler sürekli olarak kendilerini kopyalayarak potansiyel olarak hizmet reddine neden olur

Tarihi değiştir

1978 civarında, wabbit adı verilen çatal bombasının erken bir varyantının bir System/360 üzerinde çalıştığı bildirildi. Washington Üniversitesi'ndeki bir Burroughs 5500'de 1969'da rapor edilen RABBITS adlı benzer bir saldırıdan gelmiş olabileceğini gösteriyor.[1]

Uygulama değiştir

Çatal bombaları hem çatallanma sürecinde CPU sürecini tüketerek hem de işletim sisteminin işlem tablosunu doldurarak çalışır.[2][3] Bir çatal bombasının temel bir uygulaması, kendisinin yeni kopyalarını tekrar tekrar başlatan sonsuz bir döngüdür.

Unix benzeri işletim sistemlerinde, çatal bombaları genellikle çatal sistem çağrısını kullanmak için yazılır.[3] Çatallanmış süreçler aynı zamanda ilk programın kopyaları olduğundan, çerçeve işaretçisindeki sonraki adresten yürütmeye devam ettiklerinde, aynı sonsuz döngünün kendi kopyaları içinde durmadan çatallanmaya devam ederler; bu, süreçlerde üstel bir büyümeye neden olma etkisine sahiptir. Modern Unix sistemleri, yeni süreçleri çatallanırken genellikle bir yazma üzerine kopyalama kaynak yönetimi tekniği kullandığından[4] bir çatal bombası genellikle böyle bir sistemin belleğini doyurmayacaktır.

Microsoft Windows işletim sistemleri, Unix fork sistem çağrısına eşdeğer bir işlevselliğe sahip değildir;[5] Böyle bir işletim sistemindeki çatal bombası, mevcut bir işletim sisteminden çatallanmak yerine yeni bir süreç yaratmalıdır.

Unix kabuğu için klasik çatallama bombası örneği :(){ :|:& };:, şu şekilde daha kolay anlaşılabilir:

fork() {
  fork | fork &
}
fork

İçinde, bir işlev (fork()) kendisini (fork) olarak adlandırır, daha sonra sonucunu (|) kendisinin bir arka plan işine (&) yönlendirir. Sistem çağrılarındaki sınırlamalar göz önüne alındığında, Windows eşdeğeri batch olarak şu şekilde yazılabilir:

:loop
start %~nx0
goto loop

Bunun daha da kısa bir versiyonu, anonim fonksiyonlar kullanılarak elde edilebilir:

%0|%0

Önleme değiştir

Bir çatal bombasının çalışma modu tamamen yeni süreçler oluşturarak kapsüle edildiğinden, bir çatal bombasının tüm sistemi ciddi şekilde etkilemesini önlemenin bir yolu, tek bir kullanıcının sahip olabileceği maksimum işlem sayısını sınırlamaktır. Linux'ta bu, ulimit yardımcı programı kullanılarak gerçekleştirilebilir; örneğin, ulimit -u 30 komutu, etkilenen kullanıcıyı sahip olunan maksimum otuz işlemle sınırlayacaktır.[6] PAM etkin sistemlerde, bu sınır /etc/security/limits.conf,[7] de de ayarlanabilir ve FreeBSD'de sistem yöneticisi /etc/login.conf sınırlar koyabilir.[8] Modern Linux sistemleri ayrıca cgruplar ve işlem numarası (PID) denetleyicisi aracılığıyla daha ince taneli çatal bombası önlemeye izin verir.[9]

Ayrıca bakınız değiştir

  • Kilitlenme
  • Mantık bombası
  • Saatli bomba (yazılım)

Kaynakça değiştir

  1. ^ a b "wabbit". The Jargon Lexicon. 1 Ekim 2004. 9 Haziran 2003 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Ekim 2013. 
  2. ^ Secure Computer and Network Systems: Modeling, Analysis and Design. 2008. s. 16. ISBN 0470023244. 
  3. ^ a b Network Dictionary. 2007. s. 200. ISBN 1602670005. 
  4. ^ Operating Systems: A Concept-based Approach. 2006. s. 285. ISBN 0-07-061194-7. 
  5. ^ Python Programming On Win32: Help for Windows Programmers. 2000. s. 35. ISBN 1565926218. 
  6. ^ Advanced Bash Scripting Guide. 2005. ss. 305-306. ISBN 1430319305. 
  7. ^ Linux Administration: A Beginners Guide. 2012. ss. 364-365. ISBN 0071767592. 
  8. ^ Absolute FreeBSD: The Complete Guide to FreeBSD. 2007. ss. 198-199. ISBN 1593271514. 
  9. ^ "Process Number Controller in Documentation/ as appeared in Linux kernel 5.3". 8 Ekim 2019. 8 Ekim 2019 tarihinde kaynağından arşivlendi. 

Dış bağlantılar değiştir