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

Системные средства с открытым программным кодом: основы

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

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

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

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

Реализация

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

Аргументы командной строки net
Командная строка 9x NT Me 2000 XP Описание
net accounts No Yes No Yes Yes Определяет параметры политики доступа в систему, такие как срок действия пароля, историю паролей и политику блокировки и выхода из системы.
net computer No Yes No Yes Yes Добавляет или удаляет компьютеры в домен.
net config Yes Yes Yes Yes Yes Отображает текущую информацию о сервере и рабочей группе, включая имя компьютера, имя пользователя, версию программного обеспечения и имя домена.
net continue No Yes No Yes Yes Перезапускает приостановленную службу.
net diag Yes No Yes No No Отображает диагностическую информацию о соединениях оборудования в сети.
net file No Yes No Yes Yes Отображает имена всех открытых в настоящее время файлов и предоставляет возможность их закрытия.
net group No Yes No Yes Yes Установка свойств Общей группы Windows (только на контроллере домена).
net help Yes Yes Yes Yes Yes Выводит информацию о доступных командах
net helpmsg No Yes No Yes Yes Выводит подробную информацию по номерам сообщений об ошибках.
net init Yes No Yes No No Загружает драйверы протоколов и сетевых карт без присоединения их к Менеджеру протоколов Windows.
net localgroup No Yes No Yes Yes Конфигурирование свойств рабочей группы.
net name No Yes No Yes Yes Устанавливает имя, по которому компьютер будет получать сообщения.
net logoff Yes No Yes No No Закрывает соединение между вашим компьютером и сетевыми ресурсами, к которым вы были подсоединены.
net logon Yes No Yes No No Вход в домен или рабочую группу.
net password Yes No Yes No No Изменяет пароль для заданного пользователя.
net pause No Yes No Yes Yes Приостанавливает работу выполняющейся службы.
net print Yes Yes Yes Yes Yes Получение информации и управление очередью печати компьютера.
net send No Yes No Yes Yes Посылает сообщение другому пользователю или компьютеру в сети.
net session No Yes No Yes Yes Отображает список прерванных соединений между компьютером и другими устройствами в сети.
net share No Yes No Yes Yes Создает, уничтожает или отображает список общих ресурсов.
net start Yes Yes Yes Yes Yes Запускает службу
net statistics No Yes No Yes Yes Отображает статистику для сервера или рабочей станции, такую как использование сети, открытые файлы или задания на печати.
net stop Yes Yes Yes Yes Yes Останавливает работу службы.
net time Yes Yes Yes Yes Yes Отображает время, синхронизированное со специальным сервером времени в сети.
net use Yes Yes Yes Yes Yes Соединяется или отсоединяется от общих сетевых ресурсов; выводит информацию об общих сетевых ресурсах.
net user No Yes No Yes Yes Добавляет или удаляет пользователя.
net ver Yes No Yes No No Отображает информацию о версии редиректора вашей рабочей группы.
net view Yes Yes Yes Yes Yes Отображает список общих ресурсов для заданного компьютера или всех компьютеров подсети.

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

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

C:\WINDOWS\Desktop>net view /WORKGROUP: myworkgroup
Servers available in workgroup MYWORKGROUP.
Server name                 Remark
---------------------------------------------------------------------
\\BADMAN                    The bad machine
\\BROCCOLI                  Veggies are god for you
\\TECHSUPP                  Don't call as - we call you
The command was completed successfully

C:\WINDOWS\Desktop>net view \\badman 
Shared resources at \\BADMAN

Sharename       Type        Comment
--------------------------------------------------------------------
CDRW        Disk
D       Disk
HALF-LIFE   Disk
INSTALL     Disk
MP3S        Disk
The command was completed successfully
Примечание. Первая команда net view /WORKGROUP в Windows NT или 2000 не сработает. Вместо этого используйте net view /domain.

Мы получили список машин в домене/рабочей группе и нашли несколько общих ресурсов на машине Badman. Видно, что для доступа открыты MP3, популярная игра-стрелялка, полностью диск D: и пишущий CD (CD-RW). Следующий логичный шаг, естественно, попытаться выяснить, можно ли подключиться к какому-либо из этих ресурсов.

Совет. Вам не обязательно знать имя домена или NetBios-имя для просмотра доступных общих ресурсов в системе. Вы можете использовать IP-адрес - net view 192.168.1.101. Это означает, что вы можете узнать все об общих ресурсах любого компьютера в сети, даже если он не отзывается по протоколу NetBIOS, закрытому брандмауэром.

net use. Теперь, когда нам известны имена общих ресурсов, попытаемся соединиться с ними, используя команду net use.

C:\>net use * \\badman\mp3 
Drive E: is now connected to \\badman\mp3s 
The command completed successfully

C:\>net use * \\badman\d
The password is invalid for \\badman\d.

Type the password for \\badman\d:
System error 86 has occurred.

The specified network password is not correct.
C:\>net view \\badman 
Shared resources at \\BADMAN 

The bad machine

Sharename       Type        Used as     Comment
---------------------------------------------------------------
CDRW        Disk
D       Disk
HALF-LIFE   Disk
INSTALL     Disk
MP3S        Disk        E:
The command was completed successfully.

C:\>echo "hi" > e:\test-write-permission.txt
Network access is denied.
Совет. Вы можете назначить имя устройства только в том случае, если в системе включена опция совместного использования файлов и принтеров.

Мы смогли получить доступ к общему ресурсу MP3S и назначили ему следующее свободное имя устройства E:, о чем говорит символ * в командной строке net use. Однако у нас нет возможности создавать файлы на диске E:, поэтому мы имеем доступ только для чтения. Для доступа к ресурсу на запись нам необходимо ввести пароль или имя пользователя и пароль. В этом случае командная строка будет выглядеть так: net use /u:<username> <password>. Так что на самом деле мы не слишком далеко продвинулись. Мы можем сделать еще кое-что.

Доступ к ресурсу IPC$ с использованием net use. Как оказалось, машины под управлением Windows NT и 2000 имеют "административный общий ресурс". Это не обычный общий ресурс, который отображается в Сетевом окружении. Его невозможно посмотреть с помощью net view (поскольку этот файл скрытый, о чем говорит символ $ на конце имени ресурса), но он существует. Если вы знаете пароль администратора для доступа к машине, то можете использовать команду net use для соединения с одним из таких административных ресурсов.

Дополнительный административный ресурс общего доступа сделан таким образом, что администратор домена может посылать команды взад-вперед между серверами. Этот ресурс называется IPC$, что означает межпроцессное взаимодействие (InterProcess Communications)

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

Совет. Эти команды несколько различаются в разных версиях операционных систем семейства Windows. Воспользуйтесь флагом /?, чтобы получить полную информацию о синтаксисе команды и ее возможностях.

Следующий скрипт устойчиво создает достаточно привилегированный и с достаточно высокими полномочиями конвейер между вашей машиной и машиной с адресом 192.168.1.150:

C:\Windows\Desktop>net use 192.168.1.150\IPC$ "" /user: ""
The command completed successfully

Теперь мы можем запускать некоторые другие утилиты на 192.169.1.150 из тех, которые были раньше недоступны, чтобы получить дополнительную информацию о системе. К такой информации относятся сведения об именах пользователей, групп, политик, системных идентификаторах ( SIDs ), и другой подобной информации. (См. лекцию "Средства ревизии Windows" с примерами утилит, которые вы можете использовать для получения информации после создания "нулевого" соединения с IPC$.)

Совет. Убедитесь, что вы подчистили все за собой после соединения с этим системным ресурсом. Используйте net use \\192.168.1.150\IPC$ /delete для завершения соединения. Если этого не сделать, кто-нибудь обратит внимание на установленное соединение и вычислит ваш IP-адрес, используя команды net session или nbstat -s, которые уже коротко обсуждались.

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

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

Smbclient

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

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

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

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


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


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

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

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

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

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

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

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

Nmblookup

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

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

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

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

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

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

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

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

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

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

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

NBTSTAT

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

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

Реализация

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

C:\WINDOWS\Desktop>nbstat

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


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

C:\WINDOWS\Desktop>

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

C:\WINDOWS\Desktop>nbtstat -S 2

NetBIOS Connections Table

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

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

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

C:\WINDOWS\Desktop>nbtstat -A 192.168.1.102

NetBIOS Remote Machine Name Table 

Name                Type            Status
----------------------------------------------------------
MYCOMPUTER      <00>    UNIQUE      Registered
MYDOMAIN        <00>    GROUP       Registered
MYCOMPUTER      <03>    UNIQUE      Registered
MYCOMPUTER      <20>    UNIQUE      Registered
MYDOMAIN        <1E>    GROUP       Registered
MYUSER          <03>    UNIQUE      Registered
MYDOMAIN        <1D>    GROUP       Registered
..__MSBROUSE__. <01>    GROUP       Registered

MAC Address = 00-50-DA-E9-87-5F
C:\WINDOWS\Desktop>

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

Мы должны понять смысл имен, приведенных в списке, и рассмотреть комбинацию символов кодов NetBIOS (<##>) и значений типов. Во-первых, мы видим комбинацию <00> UNIQUE. Это NetBIOS-код означает, что служба выполняется и отображает список системных имен NetBIOS. Таким образом, мы можем понять, что имя системы - MYCOMPUTER.

В следующей строке стоит последовательность <00> GROUP. Это означает, что данная строка относится к рабочей группе или домену. В нашем случае запись относится к домену MYDOMAIN.

Третья строка содержит код <03>, который используется для обозначения службы передачи сообщений. И вновь в этой строке присутствует имя компьютера. Но если мы видим код <03> вместе с именем компьютера, это означает, что нам должен повстречаться этот код в нижней части таблицы в сопровождении другого имени. Как и предполагалось, в седьмой строке мы видим имя MYUSER. Это означает, что код NetBIOS <03> в таблице всегда встречается попарно (сопровождая как NetBIOS-имя компьютера, так и имя работающего пользователя). Вы можете действовать методом исключения, чтобы понять какое имя к чему относится.

Изучение значений .

Общие коды NetBIOS
Имя Код Назначение
<computer_name> 00 Служба рабочей станции.
<computer_name> 01 Служба передачи сообщений.
<\\--__MSBROUSE__> 01 Мастер-броузер.
<computer_name> 03 Служба передачи сообщений.
<computer_name> 06 Служба сервера RAS.
<computer_name> 20 Служба файлового сервера.
<computer_name> 21 Служба клиента сервера RAS.
<computer_name> BE Агент мониторинга сети.
<computer_name> BF Приложение мониторинга сети.
<username> 03 Служба передачи сообщений.
<domain> 00 Доменное имя.
<domain> 1B Мастер-броузер домена.
<domain> 1C Контроллер домена.
<domain> 1D Мастер-броузер.
<domain> 1E Выбор сервиса броузера.
<INet-Services) 1C IIS (Internet information Server).
<IS~computer_name> 00 IIS (Internet information Server).

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

В отличие от немаршрутизируемого протокола NetBIOS, NBT - маршрутизируемый протокол. Воспользовавшись флагом -A, мы можем запустить NBTSTAT для анализа любой машины, имеющей выход в интернет и получить доступ к ее NBT-трафику, который пересылается через порты 137, 138, и 139.

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

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

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

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

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

    C:\>nbtstat -A 192.168.1.47
    
    NetBIOS Remote Machine Name Table
    
    Name                Type            Status
    ------------------------------------------------------
    NT4SERVER           <00>    UNIQUE      Registered
    Inet~Services       <1C>    GROUP       Registered
    IS~NT4SERVER...     <00>    UNIQUE      Registered
    NT4SERVER           <20>    UNIQUE      Registered
    WORKGROUP           <00>    GROUP       Registered
    NT4SERVER           <03>    UNIQUE      Registered
    WORKGROUP           <1E>    GROUP       Registered
    WORKGROUP           <1D>    UNIQUE      Registered
    ..__MCBROUSE__.     <01>    GROUP       Registered
    ADMINISTRATOR       <03>    UNIQUE      Registered
    
    MAC Address = 00-50-56-40-4C-23

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

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

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

    REGDMP

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

    Реализация

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

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

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

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

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

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

    FINGER

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

    Реализация

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

    finger @host_name.com

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

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

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

    finger estewart@host_name.com

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

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

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

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

    finger stewart@host_name.com

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

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

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

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

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

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

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

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

    Dear Carla,
    
    My  name  is  Jennifer  Winslow from FreeBroadway! We are a non-profit
    organization  that provides theater-loving college students chances to
    see  Broadway shows FOR FREE and keeps you updated on news and events!
    Your  friend  Jon has signed you up for a two-year subscription to our
    electronic  newsletter.  By registering with us, you are also eligible
    to  win  an all-expenses paid trip to New York City for three days and
    two  nights in which you'll get treated to FIVE Broadway shows of your
    choice!
    
    In  order  to track the progress of our contest and get full access to
    all  that  FreeBroadway has to offer, you'll need to create an account
    with us. We'll need the following information from you:
    
    Full Name
    Address (city, state, zip)
    Phone
    
    You'll  also  need  to  choose a username and password so that you can
    access your FreeBroadway account once it's created. This will allow us
    to  verify  that  you  are  Carla Jones when the time comes to claim a
    prize.  You  can  use  the same username and password that you use for
    your current e-mail account.
    
    More news and information will follow once we hear back from you.
    Congratulations Carla, and welcome to FreeBroadway.
    
    Sincerely,
    Jennifer Winslow

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

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

    WHOIS/FWHOIS

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

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

    Реализация

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

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

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

    и то же самое

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

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

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

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

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

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

    Мы хотим знать, кто является владельцем IP-адреса 64.58.76.229. Для этого мы посылаем whois-запрос на whois.arin.net.

    bash% whois -h whois.arin.net 64.58.76.229
    [whois.arin.net]
    Exodus Communications Inc. Sterling (DC2) (NETBLK-EC17-1) EC17-1
                                                    64.58.64.0 - 64.58.95.255
    Yahoo (NETBLK-EC17-1-YAHOO1)    EC17-1-YAHOO1   64.58.76.0 - 64.58.79.255
    To single out one record, look it up with "!xxx", where xxx is the handle, shown in 
    parentheses following the name, which comes first.
    
    The ARIN Registration Services Host contains ONLY Internet Network Information: 
    Networks, ASNs, and related POCs.
    Please use the whois server at rs.internic.net for DOMAIN related Information and 
    whois.nic.mil for NIPRNET Information.

    Мы видим, что весь блок адресов принадлежит компании Exodus Communications, но подсеть класса C, которой принадлежит конкретный IP-адрес, находится в распоряжении компании Yahoo! Мы можем использовать указанный в скобках адрес (в данном случае это NETBLK-EC17-1-YAHOO1 ) для получения дополнительной информации об организации, которой принадлежит этот IP-адрес. Для того чтобы это сделать, мы используем команду whois -h whois.arin.net NETBLK-EC17-1-YAHOO1.

    Yahoo (NETBLK-EC17-1-YAHOO1)
        701 First Avenue
        Sunnyvale, CA 94089
        US
    
        Netname: EC17-1-YAHOO1
        Netblock: 64.58.76.0 - 64.58.79.255
        Maintainer: YHOO
    
        Coordinator:
        Admin, Netblock (NA258-ARIN) netblockadmin@yahoo-inc.com
        1-408-349-5555
        Domain System inverse mapping provided by:
        NS1.YAHOO.COM       66.218.71.63
        NS2.YAHOO.COM       209.132.1.28
        NS3.YAHOO.COM       217.12.4.104
        NS4.YAHOO.COM       63.250.206.138
        NS5.YAHOO.COM       64.58.77.85
    
        Record last updated on 29-Mar-2002.
        Database last updated on 9-Apr-2002 19:58:57 EDT.

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

    Сервер Функции
    whois.internic.net Whois-сервер по умолчанию - точка входа для множества whois-запросов.
    whois.networksolutions.com Сервер для пользователей, которые зарегистрировали свои доменные имена в компании Network Solutions.
    whois.arin.net Сервер American Registry for Internet Numbers - выполняет whois-запросы по IP.
    whois.apnic.net Сервер для базы данных Asia Pacific Network Information Center.
    whois.ripe.net R?seaux IP Europ?ens - обеспечивает большую часть Европы.
    whois.nic.gov Whois-сервер правительства Соединенных Штатов (для зоны .gov).
    whois.nic.mil Whois-сервер для зоны, выделенной для военных организаций (зона .mil).

    Ping

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

    Реализация

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

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

    По умолчанию Ping ведет себя по-разному в Windows и Unix. Большинство реализаций Ping для Unix будут продолжать посылать пакеты до тех, пока работа программы не будет прервана с помощью клавиш Ctrl-C. Windows-версии, наоборот, по умолчанию посылают только четыре ICMP-запроса. Вы можете попытаться запустить программу с параметром -t, для того чтобы заставить программу работать до тех пор, пока она не будет остановлена (хотя в этом случае вы не сможете получить итоговую информацию).

    Ниже приведен типичный пример работы программы в Linux.

    %ping 192.168.1.102
    PING 192.168.1.102 (192.168.1.102) from 192.168.1.100 : 56(84) bytes of data.
    64 bytes from 192.168.1.102: icmp_seq=0 ttl=128 time=1.9 ms
    64 bytes from 192.168.1.102: icmp_seq=1 ttl=128 time=0.7 ms
    64 bytes from 192.168.1.102: icmp_seq=2 ttl=128 time=1.3 ms
    64 bytes from 192.168.1.102: icmp_seq=3 ttl=128 time=0.7 ms
    64 bytes from 192.168.1.102: icmp_seq=4 ttl=128 time=1.3 ms
    64 bytes from 192.168.1.102: icmp_seq=5 ttl=128 time=0.7 ms
    64 bytes from 192.168.1.102: icmp_seq=6 ttl=128 time=1.3 ms
    
    --- 192.168.1.102 ping statistics ---
    7 packets transmitted, 7 packets received, 0% packet loss
    round-trip min/avg/max = 0.7/1.1/1.9 ms

    Пример из жизни. Как хакер может злоупотреблять Ping

    Жестокий Ping I: Ping смерти. Вы наверняка слышали об этой технике. Ping смерти - это отправленный вами пакет Ping больше 65536 байт. Даже если IP не будет поддерживать дейтаграммы большего размера, фрагментация может позволить кому-нибудь послать Ping больший, чем 65536 байт, а когда он дойдет до получателя, то может разрушить машину-получателя. Ошибка здесь не в Ping, а скорее, в методе работы IP с пересылкой фрагментированных пакетов.

    Многие утилиты Ping не позволят вам отсылать такие большие пакеты, но Windows 95 и версии NT позволяют. Некоторые операционные системы распознают Ping смерти и просто игнорируют его (не будут его обрабатывать). Для других систем единственной защитой является использование портовых фильтров или брандмауэров на внешних межсетевых интерфейсах, которые блокируют вообще все входящие ICMP, или, по крайней мере, пакеты ICMP определенного размера.

    Жестокий Ping II: Smurfing. Изящный прием, который можно применить в своей собственной сети - это попытаться провести Ping своего адреса широковещательного доступа. К примеру, если ваш IP-адрес 192.168.1.100, а сетевая комбинация разрядов 255.255.255.0, то вы в сети 192.168.1.0 с адресом широковещательного доступа 192.168.1.255. Если вы попытаетесь провести Ping 192.168.1.255 (в некоторых системах вам придется использовать флаг -b и иметь корневые привилегии root), вы должны получить ICMP-ответы от каждого хоста своей сети. Это полезно для быстрого определения соседних хостов.

    Проблема в том, что это может быть использовано в очень недобрых целях - в частности для smurfing. Эта широко известная атака Denial-of-Service (DoS) всплыла, когда люди начали понимать, как много сетевого трафика может быть сгенерировано при проведении Ping с сетевым адресом общего доступа. Большие сети класса B (с более чем 65000 главных машин) будут отсылать ICMP-ответы на главную машину Ping. Вряд ли вы захотите подвергнуться этому: поток ответов убьет вашу систему. Но что, если вы обманете IP-адрес главной машины Ping? Это достаточно просто (см. лекцию "NETCAT и CRYPTCAT"). Если вы не нуждаетесь в ответе от вашего Ping (черт возьми, вы не хотите получить ответ!), то можете направить все эти ответы какому-нибудь несчастному и разрушить его систему.

    Как можно от этого защититься? Системы не должны отвечать на сообщения от Ping. Брандмауэры и маршрутизаторы должны быть сконфигурированы так, чтобы не только уберечь вашу машину от атаки smurf, но также и от участия в smurf.

    Fping

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

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

    Реализация

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

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

    254  targets
       3  alive
     251  unreachable
       0  unknown addresses
    
     143  timeouts
     397  ICMP Echos sent
       3  ICMP Echo Replies received
     294  other ICMP received
    
    0.10 ms (min round trip time)
    0.62 ms (avg round trip time)
    1.02 ms (max round trip time)
            11.921 sec (elapsed real time)
    
    [root@originix fping-2.4b_2_to]# cat hosts
    192.168.1.1
    192.168.1.100
    192.168.1.101

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

    Usage: ./fping [options] [targets...]
    -a        show targets that are alive (показывает доступные хосты).
    -A        show targets by address (показывает хосты по их IP-адресам).
    -b n      amount of ping data to send, in bytes (default 56) (количество посылаемых 
              пакетов) (по умолчанию 56).
    -B f      set exponential backoff factor to f (устанавливает фактор задержки). 
    -c n      count of pings to send to each target (default 1) (количество пакетов 
              посылаемых, каждому хосту (по умолчанию 1)).
    -C n      same as -c, report results in verbose format (тоже самое что и -c - выводит 
              результаты с расширенными текстовыми комментариями).
    -e        show elapsed time on return packets (выводит время выполнения для 
              вернувшихся пакетов).
    -f file   read list of targets from a file ( - means stdin) (only if no -g specified) (задает 
              имя файла со списком тестируемых хостов (пробел означает, что список берется из 
              стандартного ввода). Используется, только если не задан параметр -g).
    -g        generate target list (only if no -f specified) (specify the start and end IP in the 
              target list, or supply an IP netmask) (ex. ./fping -g 192.168.1.0 192.168.1.255 or 
              ./fping -g 192.168.1.0/24) генерирует список тестируемых хостов (только если не задан 
              параметр -f) (задается начальный и конечный IP адреса, или сетевая маска ).
    -i n      interval between sending ping packets (in millisec) (default 25) задает интервал 
              между посылаемыми пакетами (в миллисекундах) (по умолчанию 25).
    -l        loop sending pings forever (задает опрос хостов в цикле).
    -m        ping multiple interfaces on target host (тестирование нескольких интерфейсов на 
              доступном хосте).
    -n        show targets by name (-d is equivalent) (отображает тестируемые хосты по имени 
              (то же самое что и -d)).
    -p n      interval between ping packets to one target (in millisec) (in looping and counting 
              modes, default 1000) задает интервал между посылкой пакетов на один и тот же хост 
              (в миллисекундах) (в цикле или непрерывном режиме, по умолчанию 1000).
    -q        quiet (don't show per-target/per-ping results) (подавляет вывод как по хостам 
              так и для пакетов).
    -Q n      same as -q, but show summary every n seconds (то же самое что -q, но выводит сводную 
              информацию каждые n секунд).
    -r n      number of retries (default 3) число попыток (по умолчанию 3).
    -s        print final stats (вывод финальной статистики).
    -t n      individual target initial timeout (in millisec) (default 500) (начальная задержка 
              для опрашиваемого хоста (в миллисекундах) (по умолчанию 500)).
    -u        show targets that are unreachable (отображает недоступные хосты).
    -v        show version (выводит номер версии) targets list of targets to check 
              (if no -f specified) (список проверенных хостов (если не задан параметр -f).

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

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

    Traceroute

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

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

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

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

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

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

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

    Версия программы /. Аналогичные программы для Windows называются и http://www.mcafee.com, соответственно. Имейте в виду, что графические версии traceroute не всегда правильно отображают информацию, поскольку соответствующие whois -базы данных могут содержать, а могут и не содержать требуемую информацию.

    Реализация

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

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

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

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

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

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

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

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

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

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

    Hping

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

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

    Реализация

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

    Примечание. Исполняемый модуль hping2 необходимо запускать, имея полномочия пользователя root, чтобы иметь возможность использовать некоторые программы сетевых интерфейсов, которые требуются для работы.
    [root@originix hping2]# ./hping2 -c 4 -n -i 2 192.168.1.101
    HPING 192.168.1.101 (eth0 192.168.1.101): NO FLAGS are set, 40 headers +
     0 data bytes
    len=46 ip=192.168.1.101 flags=RA seq=0 ttl=128 id=54167 win=0 rtt=0.8 ms
    len=46 ip=192.168.1.101 flags=RA seq=1 ttl=128 id=54935 win=0 rtt=0.7 ms
    len=46 ip=192.168.1.101 flags=RA seq=2 ttl=128 id=55447 win=0 rtt=0.7 ms
    len=46 ip=192.168.1.101 flags=RA seq=3 ttl=128 id=55959 win=0 rtt=0.7 ms
    
    --- 192.168.1.101 hping statistic ---
    4 packets tramitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 0.7/0.8/0.8 ms

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

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

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

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

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

    Совет. Многие средства в этой лекции могут быть использованы взломщиками для кражи информации. Hping не является исключением. Hping в своих возможностях аналогичен Netcat: предоставлять контроль над сетевыми протоколами на низком уровне. Но тогда, как Netcat сосредоточен на сетевых соединениях, hping направлен на анализ заголовков протоколов. Он позволяет создавать TCP, UDP, ICMP, raw IP и другие протоколы, которые вам захочется. Программа позволяет манипулировать заголовками, полями, флагами и параметрами. Создавать отдельные пакеты, посылать их в сеть, и анализировать полученный ответ.

    Пример из жизни. Использование hping для сканирования порта и определения ОС

    Документ HOWTO hping описывает довольно подлый способ проведения сканирования порта, как будто это делает кто-то другой - однако фактически получить результаты сканирования! Для начала нужно обнаружить хост, который не слишком много работает с TCP/IP. Мы можем это сообщить, подав команду hping -r на машину и посмотрев номер IP ID. Опция -r указывает hping отобразить инкрементные ID вместо реальных. Это даст нам представление о том, сколько трафика задействовано в настоящее время.

    [root@originix hping2]# hping -r 192.168.1.200
    HPING 192.168.1.200 (eth0 192.168.1.200): no flags are set, 40 data bytes
    60 bytes from 192.168.1.200: flags=RA seq=0 ttl=64 id=32385 win=0 time=74 ms
    60 bytes from 192.168.1.200: flags=RA seq=1 ttl=64 id=+1 win=0 time=82 ms
    60 bytes from 192.168.1.200: flags=RA seq=2 ttl=64 id=+1 win=0 time=91 ms
    60 bytes from 192.168.1.200: flags=RA seq=3 ttl=64 id=+1 win=0 time=50 ms
    60 bytes from 192.168.1.200: flags=RA seq=4 ttl=64 id=+1 win=0 time=73 ms
    60 bytes from 192.168.1.200: flags=RA seq=5 ttl=64 id=+1 win=0 time=78 ms

    Видите, как ID увеличивается каждый раз на +1? Это означает, что он не отсылает никому никакой трафик, кроме нас. Мы нашли подходящий хост, который можно обмануть.

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

    Следующая команда сообщает hping сделать так, чтобы она выглядела, как "невинный" хост, 192.168.1.200, и посылает пакет SYN (-S) на порт Web-сервера ( -p 80 ) целевой машины.

    [root@originix hping2]# hping2 -a 192.168.1.200 -p 80 -S targethost

    Теперь, если порт 80 целевой машины открыт, целевая машина посылает пакет SYN/ACK на 192.168.1.200. Поскольку 192.168.1.200 никогда не посылал SYN в начале, то он ответит пакетом RST. Поскольку 192.168.1.200 придется участвовать в трафике IP, чтобы это завершить, то номер IP ID на нашем первом hping быстро возрастает больше, чем на 1, как только мы пытаемся зондировать порт 80. Если мы не видим изменений в приращении ID, это означает, что порт закрыт (поскольку закрытый порт на целевой машине будет просто посылать пакет RST на 192.168.1.200, что будет просто игнорироваться).

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

    Снятие отпечатков пальцев OS. Номера IP ID и порядковые номера TCP. Говорят нам о многом. Анализируя ответы, которые мы получаем от применения hping к конкретному хосту, мы иногда можем предположить, с какой операционной системой работает эта машина, на основе известных особенностей реализации стека TCP/IP этой операционной системы.

    Одна из таких особенностей, которую может уловить hping, состоит в том, что реализация TCP/IP в Windows применяет другой порядок байтов в своих полях IP ID. В hping есть флаг -W, который уравнивает порядок байтов и позволяет ID и инкрементам ID отображаться корректно, но если мы попытаемся провести hping2 -r без спецификации -W в окне Windows, мы увидим очень интересную конфигурацию.

    [root@originix hping2]# ./hping2 -r 192.168.1.101
    HPING 192.168.1.101 (eth0 192.168.1.101): NO FLAGS are set, 40 headers + 0      data bytes
    len=46 ip=192.168.1.101 flags=RA seq=0 ttl=128 id=52132 win=0 rtt=0.8 ms
    len=46 ip=192.168.1.101 flags=RA seq=1 ttl=128 id=+768 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=2 ttl=128 id=+512 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=3 ttl=128 id=+512 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=4 ttl=128 id=+768 win=0 rtt=1.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=5 ttl=128 id=+512 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=6 ttl=128 id=+4096 win=0 rtt=1.4 ms
    len=46 ip=192.168.1.101 flags=RA seq=7 ttl=128 id=+2560 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=8 ttl=128 id=+512 win=0 rtt=0.8 ms
    len=46 ip=192.168.1.101 flags=RA seq=9 ttl=128 id=+512 win=0 rtt=0.9 ms

    Обратите внимание на инкременты ID. Каждый инкремент кратен 256! Мы нашли машину Windows! Поскольку все Windows машины используют этот конкретный порядок байтов, любая машина, последовательно демонстрирующая этот эффект 256 является, скорее всего, Windows машиной.

    В лекции "Сканеры портов" мы обсудим средство, называемое nmap, которое производит продвинутое снятие отпечатков пальцев на базе большой коллекции специфичных для OS конфигураций и поведения TCP/IP.

    RPCINFO

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

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

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

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

    Реализация

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

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

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

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

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

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

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

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

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

    Проблемы с RPC

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

    SHOWMOUNT

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

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

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

    Реализация

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

    showmount -a hostname

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

    showmount -d hostname

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

    showmount -e hostname

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

    Вот что произойдет, если мы запустим команду showmount -e originix.

    Export list for 192.168.1.100:
    /       (everyone)
    /boot   (everyone)

    Чтобы подчеркнуть этот пример, мы бесстрашно экспортировали все наши файлы, так что кто угодно может смонтировать нашу корневую директорию и загрузочный сектор. Мы можем смонтировать эти файлы к локальной точке монтирования в нашей системе, используя команду mount 192.168.1.100:/boot/path/to/remote-boot. Это позволит назначить директорию /path/to/remote-boot на нашей машине директории /boot на хосте 192.168.1.100. К сожалению, мы не знаем, есть ли доступ на чтение/запись или только на чтение, до тех пор, пока не произведем монтирование, но, тем не менее, у нас есть доступ. Если мы видим имя хоста или IP-адрес вместо "everyone", это может быть поводом для небольшого фокуса, чтобы сфабриковать этот IP-адрес или имя хоста.

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

    R-Tools

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

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

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

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

    Rlogin, Rsh и Rcp

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

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

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

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

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

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

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

    Rwho

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

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

    Rexec

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

    rexec username@host_name command

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

    who, w и last

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

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

    who

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

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

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

    w

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

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

    last

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

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

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

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

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

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

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

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

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

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

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

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

    Страницы:

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

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

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

    Реализация

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

    Аргументы командной строки net
    Командная строка 9x NT Me 2000 XP Описание
    net accounts No Yes No Yes Yes Определяет параметры политики доступа в систему, такие как срок действия пароля, историю паролей и политику блокировки и выхода из системы.
    net computer No Yes No Yes Yes Добавляет или удаляет компьютеры в домен.
    net config Yes Yes Yes Yes Yes Отображает текущую информацию о сервере и рабочей группе, включая имя компьютера, имя пользователя, версию программного обеспечения и имя домена.
    net continue No Yes No Yes Yes Перезапускает приостановленную службу.
    net diag Yes No Yes No No Отображает диагностическую информацию о соединениях оборудования в сети.
    net file No Yes No Yes Yes Отображает имена всех открытых в настоящее время файлов и предоставляет возможность их закрытия.
    net group No Yes No Yes Yes Установка свойств Общей группы Windows (только на контроллере домена).
    net help Yes Yes Yes Yes Yes Выводит информацию о доступных командах
    net helpmsg No Yes No Yes Yes Выводит подробную информацию по номерам сообщений об ошибках.
    net init Yes No Yes No No Загружает драйверы протоколов и сетевых карт без присоединения их к Менеджеру протоколов Windows.
    net localgroup No Yes No Yes Yes Конфигурирование свойств рабочей группы.
    net name No Yes No Yes Yes Устанавливает имя, по которому компьютер будет получать сообщения.
    net logoff Yes No Yes No No Закрывает соединение между вашим компьютером и сетевыми ресурсами, к которым вы были подсоединены.
    net logon Yes No Yes No No Вход в домен или рабочую группу.
    net password Yes No Yes No No Изменяет пароль для заданного пользователя.
    net pause No Yes No Yes Yes Приостанавливает работу выполняющейся службы.
    net print Yes Yes Yes Yes Yes Получение информации и управление очередью печати компьютера.
    net send No Yes No Yes Yes Посылает сообщение другому пользователю или компьютеру в сети.
    net session No Yes No Yes Yes Отображает список прерванных соединений между компьютером и другими устройствами в сети.
    net share No Yes No Yes Yes Создает, уничтожает или отображает список общих ресурсов.
    net start Yes Yes Yes Yes Yes Запускает службу
    net statistics No Yes No Yes Yes Отображает статистику для сервера или рабочей станции, такую как использование сети, открытые файлы или задания на печати.
    net stop Yes Yes Yes Yes Yes Останавливает работу службы.
    net time Yes Yes Yes Yes Yes Отображает время, синхронизированное со специальным сервером времени в сети.
    net use Yes Yes Yes Yes Yes Соединяется или отсоединяется от общих сетевых ресурсов; выводит информацию об общих сетевых ресурсах.
    net user No Yes No Yes Yes Добавляет или удаляет пользователя.
    net ver Yes No Yes No No Отображает информацию о версии редиректора вашей рабочей группы.
    net view Yes Yes Yes Yes Yes Отображает список общих ресурсов для заданного компьютера или всех компьютеров подсети.

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

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

    C:\WINDOWS\Desktop>net view /WORKGROUP: myworkgroup
    Servers available in workgroup MYWORKGROUP.
    Server name                 Remark
    ---------------------------------------------------------------------
    \\BADMAN                    The bad machine
    \\BROCCOLI                  Veggies are god for you
    \\TECHSUPP                  Don't call as - we call you
    The command was completed successfully
    
    C:\WINDOWS\Desktop>net view \\badman 
    Shared resources at \\BADMAN
    
    Sharename       Type        Comment
    --------------------------------------------------------------------
    CDRW        Disk
    D       Disk
    HALF-LIFE   Disk
    INSTALL     Disk
    MP3S        Disk
    The command was completed successfully
    Примечание. Первая команда net view /WORKGROUP в Windows NT или 2000 не сработает. Вместо этого используйте net view /domain.

    Мы получили список машин в домене/рабочей группе и нашли несколько общих ресурсов на машине Badman. Видно, что для доступа открыты MP3, популярная игра-стрелялка, полностью диск D: и пишущий CD (CD-RW). Следующий логичный шаг, естественно, попытаться выяснить, можно ли подключиться к какому-либо из этих ресурсов.

    Совет. Вам не обязательно знать имя домена или NetBios-имя для просмотра доступных общих ресурсов в системе. Вы можете использовать IP-адрес - net view 192.168.1.101. Это означает, что вы можете узнать все об общих ресурсах любого компьютера в сети, даже если он не отзывается по протоколу NetBIOS, закрытому брандмауэром.

    net use. Теперь, когда нам известны имена общих ресурсов, попытаемся соединиться с ними, используя команду net use.

    C:\>net use * \\badman\mp3 
    Drive E: is now connected to \\badman\mp3s 
    The command completed successfully
    
    C:\>net use * \\badman\d
    The password is invalid for \\badman\d.
    
    Type the password for \\badman\d:
    System error 86 has occurred.
    
    The specified network password is not correct.
    C:\>net view \\badman 
    Shared resources at \\BADMAN 
    
    The bad machine
    
    Sharename       Type        Used as     Comment
    ---------------------------------------------------------------
    CDRW        Disk
    D       Disk
    HALF-LIFE   Disk
    INSTALL     Disk
    MP3S        Disk        E:
    The command was completed successfully.
    
    C:\>echo "hi" > e:\test-write-permission.txt
    Network access is denied.
    Совет. Вы можете назначить имя устройства только в том случае, если в системе включена опция совместного использования файлов и принтеров.

    Мы смогли получить доступ к общему ресурсу MP3S и назначили ему следующее свободное имя устройства E:, о чем говорит символ * в командной строке net use. Однако у нас нет возможности создавать файлы на диске E:, поэтому мы имеем доступ только для чтения. Для доступа к ресурсу на запись нам необходимо ввести пароль или имя пользователя и пароль. В этом случае командная строка будет выглядеть так: net use /u:<username> <password>. Так что на самом деле мы не слишком далеко продвинулись. Мы можем сделать еще кое-что.

    Доступ к ресурсу IPC$ с использованием net use. Как оказалось, машины под управлением Windows NT и 2000 имеют "административный общий ресурс". Это не обычный общий ресурс, который отображается в Сетевом окружении. Его невозможно посмотреть с помощью net view (поскольку этот файл скрытый, о чем говорит символ $ на конце имени ресурса), но он существует. Если вы знаете пароль администратора для доступа к машине, то можете использовать команду net use для соединения с одним из таких административных ресурсов.

    Дополнительный административный ресурс общего доступа сделан таким образом, что администратор домена может посылать команды взад-вперед между серверами. Этот ресурс называется IPC$, что означает межпроцессное взаимодействие (InterProcess Communications)

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

    Совет. Эти команды несколько различаются в разных версиях операционных систем семейства Windows. Воспользуйтесь флагом /?, чтобы получить полную информацию о синтаксисе команды и ее возможностях.

    Следующий скрипт устойчиво создает достаточно привилегированный и с достаточно высокими полномочиями конвейер между вашей машиной и машиной с адресом 192.168.1.150:

    C:\Windows\Desktop>net use 192.168.1.150\IPC$ "" /user: ""
    The command completed successfully

    Теперь мы можем запускать некоторые другие утилиты на 192.169.1.150 из тех, которые были раньше недоступны, чтобы получить дополнительную информацию о системе. К такой информации относятся сведения об именах пользователей, групп, политик, системных идентификаторах ( SIDs ), и другой подобной информации. (См. лекцию "Средства ревизии Windows" с примерами утилит, которые вы можете использовать для получения информации после создания "нулевого" соединения с IPC$.)

    Совет. Убедитесь, что вы подчистили все за собой после соединения с этим системным ресурсом. Используйте net use \\192.168.1.150\IPC$ /delete для завершения соединения. Если этого не сделать, кто-нибудь обратит внимание на установленное соединение и вычислит ваш IP-адрес, используя команды net session или nbstat -s, которые уже коротко обсуждались.

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

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

    Smbclient

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

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

    [jdoe@originix ~]$ smbclient -N -L badman -I 192.168.1.101
    Added interface ip=192.168.1.101 bcast 192.168.1.255 nmask=255.255.255.0 
    
    Sharename       Type        Comment
    ---------       ----        --------
    MP3S            Disk
    HALF-LIFE       Disk
    CDRW            Disk
    INSTALL         Disk
    D           Disk
    IPS$            IPC         Remote Inter Process Communications
    
    
    Server          Comment
    ---------       ---------
    BADMAN          The bad machine
    
    
    Workgroup       Master
    ---------       ---------
    MYWORKGROUP     BADMAN

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

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

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

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

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

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

    Nmblookup

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

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

    [jdoe@originix ~]$ nmblookup -A 192.168.1.101
    Sending queries to 192.168.1.255 
    Looking up status of 192.168.1.101
    received 8 names
    
    BADMAN              <00>            B <ACTIVE>
    MYWORKGROUP         <00>    <GROUP> B <ACTIVE>
    BADMAN              <03>            B <ACTIVE>
    BADMAN              <20>            B <ACTIVE>
    MYWORKGROUP         <1e>    <GROUP> B <ACTIVE>
    JOEUSER             <03>            B <ACTIVE>
    MYWORKGROUP         <1e>    <GROUP> B <ACTIVE>
    ..__MSBROWSE__.     <01>    <GROUP> B <ACTIVE>
    num_good_sends=0 num_good_receives=0

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

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

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

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

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

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

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

    NBTSTAT

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

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

    Реализация

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

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

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

    C:\WINDOWS\Desktop>nbtstat -S 2
    
    NetBIOS Connections Table
    
    LocalName       State   In/Out  Remote Host   Input   Output
    --------------------------------------------------------------
    WINBOX  <03>  Listening               
    WINBOX        Connected   in   192.168.1.102  10Kb    208Kb
    WINBOX        Listening               
    WINBOX  <03>  Listening

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

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

    C:\WINDOWS\Desktop>nbtstat -A 192.168.1.102
    
    NetBIOS Remote Machine Name Table 
    
    Name                Type            Status
    ----------------------------------------------------------
    MYCOMPUTER      <00>    UNIQUE      Registered
    MYDOMAIN        <00>    GROUP       Registered
    MYCOMPUTER      <03>    UNIQUE      Registered
    MYCOMPUTER      <20>    UNIQUE      Registered
    MYDOMAIN        <1E>    GROUP       Registered
    MYUSER          <03>    UNIQUE      Registered
    MYDOMAIN        <1D>    GROUP       Registered
    ..__MSBROUSE__. <01>    GROUP       Registered
    
    MAC Address = 00-50-DA-E9-87-5F
    C:\WINDOWS\Desktop>

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

    Мы должны понять смысл имен, приведенных в списке, и рассмотреть комбинацию символов кодов NetBIOS (<##>) и значений типов. Во-первых, мы видим комбинацию <00> UNIQUE. Это NetBIOS-код означает, что служба выполняется и отображает список системных имен NetBIOS. Таким образом, мы можем понять, что имя системы - MYCOMPUTER.

    В следующей строке стоит последовательность <00> GROUP. Это означает, что данная строка относится к рабочей группе или домену. В нашем случае запись относится к домену MYDOMAIN.

    Третья строка содержит код <03>, который используется для обозначения службы передачи сообщений. И вновь в этой строке присутствует имя компьютера. Но если мы видим код <03> вместе с именем компьютера, это означает, что нам должен повстречаться этот код в нижней части таблицы в сопровождении другого имени. Как и предполагалось, в седьмой строке мы видим имя MYUSER. Это означает, что код NetBIOS <03> в таблице всегда встречается попарно (сопровождая как NetBIOS-имя компьютера, так и имя работающего пользователя). Вы можете действовать методом исключения, чтобы понять какое имя к чему относится.

    Изучение значений .

    Общие коды NetBIOS
    Имя Код Назначение
    <computer_name> 00 Служба рабочей станции.
    <computer_name> 01 Служба передачи сообщений.
    <\\--__MSBROUSE__> 01 Мастер-броузер.
    <computer_name> 03 Служба передачи сообщений.
    <computer_name> 06 Служба сервера RAS.
    <computer_name> 20 Служба файлового сервера.
    <computer_name> 21 Служба клиента сервера RAS.
    <computer_name> BE Агент мониторинга сети.
    <computer_name> BF Приложение мониторинга сети.
    <username> 03 Служба передачи сообщений.
    <domain> 00 Доменное имя.
    <domain> 1B Мастер-броузер домена.
    <domain> 1C Контроллер домена.
    <domain> 1D Мастер-броузер.
    <domain> 1E Выбор сервиса броузера.
    <INet-Services) 1C IIS (Internet information Server).
    <IS~computer_name> 00 IIS (Internet information Server).

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

    В отличие от немаршрутизируемого протокола NetBIOS, NBT - маршрутизируемый протокол. Воспользовавшись флагом -A, мы можем запустить NBTSTAT для анализа любой машины, имеющей выход в интернет и получить доступ к ее NBT-трафику, который пересылается через порты 137, 138, и 139.

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

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

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

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

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

    C:\>nbtstat -A 192.168.1.47
    
    NetBIOS Remote Machine Name Table
    
    Name                Type            Status
    ------------------------------------------------------
    NT4SERVER           <00>    UNIQUE      Registered
    Inet~Services       <1C>    GROUP       Registered
    IS~NT4SERVER...     <00>    UNIQUE      Registered
    NT4SERVER           <20>    UNIQUE      Registered
    WORKGROUP           <00>    GROUP       Registered
    NT4SERVER           <03>    UNIQUE      Registered
    WORKGROUP           <1E>    GROUP       Registered
    WORKGROUP           <1D>    UNIQUE      Registered
    ..__MCBROUSE__.     <01>    GROUP       Registered
    ADMINISTRATOR       <03>    UNIQUE      Registered
    
    MAC Address = 00-50-56-40-4C-23

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

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

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

    REGDMP

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

    Реализация

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

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

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

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

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

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

    FINGER

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

    Реализация

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

    finger @host_name.com

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

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

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

    finger estewart@host_name.com

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

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

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

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

    finger stewart@host_name.com

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

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

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

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

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

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

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

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

    Dear Carla,
    
    My  name  is  Jennifer  Winslow from FreeBroadway! We are a non-profit
    organization  that provides theater-loving college students chances to
    see  Broadway shows FOR FREE and keeps you updated on news and events!
    Your  friend  Jon has signed you up for a two-year subscription to our
    electronic  newsletter.  By registering with us, you are also eligible
    to  win  an all-expenses paid trip to New York City for three days and
    two  nights in which you'll get treated to FIVE Broadway shows of your
    choice!
    
    In  order  to track the progress of our contest and get full access to
    all  that  FreeBroadway has to offer, you'll need to create an account
    with us. We'll need the following information from you:
    
    Full Name
    Address (city, state, zip)
    Phone
    
    You'll  also  need  to  choose a username and password so that you can
    access your FreeBroadway account once it's created. This will allow us
    to  verify  that  you  are  Carla Jones when the time comes to claim a
    prize.  You  can  use  the same username and password that you use for
    your current e-mail account.
    
    More news and information will follow once we hear back from you.
    Congratulations Carla, and welcome to FreeBroadway.
    
    Sincerely,
    Jennifer Winslow

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

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

    WHOIS/FWHOIS

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

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

    Реализация

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

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

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

    и то же самое

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

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

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

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

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

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

    Мы хотим знать, кто является владельцем IP-адреса 64.58.76.229. Для этого мы посылаем whois-запрос на whois.arin.net.

    bash% whois -h whois.arin.net 64.58.76.229
    [whois.arin.net]
    Exodus Communications Inc. Sterling (DC2) (NETBLK-EC17-1) EC17-1
                                                    64.58.64.0 - 64.58.95.255
    Yahoo (NETBLK-EC17-1-YAHOO1)    EC17-1-YAHOO1   64.58.76.0 - 64.58.79.255
    To single out one record, look it up with "!xxx", where xxx is the handle, shown in 
    parentheses following the name, which comes first.
    
    The ARIN Registration Services Host contains ONLY Internet Network Information: 
    Networks, ASNs, and related POCs.
    Please use the whois server at rs.internic.net for DOMAIN related Information and 
    whois.nic.mil for NIPRNET Information.

    Мы видим, что весь блок адресов принадлежит компании Exodus Communications, но подсеть класса C, которой принадлежит конкретный IP-адрес, находится в распоряжении компании Yahoo! Мы можем использовать указанный в скобках адрес (в данном случае это NETBLK-EC17-1-YAHOO1 ) для получения дополнительной информации об организации, которой принадлежит этот IP-адрес. Для того чтобы это сделать, мы используем команду whois -h whois.arin.net NETBLK-EC17-1-YAHOO1.

    Yahoo (NETBLK-EC17-1-YAHOO1)
        701 First Avenue
        Sunnyvale, CA 94089
        US
    
        Netname: EC17-1-YAHOO1
        Netblock: 64.58.76.0 - 64.58.79.255
        Maintainer: YHOO
    
        Coordinator:
        Admin, Netblock (NA258-ARIN) netblockadmin@yahoo-inc.com
        1-408-349-5555
        Domain System inverse mapping provided by:
        NS1.YAHOO.COM       66.218.71.63
        NS2.YAHOO.COM       209.132.1.28
        NS3.YAHOO.COM       217.12.4.104
        NS4.YAHOO.COM       63.250.206.138
        NS5.YAHOO.COM       64.58.77.85
    
        Record last updated on 29-Mar-2002.
        Database last updated on 9-Apr-2002 19:58:57 EDT.

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

    Сервер Функции
    whois.internic.net Whois-сервер по умолчанию - точка входа для множества whois-запросов.
    whois.networksolutions.com Сервер для пользователей, которые зарегистрировали свои доменные имена в компании Network Solutions.
    whois.arin.net Сервер American Registry for Internet Numbers - выполняет whois-запросы по IP.
    whois.apnic.net Сервер для базы данных Asia Pacific Network Information Center.
    whois.ripe.net R?seaux IP Europ?ens - обеспечивает большую часть Европы.
    whois.nic.gov Whois-сервер правительства Соединенных Штатов (для зоны .gov).
    whois.nic.mil Whois-сервер для зоны, выделенной для военных организаций (зона .mil).

    Ping

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

    Реализация

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

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

    По умолчанию Ping ведет себя по-разному в Windows и Unix. Большинство реализаций Ping для Unix будут продолжать посылать пакеты до тех, пока работа программы не будет прервана с помощью клавиш Ctrl-C. Windows-версии, наоборот, по умолчанию посылают только четыре ICMP-запроса. Вы можете попытаться запустить программу с параметром -t, для того чтобы заставить программу работать до тех пор, пока она не будет остановлена (хотя в этом случае вы не сможете получить итоговую информацию).

    Ниже приведен типичный пример работы программы в Linux.

    %ping 192.168.1.102
    PING 192.168.1.102 (192.168.1.102) from 192.168.1.100 : 56(84) bytes of data.
    64 bytes from 192.168.1.102: icmp_seq=0 ttl=128 time=1.9 ms
    64 bytes from 192.168.1.102: icmp_seq=1 ttl=128 time=0.7 ms
    64 bytes from 192.168.1.102: icmp_seq=2 ttl=128 time=1.3 ms
    64 bytes from 192.168.1.102: icmp_seq=3 ttl=128 time=0.7 ms
    64 bytes from 192.168.1.102: icmp_seq=4 ttl=128 time=1.3 ms
    64 bytes from 192.168.1.102: icmp_seq=5 ttl=128 time=0.7 ms
    64 bytes from 192.168.1.102: icmp_seq=6 ttl=128 time=1.3 ms
    
    --- 192.168.1.102 ping statistics ---
    7 packets transmitted, 7 packets received, 0% packet loss
    round-trip min/avg/max = 0.7/1.1/1.9 ms

    Пример из жизни. Как хакер может злоупотреблять Ping

    Жестокий Ping I: Ping смерти. Вы наверняка слышали об этой технике. Ping смерти - это отправленный вами пакет Ping больше 65536 байт. Даже если IP не будет поддерживать дейтаграммы большего размера, фрагментация может позволить кому-нибудь послать Ping больший, чем 65536 байт, а когда он дойдет до получателя, то может разрушить машину-получателя. Ошибка здесь не в Ping, а скорее, в методе работы IP с пересылкой фрагментированных пакетов.

    Многие утилиты Ping не позволят вам отсылать такие большие пакеты, но Windows 95 и версии NT позволяют. Некоторые операционные системы распознают Ping смерти и просто игнорируют его (не будут его обрабатывать). Для других систем единственной защитой является использование портовых фильтров или брандмауэров на внешних межсетевых интерфейсах, которые блокируют вообще все входящие ICMP, или, по крайней мере, пакеты ICMP определенного размера.

    Жестокий Ping II: Smurfing. Изящный прием, который можно применить в своей собственной сети - это попытаться провести Ping своего адреса широковещательного доступа. К примеру, если ваш IP-адрес 192.168.1.100, а сетевая комбинация разрядов 255.255.255.0, то вы в сети 192.168.1.0 с адресом широковещательного доступа 192.168.1.255. Если вы попытаетесь провести Ping 192.168.1.255 (в некоторых системах вам придется использовать флаг -b и иметь корневые привилегии root), вы должны получить ICMP-ответы от каждого хоста своей сети. Это полезно для быстрого определения соседних хостов.

    Проблема в том, что это может быть использовано в очень недобрых целях - в частности для smurfing. Эта широко известная атака Denial-of-Service (DoS) всплыла, когда люди начали понимать, как много сетевого трафика может быть сгенерировано при проведении Ping с сетевым адресом общего доступа. Большие сети класса B (с более чем 65000 главных машин) будут отсылать ICMP-ответы на главную машину Ping. Вряд ли вы захотите подвергнуться этому: поток ответов убьет вашу систему. Но что, если вы обманете IP-адрес главной машины Ping? Это достаточно просто (см. лекцию "NETCAT и CRYPTCAT"). Если вы не нуждаетесь в ответе от вашего Ping (черт возьми, вы не хотите получить ответ!), то можете направить все эти ответы какому-нибудь несчастному и разрушить его систему.

    Как можно от этого защититься? Системы не должны отвечать на сообщения от Ping. Брандмауэры и маршрутизаторы должны быть сконфигурированы так, чтобы не только уберечь вашу машину от атаки smurf, но также и от участия в smurf.

    Fping

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

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

    Реализация

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

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

    254  targets
       3  alive
     251  unreachable
       0  unknown addresses
    
     143  timeouts
     397  ICMP Echos sent
       3  ICMP Echo Replies received
     294  other ICMP received
    
    0.10 ms (min round trip time)
    0.62 ms (avg round trip time)
    1.02 ms (max round trip time)
            11.921 sec (elapsed real time)
    
    [root@originix fping-2.4b_2_to]# cat hosts
    192.168.1.1
    192.168.1.100
    192.168.1.101

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

    Usage: ./fping [options] [targets...]
    -a        show targets that are alive (показывает доступные хосты).
    -A        show targets by address (показывает хосты по их IP-адресам).
    -b n      amount of ping data to send, in bytes (default 56) (количество посылаемых 
              пакетов) (по умолчанию 56).
    -B f      set exponential backoff factor to f (устанавливает фактор задержки). 
    -c n      count of pings to send to each target (default 1) (количество пакетов 
              посылаемых, каждому хосту (по умолчанию 1)).
    -C n      same as -c, report results in verbose format (тоже самое что и -c - выводит 
              результаты с расширенными текстовыми комментариями).
    -e        show elapsed time on return packets (выводит время выполнения для 
              вернувшихся пакетов).
    -f file   read list of targets from a file ( - means stdin) (only if no -g specified) (задает 
              имя файла со списком тестируемых хостов (пробел означает, что список берется из 
              стандартного ввода). Используется, только если не задан параметр -g).
    -g        generate target list (only if no -f specified) (specify the start and end IP in the 
              target list, or supply an IP netmask) (ex. ./fping -g 192.168.1.0 192.168.1.255 or 
              ./fping -g 192.168.1.0/24) генерирует список тестируемых хостов (только если не задан 
              параметр -f) (задается начальный и конечный IP адреса, или сетевая маска ).
    -i n      interval between sending ping packets (in millisec) (default 25) задает интервал 
              между посылаемыми пакетами (в миллисекундах) (по умолчанию 25).
    -l        loop sending pings forever (задает опрос хостов в цикле).
    -m        ping multiple interfaces on target host (тестирование нескольких интерфейсов на 
              доступном хосте).
    -n        show targets by name (-d is equivalent) (отображает тестируемые хосты по имени 
              (то же самое что и -d)).
    -p n      interval between ping packets to one target (in millisec) (in looping and counting 
              modes, default 1000) задает интервал между посылкой пакетов на один и тот же хост 
              (в миллисекундах) (в цикле или непрерывном режиме, по умолчанию 1000).
    -q        quiet (don't show per-target/per-ping results) (подавляет вывод как по хостам 
              так и для пакетов).
    -Q n      same as -q, but show summary every n seconds (то же самое что -q, но выводит сводную 
              информацию каждые n секунд).
    -r n      number of retries (default 3) число попыток (по умолчанию 3).
    -s        print final stats (вывод финальной статистики).
    -t n      individual target initial timeout (in millisec) (default 500) (начальная задержка 
              для опрашиваемого хоста (в миллисекундах) (по умолчанию 500)).
    -u        show targets that are unreachable (отображает недоступные хосты).
    -v        show version (выводит номер версии) targets list of targets to check 
              (if no -f specified) (список проверенных хостов (если не задан параметр -f).

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

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

    Traceroute

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

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

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

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

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

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

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

    Версия программы /. Аналогичные программы для Windows называются и http://www.mcafee.com, соответственно. Имейте в виду, что графические версии traceroute не всегда правильно отображают информацию, поскольку соответствующие whois -базы данных могут содержать, а могут и не содержать требуемую информацию.

    Реализация

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

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

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

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

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

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

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

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

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

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

    Hping

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

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

    Реализация

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

    Примечание. Исполняемый модуль hping2 необходимо запускать, имея полномочия пользователя root, чтобы иметь возможность использовать некоторые программы сетевых интерфейсов, которые требуются для работы.
    [root@originix hping2]# ./hping2 -c 4 -n -i 2 192.168.1.101
    HPING 192.168.1.101 (eth0 192.168.1.101): NO FLAGS are set, 40 headers +
     0 data bytes
    len=46 ip=192.168.1.101 flags=RA seq=0 ttl=128 id=54167 win=0 rtt=0.8 ms
    len=46 ip=192.168.1.101 flags=RA seq=1 ttl=128 id=54935 win=0 rtt=0.7 ms
    len=46 ip=192.168.1.101 flags=RA seq=2 ttl=128 id=55447 win=0 rtt=0.7 ms
    len=46 ip=192.168.1.101 flags=RA seq=3 ttl=128 id=55959 win=0 rtt=0.7 ms
    
    --- 192.168.1.101 hping statistic ---
    4 packets tramitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 0.7/0.8/0.8 ms

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

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

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

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

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

    Совет. Многие средства в этой лекции могут быть использованы взломщиками для кражи информации. Hping не является исключением. Hping в своих возможностях аналогичен Netcat: предоставлять контроль над сетевыми протоколами на низком уровне. Но тогда, как Netcat сосредоточен на сетевых соединениях, hping направлен на анализ заголовков протоколов. Он позволяет создавать TCP, UDP, ICMP, raw IP и другие протоколы, которые вам захочется. Программа позволяет манипулировать заголовками, полями, флагами и параметрами. Создавать отдельные пакеты, посылать их в сеть, и анализировать полученный ответ.

    Пример из жизни. Использование hping для сканирования порта и определения ОС

    Документ HOWTO hping описывает довольно подлый способ проведения сканирования порта, как будто это делает кто-то другой - однако фактически получить результаты сканирования! Для начала нужно обнаружить хост, который не слишком много работает с TCP/IP. Мы можем это сообщить, подав команду hping -r на машину и посмотрев номер IP ID. Опция -r указывает hping отобразить инкрементные ID вместо реальных. Это даст нам представление о том, сколько трафика задействовано в настоящее время.

    [root@originix hping2]# hping -r 192.168.1.200
    HPING 192.168.1.200 (eth0 192.168.1.200): no flags are set, 40 data bytes
    60 bytes from 192.168.1.200: flags=RA seq=0 ttl=64 id=32385 win=0 time=74 ms
    60 bytes from 192.168.1.200: flags=RA seq=1 ttl=64 id=+1 win=0 time=82 ms
    60 bytes from 192.168.1.200: flags=RA seq=2 ttl=64 id=+1 win=0 time=91 ms
    60 bytes from 192.168.1.200: flags=RA seq=3 ttl=64 id=+1 win=0 time=50 ms
    60 bytes from 192.168.1.200: flags=RA seq=4 ttl=64 id=+1 win=0 time=73 ms
    60 bytes from 192.168.1.200: flags=RA seq=5 ttl=64 id=+1 win=0 time=78 ms

    Видите, как ID увеличивается каждый раз на +1? Это означает, что он не отсылает никому никакой трафик, кроме нас. Мы нашли подходящий хост, который можно обмануть.

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

    Следующая команда сообщает hping сделать так, чтобы она выглядела, как "невинный" хост, 192.168.1.200, и посылает пакет SYN (-S) на порт Web-сервера ( -p 80 ) целевой машины.

    [root@originix hping2]# hping2 -a 192.168.1.200 -p 80 -S targethost

    Теперь, если порт 80 целевой машины открыт, целевая машина посылает пакет SYN/ACK на 192.168.1.200. Поскольку 192.168.1.200 никогда не посылал SYN в начале, то он ответит пакетом RST. Поскольку 192.168.1.200 придется участвовать в трафике IP, чтобы это завершить, то номер IP ID на нашем первом hping быстро возрастает больше, чем на 1, как только мы пытаемся зондировать порт 80. Если мы не видим изменений в приращении ID, это означает, что порт закрыт (поскольку закрытый порт на целевой машине будет просто посылать пакет RST на 192.168.1.200, что будет просто игнорироваться).

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

    Снятие отпечатков пальцев OS. Номера IP ID и порядковые номера TCP. Говорят нам о многом. Анализируя ответы, которые мы получаем от применения hping к конкретному хосту, мы иногда можем предположить, с какой операционной системой работает эта машина, на основе известных особенностей реализации стека TCP/IP этой операционной системы.

    Одна из таких особенностей, которую может уловить hping, состоит в том, что реализация TCP/IP в Windows применяет другой порядок байтов в своих полях IP ID. В hping есть флаг -W, который уравнивает порядок байтов и позволяет ID и инкрементам ID отображаться корректно, но если мы попытаемся провести hping2 -r без спецификации -W в окне Windows, мы увидим очень интересную конфигурацию.

    [root@originix hping2]# ./hping2 -r 192.168.1.101
    HPING 192.168.1.101 (eth0 192.168.1.101): NO FLAGS are set, 40 headers + 0      data bytes
    len=46 ip=192.168.1.101 flags=RA seq=0 ttl=128 id=52132 win=0 rtt=0.8 ms
    len=46 ip=192.168.1.101 flags=RA seq=1 ttl=128 id=+768 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=2 ttl=128 id=+512 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=3 ttl=128 id=+512 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=4 ttl=128 id=+768 win=0 rtt=1.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=5 ttl=128 id=+512 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=6 ttl=128 id=+4096 win=0 rtt=1.4 ms
    len=46 ip=192.168.1.101 flags=RA seq=7 ttl=128 id=+2560 win=0 rtt=0.9 ms
    len=46 ip=192.168.1.101 flags=RA seq=8 ttl=128 id=+512 win=0 rtt=0.8 ms
    len=46 ip=192.168.1.101 flags=RA seq=9 ttl=128 id=+512 win=0 rtt=0.9 ms

    Обратите внимание на инкременты ID. Каждый инкремент кратен 256! Мы нашли машину Windows! Поскольку все Windows машины используют этот конкретный порядок байтов, любая машина, последовательно демонстрирующая этот эффект 256 является, скорее всего, Windows машиной.

    В лекции "Сканеры портов" мы обсудим средство, называемое nmap, которое производит продвинутое снятие отпечатков пальцев на базе большой коллекции специфичных для OS конфигураций и поведения TCP/IP.

    RPCINFO

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

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

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

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

    Реализация

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

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

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

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

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

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

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

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

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

    Проблемы с RPC

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

    SHOWMOUNT

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

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

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

    Реализация

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

    showmount -a hostname

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

    showmount -d hostname

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

    showmount -e hostname

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

    Вот что произойдет, если мы запустим команду showmount -e originix.

    Export list for 192.168.1.100:
    /       (everyone)
    /boot   (everyone)

    Чтобы подчеркнуть этот пример, мы бесстрашно экспортировали все наши файлы, так что кто угодно может смонтировать нашу корневую директорию и загрузочный сектор. Мы можем смонтировать эти файлы к локальной точке монтирования в нашей системе, используя команду mount 192.168.1.100:/boot/path/to/remote-boot. Это позволит назначить директорию /path/to/remote-boot на нашей машине директории /boot на хосте 192.168.1.100. К сожалению, мы не знаем, есть ли доступ на чтение/запись или только на чтение, до тех пор, пока не произведем монтирование, но, тем не менее, у нас есть доступ. Если мы видим имя хоста или IP-адрес вместо "everyone", это может быть поводом для небольшого фокуса, чтобы сфабриковать этот IP-адрес или имя хоста.

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

    R-Tools

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

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

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

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

    Rlogin, Rsh и Rcp

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

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

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

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

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

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

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

    Rwho

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

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

    Rexec

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

    rexec username@host_name command

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

    who, w и last

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

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

    who

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

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

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

    w

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

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

    last

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

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

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

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

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

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

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

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

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

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

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

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

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