Villabomba

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. augusztus 31-én felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .

A fork bomba  egy rosszindulatú vagy hibásan megírt program, amely vég nélkül másolatokat hoz létre magáról (a fork() rendszerhívás segítségével ), amely általában szintén elkezd másolatokat készíteni magáról stb.

Egy ilyen program végrehajtása komoly terhelést okozhat a számítási rendszerben, vagy akár szolgáltatásmegtagadást is okozhat a rendszer erőforrásainak (folyamatkezelők, memória, processzoridő) hiánya miatt, ami a cél.

A klasszikus villabomba program ( C -ben írva ) így néz ki:

#include <unistd.h> int main () { míg ( 1 ) villa (); }

A rendszererőforrás-szivárgások hasonló esetei a zombikat és árva folyamatokat generáló programok . Ha azonban a legtöbb villabombát szándékosan hozták létre, akkor ezek a problémák általában a programozó gondatlanságának vagy hozzá nem értéséből fakadnak.

Leírás

A villabomba nagyszámú másolatot készít magáról, és ezzel megpróbálja kitölteni az operációs rendszer aktív folyamatainak listáján a szabad helyet . A folyamatok listájának kitöltése után lehetetlenné válik egy hasznos program elindítása. Még ha más folyamat is leáll, és a folyamatlistában szabaddá válik a hely, nem valószínű, hogy egy hasznos program elindul, mivel a villabomba sok más példánya már várja a lehetőséget, hogy elindítsa a következő példányát.

A folyamatok listájának feltöltése mellett a virtuális memória, a CPU-idő, a foglalatok és más rendszererőforrások feltöltésére is lehetőség van. Ezen erőforrások kimerülése az operációs rendszer és/vagy a hasznos programok lelassulása vagy gyakorlatilag leállása ( számítógép lefagy ).

Lelkiismeretes programozási hiba következtében is kaphatunk villabombát. Például egy hálózati porton hallgató program egy hálózati csomag fogadásakor vagy kapcsolat létrehozásakor „beleeshet” egy végtelen körbe, amelynek során másolatokat készít magáról a csomag vagy kapcsolat feldolgozásához. Egy egyszerű programozási hiba memóriaszivárgáshoz vagy egy villabomba következményeihez vezethet.

Példák villabombákra különböző programozási nyelveken

C : [1]

#include <stdlib.h> int main ( érvénytelen ) { mert (;;) { rendszer ( "start" ); } }

vagy:

#include <unistd.h> int main ( érvénytelen ) { while ( villa ()) {}; }

Bash : [2]

 : (){  : | : & } ; :

vagy

villa () { villa | villa és } Villa

Java :

public class forkbomb { public static void main ( String [ ] args ) { Runtime . getRuntime (). exec ( new String [] { "javaw" , "-cp" , System . getProperty ( "java.class.path" ), "forkbomb" }); } }

Perl :

villa míg villa

Python :

import os míg Igaz : os . villa ()

Egyes rendszerekben az ilyen hívás tilos, a másolás csak akkor lehetséges, ha a folyamatazonosító el van mentve:

import os míg Igaz : a = os . villa ()

rubin :

villa míg villa

Második lehetőség:

hurok { villa }

PHP :

<?php while ( igaz ) { pcntl_fork (); }

Microsoft Windows kötegfájl :

: s start %0 goto : s

Második lehetőség

start %0 %0

VB.NET-en található változat

DoSystem _ _ diagnosztika . folyamat . Start ( System . Reflection . Assembly . GetExecutingAssembly ( ). Hely ) Loop While True

Pszeudokód :

alg ProgramX , miközben a true nc hívja a ProgramX cc -t con alg ProgramX-et

Kiküszöbölési nehézség

Sikeres villabomba esetén nehéz vagy szinte lehetetlen a számítógép normál működésének visszaállítása újraindítás nélkül , mivel a villabomba működésének leállításának egyetlen módja a villabomba összes futó példányának egyidejű leállítása. A legtöbb operációs rendszer megvalósításában egy folyamat leállítására szolgáló parancs meghívásához új folyamat elindítása szükséges, ami egy sikeresen futó villabomba esetén nem lehetséges.

A gyakorlatban azonban egyes villabombák nem igényelnek ilyen drasztikus intézkedéseket, és újraindítás nélkül megsemmisíthetők. Vegyük például a bomba esetét a fenti példából:

 : (){  : | : & } ; :

Ennek a kódnak az a sajátossága, hogy a másolatainak sikertelen generálása után nem hurkol , hanem kilép. Emiatt a folyamatok listája folyamatosan a feltöltődés szélén áll: a villabomba egyik példánya megszűnik, és a felszabaduló helyet azonnal elfoglalja a villabomba másik példányából újonnan létrehozott folyamat. Lehetővé válik, hogy versenyezzünk a villabombával a helyért a folyamatlistában. Ekkor előbb-utóbb lehetőség van arra, hogy egy parancsot lefuttassanak a villabomba összes példányának egyidejű megölésére, vagy egy biztonságos program futtatására, amely fokozatosan „visszaszerzi” a helyét a folyamatok listájában egészen a fork utolsó folyamatáig. bomba véget ér. Példa egy ilyen biztonságos programra zsh -ben :

while ( alvás 100 & ! ) do ; Kész

Megelőzés

A villabombák negatív hatásai megelőzésének egyik módja az, hogy erőteljesen korlátozzák a felhasználó által egyidejűleg futtatható folyamatok számát. A lefoglalt virtuális memória és egyéb rendszererőforrások mennyisége szintén korlátozott lehet. Ha a rendelkezésre álló folyamatok maximális száma kimerült, a folyamat kísérlete új folyamat létrehozására sikertelen lesz. Az indítható folyamatok maximális száma olyan legyen, hogy lehetővé tegye ésszerű hasznos számú program futtatását, de ne vezessen rendszer összeomláshoz, ha a rendszer összes felhasználója egyidejűleg villanybombát indít el.

Meg kell jegyezni, hogy a folyamatok számának korlátozása önmagában nem akadályozza meg a villabomba kilövését, hanem csak az esetleges károk minimalizálását célozza, ha az kivált.

A probléma másik megoldása a villabomba intelligens felismerése az operációs rendszer segítségével, de ez a megoldás nem talált széles körű alkalmazásra.

Van egy olyan nehézség is, hogy ha egy villabomba az összes rendelkezésre álló processzoridőt elviszi, akkor munkájának eredménye nem csak egy processzoron, hanem egy többprocesszoros rendszeren is katasztrofális lehet, még a folyamatok számának korlátozása mellett is. . Például, ha a processzorok száma 16, és a futó folyamatok maximális száma 100, akkor minden processzorra átlagosan 6-7 fut a villabomba, ami felemészti a processzoridőt. A probléma megoldása érdekében a rendszer egy processzoraffinitási korlátot alkalmaz.

Lásd még

Jegyzetek

  1. A villabomba egyik legelegánsabb példája, Markys'om
  2. A villabomba egyik legelegánsabb példája, Jaromil