
Проверяет и укрепляет системы Linux против локального повышения привилегий через AF_ALG (CVE-2026-31431), проверяя доступность криптографического API ядра, ограничивая модули и предоставляя скрипты восстановления.
Этот инструмент реализует Структурную блокировку для смягчения CVE-2026-31431 путём физического переименования модулей ядра и их выгрузки из памяти. Перед использованием ознакомьтесь со следующими архитектурными рисками:
/lib/modules/, что сведёт на нет предыдущую блокировку.AF_ALG (Kernel Crypto API) может нарушить работу приложений или сервисов, полагающихся на аппаратное ускорение на уровне ядра (например, специализированные VPN, утилиты шифрования дисков или пользовательские инструменты безопасности).[cite: 3]Используйте на свой страх и риск. Всегда проверяйте критически важные функции вашей системы после запуска solution.sh.[cite: 3]
Набор инструментов для обнаружения, диагностики и сдерживания векторов LPE (локального повышения привилегий) через Linux Kernel Crypto API (AF_ALG).
Инструмент использует Структурную блокировку для устранения CVE-2026-31431 путём переименования модулей ядра и их выгрузки из памяти. Ключевые архитектурные риски включают:
/lib/modules/, что сведёт на нет предыдущую блокировку.Используйте на свой страх и риск.
Этот репозиторий предоставляет два скрипта, формирующих рабочий процесс диагностика → сдерживание → проверка против атак повышения привилегий через AF_ALG (socket(38, 5, 0)):
check.sh — Многоуровневый аудит состояния безопасности (запускается без привилегий)solution.sh — Принудительная выгрузка модулей AF_ALG из памяти + проверка физических файлов модулей (требуется root)restore.sh — Повторная загрузка модулей AF_ALG и восстановление системы в состояние до запуска solution.sh (требуется root)./check.sh
sudo ./solution.sh
sudo ./restore.sh
restore.sh отменяет эффекты solution.sh, перезагружая модули ядра AF_ALG (af_alg, algif_rng, algif_aead, algif_skcipher, algif_hash). Если физический файл модуля (af_alg.ko.xz) был переименован или удалён, скрипт предупредит вас и предложит выполнить ручное восстановление перед попыткой загрузки модулей.
Запуск solution.sh на работающей системе, активно использующей AF_ALG (например, система с IPsec, dm-crypt/LUKS или любым аппаратным ускорением криптографии), мгновенно нарушит все криптографические операции ядра. Это включает:
algif_*Скрипт принудительно выгружает модули ядра AF_ALG. Криптографические операции ядра будут давать сбой до перезагрузки. Этот скрипт предназначен только для изолированных, непроизводственных или одноразовых систем для целей тестирования и анализа. Не запускайте его на производственных или критически важных инфраструктурах.
check.sh не требует зависимостей, кроме POSIX-совместимой оболочки и /proc//syssolution.sh требует привилегии rootrestore.sh требует привилегии rootaf_alg_block.so требует привилегии root для установки через /etc/ld.so.preloadЭтот POC протестирован на WSL2. Учтите следующее:
wsl --shutdown). Это включает изменения состояния модулей ядра от solution.sh, переименования файлов, результаты check.sh и любые локальные изменения файлов в этом репозитории..wslconfig, /etc/wsl.conf или скрипта автозапуска (например, /etc/rc.local) отдельно.Чтобы окончательно закрыть вектор атаки AF_ALG:
Заблокируйте модуль ядра (самый надёжный способ):
echo "blacklist af_alg" | sudo tee /etc/modprobe.d/af_alg-blacklist.conf
Или переименуйте физический файл:
sudo mv /lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz \
/lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz.bak
Отключите AF_ALG через sysctl:
sudo sysctl -w net.core.af_alg_disabled=1
Заблокируйте создание сокетов AF_ALG через политику SELinux / AppArmor
Отключите непривилегированные пользовательские пространства имён (в контейнерных средах):
sudo sysctl -w kernel.unprivileged_userns_clone=0
Заблокируйте AF_ALG на уровне системного вызова socket() через LD_PRELOAD (обходной путь для WSL2):
# Установка системного уровня (требуется root)
echo /absolute/path/to/af_alg_block.so | sudo tee -a /etc/ld.so.preload
В репозиторий включена предварительно собранная разделяемая библиотека (af_alg_block.so). Она перехватывает и возвращает , когда домен равен (38). Все остальные вызовы сокетов передаются реальной реализации без изменений.
MIT
| Проверка | Что исследует | Серьёзность |
|---|
| Контекст процесса | Текущие UID/GID и эффективные capabilities | Низкая |
| AF_ALG Crypto Socket | Доступность Kernel Crypto API через socket(AF_ALG, ...) | Высокая |
| kptr_restrict | Видимость указателей ядра для пользовательского пространства | Средняя |
| dmesg_restrict | Ограничение доступа к кольцевому буферу ядра | Средняя |
| SELinux | Состояние Enforcing / Permissive / Disabled | Средняя |
| /proc hidepid | Скрывает ли /proc информацию о других процессах | Низкая |
socket(2)EAFNOSUPPORTAF_ALGЭтот подход в первую очередь предназначен для WSL2, где семантика одного пользователя и поведение сброса при перезагрузке делают системный LD_PRELOAD практичным. В традиционных многопользовательских Linux-системах предпочтите метод 1 (блокировка модуля) — внедрение через /etc/ld.so.preload затрагивает каждый процесс в системе и может незаметно нарушить работу сервисов, зависящих от AF_ALG.
Примечание: Требуется glibc (не musl). Для изменения /etc/ld.so.preload требуется root. Удаление выполняется путём удаления соответствующей строки из файла.