Способ инициировать нарушение политики SELinux?

Я изучаю основные работы SELinux и считаю полезным вызвать отрицание. Моя тестовая машина работает под управлением CentOS 7, это базовая установка сервера без каких-либо дополнительных сервисов, и getenforce утверждает "принуждение". Поэтому я был уверен, что создание / root World-readable и попытка читать файлы оттуда как непривилегированный пользователь сделают трюк. Но не повезло! Кто-нибудь может предложить быстрые тесты? Пытаясь подъездные пути, или открыть порты, и т. д.

в идеале я ищу простые команды оболочки, которые DAC не ограничил бы, но MAC заметит и откажет. Таким образом, я не собираюсь компилировать специальные программы или устанавливать определенные службы (например, веб-сервер) для достижения этой цели. Это ценно, поскольку он обеспечивает общий и четкий способ увидеть SELinux в действии.

У меня нет проблем с изменением DAC (т. е. разрешений файловой системы), чтобы сделать их менее ограничительными, чем они были бы по умолчанию в рамках теста.

25
задан bwDraco
05.02.2023 0:24 Количество просмотров материала 2513
Распечатать страницу

4 ответа

продемонстрировать полезность SELinux в обнаружение ошибок для стороннего кода / вашего собственного разработчика, вот тест защиты памяти (изменение первого примера кода здесь):

#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>

int main (void) {
  // open file read-write, get a memory-mapped pointer with private access, write permission
  int fd = open ("file_to_test", O_RDWR);
  char *p = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);

  p[0] = 'a';   // put something

  // Update protection mode; SELinux response depends on sebool: allow_execmod
  int r = mprotect (p, 42, PROT_READ | PROT_EXEC);

  // Display mprotect result
  printf ("mprotect = %d\n", r);

  close(fd);
  return 0;
}
Компилировать и показывать значения по умолчанию (не поймано)
$ echo "test data" > file_to_test
$ gcc execmod.c 

$ ./a.out 
mprotect = 0

$ sudo aureport -a

AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
<no events of interest were found>

изменить логические значения, чтобы поймать проблему:

$ sudo getsebool allow_execmod
allow_execmod --> on

$ sudo setsebool allow_execmod 0
$ ./a.out 
mprotect = -1

$ sudo aureport -a

AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
1. 04/30/2015 12:26:41 a.out unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 10 file execmod unconfined_u:object_r:user_home_t:s0 denied 3612
3
отвечен ǝɲǝɲbρɯͽ 2023-02-06 08:12

это ясно демонстрирует политику MAC, где эквивалентный DAC мог быть обойден на базовой установке CentOS 7.

  1. по умолчанию (в CentOS на момент написания) непривилегированные, несистемные пользователи входят в систему как' unconfined_u ' роль. Однако мы можем изменить нашу систему так, чтобы наш непривилегированный пользователь 'alice' был помещен в роль 'user_u'. Политики по умолчанию могут быть сделаны, чтобы ясно ограничить эту роль только небольшим количеством дополнительного конфигурация.

    [root]# echo "alice:user_u:s0-s0:c0.c1023" >> /etc/selinux/targeted/seusers
    
  2. теперь отключите возможность для этих пользователей выполнять файлы, расположенные в их домашних каталогах и / tmp. Опять же, по умолчанию такое поведение. выполнение этой команды может занять некоторое время.

    [root]# setsebool -P user_exec_content off
    
  3. теперь (с нашим непривилегированным пользователем) мы можем войти в систему и попытаться выполнить что-то в одной из этих областей no go. Как вы можете видеть, мы отвергнутый.

    [alice]$ cp /bin/ls /tmp/
    [alice]$ /tmp/ls
    -bash: /tmp/ls: Permission denied
    
  4. наконец, мы можем просмотреть журнал AVC, чтобы увидеть наш отказ SELinux.

    [root]# aureport -a
    
    AVC Report
    ========================================================
    # date time comm subj syscall class permission obj event
    ========================================================
    1. 02/05/15 21:08:33 bash user_u:user_r:user_t:s0 59 file execute user_u:object_r:user_tmp_t:s0 denied 693
    
3
отвечен Thoughtitious 2023-02-06 10:29

если вы не изменили свою политику в булевой вкладке system-config-selinux (или в /etc / selinux / policy), то значение по умолчанию должно отвечать на следующее (N. B., Вы также можете установить setroubleshoot для более глубокого погружения):

mkdir-m 755-p /install/ks

cp/root / anaconda-ks.cfg / install / ks

chmod 644 / install/ks / anaconda-ks.cfg

затем перезапустите веб-сервер и попытайтесь получить доступ http://localhost/ks С помощью веб-браузера. Вы должны увидеть сообщение "запрещено". Если вы хвост /var/log/audit/audit.log Если вы ausearch -m avc -ts recent, то вы должны увидеть сообщение: type=AVC msg=audit(1391277951.222:266): avc: denied { read } for pid=1731 comm="httpd" name="ks" dev=sda1 ino=22351 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined u:object r:default t:s0 tclass=dir

вы можете изменить контекст SELinux с помощью chcon -Rv --reference /var/www/html /install/ks Если вы не хотите отключать SELinux, но иметь доступ к ресурсу.

EDIT: извините, не видел ,что вы сказали "Не веб-сервер". Попробуй chcon -u fake_u <filename> использование непривилегированной учетной записи в системном файле.

1
отвечен atdre 2023-02-06 12:46

установить два небольших пакета-без зависимостей

  yum install -y vsftpd lftp

запустить FTP-сервер

  systemctl start vsftpd

создайте файл в корневом каталоге

  touch ~/tux.tch

перемещение из корневого каталога в каталог FTP.

Примечание: переместить, не копировать, или fcontext файла изменится

  mv ~/tux.tch /var/ftp/pub

войти в свой FTP-сервер как пользователь ftp-клиент и попытка открыть новый файл.

Примечание: вкладка автозаполнения не будет работать вот

  lftp localhost
    ls pub/tux.tch
    exit

посмотреть отказ в сырые бревна

  grep AVC /var/log/audit/audit.log

или если у вас есть setroubleshoot* установлен

  grep sealert /var/log/messages
0
отвечен infinite-etcetera 2023-02-06 15:03

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх