В ядре Linux исправлена (http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.g... опасная уязвимость (CVE-2014-2523), позволяющая удаленному злоумышленнику выполнить код на уровне ядра. Проблема обусловлена ошибкой в коде conntrack (подсистемы, отслеживающей входящие, исходящие и транзитные сетевые соединения для обеспечения корректности процедур фильтрации и NAT), выполняющем обработку пакетов протокола DCCP (http://ru.wikipedia.org/wiki/DCCP). При помощи специально сформированного DCCP-пакета, удаленный злоумышленник может выполнить произвольный код с привилегиями ядра, либо инициировать крах системы.
Уязвимый участок кода существовал в Linux начиная с версии 2.6.26 (июль 2008 года) по 3.13 включительно. Несмотря на то, что исправление было принято в начале января 2014 года (и вошло в Linux 3.14-RC1), проблема была отмечена (http://marc.info/?l=oss-security&m=139505166223811) как уязвимость только в минувший понедельник. За выходом исправлений для популярных дистрибутивов можно проследить на следующих страницах: Fedora/RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2014-2523), SuSE (https://bugzilla.novell.com/show_bug.cgi?id=CVE-2014-2523), Debian (https://security-tracker.debian.org/tracker/CVE-2014-2523), Ubuntu (http://people.canonical.com/~ubuntu-security/cve/2014/CVE-20....
В качестве временного исправления, можно заблокировать conntrack-обработку входящих и исходящих DCCP пакетов:<font color="#461b7e">
iptables -t raw -I PREROUTING -p dccp -j NOTRACK
iptables -t raw -I OUTPUT -p dccp -j NOTRACK
</font>
URL: http://marc.info/?l=oss-security&m=139507011230794
Новость: http://www.opennet.me/opennews/art.shtml?num=39355
Ага, 5 лет калитка нараспашку и никто туда не зашёл.
Я вообще про этот протокол впервые слышу.
Он хоть где-то используется?
> Он хоть где-то используется?Проверил - фигЪ. OpenWRT на роутерах - нету. Десктопы с *бунту - нету. Серваки с дебианом и ubuntu - нету. Всякая эмбедовка, N900 - аналогично. DCCP - редкий вид. Хватай, а то убежит.
Ему ине надо использоваться, чтоб хакнуть твою систему.
Как я понял, если разрешать только tcp/udp/icmp и дропать все остальное, то обработка других пакетов в contrack все равно идет?
> Ему ине надо использоваться, чтоб хакнуть твою систему.Даже если nf_conntrack_proto_dccp не загружен? Ну попробуйте.
> Ага, 5 лет калитка нараспашку и никто туда не зашёл.Как можно знать что никто не зашел? Никто не сказал, что зашел.
DCCP практически не используется
А оно выключено по-умолчанию?
Не включено.
Afaik, уявзимый модуль собирается и ставится по умолчанию практически во всех дистрах.
Загружается автоматически.
> Afaik, уявзимый модуль собирается и ставится по умолчанию практически во всех дистрах.
> Загружается автоматически.Странно, в Debian не загружается. В Gentoo вообще *DCCP*=n. Какой дистрибутив?
> Странно, в Debian не загружается.И в *buntu тоже. И вообще, я ни 1 машины с этим модулем не нашел, даже среди всякой эмбедовочной экзотики.
> Afaik, уявзимый модуль собирается и ставится по умолчанию практически во всех дистрах.
> Загружается автоматически.В рхеле/центосе nf_conntrack_dccp (6) / ip_conntrack_dccp (5) загружается только по требованию.
> В рхеле/центосе nf_conntrack_dccp (6) / ip_conntrack_dccp (5) загружается только по требованию.Ага, в openwrt по дефолту вражеского модуля тоже нету. Так что домашние роутеры с openwrt тоже не вы#$%т. Это хорошо.
>> Afaik, уявзимый модуль собирается и ставится по умолчанию практически во всех дистрах.
>> Загружается автоматически.
> В рхеле/центосе nf_conntrack_dccp (6) / ip_conntrack_dccp (5) загружается только по требованию.В убунте один модуль nf_conntrack, который обрабатывает все соединения. Значит в дебиане тоже.
>Afaik, уявзимый модуль собирается и ставится по умолчанию практически во всех дистрах.Если отдельно взятый одмин не отключил всё, что нафиг не нуно, то он - чудак на известную букву, и, как пишут в интернетах, ССЗБ.
P.S. Я - не про одмина локалхоста.
> Если отдельно взятый одмин не отключил всё, что нафиг не нуно, то он - чудак на известную букву, и, как пишут в интернетах, ССЗБ.Вот делать админам нечего, как денно и нощно пересобирать пакеты с нужными опциями.
Вы путаете админов с гентушниками.
а вы путаете грешное с праведным или теплое с мягким. если конкретно для вас не нужен специфичный тюнинг ядра - это еще ни о чем не говорит. как, впрочем, ничего не говорит о людях, собирающих кернел самостоятельно. и кто из вас _о_дмин? гентушники, в большинстве случаев, хоть отдают себе отчет,что они делают и зачем. школоло не в счет, оно любой дистр может загадить. пусть и в процессе познания.
А вы вообще всё путаете.
Грешное и праведное - антонимы, а теплое и мягкое - нет.
> а вы путаете грешное с праведным или теплое с мягким. если конкретно
> для вас не нужен специфичный тюнинг ядра - это еще ни
> о чем не говорит.Ну расскажите нам, как вы тюните ядро для сервера через конфиг ядра.
Наверное, собираете "только нужные модули", причем монолитно, и надеетесь, что оно будет работать быстрее?> гентушники, в большинстве случаев, хоть отдают себе отчет,что они делают и зачем.
Возможно. Но к реальной работе админа то, что делают гентушники, относится довольно слабо.
> Вы путаете админов с гентушниками.нет, это ты отчего-то считаешь эникейщиков админами.
> нет, это ты отчего-то считаешь эникейщиков админами.Как раз эникеи и прочие младоадмины, после того как осилят пересборку ядра, очень часто и активно этим занимаются. Мудрость приходит только с годами.
> Мудрость приходит только с годами.Не факт. Обычно не приходит.
даже фтп не загружается, а уж это...
> Не включено.как узнать ?
>> Не включено.
> как узнать ?lsmod | grep -i dccp.
>>> Не включено.
>> как узнать ?
> lsmod | grep -i dccp.Это выдаст только текущее состояние, которое может измениться в любой момент.
> Это выдаст только текущее состояние, которое может измениться в любой момент.Для полной уверенности, если конечно как модуль собрано:
lsmod | grep dccp (ничего не должно быть)
find /lib/modules -iname \*dccp\* -deleteГде не собрано, как модуль - ну ссзб, увы.
>> Это выдаст только текущее состояние, которое может измениться в любой момент.
> Для полной уверенности, если конечно как модуль собрано:
> lsmod | grep dccp (ничего не должно быть)
> find /lib/modules -iname \*dccp\* -delete
> Где не собрано, как модуль - ну ссзб, увы.
>> Это выдаст только текущее состояние, которое может измениться в любой момент.
> Для полной уверенности, если конечно как модуль собрано:
> lsmod | grep dccp (ничего не должно быть)
> find /lib/modules -iname \*dccp\* -delete
> Где не собрано, как модуль - ну ссзб, увы.единственное, что хотел бы заметить, вы часто используете модули на боевых серверах?
просто в blacklist его вписать и все.
Расскажите пожалуйста, каким образом произойдет изменение состояния? Что будет тому причиной, какой механизм сработает?
Какая-нибудь "умная" морда к iptables при очередной настройке/обновлении решит, что чем больше модулей conntrack - тем лучше.
Это как пример.
> Какая-нибудь "умная" морда к iptables при очередной настройке/обновлении решит, что чем
> больше модулей conntrack - тем лучше.Лишний повод не использовать такие морды.
> Лишний повод не использовать такие морды.Золотые слова. Жаль, эникеи их не оценят :(
> Золотые слова. Жаль, эникеи их не оценят :(Ну если кто не хочет платить нормальному админу - он получает то что получает. Например, админа который зачем-то коннтрекает DCCP...
> Расскажите пожалуйста, каким образом произойдет изменение состояния? Что будет тому причиной,
> какой механизм сработает?iptables -L -t nat
>>>> Не включено.
>>> как узнать ?
>> lsmod | grep -i dccp.
> Это выдаст только текущее состояние, которое может измениться в любой момент.Если сервер работает месяцами и данный модуль не потребовался за это время, велика вероятность, что ни чем не используется...
> Это выдаст только текущее состояние, которое может измениться в любой момент.1) В нормальной ситуации такие модули на ходу не загружаются.
2) Если у вас ненормальная ситуация, загрузку модулей можно запретить, вплоть до перезагрузки.
Если я правильно понял сабж, модуль может подгрузиться при любом входящем DCCP пакете.
Что значит по умолчанию? Это же linux, тут нет ничего умолчательного. Я лично эту минорщину даже не собираю никогда.
> Что значит по умолчанию? Это же linux, тут нет ничего умолчательного. Я
> лично эту минорщину даже не собираю никогда.В *бунтах и дебиане этот модуль по дефолту тоже не активен. В openwrt - аналогично.
ну сам по себе модуль есть...
cat /boot/config-3.11.0-18-lowlatency | grep DCCP
CONFIG_NF_CT_PROTO_DCCP=m
CONFIG_NF_NAT_PROTO_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_IP_DCCP=m
CONFIG_INET_DCCP_DIAG=m
# DCCP CCIDs Configuration
# CONFIG_IP_DCCP_CCID2_DEBUG is not set
# CONFIG_IP_DCCP_CCID3 is not set
# DCCP Kernel Hacking
# CONFIG_IP_DCCP_DEBUG is not set
CONFIG_NET_DCCPPROBE=mтолько вот вероятность его запуска какова?
надо его прописать в блэклист наверно для пущей уверенности...
> только вот вероятность его запуска какова?Если у вас нет всяких умных морд к фаерволу - близка к нулю.
> надо его прописать в блэклист наверно для пущей уверенности...
Бессмысленно. blacklist используется в основном udevом, а он не занимается сетевыми протоколами.
А что, есть самураи, использующие DCCP через NAT в офисе?
"Use streaming media, multiplayer online games and Internet telephony"Я, например, DCCP не использую на службе. Возможное исключение - SIP, но там внешние соединения ограничены серверами провайдеров (я их клиент, если что).
Вообще говоря, слушать радио онлайн и играть в инет игры для офиса несколько странно...
> радио онлайн и играть в инет игры для офиса несколько странно...Это совершенно не странно в Российских научных организациях. Потому и реорганизуют, собственно, что большинство традиционно мается бездельем. Но и тут сабж не при чем, ибо у всех почти поголовно стоит Windows.
> Это совершенно не странно в Российских научных организациях. Потому и реорганизуют, собственно, что большинство традиционно мается бездельем.Нет. Реорганизуют и сокращают как раз тех, кто работает. Бездельников и распильщиков трогать низя, они самые ценные люди.
А представьте что в проприетарном закрытом коде творится! :)
Локалхостеры-гентушнеки они такие.
Объясните программисту, если сервер стоит за нат'ом и на него форвардится 22 порт, то оно может через него пробраться?А как на счет роутера с линуксом на борту? На нем тоже безобразия будут?
А NAT на каком ядре работает ?
> Объясните программисту, если сервер стоит за нат'ом и на него форвардится 22
> порт, то оно может через него пробраться?Скорее всего, у вас натится только TCP/22. А значит, пробраться нельзя.
> А как на счет роутера с линуксом на борту? На нем тоже
> безобразия будут?Зависит от конфигурации ядра. Грепайте на CONFIG_NF_CT_PROTO_DCCP. Если оно "y" или "m" - значит, подвержено.
> Зависит от конфигурации ядра. Грепайте на CONFIG_NF_CT_PROTO_DCCP. Если оно "y" или "m"
> - значит, подвержено....если модуль вгружен. Несмотря на стремность бага я не смог найти ни 1 системы с этим модулем. Хм...
Если на 22 порту использовать DCCP то может. Но обычно там используют SSH. Бояться нужно бардака с паролями, и 22 порт пробросить через порты выше 1000.
Проблемы поддержки dccp в Вашем роутере Вам не грозят, у Вас квалификации не хватит этот протокол там задействовать.
Позабавили вопросом однако. :)
> Если на 22 порту использовать DCCP то может. Но обычно там используют SSH.
> на 22 порту
> DCCP
> у Вас квалификации не хватит этот протокол там задействовать.Сказал человек, только что перепутавший транспортный уровень с сетевым.
> Позабавили вопросом однако. :)
Да :)
> Сказал человек, только что перепутавший транспортный уровень с сетевым.*прикладным
> Да :)
Теперь и я тоже :)
Да.
Да. Да.
Гудбай, DCCP, еще лет 5 тому назад... когда в нем дыры находили каждый месяц.blacklist dccp
blacklist nf_conntrack_dccp
blacklist xt_dccp
тоже подумал что не обязательно делать NOTRACK
> Гудбай, DCCP, еще лет 5 тому назад... когда в нем дыры находили
> каждый месяц.
> blacklist dccp
> blacklist nf_conntrack_dccp
> blacklist xt_dccpОтличная шутка.
blacklist влияет только при автоматической подгрузке модулей через udev (а также ручной, если указан ключ -b).
На автоподгрузку модулей сетевых протоколов это никак не влияет.
> Отличная шутка.
> blacklist влияет только при автоматической подгрузке модулей через udev (а также ручной,
> если указан ключ -b).
> На автоподгрузку модулей сетевых протоколов это никак не влияет.Согласен, не панацея.
Поскольку конфиги у меня известные - я точно знаю, что автоподгрузка, к примеру, из iptables - не произойдёт. А вот на этапе начальной загрузки блеклист не мешает. На всякий случай.
Для полной уверенности, если конечно как модуль собрано:
find /lib/modules -iname \*dccp\* -delete
> На автоподгрузку модулей сетевых протоколов это никак не влияет.Осталось только найти где она делается и почему.
Ты с SCTP перепутал.
А как насчет роутеров с OpenWRT(да и не только!) на борту?
Даже если и выйдет патч/заплатка, как её применить без перепрошивки?
Проверил на OpenWRT 12.09 и на текущем trunk. Он собран без поддержки dccp так что уязвимости не подвержен.
Так же можно попробовать предложенный временный фикс на который в подтверждение отсутствия dccp iptables выдаст unknown protocol "dccp" specified.
И в чем собственно великая проблема обновить прошивку?
> Так же можно попробовать предложенный временный фикс на который в подтверждение отсутствия
> dccp iptables выдаст unknown protocol "dccp" specified.Это зависит не от наличия модуля, а от наличия протокола в /etc/protocols.
Внутри netfilter протоколы транспортного уровня идентифицируются по номерам. Даже если есть модуль для протокола 33, при отсутствии нужной записи в protocols, iptables просто не поймет, что такое "-p dccp".
Из конфига ядра openwrt:
# CONFIG_NF_CT_PROTO_DCCP is not set
# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
# CONFIG_IP_DCCP is not setТак что по умолчанию поддержки быть не должно. Соответствующих модулей в собранной системе нет.
> Из конфига ядра openwrt:Это уже другой разговор.
> И в чем собственно великая проблема обновить прошивку?Куча настроек на роутере, и сам роутер в удаленном филиале. Например.
На одном из маршрутизаторов постоянно обновляю свежие снапшоты для тестирования. Проблем с сохранением и восстановлением настроек после прошивки нет.
Так же если есть удаленный доступ к маршрутизатору его можно прошить без физического доступа к устройству например по ssh через sysupgrade. sysupgrade так же умеет сохранять настройки при обновлении прошивки. Единственная проблема если что-то во время прошивки пойдет не так что без физического доступа возможно не получится восстановить маршрутизатор. Но никто не мешает до обновления проверить процесс прошивки на аналогичном устройстве к которому доступ есть.
> Куча настроек на роутере, и сам роутер в удаленном филиале. Например.В openwrt есть режим сохранения настроек :-). Ну и если совсем уж прижало - можно образ кастомный собрать. Впрочем, для начала там по дефолту нет проблемного модуля - смысл чинить то что не сломано?
ЖУтко опасная. Из 50 Линукс серверов на 0 машин стоит dccp connection tracker.// b.
> Из 50 Линукс серверов на 0 машин стоит dccp connection tracker.Суть новости в том, что так должно оставаться и дальше.
> Суть новости в том, что так должно оставаться и дальше.А зачем вам сетевые модули трекинга соединений "про запас"? Чтобы увеличить шансы на получение ручкой грабель в лоб?
$ zgrep -i dccp /proc/config.gz
# CONFIG_IP_DCCP is not setраз не нужно - то выключено. и нет проблем.
# zgrep -i dccp /proc/config.gz
# CONFIG_IP_DCCP is not set
у меня 3.14-rc6 из гита, и в конфиге там по умолчанию CONFIG_IP_DCCP=m
Ну что за уроды ? неужели трудно было в заголовке написать "DCCP ?", я вот подумал что в ядре открыли уязвимость, которая возникает, если ядро получит из инета специально сформированный пакет, не важно на какой порт, и что iptables ему не помеха, и сразу же дает удаленный шелл, который не видится netstat -ntul.
> Ну что за уроды ? неужели трудно было в заголовке написать "DCCP
> ?", я вот подумал что в ядре открыли уязвимость, которая возникает,
> если ядро получит из инета специально сформированный пакет, не важно на
> какой порт, и что iptables ему не помеха, и сразу же
> дает удаленный шелл, который не видится netstat -ntul.Когда новость в Word-е на Windows XP лабаешь, рука сама тянется написать то, что написали.
Использовать нормальную CMS - это тоже wrong way. True way - это собирать HTML вручную, причем игнорировать достижения WEB дизайна за последние 30 лет.
> причем игнорировать достижения WEB дизайнавот это очень правильный способ. чем больше эти «достижения» игнорируются — тем лучше.
> вот это очень правильный способ. чем больше эти «достижения» игнорируются —
> тем лучше.Будь не таким, как все! Борись с системой!
(пожимает плечами) борись. разрешаю.
> я вот подумал что в ядре открыли уязвимость, которая возникает,
> если ядро получит из инета специально сформированный пакет, не важно на
> какой порт, и что iptables ему не помеха, и сразу же
> дает удаленный шелл, который не видится netstat -ntul.Вообще-то, все так и есть (за исключением iptables) :)
>Опасная удалённая уязвимость в ядре Linuxудалённая - да, опасная - нет
> удалённая - да, опасная - нетКому и кобыла невеста. По линуксовым меркам, даже сабж уже событие. Потому что 99% обнаруживаемых там уязвимостей еще менее опасны на практике.
- dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
+ dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh);:(
> - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
> + dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh);
> :(Кто автор предыдущего вот этого - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
Кто прошляпил (может быть)?
>> - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
>> + dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh);
>> :(
> Кто автор предыдущего вот этого - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
> Кто прошляпил (может быть)?Оно так и было, с 2008 года, http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.g...
commit 2bc780499aa33311ec0f3e42624dfaa7be0ade5e
Author: Patrick McHardy <kaber@trash.net>
Date: Thu Mar 20 15:15:55 2008 +0100[NETFILTER]: nf_conntrack: add DCCP protocol support
Add DCCP conntrack helper.
Thanks to Gerrit Renker <gerrit@erg.abdn.ac.uk> for review and testing.
C 2008 года оно тупо никому не нужно было. LOL'd
>[оверквотинг удален]
>>> :(
>> Кто автор предыдущего вот этого - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
>> Кто прошляпил (может быть)?
> Оно так и было, с 2008 года, http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.g...
> commit 2bc780499aa33311ec0f3e42624dfaa7be0ade5e
> Author: Patrick McHardy <kaber@trash.net>
> Date: Thu Mar 20 15:15:55 2008 +0100
> [NETFILTER]: nf_conntrack: add DCCP protocol support
> Add DCCP conntrack helper.
> Thanks to Gerrit Renker <gerrit@erg.abdn.ac.uk> for review and testing.Видать у парня клавиша минус продавлена, наверное много кодит. Или крошка под клавишу закатилась!
Вот только один вопрос, как тестируют? Или главное ввязаться, а там само понесет?
Ведь бывают же случаи, напишет человек программу, а она возьми и с первого раза работает и без ошибок ;)
> iptables -t raw -I OUTPUT -p dccp -j NOTRACKКстате, а чё не POSTROUTING?
iptables -t raw -I POSTROUTING -p dccp -j NOTRACKВыходящие из FORWARD проскакивают OUTPUT мимо.
Хе... в raw нету же POSTROUTING... а это идея ]:->