The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Новая техника обхода защиты ASLR, реализуемая на JavaScript

17.02.2017 22:11

Группа исследователей из Амстердамского свободного университета разработала (pdf 1, pdf 2) новую технику обхода механизма защиты ASLR (Address space layout randomization), позволяющую определить раскладку памяти процесса. Особенностью предложенного метода является то, что он может быть реализован на языке JavaScript, что значительно упрощает обход дополнительных уровней защиты при эксплуатации уязвимостей в web-браузерах.

По заявлению исследователей предложенный метод универсален и надёжно работает в Chrome и Firefox как минимум на 22 микроархитектурах, включая процессоры Intel Xeon, Atom, Core, Celeron (CVE-2017-5925), AMD (CVE-2017-5926), Allwinner, Samsung Exynos, NVIDIA Tegra (CVE-2017-5927 для ARM) и др. Если в обычных условиях для успешной эксплуатации новой уязвимости в Firefox требуется наличие ещё одной уязвимости, которая позволит получить сведения о ASLR-смещениях в адресном пространстве процесса, то предложенная техника позволяет выявить эти смещения путём выполнения скрипта на языке JavaScript.

Метод является разновидностью атак по сторонним каналам (side-channel attacks) и основан на косвенном определении адресов к которым ранее были обращения при обходе таблиц страниц памяти процессорным блоком MMU (Memory Management Unit) в ходе трансляции адресов виртуальной памяти в адреса физической памяти. Так как кэш CPU общий и в нём отражается как активность приложения, так и активность блока MMU, то путём оценки различий во времени доступа к данным до и после сброса кэша (разновидность атаки "EVICT+TIME") можно с высокой вероятностью подобрать адрес, по которому было обращение.

Проблема усугубляется тем, что атака основывается на аппаратных особенностях кэширования адресов в современных процессорах и с ней трудно бороться на программном уровне без отключения кэша или без выполнения манипуляций, снижающих производительность. Реализация защиты на аппаратном уровне также затруднена, так как требует создания отдельного кэша для таблиц страниц памяти.

На GitHub размещена эталонная реализация метода на языке Си. Вариант на JavaScript не опубликован с целью предотвращения появления вредоносной активности до обеспечения защиты в браузерах. Обходным путём защиты в браузерах может стать урезание доступа к высокоточному таймеру. В качестве противодействия некоторым видам атак производители браузеров ранее уже ограничили точность вызова performance.now(), но авторы исследования обошли данное ограничение через использование двух таймеров в разных потоках, совокупной точности которых оказалось достаточно.

Для полноценной защиты производителям браузеров рекомендовано переработать метод хранения JavaScript-объектов в памяти, исключив их последовательное размещение в виртуальной памяти при генерации кода JIT-компилятором. В качестве временной меры рекомендовано внести незначительные случайные смещения в работу каждого экземпляра высокоточного таймера и прекратить совместное использование значений таймера в разных потоках JavaScript. Разработчикам ОС для повышения стойкости ASLR к атаке рекомендовано увеличить уровень энтропии ASLR с 24-28 бит до 35 бит.



  1. Главная ссылка к новости (https://arstechnica.com/securi...)
  2. OpenNews: Проект grsecurity опубликовал реализацию механизма защиты RAP для ядра Linux
  3. OpenNews: Выявлен метод обхода защиты ASLR на процессорах Intel
  4. OpenNews: Атака через JavaScript по определению содержимого L3-кэша CPU
  5. OpenNews: Разработан метод атаки на уязвимость в DRAM-памяти с использованием JavaScript
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/46062-aslr
Ключевые слова: aslr, security, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (41) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, LinuxID (ok), 22:36, 17/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    И чем это грозит?
     
     
  • 2.2, Аноним (-), 22:40, 17/02/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    https://ru.wikipedia.org/wiki/ASLR
     
  • 2.3, Аноним (-), 23:13, 17/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Грозит большими проблемами с безопасностью из-за качества кода. Если рандомизации адресов не будет, открывается отлдскульный полигон для не менее олдскульных эксплоитов.
     
  • 2.10, Crazy Alex (ok), 00:09, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Если нет дыр - ничем
     
     
  • 3.19, Аноним (-), 07:41, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >нет дыр
    >делает вид, что программист

    Ясно.

     
     
  • 4.42, Crazy Alex (ok), 15:09, 19/02/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вот как раз программисту понятно, что если в системе создавать дыры вроде браузера с исполняемым без спросу непонятно каким кодом - то ASLR не поможет. И песочницы не помогут. Сложность уж больно большая.

    Если же вести себя вменяемо - ставить код из доверенных источников, обновляться и вообще включать голову - то ASLR нужно примерно так же, как selinux какой-нибудь - то есть если нет требований повышенной безопасности - на фиг не нужно.

     
  • 2.44, Аноним (-), 07:01, 20/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Дает возможность использовать другие дыры
     

  • 1.4, An (??), 23:32, 17/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну дела
     
  • 1.5, Аноним (-), 23:35, 17/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –13 +/
    я же говорил яваскрипт не нужен вспомнити npm left pad. А еще вспомнити 0.1 + 0.2 = .300000000000004 а еще вспомнити Nan =! Nan
     
     
  • 2.16, анон (?), 03:28, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +8 +/
    > А еще вспомнити 0.1 + 0.2 = .300000000000004

    Так и запишем, что анон не в курсе про IEEE 754

     
     
  • 3.28, saasd (?), 15:04, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Nan =! Nan

    Еще про этот пункт забыли упомянуть в тот-же стандарт.

     
  • 2.23, Аноним (-), 13:12, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тебе ещё не надоело в каждую тему про JS отписываться? Слишком толсто
     
  • 2.24, Аноним (-), 14:19, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Ну ещё про грамматику нужно вспонить.
     
     
  • 3.47, Аноним (-), 10:20, 20/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вспонить от слова пони?
     
  • 2.35, Аноним (-), 20:16, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > вспомнити

    Ты должен мне новые глаза.

     

  • 1.7, Аноним (-), 00:00, 18/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    JS добрался и до кэша процессора? Мир перевернулся.
     
  • 1.9, Не удивительно (?), 00:04, 18/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > увеличить уровень энтропии ASLR с 24-28 бит до 35 бит

    Чем это поможет? Только время увеличить и задержки.

     
  • 1.11, Crazy Alex (ok), 00:10, 18/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Вот интерсно - на кой JS вообще доступ к высокоточному таймру?
     
     
  • 2.12, Аноним (-), 00:19, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Вот интерсно - на кой JS вообще доступ к высокоточному таймру?

    time.ru?

     
  • 2.27, qqq (??), 14:59, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    для игорей. Ну и node.js хочет сто пудов
     
     
  • 3.29, Crazy Alex (??), 16:58, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    хм, судя по стековерфлоу в js (во всяком случае, в браузерах) таймер миллисекундный, и то точность не ахти. удивительно, что его хватает.
     
  • 3.36, НяшМяш (ok), 23:30, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Для игорей просто просится requestAnimationFrame
     

  • 1.18, linuxquestions.ru (?), 06:46, 18/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Получается, что любой браузер (и не только) потенциально уязвим и проблема лежит в самом принципе работы процессора и ОЗУ.
    Выходит даже пресловутый Servo не сможет помочь в сложившейся ситуации.
     
     
  • 2.21, Аноним (-), 11:13, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    У пресловутого серво, внезапно, тот же жаваскрипт движок что в лисе.
     
  • 2.25, Анонимный Алкоголик (??), 14:22, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Получается, что любой браузер (и не только) потенциально уязвим и проблема лежит
    > в самом принципе работы процессора и ОЗУ.
    > Выходит даже пресловутый Servo не сможет помочь в сложившейся ситуации.

    Нет.
    Получается в данном случае только то, что дырявый браузер остаётся дырой не смотря на ASLR. То есть ASLR как метод закрытия дыр (в дырявом ПО)  не вполне удовлетворительно. Что впрочем и так заметно...

     
     
  • 3.33, linuxquestions.ru (ok), 19:15, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Мне кажется это логичным. Если в коде самого браузера есть дыры, то тут ничего не поможет.
    Я думаю, что в таком случае нужна изоляция памяти процессов на аппаратном уровне. Т.е когда процесс в принципе не может обратиться к памяти, которая ему не принадлежит. Но в таком случае встанет проблема наличия разделяемой памяти. Выходит замкнутый круг.
    Поэтому надо писать код браузеров/JS движков правильно.
     
     
  • 4.40, Crazy Alex (ok), 14:57, 19/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Еадо минимизировать выполнение стороннего кода без запроса. Гонять данные, а программ устанавливать явно, из доверенных источников. Тогда ASLR будет на месте (если уж вообще его хочется) - как оборона от случайных уязвимостей в локальном коде, когда ему передают специфически созданные данные.

    А идея "мы создадим песочницу и будем там выполнять всё, что из сети прилетело" совершенно безумна. Что и демонстрируют каждый раз очередные дыры.

     

  • 1.20, Черный Властелин (?), 10:26, 18/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Продолжая мысль rust ненужен, js - среда исполнения эксплойтов
     
     
  • 2.38, Аноним (-), 00:05, 19/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Новость не читай, сразу комментируй!

    >> На GitHub размещена эталонная реализация метода на языке Си.

     
     
  • 3.39, Аноним (-), 11:41, 19/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вот только Сишный код надо как-то предварительно доставить на компьютер пользователя, а JS загружается фоном автоматически при просмотре картинок с котятками в интернетах.
     
     
  • 4.48, Аноним (-), 23:17, 20/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А толку? Без актуальной уязвимости, находясь в песочнице браузера, данные из памяти не прочтешь. Читай текст новости внимательней - на JS только техника обхода ASLR и все.
     
  • 2.41, Crazy Alex (ok), 15:02, 19/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну это, в общем, и так не первый год понятно - достаточно только посмотреть на то количество дыр, которое обнаруживалось в браузерах, и сравнить с количеством дыр в любом другом сравнимом по масштабам сетевом софте.
     

  • 1.22, Аноним (-), 12:50, 18/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Когда-то Крис Касперски смог хакнуть интеловский процессор кодом на жабоскрипте. История повторяется.
     
     
  • 2.30, Crazy Alex (??), 17:00, 18/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    там, вроде, тёмная история - то ли смог, то ли сбрехал...
     

  • 1.34, Не удивительно (?), 19:59, 18/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    SELinux,
    ASLR,

    Скрытые АНБ разработки радует глаз.

     
  • 1.37, НяшМяш (ok), 23:32, 18/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    "Взлом через кэш процессора на JavaScript через браузер! Скоро форт Нокс ломанут пластмассовым совочком и игрушечным экскаватором из песочницы в Москве." (с) хабра.
     
  • 1.43, Аноним (-), 18:53, 19/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Коммент к видео It is sad that every so many so-called researchers need to po... большой текст свёрнут, показать
     
     
  • 2.51, антоний (?), 23:41, 21/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    топ кек, никому и не нужны full administrative права доступа. Всего то украдут ваши пароли.
     

  • 1.46, vitektm (?), 09:41, 20/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все более актуальным становится отключение js по дефолту.
    (с включением на доверенных сайтах)
     
     
  • 2.49, Аноним (-), 23:19, 20/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А толку? Я смотрю, никто в текст новости не вчитывается...
     

  • 1.50, Аноним (-), 10:18, 21/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ребята суть не в JS, и даже не в C, суть в голимости ASLR
     
     
  • 2.52, Led (ok), 00:35, 22/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Ребята суть не в JS, и даже не в C, суть в
    > голимости ASLR

    Не, ребята в памперсы суть.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру