Россия, Москва, Московский Государственный Открытый Университет, 2007 |
Системные средства с открытым программным кодом: основы
WHOIS/FWHOIS
Whois - невероятно простое, но в тоже время весьма распространенное средство, с помощью которого осуществляется запрос к конкретной базе данных "whois" для получения информации об имени домена и IP-адресе.
Служба Whois представляет собой базу данных, которая поддерживается держателями служб DNS по всему миру. База данных Whois может содержать много различной информации, но обычно в ней содержится такая информация как местоположение, контактная информация и диапазоны IP-адресов для каждого доменного имени, находящегося под управлением держателя службы доменных имен.
Реализация
Сама по себе команда весьма проста. Наиболее старые версии команды whois требуют ввода имени хоста, на котором поддерживается whois -сервер с использованием флага -h. Оставшаяся часть командной строки содержит в себе запрос, который мы хотим послать. Команда fwhois требует сначала определить запрос, и при необходимости в конце задать адрес whois с сервера ( @whois_server ).
Следующие две команды идентичны друг другу.
bash% whois -h whois.networksolutions.com yahoo.com
и то же самое
bash% fwhois yahoo.com@whois.networksolutions.com
По умолчанию используется сервер whois.internic.net. Мы можем запустить команду whois без указания имени сервера, чтобы получить самую общую информацию о домене.
bash% whois yahoo.com Domain Name: YAHOO.COM Registrar: NETWORK SOLUTIONS, INC. Whois Server: whois.networksolutions.com Referral URL: http://www.networksolutions.com Name Server: NS3.EUROPE.YAHOO.COM Name Server: NS5.DCX.YAHOO.COM Name Server: NS4.DAL.YAHOO.COM Name Server: NS2.SAN.YAHOO.COM Name Server: NS1.SNV.YAHOO.COM Updated Date: 05-nov-2001
На выходе мы получили информацию о серверах доменных имен и сведения о том, когда в последний раз обновлялась соответствующая запись. Но здесь нет никакой информации о местоположении сервера или контактной информации. К счастью, здесь есть ссылка на другой whois -сервер, где должна быть интересующая нас информация. Теперь, если мы попытаемся выполнить команду whois -h whois.networksolutions.com yahoo.com, мы должны будем получить ту же самую информацию что и ранее, но вдобавок еще и сведения о географическом положении и контактную информацию.
Таким образом, если нам надоело назойливое сканирование портов с адреса somesystem.some_loser.org, теперь мы можем просто связаться с организацией SomeLoser и выразить протест. Whois - также весьма полезен для взломщиков, которые пытаются преследовать особые цели.
Но что делать, если мы не знаем имени хоста. Что если в нашем распоряжении имеется только IP-адрес. К счастью, есть whois-серверы, которые поддерживают выполнение запросов по IP-адресу.
Мы хотим знать, кто является владельцем IP-адреса 64.58.76.229. Для этого мы посылаем whois-запрос на whois.arin.net.
bash% whois -h whois.arin.net 64.58.76.229 [whois.arin.net] Exodus Communications Inc. Sterling (DC2) (NETBLK-EC17-1) EC17-1 64.58.64.0 - 64.58.95.255 Yahoo (NETBLK-EC17-1-YAHOO1) EC17-1-YAHOO1 64.58.76.0 - 64.58.79.255 To single out one record, look it up with "!xxx", where xxx is the handle, shown in parentheses following the name, which comes first. The ARIN Registration Services Host contains ONLY Internet Network Information: Networks, ASNs, and related POCs. Please use the whois server at rs.internic.net for DOMAIN related Information and whois.nic.mil for NIPRNET Information.2.2.
Мы видим, что весь блок адресов принадлежит компании Exodus Communications, но подсеть класса C, которой принадлежит конкретный IP-адрес, находится в распоряжении компании Yahoo! Мы можем использовать указанный в скобках адрес (в данном случае это NETBLK-EC17-1-YAHOO1 ) для получения дополнительной информации об организации, которой принадлежит этот IP-адрес. Для того чтобы это сделать, мы используем команду whois -h whois.arin.net NETBLK-EC17-1-YAHOO1.
Yahoo (NETBLK-EC17-1-YAHOO1) 701 First Avenue Sunnyvale, CA 94089 US Netname: EC17-1-YAHOO1 Netblock: 64.58.76.0 - 64.58.79.255 Maintainer: YHOO Coordinator: Admin, Netblock (NA258-ARIN) netblockadmin@yahoo-inc.com 1-408-349-5555 Domain System inverse mapping provided by: NS1.YAHOO.COM 66.218.71.63 NS2.YAHOO.COM 209.132.1.28 NS3.YAHOO.COM 217.12.4.104 NS4.YAHOO.COM 63.250.206.138 NS5.YAHOO.COM 64.58.77.85 Record last updated on 29-Mar-2002. Database last updated on 9-Apr-2002 19:58:57 EDT.2.3.
Ниже приведен список наиболее популярных whois -серверов и их функции. Весьма вероятно, что если один из этих серверов не знает о запрошенном вами домене или IP-адресе, то вы сможете получить эту информацию с другого сервера.
Ping
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 ms2.4.
Пример из жизни. Как хакер может злоупотреблять 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.