CVE-2016-5195
Linux Kernel
2022-03-03
Race condition in mm/gup.c in the Linux kernel allows local users to escalate privileges.
Технический анализ и план устранения
Суть уязвимости
Уязвимость "Dirty COW" (CVE-2016-5195) — это состояние гонки (race condition) в подсистеме управления памятью ядра Linux. Она позволяет локальному непривилегированному пользователю получить права на запись в файлы, доступные только для чтения (например, /etc/passwd или файлы с SUID-битами).
- Как это используют: Злоумышленник запускает специальную программу, которая многократно и параллельно пытается записать в защищенную область памяти, используя уязвимость в функциях
get_user_pages(). В результате он может модифицировать любой файл в системе, даже без прав на запись. Чаще всего это используется для замены файла/etc/passwdили исполняемого файла с SUID (например,/bin/su), чтобы получить права root.
Как исправить
Уязвимость исправлена в ядре Linux. Необходимо обновить ядро до исправленной версии.
-
Определите текущую версию ядра:
bash uname -r -
Обновите ядро, используя менеджер пакетов вашего дистрибутива:
-
Для Debian/Ubuntu:
bash sudo apt update sudo apt install --only-upgrade linux-image-$(uname -r)- Минимальная исправленная версия:
4.4.0-45.66(для Ubuntu 16.04 LTS),4.8.0-26.28(для Ubuntu 16.10) и аналогичные для других веток. Рекомендуется всегда устанавливать последние доступные обновления безопасности.
- Минимальная исправленная версия:
-
Для RHEL/CentOS 7:
bash sudo yum update kernel- Минимальная исправленная версия:
3.10.0-327.36.3.el7. Убедитесь, что установлено ядро из пакетаkernel-3.10.0-514или новее.
- Минимальная исправленная версия:
-
Для Fedora:
bash sudo dnf update kernel- Исправление доступно в ядрах версии
4.8.5-200.fc24и новее.
- Исправление доступно в ядрах версии
-
-
После установки обновления перезагрузите систему:
bash sudo reboot
Временное решение
Если немедленное обновление ядра невозможно, можно применить следующие меры для снижения риска:
-
Ограничение доступа к системе:
- Минимизируйте количество пользователей, имеющих доступ к оболочке (shell) на сервере.
- Регулярно проверяйте журналы аутентификации (
/var/log/auth.log,/var/log/secure) на предмет подозрительной активности.
-
Отключение ненужных SUID/SGID битов:
- Найдите файлы с установленными SUID/SGID битами, которые не являются критически важными для работы системы:
bash find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \; - Внимательно проанализируйте вывод. Для файлов, в которых эти привилегии не требуются (например, старые или кастомные бинарники), биты можно снять:
bash sudo chmod u-s /path/to/non_essential_binary sudo chmod g-s /path/to/non_essential_binary - Важно: Это может нарушить работу легитимного ПО. Действуйте осторожно и только на не критичных для системы файлах.
- Найдите файлы с установленными SUID/SGID битами, которые не являются критически важными для работы системы:
-
Использование Security Modules (если применимо):
- Если в системе используется SELinux (Enforcing mode) или AppArmor с правильно настроенными политиками, это может значительно усложнить эксплуатацию уязвимости, ограничивая возможности процессов.
Примечание: Временные решения лишь усложняют атаку, но не устраняют саму уязвимость. Обновление ядра — единственный надежный способ полного устранения проблемы.