nixp.ru v3.0

19 апреля 2024,
пятница,
10:24:41 MSK

16 декабря 2014, 21:33

Уязвимость «Гринч» может украсть Рождество у администраторов Linux

4
Уязвимость названа в честь выдуманного персонажа — Гринча, который украл Рождество
Уязвимость названа в честь выдуманного персонажа — Гринча, который украл Рождество
Иллюстрация с сайта pcworld.com

Компания Alert Logic, специализирующаяся на ИТ-безопасности, опубликовала 16 декабря в блоге информацию об уязвимости, которая позволяет злоумышленникам получить root-доступ к системе.

Руководитель направления в Alert Logic пишет: уязвимость по масштабам сравнима с Shellshock, обнаруженным в сентябре этого года. Проблема кроется в системе авторизации ядра Linux и при определённых условиях привилегии обычного пользователя повышаются до root или же злоумышленник получает полный административный доступ. В Alert Logic отмечают, что известных эксплоитов не обнаружено, как и информации об уязвимости на сайте CERT.

Исследователи безопасности предполагают, что уязвимости подвержены все Linux-серверы (65 % по данным W3Techs), в том числе в публичных облаках Amazon и Microsoft и смартфоны на Android. Злоумышленник может повысить привилегии через управление группой wheel, доступ к которой может получить как напрямую, так и через графический конфигуратор, например, PolKit. Специалисты Alert Logic уже оповестили Red Hat, мейнтейнера PolKit, последние, в свою очередь, приступили к поиску решения. Однако фундаментальная проблема всё-таки в архитектуре ядра, по мнению Alert Logic, и её должны решить разработчики Linux.

Сейчас отсутствуют эксплоиты и патчи, закрывающие уязвимость, но компании могут предпринять превентивные меры. Специалисты Alert Logic предлагают компаниям усилить мониторинг за пользователями и настроить уведомления при необычном поведении. В дополнение, рекомендуется переписать правила, чтобы минимизировать использование sudo.

Постоянная ссылка к новости: http://www.nixp.ru/news/13025.html. Никита Лялин по материалам pcworld.com.

fb twitter vk
defender

Чет мне подобные заявления нравятся все больше… Ведь это полная хрень, а преподносится как светопреставление. Как и Shellshock. Все больше кажется, что «кто-то» желает подмочить репутацию Linux у людей, которые не могут оценить угрозу…

tinman321

Linux пророчат суксесс в 2015 году в корпоративном секторе. Вопросам безопасности стали уделять больше внимания. И да, надо разделять булшит и правду, это было всегда и в любой сфере.

Дмитрий Шурупов

Linux пророчат успех практически в любом секторе каждый год, сколько себя помню :-)

rgo

Точно-точно. Я впервые про линукс услышал в '98 году, причём на фоне слов о грядущем успехе.

fhunter

Так беда-то в policykit + packagekit? Вот правильно делал, что не ставил их на своих системах.

tinman321

Беда в wheel и sudo

fhunter

Неа. Беда в связке: policykit + packagekit + wheel/sudo.

We dove further into the Linux platform and discovered grinch, which exists in the new authorization system that allows privilege escalation through wheel.


Кстати, а почему на обоих debian серваках и на ubuntu десктопе нет группы wheel вообще?
Sudo при этом работает. Есть группа sudo, по умолчанию она пустая.

For example, if the file is owned by user XYZ and group wheel, it will run as XYZ:wheel, no matter who executes the file.


Проделал это в таком варианте:

#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
int main(void){ printf("Gid = %d\nEgid = %d\n",getgid(),getegid()); return 0; }


Результаты выполнения:

fhunter@fhunter:~$ cat > new.c
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
int main(void){ printf("Gid = %d\nEgid = %d\n",getgid(),getegid()); return 0; } fhunter@fhunter:~$ gcc new.c new.c: In function ‘main’: new.c:7:5: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default] fhunter@fhunter:~$ ls -la ./a.out -rwxr-xr-x 1 fhunter fhunter 5082 Дек 17 19:59 ./a.out fhunter@fhunter:~$ ./a.out Gid = 1000 Egid = 1000 fhunter@fhunter:~$ sudo chgrp sudo ./a.out fhunter@fhunter:~$ ls -la ./a.out -rwxr-xr-x 1 fhunter sudo 5082 Дек 17 19:59 ./a.out fhunter@fhunter:~$ ./a.out Gid = 1000 Egid = 1000 fhunter@fhunter:~$ cat /etc/group|grep sudo sudo:x:27:fhunter fhunter@fhunter:~$


Выводы — sudo и wheel тут абсолютно ни при чём. Проблема в сочетании policykit, packagekit и их настройках. А так же наличии в linux setuid/setgid. Первые два позволяют поставить любой пакет при наличии юзверя в wheel/sudo. А дальше скрафтить пакет с setuid бинарником можно очень просто. И таким образом поиметь root-права.

Короче — накрафтили всякой фигни всяких *kit и *D, по сути — поверх рабочих механизмов авторизации и теперь огребают из-за нечитаемости конфигов и прочих радостей.

rgo
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
        if(argc == 1) {
                char *new_argv[] = {argv[0], "dummy", NULL};
                execvp("sudo", new_argv);
                perror("sudo");
                return -1;
        } else {
                printf("gid/egid=%d/%d\n", getgid(), getegid());
                return 0;
        }
}

По-идее должно работать. Но у меня sudo нет, чтобы проверить.

fhunter

Сходу не завелось :). Разбираться в связи с предновогодним релизом некогда.
Советую прочитать оригинал, там на весьма кривом английском заявляется что проблема не в sudo — он как раз просит пароль, как и надо, а в packagekit + policykit и их дефолтовых конфигах.
И на вид — так и есть.

rgo

Я читал. Там на самом деле хрень сплошная. Всё что там написано относится к ситуации, когда либо пользователь в группе wheel хочет поломать систему, либо когда такой пользователь запустит троян. Но сам факт того, что этот пользователь может ввести пароль и поднять привилегии, уже вполне достаточен для перехвата управления. Если взять для примера мой случай: когда мне нужны рутовские права, для чего-нибудь я пользуюсь su, чтобы получить рутовских шелл. Как правило я это делаю в urxvt, эпизодически в консоли. А теперь предположим, что я каким-то образом получил в свою систему троян. Этот троян легко может вписать в ~/.bashrc или в ~/.bash_profile alias для su (это палево, но я же не каждый день заглядываю в ~/.bashrc, или проверяю в шелле список алиасов), который перехватит пароль и прежде чем запустить su запустит левый исполняемый файл закопанный глубоко в ~/.ANY, который имея пароль создаст псевдотерминал, запустив на его slave конце su, и получит таким образом рутовский шелл для себя, причём шелл который сложно заметить — для этого надо в нужный момент (псевдотерминал как и оба процесса на его концах будут существовать доли секунды) глянуть в `ps a' и заметить непонятный процесс на непонятном терминале. Дальнейшие действия можно особо не расписывать, потому что уже всё зависит от целей — можно например пропатчить /bin/bash, или /usr/bin/apt, или /usr/bin/gcc, или /boot/vmlinuz… Либо можно просто засунуть в этот псевдотерминал rm -rf /ANY и не парится.

Если вас не устраивает мой use-case, то имея фантазию вы можете представить любо другой — если, допустим, есть GUI приложение, которое спрашивает пароль и отдаёт его sudo, то можно внедриться в процесс по его pid, можно попытаться перехватить ввод, можно подменить исполняемый файл (зная алгоритм его поиска, можно алгоритм надуть, модифицировав $PATH), можно использовать LD_PRELOAD (подчеркну: не на суидном бинаре, а на том, который запускает суидник) — методики отработаны многократно в венде. В линуксе эти угрозы не очень страшны по ряду причин — они просто не случаются, как правило, — но ежели в linux’е был запущен вредоносный процесс, даже не под рутом, а под пользователем, чьи привелегии сводятся к нахождению в группе wheel, то единственный способ убедиться в том, что система не сменила хозяина — переустановить систему, загрузившись с внешнего носителя, который был создан на доверенном железе доверенными же людьми.

Но писечка в том, что несмотря на то, что простая *nix система реально имеет эту дырищу, policykit эту дырищу прикрывает с использованием SELinux. Ну, по-крайней мере, у меня сложилось такое впечатление, по реакции RedHat’а на Grinch. Это может быть маркетинговым буллшитом — я не вдавался в подробности, и вообще про все эти SELinux и AppArmor я ничего не знаю — читал пару раз какие-то обзорные статьи. Так же я практически ничего не знаю про все эти security caps или как там их, которые позволяют дать процессу не рута сразу и целиком, а только одну из рутовских возможностей, например, биндить сокет с номером порта <1000, или наоборот позволяют отнять у рута часть его привилегий или даже все (в новостях как-то было про китайский дистр, с единственным пользователем — рутом, но обрезанным в возможностях настолько, что изменить что-либо в системе он был не в состоянии). Поэтому мне сложно судить, что является ли policykit буллшитом или он действительно может помочь при реальной угрозе.

Но во всяком случае, я отмечу следующее, если древнее пророчество когда-нибудь исполнится, и linux захватит 50+% десктопов, и количество малвари создаваемой для линуксов вырастет во столько же раз, во сколько увеличится доля линукса, то policykit или что-то аналогичное будет превосходно справляться с той ролью, которую в венде играют антивирусы. Даже несмотря на отсутствие эвристического анализатора поведения программ.

PS. Пофиксил, заменил все asterisk’и на ANY, а то они воспринимались как часть разметки. :)

Дмитрий Шурупов
PS. Пофиксил, заменил все asterisk’и на ANY, а то они воспринимались как часть разметки. :)


Спасибо, попробуем исправить «слишком умное»)

xoy

Согласен, явная попытка манипуляции общественным мнением.
Страшная уязвимость страшнее некуда, но сравнима с Shellshock. Если разобраться воспользоваться Shellshock не так то просто…

А главное Shock, все плохо, вот что откладывается в голове…
Авторам и редакторам, предложение: не только слепо переводить, а подвергать редактуре. Настоящим сми становиться пора. ;)

tinman321
Авторам и редакторам, предложение: не только слепо переводить, а подвергать редактуре. Настоящим сми становиться пора. ;)


Скорость выпуска материала и качество — разнонаправленные векторы. Либо ты выпускаешь новости, либо аналитические статьи с подробным разбором.