В борьбе с журнальными бестиями Иван Скляров (www.sklyaroff.ru) Хакер, номер #078, стр. 078-100-1 Разбираемся с бинарными логами utmp, wtmp и lastlog Совершенно очевидно, что нужно всяческими способами скрывать свое присутствие в логах захваченной системы. Скрипт-кидди обычно не задумываясь скачивает какой-нибудь логвайпер или устанавливает руткит, который делает всю работу автоматически. Однако профессионал должен не только знать, какие лог-файлы надо чистить, но и четко понимать их формат. Если логи стандартных демонов, к примеру, syslogd, httpd, sshd, описаны более чем достаточно, то большинство источников хранят гробовое молчание о формате таких важных лог-файлов, как wtmp, utmp и lastlog. Сегодня мы постараемся восполнить этот информационный пробел. [зачем нужны wtmp, utmp и lastlog] То, что формат файлов wtmp, utmp и lastlog большинство источников обходят стороной, не случайно. Дело в том, что, в отличие от всех остальных логов, в этих трех данные хранятся не в текстовом формате, а в бинарном, поэтому ручное редактирование их невозможно. А зачем вообще нужны эти логи? Ответ на это предоставят страницы справочных руководств. Команды man wtmp, man utmp и man lastlog поведают нам о том, что файл lastlog содержит информацию о последнем входе пользователя в систему, файл wtmp содержит исторические сведения о подключениях к системе, а utmp cодержит сведения о текущих подключениях к системе. Но самое важное то, что из файлов utmp и wtmp читают информацию такие утилиты, как who, w и last (если быть более точным, то who и w читают из utmp, а last берет информацию из wtmp), а из файла lastlog читает информацию одноименная утилита lastlog. Если хакер не подчистит эти файлы, то администратор легко сможет выцепить его в системе банальным запуском who. Понятно, что взломщик должен знать все о файлах wtmp, utmp и lastlog, чтобы уметь грамотно скрывать свое присутствие. [знакомимся поближе] Стандартно файлы wtmp, utmp и lastlog располагаются в системе по следующим путям: /var/run/utmp (/var/log/utmp), /var/log/wtmp и /var/log/lastlog. Так как в эти логи заносится вся информация о подключениях и перезапусках, то, следовательно, в них должны писать такие процессы, как login, getty, ftp, xdm, kdm и т.д. Утилиты who, w и last берут лишь часть данных из utmp и wtmp, обычно в этих логах сохраняется гораздо больше информации. В Linux присутствует программа utmpdump, которая позволяет просмотреть более полную инфу из utmp и wtmp в понятном для человека формате. Как видно на скриншотах, каждая строка в выводимой информации состоит из восьми позиций, а каждая позиция ограничена квадратными скобками. В первой позиции расположено число, которое является идентификатором сессии; во второй расположен PID процесса; в третьей могут быть следующие значения: ~~, bw, число или буква и число. Эти метки обозначают соответственно: изменение уровня запуска или перезагрузку системы, процесс bootwait, номер TTY, комбинацию буквы и числа для PTY (псевдотерминал). Четвертая позиция может быть либо пустой, либо содержать имя пользователя, reboot (перезагрузка) или runlevel (уровень запуска). В пятой позиции указывается контролирующий TTY или PTY, если эти данные известны. Шестая позиция показывает имя удаленного узла. Если подключение осуществляется с локального узла, в этом поле ничего не указывается. В седьмой позиции указывается IP-адрес удаленной системы. И в последнем, восьмом поле содержится дата и время внесения записи. Содержимое файлов utmp и wtmp в целом совпадает, только в файле utmp записи расположены в хронологическом порядке, а в wtmp этот порядок противоположен, то есть самые старые записи расположены в конце. Часто в utmp присутствуют устаревшие записи из-за того, что соответствующие сеансы когда-то были завершены некорректно. Если файлы utmp, wtmp и lastlog удалить, то логирование не будет осуществляться. Чтобы начать журналирование, эти файлы нужно создать пустыми: |