Stephanie: непотопляемая OpenBSD

Xakep, номер #047, стр. 047-074-2


# cd ../ldctl && make && make install

# cd ../sneekctl && make && make install

Осталось только собрать новое ядро. В конфиге ядра /sys/conf/GENERIC появились новые опции, с помощью которых можно включать или выключать те или иные возможности Stephanie:

# Stephanie: OpenBSD hardening

#option STEPHANIE_VERBOSE # Be verbose (not recommended)

# Stephanie: Features

option SNEEK # execve() logging

option TPE # Trusted Path Execution

option PRIVACY # Privacy modifications

option SYMLINKS # Restricted symlinks

option LDSTRIP # ld.so environment variable stripping

option K5 # Binary integrity verification

# Stephanie: Sub-options for k5

#option K5_SAVEKMEM # Save kernel memory (half-size chunks)

#option K5_SUGIDONLY # Verify integrity of S[UG]IDs only

#option K5_STRICT # Access denied if binary not in DB

#option K5_VERBOSE # Be very verbose (k5, not recommended)

Сейчас мы их трогать не будем, оставим настройки по умолчанию. Компилим:

# cd /usr/src/sys/arch/`machine`/conf

# config GENERIC

# cd ../compile/GENERIC

# make clean && make depend && make && make install

Все, идем в reboot, чтобы все сделанные в системе изменения заработали.

Настройка

При загрузке ядра появились новые сообщения:

Это означает, что все прошло нормально, система успешно пропатчена. Первое, что бросается в глаза - появление в /var/log/messages таких сообщений:

Jul 2 03:16:39 darkstar /bsd: "/usr/bin/w" (1002, 10/2) [26485 (2853)]

Это отслеживаются все вызовы execve(). В лог записывается имя выполняемой программы, uid/euid и gid/egid пользователя, а также pid и ppid. С помощью sneekctl можно изменить этот формат, например:

# skeenctl set a u

После этого в лог будет писаться только имя программы и uid/gid (а также euid/egid, если установлены). Если эти сообщения раздражают, их можно отключить либо пересобрав ядро без option SNEEK, либо добавив в /etc/rc.securelevel строчку:

/usr/local/sbin/sneekctl off

Сделаем список "доверенных" пользователей, на которых не будут распространяться ограничения. В /etc/rc.securelevel добавляем:

for USER in barrent billi

do

/usr/local/sbin/aclctl -a $USER

done

Теперь все, кроме barrent и billi (ну, и root, конечно), не смогут видеть чужие процессы с помощью ps, смотреть, кто что делает через w и т.д. Утилита ldctl нужна для управления защитой ld.so. Например, чтобы отключить защиту, надо сделать # ldctl d

Механизм TPE (Trusted Path Execution), который включается опцией в ядре "option TPE", не позволяет "недоверенным" пользователям запускать собственные программы, в том числе и эксплойты.

Как это работает

Напоследок посмотрим, как выглядит теперь наша система глазами "недоверенного" пользователя vasya:

Как видно, ничего у него не получается ;-). Стефани отлично справляется с возложенными на нее задачами, что и требовалось доказать.

RTFM, мой друг

Назад на стр. 047-074-1  Содержание  Вперед на стр. 047-074-3