Что делать если вас взломали? (ч. 3)


Макаров Тихон

Теперь перейдем к тому, как хакеры скрывают свое присутствие в системе.

1. Журналы

Все действия записываются в журналах. Вот файл syslog:

##
# Log all kernel messages to the console.
#
# Logging much else clutters up the screen.
#
#kern.* /dev/console
#
# Log anything (except mail) of level info or higher.
#
# Don't log private authentication messages!
#*.info;mail.none;authpriv.none;cron.none /var/log/messages
#
# The authpriv file has restricted access.
#authpriv.* /var/log/secure
#
# Log all the mail messages in one place.
#mail.* /var/log/maillog
#
# Log cron stuff
#cron.* /var/log/cron
# Everybody gets emergency messages
#*.emerg *
#
# Save news errors of level crit and higher in a special file.
#uucp,news.crit /var

У отдельных программ существуют еще свои логи. Конечно, они будут чиститься опытным хакером.

2. Трояны

а) Во-первых злоумышленнику надо убрать процедуры записи в файл в исходниках следующих программ: sudo, su, sshd, rlogind, in.telnetd, login и др. (зависит от того, чем злоумышленник намерен пользоваться). Или лучше добавить строки в нее:

if (strstr(msg, "111.111.111.111" ) ) // если у пользователя ip=111.111.111.111, то выходим из процедуры.
return; // для удаленных команд (при регистрации пользователя, например)

б) Процессы и файлы. readproc.c используется командой ps. Здесь я предлагаю измененную его версию.

Для файлов все аналогично. В файл ls.c или исходники подобных программ достаточно добавить проверку: если имя файла содержит xxxxxx, то пропустить его (для ls.c ее надо добавить в функцию file_interesting).

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

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

 

ДЕЙСТВИЯ АДМИНИСТРАТОРА ПОСЛЕ ВЗЛОМА И ПРОФИЛАКТИКА

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

ПРОФИЛАКТИКА

1. find / \ ( -perm -02000 -o -perm -04000 \) -ls позволяет найти все программы с установленными uid индификаторами.

2. На сайте www.nabou.org можно скачать программу с одноименным названием, которая позволит записать контрольные суммы файлов и др. данные, после чего зашифровать свою базу.

3. Необходимо так же поставить программу, защищающую ваш компьютер от сканирования извне. Лучшей программой этого рода, имхо, является protsentry. Она позволяет определять производить защиту по udp и tcp протоколам. И если она замечает сканирование, то вообще запрещает данному пользователю обращаться к серверу.

4. Очень важным является проверка журналов. Во-первых, всем журналам нужно поставить права на чтение только для root. Наиболее удачной программой я считаю logsurfer, хотя можно и использовать другие программы (будьте осторожны, т.к. некоторые программы будут анализировать журналы, но воизбежание лишних сообщений, не будут показывать строки, считающиеся ими безопасными, что потенциально опасно). Logsurfer позволяет выдавать в отчете цепи из каких-то событий. Если, например, к файлам каталога /etc/ обращаются, то logsurfer выдаст еще и кто это делает, какие у него права, когда он зашел в систему и др. подробности. Она достаточно тяжела в настройке, но там есть достаточно полная документация.

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

#!/usr/bin/perl
use MD5;
require 'find.pl';
$md5 = new MD5;
@dirs = @argv;
for $dir (@dirs) {find($dir); }
sub wanted {push @files, $names; }
for $name (sort @files) {
($uid,$gid)=(stat $name) [4,5];
$stat = sprintf "%0o",(stat _) [2];
unless (-f name) {
printf "$stat\t$uid $gid\t\t\t\t\t\t$name\n";
next;
}
$md5->reset();
open FILE, $name or print(STDERR "Can't open file $name\n"), next;
$md5->addfile(file);
cloe FILE;
$checksumm = $md5->hexdigest();
printf "$stat\t$uid $gid $checksum\t$name\n");
} // Автором кода явл. Жорж Курц.При запуске такого сценария в директории dir, вы получите базу для всех файлов этого каталога.

5. Для повышения безопасности лучше скачать различные "заплатки" для ядра. Очень полезными являются ссылки:

www.lids.org
www.openwall.com

6. Команда "netstat -na lsof" позволит узнать обо всех подключениях. Благодаря ней можно определить объем передаваемого трафика, который резко повышается во время взлома компьютера.

7. Проверяйте наличие параметра Promisc в результате работы команды "ipconfig -a", т.к. он обозначает работу в неразборчивом режиме, а значит, на компьютере может быть установлен сниффер.

8. Проверять наличие новых учетных записей в системе, а так же вредоносные действия по отношению к журналам "входа в систему" utmp и wtmp программами типа chkwtmp.

 

"ПОСЛЕВЗЛОМИЕ"

Итак, подозрений во взломе больше нет, есть уверенность, что вас взломали. Примите следующие действия:

1. Отключите все от работы с сетью.

2. Закройте доступ всем учетным записям кроме root.

3. Перезагрузитесь с загрузочного диска и оценивайте вред, нанесенный системе:

а) Новые каталоги, файлы (в особенности программы с установленными uid битами).

б) Записи в журналах, проверка меток и контрольных сумм файлов.

в) Изменение конфигурации *.conf файлов.

4. Перекомпилируйте особо важные части системы и установите их на взломанный компьютер.

 

Кажется, все. Серия статей, как мне кажется, закончена. Теперь я привожу более подробные листинги. Сразу прошу прощения за некорректности в их написании (небольшие), т.к. я торопился. Если у вас есть новые темы, предложения, корректировки и прочее, пишите. Буду рад любым письмам, кроме спама и ругательств :).