Linux глазами хакера - Михаил Флёнов 10 стр.


Контрольные суммы

На даты изменения можно надеяться, но необходимо дополнительное средство проверки. Наилучшим методом является подсчет контрольной суммы. Допустим, что вы хотите отслеживать изменения в директории /etc. Для этого выполните следующую команду:

md5sum /etc/*

Таким образом, подсчитывается контрольная сумма указанных в качестве параметра файлов. На экране вы получите результат выполнения команды примерно такого вида:

783fd8fc5250c439914e88d490090ae1 /etc/DIR_COLORS

e2eb98e82a51806fe310bffdd23ca851 /etc/Muttrc

e1043de2310c8dd266eb0ce007ac9088 /etc/a2ps-site.cfg

4543eebd0f473107e6e99ca3fc7b8d47 /etc/a2ps.cfg

c09badb77749eecbeafd8cb21c562bd6 /etc/adjtime

70aba16e0d529c3db01a20207fd66b1f /etc/aliases

c3e3a40097daed5c27144f53f37de38e /etc./aliases.db

3e5bb9f9e8616bd8a5a4d7247f4d858e /etc/anacrontab

fe4aad090adcd03bf686103687d69f64 /etc/aspldr.conf

...

Результат отображается в две колонки: первая содержит контрольную сумму, а вторая - имя файла. Контрольные суммы подсчитываются только для файлов. Для каталогов будет выведено сообщение об ошибке.

В данном случае указаны все файлы каталог а /etc/*. Результат расчета выводится на экран. Но запоминать эти данные неудобно, поэтому логично будет записать их в файл, чтобы потом использовать его содержимое для анализа изменений. Следующая команда сохраняет результат в файле /home/flenov/md:

md5sum /etc/* >> /home/flenov/md

Чтобы сравнить текущее состояние файлов директории /etc с содержимым файла /home/flenov/md, необходимо выполнить команду:

md5sum -с /home/flenov/md

На экране появится список всех файлов, и напротив каждого должна быть надпись "Success" (Успех). Это означает, что изменений не было. Давайте модифицируем какой-нибудь файл, выполнив, например, следующую команду:

groupadd test

Пока не будем вдаваться в подробности команды, сейчас достаточно знать, что она изменяет файл /etc/group. Снова выполняем команду проверки контрольных сумм файлов:

md5sum -с /home/flenov/md

Теперь напротив файла /etc/group будет сообщение об ошибке, т.е. контрольная сумма изменилась. Таким образом, даже если дата корректировки файла осталась прежней, по контрольной сумме легко определить наличие вмешательства.

Что контролировать

Некоторые администраторы следят только за файлами настройки. Это большая ошибка, потому что атакой хакеров может быть не только конфигурация, но и исполняемые файлы. То, что Linux является продуктом с открытым кодом, имеет свои преимущества и недостатки.

Порок в том, что профессиональные хакеры знают программирование. Им не составляет труда взять исходный код какой-либо утилиты и изменить его на свое усмотрение, добавив необходимые функции. Таким образом, очень часто в системе открыты потайные двери.

Вы должны контролировать изменения как конфигурационных файлов, так и всех системных программ и библиотек. Я рекомендую следить за каталогами /etc, /bin, /sbin и /lib.

Замечания по работе с файлами

ОС Linux достаточно демократично относится к именам создаваемых файлов, позволяя использовать абсолютно любые символы, кроме знака "/", который является разделителем каталогов, и "0", который определяет конец имени файла. Все остальное можно применять.

Самое неприятное - это возможность использовать невидимые символы, т.к. хакер может создать программу, у которой в имени только нечитаемые знаки, и пользователь не видит такого файла. Таким образом, взломщики скрывают в ОС свои творения.

Рассмотрим пример с использованием перевода строки. Допустим, что хакер назвал свой файл hacker\nhosts.allow. В данном случае под "\n" подразумевается перевод каретки, а значит, имя состоит из двух строк:

hacker

hosts.allow

Не все программы могут обработать такое имя правильно. Если ваш файловый менеджер работает неверно, то он отобразит только вторую строку - hosts.allow, и администратор не заподозрит ничего страшного в таком имени.

Еще один способ спрятать файл - в качестве имени указать точку и пробел ". " или две точки и пробел ".. ". Файл с именем в виде точки всегда указывает на текущую директорию. Администратор, выполнив команду ls, может не заметить, что существуют два файла с одинаковыми именами, а пробела все равно не видно.

Пробелы можно вставлять в любые имена файлов, например, перед именем (" hosts.allow") или наоборот, добавить в конец, и невнимательный администратор ничего не заметит. Чтобы увидеть конечный пробел, можно при выводе добавлять к каждому имени символ "/". Для этого при вызове команды ls используйте ключ -F.

Еще один вариант спрятать файл - заменять одни символы на другие, схожие по начертанию. Например, посмотрим на имя файла hosts.a11ow. Ничего не замечаете подозрительного? При беглом взгляде обнаружить что-либо невозможно, но если приглядеться повнимательнее, то вы увидите, что вместо букв l (L) стоит цифра 1 (единица).

Хакеры могут использовать этот прием. Еще можно подменять букву "b" на "d". И здесь трудно что-нибудь заподозрить, потому что если человек каждый день видит одно и то же, то, чаще всего, воспринимает желаемый текст за действительный.

Внимание - главное оружие администраторов. Вы должны проявлять интерес к любой мелочи, и нельзя позволить обмануть наше зрение.

3.1.3. Ссылки

В вашей системе могут появиться документы для совместного использования. Рассмотрим эту ситуацию на примере. Допустим, что файл отчетности /home/report должен быть доступен нескольким пользователям. Было бы логично, если копия этого файла находилась бы в домашних директориях этих пользователей. Но создавать несколько копий неудобно, потому что затруднится синхронизация. Да и сложно собрать в одно целое модификации из нескольких файлов, особенно если корректировался один и тот же кусок. Кто будет оценивать, чьи изменения необходимо вносить в общий файл?

Проблема решается с помощью ссылок, которые бывают жесткими (Hard link) и символьными (Symbolic link). Для постижения самой сути ссылок необходимо понимать, что такое файл и какое место ему отводится операционной системой. При создании файла на диске выделяется пространство для хранения данных. Его имя - это всего лишь ссылка из директории на участок диска, где физически находится файл. Получается, что можно создать несколько ссылок на одни и те же данные, и ОС Linux позволяет делать это.

Когда мы выполняем команду ls -l, то на экране появляется подробная информация о файлах в текущей директории. Напомню ее вид:

-rw-r--r-- 1 Flenov FlenovG 118 Nov 26 16:10 1.txt

Если к директиве добавить ключ i (выполнить команду ls -il), то к выводимой информации добавится еще и дескриптор файла:

913021 -rw-r--r-- 1 Flenov FlenovG 118 Nov 26 16:10 l.txt

Первое число и есть дескриптор, по которому определяется физическое расположение файла.

Жесткая ссылка указывает непосредственно на данные и имеет такой же дескриптор. Таким образом, файл физически не удаляется из системы, пока не будут уничтожены все жесткие ссылки. По сути, каждое имя файла уже является жесткой ссылкой на данные.

Для создания таких ссылок используется команда ln, которая имеет следующий вид:

ln имя_файла имя_ссылки

В ответ на это программа создаст жесткую ссылку с именем имя_ссылки, которая будет указывать на те же данные, что и файл имя_файла.

Чтобы на практике проверять все, что будет рассматриваться дальше, создайте в своей системе файл 1.txt. Для этого можно выполнить команду:

cat > 1.txt

Нажмите клавишу <Enter> и введите несколько строк текста и нажмите клавиши <Ctr>+<D>. Теперь у вас есть необходимый файл для тестирования.

Создадим для файла 1.txt жесткую ссылку. Для этого выполните следующую команду:

ln 1.txt link.txt

С помощью команды cat link.txt выведите на экран содержимое файла link.txt и убедитесь, что оно идентично строкам в 1.txt. Теперь выполните команду ls -il, чтобы просмотреть содержимое каталога. В списке файлов должны быть две строки:

913021 -rw-r--r-- 2 root root 0 Feb 22 12:19 1.txt

913021 -rw-r--r-- 2 root root 0 Feb 22 12:19 link.txt

Обратите внимание, что первая колонка, в которой находится дескриптор для обоих файлов, содержит одинаковые значения. В третьей колонке стоит число 2, что говорит о наличии двух ссылок на данные.

Теперь попробуем изменить содержимое любого из этих файлов. Для этого выполним следующие команды:

ls > link.txt

cat 1.txt

В первой строке мы сохраняем в файле link.txt результат работы команды ls (список содержимого директории), а вторая - отображает документ 1.txt. Убедитесь, что содержимое обоих файлов изменилось и имеет одинаковые данные.

Давайте попробуем удалить файл 1.txt и посмотреть на каталог и содержимое файла link.txt. Для этого выполните следующие команды:

rm 1.txt

ls -il

cat link.txt

Файл 1.txt будет удачно удален. А вот содержимое жесткой ссылки link.txt никуда не денется. То есть данные на диске не были уничтожены, а исчезло только имя 1.txt. Обратите внимание, что у файла link.txt в третьей колонке уменьшилось значение счетчика ссылок до единицы.

Символьная ссылка указывает не на данные, а на имя файла. Это дает некоторые преимущества, но одновременно возникает большое количество проблем. Для создания символьной ссылки нужно использовать команду ln с ключом -s. Например:

ln -s link.txt symbol.txt

Посмотрим на результат с помощью команды ls -il:

913021 -rw-r--r-- 1 root root 519 Feb 22 12:19 link.txt

913193 lrwxrwxrwx 1 root root 8 Feb 22 12:40 symbol.txt -> link.txt

Теперь дескрипторы файлов разные, но для link.txt первый символ следующей колонки равен букве "l". Как раз она и указывает на то, что мы имеем дело с символьной ссылкой. Третий параметр равен единице, а последний - после знака "->" содержит имя файла, на который указывает ссылка.

Попробуем удалить основной файл и после этого просмотреть содержимое ссылки symbol.txt:

rm link.txt

ls -il

cat symbol.txt

В первой строке мы удаляем файл link.txt. Вторая команда отображает список директорий. Убедитесь, что файла link.txt нет. Если вы используете Red Hat- дистрибутив, то команда ls, скорей всего, имеет псевдоним, который, позволяет в зависимости от типа файла отображать его различными цветами. Если нет, то замените вторую команду на ls --color=tty -il.

Строка, содержащая информацию о ссылке symbol.txt, должна быть красного цвета, а текст - мигающий белый. Это говорит о том, что ссылка "битая", т.е. указывает на несуществующий файл. Команда cat symbol.txt пытается отобразить содержимое ссылки. Так как файла нет, мы увидим сообщение об ошибке.

Самое интересное, что если попытаться записать какие-либо данные в файл symbol.txt, то файл link.txt будет автоматически создан. Это огромный недостаток, поэтому вы должны следить за символьными ссылками перед удалением файлов.

Второй недостаток символьных ссылок кроется в правах доступа, но мы их будем рассматривать в гл. 4.

Еще один минус таится в блокировках. Если открыть на редактирование файл, для которого создана символьная или жесткая ссылка, то он блокируется. Представим себе, что существует ссылка на файл /etc/passwd или /etc/shadow. При блокировке одного из них вход в систему станет невозможным.

Чтобы взломщик не смог воспользоваться блокировками, его права на запись в системные каталоги должны быть ограничены. А пользователю в большинстве случаев надо давать разрешение писать только в свою домашнюю директорию и каталог /tmp. Иногда при разделении файлов может потребоваться работа с чужими каталогами, но все равно доступ ограничивается каталогом /home, где расположены пользовательские директории.

Глядя на все недостатки ссылок, возникает вопрос - а нужно ли действительно использовать их? Я рекомендую это делать только в крайнем случае, когда все остальные способы решения проблемы еще хуже. Но если нет другого выхода, то делайте это аккуратно.

3.2. Загрузка системы

Некоторые администраторы не обращают внимания на то, как стартует система. Для них главное - только работа ОС. Да, прямой зависимости нет. Но во время загрузки ОС запускается множество программ, которые отнимают память, уменьшая тем самым производительность системы.

Помимо этого, быстрая загрузка позволяет оперативно восстановить работу компьютера после сбоя. Все машины когда-либо приходится перезагружать, чтобы возобновить полноценное функционирование. Это происходит из-за ошибок в программном обеспечении, перебоев с электропитанием и др. Чем скорее вы сможете это сделать, тем меньше будет простой.

Во время загрузки должны производиться все необходимые настройки, чтобы сразу после старта не приходилось что-то конфигурировать вручную. Это может отнять слишком много времени, к тому же выполнять одни и те же действия каждый раз - очень скучно и неинтересно.

3.2.1. Автозагрузка

Для начала вернемся к утилите setup. Запустите ее в окне терминала, и перед вами откроется окно, как на рис. 2.12. Зайдите в раздел System Services. Здесь перечислены все установленные сервисы, а напротив тех, что запускаются автоматически, в квадратных скобках будет стоять звездочка. Если вы устанавливали какой-либо демон, который вам необходим в работе, но использовать его будете изредка, то нет смысла запускать его автоматически и открывать ворота для хакера. Лучше убрать для него флаг автозапуска и стартовать только при необходимости, а сразу после работы останавливать сервис.

Например, я иногда отлаживаю на своем сервере Web-сценарии, требующие MySQL. Держать базу данных постоянно загруженной - расточительство памяти и лишняя дверь в систему. Поэтому я запускаю MySQL вручную по мере необходимости, и по окончании отладки прекращаю его работу.

Настоятельно рекомендую поступить так же и убрать все лишнее с глаз долой. Для этого стрелками выделите нужный демон и снимите галочку нажатием клавиши пробел. После того как вы настроили автозапуск, переключитесь клавишей <Tab> на пункт OK, чтобы сохранить изменения. Конечно, уже запущенные демоны не выгрузятся из памяти, но при следующем старте загружаться не будут. Перезагрузите компьютер и убедитесь в том, что система работает верно, и запускаются только необходимые демоны.

Если вы работаете в KDE или GNOME, то можно воспользоваться графической утилитой для настройки автоматически запускаемых демонов. Для этого на рабочем столе щелкните по значку Control Panel (Панель управления) и перед вами откроется окно, содержащее ссылки на основные программы конфигурирования системы. Нас будет интересовать ярлык Службы.

Эту же утилиту можно запустить и другим способом. Выберите главное меню ОС, а в нем пункт Система и, наконец, Службы (рис. 3.2). В дальнейшем, для обозначения программ, которые нужно запустить из главного меню, я буду просто писать:

Основное меню ОС/Система/Службы.

Михаил Флёнов - Linux глазами хакера

Рис. 3.2. Запуск утилиты Службы

Главное окно графической утилиты Службы представлено на рис. 3.3. В центре формы вы можете увидеть список, состоящий из двух колонок. В первом столбце располагаются флажки, а во втором - названия демонов. Если напротив сервиса стоит галочка, то служба запускается автоматически. Щелчком по флажку вы можете устанавливать и снимать галочку.

Михаил Флёнов - Linux глазами хакера

Рис. 3.3. Главное окно утилиты Службы

Выделив какую-либо службу, вы можете ее запустить, остановить или перезапустить с помощью соответствующих кнопок на панели окна или через меню Действия. Любые изменения состояния автозагрузки необходимо сохранить. Для этого нажмите кнопку Сохранить на панели или выберите меню Файл/Сохранить изменения.

Внимание!

Никогда не запускайте службы, которыми вы не пользуетесь. В автозапуске должны находиться только те программы, которые необходимы вам или пользователям сервера регулярно. Если какой-либо демон используется редко, то не следует его устанавливать в автозапуск. Такие сервисы надо запускать только по мере надобности и останавливать сразу после применения. Ненужные службы лучше удалить совсем, чтобы не было соблазна использовать.

3.2.2. LILO

Как мы уже знаем, программа LILO позволяет загружать Linux и другие ОС, установленные на вашем компьютере. Все настройки загрузки хранятся в файле /etc/lilo.conf. Программа LILO начинает работать после того, как компьютер протестировал систему, и до старта ОС. В старых версиях это выглядело, как простое текстовое приглашение:

LILO

или

LILO boot:

В ответ на это вы можете нажать клавишу <Enter>, чтобы загрузить ОС по умолчанию или клавишами <↑> и <↓> выбрать ту ОС, которая нужна в данный момент. В современных версиях загрузчик имеет более приятный графический вид.

Пример конфигурационного файла можно увидеть в листинге 3.1.

Назад Дальше