Уровень сложности: начальный
Вводный обзор стандартных инструментов GNU/Linux должен помоч начинающим пользователям Linux контроллировать работу ОС. Используемые приложения, как правило, включены в поставку известных дистрибутивов. Полезным побочным эффектом я считаю возможность сориентировать молодых системных и сетевых администраторов в условиях [подозрения] компрометации.
Локальное наблюдение
Журналы.
Журналирование работы системы очень важно. Log-файлы являются первым источником сведений о процессах, происходивших в системе, и, конечно же, первой целью взломщика, заметающего следы проникновения. Киберпреступники всегда стараются максимально скрыть любые доказательства своей деятельности, поэтому хорошим подходом является сохранение либо дублирование журналов на отдельном ресурсе или по электронной почте. Естественно, электронный ящик, куда приходят отчеты работы системы, должен обслуживаться отдельным узлом. В этом случае, как правило, им можно верить.
FHS предлагает директорию, в которой должны располагаться файлы регистрации. Вот небольшой список стандартных расположений журналов:
- /var/log/acpid — служба, которая отвечает за питание (acpi для intel);
- /var/log/boot.log — журнал загрузки системы;
- /var/log/cron — планировка событий;
- /var/log/messages — сообщения системы (ядра);
- /var/log/Xorg.*.log — графическая подсистема (X-сервер Xorg);
- /var/log/cups/* — система печати cups (достаточно популярная и широкораспространенная);
Журналирование http-, ftp-сервера, MTA/MDA, сетевых служб уже более узкая и профессиональная тема. По понятным, надеюсь, причинам не рассматриваются в данной статье.
Оговорюсь, что указанные пути к файлам регистрации конечно же могут отличаться в различных системах. В подобных ситуациях следует обращаться к документации дистрибутива.
Я привел лишь некоторый список, для примера. Узнать расположение журнального файла можно из man-страниц или файлов конфигурации. Обычно это не должно вызвать затруднений.
Изменения в файлах.
Очень хорошим инструментом для выявления факта модификации файлов является стандартная программа find. Разумное использование параметра mtime поможет установить изменения в файловой системе, например, команда
find /etc -mtime -1
покажет файлы, которые были изменены в течение последних суток. Очень хорошо поиск файлов по различным временам описан в Unix find tutorial.
Процессы.
Анализ запущенных процессов следует проводить с помощью программы top. Пример вывода:
top - 15:21:36 up 4 days, 19:04, 2 users, load average: 0.06, 0.01, 0.00
Tasks: 92 total, 1 running, 91 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.7%sy, 0.0%ni, 97.4%id, 1.7%wa, 0.3%hi, 0.0%si, 0.0%st
Mem: 256088k total, 249192k used, 6896k free, 5320k buffers
Swap: 265064k total, 304k used, 264760k free, 176876k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27362 decoy 15 0 17400 11m 3616 S 0.3 4.7 3:48.28 rtorrent
1 root 18 0 2912 1848 524 S 0.0 0.7 0:01.83 init
...
Первый столбец таблицы содержит номер процесса. Он может быть использован, например, для снятия командой kill. Далее (слева направо) следует имя пользователя, инициировавшего запуск, затем приоритет задачи, некоторая служебная информация, в частности, использование приложением системных ресурсов, время, в течение которого процесс выполняется, и команда запуска.
Кроме монитора реального времени top есть еще мощный генератор снимков процессов ps. Например, можно узнать, выполняется ли заданная программа, скажем, Midnight Commander, в данный момент или нет, командой
ps aux | grep mc | grep -v grep
Состояние сети
Сканер nmap.
Колоссально мощный инструмент, для которого пишутся чуть ли не отдельные книги по использованию. Вот пример:
$ nmap -sT -v -v -v localhost
Starting nmap 3.55 ( www.insecure.org/nmap/ ) at 2005-02-04 22:01 EET
Machine 127.0.0.1 MIGHT actually be listening on probe port 80
Host localhost.localdomain (127.0.0.1) appears to be up ... good.
Initiating Connect() Scan against localhost.localdomain (127.0.0.1) at 22:17
Adding open port 111/tcp
Adding open port 25/tcp
Adding open port 113/tcp
Adding open port 22/tcp
Adding open port 80/tcp
Adding open port 631/tcp
The Connect() Scan took 1 second to scan 1660 ports.
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1654 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
113/tcp open auth
631/tcp open ipp
Nmap run completed -- 1 IP address (1 host up) scanned in 0.503 seconds
Следовательно, на моей машине запущен веб-сервер. Еще пример (проверяем узел на предмет RPC DCOM):
# nmap -sS -p 135 xxx.xxx.xxx.xxx
Starting nmap 3.55 ( www.insecure.org/nmap/ ) at 2005-02-04 22:06 EET
Interesting ports on *.* (xxx.xxx.xxx.xxx):
PORT STATE SERVICE
135/tcp filtered msrpc
Nmap run completed -- 1 IP address (1 host up) scanned in 45.798 seconds
Замечание: некоторые типы сканирования требуют привилегий суперпользователя (root).
Сканер nmap может проверять не только отдельные узлы, но и целые диапазоны. Как правило, не входит в «чистую» инсталляцию системы, но прост в установке и крайне рекомендован к использованию в целях аудита.
Иногда, при подозрительных аномалиях или исходя из результатов nmap, очень полезно запустить анализатор трафика (сниффер) tcpdump, отфильтровать «неподозрительные» сетевые пакеты и посмотреть что же останется. По сути, tcpdump не является сниффером, он делает снимки, но в подобных ситуациях окажется крайне полезным.
Еще один замечательный интсрумент, который нужно использовать — это netstat. Он применяется для получения списка активных сетевых соединений.
$ netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:32769 *:* LISTEN
tcp 0 0 *:62978 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:auth *:* LISTEN
tcp 0 0 localhost.localdoma:ipp *:* LISTEN
tcp 0 0 localhost.localdom:5335 *:* LISTEN
tcp 0 0 *:29305 *:* LISTEN
tcp 0 0 localhost.localdom:smtp *:* LISTEN
В связке с такими инструментами Linux, как lsof и fuser, мы узнаем, какие программы используют какие порты.
Заключение
Я постарался сделать обзор системных мониторов для «самых маленьких». Весь описанный инструментарий можно найти практически в любой сборке Linux. Речь не идет о мощных и тяжеловесных сторонних программных комплексов IDS и оболочек для ФС.
В заключении я хотел бы сказать, что грамотное использование самого стандартного набора инструментов позволяет проводить базовый аудит. Помните: проблема безопасности не выдумка параноиков! Многие задумываются о собственной защите после влома. «Лучший способ убедиться в том, что меры предосторожности не понадобятся — вовремя принять их», — Мерфи.
Краткий обзор на последок...
Анализ процессов:
- top
- ps
Анализ сети:
- nmap
- tcpdump
- netstat
- fuser
- lsof
Анализ файловой системы:
- find