The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Новый способ совершения локальной DoS-атаки в Linux"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от opennews (??) on 25-Ноя-10, 17:51 
Найден (http://lkml.org/lkml/2010/11/25/8) довольно простой способ совершения локальной DoS-атаки в Linux, основанный на использовании функции socketpair(). Код работает от любого пользователя. Процесс находится в запущенном состоянии, но не "убивается" через SIGKILL (kill -KILL). Поглощает 100% процессора и все доступные файловые дескрипторы в ядре.


Для временного решения проблемы можно использовать grsecurity или применить к ядру патч (http://lkml.org/lkml/2010/11/25/17):


<font color="#461b7e">

diff --git a/net/unix/garbage.c b/net/unix/garbage.c
index c8df6fd..40df93d 100644
--- a/net/unix/garbage.c
+++ b/net/unix/garbage.c
@@ -259,9 +259,16 @@ static void inc_inflight_move_tail(struct unix_sock *u)
}

static bool gc_in_progress = false;
+#define UNIX_INFLIGHT_TRIGGER_GC 2000

void wait_for_unix_gc(void)
{
+       /*
+        * If number of inflight sockets is insane,
+        * force a garbage collect right now.
+        */
+       if (unix_tot_inflig...

URL: http://lkml.org/lkml/2010/11/25/8
Новость: http://www.opennet.me/opennews/art.shtml?num=28779

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Новый способ совершения локальной DoS-атаки в Linux"  +3 +/
Сообщение от Аноним (??) on 25-Ноя-10, 17:51 
Работает!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от gegMOPO4 (ok) on 25-Ноя-10, 17:54 
Что, в ядре и вправду используются конструкции вида gc_in_progress == false?!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Новый способ совершения локальной DoS-атаки в Linux"  +1 +/
Сообщение от Зилибоба (ok) on 25-Ноя-10, 17:58 
Для временного решения проблемы можно...
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Новый способ совершения локальной DoS-атаки в Linux"  +2 +/
Сообщение от JL2001 (ok) on 25-Ноя-10, 18:07 
> Для временного решения проблемы можно...

судя по отсутствию +сика перед строкой - это строка не во временном патче

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 25-Ноя-10, 18:09 
конечно, и множество других конструкций, в том числе и goto
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

23. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от gegMOPO4 (ok) on 25-Ноя-10, 21:35 
Надеюсь, не в таком (http://thedailywtf.com/Articles/Learning-Something-New.aspx) стиле?
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

4. "Новый способ совершения локальной DoS-атаки в Linux"  –4 +/
Сообщение от JL2001 (ok) on 25-Ноя-10, 18:05 
к вопросу о гарбаджколлекторе в сях - расскажите мне о ненужности сборщика мусора на мегакрутеньтру языках
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Новый способ совершения локальной DoS-атаки в Linux"  +2 +/
Сообщение от Аноним (??) on 25-Ноя-10, 18:11 
> к вопросу о гарбаджколлекторе в сях - расскажите мне о ненужности сборщика
> мусора на мегакрутеньтру языках

Вы путаете язык и программу которая на нём пишется. Разберитесь чем одно от другого отличается.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

11. "Новый способ совершения локальной DoS-атаки в Linux"  –3 +/
Сообщение от JL2001 (ok) on 25-Ноя-10, 18:57 
>> к вопросу о гарбаджколлекторе в сях - расскажите мне о ненужности сборщика
>> мусора на мегакрутеньтру языках
> Вы путаете язык и программу которая на нём пишется. Разберитесь чем одно
> от другого отличается.

тоесть программы написанные на сях требуют ручками реализовывать разные гарбаджколлекторы ?

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

13. "Новый способ совершения локальной DoS-атаки в Linux"  +1 +/
Сообщение от anonymous (??) on 25-Ноя-10, 19:19 
то есть вы увидели в новости "garbage collector" и стали пороть чепуху.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

14. "Новый способ совершения локальной DoS-атаки в Linux"  –12 +/
Сообщение от JL2001 (ok) on 25-Ноя-10, 19:54 
> то есть вы увидели в новости "garbage collector" и стали пороть чепуху.

а может чепуху пороли те кто говорил о ненужности каких либо сборщиков мусора в программах написанных на трусуперкрутьязыках ?

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Новый способ совершения локальной DoS-атаки в Linux"  +8 +/
Сообщение от anonymous (??) on 25-Ноя-10, 20:07 
найденная уязвимость не имеет отношения к отсутсвию сборщика мусора в C. упоминаемая в коде программы "сборка мусора" тоже не имеет к этому отношения. с вашими комментариями проследуйте на лор пожалуйста.
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

24. "Новый способ совершения локальной DoS-атаки в Linux"  +3 +/
Сообщение от gegMOPO4 (ok) on 25-Ноя-10, 21:43 
> тоесть программы написанные на сях требуют ручками реализовывать разные гарбаджколлекторы
> ?

Как и не на сях. Это совсем другой сборщик, он собирает совсем другой мусор.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

55. "Новый способ совершения локальной DoS-атаки в Linux"  +3 +/
Сообщение от тоже Аноним (ok) on 26-Ноя-10, 12:07 
> тоесть программы написанные на сях требуют ручками реализовывать разные гарбаджколлекторы?

С какого вдруг "требуют"? Сборщик мусора - технология, которая может быть использована хоть в ассемблере. Вы имеете в виду, что в низкоуровневых языках он не встроен в язык, как в Жабе или ДотНете? Да, не встроен, это общеизвестно. На чем написан сборщик в высокоуровневых языках - вы тоже не в курсе?

В одном вы правы - Си позволяет реализовать РАЗНЫЕ сборщики. А жабисты и дотнетчики вынуждены пользоваться одним, ОДИНАКОВЫМ ;)

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

72. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от User294 (ok) on 26-Ноя-10, 15:33 
> к вопросу о гарбаджколлекторе в сях - расскажите мне о ненужности сборщика
> мусора на мегакрутеньтру языках

Ой. Тогда получается что файловые системы с гарбаж коллектром - полное дерьмо? Заметьте, простую файловую систему с GC (например для NOR флеша) можно даже на гольном асме родить. В силу довольно простой логики сбора мусора в такой ФС и прочая.

Хинт: гарбаж колекторы не являются абсолютным злом сами по себе :). А вот когда их сватают как замену мозга - вот тут да, безмозглые програмеры это зло.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

8. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от fa email(??) on 25-Ноя-10, 18:11 
Поясните, в чем именно там проблема. Взял пользователь, да и исчерпал ресурс системы. Чем это отличается от for (;;) malloc(100500); ?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Новый способ совершения локальной DoS-атаки в Linux"  +1 +/
Сообщение от FractalizeR email(ok) on 25-Ноя-10, 18:13 
Видимо тем, что ваш вариант должен убиваться по SIGKILL. Если успеть послать этот сигнал до того, как ядро его прибьет процесс, исчерпавший память.
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Новый способ совершения локальной DoS-атаки в Linux"  +2 +/
Сообщение от Аноним (??) on 25-Ноя-10, 18:14 
> Поясните, в чем именно там проблема. Взял пользователь, да и исчерпал ресурс
> системы. Чем это отличается от for (;;) malloc(100500); ?

Тем что процесс можно убить, а тему новости — нет.
Тем что malloc тратит память польователя, а тема новости — ресурсы ядра.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

12. "Новый способ совершения локальной DoS-атаки в Linux"  –1 +/
Сообщение от Zenitur on 25-Ноя-10, 19:12 
pavlinux, пропатчил себе я ядро. У меня вопрос: может ли найтись экзотический сот, который с пропатченным ядром откажется работать? Или это исключено?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

25. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от gegMOPO4 (ok) on 25-Ноя-10, 21:50 
Сильно ли просядет производительность, если открыть 2001 сокет?
Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

76. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Zenitur on 26-Ноя-10, 16:04 
Процессор занят на 600%. 6 ядер.
Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

92. "Новый способ совершения локальной DoS-атаки в Linux"  –1 +/
Сообщение от User294 (ok) on 27-Ноя-10, 01:04 
> может ли найтись экзотический сот,

Сот? Это что? Сотовик? :)

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

16. "Новый способ совершения локальной DoS-атаки в Linux"  +1 +/
Сообщение от Аноним (??) on 25-Ноя-10, 20:15 
grsecurity не спасает
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

38. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 00:15 
Запрет на создание сокетов юзерами включён?
Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

48. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от ta (??) on 26-Ноя-10, 04:16 
до socket restrictions дело так и не дошло... хватило tpe.
Ответить | Правка | ^ к родителю #38 | Наверх | Cообщить модератору

17. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Alexey (??) on 25-Ноя-10, 20:18 
Интересно, а если внутри VPS запустить?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

31. "Новый способ совершения локальной DoS-атаки в Linux"  +2 +/
Сообщение от Аноним (??) on 25-Ноя-10, 23:05 
openvz имеет ограничение на количество unix socket внутри контекста, он спасает от этой атаки.
linux vserver вроде такого ограничения не имел - так что там эта атака пройдет на ура.
Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

18. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от rpisarev on 25-Ноя-10, 20:55 
http://lkml.org/lkml/2010/11/25/43
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

19. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 25-Ноя-10, 21:13 
мда, серьёзная штука, машину с четыремя ядрами кладёт через пару секунд в полный даун
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

20. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 25-Ноя-10, 21:15 
вообще подобного рода вещи, вроде, отправляются в закрытый список, занимающийся безопасностью в ядре
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

36. "Новый способ совершения локальной DoS-атаки в Linux"  +1 +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 00:11 
Не успели, я первый заметил :)
Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

22. "Новый способ совершения локальной DoS-атаки в Linux"  –1 +/
Сообщение от Аноним (??) on 25-Ноя-10, 21:29 
че та нынче в линухе баг за багом и очень хорошо, если не рута получают, а просто систему кладут.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

27. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 25-Ноя-10, 22:06 
сдается мне что фикс кривой.
1) он пытается запускать gc во время любого send, хотя даже школьнику понятно что наименьшие проблемы это создаст при создании сокета (к слову при закрытии - gc вызывается)

2) в RHEL5 процесс убивается на ура - но в момент смерти жрет дофига CPU
bt показывает

test          R ffff8100252e8e00     0 12575  12371                     (L-TLB)
ffff8100238e79c8 0000000000000046 ffff810000000000 dead4ead00000001
ffff8100252e8e00 ffff81003ea42e40 00000078bed19204 0000014126bfada3
ffff8100252e9010 ffffffff80524f00 ffffffff80344f00 ffff8100238e7958
Call Trace:
[<ffffffff80059705>] unix_release_sock+0x203/0x211
[<ffffffff80093a42>] __cond_resched+0x2d/0x55
[<ffffffff8006a5f3>] cond_resched+0x37/0x42
[<ffffffff8000d7d7>] dput+0x2f/0x18a
[<ffffffff80013769>] __fput+0x1b2/0x1d4
[<ffffffff800596ab>] unix_release_sock+0x1a9/0x211
[<ffffffff800303b2>] fput+0x14/0x16
[<ffffffff8024c53b>] __scm_destroy+0xa8/0xe2
[<ffffffff802a7787>] unix_destruct_fds+0x39/0x4a
[<ffffffff8024922e>] skb_release_head_state+0x161/0x1b9
[<ffffffff800596ab>] unix_release_sock+0x1a9/0x211
[<ffffffff8002c143>] __kfree_skb+0x11/0x26
[<ffffffff80249db7>] kfree_skb+0x68/0x70
[<ffffffff800596ab>] unix_release_sock+0x1a9/0x211
[<ffffffff802a72ff>] unix_release+0x21/0x23
[<ffffffff8005d145>] sock_release+0x2c/0xaf
[<ffffffff8005d345>] sock_close+0x22/0x26
[<ffffffff800136a4>] __fput+0xed/0x1d4
[<ffffffff800303b2>] fput+0x14/0x16
[<ffffffff8002642f>] filp_close+0x65/0x70
[<ffffffff8003dad9>] put_files_struct+0x6b/0xb3
[<ffffffff80016bda>] do_exit+0x70f/0xdc3
[<ffffffff80018fb2>] cache_grow+0x541/0x5a4
[<ffffffff8002e413>] get_signal_to_deliver+0x4a/0x4bc
[<ffffffff8004ff95>] debug_mutex_init+0x0/0x45
[<ffffffff8002e852>] get_signal_to_deliver+0x489/0x4bc
[<ffffffff80063532>] do_notify_resume+0xd8/0x883
[<ffffffff80047cdf>] d_rehash+0x23/0x44
[<ffffffff800246f5>] fd_install+0x30/0x6d
[<ffffffff8006c53b>] trace_hardirqs_off_thunk+0x35/0x67
[<ffffffff800663af>] int_signal+0x12/0x17

то есть вся проблема не в in flight сокетах, а в том что close() не закрыл старый unix socket и не прибил что положено.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

30. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 25-Ноя-10, 22:35 
вот так выглядит более правильно
diff --git a/include/net/af_unix.h b/include/net/af_unix.h
index 3c8af63..7ca2e4f 100644
--- a/include/net/af_unix.h
+++ b/include/net/af_unix.h
@@ -6,7 +6,7 @@
#include <linux/mutex.h>
#include <net/sock.h>

-extern void unix_inflight(struct file *fp);
+extern int unix_inflight(struct file *fp);
extern void unix_notinflight(struct file *fp);
extern void unix_gc(void);
extern void wait_for_unix_gc(void);
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index cb552e2..673ea9c 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -572,11 +572,17 @@ static struct proto unix_proto = {
  */
static struct lock_class_key af_unix_sk_receive_queue_lock_key;

+#define UNIX_INFLIGHT_TRIGGER_GC 128
+extern bool gc_in_progress;
+
static struct sock * unix_create1(struct socket *sock)
{
        struct sock *sk = NULL;
        struct unix_sock *u;

+       if (atomic_read(&unix_tot_inflight) > UNIX_INFLIGHT_TRIGGER_GC && !gc_in_progress)
+               unix_gc();
+
        if (atomic_read(&unix_nr_socks) >= 2*get_max_files())
                goto out;

@@ -1268,6 +1274,7 @@ EXPORT_SYMBOL_GPL(unix_destruct_fds);
static int unix_attach_fds(struct scm_cookie *scm, struct sk_buff *skb)
{
        int i;
+       int rc = 0;
        /*
         * Need to duplicate file references for the sake of garbage
@@ -1278,10 +1285,13 @@ static int unix_attach_fds(struct scm_cookie *scm, struct sk_buff *skb)
        if (!UNIXCB(skb).fp)
                return -ENOMEM;

-       for (i=scm->fp->count-1; i>=0; i--)
-               unix_inflight(scm->fp->fp[i]);
+       for (i=scm->fp->count-1; i>=0; i--) {
+               rc = unix_inflight(scm->fp->fp[i]);
+               if (rc)
+                       break;
+       }
        skb->destructor = unix_destruct_fds;
-       return 0;
+       return rc;
}

/*
diff --git a/net/unix/garbage.c b/net/unix/garbage.c
index 5f96cea..4042e9a 100644
--- a/net/unix/garbage.c
+++ b/net/unix/garbage.c
@@ -124,21 +124,25 @@ static struct sock *unix_get_socket(struct file *filp)
  *     descriptor if it is for an AF_UNIX socket.
  */

-void unix_inflight(struct file *fp)
+int unix_inflight(struct file *fp)
{
+       int ret = 0;
        struct sock *s = unix_get_socket(fp);
        if(s) {
                struct unix_sock *u = unix_sk(s);
                spin_lock(&unix_gc_lock);
-               if (atomic_inc_return(&u->inflight) == 1) {
+               ret = atomic_inc_return(&u->inflight);
+               if (ret == 1) {

                        BUG_ON(!list_empty(&u->link));
                        list_add_tail(&u->link, &gc_inflight_list);
                } else {
                        BUG_ON(list_empty(&u->link));
                }
                atomic_inc(&unix_tot_inflight);
+               ret = ret > get_max_files();
                spin_unlock(&unix_gc_lock);
        }
+       return ret;
}
EXPORT_SYMBOL_GPL(unix_notinflight);

@@ -270,7 +274,7 @@ static void inc_inflight_move_tail(struct unix_sock *u)
                list_move_tail(&u->link, &gc_candidates);
}

-static bool gc_in_progress = false;
+bool gc_in_progress = false;

void wait_for_unix_gc(void)
{

ну и для параноиков sysctl -w fs.files-max=1000

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

39. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 00:29 
sysctl -w fs.file-max=1000

Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

59. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 13:29 
и загубишь все на корню - слишком глобальная эта ручка, а если в фиксе заменить за get_max_file() на NR_FILES просто ограничишь очередь сообщений до 8к. и все будет жить.
Ответить | Правка | ^ к родителю #39 | Наверх | Cообщить модератору

64. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 14:06 
> и загубишь все на корню - слишком глобальная эта ручка, а если
> в фиксе заменить за get_max_file() на NR_FILES просто ограничишь очередь сообщений
> до 8к. и все будет жить.

Не, там синтаксисеская обшибка

вместо
fs.files-max, надо
fs.file-max

Ответить | Правка | ^ к родителю #59 | Наверх | Cообщить модератору

70. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 15:30 
ааа. это я полусонным рисовал по памяти.
спасибо.
Ответить | Правка | ^ к родителю #64 | Наверх | Cообщить модератору

71. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 15:32 
> ааа. это я полусонным рисовал по памяти.
> спасибо.

просто максимальное количество unix sockets это 2*get_max_files().
так что ddos тулза упрется в нее в конце концов - но системе станет хреново к тому моменту.
А потом exit_task -> put file struct - будет оооочень долгим ибо их дохрена.

Ответить | Правка | ^ к родителю #70 | Наверх | Cообщить модератору

74. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 15:49 
>> ааа. это я полусонным рисовал по памяти.
>> спасибо.
> просто максимальное количество unix sockets это 2*get_max_files().
> так что ddos тулза упрется в нее в конце концов - но
> системе станет хреново к тому моменту.
> А потом exit_task -> put file struct - будет оооочень долгим ибо
> их дохрена.

Ну там дальше идет в ход schedule(), по этому при больших file-max,
дело до SIG_KILL дойдет не скоро. Более того, его же надо чем-то послать -
терминал пустить, bash породить, который сам ещё форкнется и уж потом exec_нет kill

Я вот опытным путём дошёл до значения 84000, нагрузка на CPU стала от 75% до 98%

Ответить | Правка | ^ к родителю #71 | Наверх | Cообщить модератору

77. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 16:13 
exit_task прервать нельзя - в этом code path нету мьютексов - только spinlock / rwlock / rcu.
поэтому schedule() вызвать некому.
при всем этом оно еще держит на себе BKL и стопку локов (один из которых помоему task_lock) - поэтому ошибка которая должна приводить с 100% загрузки на одном CPU - не дает работать на других.
в моей тестовой vmware + RHEL5 - загрузка сразу взлетела на 100%, но kill можно было послать, а потом система стала в ступор пытаясь в течении нескольких минут освобожать файловые дискрипторы.
Это и послужило причиной того что оригинальный патч был отвергнут и написана эта затычка, который не спасет если добавить fork() или просто запустить несколько экземпляров - но ослабит атаку.

А дальше подождем правильного фикса.

Ответить | Правка | ^ к родителю #74 | Наверх | Cообщить модератору

80. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 16:25 
> exit_task прервать нельзя - в этом code path нету мьютексов - только
> spinlock / rwlock / rcu.
> поэтому schedule() вызвать некому.

void wait_for_unix_gc(void)
{
        wait_event(unix_gc_wait, gc_in_progress == false);
}

#define wait_event()    
http://lxr.linux.no/#linux+v2.6.36/include/linux/wait.h#L217

schedule_timeout()
http://lxr.linux.no/#linux+v2.6.36/kernel/timer.c#L1430

шыдуля().

Ответить | Правка | ^ к родителю #77 | Наверх | Cообщить модератору

82. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 16:41 
>[оверквотинг удален]
>> spinlock / rwlock / rcu.
>> поэтому schedule() вызвать некому.
> void wait_for_unix_gc(void)
> {
>         wait_event(unix_gc_wait, gc_in_progress == false);
> }
> #define wait_event()
> http://lxr.linux.no/#linux+v2.6.36/include/linux/wait.h#L217
> schedule_timeout()
> http://lxr.linux.no/#linux+v2.6.36/kernel/timer.c#L1430

С теперь козырный вопрос - где вы в exit_task увидели вызов wait_for_unix_gc ?
эта функция вызывается при send() если не путаю и при close(), но close на сокет уже вызывался из приложения - только ресурсы это не освободило.

Ответить | Правка | ^ к родителю #80 | Наверх | Cообщить модератору

87. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 18:34 
> но close на сокет уже вызывался из приложения

так там же for (;;)

Ответить | Правка | ^ к родителю #82 | Наверх | Cообщить модератору

88. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 18:50 
позволю себе напомнить код "эксплойта"
int main ()
{
  int fd[2], ff[2];
  int target;
  if (socketpair (PF_UNIX, SOCK_SEQPACKET, 0, fd)==-1)
    return 1;
  for (;;)
  {
    if (socketpair (PF_UNIX, SOCK_SEQPACKET, 0, ff)==-1)
    return 2;
    send_fd (ff[0], fd[0]);
    send_fd (ff[0], fd[1]);
    close (fd[1]); <<< это что ?
    close (fd[0]); <<< и вот это ?
    fd[0] = ff[0];
    fd[1] = ff[1];
  }
}

если хорошо посмотрим в код net/unix

static int unix_release_sock(struct sock *sk, int embrion)
{
...

        if (unix_tot_inflight)
                unix_gc();              /* Garbage collect fds */

        return 0;
}


unix_release
{
unix_release_sock().
}
..

static const struct proto_ops unix_stream_ops = {
        .family =       PF_UNIX,
        .owner =        THIS_MODULE,
        .release =      unix_release,
..
}

Ответить | Правка | ^ к родителю #87 | Наверх | Cообщить модератору

90. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 19:56 
Чёй-та я не пойму хода Ваших мыслей.

>   for (;;)
>   {
>     if (socketpair (PF_UNIX, SOCK_SEQPACKET, 0, ff) == -1) return -1;
>     close (fd[1]); <<< это что ?
>     close (fd[0]); <<< и вот это ?
> }

Схема такая

for(;;) {
...
close (1);
|_
  unix_release()
  |_
    unix_release_sock().
    |_
       unix_gc();      

close(0);
|_
  unix_release()
  |_
    unix_release_sock().
    |_
       unix_gc();      
}

Ответить | Правка | ^ к родителю #88 | Наверх | Cообщить модератору

94. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 27-Ноя-10, 23:31 
я там тоже не все понял, но факт в том что in flight реквесты накапливаются на одном сокете.
из-за этого unix_gc не может пометить этот сокет как gc_candidate и прибить.
почему так - не разбирался. если есть желание добавь стопку printk и посмотри.
Но это подтверждается патчем - который срабатывает по привышению количества in flight на сокете.
Ответить | Правка | ^ к родителю #90 | Наверх | Cообщить модератору

89. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от h4tr3d email(ok) on 26-Ноя-10, 18:52 
На своём EeePC 1000 при дефолтных (сиречь моих рабочих настройках) проверил:
fs.file-max = 101749

в /etc/sysctl.conf только:
# Disable packet forwarding
net.ipv4.ip_forward=0
# Disable the magic-sysrq key (console security issues)
kernel.sysrq = 0
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
vm.dirty_writeback_centisecs=1500

ядрышко: 2.6.35.8, памяти 1024Мб (часть на видео расходуется), CPU - Atom N270

как результат, система стала заметно дольше откликаться, но и после 10 минут работы бомбы, терминал запустился где-то за 15 секунд, правда для убийства пришлось ввести что-то вроде:
while true do killall -9 tst; done

и долго ждать убийства всего этого безобразия :)

Ответить | Правка | ^ к родителю #74 | Наверх | Cообщить модератору

33. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 25-Ноя-10, 23:30 
вобщем фикс действительно кривой.
проблема вот в чем
1) мы посылаем сообщение с прикрепленным файловым дискриптором в адрес сокета из которого не читаем
2) kernel берет ссылку на дискриптор и создает skb.
3) этот skb помещается в очередь сокета
4) закрываем сокет на userland

**** КВА ****
дискриптор не освобождается - так как последний реферес держится skb пакетом, который отпустится как только это сообщение прочитают из сокета.

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

фиксов тут по сути 2
1) тот что я нарисовал выше - тупо ограничивать длину очереди на сокете.
2) более корректным вариантом будет такое - при закрытии сокета проверять в каких skb присутсвует он, и удалять из очереди. в этом случае reader просто не прочитает закрытые файловые дискрипторы, но возни тут не на 5 строк.

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

32. "Новый способ совершения локальной DoS-атаки в Linux"  +1 +/
Сообщение от Buy email(??) on 25-Ноя-10, 23:30 
Запустил, система тут же ушла в даун, даже на другой десктоп не смог переключиться (там был запущен top), минуты через три нажал reset, но комп не смог загрузиться - сработала система защиты на материнке (у меня такое когда-то случалось когда баловался с разгоном проца), потом ящик всёже загрузился с третьей попытки. Прикольно :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

37. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 00:14 
> Запустил, система тут же ушла в даун, даже на другой десктоп не
> смог переключиться (там был запущен top), минуты через три нажал reset,
> но комп не смог загрузиться - сработала система защиты на материнке
> (у меня такое когда-то случалось когда баловался с разгоном проца), потом
> ящик всёже загрузился с третьей попытки. Прикольно :)

Вы эта того, аккуратнее. В новости же написано, что работает!!! :)

Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

34. "Новый способ совершения локальной DoS-атаки в Linux"  –1 +/
Сообщение от тигар (ok) on 25-Ноя-10, 23:54 
на самом деле полезная вещь - можно отапливать ЦОДы поставив туда стойки с линакс-машинами.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

75. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от User294 (ok) on 26-Ноя-10, 15:52 
> на самом деле полезная вещь - можно отапливать ЦОДы поставив туда стойки
> с линакс-машинами.

С *BSD такое тоже вполне катит, судя по коментам юзвергов тут и на хабре.

Ответить | Правка | ^ к родителю #34 | Наверх | Cообщить модератору

81. "Новый способ совершения локальной DoS-атаки в Linux"  –1 +/
Сообщение от Аноним (??) on 26-Ноя-10, 16:28 
>> на самом деле полезная вещь - можно отапливать ЦОДы поставив туда стойки
>> с линакс-машинами.
> С *BSD такое тоже вполне катит, судя по коментам юзвергов тут и
> на хабре.

Проверил, у меня в FreeBSD 8.1, 7.3 и 6.4 не работает. Видимо комментаторы с хабра от рута тот экспоит запускали.

Ответить | Правка | ^ к родителю #75 | Наверх | Cообщить модератору

40. "Новый способ совершения локальной DoS-атаки в Linux"  +3 +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 00:47 
Прикол, Debian 6.0 в даун не ушёл, только матерился, что "too many open files",
и удалось корректно выключить через Кнопку "Выйти" на панели.

Всё, пипец!!! Это окончательный приговор SuSE :)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

41. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 02:14 
И ещё apt-get upgrade работает :)

http://ipicture.ru/uploads/20101126/hSG1NNU3.png

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

42. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 02:45 
как выполнить на freebsd?
что-то не компилится...
Ответить | Правка | ^ к родителю #41 | Наверх | Cообщить модератору

43. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 03:05 
Ну это уж не сюда.
Ответить | Правка | ^ к родителю #42 | Наверх | Cообщить модератору

51. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 08:33 
> как выполнить на freebsd?
> что-то не компилится...

Попробуйте такой вариант: http://lists.freebsd.org/pipermail/freebsd-bugs/2009-Februar...

Ответить | Правка | ^ к родителю #42 | Наверх | Cообщить модератору

56. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от oops (ok) on 26-Ноя-10, 12:16 
см. ниже
Ответить | Правка | ^ к родителю #42 | Наверх | Cообщить модератору

63. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от fidaj (ok) on 26-Ноя-10, 13:42 
> как выполнить на freebsd?
> что-то не компилится...

replace SOCK_SEQPACKET on SOCK_DGRAM

Ответить | Правка | ^ к родителю #42 | Наверх | Cообщить модератору

62. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 13:36 
шревты!
Ответить | Правка | ^ к родителю #41 | Наверх | Cообщить модератору

44. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 03:13 
Вобщам дела такие

# sysctl -w fs.file-max=84000 (где-то от 40000 до 90000)
Больше 200.000 появляются сильные тормоза, а при 500.000+ можно сказать зависон.
Приводит к возможности реакций на Ctrl-Alt-Fn, запуска консоли и kill -9
или  корректного ребута.
Да, да, на kill -9 оно реагирует, но только минуты через 3 :)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

45. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 03:44 
Все линуксовые серваки своему хостеру положил. FreeBSD'шные стоят как ни в чем не бывало.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

46. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 03:45 
> FreeBSD'шные стоят как ни в чем не бывало.

"Новый способ совершения локальной DoS-атаки в Linux"

Где ты слово FreeBSD увидел?


Ответить | Правка | ^ к родителю #45 | Наверх | Cообщить модератору

47. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 03:53 
А где я должен был его увидеть? В новости про уязвимость его разумеется нет.
Ответить | Правка | ^ к родителю #46 | Наверх | Cообщить модератору

50. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 08:22 
> А где я должен был его увидеть? В новости про уязвимость его
> разумеется нет.

Капитан, Вы?

Ответить | Правка | ^ к родителю #47 | Наверх | Cообщить модератору

73. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от User294 (ok) on 26-Ноя-10, 15:36 
> "Новый способ совершения локальной DoS-атаки в Linux"
> Где ты слово FreeBSD увидел?

Наверное где-то в районе http://habrahabr.ru/blogs/linux/108835/ - там народ почему-то утверждает что и некоторые BSD таким манером кладутся (лично не проверял, однако судя по чертыханиям народа - вполне себе работает и на разных *BSD).

Ответить | Правка | ^ к родителю #46 | Наверх | Cообщить модератору

49. "Новый способ совершения локальной DoS-атаки в Linux"  +2 +/
Сообщение от Аноним (??) on 26-Ноя-10, 08:21 
"сломал крякер своего провайдера, теперь сидит без интернета"
Ответить | Правка | ^ к родителю #45 | Наверх | Cообщить модератору

52. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от oops (ok) on 26-Ноя-10, 11:26 
freebsd тоже подвержена, по крайней мере 8.1 релиз - точно. Только что в ребут ушла
Ответить | Правка | ^ к родителю #45 | Наверх | Cообщить модератору

53. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от oops (ok) on 26-Ноя-10, 11:36 
только для BSD надо немного код изменить
добавить заголовочные файлы

#include <sys/mount.h>
#include <sys/wait.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

и заменить все SOCK_SEQPACKET на SOCK_DGRAM.

8.1-RELEASE без разговоров сразу в ребут =(

Ответить | Правка | ^ к родителю #52 | Наверх | Cообщить модератору

54. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от oops (ok) on 26-Ноя-10, 11:41 
тьфу, столько заголовочных написал, не туда посмотрел. Хотя и так работать будет
Ответить | Правка | ^ к родителю #53 | Наверх | Cообщить модератору

69. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от чупакабра on 26-Ноя-10, 15:06 
> только для BSD надо немного код изменить

Без бубна не работает? :)

Ответить | Правка | ^ к родителю #53 | Наверх | Cообщить модератору

78. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от oops (ok) on 26-Ноя-10, 16:20 
великий гуру Си?
Ответить | Правка | ^ к родителю #69 | Наверх | Cообщить модератору

83. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от sacha email on 26-Ноя-10, 17:03 
>[оверквотинг удален]
> #include <sys/mount.h>
> #include <sys/wait.h>
> #include <errno.h>
> #include <fcntl.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <unistd.h>
> и заменить все SOCK_SEQPACKET на SOCK_DGRAM.
> 8.1-RELEASE без разговоров сразу в ребут =(

Выставил sbsize в 393216 - перестало.

Ответить | Правка | ^ к родителю #53 | Наверх | Cообщить модератору

84. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 17:40 

> Выставил sbsize в 393216 - перестало.

и NFS перестала запускаться, и SSH отвалилось :-(

Ответить | Правка | ^ к родителю #83 | Наверх | Cообщить модератору

85. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от sacha email on 26-Ноя-10, 17:58 
>> Выставил sbsize в 393216 - перестало.
> и NFS перестала запускаться, и SSH отвалилось :-(

У меня ssh не отвалилось.
nfs нету.
sbsize не на всех, а только на user-ов, через login.conf
На моей конфигурации тест отрабатывает 30 раз при таком значении и завершается.

Ответить | Правка | ^ к родителю #84 | Наверх | Cообщить модератору

95. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 28-Ноя-10, 01:13 
>>> Выставил sbsize в 393216 - перестало.
>> и NFS перестала запускаться, и SSH отвалилось :-(
> У меня ssh не отвалилось.
> nfs нету.
> sbsize не на всех, а только на user-ов, через login.conf
> На моей конфигурации тест отрабатывает 30 раз при таком значении и завершается.

Ну вы блин даёте! (с)

Ответить | Правка | ^ к родителю #85 | Наверх | Cообщить модератору

91. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 23:24 
Мне данная мера не помогла. Попробуйте запустить несколько процессов. У меня при sbsize=8M и лимите процессов в 24 тот же кернел паник.
Ответить | Правка | ^ к родителю #83 | Наверх | Cообщить модератору

93. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от alvarez on 27-Ноя-10, 03:06 
У меня FreeBSD 8.1-RELEASE-p1 - уходит в ребут.

В консоли светится:
kernel: Cannot dump. Device not defined or unavailable.
kernel: Automatic reboot in 15 seconds - press a key on the console to abort

Увеличил maxsockbuf до 393216 по рекомендации sacha (по дефолту - 262144)
# sysctl -w kern.ipc.maxsockbuf=393216

Тоже не помогло. Идеи?

Ответить | Правка | ^ к родителю #83 | Наверх | Cообщить модератору

57. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от прохожий on 26-Ноя-10, 13:00 
Вообще-то эта проблема была обнаруженна 23-го ноября парнем по имени Vegard Nossum
(см. http://thread.gmane.org/gmane.linux.kernel/1067149)

а этот Марк Коренберг (http://lkml.org/lkml/2010/11/25/8) - просто быдлоадмин (см. http://mmarkk.moikrug.ru/), который перепостил код Vegard'а.

и да, этот трабл - это типичная, известная уже миллион лет fork-бомба (http://en.wikipedia.org/wiki/Fork_bomb).

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

60. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 13:32 
> Вообще-то эта проблема была обнаруженна 23-го ноября парнем по имени Vegard Nossum
> (см. http://thread.gmane.org/gmane.linux.kernel/1067149)
> а этот Марк Коренберг (http://lkml.org/lkml/2010/11/25/8) - просто быдлоадмин (см. http://mmarkk.moikrug.ru/),
> который перепостил код Vegard'а.
> и да, этот трабл - это типичная, известная уже миллион лет fork-бомба
> (http://en.wikipedia.org/wiki/Fork_bomb).

нет. не fork bomb.. а чуть другое. забываем вычитывать с сокета сообщения содержащие внутри ссылку на файловый дисткриптор.

Ответить | Правка | ^ к родителю #57 | Наверх | Cообщить модератору

61. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 13:34 
>> Вообще-то эта проблема была обнаруженна 23-го ноября парнем по имени Vegard Nossum
>> (см. http://thread.gmane.org/gmane.linux.kernel/1067149)
>> а этот Марк Коренберг (http://lkml.org/lkml/2010/11/25/8) - просто быдлоадмин (см. http://mmarkk.moikrug.ru/),
>> который перепостил код Vegard'а.
>> и да, этот трабл - это типичная, известная уже миллион лет fork-бомба
>> (http://en.wikipedia.org/wiki/Fork_bomb).
> нет. не fork bomb.. а чуть другое. забываем вычитывать с сокета сообщения
> содержащие внутри ссылку на файловый дисткриптор.

ах, да - причем не просто файловые дискрипторы - а _закрытые_ файловые дискрипторы. смысла в которых не больше нуля ибо попытка их задействовать вернет -ENOFILE или что-то такое.

Ответить | Правка | ^ к родителю #60 | Наверх | Cообщить модератору

66. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 14:28 
> а этот Марк Коренберг (http://lkml.org/lkml/2010/11/25/8)
> - просто быдлоадмин (см. http://mmarkk.moikrug.ru/),
> который перепостил код Vegard'а.

В оригинале действительно форков напихано, более того, два раза по while (1) {}
а это быдлоадмин упростил.
  

Ответить | Правка | ^ к родителю #57 | Наверх | Cообщить модератору

79. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от Аноним (??) on 26-Ноя-10, 16:22 
в фоках и дело :)
когда количество таких процессов становится > N_CPU то на exit_task будет уходить время всех процов - и это будет весело, без форка должно нормально жить на 2-4х CPU.
Ответить | Правка | ^ к родителю #66 | Наверх | Cообщить модератору

58. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от прохожий on 26-Ноя-10, 13:28 
по теме - протестил на том что было под руками: трабл подтвердился на Ubuntu 10.10 x86_64 и Debian 5.0.6 x86_64. на RHEL AS 4 U4 x86_64 не прокатило! видимо проблеме подверженны только ванильные ядра.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

65. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 14:16 
> по теме - протестил на том что было под руками: трабл подтвердился
> на Ubuntu 10.10 x86_64 и Debian 5.0.6 x86_64. на RHEL AS
> 4 U4 x86_64 не прокатило! видимо проблеме подвержены только ванильные ядра.

Сможешь показать из Редхата АС 4
# sysctl -A | egrep 'gc_|fs.file|inode'

Ответить | Правка | ^ к родителю #58 | Наверх | Cообщить модератору

67. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от прохожий on 26-Ноя-10, 14:42 
держи

$ uname -rm
2.6.9-78.14.EL x86_64

$ cat /etc/redhat-release
Red Hat Enterprise Linux AS release 4 (Nahant Update 4)

$ sudo /sbin/sysctl -A | egrep 'gc_|fs.file|inode'
net.ipv6.neigh.eth0.gc_stale_time = 60
net.ipv6.neigh.lo.gc_stale_time = 60
net.ipv6.neigh.default.gc_thresh3 = 1024
net.ipv6.neigh.default.gc_thresh2 = 512
net.ipv6.neigh.default.gc_thresh1 = 128
net.ipv6.neigh.default.gc_interval = 30
net.ipv6.neigh.default.gc_stale_time = 60
net.ipv6.route.gc_elasticity = 0
net.ipv6.route.gc_interval = 30
net.ipv6.route.gc_timeout = 60
net.ipv6.route.gc_min_interval = 0
net.ipv6.route.gc_thresh = 1024
net.ipv4.neigh.eth0.gc_stale_time = 60
net.ipv4.neigh.lo.gc_stale_time = 60
net.ipv4.neigh.default.gc_thresh3 = 1024
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_interval = 30
net.ipv4.neigh.default.gc_stale_time = 60
net.ipv4.inet_peer_gc_maxtime = 120
net.ipv4.inet_peer_gc_mintime = 10
net.ipv4.route.gc_elasticity = 8
net.ipv4.route.gc_interval = 60
net.ipv4.route.gc_timeout = 300
net.ipv4.route.gc_min_interval = 0
net.ipv4.route.gc_thresh = 32768
fs.file-max = 98936
fs.file-nr = 1812    0    98936
fs.inode-state = 3222    266    0    0    0    0    0
fs.inode-nr = 3222    266

Ответить | Правка | ^ к родителю #65 | Наверх | Cообщить модератору

68. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от pavlinux (ok) on 26-Ноя-10, 14:51 
> fs.file-nr = 1812 0 98936
> fs.file-max = 98936

Ну и понятно, с чего бы ей загнуться.

Хотя скорее дело не в этом. С версии 2.6.9+ много всего поменялось.

Ответить | Правка | ^ к родителю #67 | Наверх | Cообщить модератору

86. "Новый способ совершения локальной DoS-атаки в Linux и *BSD"  +2 +/
Сообщение от Xaionaro (ok) on 26-Ноя-10, 18:22 
Кхм... Почему-то я стал в "мини-новостях" находить интересные новости чаще, чем в главных новостях. :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

96. "Новый способ совершения локальной DoS-атаки в Linux и *BSD"  +/
Сообщение от pavlinux (ok) on 28-Ноя-10, 01:18 
Кстати, тут чтоль никого с Microsoft C/C++ нету? :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

97. "Новый способ совершения локальной DoS-атаки в Linux"  +1 +/
Сообщение от cryo (ok) on 29-Ноя-10, 13:06 
MacOS 10.6.5 Snow Leopard
Ядро Darwin 10.5.0 Darwin Kernel Version 10.5.0: Fri Nov  5 23:20:39 PDT 2010; root:xnu-1504.9.17~1/RELEASE_I386 i386 i386

Запустил эксплойт.

Система по ощущениям _вообще_ не заметила этого DoS. Все бегает, GUI летает, топ работает :)
Пишу этот пост.

Простой kill -15 из-под юзера убил программу моментально.

Строка из топа:
7669  a.out        97.9  01:50.11 1/1  0    14   22    104K   240K   320K   9640K  2370M  7669 7592 running  501  175       36      85         42         52992338+ 64

Нет времени смотреть, как тут реализовано закрытие сокета. Кому интересно - гляньте.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

98. "Новый способ совершения локальной DoS-атаки в Linux"  +/
Сообщение от fidaj (ok) on 29-Ноя-10, 13:16 
ну теперь кто бы еще и с виндовс машин дал такую же информацию - тогда бы была более полная картина мира :)
А с мак осью -  забавно...
Ответить | Правка | ^ к родителю #97 | Наверх | Cообщить модератору

99. "Новый способ совершения локальной DoS-атаки в Linux и *BSD"  +/
Сообщение от pavlinux (ok) on 30-Ноя-10, 23:55 
Свежий патчиг. Для версии 2.6.37-rc4, но думаю руками сами переделаете.


diff --git a/net/unix/garbage.c b/net/unix/garbage.c
index c8df6fd..f89f83b 100644
--- a/net/unix/garbage.c
+++ b/net/unix/garbage.c
@@ -96,7 +96,7 @@ static DECLARE_WAIT_QUEUE_HEAD(unix_gc_wait);
unsigned int unix_tot_inflight;


-static struct sock *unix_get_socket(struct file *filp)
+struct sock *unix_get_socket(struct file *filp)
{
struct sock *u_sock = NULL;
struct inode *inode = filp->f_path.dentry->d_inode;
@@ -259,9 +259,16 @@ static void inc_inflight_move_tail(struct unix_sock *u)
}

static bool gc_in_progress = false;
+#define UNIX_INFLIGHT_TRIGGER_GC 16000

void wait_for_unix_gc(void)
{
+ /*
+ * If number of inflight sockets is insane,
+ * force a garbage collect right now.
+ */
+ if (unix_tot_inflight > UNIX_INFLIGHT_TRIGGER_GC && !gc_in_progress)
+ unix_gc();
wait_event(unix_gc_wait, gc_in_progress == false);
}


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру