- •В.В. Бакланов
- •Защитные механизмы
- •Операционной системы
- •Екатеринбург
- •Оглавление
- •Введение
- •1. Пользователи и их права
- •Учетные записи пользователей и работа с ними
- •Video::18:
- •Ivanov:X:1002:101::/home/ivanov:/bin/bash
- •1.2. Процедура регистрации и ее безопасность
- •VI /etc/passwd
- •Initrd /boot/initrd.Img–2.6.18–5–686
- •Права доступа к файлам
- •Комбинированные права доступа
- •1.5. Решение практических задач на разграничение доступа
- •Использование механизма sudo
- •2. Безопасное управление процессами
- •2.1. Общие сведения о процессах
- •Virtual memory (kbytes, -V) unlimited
- •2.2. Средства наблюдения за процессами
- •2.3. Переменные окружения
- •2.4. Способы автоматического запуска и остановки программ
- •Id:3:initdefault:
- •Id:3:initdefault:
- •2.5. Периодически запускаемые процессы
- •2.6. Запуск и остановка программ в интерактивном и фоновом режимах
- •2.7. Средства взаимодействия между процессами
- •2.8. Перенаправление ввода/вывода
- •2.9. Файловая система /proc как «зеркало» процессов
- •2.10. Терминальный режим и консольные атаки
- •16:10:12 Up 15 min, 4 users, load average: 0,00, 0,00, 0,01
- •Ivanov tty2 - 16:07 3:08 0.01s 0.01s -sh
- •Ivanov tty2 2008-11-05 16:07
- •2.11. Сокрытие процессов
- •2.12. Аудит событий и его безопасность
- •3. Работа с объектами файловой системы
- •3.1. Действия над обычными файлами
- •3.2. Работа со специальными файлами устройств
- •255 Heads, 63 sectors/track, 19457 cylinders, total 312581808 sectors
- •255 Heads, 63 sectors/track, 91201 cylinders, total 1465149168 sectors
- •255 Heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
- •16 Heads, 32 sectors/track, 988 cylinders, total 505856 sectors
- •3.3. Монтирование файловых систем
- •3.4. Копирование и запись данных
- •2,0,0 200) 'Ata ' 'wdc wd3200bevt-2' '11.0' Disk
- •1000,0,0 100000) 'Hl-dt-st' 'dvdram gma-4082n' 'pt06' Removable cd-rom
- •3.5. Использование «жестких» и символических ссылок
- •4. Безопасность файловых систем ext*fs
- •4.1. Архитектура файловых систем ext*fs
- •Inode count: 438048
- •Inodes per group: 8112
- •Inode blocks per group: 507
- •Inode: 131329 (0x00020101)
- •Indirect block:
- •131329 Drwxr-xr-X 2 root root 4096 Мар 18 17:42
- •Inode: 527744 (0x00080d80)
- •Indirect block:
- •0X024f9040 73 79 6e 63 0a 00 00 00 : 00 00 00 00 00 00 00 00 sync............
- •4.2. Временные отметки файлов
- •4.3. Алгоритмы логического удаления и восстановления файлов
- •Сетевые возможности операционных систем linux
- •5.1. Контроль и настройка сетевых интерфейсов
- •Inet addr:192.168.0.4 Bcast:192.168.0.255 Mask:255.255.255.0
- •Interrupt:5 Base address:0x4000
- •Inet addr:127.0.0.1 Mask:255.0.0.0
- •Ifconfig eth0 -arp
- •Inet addr:192.168.0.4 Bcast:192.168.0.255 Mask:255.255.255.0
- •Interrupt:5 Base address:0x4000
- •Ifconfig eth0 promisc -arp
- •Iwconfig ath0 mode adhoc channel 1 essid “abcd”
- •5.2. Разведка сети
- •5.3. Перехват и анализ сетевого трафика
- •Лабораторный практикум
- •Общие требования
- •Памятка обучаемым
- •Выполнение работы
- •Лабораторная работа № 2 «Исследование архитектуры файловых систем ext*fs»
- •Контрольные вопросы
- •Контрольные вопросы
- •Лабораторная работа № 4 «Реализация политики разграничения доступа средствами ос Linux»
- •Временная нейтрализация парольной защиты
- •Контрольные вопросы
- •Лабораторная работа № 5 «Исследование процессов в ос Linux» Подготовка к работе
- •Наблюдение за файловой системой /proc
- •Просмотр и анализ информации о процессах
- •Управление процессами
- •Работа с консолями
- •Работа с каналами
- •Исследование опасных команд
- •Контрольные вопросы
- •ЛаборАторная работа № 6 «Исследование сетевых возможностей ос Linux»
- •Ifconfig eth0 –arp
- •Контрольные вопросы
- •Лабораторная работа № 7 «Исследование беспроводной сети WiFi под управлением ос Linux»
- •Interrupt:19
- •Inet addr:127.0.0.1 Mask:255.0.0.0
- •Iwconfig ath0 channel 1 essid "abcd"
- •Iwlist ath1 scan
- •Iwconfig ath0 key off
- •Iwconfig ath0 key 0123-4567-89ab-cdef
- •Контрольные вопросы
- •Лабораторная работа № 8 «Наблюдение и аудит в ос Linux»
- •Библиографический список
Virtual memory (kbytes, -V) unlimited
Рис. 2.1. Информация о ресурсах, выводимая командой ulimit –a
Аналогичная информация доступна для просмотра в виртуальных файлах limits, которые располагаются в нумерованных директориях, выделенных для каждого процесса в каталоге /proc (параграф о содержимом этого каталога следует ниже). В файле, имеющем вид таблицы, для каждого параметра задаются «жесткие» и «мягкие» лимиты. «Жесткие» лимиты задаются для всех пользователей, включая администратора. В рамках «жестких» пределов каждый пользователь может задавать для своих процессов «мягкие» ограничения, которые не должны выходить за обозначенные общими правилами границы.
Неограниченные права любого процесса позволяют обычному пользователю произвести атаку на захват ресурсов компьютерной системы. Так, команда
cat /dev/zero > /tmp/abcd
позволяет создать в доступном общем каталоге файл неограниченных размеров.
Наличие в командном файле бесконечного цикла
while 1
mkdir 1
cd 1
touch 2
end
не только создает каталог бесконечной «глубины», но и путем создания множества пустых файлов истощает доступный ресурс индексных дескрипторов.
Десяток расточительных пользовательских процессов, порожденных командами типа
yes 12345 > /dev/null & ,
существенно замедлят выполнение полезных программ и сервисов.
Порождение процессов в цикле (возможное число процессов, которые может создать пользователь, хоть и не бесконечно, но довольно велико) может на некоторое время заблокировать администратору отображение самой информации о процессах, поскольку утилита ps –ef будет непрерывно обновлять свои данные.
К счастью, с помощью вышеназванной команды ulimit есть возможность урезать аппетиты пользовательских программ как в отношении дискового пространства, так и в отношении количества создаваемых процессов. Лимит на максимальный размер файлов устанавливается командой
ulimit –f 100 ,
после чего создание файла размером более 100 блоков (1 блок = 1024 байта) станет невозможным. Ограничитель на число открываемых процессом файлов задается указанием значения при параметре -n. Для того чтобы ограничить максимальное число процессов, запущенных одним пользователем со всех терминалов, следует исполнить команду
ulimit -u 10 ,
где величина -u указывает максимальное число процессов.
Нетрудно убедиться, что эти ограничения действуют только в текущем сеансе и только на экземпляр оболочки, обслуживающей конкретного пользователя в конкретной консоли. Для установления «жестких» ограничений на все сеансы и процессы, запущенные любым пользователем, администратор должен записать строки
ulimit -u 10
ulimit -n 50
ulimit -f 1000
в файл /etc/profile. Ограничения начнут действовать сразу после нового входа пользователя в систему, т. е. когда процесс login создаст сеанс пользователя и запустит процесс bash в рамках этого сеанса, а процесс bash считает все установочные значения из всех своих имеющихся конфигурационных файлов. Пользователям (кроме администратора) не удастся превысить или переустановить эти пределы.
В операционной системе по умолчанию запускается довольно много системных процессов и сервисов. Многие из них напрасно расходуют процессорное время и оккупируют оперативную память. Некоторые сервисы откровенно небезопасны по причине своей уязвимости. Специалисты рекомендуют администраторам избавляться от подобного «багажа». Вот краткий список сервисов сомнительной полезности:
-
portmap, rpc.mountd, rpc.nfsd – службы обеспечивают функционирование сетевой файловой системы NFS;
-
nmbd, smbd – службы реализуют аналог с сетевыми ресурсами ОС Windows*;
-
named – обеспечение службы доменных имен;
-
telnet, rlogin, rexec – небезопасные службы для сетевого управления компьютером;
-
finger, comsat, chargen, identd, echo – набор устаревших и небезопасных служб.
Все сущности в операционной системе имеют свои номера. Не являются исключением и процессы. Каждому из них система назначает уникальный 16-разрядный идентификатор (process identifier – PID). Таким образом, в системе может быть одновременно запущено большое число – 65536 процессов. Идентификационные номера присваиваются процессам по порядку, по мере их создания. Обычно первая сотня номеров присваивается системным процессам и демонам, поскольку они запускаются первыми. При завершении процесса система освобождает его идентификатор, но современные версии ОС в одном сеансе освобожденные номера повторно используют только после исчерпания доступного диапазона.
Процесс, запущенный другим процессом, называется дочерним (child) процессом или потомком. Соответственно созидающий процесс называется родительским (parent), родителем или просто – предком. Поэтому у каждого процесса наряду с идентификатором PID есть еще один числовой атрибут – PPID (Parent Process ID) – идентификатор родительского процесса.
Запускающий процесс создаёт своего «двойника», вызывая системную функцию fork: двойниками они являются по причине идентичности контекстов процессов, за исключением PID и PPID. Выполняя этот вызов, система создает дочерний процесс, являющийся почти полной копией родительского, но имеющий свой идентификатор PID и выполняющийся в собственном адресном пространстве. При этом родительский процесс ожидает завершения работы порождённого процесса. Для завершения работы процесса выполняется системный вызов exit. Полную самостоятельность порожденный процесс получает после выполнения системного вызова exec. Дочерний процесс сохраняет значение идентификатора родительского процесса PPID. «Родственники» могут взаимодействовать друг с другом посредством сигналов, функций межпроцессного взаимодействия, каналов и др.
Пользовательским процессам присваивается еще один идентификатор – UID – уникальный номер пользователя, который их запустил. Пользователь не может манипулировать логическими объектами непосредственно, и это делает за него программа. Обычные пользовательские программы имеют право делать только то, что разрешено их владельцу. Например, пользователь, запустивший процесс
ls –la /root
в целях просмотра содержимого подкаталога администратора, получит сообщение permission denied. На самом деле отказ в доступе получил процесс, запущенный от имени пользователя. Но такой же процесс, запущенный с правами обладателя нулевого UID, будет выполнен успешно.
Процессы могут иметь так называемые эффективные идентификаторы пользователя EUID и группы EGID. Такие процессы порождаются исполняемыми файлами с установленным битом SUID или SGID. Эффективный идентификатор позволяет процессу выполнять действия не от имени пользователя, запустившего процесс, а от имени владельца файла. Данный механизм необходим для выполнения некоторых задач, например пользователю в ходе работы разрешается сменить собственный пароль, если минимальный срок действия старого пароля еще не истек. Если лишить пользователей таких прав, нагрузка на администратора возрастет многократно.
Смена пароля сопровождается вычислением его хэш-образа, который должен быть записан в недосягаемый и невидимый для пользователя файл /etc/shadow. Возникшее противоречие решается так: программа passwd, вычисляющая хэш-функцию введенного пароля и записывающая результат в теневой файл, выполняется не от имени пользователя, а от имени владельца утилиты – администратора. Аналогичными временными правами обладают процессы, порожденные при запуске таких утилит, как su, mount и некоторые другие.