Linux глазами хакера - Михаил Флёнов
Шрифт:
Интервал:
Закладка:
□ nodev — запрещает использование файлов устройств;
□ nosymfollow — запрещает использование мягких ссылок.
Опции nodev и nosymfollow не сильно влияют на безопасность, но могут пригодиться.
Использование параметра noexec — бесполезное занятие и абсолютно не защищает систему от профессионального хакера, потому что опытный взломщик сможет запустить программу, если для выполнения разрешен хотя бы один раздел. А таковым всегда является раздел с директорией /bin и другие каталоги, которые содержат необходимые для работы программы.
Допустим, что ваш сайт разрабатывается с использованием языка Perl. Если его интерпретатор доступен для выполнения, то взломщик сможет запускать сценарии программ Perl в любом разделе, в том числе и с установленным параметром noexec. Если для запуска сценария использовать командную строку, то вы получите сообщение о нарушении прав доступа. Но программа выполнится, если написать следующую команду:
perl file.pl
Несмотря на то, что file.pl находится в разделе, в котором запрещены исполняемые файлы, ошибки не будет, потому что запускается разрешенная программа perl, которая в свою очередь читает файл (дозволенная операция) и выполняет его в своем адресном пространстве.
Вспомните описание файла mtab, где для CD-ROM стоит запрет на использование SUID- и SGlD-программ. То же самое необходимо сделать, как минимум, с разделами /home и /tmp. Тогда пользователи не смогут создавать в своих директориях привилегированные программы, что позволит предотвратить большое количество возможных атак.
Итак, давайте попробуем смонтировать CD-ROM в другую директорию. Для этого сначала создадим ее:
mkdir /mnt/cd
Теперь выполним команду
mount /dev/cdrom /mnt/cd
Если на вашем компьютере установлено две ОС — Windows и Linux, то диск, скорее всего, содержит файловую систему FAT32 или NTFS. Следующие команды позволяют подключить FAT32 к Linux:
mkdir /mnt/vfat
mount -t vfat /dev/hda3 /mnt/vfat
Первая команда создает директорию /mnt/vfat, куда будет подключаться диск с FAT32.
Во второй команде происходит монтирование диска /dev/hda5. Будем считать, что как раз он и принадлежит Windows. Ключ -t позволяет указать тип подключаемой файловой системы. Это обязательно. Для CD-ROM мы этого не делали только потому, что вся необходимая информация есть в файле /etc/fstab. Файловая система указана в параметре vfat. Это имя для FAT32, которое используется в Linux.
Более подробно о работе команды можно узнать на страницах документации (man mount).
umountКогда вы подключили к файловой системе CD-ROM, то это устройство блокируется, и диск нельзя вытащить, пока он не будет размонтирован. Для этого используется команда umount.
Например, следующая команда позволяет размонтировать CD-ROM:
umount /dev/cdrom
fdformatПеред использованием дискет их нужно отформатировать. В ОС Linux для этого используется команда fdformat.
tarПо ходу изложения данной книги мы иногда будем устанавливать различные программы, часть из них поставляется в виде архивов tar.gz. Чаще всего это программы, хранимые в исходных кодах. Для разархивирования такого файла нужно выполнить команду:
tar xzvf имяфайла.tar.gz
Как правило, после выполнения команды в текущей директории будет создан каталог с таким же именем, как у архива (только без расширения). В нем вы сможете найти все распакованные файлы.
К работе с архивами мы вернемся в гл. 13, когда будем рассматривать резервирование данных. Сейчас же нам достаточно уметь распаковывать пакеты, чтобы устанавливать дополнительные программы и утилиты сторонних разработчиков.
rpmВ настоящее время большинство программ поставляются уже не в исходных кодах, а в виде RPM-пакетов. Их установка намного проще, т.к. программы в них уже скомпилированы. Если вы используете МС, то выберите RPM-пакет и нажмите клавишу <Enter>. Таким образом вы войдете в него как в директорию и увидите содержимое.
Каждый пакет обязательно содержит исполняемый файл install. Запустите его для установки программы.
Если вы не используете МС, то для установки нового пакета можно выполнить команду:
rpm -i пакет
Для обновления уже установленного пакета можно выполнить команду с параметром -U:
rpm -U пакет
Для того чтобы видеть ход инсталляции, можно указать еще и ключ -v. Таким образом, команда установки будет выглядеть следующим образом:
rpm -iv пакет
whichИногда необходимо знать каталог, в котором расположена программа. Для этого используется команда which с именем программы в качестве параметра, которая проверит основные каталоги, содержащие исполняемые файлы. Например, чтобы определить, где находится программа просмотра содержимого каталогов ls, выполните следующую команду:
which ls
В результате вы увидите путь /bin/ls. Если ваша ОС поддерживает псевдонимы (alias) команд, то можно будет увидеть и его. Таким образом, после выполнения команды на экране выведется:
alias ls='ls -color=tty' /bin/ls
3.1.2. Безопасность файлов
В гл. 4 мы будем подробно говорить о правах доступа. Это основа обеспечения безопасности, но и только, и надеяться на это нельзя. Необходимы дополнительные инструменты сохранения целостности системы, или, по крайней мере, вы должны следить за изменениями основных объектов ОС — файлами. В них хранится информация, а именно она необходима взломщикам. Хакеры стремятся прочитать, изменить или даже уничтожить информацию, поэтому вы должны уметь ее контролировать.
Дата измененияСамый простейший способ контроля — наблюдение за датой редактирования. Допустим, что взломщик проник в вашу систему в 10:30. Чтобы узнать, что было изменено злоумышленником, можно запустить поиск всех файлов, у которых дата корректировки больше этого времени. Вроде легко, но не очень эффективно, потому что дату можно изменить с помощью команды touch. В общем виде команда выглядит следующим образом:
touch параметры ММДДччммГГ файл
Прописными буквами показаны параметры даты, а строчными — время. Формат немного непривычный, но запомнить можно. Год указывать необязательно, в этом случае будет использоваться текущий.
Рассмотрим пример. Допустим, что вы хотите установить на файл /etc/passwd дату изменения 21 января 11:40. Для этого выполняем следующую команду:
touch 01211140 /etc/passwd
Теперь воспользуйтесь командой ls -l /etc/passwd, чтобы убедиться, что дата и время изменения установлены верно.
С помощью команды touch можно и создавать файлы, сразу же указывая необходимую дату.
Несмотря на то, что дата корректировки легко изменяется, хакер может забыть или просто не успеть сделать это, а, возможно, ему просто не хватит прав.
Итак, найти все файлы, дата изменения которых больше 21 января 11:40 2005 года, можно следующим образом:
touch 0121114005 /tmp/tempfile
find /etc (-newer /tmp/tempfile ) -ls
find /etc (-cnewer /tmp/tempfile ) -ls
find /etc (-anewer /tmp/tempfile ) -ls
В первой строке мы создаем файл во временной директории /tmp с необходимой датой изменения, по которой и будет происходить сравнение.
Следующие три строки производят поиск файлов. Каждая из них имеет следующую структуру:
find директория ( -сравнение файл ) -ls
Рассмотрим по частям эту строку:
□ find — программа поиска файлов;
□ директория — каталог, в котором нужно искать. В нашем случае я указал системный /etc, в котором хранятся все настроечные файлы;
□ параметр (-сравнение файл ) — состоит из файла для сопоставления и критерия поиска файлов, который может принимать различные значения:
• -newer — дата изменения больше, чем у заданного файла в параметре файл;
• -cnewer — состояние изменено позже, чем у сопоставляемого файла в параметре файл;
• -anewer — дата последнего доступа превосходит, аналогичный параметр сравниваемого файла;
□ параметр -ls — отображает на экране список файлов (как при выполнении команды ls).
Контрольные суммыНа даты изменения можно надеяться, но необходимо дополнительное средство проверки. Наилучшим методом является подсчет контрольной суммы. Допустим, что вы хотите отслеживать изменения в директории /etc. Для этого выполните следующую команду:
md5sum /etc/*
Таким образом, подсчитывается контрольная сумма указанных в качестве параметра файлов. На экране вы получите результат выполнения команды примерно такого вида: