Хакер № 03/04 (63)

Препарируем IP
Константин Клягин
Xakep, номер #063, стр. 063-116-1
(http://thekonst.net/)
Работа с raw sockets в Linux
Бывшие юные натуралисты помнят, что для того, чтобы лучше понять, как функционирует лягушка, крыса, синица или ящерица, нужно прибегнуть к препарированию. То есть вскрыть, разобрать на части и посмотреть, как работает каждая из них. Вот четырехкамерное сердце, желудок, пищевод. Вооружившись микроскопом, можно рассмотреть структуру тканей. Подкрутив увеличение, можно увидеть и клетки - кирпичики, из которых состоит живой организм жителя леса, поля или болота. Вернее, состоял.
Интернет - то же болото. Лягушки TCP/IP соединений, UDP-головастики, жуки PING’ов и личинки DNS-запросов шныряют тут и там, повинуясь подводному течению роутингов. Наша задача сегодня - выловить несколько экземпляров этой живности и препарировать их. Разложить на косточки, кишочки и прочий ливер. А потом из всего этого мы вполне сможем собрать какого-нибудь Франкенштейна.
TCP/IP
Пожалуй, самым сложным из всех стандартных IP-протоколов является TCP, в котором клиент и сервер для осуществления коммуникации открывают по отдельному сокету для каждого соединения. На TCP ездят большинство интернет-сервисов, хорошо знакомых каждому: HTTP, POP3, SMTP, TELNET, SSH и т.п.
На первый взгляд (или спьяну) может показаться, что TCP соединение - своего рода выделенный канал, работающий по принципу: с одного конца вбросил - с другого поймал. Однако, протерев похмельные глаза рукавом, замечаешь массу небольших пакетов, с помощью которых этот поток реализуется. Грубо говоря, двунаправленный поток данных по TCP из IP-пакетов склеивается воедино. Протокол предусматривает несколько важных моментов, делающих сокет-соединения тем, что они собой и представляют. Во-первых, в IP никто не гарантирует доставку пакетов, в то время как потеря куска данных в сокет-соединении недопустима. Поэтому на каждый принятый пакет получающая сторона отвечает подтверждением. В противном случае все посылается заново. Кроме этого, TCP-пакеты имеют порядковые номера, используемые для восстановления порядка, в котором были посланы данные. Контрольные суммы, включенные в пакеты, обеспечивают сохранность данных и их прибытие на место назначения в лучшем виде.
Формат пакетов TCP, а также их разновидности ты запросто найдешь в RFC. Аббревиатура TCP означает Transport Control Protocol, и сам протокол часто обозначается как TCP/IP, так как уровнем ниже лежит IP - Internet Protocol.
Черный ping смерти
Общеизвестно, что старый добрый пинг используется для проверки соединения с машинкой, имеющей определенный адрес. На самом деле протокол этот называется ICMP, а пинг - одно из его применений с включенной echo-функцией. Получая такой пакет, хост обязан ответить точной копией полученных данных.
Как ни странно, когда-то злобные хакеры валили хосты именно с помощью пинга. Дело в том, что некоторые операционки были уязвимы для атак типа Ping of death. Их смысл прост: машинке с дырявой операционкой посылался пинг длиной больше стандартных 65535 байтов. Системы, вроде Solaris 2.4, Minix, MacOS 7, Windows 3.11 и 95, от этого пучило, они падали, перезагружались и висли. В 1996 году POD помог славно повеселиться многим товарищам. И хотя сейчас большинство операционок на такой понт не возьмешь, стоит все-таки взглянуть, как это делается. Вдруг кто-нибудь да выпустит интернет-холодильник или швейную машинку с неотлаженным IP-стеком? Только представь себе, сколько протухших супов, гнилых окороков, а также рубашек с наглухо зашитыми карманами и рукавами обещает нам такой поворот событий. Поэтому приступим.
Содержание Вперед на стр. 063-116-2
|
 |
|