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. Необходимо обновить ядро до исправленной версии.

  1. Определите текущую версию ядра: bash uname -r

  2. Обновите ядро, используя менеджер пакетов вашего дистрибутива:

    • Для 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 и новее.
  3. После установки обновления перезагрузите систему: bash sudo reboot

Временное решение

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

  1. Ограничение доступа к системе:

    • Минимизируйте количество пользователей, имеющих доступ к оболочке (shell) на сервере.
    • Регулярно проверяйте журналы аутентификации (/var/log/auth.log, /var/log/secure) на предмет подозрительной активности.
  2. Отключение ненужных 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
    • Важно: Это может нарушить работу легитимного ПО. Действуйте осторожно и только на не критичных для системы файлах.
  3. Использование Security Modules (если применимо):

    • Если в системе используется SELinux (Enforcing mode) или AppArmor с правильно настроенными политиками, это может значительно усложнить эксплуатацию уязвимости, ограничивая возможности процессов.

Примечание: Временные решения лишь усложняют атаку, но не устраняют саму уязвимость. Обновление ядра — единственный надежный способ полного устранения проблемы.