LINUX.ORG.RU
ФорумTalks

Я в шоке от форкбомбы


1

0

Значит, есть така команада:
:(){ :|:&};:
По умолчанию, сия комбинация, при хорошо загруженном компе (если выполняется kde и т.п.)
вешает намертво и Linux, и FreeBSD (хотя 2-ю чуть пореже).

При этом NetBSD она на вешает: в ней по умолчанию выставлен порог
на 200 процессов - в итоге после запуска система как работала, так и
продолжает работать корректно. Только новые процессы юзер запустить не может.
При этом внешне вообще ничего не происходит, и никак сие не сказывается
на работе уже запущенных программ :)) (если таковые не порождают новые процессы, конечно).

Вот, как говорится, сиди после этого и думай: какая же из всех систем
более коробочная :) Поидее требуемая в данном случае защита от такого
локального доса стоит только в NetBSD и, по-видимому, в OpenBSD.
Вот потому видать оно и правда, что "требует меньшей квалификации при настройке :)"

Кстати, всегда думал, что killall в Open и Net отсутствует, до сегодняшенго дня.
А оказалось, что есть некий pkill, который убивает много, надёжно, быстро и качественно, в том числе и по имени жертв.

Попробовал , РАБОТАЕТ

Id ★★
()

А в линуксе тоже через PAM можно прописать ограничения, в том числе на количество процессов. А прибить процессы можно с помощью exec killall -9 bash.

suser
()

Господи!
Если у тебя много юзеров работает за компом одновременно и у некоторых руки чешутся - ставь квоты на память и все.

Думаю в каждой ОСи это возможно. Так что сравнивать по таким особенностям думаю некорректно.

Кстати, знатоки не подскажут куда копать по теме квот на память и домашние каталоги?

nosync
()

Народ!
Конечно никто не спорит о том, что все квоты во всех системах
выставляются и т.д. и т.п. Конечно, если админа не заломает, и он хорошо
знает о том, какие досы локальные бывают.
Всё же дело в том, что в NetBSD и OpenBSD это --ПО УМОЛЧАНИЮ---!
Потому и прикольна :) Хотя, я б сказал, что ИМХО, лучше б так
было во всех системах. А если кому надо больше 200 процессов - пусть явно разрешает.

Вот, например, я - ламер в дос-атаках.
Впервые о такой комбинации я случайно узнал с ЛОРа.
Испытал у себя - повесился (на FreeBSD).
Пошёл к соседу - мы с ним законнектились к 3-му челу по ssh и повесили его (gentoo).
Ну да, всех ломает такие защиты делать, хоть это и просто.
А тут даже делать ничего не надо, итак к краху систему не приведёт :)

Поэтому для малоквалифиуированного юзера NetBSD надёжней :)
Коробочная системка - ставишь - и уже всё настроено. Супер.

spinore
() автор топика
Ответ на: комментарий от spinore

В Windows много чего по дефолту настроино правильно.
В результате админ может не больше обчного юзера.

Нет уж спасибо - не стоит венду повторять.

nosync
()

Тема форкбомбы почему-то всплывает на лоре примерно раз в год. Простая правка файла /etc/security/limits.conf и выставление нормальных лимитов побеждает 99% форкбомб, кроме особенно изощрённых.

И да, pkill есть и в линуксе (входит в procps), pkill -9 -u zloy_user работает безотказно. =)

ero-sennin ★★
()
Ответ на: комментарий от spinore

> Коробочная системка - ставишь - и уже всё настроено. Супер.

Из коробки должна быть только венда.

nosync
()
Ответ на: комментарий от nosync

>В Windows много чего по дефолту настроино правильно. В результате админ может не больше обчного юзера.

Что за бред? Ничего там не настроено. Например после установки Cygwin админ может сделать dd if=/dev/zero of=/dev/sda bs=10M. :)

suser
()
Ответ на: комментарий от nosync

Кстати, в винде форкбомба не так эффективна, потому, что там нет fork'а, а есть только мееееееееееееедленный CreateProcess. Ж)

ero-sennin ★★
()
Ответ на: комментарий от nosync

Я, лично, не вижу ничего плохого в системе с уже сделанными грамотными настройками.
Не нравится - меняй. Всё как в нормальном юниксе меняется.
Тебе же не навешивают какой-то дефолтный убогий интерфейс, графическую систему или kde...
Поэтому имхо респект NetBSD за это.
Хотя всё равно прикольная мысль: типа, NetBSD - это что-то типа винды... :)) lol.

spinore
() автор топика
Ответ на: комментарий от ero-sennin

ну хорошо, если ты знаешь.
А 99% юниксоидов, возможно, вообще о форкбомбах мало чего слышали
и думают, что если нет эскалации прав в программах, то и бояться руту нечего :)

spinore
() автор топика
Ответ на: комментарий от spinore

> ну хорошо, если ты знаешь. А 99% юниксоидов, возможно, вообще о форкбомбах мало чего слышали и думают, что если нет эскалации прав в программах, то и бояться руту нечего :)

Во многих дистрибутивах по умолчанию выставленны вполне разумные лимиты. Если у кого-то не так, надо писать багрепорты дистростроителям. :)

ero-sennin ★★
()
Ответ на: комментарий от ero-sennin

Да? хм..
Интересно было бы узнать список всех дистрибов где это так, и где такого умолчания нет.

spinore
() автор топика

в macosx по умолчанию 100 процессов на юзера - так что не только в netbsd ограничение по умолчанию есть

loki_ ★★
()
Ответ на: комментарий от spinore

>А в винде есть? вы как думаете?

в виндовс SE ограничение 3 программы на юзверя. При том что это однопользовательская ос =)

geek ★★★
()

Попробовал - FreeBSD 5.4 Celer1,7 128Mb RAM Запущены иксы с Гномом, XMMS, Galeon, еще что-то по мелочи...

запустил от имени бесправного юзера - не того, под которым иксы были запущены... И что? XMMS на пару секунд заткнулся... потом в консоли, откуда бомбу запускал, повылазили сообщения типа "слишком много файлов открыто", а в системной консоли (/dev/console) ошибка "немогу пайпиться - слишком дофига уже":)) Систему на лимит процессов или памяти я не настраивал, бомба сама отвалилась... Может, это хороший тест на отказоустойчивость систем?

tim2k
()
Ответ на: комментарий от geek

Не, мне про XP интересно. Интересно то, чем все (большиснство) пользуется.

spinore
() автор топика
Ответ на: комментарий от tim2k

Запускать надо было от того юзера, от которого иксы запущены со всей шелухой! Иначе - не честно. И то.. лучше б всё ж таки под kde тестить, где запущен konqueror, куча всякой десктопной шелухи и т.п., памяти куча отжрано...

spinore
() автор топика
Ответ на: комментарий от spinore

Нее, чукча не дурак;))) я Лор до конца еще не дочитал, жалко было;))) И потом, рассматривалась возможность обрушения обычным юзером, который в консоли торчит (читай - хакер, получивший "бесправный" шелл использую руткиты)

tim2k
()
Ответ на: комментарий от spinore

> Поделись рецептом "особо извращённых бомб" или ссылкой на них, если можешь и знаешь таковые.

Хорошо помогает выделение большого количества памяти. Ещё можно отъедать побольше процессорного времени или расходовать другие ограниченные ресурсы. =)

ero-sennin ★★
()
Ответ на: комментарий от spinore

/* A simple cross-platform forkbomb
 * Copyright 2005 ero-sennin and Pe0tr
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted, provided
 * that the above copyright notice appears in all copies and that both the
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the same name not be used in advertising or
 * publicity pertaining to distribution of the software without specific,
 * written prior permission. We make no representations about the
 * suitability this software for any purpose. It is provided "as is"
 * without express or implied warranty.
 */

/* adjust the following as needed */
#define MEMSIZE 1048576

#include <stdlib.h>
#include <unistd.h>

#ifndef __unix
#include <windows.h>

char *cmdline;

void fork()
{
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        ZeroMemory(&si, sizeof(si));
        si.cb = sizeof(si);
        ZeroMemory(&pi, sizeof(pi));
        CreateProcess(0, TEXT(cmdline), 0, 0, TRUE, 0, 0, 0, &si, &pi);
}
#endif


int main(int argc, char **argv)
{
#ifndef __unix
        cmdline = argv[0];
#endif
        const int pagesize = getpagesize();
        while(1) {
                fork();
                char *mem = malloc(MEMSIZE);
                char c = 0;
                size_t i;
                for(i = 0; i < MEMSIZE; i += pagesize)
                        mem[i] = c++;
        }
        return 0;
}

ero-sennin ★★
()
Ответ на: комментарий от tim2k

А я рассматривал задачу, когда мне надо отойти, и у меня что-то считается
важное на компе... А тут друган как раз попросил чё-нить поделать
у меня под иксами, ну посадил я его и ушёл... А он возьми да проверь мою систему на отказоустойчивоть :))
У меня вот такая модель :)

spinore
() автор топика
Ответ на: комментарий от spinore

Ну и дал бы другану юзера, запустил иксы на новом экране и пусть развлекалсо бы бомбами:)) я за свою консоль НИКОГО не пускаю без моего присмотра, если надо - restricted user

tim2k
()
Ответ на: комментарий от tim2k

От своего имени - кривая прграмма (практической пользы злоумышленнику, от простого зависания, на первый взгляд незаметно).

sin_a ★★★★★
()
Ответ на: комментарий от spinore

> а у меня ulimit -u показывает 160 :) NetBSD 3.0

слишком малые значения могут повлечь за собой недоиспользование машинных ресурсов. Особливо для мощных многопроцессорных машин, типа серверов, когда тот же Апач может расфоркаться в несколько тысяч процессов.

annoynimous ★★★★★
()
Ответ на: комментарий от nosync

>В Windows много чего по дефолту настроино правильно. В результате админ может не больше обчного юзера.

Т.е. что обычному юзеру, что админу при желании систему испортить не проблема.

anonymous
()
Ответ на: комментарий от ero-sennin

БОЛЬШОЙ тебе THANKS!
Ты реально собоажаешь:)
Кажись сработало!

spinore
() автор топика
Ответ на: комментарий от Stalwart

MBR?? форкбомбой?? это как? объясни подробнее!
Надеюсь, ты не от рута запускал?
Просто, я хочу у себя тоже попробовать.

spinore
() автор топика
Ответ на: комментарий от ero-sennin

Ну хорошо, насчёт листинга бомбы тогда:
Если ты говоришь, что она из категории "извращённых"... то означает
ли это что она работает и у тебя? :)
От неё защиту можно сделать? И насколько это сложно?

spinore
() автор топика

Кстати, господа, по поводу браузеров на Gecko. Предлагаю вот что:

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 16381
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) 131072
open files (-n) 256
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 256
virtual memory (kbytes, -v) 524288
file locks (-x) unlimited

и запустить свой любимый браузер. Значения virtual memory можно изменить по вкусу, но у меня epiphany с меньшим объемом работать отказалась :)

Пока работает нормально, память не исчезает.

annoynimous ★★★★★
()
Ответ на: комментарий от spinore

> А ты запусти лучше бомбу, для которой человек тут листинг привёл :)

да я еще бомбу год назад (или 2) помню, которая успешно limits обходила. Нафиг-нафиг, у меня расчет 4-х суточный, резалтов жалко. :)

annoynimous ★★★★★
()
Ответ на: комментарий от annoynimous

Да, да, помню я эту форкбомбу. Она, в отличие от классической еще и память жрет.

Настройки ulimit для виртуальной памяти, vm.overcommitment=3 и я сплю спокойно :)

annoynimous ★★★★★
()
Ответ на: комментарий от annoynimous

> Эх, не могу удержаться... Запускаю :О

[????@node5 tmp]$ mkdir forkbomb
[????@node5 tmp]$ cd forkbomb/
[????@node5 forkbomb]$ vi forkbomb.c
[????@node5 forkbomb]$ gcc forkbomb.c
[????@node5 forkbomb]$ ls
a.out  forkbomb.c
[????@node5 forkbomb]$ ./a.out
Segmentation fault
[????@node5 forkbomb]$

хе-хе, живой! :)

учитесь, салаги!

annoynimous ★★★★★
()
Ответ на: комментарий от annoynimous

а вот что получилось при запуске под strace'ом (привожу только конец лога)

[****@node5 forkbomb]$ strace ./a.out

--- начало порезано ----
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2aaaaaac9b90) = 19188
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaaab8d9000
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2aaaaaac9b90) = 19197
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaaab9da000
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2aaaaaac9b90) = 19201
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaaabadb000
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2aaaaaac9b90) = 19203
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaaabbdc000
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2aaaaaac9b90) = 19205
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0)                                  = 0x501000
brk(0x622000)                           = 0x501000
mmap(NULL, 1183744, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2097152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x2aaaabeff000
munmap(0x2aaaabeff000, 4096)            = 0
munmap(0x2aaaac000000, 1044480)         = 0
mprotect(0x2aaaabf00000, 135168, PROT_READ|PROT_WRITE) = 0
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++



annoynimous ★★★★★
()
Ответ на: комментарий от eXOR

Насклоько я понимаю, форкбомба может только положить систему. Практической пользы злоумышленник с нее не получит?

Если так, то большого растпространения (на домашних системах) как вирусы они на получат. А на сервере - там и подход другой.

sin_a ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.