Linux :: Что делать если вас взломали?


Что делать если вас взломали?
Макаров Тихон
Итак, предположим, что вас взломали или у вас есть на это какие-то подозрения. Что делать? Сейчас узнаете. Уж в восстановлении после взлома я опытен...
СОЗДАНИЕ НОВЫХ ОШИБОК
Как только хакер взломает доступ, то он сделает в вашей системе несколько изменений для того, чтобы потом заходить к вам "в гости" даже если вы закроете ту "дыру", через которую ваш компьютер и был скомпрометирован.
Итак, начнем с перечисления того, что злоумышленники изменяют:
1. Своя учетная запись
Создать учетную запись в /etc/passwd (shadow). Возможно, кто-то и не заметит такого изменения... Не забудьте про другие файлы с паролями (.htaccess для веб-сервера).
2. hosts.allow и hosts.deny
Здесь, кажется, уже все понятно (если вы по крайней мере читали предыдущие статьи этой серии). Ему достаточно ввести команду: echo 'All: hacker's.computer.ip.adress' >> /etc/hosts.allow. Такие изменения не пользуются особой популярностью, т.к. администратору легко проверить наличие изменения этих файлов и установленный ip адрес "засветится".
3. NFS
Монтирование каталога записывается в etc/exports командой:
echo '/ hacker_computer(rw,no_root,squash)' >> etc/exports
Данная команда позволит смонтировать корневой каталог ('/') с правом read&write компьютеру hacker_computer. После этого без подключения к компьютеру злоумышленник сможет изменять файлы passwd и shadow.
Для обнаружения взлома администратору достаточно контролировать изменения файла etc/exports, а имя используемого злоумышленником компьютера опять становится известно root'у.
4. Свои root-программы.
Достаточно простой и эффективный способ получить root доступ - создать свою программу, работающую с командным интерпретатором. Можно просто создать его копию. Тогда все его команды могут выть выполнены с помощью данной копии. От такой возможности взлома придумали множество заплаток. Они сравнивают идентификаторы uid (настоящие права пользователя) и euid (именно этот параметр становится root'овским при работе с копией интерпретатора). Однако создание копии интерпретатора - одна возможность взлома. Можно так же создать свою программу с установленным uid, которая будет при запуске с каким-то параметром добавлять учетную запись, а без него - выводить код какой-нибудь ошибки и выключаться (это пример).
Я предлагаю такое решение для программы:
#include
#define _xopen_source
...
if (strcmp (crypt(passwd,encrypted),encrypted) == 0) {
setreuid(0,0);
system("/bin/bash");
}
//здесь я привожу только часть, где мы изменяем uid и euid для пользователя.
...
Администратору необходимо искать изменения в существующих uid программах и появление новых uid программ. если найдена подозрительная программа, то ее лучше запустить с помощью отладчика (или сразу удалить), а не открывать.
5. Удаленная работа с bin/bash
a) Если у злоумышленника есть доступ компьютеру, то он сможет воспользоваться пунктом 4, а если нет, то ему необходимо удаленно запустить командный интерпретатор. Для этого ему надо добавить еще одну службу в файл демона inetd (пусть меня упрекнут в старомодности и в том, что в наше время используют уже xinetd, но по-моему любой нормально соображающий человек сможет сам немного видоизменить написанные ниже строки).
Пусть есть порт XXX, который удаленный сервер не использует, тогда в etc/inetd.conf можно добавить строку
"ХХХ stream top nowait root /bin/bash -i"
и, подключившись к порту ХХХ, создастся пользовательская оболочка командного интерпретатора (за это мы должны благодарить -i).
Такое изменение будет сразу замечено опытным администратором, ведь он проверяет изменения данного файла. Но хакеру не обязательно изменять существующий файл конфигурации, он может просто создать свой: пусть файл лежит в hacker/inetd.conf, тогда команда /usr/sbin/inetd /hacker/inetd.conf
Вероятно, можно создать лазейку такого типа даже не используя inetd, но у меня не получилось ничего придумать.
От запуска подложного inetd защититься сложнее, но если у администратора стоит firewall, то злоумышленник не сможет подключиться к необходимому компьютеру. Соответственно необходимо следить и за изменениями в ipchains (тут меня попрекнули, что iptables используется гораздо чаще, но я с этим не согласен, хотя в будущем iptables действительно вытеснит ipchains).
Примечание: открытые, зарезервированные и др. порты можно увидеть в файле protocols.txt
б) Неконтролируемые соединения разрешаются firewall, благодаря чему существует еще одна возможность создания потайного хода, ведь при неконтролируемом соединении можно переправить команды.
6. Удаленные команды
Существуют файлы etc/hosts.equiv и домашний_каталог/.rhosts, которые разрешают пользователям определенных компьютеров выполнять различные команды без ввода пароля при подключении. Такие файлы часто используются в небольших локальных сетях. Таким образом, злоумышленник, при вводе команды "echo 'hacker's_copmuter makarov">> /etc/hosts.equiv" сможет входить с компьютера hacker's_computer под пользователем makarov с правами любого пользователя кроме root. Зато под root'ом позволяет заходить файл .rhosts: если создать в домашнем каталоге root'a данный файл и записать в него hacker's_copmuter makarov, то makarov будет иметь полные права при подключении к жертве.
Конечно, необходимо следить за изменением данных файлов. А если такой тип подключения вам не нужен, то его можно отключить, а так как при нем используются так называемые r-команды, достаточно их просто запретить. Делается это в файле inetd.conf. Закомментируйте в нем строки содержащие:
... in.rshd
... in.rexecd
... in.rlogind
7. SSH
Во-первых, ssh поддерживает удаленные команды (пункт 6). Ssh предпочитают, т.к. у него существует принцип аутентификации: клиент отсылает свой открытый ключ и ssh проверяет его на валидность. Такой принцип помогает защититься от взлома, а вот если у злоумышленника уже есть полный доступ к компьютеру, то ему достаточно добавить свой ключ в etc/ssh_known_hosts.
В файле etc/sshd_config указывается, как относиться к файлам hosts.equiv и .rhosts: (необходимо пометить словом yes выбранный способ работы)
-)IgnoreRHosts - не работать с ними.
-)RhostsRSAAuthentication - дополнительно есть аутентификация по строке-ключу.
-)RhostsAuthetication - работает с данными файлами и не производит проверки по ключу.
Во-вторых, существует принцип закрытого ключа: клиент отсылает свой открытый ключ, ssh криптует им строку и отсылает клиенту, клиент с помощью секретного ключа расшифровывает ее и отсылает ssh. Таким образом, злоумышленник должен выполнить команду
cat dir_of_key/hacker.key >> root/.shh/authorized.keys
после чего командой
ssh -lroot computer_he_hacked.ru
сможет зайти под root. Примечательно то, что даже если пароль root'a будет изменен, доступ у злоумышленника останется.

Продолжение >>>

читать еще в разделе