На сегодняшний день широко известен ряд инструментальных средств, существенно облегчающих перехват сеансов. В некоторых случаях они работают в автоматическом режиме. Инструментарии подобного типа являются важнейшей частью любой инструментальной панели безопасности. Для обсуждения их возможностей были выбраны некоторые из них, наиболее функциональные и популярные.
Программа Juggernaut
Программа Jaggernaut была написана редактором журнала «Phrack». Он посвятил программе статью в своем журнале, которую можно найти по адресу: http://staff.washington.edu/dittrich/talks/qsm-sec/P50-06.txt.
Демонстрационная версия программы 1.0 была представлена на суд общественности во время презентации на первой конференции по вопросам безопасности «Black Hat Briefings». В следующем выпуске журнала «Phrack» читателям был представлен файл исправлений. Исправленная с его помощью версия программы Jaggernaut стала известна как версия 1.2. Этот файл можно найти по адресу: http://staff.washington.edu/dittrich/talks/qsm-sec/P51-07.txt.
Будьте осторожны. Опубликованный файл исправлений немного подпорчен. При попытке воспользоваться им сразу станет видно, где конкретно он был изменен. Автор обошел эту проблему, удалив измененные части исправлений и вручную добавив несколько строк. Будьте также осторожны при загрузке файлов: они не в формате HTML-файлов, а текстовые. Поэтому при вырезке или вставке фрагментов файлов с Web-сайта в редактор Notepad или во что-нибудь еще вполне возможно, что вы столкнетесь с пропуском некоторых символов, которые Web-браузер попытался проинтерпретировать. Поэтому лучше выполнить команду «Сохранить как…» или облегчить себе жизнь, получив работающую версию на packetstormsecurity.org/new-exploits/1.2.tar.gz.
В процессе тестирования программа Jaggernaut не «видела» соединений до тех пор, пока не была включена опция GREED в сборочном файле проекта make-файл. В инсталляционном файле описано, как это сделать.
На момент своего опубликования программа Juggernaut была пионерской работой, у которой не было аналогов. Даже сегодня лишь немногие инструментальные средства пытаются перехватывать сессии так, как это делает программа Juggernaut.
Программа Juggernaut имеет два режима работы. Первый предназначен для работы в качестве одного из вариантов модуля проверки текущего состояния в сети, который реагирует на определенные биты в передаваемых данных. Второй режим работы называется Normal – стандартный режим работы программы. Он будет рассмотрен позднее. Ниже приведена предъявляемая в оперативном режиме подсказка команд программы:
[root@rh Juggernaut]# ./juggernaut -h
Usage: ./juggernaut [-h] [-s TOKEN [-e xx] ] [-v] [-t xx]
-h terse help
-H expanded help for those “specially challanged”
people...
-s dedicated sniffing (bloodhound) mode, in which TOKEN
is found enticing
-e enticement factor (defaults to 16)
-v decrease verbosity (don’t do this)
-V version information
-t xx network read timeout in seconds (defaults to 10)
Invoked without arguments, Juggernaut starts in “normal”
mode.Показанный фрагмент – это короткая справка. Расширенная подсказка содержит более детальные объяснения, а также несколько примеров. Как можно увидеть из приведенной подсказки, у этой программы есть опции. Если программу запустить с опцией – s (специализированный режим работы программы, при котором проверяется текущее состояние сети с поиском заданных символов), то она будет работать как модуль проверки и регистрации текущего состояния сети. Например, можно задать программе символы, которые следует найти в паролях, определяемых ключевыми словами password и Password, и она будет регистрировать найденные пакеты согласно заданным символам. Количество зарегистрированных ее пакетов называется показателем захвата (enticement factor). По умолчанию эта величина равна 16, то есть программа по умолчанию регистрирует 16 найденных пакетов. При желании эту величину можно увеличить или уменьшить. Пока в исходном тексте программы не будет изменено имя файла, захваченные пакеты будут регистрироваться в файле, который называется juggernaut.log.snif. Этот файл расположен в директории, из которой была вызвана программа. Запуск программы без задания опций в командной строке приведет к запуску программы в стандартном режиме работы Normal. При этом на экран будет выведен список опций работы программы, как это показано ниже:
Juggernaut
+–+
?) Help
0) Program information
1) Connection database
2) Spy on a connection
3) Reset a connection
4) Automated connection reset daemon
5) Simplex connection hijack
6) Interactive connection hijack
7) Packet assembly module
8) Souper sekret option number eight
9) Step Down(Запуск программы без задания опций в командной строке приведет к отображению начального экрана программы с приведенной выше информацией. При указании восьмой опции ничего не делается.) При выборе первой опции, «База данных соединений» (Connection database), пользователю программы предъявляется список TCP-соединений, которые «увидела» программа. Ниже приведен пример Telnet-соединения:
Current Connection Database:
–
ref # source target
(1) 10.0.0.5 [2211] –> 10.0.0.10 [23]
–
Database is 0.20% to capacity.
[c,q] >Указанная внизу экрана опция q, как и в большинстве других мест программы, возвращает пользователя к пункту 9 основного меню. Опция c очищает базу данных соединений. Для работы ниже перечисленных функций необходимо, чтобы в базе данных соединений была записана какая-то информация о соединениях. Поэтому функции прослушивания или перехвата сессии не будут работать до тех пор, пока программа работает с выбранной первой опцией. Вторая опция, «Шпионить за соединением» (Spy on a connection), предназначена для снифинга. Выбор этой опции позволяет следить за соединениями, представленными в списке подключений. Следующий пример взят из того же Telnet-соединения, что и в предыдущем случае.
Current Connection Database:
–
ref # source target
(1) 10.0.0.5 [2211] –> 10.0.0.10 [23]
–
Choose a connection [q] > 1
Do you wish to log to a file as well? [y/N] > y
Spying on connection, hit “ctrl-c” when done.
Spying on connection: 10.0.0.5 [2211] –> 10.0.0.10 [23]C
Disk Usage (Jul 3 06:01): Mail – 1705 kilobytes
File Repository – 162 kilobytes
Fax Repository – 1 kilobytes
109 Message(s) In New Mail
[TECNET:Main menu]?Как можно увидеть, у пользователя программы появилась возможность занести перехваченные данные в журнал регистрации. Опция 5 – это «Односторонний перехват соединения» (Simplex connection hijack). При выборе данной опции программа перехватывает соединение и посылает команду без отображения результатов на экране злоумышленника. Например:
Current Connection Database:
–
ref # source target
(1) 10.0.0.5 [2211] –> 10.0.0.10 [23]
–
Choose a connection [q] > 1
Enter the command string you wish executed [q] >Напоследок рассмотрим опцию 6 «Интерактивный перехват соединения» (Interactive connection hijack). По своим функциям эта опция аналогична опции 5 («Односторонний перехват соединения»), но при ее выборе появляется возможность просмотреть результаты работы программы точно так же, как и при выборе опции 2 («Шпионить за соединением»). Вполне вероятно, что в большинстве случаев злоумышленник при перехвате соединения захочет воспользоваться именно этой опцией, для того чтобы иметь возможность видеть происходящее перед взломом. При этом если злоумышленник хочет работать скрытно, то вряд ли он будет использовать команду «echo + + > /.rhosts». С другой стороны, если пользователь в какой-то момент производит действия, приводящие к выводу большого количества данных, то злоумышленник, возможно, предпочтет работать вслепую, для того чтобы не загромождать свой экран выводом посторонних данных. Вот что может увидеть пользователь при выборе опции 6:
Current Connection Database:
–
ref # source target
(1) 10.0.0.5 [2211] –> 10.0.0.10 [23]
–
Choose a connection [q] > 1
Spying on connection, hit “ctrl-c” when you want to hijack.
NOTE: This will cause an ACK storm and desynch the client
until the connection is RST.
Spying on connection: 10.0.0.5 [2211] –> 10.0.0.10 [23]Автор программы Juggernaut больше не поддерживает и не улучшает ее. Создается впечатление, что никто не делает этого, по крайней мере открыто. Автор программы Juggernaut написал усовершенствованную версию Juggernaut++ и однажды показал, как выглядят экранные формы программы, но он никогда не выпускал версию этой программ для всеобщего использования.
К моменту написания книги программе Juggernaut исполнилось уже несколько лет. Это большой промежуток времени для инструментальных средств обеспечения безопасности, а особенно для программы, которая активно не разрабатывается. У программы есть некоторые ограничения. Например, нельзя осуществить повторную синхронизацию соединения, а также невозможно работать с соединениями, в которых участвуют хосты с запущенной на них программой Juggernaut. Тем не менее эта программа будет работать на любых TCP-портах. (Другие инструментальные средства работают с Telnet или аналогичными протоколами.) Программа Juggernaut уже не является лучшей в этом классе программ, но тем не менее с познавательной точки зрения до сих пор очень полезно прочитать о проведенных автором программы Juggernaut исследованиях. По этому поводу прочтите оригинальную статью в журнале «Phrack».
Программа Hunt
Программа Hunt была создана Павлом Краузом (Pavel Krauz). Ее текущая версия 1.5. Складывается впечатление, что на момент выхода книги активная разработка программы не велась. Версия программы 1.5 была выпущена 30 мая 2000 года. Ее можно найти по адресу: http://lin.fsid.cvut.cz/~kra/index.html#HUNT.
Hunt является более амбициозным проектом, нежели Juggernaut. По крайней мере, он развился в такой проект. В соответствии с файлом readme, поставляемым вместе с дистрибутивом, одной из причин разработки Краузом программы Hunt было желание реализовать некоторые возможности, которые не были доступны в Juggernaut.
Как и в программе Juggernaut, у программы Hunt есть режимы анализа сетевого трафика (снифинга) и перехвата сессий. В отличие от Juggernaut, в программе Hunt реализованы средства спуфинга при работе с протоколом разрешения адресов ARP. С их помощью можно переслать через атакующую машину данные, посылаемые машиной жертвой, а также избежать перегрузки сети уведомлениями ACK (ACK storm), обычно сопутствующей перехвату TCP сессии. Вот как выглядит программа Hunt при запуске:/*
* hunt 1.5
* multipurpose connection intruder / sniffer for Linux
* (c) 1998-2000 by kra
*/
starting hunt
– Main Menu – rcvpkt 0, free/alloc 63/64 –
l/w/r) list/watch/reset connections
u) host up tests
a) arp/simple hijack (avoids ack storm if arp used)
s) simple hijack
d) daemons rst/arp/sniff/mac
o) options
x) exit
->Строка – > является приглашением пользователя к вводу команд. После нее ожидается ввод одной из команд из списка главного меню. По умолчанию, программа Hunt настроена на Telnet– и rlogin-соединения, но она написана таким образом, что можно легко добавить поддержку других типов соединений. Для этого в расположенном в файле hunt.c коде инициализации предусмотрена следующая строка:
add telnet rlogin policy();
Этафункция находится в файле addpolicy.c и выглядит следующим образом:
void add_telnet_rlogin_policy(void)
{
struct add_policy_info *api;
api = malloc(sizeof(struct add_policy_info));
assert(api);
memset(api, 0, sizeof(sizeof(struct add_policy_info)));
api->src_addr = 0;
api->src_mask = 0;
api->dst_addr = 0;
api->dst_mask = 0;
api->src_ports[0] = 0;
api->dst_ports[0] = htons(23);
api->dst_ports[1] = htons(513);
api->dst_ports[2] = 0;
list_push(&l_add_policy, api);
};Из исходного текста функции видно, что для добавления новых возможностей достаточно просто добавить новые номера портов и затем перекомпилировать программу. Когда программа Hunt захватывает Telnet– или rlogin-соединение, она отображает его в меню списка соединений, как показано ниже:
-> l
0) 10.0.1.1 [3014] —> 130.212.2.65 [23]
– Main Menu – rcvpkt 2664, free/alloc 63/64 –
l/w/r) list/watch/reset connections
u) host up tests
a) arp/simple hijack (avoids ack storm if arp used)
s) simple hijack
d) daemons rst/arp/sniff/mac
o) options
x) exitПервые две строчки – это то, что нас интересует. Программа Hunt часто обновляет меню сразу после введенной команды. Из приведенной экранной формы видно, что программа Hunt обнаружила Telnet-соединение. Ниже показан вызов режима наблюдения (снифинга) за соединением.
-> w
0) 10.0.1.1 [3014] —> 130.212.2.65 [23]
choose conn> 0
dump [s]rc/[d]st/[b]oth [b]> [cr]
print src/dst same characters y/n [n]> [cr]
CTRL-C to break
llss
<82>
<82><82><82><82><82>
Apps/ Library/ Mailboxes/ Makefile
bookmarks.html
dead.letter mail/ proj1.c public_html/
<82>
Например, пользователь программы Hunt запустил программу, захватил Telnet-соединение, выбрал режим наблюдения за ним, а затем перешел в Telnet-окно и набрал команду «ls». Команду «ls» (показанную как llss) можно увидеть ближе к началу приведенного выше протокола работы, за которой следует вывод данных в шестнадцатеричном формате, за которыми следуют файлы в директории пользователя, а затем опять шестнадцатеричный код. Вывод введенной команды «ls» в виде «llss» – результат отображения программой Hunt введенных пользователем символов с добавленным ответом сервера, возвращающего пользователю введенные им же символы. В итоге это выглядит как будто возможность вывода одних и тех же исходных и полученных символов, что работает не вполне корректно. Шестнадцатеричные символы являются форматирующими терминал-символами, которые обычно во время Telnet-сессии остаются за рамками рассмотрения. Конечно, в данном случае нас мало интересуют реализованные в программе Hunt возможности снифинга, хотя это и удобно. Главное – это понять, каким образом программа Hunt используется для перехвата сессий! Именно это демонстрируется ниже:
-> s
0) 10.0.1.1 [3014] –> 130.212.2.65 [23]
choose conn> 0
dump connection y/n [n]> [cr]
Enter the command string you wish executed or [cr]> cd Apps
Тем временем вот что было отображено в Telnet-окне пользователя:
futon>
futon> cd Apps
futon>Выходные данные были отображены на экране точно так же, как если бы они были введены в окне Telnet. Вернемся к программе Hunt:
Enter the command string you wish executed or [cr]> [cr]
[r]eset connection/[s]ynchronize/[n]one [r]> s
user have to type 8 chars and print 0 chars to synchronize
connection
CTRL-C to breakКогда пользователь нажимает клавишу Enter для завершения посылки символов от лица клиента, ему предоставляется возможность выбрать одну из перечисленных команд: сбросить соединение (прервать и возвратить его в исходное состояние), синхронизировать клиента и сервера или же оставить соединение десинхронизированным. В данном случае попытка выбора опции синхронизации соединения не увенчалась успехом, потому что в результате система была установлена в состояние ожидания. Складывалось впечатление, что ввод символов в окно Telnet не помог повторной синхронизации. Другие попытки повторной синхронизации оказались более успешными. Возможно, что на это оказали влияние такие факторы, как время ввода и длина введенной злоумышленником команды, надежность сети в этот момент (прежде всего имеется в виду потеря пакетов) и, конечно, реализация TCP.
Как правило, если злоумышленник захочет замести следы, он вводит свои команды с максимально возможной скоростью, а затем сразу же сбрасывает соединение. При этом он надеется на то, что легитимный пользователь клиента, если он там вообще есть, подумает, что это очередное малопонятное завершение соединения, и просто откроет новое окно, ничего не заподозрив.
Программа Hunt не лишена недостатков. Автор, работая с программой, обнаружил следующее. При работе со всеми просмотренными им интерактивными экранами, в которых для разрыва соединения предлагалось нажать комбинацию клавиш Ctrl + C, было обнаружено, что после нажатия клавиш Ctrl + C требовалось подождать некоторое время наблюдаемую машину, которая что-то передавала, прежде чем программа Hunt обращала внимание на нажатые клавиши. Например, во время наблюдения за Telnet-соединением были нажаты клавиши Ctrl + C, но ничего не произошло. Как только автор подключался к окну Telnet и нажимал клавишу, программа Hunt откликалась. По-видимому, программа Hunt во время мониторинга не следит постоянно за нажатием клавиш. Возможно, программа ожидает передаваемые по сети данные, не обращая внимания на нажатые в это время клавиши. И только после анализа поступивших данных она начинает проверять ввод оператором символов.
Пользовательский интерфейс немного некрасив и чересчур краток. Тем не менее в приложениях подобного типа этот недостаток легче всего устранить. Сетевая составляющая программы более сложна и поэтому, вероятно, является более интересной частью программы. Впрочем, интерфейс удобен, так что не все так плохо. Возможно, что кто-то из читателей этой книги заинтересован в данном вопросе и умеет программировать. Тогда он или она может связаться с разработчиком программы Hunt и, возможно, помочь в улучшении интерфейса.
Программа Ettercap
Программа Ettercap является универсальной программой, которая главным образом используется для снифинга, захвата и регистрации трафика в коммутируемых локальных сетях. Она поддерживает как активный, так и пассивный анализ различных протоколов. На момент написания книги в программе Ettercap была реализована поддержка соединений по протоколам SSH версии 1 (Secure Shell version 1, SSH 1 – защищенный протокол, обеспечивающий аутентификацию с помощью криптографических методов и шифрование всего потока данных) и SSL (Secure Sockets Layer, протокол защищенных сокетов). Программу Ettercap можно найти по адресу http://ettercap.sourceforge.net. Она запускается на таких операционных системах, как MAC OS X, Linux и BSD OS. У программы Ettercap четыре режима работы:
• IP. Режим фильтрации пакетов по адресам отправителя и получателя данных;
• MAC. Режим фильтрации пакетов по MAC-адресам;
• ARP. Режим использования перегрузки сети ARP-пакетами (ARP storm) для снифинга / перехвата соединений в коммутируемых локальных сетях (режим работает в полноправном дуплексном (одновременно двустороннем) режиме передачи данных;
• Общедоступный ARP. Режим использования перегрузки сети ARP пакетами в полудуплексном (поочередно двустороннем) режиме передачи данных для прослушивания одного хоста другим.
Давайте взглянем на использование программы Ettercap более внимательно. В приведенных ниже сценариях рассматривается простая коммутируемая сеть с трансляцией сетевых адресов NAT (Network Address Translation), IP-адресов по стандарту RFC1918. Это простая сеть класса SOHO (SOHO, Small Office/Home Office – класс программного обеспечения, предназначенного для малого или домашнего офиса) для домашнего пользования, которую сейчас используют многие небольшие или домашние офисы в основном из-за низкой цены и лавинообразной скорости распространения доступных для массового использования высокоскоростных кабельных модемов и цифровых абонентских линий DSL. Типичная реализация подобной сети выглядит примерно так, как показано на рис. 11.1. В этом примере 192.168.1.104 является адресом злоумышленника, перехватывающего сессию.
Рис. 11.1. Типичная схема небольших домашних / офисных сетейПри запуске программы Ettercap пользователю будет предъявлен экран со всеми хостами сети, подключенными к сегменту пользователя (см. рис. 11.2). С помощью клавиши Tab и клавиш с изображенными на них стрелками можно выбрать для эксперимента две машины. В верхнем левом углу пользователь должен увидеть выбранные и отмеченные им ранее IP-адреса источника и адресата информации.
Рис. 11.2. Хосты, доступные на подключенном сегментеДля того чтобы «испортить» кэш протокола ARP выбранных хостов, следует нажать клавишу «a», как это показано на рис. 11.3. Тогда на экране будет показан список всех соединений между двумя хостами, выбранными ранее (см. рис. 11.4).
Рис. 11.3. «Порча» кэша протокола ARPРис. 11.4. Доступные соединения между выбранными хостами
В рассматриваемом случае был выбран коммутатор A Linksys BEFSR81 и сетевой клиент, на машине которого запущен Windows 2000 Advanced Server. Для определения операционной системы узла с IP-адресом 192.168.1.100 была использована опция идентификации операционной системы. Обратите внимание на сгенерированное коммутатором (192.168.1.1) для Windows 2000 server (192.168.1.100) сообщение авторизованному диспетчеру простого протокола сетевого управления SNMP (SNMP – Simple Network Management Protocol, простой протокол сетевого управления. Протокол сетевого администрирования, широко используемый в настоящее время. Входит в стек протоколов TCP/IP) о запросе со стороны неавторизованного диспетчера. Обычно это является признаком использования хоста получателя сообщения (192.168.1.100) для управления коммутатором.
При нажатии клавиши h в любой момент времени работы программы выводится окно с краткой подсказкой. На рисунке 11.5 показана подсказка начальной страницы, на которой видны все хосты сегмента, а на рис. 11.6 – подсказка после выбора хоста.
Рис. 11.5. Окно подсказки начальной страницыРис. 11.6. Опции выбранного соединения
Помните, о чем говорилось в разделе, посвященном перехвату UDP-сессий? Из-за отсутствия в протоколе UDP-средств корректировки ошибок и гарантий доставки пакетов перехватить UDP-сессию гораздо проще, чем сессию протокола TCP. В этом заслуживающем особого внимания случае злоумышленник может нанести большой вред, просто перехватив SNMP-соединение. Вы спросите: почему? Ответ прост. Если у злоумышленника есть доступ к конфигурации коммутатора, то он обладает слишком большими возможность что-то сделать на этой сети или по отношению к ней. В данном случае коммутатор используется как шлюз для выхода в Интернет, так что дух захватывает от потенциального вреда, который может нанести злоумышленник. Но давайте перейдем с точки зрения практики к более интересным вещам.
Рассмотрим следующий сценарий. У злоумышленника есть доступ к запущенному на сервере протоколу FTP, но установить соединение он может только с хостом, IP-адрес которого равен 192.168.1.103. При запуске программы Ettercap злоумышленник видит порт 21 на сервере, который сначала активизируется, а затем переходит в состояние пассивного ожидания (silent state). Злоумышленник выбирает порт 21 и создает соединение между FTP-сервером и клиентом. После установки соединения у него появляется возможность по своему желанию перехватывать и модифицировать трафик сети или вставлять свои данные в передаваемую по сети информацию (см. рис. 11.7).
Рис. 11.7. Выбор SMB-соединенияНа рисунке приведен образец экранной формы, на которой представлен обзор трафика сети Microsoft от сетевого клиента к серверу. Порты 137 и 139 закреплены за сетевой базовой системой ввода-вывода Microsoft NetBIOS и сервисами сессии. Порт 445, так же как и порты 138 и 139 в предыдущих версиях Windows, используется для обеспечения работы сервисов каталога Microsoft (Microsoft directory services) и обеспечивает большинство функциональных возможностей для протокола SMB (SMB – Server Message Block, блок серверных сообщений. Протокол разработан Microsoft, Intel и IBM. Он определяет регламент совместного использования файлов компьютерами в сети и отвечает за структуризацию запросов и связь с различными операционными системами. Аналогичен протоколу NCP) поверх TCP/IP в Windows 2000. Недавно опубликованная по адресу www.newsbytes.com/news/01/169408.html статья раскрывает некоторые проблемы безопасности, которые может создать этот порт для типового оборудования, объединенного в сеть. Достаточно интересен тот факт, что даже после отключения NetBIOS по TCP/IP с помощью изменения конфигурации сетевой карты этот порт будет все еще обнаруживаться.
Допустим, злоумышленник выбирает порт 445, который в момент выбора находится в состоянии пассивного ожидания (silent state). Несомненно, что этому порту соответствует управляемое соединение между клиентом с IP-адресом 192.161.1.103 и сервером. При работе злоумышленника со списком файлов каталога или при другом варианте просмотра к нему из сети поступают SMB-сообщения, нагружая сеть и искажая передаваемые по ней данные в результате шумовых помех.
На рисунке 11.8 показано внутреннее представление части активного соединения клиента с совместно используемым сервером при использовании вывода в текстовом формате. При желании злоумышленник может записать эту информацию в журнал для дальнейшего использования.
Рис. 11.8. Внутренние представление SMB соединения