{"id":30763516,"url":"https://github.com/manidiamarena/forkbomb","last_synced_at":"2026-05-06T01:37:45.728Z","repository":{"id":305770273,"uuid":"1023885144","full_name":"ManiDiAmarena/ForkBomb","owner":"ManiDiAmarena","description":"Analisi della Fork Bomb: Un Denial-of-Service Locale","archived":false,"fork":false,"pushed_at":"2025-07-21T21:34:06.000Z","size":22,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-04T21:25:01.000Z","etag":null,"topics":["bash","cybersecurity","denial-of-service","dos-attack","fork-bomb","linux","proof-of-concept","resource-exhaustion","security-research","shell-script","unix"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ManiDiAmarena.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-21T21:13:08.000Z","updated_at":"2025-07-21T21:36:01.000Z","dependencies_parsed_at":"2025-07-21T23:36:03.136Z","dependency_job_id":null,"html_url":"https://github.com/ManiDiAmarena/ForkBomb","commit_stats":null,"previous_names":["manidiamarena/forkbomb"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ManiDiAmarena/ForkBomb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManiDiAmarena%2FForkBomb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManiDiAmarena%2FForkBomb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManiDiAmarena%2FForkBomb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManiDiAmarena%2FForkBomb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ManiDiAmarena","download_url":"https://codeload.github.com/ManiDiAmarena/ForkBomb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManiDiAmarena%2FForkBomb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279005930,"owners_count":26083985,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","cybersecurity","denial-of-service","dos-attack","fork-bomb","linux","proof-of-concept","resource-exhaustion","security-research","shell-script","unix"],"created_at":"2025-09-04T16:04:32.467Z","updated_at":"2025-10-11T01:35:54.263Z","avatar_url":"https://github.com/ManiDiAmarena.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💣 Analisi della Fork Bomb: Un Denial-of-Service Locale\n\nQuesto documento fornisce un'analisi tecnica dettagliata di una \"Fork Bomb\" implementata come un semplice script di shell. L'obiettivo è esaminare il suo meccanismo d'azione, i componenti e l'impatto risultante su un sistema Unix-like.\n\n**⚠️ ATTENZIONE: Eseguire questo codice sul proprio sistema lo renderà immediatamente inutilizzabile, richiedendo un riavvio forzato. Procedere con la massima cautela e solo in ambienti virtualizzati e isolati destinati a test distruttivi.**\n\n## 🎯 Concetto (Proof of Concept)\n\nUna Fork Bomb è un attacco di tipo Denial-of-Service (DoS) che agisce localmente. Il suo principio operativo si basa sulla creazione rapida e ricorsiva di nuovi processi. Ogni nuovo processo (\"fork\") consuma risorse di sistema, principalmente uno slot nella tabella dei processi (PID) e tempo di CPU. L'attacco ha successo quando il numero di processi creati esaurisce le risorse disponibili, portando il sistema a uno stato di stallo completo, incapace di eseguire ulteriori operazioni, incluse quelle amministrative necessarie per terminare l'attacco.\n\n## 📜 Il Codice Sorgente\n\nLa forma più comune e concisa di una fork bomb in una shell Bourne-like è la seguente:\n````\nwhile true; do\n    nohup yes \u003e /dev/null 2\u003e\u00261 \u0026\ndone\n````\n\nA volte, viene rappresentata in una forma più oscura e compatta conosciuta come \"bash fork bomb\":\n\n````\n:(){ :|:\u0026 };:\n````\n\nEntrambe le versioni raggiungono lo stesso scopo attraverso meccanismi leggermente diversi. Per chiarezza, analizzeremo la prima versione, più leggibile.\n\n## 🔬 Analisi Dettagliata dei Componenti\n\nOgni parte di questo script ha uno scopo preciso e contribuisce all'efficacia dell'attacco.\n1. Il Loop Infinito: `while true; do ... done`\n\n    Scopo: Creare un ciclo di esecuzione che non termina mai.\n\n    Funzionamento: `true` è un comando che non fa nulla se non restituire uno stato di uscita pari a 0 (successo). Il costrutto `while` continua a eseguire il blocco di codice al suo interno finché la condizione (`true`) rimane tale, ovvero per sempre. Questo garantisce una generazione continua e ininterrotta di processi.\n\n2. Esecuzione in Background: `\u0026`\n\n    Scopo: Eseguire un comando senza attendere il suo completamento.\n\n    Funzionamento: L'operatore `\u0026` alla fine di una riga di comando istruisce la shell a lanciare il processo in background. Questo è l'elemento chiave che permette al loop `while` di iterare istantaneamente. Senza di esso, il loop attenderebbe la fine del primo processo (che non avviene mai) e non potrebbe lanciare processi successivi.\n\n3. Il Generatore di Processi: `yes`\n\n    Scopo: Creare un processo semplice che consumi attivamente CPU.\n\n    Funzionamento: Il comando `yes` è un'utility standard che stampa ripetutamente una stringa (di default, \"y\") sul suo standard output. È estremamente leggero da avviare ma impegna costantemente un thread di CPU per la sua esecuzione, rendendolo perfetto per saturare i processori.\n\n4. Prevenzione dell'Interruzione: `nohup`\n\n    Scopo: Rendere il processo immune alla disconnessione del terminale.\n\n    Funzionamento: `nohup` (NO HangUP) intercetta il segnale `SIGHUP` che il sistema invia ai processi quando la loro shell di controllo viene chiusa. Questo assicura che la bomba continui a funzionare anche se l'utente che l'ha lanciata chiude la sessione SSH o il terminale.\n\n5. Soppressione dell'Output: `\u003e /dev/null 2\u003e\u00261`\n\n    Scopo: Eliminare tutto l'output generato per evitare di riempire il disco o il terminale.\n\n    Funzionamento:\n\n    - `\u003e /dev/null`: Reindirizza lo standard output (stdout) del comando `yes` al file speciale `/dev/null`, che è un \"buco nero\" che scarta tutti i dati ricevuti.\n\n    - `2\u003e\u00261`: Reindirizza lo standard error (stderr, file descriptor 2) allo stesso posto dello standard output (stdout, file descriptor 1). Questo sopprime anche eventuali messaggi di errore, rendendo l'attacco completamente silente.\n\n## 💥 Meccanismo d'Azione e Impatto Finale\n\n1. Inizio: Il loop `while` inizia la sua prima iterazione.\n\n2. Fork: Lancia un processo `yes` in background. Il processo viene immediatamente aggiunto alla tabella dei processi del kernel e lo scheduler della CPU gli assegna del tempo di esecuzione.\n\n3. Iterazione Istantanea: Grazie all'operatore `\u0026`, il controllo torna immediatamente al loop `while`, che inizia la sua seconda iterazione senza alcun ritardo.\n\n4. Crescita Esponenziale (di fatto lineare molto rapida): I passaggi 2 e 3 si ripetono alla massima velocità consentita dalla CPU e dalla shell. In una frazione di secondo, vengono creati migliaia di processi.\n\n5. Saturazione delle Risorse:\n\n    - Esaurimento dei PID: Ogni sistema operativo ha un limite massimo di processi (configurabile tramite `kernel.pid_max`). La fork bomb consuma tutti i PID disponibili. Una volta esauriti, il sistema non può più creare alcun nuovo processo, bloccando l'avvio di programmi, l'apertura di nuove shell o persino l'esecuzione di comandi per la risoluzione dei problemi come `kill` o `pkill`.\n\n    - Saturazione della CPU: Migliaia di processi `yes` competono per il tempo di esecuzione, portando l'utilizzo di tutti i core della CPU al 100%. Lo scheduler del kernel è sovraccarico nel tentativo di gestire questa enorme quantità di processi attivi.\n\n6. Stallo del Sistema: Il sistema diventa estremamente lento o smette completamente di rispondere. L'input da tastiera e mouse viene ignorato. Le connessioni di rete vengono interrotte. L'unica soluzione praticabile è un riavvio hardware (hard reboot).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanidiamarena%2Fforkbomb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanidiamarena%2Fforkbomb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanidiamarena%2Fforkbomb/lists"}