LINUX.ORG.RU

Удаленный отказ в обслуживании в linux


0

0

Уязвимость позволяет удаленному пользователю с помощью специального ICMP пакета(содержащего опции record-route или timestamp) вызвать отказ в обслуживании.

>>> Подробности

★★

Проверено: Shaman007 ()

Ответ на: комментарий от anonymous

> Исходников соляриса под рукой нет, а жаль...

on-src-20060201:

bash-3.00$ grep -rw goto .|wc -l
37070 

:))

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

[root@itserver linux]# grep -rw goto .|wc -l
13802
[root@itserver linux]# uname -a
Linux itserver.gtsit.com 2.4.18-3 #1 Thu Apr 18 07:37:53 EDT 2002 i686 unknown
[root@itserver linux]#

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

> Могу сказать, что я вообще не знаю такого оператора =)

Так и я о чем говорю, когда нормально пишется код, то мне goto не нужен, причем не нарочно, а естественным образом не нужен. Становится нужен если надо срочно латать что-то.

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

Отсюда вывод - чем новее ядро, тем больше готу. Можно вместо версии использовать количество goto.

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

> Так и я о чем говорю, когда нормально пишется код, то мне goto не
> нужен, причем не нарочно, а естественным образом не нужен. 
> Становится нужен если надо срочно латать что-то.

Вообще, это такая обработка ошибок/обслуживание ресурсов. Я не ядреный программист,
но точно знаю, что в ядре куча кода типа

void some_func(int foo_handle, int bar_handle) {
  int frob_value = INVALID_FROB;
  lock(foo_handle);
  if (!really_work(bar_handle)) {
     goto release_foo;
  }
  lock(bar_handle);
  if (turbo_murbo_activate(bar_handle) != RC_OK) {
     goto release_locks;
  }
  if ((frob_value frobnicate_murbu_active(bar_handle)) == INVALID_FROB) {
     goto desactivate_bar;
  }

  // do smth with frob_value;

desactivate_bar:
  turbo_murbo_desactivate(bar_handle);
release_locks:
  unlock(bar);
release_foo:
  unlock(foo);
}

anonymous
()

мда... обновляться пока не буду, буду ждать нового ck.

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

> Вообще, это такая обработка ошибок/обслуживание ресурсов

вот иманна, это, примерно, тоже самое, что try/catch. иначе пришлось бы лепить кучу if-ов, а зачастую еще и нехилой вложенностью. вот где мозги свернуть можно.

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

>Интересно, а по какой статье можно уволить админа, поставившего 2.6.* на производственный сервер?

ты лучше спроси по какой статье можно уволить админа, разрешившего "пинги" на производственный сервер? или вообще производственный сервер голой задницей в инет или в dmz с пингами? ;)

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

>ты лучше спроси по какой статье можно уволить админа, разрешившего "пинги" на производственный сервер? или вообще производственный сервер голой задницей в инет или в dmz с пингами? ;)

Это не оправдание например ping linux.org.ru работает и что волков боятся в лес не ходить давайте вообще тагда сервер из электричейкой розтки выключим так на всякий случай

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

>Это не оправдание например ping linux.org.ru работает и что волков боятся в лес не ходить давайте вообще тагда сервер из электричейкой розтки выключим так на всякий случай при чем тут оправдание?

сервер должен быть за файерволом

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

> Так и я о чем говорю, когда нормально пишется код, то мне goto не нужен, причем не нарочно, а естественным образом не нужен.

goto пользуются программисты низкого уровня, когда язык программирования третьего поколения, типа си, используется ими, как высокоуровневый, "кроссплатформенный" ассемблер. :) Разумеется, среди таких будет много программеров дровов.

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

>иначе пришлось бы лепить кучу if-ов, а зачастую еще и нехилой вложенностью.

Если в методе много вложенных if-ов, значит метод спроектирован неправильно.

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

> сервер должен быть за файерволом

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

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

>сервер должен быть за файерволом

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

Sun-ch
()
Ответ на: комментарий от MYMUR

> Я хотел сказать "спроектирован неудачно".

Ну смотри. В той же винде. Чтобы скачать что-то с интернета через wininet, надо сначала WSAStartup, в случае удачи - InternetOpen, в случае удачи - InternetConnect, в случае удачи - InternetOpenUrl, в случае удачи - InternetReadFile. А потом ещё в обратной последовательности закрывать хэндлы. Ну что, делаем вложенные if, goto или что-то ещё? Предложи вариант. И не говори, что при программировании под линукс такого не бывает.

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

> assert(предикат, указатель на функцию(параметры))

И чем это хуже goto??? Лично мне goto понятнее и нагляднее, чем такие извраты.

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

>Ну смотри. В той же винде. Чтобы скачать что-то с интернета через wininet, надо сначала WSAStartup, в случае удачи - InternetOpen, в случае удачи - InternetConnect, в случае удачи - InternetOpenUrl, в случае удачи - InternetReadFile.

Как вариант: if(WSAStartup && InternetOpen && InternetConnect && InternetOpenUrl && InternetReadFile){ ... }

Условие раскручивается последовательно слева направо, если хоть одно выражение даст false, следующие вызваны не будут.

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

> Как вариант: if(WSAStartup && InternetOpen && InternetConnect && InternetOpenUrl && InternetReadFile){ ... }

Да-да. А в качестве сообщения об ошибке писать "Что-то не получилось, а что - хер знает. Кто-то из пяти". И потом, если не сработал InternetConnect, надо убить хендлы от WSAStartup и InternetOpen, но не убивать от остальных. И т.д.

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

>Это не оправдание например ping linux.org.ru работает и что волков >боятся в лес не ходить давайте вообще тагда сервер из электричейкой >розтки выключим так на всякий случай


chto to ya ne ponial , eto ping (icmp code 0 i 8 ) ili drugie icmp paketi ? nenado putat' odno s drugim , ping vesh' poleznaya , kak i nekotorie drugie vidi icmp messagev .

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

А что, в винде уже нельзя получить код ошибки? Или там если закроешь неоткрытый хендл случится что-то ужасное? И хендлы на открытость конечно не проверяются, я правильно понимаю?

В любом случае можно все нормально разрулить.

Когда у меня появляется много вложенных if-ов, я заново смотрю на метод --- и почему-то еще ни разу не было такого, что не удавалось привести его в божеский вид....

MYMUR ★★★★
()

Ну вот как всегда. Все говорят о чем угодно, но не о сабже.

Итак, у кого-нибудь получилось воспроизвести DoS на 2.6.14 и 2.6.15? Поделитесь рецептом, у меня никак не получается.

init ★★★★★
()
Ответ на: комментарий от Sun-ch

>Оно конечно можно пинги отрезать, но больно ущербно это, прям как в анекдоте...

это, ты, ссаныч по глупости все, да по молодости все ;)

видно тебе еще ICMP flood и DDoS со 100000 зомбей не устраивали :)

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

> А что, в винде уже нельзя получить код ошибки? Или там если закроешь неоткрытый хендл случится что-то ужасное?

Не знаю, как в винде - а в ядре наверняка. Особенно если это не opaque хендл, а указатель на структ функций, каковых полно. NULL->close() - это нихрена не хорошо. В низкоуровневом программировании (в ядре) задача управления ресурсами всегда падает на использователя этих ресурсов.

поэтому вместо if(get(a)) { if(get(b) { work(); release(b);} release(a);} пишут с goto. Потому как если ресурсов не 2, а, скажем, 4 или 6 - то само тело программы может уехать за правый край терминала...

> И хендлы на открытость конечно не проверяются, я правильно понимаю?

В ядре - нет.

> В любом случае можно все нормально разрулить.

Да. С использованием goto.

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

>Я хотел сказать "спроектирован неудачно".

>off: мозги под вечер не варят....

У тебя они вообще не варят, в C методов нету, учи матчасть.

Ubnormal
()
Ответ на: комментарий от Sun-ch

> Интересно, а по какой статье можно уволить админа, поставившего 2.6.* на производственный сервер?
Гы гы, хорошо сказал, Ссаныч. А давай так: я тебе даю ip сервера, выставленного в инет, icmp на firewall не блокируется, ядро 2.6.14.х, и даю сутки на то чтобы ты родил эксплоит к этой уязвимости и успешно его к этому серверу применил. А если не получится, мы на ЛОРе устроим конкурс на лучшую статью, по которой надо уволить Ссаныча. Устроит ?

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

> А тем, что манипулируя указателем можно менять реакцию на ошибки в runtime.

и эти люди запрещают мне ковырять в носу (с)

anonymous
()

Для статистики :)

kbps linux # grep -rw goto .|wc -l
35295
kbps linux # uname -a
Linux kbps 2.6.15-gentoo-r1 #1 SMP Mon Feb 6 20:28:00 VLAT 2006 i686 Intel(R) Pentium(R) 4 CPU 2.80GHz GenuineIntel GNU/Linux

kbps ★★★
()
Ответ на: комментарий от Sun-ch

> Надо писать макрос типа

assert существует только при с борке с поддержкой режима отладки. Учим матчасть.

> А тем, что манипулируя указателем можно менять реакцию на ошибки в runtime.

Много непонятных букв.

За такое нетривиальное использование макросов расплачиваются втридорого при отладке и аудите кода.

P.S: Был патч для одного из 2.6.x ядер, который включал поддержку C++ exeptions, но его не приняли в ванильное ядро.

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

А вот найдите 2 отличия:

Это в 2.4.32

       if (ip_options_echo(&icmp_param.replyopts, skb_in))
                goto ende;
...........

ende:
        ip_rt_put(rt);
out:
        icmp_xmit_unlock();
--------------------------------------------------------
А это уже 2.6.15

        if (ip_options_echo(&icmp_param.replyopts, skb_in))
                goto ende;
...............

ende:
        ip_rt_put(rt);
out_unlock:
        icmp_xmit_unlock();


Следует ли из этого, что 2.4.х также упадет по крайней мере также как и 2.6.х?

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

>Не знаю, как в винде - а в ядре наверняка.

Ну-у-у, понеслось....

Сначала пример из винды, когда кончились аргументы --- переключились на ядро....

Лана, закрыли.... :)

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

>У тебя они вообще не варят, в C методов нету, учи матчасть.

Глянь в зеркало, умник. Где в моей фразе "я не знаю такого оператора" ты увидел, что я пишу на С?

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

>>У тебя они вообще не варят, в C методов нету, учи матчасть.

>Глянь в зеркало, умник. Где в моей фразе "я не знаю такого оператора" ты увидел, что я пишу на С?

А ежели ты не на нем не пишешь, и даже не знаешь, как на нем структурная единица кода называется - фигли ж с "умными" мыслями вылезаешь? Да, на жаве и правда гото нечасто нужен (никогда, собственно говоря) - ну так на ней многопоточные ядра оперционных систем не каждый день пишут.

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

2 anonymous (*) (10.02.2006 18:15:38)

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

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

iptables -t mangle -N icmp-drops
iptables -t mangle -I INPUT  -p icmp -j icmp-drops
iptables -t mangle -I OUTPUT -p icmp -j icmp-drops
iptables -t mangle -A icmp-drops -p icmp --icmp-type echo-request -j ACCEPT
iptables -t mangle -A icmp-drops -j DROP




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

Ой мля, запарили анонимные "експерты"....

Писал я на С, писал.... и все равно goto нужен нечасто, если нормально проектировать функции.

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

Хотя нет. Был бы ты адекватен --- можно было бы поговорить, а так....

MYMUR ★★★★
()

бугага. так вам и надо, ляликсоиды.......... --- бздэшник

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

> Писал я на С, писал.... и все равно goto нужен нечасто, если нормально проектировать функции.

Для ядра писал? Или встроенные системы? И без goto? Ну ты, блин, тогда либо велосипедист-фанатик, либо уникальный гений, создавший новый подход к проектированию. Во второе я что-то не очень верю - у таких людей обычно времени нет на форумах флеймить.

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

А в каком еще более-менее популярном языке программирования нет функций, но есть методы? Или мсье дот-нет-программер?

> Хотя нет. Был бы ты адекватен --- можно было бы поговорить, а так....

Неадекватен - ты. Тебе уже показали, что во _всех_ ядрах используется похожий стиль управления ресурсами, с goto. И любой альтернативный вариант (вложенные if, try/catch на макросах, "освобождаем все подряд, проверяем валидность в функции освобождения") не выигрывает ни в компактности, ни в читабельности, ни в надежности. А ты - как попугай: "goto - ненужен, goto - костыль".

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

Вообще-то для сборки kernel на FreeBSD нужен /usr/src/sys,
а не /usr/src/sys/kern, так что ядром надо считать /usr/src/sys.

4.11-RELEASE

$ grep -r goto . | wc -l
7666

5.4-RELEASE

$ grep -r goto . | wc -l
10082

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

> Пинг смерти? Я думал, это только под виндой такие штучки возможны... :((

Нет, не только. Ещё под *BSD. Недавно штуки три или четыре просакивало таких же...

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

> а если завтра найдут дыру для remote exploit'a в ветке 2.х - тоже

> админы выноваты ?

Да ты че... За один только январь месяц во FreeBSD было найдено ЧЕТЫРЕ удаленные уязвимости с эксплойтами. Прикинь, сколько ща на паперти сидит старых бородатых пердунов с табличкой "will use freebsd for food"? :-)

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

Ой дурик....

>А в каком еще более-менее популярном языке программирования нет функций, но есть методы? Или мсье дот-нет-программер?

Итить.... Откуда взято "нет функций, но есть методы?" Откуда приплелся дотнет?

Или мсье не знает, что методы есть в C++? Или мсье думает, что "метод" --- это термин определенного языка, а не парадигмы программирования? Или мсье не подозревает, что C и C++ --- разные языки программирования?

Короче, разговаривать дальше смысла нет....

>А ты - как попугай: "goto - ненужен, goto - костыль"

Приведи хоть один пример, 3.14здобол....

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

>Да ты че... За один только январь месяц во FreeBSD было найдено >ЧЕТЫРЕ удаленные уязвимости с эксплойтами. Прикинь, сколько ща на >паперти сидит старых бородатых пердунов с табличкой >"will use freebsd for food"? :-)

Пиздобол ты мрачный. Нашли не 4 а 40 и не во фряхе а в линупсе!

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

> >А в каком еще более-менее популярном языке программирования нет функций, но есть методы? Или мсье дот-нет-программер?

> Итить.... Откуда взято "нет функций, но есть методы?" Откуда приплелся дотнет?

Упомянуть "проектирование методов" в контексте программирования в ядре может либо дурачок типа тебя, либо человек, отравленый Жавой. Ну либо шарпом.

> Или мсье не знает, что методы есть в C++? Или мсье думает, что "метод" --- это термин определенного языка, а не парадигмы программирования? Или мсье не подозревает, что C и C++ --- разные языки программирования?

Ты не поверишь, но я знаю еще и перл, JS, CL (плохо, учил-но-не-писал), и Haskell (см. common lisp). И термины знаю.

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

> > А ты - как попугай: "goto - ненужен, goto - костыль"

> Приведи хоть один пример, 3.14здобол....

Ты три или четыре раза заявлял "а я вот кульный программист, обхожусь без гото. Дураки это ядро программируют, наверное, если они не могут".

Или тебе пример необходимости goto? Дык кури исходники любой сетевой подсистемы любого ядра. Или любой встраиваемой операционки.

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