Информационная безопасность

Безопасность ОС: Linux hardening

CVE-2022-0847 - DirtyPipe. Уязвимость в Linux kernel 5.8-5.16.11 позволяла любому локальному пользователю записывать в read-only файлы, включая /etc/passwd и /etc/shadow. Patch: один день от disclosure. До patch: любой container escape превращался в root на хосте. SELinux Enforcing на хосте: запись в shadow_t файлы из httpd_t контекста - blocked. Один слой MAC защиты - критичен.

  • **DirtyCow 2016 (CVE-2016-5195):** privilege escalation в Linux 2.6.22-4.8.3 - любой пользователь до root. Присутствовал в ядре 9 лет. Использовался в реальных атаках на shared hosting
  • **Docker escape через docker.sock 2019:** стандартный способ PE в K8s - если pod имеет доступ к docker socket, создаёт privileged container с hostPath mount /
  • **Sudo Baron Samedit 2021 (CVE-2021-3156):** heap buffer overflow в sudo, present в 10 лет, любой пользователь -> root. Patch требовал обновления sudo на миллионах серверов

SELinux: Mandatory Access Control

Традиционный Linux: процесс, запущенный от root, имеет неограниченный доступ ко всему. Один RCE - полная компрометация. **SELinux (Security-Enhanced Linux)** добавляет Mandatory Access Control: каждый процесс, файл, сетевой порт имеет security label. Политика определяет кому что разрешено. Даже root ограничен политикой.

**SELinux спас Red Hat от Heartbleed (CVE-2014-0160).** Уязвимость OpenSSL позволяла читать 64KB памяти процесса. В системе с SELinux Enforcing: Apache мог только читать веб-контент, не мог получить доступ к ключевым материалам других процессов. Defense in depth в действии.

`setenforce 0` или `SELINUX=disabled` в /etc/selinux/config - опасная практика, часто "решение" при непонимании SELinux. Правильный подход: читать audit.log, использовать audit2allow для добавления минимальных разрешений, сохранять Enforcing.

Nginx не читает файл конфигурации в /opt/app/nginx.conf. SELinux в Enforcing. Первый шаг диагностики?

AppArmor: профили безопасности приложений

AppArmor - альтернатива SELinux, используемая в Ubuntu/Debian. Проще в настройке: профили написаны на понятном языке (paths, capabilities) вместо SELinux labels. Используется в Ubuntu Server, Docker default profile, Canonical Kubernetes.

**Генерация профиля:** `aa-genprof /usr/sbin/nginx` - запускает в complain mode, мониторит поведение приложения, предлагает правила. `aa-logprof` - обновляет профиль на основе новых записей в логах. Намного проще чем SELinux policy compilation.

Nginx с AppArmor профилем пытается читать /etc/ssl/private/server.key для TLS. Профиль не разрешает /etc/ssl/private/**. Что произойдёт?

Seccomp: фильтрация системных вызовов

Linux kernel имеет ~400 системных вызовов. Обычное веб-приложение использует ~50. Остальные 350 - потенциальные векторы эксплоита. **seccomp (Secure Computing)** позволяет создать whitelist разрешённых syscalls. Контейнер без `fork()` не создаст новые процессы. Без `ptrace()` - нет инструментов для анализа.

**Docker RuntimeDefault seccomp** блокирует ~44 опасных syscall из ~400: kexec_load (загрузка нового ядра), mount (монтирование FS), ptrace (debugging), keyctl (kernel keyring). Kubernetes pod securityContext: `seccompProfile: RuntimeDefault` активирует этот профиль.

Seccomp профиль разрешает только необходимые syscalls. Атакующий получает RCE в контейнере. Что ограничивает его?

Privilege Escalation: вектора получения root

После начального доступа (RCE как www-data) атакующий стремится к root. **Privilege Escalation** - переход от ограниченного пользователя к root или другому привилегированному контексту. SUID bits, sudo misconfiguration, writeable cron, kernel exploits - классические векторы.

**GTFOBins** (gtfobins.github.io) - база данных Unix binaries, которые могут эксплуатироваться для privilege escalation, file read, shell escape. При аудите: проверить каждый SUID binary и каждый sudo NOPASSWD против GTFOBins.

Если пользователь не root, сервер защищён от полной компрометации

SUID bits, sudo misconfiguration, writable cron, kernel exploits - десятки путей от www-data к root. Defense in depth: минимальные права + SELinux + kernel updates + мониторинг.

Privilege escalation - стандартный второй шаг после initial access. LinPEAS автоматически находит PE векторы за минуты. Без hardening большинство Linux систем уязвимы к known PE техникам.

Sudo настроен: `www-data ALL=(ALL) NOPASSWD: /usr/bin/find`. Как это используется для privilege escalation?

Ключевые идеи

  • **SELinux:** Mandatory Access Control поверх POSIX permissions. Даже root ограничен политикой. audit.log + audit2allow для диагностики. Никогда не отключать в production
  • **AppArmor:** профили по путям файловой системы и capabilities. Проще SELinux. Ubuntu/Debian стандарт. Docker default profile блокирует mount, ptrace, net_admin
  • **Seccomp:** whitelist syscalls для процессов/контейнеров. RuntimeDefault блокирует 44+ опасных syscall. Без fork/execve - атакующий с RCE не может запустить инструменты
  • **Privilege Escalation:** SUID binaries, sudo NOPASSWD на интерпретаторах, writable cron - автоматически находятся LinPEAS. Регулярный аудит + kernel updates + SELinux

Связанные темы

Linux hardening - основа для container security и exploit defense:

  • Безопасность контейнеров — SELinux, AppArmor, seccomp используются в K8s Pod Security Standards
  • Exploit Development: Buffer Overflow — ASLR, stack canaries - механизмы защиты против buffer overflow PE
  • Incident Response — Обнаружение privilege escalation - ключевой сигнал в IR процессе

Вопросы для размышления

  • SELinux или AppArmor включён на production серверах? В каком режиме (Enforcing/Permissive/Disabled)?
  • Есть ли SUID binaries на серверах которые не должны там быть? `find / -perm -u=s -type f 2>/dev/null` - что показывает?
  • Какова политика sudo для сервисных аккаунтов? Есть ли NOPASSWD для интерпретаторов (python, perl, bash)?

Связанные уроки

  • sec-18 — Pod Security в K8s использует те же seccomp/SELinux примитивы
  • sec-22 — Buffer overflow эксплоиты работают через те же механизмы privilege escalation
  • os-11-security
Безопасность ОС: Linux hardening

0

1

Войти