На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Основные способы использования служебных символов

Передача служебных и пользовательских данных в одном канале происходит не только в телефонных системах2. Рассмотрим протокол для обеспечения общения, который используется для UNIX-систем. Служба обмена сообщениями позволяет пользователям общаться между собой с помощью канала чата. Такая служба предна­значена для пользователей, которые работают с текстовым интерфейсом и подклю­чены к многопользовательской UNIX-системе. Проблема в том, что определенные последовательности символов интерпретируются терминалом как управляющие ко­ды. В зависимости от сервера, через который осуществляется общение, злоумыш­ленник может использовать любую строку символов в качестве темы при запросе на начало разговора. Пользователь терминала будет проинформирован о том, что кто-то хочет организовать разговор, и тема запроса будет выведена на экран. Таким об­разом на терминал в запросе на разговор могут быть переданы вредоносные управ­ляющие коды.
Подобная возможность привела к многочисленным атакам в университетских се­тях в 1980-х годах, когда студенты "бомбардировали" друг друга управляющими ко­дами, которые приводили к стиранию экрана или к тому, что атакуемый терминал начинал пищать.
Рассмотрим формат управляющих кодов для VT-терминала.
ESC[Xm
Здесь ESC — символ ESC, a X — это одно из чисел приведенного ниже списка.
5 мигание
7 негативное изображение
25 отключение мигания
27 отключение режима негативного изображения
30 черный передний фон
31 красный передний фон
32 зеленый передний фон
33 желтый передний фон
и т.д.
Эти коды используются для управления визуальным отображением символов.

Иногда возможны и более интересные хитрости, в зависимости от программного обеспечения, эмулирующего работу терминала. Такими хитростями могут быть пе­редача файлов или исполнение команд командным интерпретатором. Например, не­которые эмуляторы терминалов позволяют осуществить передачу файла с помощью следующих кодов (где <имя_файла> — имя интересующего файла, ESC — это сим­вол перехода, a CR — это символ возврата каретки).
Передать файл: ESC {Т<имя_файла>СК
Получить файл: ESC {К<имя_файла>СК
Используя эти шаблоны, злоумышленник способен организовать обмен файлами с атакуемой системой посредством уязвимого клиента или терминала.
Приведенные далее коды, которые используются программой Netterm, обладают даже более широкими возможностями (здесь <url> — это URL-адрес, a <cmd> — команда командного интерпретатора).
Отправить URL-адрес на клиентский Web-браузер: * [ [] <url>A [ [ О*
Запустить указанную команду с помощью командного интерпретатора:
Представим, что произойдет, когда злоумышленник отправит жертве сообщение, содержащее следующую строку.
Subject:  you are wasted! A[[]del /Q с:\Л[[1*
Вот так стирается диск С!
Злоумышленник может атаковать каждый терминал или клиентскую программу отдельно, в зависимости от поддерживаемых ими управляющих кодов. Однако неко­торые управляющие коды являются практически универсальными. В частности, это касается закодированных HTML-символов, приведенных ниже.
&lt HTML-символ  "меньше" '<'
&gt HTML-символ  "больше" '>'
&атр       HTML-символ амперсанд '&'
Также клиентские программы часто принимают строки кода на языке С. Чаще всего используются следующие управляющие коды.
\а С-  символ сигнала (BELL)
\b С-символ возврата на одну позицию (BACKSPASE)
\t С-символ табуляции (TAB)
\п С-символ возврата каретки (CARRIAGE-RETURN)
Управление принтерами
Конечно, терминальное программное обеспечение и клиентские программы от­нюдь не являются единственными приложениями, которые конвертируют данные в изображения или выполняют форматирование текста на экране. Рассмотрим скром­ный офисный принтер. Практический каждый принтер способен интерпретировать различный управляющий код.
Например, принтер компании HP воспринимает управляющий код на языке PCL (Printer Control Language), который передается через ТСР-порт 9100. Рассмотрим только небольшой фрагмент таблицы управляющих кодов PCL для принтеров HP (IB — это шестнадцатеричная форма символа ESC).
IB,  2А,  72,   #г 41 Начало растровой графики
IB,  2A,   72,   42 Конец растровой графики

IB,   26,   6С,   #,   41 Размер бумаги
1В,  45 PCL Сброс
Набор управляющих кодов для принтеров HP позволяет отправить строку сим­волов, которая будет выведена на жидкокристаллический экран на передней панели принтера. Представьте себе удивление ваших коллег, когда вы отправите на панель принтера свое сообщение. Для этого нужно воспользоваться ТСР-портом 9100. Можно, например, отправить следующее сообщение.
ESC%-12345X@PJL RDYMSG DISPLAY -  "Бросьте монетку!" ESC%-12345X
где ESC — это символ выхода (который в формате ASCII выглядит как OxlB). Сокращенное описание возможностей управления принтером HP доступно в архи­вах группы Phenoelit (http : //www. phenoelit. de).
Управляющий код для систем Linux
В некоторых случаях возможно непосредственное внесение символов в буфер клавиатуры терминала. Например, для систем под управлением Linux управляющий код \x9E\x9BC позволяет записать строку символов бс в буфер клавиатуры. Жерт­ва атаки, получив этот управляющий код и ничего не подозревая, будет выполнять команду б с. Таким образом хакер может запустить "троянскую" программу б с, ко­торую он ранее разместил на атакуемой системе.
Воспользуйтесь следующими командами, чтобы проверить возможность добав­ления символов в буфер клавиатуры.
perl -e   'print "\x9E\x9bc"1 echo -e "\033\132"
Обратите внимание, что на различных системах результаты выполнения этих ко­манд могут быть разными. Как правило, число или строка символов добавляется в буфер клавиатуры. Могут быть использованы несколько чисел, разделенных симво­лом точки с запятой.
1;0с 6с
б2;1;2;б;7;8;9с
и т.д.
Параллельное (с этим методом внесения данных) использование различных атак на Linux-системы позволяет узнать много интересной информации об атакуемом клиенте.
Фрагмент атаки: манипулирование терминальными устройствами
Чтобы символы были переданы на терминал другого пользователя, воспользуйтесь сле­дующей командной командного интерпретатора (UNIX).
echo -е »\033 \132' »/dev/ttyXX
где XX - номер терминала атакуемого пользователя. Эта команда позволяет внести символы на другой терминал (tty). Обратите внимание, что атака по этому методу будет успешной толь­ко тогда, когда для атакуемого устройства tty установлены неограниченные права на чтение (хотя и не всегда). Вот почему в UNIX-системах для программ write (1) и talk(l) должен устанавливаться бит SUID.

Внесение данных в буфер клавиатуры
Предположим, что описанное выше добавление строки б с действительно работа­ет, вследствие чего программа 6с будет запускать нужные команды от имени рабо­тающего пользователя. Однако атакуемый пользователь может заметить необычные данные в командной строке и удалить их до отправки своего ответа. Для того чтобы больше замаскировать добавленные данные, вполне возможно изменить цвет текста, что значительно повышает эффективность подобных атак. Приведенный ниже управляющий код позволяет отобразить добавленную строку черным цветом.
echo -e  "\033 [30m"
Объединив эту команду со строкой добавляемых данных получим следующий результат.
echo -е  "\033 [30т \033 \132"
И опять пользователь должен отправить ответ или нажать клавишу <Enter> по­сле того, как данные будут размещены в буфере клавиатуры, но теперь добавленную строку обнаружить сложнее.
Вместо программы 6с можно запустить более мощную программу, предостав­ляющую доступ к командному интерпретатору. Ниже приведен перечень соответст­вующих команд.
ср /bin/sh /tmp/sh chmod 4777 /tmp/sh
He забывайте сделать созданную программу исполняемой, как показано ниже.
chmod +x бс
Проблема возврата
Законопослушные инженеры попробовали решить проблему передачи служеб­ных и пользовательских данных в одном канале путем определения направления этой передачи. Как правило, пользовательские данные передаются от пользователя, а служебные в обратном направлении — от сервера. Вполне логично разрешить при­ем служебных данных только от сервера. Но из-за постоянной циркуляции данных со временем уже никто не может сказать, где в тот или иной момент находятся дан­ные и откуда они поступили.
Данные обычно поступают из любой точки и передаются в любом направлении без каких-либо предупреждений. Пользователь может отправить серверу сообщение, содержащее вредоносный JavaScript-код. Пять дней спустя администратор может проверить систему сервера, просмотреть это сообщение и тем самым запустить вре­доносный код, который отправит ответные данные. Таким образом система может принять данные, а ответное сообщение отправить позже. Это называют проблемой возврата.
В качестве хорошей иллюстрации этой проблемы можно назвать протокол для модемов Hayes. Если клиент отправляет строку символов +++athO через модем Hayes, последний воспринимает эту строку как специальный управляющий код "повесить трубку". Пользователь может применять эту команду для отключения от

сети. Например, если пользователь отправит на сервер текстовый файл или сообще­ние, в котором будет содержаться строка +++athO,TO как только эта строка данных пройдет через модем, последний разорвет соединение.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика