Многие из наиболее часто используемых инструментальных средств, которые вам могут встретиться, включены в состав вашей операционной системы в качестве системных утилит или принадлежат к разряду программ с открытым исходным кодом и их можно свободно загрузить из сети. В этой лекции мы рассмотрим некоторые основные средства.
Когда пользователи вспоминают Windows и сети, они обязательно вспоминают про "Сетевое окружение", которое может быть открыто в окне "Моя сеть" в Windows 2000, ME и XP. Когда вы просматриваете сеть и получаете доступ к файлам, вы используете протокол, который называется Server Message ( SMB ). Большинство людей, которые открывают для общего доступа папки и файлы на своих компьютерах, надеются, что только члены их локальной сети имеют доступ к сетевым ресурсам, видимым в "Сетевом окружении". Однако, как и большинство утилит с графическим интерфейсом, сетевое окружение опирается на программу нижнего уровня, выполняемую в командной строке. Эта программа называется net, и сейчас самое время познакомиться с ней.
Начнем с последовательного ознакомления с аргументами командной строки и их краткого описания, как это представлено в таблице 2.1. Мы будем следовать примерам использования наиболее важных команд и знакомиться с тем, что они делают. Наберите флаг /? после любой из команд, приведенных в таблице, чтобы получить расширенную информацию о синтаксисе команды.
| Командная строка | 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 |
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 |
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 (
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 для соединения с одним из таких административных ресурсов.
Дополнительный административный ресурс общего доступа сделан таким образом, что администратор домена может посылать команды взад-вперед между серверами. Этот ресурс называется , что означает
Вы догадываетесь, что ресурс должен быть хорошо защищен с помощью административных полномочий. Но некоторые приложения в действительности требуют доступа к без аутентификации. Поздравляю, вы не сможете получить полное управление системой, если у вас нет полномочий Администратора, но, подключившись даже без административных полномочий, вы можете получить больше сведений, чем это было до настоящего момента.
/?, чтобы получить полную информацию о синтаксисе команды и ее возможностях.Следующий скрипт устойчиво создает достаточно привилегированный и с достаточно высокими полномочиями конвейер между вашей машиной и машиной с адресом 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" с примерами утилит, которые вы можете использовать для получения информации после создания "нулевого" соединения с .)
net use \\192.168.1.150\IPC $ /delete для завершения соединения. Если этого не сделать, кто-нибудь обратит внимание на установленное соединение и вычислит ваш IP-адрес, используя команды net session или nbstat -s, которые уже коротко обсуждались.Как и Windows, имеющая средства доступа к разделяемым ресурсам из командной строки посредством SMB, у Unix есть собственные средства доступа к общим ресурсам на основе протокола NetBIOS. Samba включает в себя возможности и сервера и клиента для того, чтобы предоставить вам возможность определить общие сетевые ресурсы таким образом, чтобы Windows-клиенты могли видеть их в своем сетевом окружении и получить к ним доступ. В этом разделе мы сосредоточимся только на клиентской части этой программы, которая дает возможность получить доступ к общим ресурсам на основе протокола Server Message (SMB).
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 проинформировал нас о наличии общего ресурса ! Скрытые ресурсы невозможно спрятать от 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 для открытия нулевой сессии с ресурсом ? Уверены, что да. Однако сделать это несколько сложнее. Дело в том, что - это конвейер, а не брандмауэр, поэтому smbclient не в состоянии установить такое соединение. Вам следует использовать rpcclient, включенный в состав дистрибутива Samba, чтобы соединиться с ресурсом .
Мы говорили о необходимости знать 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".
Мы сделали обзор некоторых средств, с помощью которых можно соединиться с 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-имя компьютера, так и имя работающего пользователя). Вы можете действовать методом исключения, чтобы понять какое имя к чему относится.
Изучение значений .
| Имя | Код | Назначение |
|---|---|---|
<computer_name> |
00 | Служба рабочей станции. |
<computer_name> |
01 | Служба передачи сообщений. |
<\\--__MSBROUSE__> |
01 | Мастер-броузер. |
<computer_name> |
03 | Служба передачи сообщений. |
<computer_name> |
06 | Служба сервера |
<computer_name> |
20 | Служба файлового сервера. |
<computer_name> |
21 | Служба клиента сервера |
<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.
Еще одна разновидность информации, которую можно получит с помощью NBTSTAT - это аппаратные Ethernet-адреса (или MAC-адреса). В нашем случае IP-адресу 192.168.1.102 соответствует MAC-адрес 00-50-DA-E9-87-5F. MAC-адрес состоит из 48 бит информации и включает в себя 12 шестнадцатеричных чисел или шесть октетов. Первые (считая слева) 6 цифр (три октета) представляют собой серийный номер интерфейса конкретного поставщика оборудования. Первые шесть цифр считаются уникальным идентификатором производителя (Organizationally Unique Index
Ниже приведены несколько примеров наиболее распространенных кодов .
В нашем примере, система имела MAC-адрес 00-50-DA-E9-87-5F. Это означает, что производителем сетевого интерфейса была фирма
Выполненная в системе команда 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. По значению (00-50-56) можно определить, что производителем сетевого интерфейса является компания VMware, Inc. VMware производит программное обеспечение, реализующее виртуальные машины для серверов и настольных компьютеров (см. лекцию "VMware"), что говорит о том, что система, с которой мы общаемся, возможно, виртуальный NT-Сервер, запущенный под управлением другой операционной системы на хосте.
OUI .Поскольку Windows-машины передают эту информацию без ограничений в процессе работы в сети, они не фиксируют в системном журнале попытки получения этих данных. Брандмауэры и системы обнаружения вторжений настраиваются только на обнаружение и блокировку передачи этого трафика вовне.
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".
Под управлением Unix утилита позволяет получать информацию о пользователях системы. Система запускает демон , который работает по протоколу TCP через 79 порт и отвечает на запросы о работающих в настоящее время в системе пользователях, а также на запросы о конкретных пользователях.
Поскольку используется много версий -клиентов и демонов, то может меняться состав доступных опций, но мы приведем основную информацию о том, что можно получить с помощью утилиты .
Эта команда выдает информацию обо всех пользователях, в настоящее время зарегистрированных в системе с именем host_name@com. Если в системе запущен демон , мы можем просто набрать команду , чтобы получить ту же самую информацию на локальной машине.
[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)
Здесь представлено немало информации. Мы получили идентификаторы трех пользователей системы. Есть шанс, что хотя бы один из них использует несложный пароль. Чем больше работающих в системе пользователей мы обнаружим, тем больше пользовательских идентификаторов мы можем испробовать для взлома паролей.
Теперь посмотрим, какую информацию мы сможем получить о пользователе с именем 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, вы сможете получить ту же самую информацию для всех пользователей, зарегистрированных в системе на текущий момент. может использоваться не только для поиска имен пользователей, но и для поиска настоящих имен в системе. Вы можете попытаться получить с его помощью информацию о распространенных именах вроде Джонсона, Джонса или Стюарта.
-демон для локальных пользователей для поиска информации, по крайней мере, перекройте к нему доступ через брандмауэр (79 порт TCP). К сожалению, некоторые наиболее старые дистрибутивы Unix поставляются с предустановленным и готовым к работе демоном , поэтому иногда вы можете сталкиваться с системами, в которых администраторы не обратили внимания на эту службу и тем самым оставили открытой информационную брешь.
Пример из жизни. Социальная инженерия 101
Некоторые хакеры в душе - старомодные мошенники. Зачем хакеру беспокоиться о сканировании портов и поиске уязвимых сетевых серверов, если он может всего лишь убедить кого-нибудь предоставить ему доступ к системе?
Хакер запускает команды в местной образовательной сети и обнаруживает пользователя с довольно информативной записью в файле 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
Вы можете подумать, что большинство людей не попадутся на такую очевидную уловку. Вы будете удивлены. Велика вероятность, что Карла с радостью снабдит нашего хакера информацией о логине, которым она пользуется в данной системе электронной почты.
Социальная инженерия может быть применена также и другими способами. В следующем разделе мы обсудим средство , которое может дать хакерам важные административные, технические и относящиеся к выписке счетов контакты организаций. Если хакер фокусирует внимание на одном из контактных имен и сможет собрать достаточно информации об этом человеке, то он может сконструировать похожее профессиональное электронное послание - заставляя работодателя разгласить информацию, которую он или она обычно не раскрывают незнакомцам.
невероятно простое, но в тоже время весьма распространенное средство, с помощью которого осуществляется запрос к конкретной базе данных "
Служба представляет собой базу данных, которая поддерживается держателями служб DNS по всему миру. База данных может содержать много различной информации, но обычно в ней содержится такая информация как местоположение, контактная информация и диапазоны IP-адресов для каждого доменного имени, находящегося под управлением держателя службы доменных имен.
Сама по себе команда весьма проста. Наиболее старые версии команды требуют ввода имени хоста, на котором поддерживается -сервер с использованием флага -h. Оставшаяся часть командной строки содержит в себе запрос, который мы хотим послать. Команда fwhois требует сначала определить запрос, и при необходимости в конце задать адрес с сервера ( @whois_server ).
Следующие две команды идентичны друг другу.
bash% whois -h whois.networksolutions.com yahoo.com
и то же самое
bash% fwhois yahoo.com@whois.networksolutions.com
По умолчанию используется сервер . Мы можем запустить команду без указания имени сервера, чтобы получить самую общую информацию о домене.
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
На выходе мы получили информацию о серверах доменных имен и сведения о том, когда в последний раз обновлялась соответствующая запись. Но здесь нет никакой информации о местоположении сервера или контактной информации. К счастью, здесь есть ссылка на другой -сервер, где должна быть интересующая нас информация. Теперь, если мы попытаемся выполнить команду , мы должны будем получить ту же самую информацию что и ранее, но вдобавок еще и сведения о географическом положении и контактную информацию.
Таким образом, если нам надоело назойливое сканирование портов с адреса somesystem.some_loser.org, теперь мы можем просто связаться с организацией SomeLoser и выразить протест. - также весьма полезен для взломщиков, которые пытаются преследовать особые цели.
Но что делать, если мы не знаем имени хоста. Что если в нашем распоряжении имеется только IP-адрес. К счастью, есть
Мы хотим знать, кто является владельцем IP-адреса 64.58.76.229. Для этого мы посылаем .
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-адрес. Для того чтобы это сделать, мы используем команду .
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.
Ниже приведен список наиболее популярных -серверов и их функции. Весьма вероятно, что если один из этих серверов не знает о запрошенном вами домене или IP-адресе, то вы сможете получить эту информацию с другого сервера.
| Сервер | Функции |
|---|---|
| Сервер для пользователей, которые зарегистрировали свои доменные имена в компании |
|
| Сервер American Registry for Internet Numbers - выполняет |
|
| Сервер для базы данных Asia Pacific Network Information Center. | |
| R?seaux IP Europ? |
|
Ping - одно из наиболее общих диагностических средств - просто посылает ICMP-запросы и ожидает ответа. Ping используется для тестирования сетевых соединений, но также может быть применен и в других целях, в чем вы сейчас сможете убедиться.
Во-первых, упомянем несколько весьма важных параметров командной строки. Есть много различных реализаций команды Ping, но большинство Ping-утилит для Unix-систем имеют общие параметры командной строки. Основные отличия Unix- и Windows-реализаций этой утилиты представлены в таблице 2.3.
| Параметр | Описание |
|---|---|
-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.
Стандартная реализация программы Ping, которая поставляется с большинством версий TCP/IP-протокола, разработана для работы на одиночном хосте. Хоть это и удобно, но использование утилиты для тестирования большой сети превращается в кропотливый Ping вернет результаты.
Для решения этих проблем была создана программа /. Windows-приложение, аналогичное утилите /. Но мы не будем рассматривать эту программу в данном разделе.
Реализация
Fping посылает ICMP (Internet Control 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-адреса и получили начальную информацию, необходимую для создания схемы нашей сети. Но следует иметь в виду, что этот инструмент предоставляет те же самые преимущества назойливым чужакам, которые бродят вокруг в поисках доступа к чужим сетям.
делает то, что указано в ее названии - он размечает маршрут, который проходят IP-пакеты на пути от вашего хоста до указанной цели.
Программа начинает работать с отсылки IP-пакета (ICMP или UDP) к заданной цели, но при этом устанавливает время жизни пакета ( TTL- Time-To-Live ) равным 1. Пакет исчерпывает свои ресурсы при достижении первой же промежуточной точки, и маршрутизатор уведомляет нас с помощью ICMP-сообщения, что время жизни пакета исчерпано, сообщая тем самым, что достигнута первая промежуточная точка. Теперь мы отсылаем следующий IP-пакет к цели, но теперь уже устанавливаем параметр TTL равным 2. Пакет достигает второй промежуточной точки и происходит тоже самое. Продолжая наращивать параметр TTL до тех пор, пока не будет достигнута цель, мы сможем узнать, какой маршрут проходят пакеты на пути от нашего хоста до цели.
Этот инструмент может быть очень полезен при диагностике проблем в сети (для определения причин выхода сети из строя или для определения петель), но он также может быть использован для получения информации о местонахождении тестируемой системы.
Ниже приведен фрагмент вывода, который можно получить, используя команду
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, соответственно. Имейте в виду, что графические версии не всегда правильно отображают информацию, поскольку соответствующие -базы данных могут содержать, а могут и не содержать требуемую информацию.
Так же как и Ping, команда имеет несколько различных реализаций. Так же как и Ping, реализация для Windows сильно отличается от версии, используемой для Unix. Настолько что Windows-утилита носит название tracert, напоминая о том, что в системе Windows эта программа используется без поддержки длинных имен файлов. В таблице 2.4 описаны некоторые наиболее важные параметры командной строки (все параметры, если иное не оговаривается, приводятся для Unix-версии).
| Параметр | Описание |
|---|---|
-g hostlist (Unix) -j hostlist (Windows) |
|
-i interface |
Задает используемый для отсылки пакетов сетевой интерфейс (для хоста с несколькими сетевыми интерфейсами). |
-I |
Определяет использование ICMP-сообщений вместо UDP. По умолчанию PORT_UNREACHABLE в ответ на пришедшие пакеты. |
-m hops (Unix) -h hops (Windows) |
Задает максимальное число промежуточных хостов, которое может быть пройдено до конечного пункта. Если конечный хост не достигается за заданное число шагов, все возвращается обратно. По умолчанию равно 30. |
-n (Unix) -d (Windows) |
Запрещает определение имен для IP-адресов. Обычно это существенно ускоряет работу программы, но в этом случае вы не сможете получить представление о географическом положении хостов. |
-p port |
Если мы используем |
-w (Unix and Windows) |
Задает время ожидания ответа от промежуточных хостов. |
Ниже приведен отрывок вывода программы , запущенной на локальной машине для тестирования удаленного сервера.
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-параметр, и ответ не дошел до получателя.
может принять множество других ICMP-сообщений. Если в выводе вы видите странные значки, описанные в таблице 2.5 - это попытка сообщить вам нечто.
-v, если вы хотите увидеть отличные от стандартного TIME_EXCEEDED или трех UNREACHABLE сообщения. выдает большой объем информации, включая географический регион, в котором расположен хост, список машин, которые поддерживают трафик между исходным и конечными хостами, а также инетрнет-провайдера для хоста. Некоторая информация позволяет взломщикам определить промежуточные маршрутизаторы, которые могут быть уязвимы для атак или использованы для получения дополнительной информации. До тех пор, пока большинством систем трафик рассматривается, как разрешенный, только с помощью брандмауэров или систем обнаружения вторжений можно обнаружить или блокировать внешние попытки трассировки.
| Флаг | Описание |
|---|---|
!H |
Хост ICMP недостижим. |
!N |
ICMP network unreachable (сеть ICMP недостижима). |
!P |
|
!S |
Неудавшаяся попытка задать маршрут. |
!F |
Необходима фрагментация. |
!X |
Соединение запрещено администратором. |
!# |
ICMP код недостижимости #. |
Обычные 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-окна, и - время прохождения запроса в оба конца. Использование флага -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 применяет другой hping есть флаг -W, который уравнивает 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 машины используют этот конкретный
В лекции "Сканеры портов" мы обсудим средство, называемое nmap, которое производит продвинутое снятие отпечатков пальцев на базе большой коллекции специфичных для OS конфигураций и поведения TCP/IP.
Одна из наиболее мощных (и опасных) служб, которые могут быть запущены под управлением 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 Information Service or Sun Yellow Pages).
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, чтобы испытать его на этом хосте.
У NFS и есть уязвимые места, которые легко обнаружить с помощью rpcinfo. Утилита portmapper небезопасна, поскольку единственный способ аутентификации основан на TCP-пакетах и может быть легко подделан. Sun сделал шаг в сторону усиления безопасности RPC введя Secure RPC, который использует разделяемый DES-ключ аутентификации, который должен быть известен обеим сторонам. Однако, в большинстве случаев, у внешних сетей не должно быть возможности доступа к нашей службе portmapper. Если такая возможность есть, неизвестно, какую информацию они могут получить - или что еще хуже, какие дыры они могут открыть. Выключайте или блокируйте службы с помощью брандмауэра, чтобы внешние пользователи не могли получить к ним доступ.
Используя rpcinfo, вы можете найти уязвимые NFS rpc.statd приложения, чтобы взломать их. Но почему же на это идут, несмотря на то, что для того чтобы начались проблемы, достаточно всего лишь ошибок в конфигурировании NFS?
Некоторые системные администраторы не слишком сильны в службах NFS, которые они экспортируют. Некоторые, даже не осознавая, экспортируют свои файловые системы с полномочиями чтение/запись, только и ожидая, когда взломщики через интернет обнаружат это.
Команда showmount позволит нам увидеть, какие файловые системы доступны на конкретных
Эта команда отображает все смонтированные директории на
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-адрес или имя хоста.
R-tools - наименее безопасная утилита, которую вы можете запустить в Unix-системе. Она использует базовую Unix-аутентификацию "rhosts", которая опирается на доверие имени пользователя и имени хоста. Возможно, одна из самых больших проблем с этим режимом аутентификации заключается в том, что пользователь может настроить свой доступ так, что он сможет войти отовсюду, не вводя пароль.
Советуем никогда не запускать какую либо из r-служб. Если вы системный администратор, избегайте этого как чумы. Отключите эти службы и удалите их на всех системах. Если вы взломщик, r-tools могут отбить у вас вкус к работе.
Как администратор, вы должны использовать SSH, который использует более надежные способы аутентификации и шифрует свой трафик. Но это не означает, что другие системные администраторы с этого момента не захотят запускать r-tools
Здесь мы расскажем вам о некоторых доступных средствах из арсенала r-tools, и вы сможете убедиться, насколько они опасны.
Также как и telnet, запускается поверх TCP на 513 порту (который прослушивается процессом rshd ) и обеспечивает удаленный доступ к командному интерпретатору системы. Rsh делает те же самые вещи, исключая выполнение отдельных команд на удаленном хосте, возвращает вывод этих команд, и немедленно прерывает соединение. может копировать файлы на или с удаленного хоста.
Ниже приведен пример командной строки:
rlogin -l myusername myhost rsh -l myusername myhost "ls -al" rcp myusername@myhost:/path/to/remotefile localfile
Создав файл с именем .rhosts в user/host которым разрешен доступ. Вы можете сделать это, определив строки вида hostname [username] для определения, что пользователь username с хоста hostname может использовать средства r-tools для соединения без использования пароля. Ленивый пользователь может просто задать комбинацию + + в своем файле .rhosts, открыв тем самым вход любому пользователю с любого хоста. Даже если безопасностью полностью не пренебрегли, пользователь может вставить строку +myusername, которая разрешает вход кому угодно, с любой машины, с именем myusername и без пароля.
Некто может создать учетную запись на своей локальной машине с именем myusername, запустить свою программу , и он тут как тут. Вы можете обнаружить здесь проблему с безопасностью. Давая возможность каждому пользователю ошиваться вокруг дыры в безопасности вашей системы, r-tools быстро сведет на нет те удобства, которые он предоставляет. Системные администраторы могут сделать тоже самое, используя глобальный файл hosts.equiv для определения доверенных для входа в систему средствами r-tool хостов и пользователей.
Более поздние версии r-tools поддерживают Kerberos-аутентификацию и пытаются использовать ее перед rhosts аутентификацией. Вдобавок, они могут поддерживать стандарт шифрования данных (DES) для шифрования данных на обеих сторонах поддерживаемого соединения.
Программа rwho взаимодействует с отдельной программой ( rwhod, запущенной на порту UDP с номером 513). Rwho-клиент пытается обмениваться информацией со всеми машинами, поддерживающими rwhod и обнаруживаемым в локальной подсети, чтобы определить, как пользователь может войти на каждую из них. Так же, как для , здесь много информации, которая позволяет взломщику, проникшему в локальную сеть, получить достоверные сведения о пользователях конкретного хоста. И есть вероятность, что если он запустит программу rwho, то сможет запустить некоторые другие средства удаленного доступа, так чтобы взломщик нашел возможность войти в систему без использования паролей.
Синтаксис командной строки очень простой. Просто наберите rwho. Если вы хотите включить пользователей, которые вошли в систему, но находятся в состоянии ожидания более часа, наберите rwho -a.
Эта программа обменивается информацией с программой rexecd, выполняемой на TCP-порту с номером 512. Функционально она весьма близка с программой rsh. Она использует следующий формат командной строки:
rexec username@host_name command
Пароль может быть определен в командной строке с помощью параметра -p (плохая мысль, поскольку он может быть сохранен в журнале командного интерпретатора). Если пользовательские полномочия не введены, rexec пытается использовать записи в файле ~/.netrc для входа в систему.
В предыдущем разделе мы говорили о том, как программа rwho позволяет вам увидеть пользователей на удаленной Unix-машине. Если вы находитесь на Unix-машине, вы можете использовать команду who, w и last, чтобы получить много информации о пользователях, в настоящее время работающих в системе или работавших в ней с момента вашего последнего входа в систему ( last также обсуждается в лекции "Создание и использование комплекта инструментов "живого ответа" для Unix"). Серьезные взломщики могут осторожно изучать поведение пользователя, входя в систему под видом обычного пользователя и избегая моментов, когда в систему входит пользователь root.
Эти три средства - стандартные для Unix-систем и полезны как системным администраторам, так и взломщикам, чтобы следить за поведением пользователя. Поскольку все эти команды могут выполняться только локально, вы можете предпочесть ограничить доступ к ним только пользователям с полномочиями root.
Просто набрав 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 сообщит вам, что пользователь запускает сейчас из командной строки, равно как и статистику об использовании системы.
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
А что можно сказать относительно пользователей, которые ранее зарегистрировались в системе, и более не проявляли своей активности? Вы когда-нибудь регистрировались в Unix-системе и получали сообщение о времени своего последнего входа в систему? Если вы запросите информацию с помощью о пользователях, которые в настоящее время не зарегистрированы в системе, демон всего лишь сообщит вам дату и время последнего входа в систему этих пользователей. Каким образом система хранит эту информацию?
В системе используется база данных для хранения записей о 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 дает нам список всех запущенных процессов, что лучше указывает на то, что он собирается сделать. Как только мы собрали информацию, мы можем разместить более <продвинутые> средства, которые помогут нам собрать все куски вместе и проследить его шаги - но все это началось с двух простых системных утилит.
Многие из наиболее часто используемых инструментальных средств, которые вам могут встретиться, включены в состав вашей операционной системы в качестве системных утилит или принадлежат к разряду программ с открытым исходным кодом и их можно свободно загрузить из сети. В этой лекции мы рассмотрим некоторые основные средства.
Когда пользователи вспоминают Windows и сети, они обязательно вспоминают про "Сетевое окружение", которое может быть открыто в окне "Моя сеть" в Windows 2000, ME и XP. Когда вы просматриваете сеть и получаете доступ к файлам, вы используете протокол, который называется Server Message ( SMB ). Большинство людей, которые открывают для общего доступа папки и файлы на своих компьютерах, надеются, что только члены их локальной сети имеют доступ к сетевым ресурсам, видимым в "Сетевом окружении". Однако, как и большинство утилит с графическим интерфейсом, сетевое окружение опирается на программу нижнего уровня, выполняемую в командной строке. Эта программа называется net, и сейчас самое время познакомиться с ней.
Начнем с последовательного ознакомления с аргументами командной строки и их краткого описания, как это представлено в таблице 2.1. Мы будем следовать примерам использования наиболее важных команд и знакомиться с тем, что они делают. Наберите флаг /? после любой из команд, приведенных в таблице, чтобы получить расширенную информацию о синтаксисе команды.
| Командная строка | 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 |
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 |
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 (
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 для соединения с одним из таких административных ресурсов.
Дополнительный административный ресурс общего доступа сделан таким образом, что администратор домена может посылать команды взад-вперед между серверами. Этот ресурс называется , что означает
Вы догадываетесь, что ресурс должен быть хорошо защищен с помощью административных полномочий. Но некоторые приложения в действительности требуют доступа к без аутентификации. Поздравляю, вы не сможете получить полное управление системой, если у вас нет полномочий Администратора, но, подключившись даже без административных полномочий, вы можете получить больше сведений, чем это было до настоящего момента.
/?, чтобы получить полную информацию о синтаксисе команды и ее возможностях.Следующий скрипт устойчиво создает достаточно привилегированный и с достаточно высокими полномочиями конвейер между вашей машиной и машиной с адресом 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" с примерами утилит, которые вы можете использовать для получения информации после создания "нулевого" соединения с .)
net use \\192.168.1.150\IPC $ /delete для завершения соединения. Если этого не сделать, кто-нибудь обратит внимание на установленное соединение и вычислит ваш IP-адрес, используя команды net session или nbstat -s, которые уже коротко обсуждались.Как и Windows, имеющая средства доступа к разделяемым ресурсам из командной строки посредством SMB, у Unix есть собственные средства доступа к общим ресурсам на основе протокола NetBIOS. Samba включает в себя возможности и сервера и клиента для того, чтобы предоставить вам возможность определить общие сетевые ресурсы таким образом, чтобы Windows-клиенты могли видеть их в своем сетевом окружении и получить к ним доступ. В этом разделе мы сосредоточимся только на клиентской части этой программы, которая дает возможность получить доступ к общим ресурсам на основе протокола Server Message (SMB).
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 проинформировал нас о наличии общего ресурса ! Скрытые ресурсы невозможно спрятать от 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 для открытия нулевой сессии с ресурсом ? Уверены, что да. Однако сделать это несколько сложнее. Дело в том, что - это конвейер, а не брандмауэр, поэтому smbclient не в состоянии установить такое соединение. Вам следует использовать rpcclient, включенный в состав дистрибутива Samba, чтобы соединиться с ресурсом .
Мы говорили о необходимости знать 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".
Мы сделали обзор некоторых средств, с помощью которых можно соединиться с 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-имя компьютера, так и имя работающего пользователя). Вы можете действовать методом исключения, чтобы понять какое имя к чему относится.
Изучение значений .
| Имя | Код | Назначение |
|---|---|---|
<computer_name> |
00 | Служба рабочей станции. |
<computer_name> |
01 | Служба передачи сообщений. |
<\\--__MSBROUSE__> |
01 | Мастер-броузер. |
<computer_name> |
03 | Служба передачи сообщений. |
<computer_name> |
06 | Служба сервера |
<computer_name> |
20 | Служба файлового сервера. |
<computer_name> |
21 | Служба клиента сервера |
<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.
Еще одна разновидность информации, которую можно получит с помощью NBTSTAT - это аппаратные Ethernet-адреса (или MAC-адреса). В нашем случае IP-адресу 192.168.1.102 соответствует MAC-адрес 00-50-DA-E9-87-5F. MAC-адрес состоит из 48 бит информации и включает в себя 12 шестнадцатеричных чисел или шесть октетов. Первые (считая слева) 6 цифр (три октета) представляют собой серийный номер интерфейса конкретного поставщика оборудования. Первые шесть цифр считаются уникальным идентификатором производителя (Organizationally Unique Index
Ниже приведены несколько примеров наиболее распространенных кодов .
В нашем примере, система имела MAC-адрес 00-50-DA-E9-87-5F. Это означает, что производителем сетевого интерфейса была фирма
Выполненная в системе команда 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. По значению (00-50-56) можно определить, что производителем сетевого интерфейса является компания VMware, Inc. VMware производит программное обеспечение, реализующее виртуальные машины для серверов и настольных компьютеров (см. лекцию "VMware"), что говорит о том, что система, с которой мы общаемся, возможно, виртуальный NT-Сервер, запущенный под управлением другой операционной системы на хосте.
OUI .Поскольку Windows-машины передают эту информацию без ограничений в процессе работы в сети, они не фиксируют в системном журнале попытки получения этих данных. Брандмауэры и системы обнаружения вторжений настраиваются только на обнаружение и блокировку передачи этого трафика вовне.
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".
Под управлением Unix утилита позволяет получать информацию о пользователях системы. Система запускает демон , который работает по протоколу TCP через 79 порт и отвечает на запросы о работающих в настоящее время в системе пользователях, а также на запросы о конкретных пользователях.
Поскольку используется много версий -клиентов и демонов, то может меняться состав доступных опций, но мы приведем основную информацию о том, что можно получить с помощью утилиты .
Эта команда выдает информацию обо всех пользователях, в настоящее время зарегистрированных в системе с именем host_name@com. Если в системе запущен демон , мы можем просто набрать команду , чтобы получить ту же самую информацию на локальной машине.
[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)
Здесь представлено немало информации. Мы получили идентификаторы трех пользователей системы. Есть шанс, что хотя бы один из них использует несложный пароль. Чем больше работающих в системе пользователей мы обнаружим, тем больше пользовательских идентификаторов мы можем испробовать для взлома паролей.
Теперь посмотрим, какую информацию мы сможем получить о пользователе с именем 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, вы сможете получить ту же самую информацию для всех пользователей, зарегистрированных в системе на текущий момент. может использоваться не только для поиска имен пользователей, но и для поиска настоящих имен в системе. Вы можете попытаться получить с его помощью информацию о распространенных именах вроде Джонсона, Джонса или Стюарта.
-демон для локальных пользователей для поиска информации, по крайней мере, перекройте к нему доступ через брандмауэр (79 порт TCP). К сожалению, некоторые наиболее старые дистрибутивы Unix поставляются с предустановленным и готовым к работе демоном , поэтому иногда вы можете сталкиваться с системами, в которых администраторы не обратили внимания на эту службу и тем самым оставили открытой информационную брешь.
Пример из жизни. Социальная инженерия 101
Некоторые хакеры в душе - старомодные мошенники. Зачем хакеру беспокоиться о сканировании портов и поиске уязвимых сетевых серверов, если он может всего лишь убедить кого-нибудь предоставить ему доступ к системе?
Хакер запускает команды в местной образовательной сети и обнаруживает пользователя с довольно информативной записью в файле 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
Вы можете подумать, что большинство людей не попадутся на такую очевидную уловку. Вы будете удивлены. Велика вероятность, что Карла с радостью снабдит нашего хакера информацией о логине, которым она пользуется в данной системе электронной почты.
Социальная инженерия может быть применена также и другими способами. В следующем разделе мы обсудим средство , которое может дать хакерам важные административные, технические и относящиеся к выписке счетов контакты организаций. Если хакер фокусирует внимание на одном из контактных имен и сможет собрать достаточно информации об этом человеке, то он может сконструировать похожее профессиональное электронное послание - заставляя работодателя разгласить информацию, которую он или она обычно не раскрывают незнакомцам.
невероятно простое, но в тоже время весьма распространенное средство, с помощью которого осуществляется запрос к конкретной базе данных "
Служба представляет собой базу данных, которая поддерживается держателями служб DNS по всему миру. База данных может содержать много различной информации, но обычно в ней содержится такая информация как местоположение, контактная информация и диапазоны IP-адресов для каждого доменного имени, находящегося под управлением держателя службы доменных имен.
Сама по себе команда весьма проста. Наиболее старые версии команды требуют ввода имени хоста, на котором поддерживается -сервер с использованием флага -h. Оставшаяся часть командной строки содержит в себе запрос, который мы хотим послать. Команда fwhois требует сначала определить запрос, и при необходимости в конце задать адрес с сервера ( @whois_server ).
Следующие две команды идентичны друг другу.
bash% whois -h whois.networksolutions.com yahoo.com
и то же самое
bash% fwhois yahoo.com@whois.networksolutions.com
По умолчанию используется сервер . Мы можем запустить команду без указания имени сервера, чтобы получить самую общую информацию о домене.
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
На выходе мы получили информацию о серверах доменных имен и сведения о том, когда в последний раз обновлялась соответствующая запись. Но здесь нет никакой информации о местоположении сервера или контактной информации. К счастью, здесь есть ссылка на другой -сервер, где должна быть интересующая нас информация. Теперь, если мы попытаемся выполнить команду , мы должны будем получить ту же самую информацию что и ранее, но вдобавок еще и сведения о географическом положении и контактную информацию.
Таким образом, если нам надоело назойливое сканирование портов с адреса somesystem.some_loser.org, теперь мы можем просто связаться с организацией SomeLoser и выразить протест. - также весьма полезен для взломщиков, которые пытаются преследовать особые цели.
Но что делать, если мы не знаем имени хоста. Что если в нашем распоряжении имеется только IP-адрес. К счастью, есть
Мы хотим знать, кто является владельцем IP-адреса 64.58.76.229. Для этого мы посылаем .
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-адрес. Для того чтобы это сделать, мы используем команду .
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.
Ниже приведен список наиболее популярных -серверов и их функции. Весьма вероятно, что если один из этих серверов не знает о запрошенном вами домене или IP-адресе, то вы сможете получить эту информацию с другого сервера.
| Сервер | Функции |
|---|---|
| Сервер для пользователей, которые зарегистрировали свои доменные имена в компании |
|
| Сервер American Registry for Internet Numbers - выполняет |
|
| Сервер для базы данных Asia Pacific Network Information Center. | |
| R?seaux IP Europ? |
|
Ping - одно из наиболее общих диагностических средств - просто посылает ICMP-запросы и ожидает ответа. Ping используется для тестирования сетевых соединений, но также может быть применен и в других целях, в чем вы сейчас сможете убедиться.
Во-первых, упомянем несколько весьма важных параметров командной строки. Есть много различных реализаций команды Ping, но большинство Ping-утилит для Unix-систем имеют общие параметры командной строки. Основные отличия Unix- и Windows-реализаций этой утилиты представлены в таблице 2.3.
| Параметр | Описание |
|---|---|
-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.
Стандартная реализация программы Ping, которая поставляется с большинством версий TCP/IP-протокола, разработана для работы на одиночном хосте. Хоть это и удобно, но использование утилиты для тестирования большой сети превращается в кропотливый Ping вернет результаты.
Для решения этих проблем была создана программа /. Windows-приложение, аналогичное утилите /. Но мы не будем рассматривать эту программу в данном разделе.
Реализация
Fping посылает ICMP (Internet Control 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-адреса и получили начальную информацию, необходимую для создания схемы нашей сети. Но следует иметь в виду, что этот инструмент предоставляет те же самые преимущества назойливым чужакам, которые бродят вокруг в поисках доступа к чужим сетям.
делает то, что указано в ее названии - он размечает маршрут, который проходят IP-пакеты на пути от вашего хоста до указанной цели.
Программа начинает работать с отсылки IP-пакета (ICMP или UDP) к заданной цели, но при этом устанавливает время жизни пакета ( TTL- Time-To-Live ) равным 1. Пакет исчерпывает свои ресурсы при достижении первой же промежуточной точки, и маршрутизатор уведомляет нас с помощью ICMP-сообщения, что время жизни пакета исчерпано, сообщая тем самым, что достигнута первая промежуточная точка. Теперь мы отсылаем следующий IP-пакет к цели, но теперь уже устанавливаем параметр TTL равным 2. Пакет достигает второй промежуточной точки и происходит тоже самое. Продолжая наращивать параметр TTL до тех пор, пока не будет достигнута цель, мы сможем узнать, какой маршрут проходят пакеты на пути от нашего хоста до цели.
Этот инструмент может быть очень полезен при диагностике проблем в сети (для определения причин выхода сети из строя или для определения петель), но он также может быть использован для получения информации о местонахождении тестируемой системы.
Ниже приведен фрагмент вывода, который можно получить, используя команду
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, соответственно. Имейте в виду, что графические версии не всегда правильно отображают информацию, поскольку соответствующие -базы данных могут содержать, а могут и не содержать требуемую информацию.
Так же как и Ping, команда имеет несколько различных реализаций. Так же как и Ping, реализация для Windows сильно отличается от версии, используемой для Unix. Настолько что Windows-утилита носит название tracert, напоминая о том, что в системе Windows эта программа используется без поддержки длинных имен файлов. В таблице 2.4 описаны некоторые наиболее важные параметры командной строки (все параметры, если иное не оговаривается, приводятся для Unix-версии).
| Параметр | Описание |
|---|---|
-g hostlist (Unix) -j hostlist (Windows) |
|
-i interface |
Задает используемый для отсылки пакетов сетевой интерфейс (для хоста с несколькими сетевыми интерфейсами). |
-I |
Определяет использование ICMP-сообщений вместо UDP. По умолчанию PORT_UNREACHABLE в ответ на пришедшие пакеты. |
-m hops (Unix) -h hops (Windows) |
Задает максимальное число промежуточных хостов, которое может быть пройдено до конечного пункта. Если конечный хост не достигается за заданное число шагов, все возвращается обратно. По умолчанию равно 30. |
-n (Unix) -d (Windows) |
Запрещает определение имен для IP-адресов. Обычно это существенно ускоряет работу программы, но в этом случае вы не сможете получить представление о географическом положении хостов. |
-p port |
Если мы используем |
-w (Unix and Windows) |
Задает время ожидания ответа от промежуточных хостов. |
Ниже приведен отрывок вывода программы , запущенной на локальной машине для тестирования удаленного сервера.
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-параметр, и ответ не дошел до получателя.
может принять множество других ICMP-сообщений. Если в выводе вы видите странные значки, описанные в таблице 2.5 - это попытка сообщить вам нечто.
-v, если вы хотите увидеть отличные от стандартного TIME_EXCEEDED или трех UNREACHABLE сообщения. выдает большой объем информации, включая географический регион, в котором расположен хост, список машин, которые поддерживают трафик между исходным и конечными хостами, а также инетрнет-провайдера для хоста. Некоторая информация позволяет взломщикам определить промежуточные маршрутизаторы, которые могут быть уязвимы для атак или использованы для получения дополнительной информации. До тех пор, пока большинством систем трафик рассматривается, как разрешенный, только с помощью брандмауэров или систем обнаружения вторжений можно обнаружить или блокировать внешние попытки трассировки.
| Флаг | Описание |
|---|---|
!H |
Хост ICMP недостижим. |
!N |
ICMP network unreachable (сеть ICMP недостижима). |
!P |
|
!S |
Неудавшаяся попытка задать маршрут. |
!F |
Необходима фрагментация. |
!X |
Соединение запрещено администратором. |
!# |
ICMP код недостижимости #. |
Обычные 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-окна, и - время прохождения запроса в оба конца. Использование флага -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 применяет другой hping есть флаг -W, который уравнивает 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 машины используют этот конкретный
В лекции "Сканеры портов" мы обсудим средство, называемое nmap, которое производит продвинутое снятие отпечатков пальцев на базе большой коллекции специфичных для OS конфигураций и поведения TCP/IP.
Одна из наиболее мощных (и опасных) служб, которые могут быть запущены под управлением 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 Information Service or Sun Yellow Pages).
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, чтобы испытать его на этом хосте.
У NFS и есть уязвимые места, которые легко обнаружить с помощью rpcinfo. Утилита portmapper небезопасна, поскольку единственный способ аутентификации основан на TCP-пакетах и может быть легко подделан. Sun сделал шаг в сторону усиления безопасности RPC введя Secure RPC, который использует разделяемый DES-ключ аутентификации, который должен быть известен обеим сторонам. Однако, в большинстве случаев, у внешних сетей не должно быть возможности доступа к нашей службе portmapper. Если такая возможность есть, неизвестно, какую информацию они могут получить - или что еще хуже, какие дыры они могут открыть. Выключайте или блокируйте службы с помощью брандмауэра, чтобы внешние пользователи не могли получить к ним доступ.
Используя rpcinfo, вы можете найти уязвимые NFS rpc.statd приложения, чтобы взломать их. Но почему же на это идут, несмотря на то, что для того чтобы начались проблемы, достаточно всего лишь ошибок в конфигурировании NFS?
Некоторые системные администраторы не слишком сильны в службах NFS, которые они экспортируют. Некоторые, даже не осознавая, экспортируют свои файловые системы с полномочиями чтение/запись, только и ожидая, когда взломщики через интернет обнаружат это.
Команда showmount позволит нам увидеть, какие файловые системы доступны на конкретных
Эта команда отображает все смонтированные директории на
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-адрес или имя хоста.
R-tools - наименее безопасная утилита, которую вы можете запустить в Unix-системе. Она использует базовую Unix-аутентификацию "rhosts", которая опирается на доверие имени пользователя и имени хоста. Возможно, одна из самых больших проблем с этим режимом аутентификации заключается в том, что пользователь может настроить свой доступ так, что он сможет войти отовсюду, не вводя пароль.
Советуем никогда не запускать какую либо из r-служб. Если вы системный администратор, избегайте этого как чумы. Отключите эти службы и удалите их на всех системах. Если вы взломщик, r-tools могут отбить у вас вкус к работе.
Как администратор, вы должны использовать SSH, который использует более надежные способы аутентификации и шифрует свой трафик. Но это не означает, что другие системные администраторы с этого момента не захотят запускать r-tools
Здесь мы расскажем вам о некоторых доступных средствах из арсенала r-tools, и вы сможете убедиться, насколько они опасны.
Также как и telnet, запускается поверх TCP на 513 порту (который прослушивается процессом rshd ) и обеспечивает удаленный доступ к командному интерпретатору системы. Rsh делает те же самые вещи, исключая выполнение отдельных команд на удаленном хосте, возвращает вывод этих команд, и немедленно прерывает соединение. может копировать файлы на или с удаленного хоста.
Ниже приведен пример командной строки:
rlogin -l myusername myhost rsh -l myusername myhost "ls -al" rcp myusername@myhost:/path/to/remotefile localfile
Создав файл с именем .rhosts в user/host которым разрешен доступ. Вы можете сделать это, определив строки вида hostname [username] для определения, что пользователь username с хоста hostname может использовать средства r-tools для соединения без использования пароля. Ленивый пользователь может просто задать комбинацию + + в своем файле .rhosts, открыв тем самым вход любому пользователю с любого хоста. Даже если безопасностью полностью не пренебрегли, пользователь может вставить строку +myusername, которая разрешает вход кому угодно, с любой машины, с именем myusername и без пароля.
Некто может создать учетную запись на своей локальной машине с именем myusername, запустить свою программу , и он тут как тут. Вы можете обнаружить здесь проблему с безопасностью. Давая возможность каждому пользователю ошиваться вокруг дыры в безопасности вашей системы, r-tools быстро сведет на нет те удобства, которые он предоставляет. Системные администраторы могут сделать тоже самое, используя глобальный файл hosts.equiv для определения доверенных для входа в систему средствами r-tool хостов и пользователей.
Более поздние версии r-tools поддерживают Kerberos-аутентификацию и пытаются использовать ее перед rhosts аутентификацией. Вдобавок, они могут поддерживать стандарт шифрования данных (DES) для шифрования данных на обеих сторонах поддерживаемого соединения.
Программа rwho взаимодействует с отдельной программой ( rwhod, запущенной на порту UDP с номером 513). Rwho-клиент пытается обмениваться информацией со всеми машинами, поддерживающими rwhod и обнаруживаемым в локальной подсети, чтобы определить, как пользователь может войти на каждую из них. Так же, как для , здесь много информации, которая позволяет взломщику, проникшему в локальную сеть, получить достоверные сведения о пользователях конкретного хоста. И есть вероятность, что если он запустит программу rwho, то сможет запустить некоторые другие средства удаленного доступа, так чтобы взломщик нашел возможность войти в систему без использования паролей.
Синтаксис командной строки очень простой. Просто наберите rwho. Если вы хотите включить пользователей, которые вошли в систему, но находятся в состоянии ожидания более часа, наберите rwho -a.
Эта программа обменивается информацией с программой rexecd, выполняемой на TCP-порту с номером 512. Функционально она весьма близка с программой rsh. Она использует следующий формат командной строки:
rexec username@host_name command
Пароль может быть определен в командной строке с помощью параметра -p (плохая мысль, поскольку он может быть сохранен в журнале командного интерпретатора). Если пользовательские полномочия не введены, rexec пытается использовать записи в файле ~/.netrc для входа в систему.
В предыдущем разделе мы говорили о том, как программа rwho позволяет вам увидеть пользователей на удаленной Unix-машине. Если вы находитесь на Unix-машине, вы можете использовать команду who, w и last, чтобы получить много информации о пользователях, в настоящее время работающих в системе или работавших в ней с момента вашего последнего входа в систему ( last также обсуждается в лекции "Создание и использование комплекта инструментов "живого ответа" для Unix"). Серьезные взломщики могут осторожно изучать поведение пользователя, входя в систему под видом обычного пользователя и избегая моментов, когда в систему входит пользователь root.
Эти три средства - стандартные для Unix-систем и полезны как системным администраторам, так и взломщикам, чтобы следить за поведением пользователя. Поскольку все эти команды могут выполняться только локально, вы можете предпочесть ограничить доступ к ним только пользователям с полномочиями root.
Просто набрав 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 сообщит вам, что пользователь запускает сейчас из командной строки, равно как и статистику об использовании системы.
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
А что можно сказать относительно пользователей, которые ранее зарегистрировались в системе, и более не проявляли своей активности? Вы когда-нибудь регистрировались в Unix-системе и получали сообщение о времени своего последнего входа в систему? Если вы запросите информацию с помощью о пользователях, которые в настоящее время не зарегистрированы в системе, демон всего лишь сообщит вам дату и время последнего входа в систему этих пользователей. Каким образом система хранит эту информацию?
В системе используется база данных для хранения записей о 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 дает нам список всех запущенных процессов, что лучше указывает на то, что он собирается сделать. Как только мы собрали информацию, мы можем разместить более <продвинутые> средства, которые помогут нам собрать все куски вместе и проследить его шаги - но все это началось с двух простых системных утилит.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.