Vlad (vlad_rulez) wrote in ru_root,
Vlad
vlad_rulez
ru_root

Category:

Временный фикс CVE-2012-0056 через systemtap на Centos 6

Текст пишется второпях, так что сильно не пинайте.
Проблема и её временное решение описано тут - https://access.redhat.com/kb/docs/DOC-69129
Для русскоязычной аудитории описание проблемы тут - Повышение привилегий в Linux >=2.6.39

Update от 25.01.2012 : RedHat выпустил обновления ядра для RHEL вчера, обновления для центос вышли сегодня.

новое ядро версии 2.6.32-220.4.1 :

# uname -r
2.6.32-220.4.1.el6.x86_64
# ./test
write: : Invalid argument
not vulnerable



Для начала идём в свою любимую рабочую директорию где есть как минимум 550 Мб свободного места и создадим файлик для systemtap, например cve20120056.stp :
vi cve20120056.stp


Пишем в него 3 строчки:
probe kernel.function("mem_write@fs/proc/base.c").call {
$count = 0
}


Для тех, у кого стоит последнее ядро или он может спокойно отребутить машину с новым ядром:
yum update kernel

Если ядро обновилось, проверяем /boot/grub/grub.conf и ребутимся.

Если уже стоит последнее, то ставим нужные нам пакеты:
yum install gcc yum-utils systemtap kernel-debug kernel-headers kernel-debug-devel kernel-devel kernel-firmware

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

yum install gcc yum-utils systemtap kernel-debug-`uname -r` kernel-devel-`uname -r` kernel-headers kernel-debug-devel-`uname -r` kernel-firmware


Поставили? Теперь вторая серия установки debuginfo пакетов ядра. В центосе нормального debuginfo репозитория я по-быстрому не нашёл, зато есть сайт с пакетами http://debuginfo.centos.org/ , который на http://wiki.centos.org/AdditionalResources/Repositories описан как debuginfo repository.  Содрать с RHEL тоже не вышло, в открытом доступе есть debuginfo пакеты только до 4й версии RHEL.

Качаем и ставим debuginfo rpm'ки :

wget http://debuginfo.centos.org/6/x86_64/kernel-debuginfo-common-x86_64-`uname -r`.rpm
wget http://debuginfo.centos.org/6/x86_64/kernel-debuginfo-`uname -r`.rpm
wget http://debuginfo.centos.org/6/x86_64/kernel-debug-debuginfo-`uname -r`.rpm
rpm -Uvh kernel-debuginfo-common-x86_64-`uname -r`.rpm
rpm -Uvh kernel-debuginfo-`uname -r`.rpm
rpm -Uvh kernel-debug-debuginfo-`uname -r`.rpm

Проверяем включен ли у нас ASLR

cat /proc/sys/kernel/randomize_va_space
Должно выдать 2 или 1. Если там 0, то включаем его:

sysctl kernel.randomize_va_space=2

Идём дальше, нам надо убедиться, что systemtap работает, запускаем:
stap -g cve20120056.stp

Если нет ошибок, то у нас почти всё уже хорошо, жмём CTRL+C и запускаем этот процесс в фоне:

nohup stap -g cve20120056.stp &

Проверяем как работает наш фикс, создаем файлик test.c с содержимым из https://bugzilla.redhat.com/attachment.cgi?id=556461

Компилируем его и стартуем:
gcc -o test test.c
./test


Если вам пишет not vulnerable - квест выполнен. Учтите, что с момента запуска stap должно пройти как минимум 10 секунд.

Ну и не забудьте добавить "nohup stap -g cve20120056.stp &" в /etc/rc.local или куда вам нравиться его добавлять ;)

Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 17 comments