Международная группа исследователей из Австрии, Нидерландов и США, информационной безопасности разработала атаку, позволяющую получить root-доступ к большому количеству Android-устройств, пишет издание Ars Tehnica. Для этого эксплуатируется техника Rowhammer, позволяющая осуществлять манипуляции с данными, хранящимися в ячейках памяти. При этом, ранее считалось, что атаки с использованием уязвимости Rowhammer имеют ограниченные перспективы реального применения — новый эксплойт демонстрирует, что ей подвержено гораздо больше устройств, чем предполагалось (включая и работающие на ARM-чипах).

Исследователи создали специальное приложение-эксплойт Drammer, которое не требует для работы никаких особенных прав и не использует никаких Android-уязвимостей. Атака осуществляется с помощью уязвимости аппаратного обеспечения — аналогично описанной техники Rowhammer он «простукивает» биты памяти устройства, изменяя важные данные. Это позволяет получать root-доступ к гаджетам производства компаний LG, Motorola, Samsung, OnePlus и, возможно, других вендоров.

В чем проблема


Техника, Rowhammer была описана в одном из наших предыдущих материалов:

Память DDR представляет собой массив разбитых на блоки строк и столбцов. К ним обращаются различные приложения и операционная система. В каждом крупном участке памяти предусмотрена своя «песочница», получать доступ к которой может лишь определенный процесс или приложение.

Если запустить софт, который будет сотни и тысячи раз за долю секунды обращаться к конкретным строкам в таких участках («простукивая» их, как молотком — отсюда и название hammering), то в следствии определенных физических явлений, это может повлиять на соседний участок памяти. Это может привести к изменению значений битов в нем с нулей на единицы и наоборот.

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

Один из создателей эксплойта для атак на Android-смартфоны, исследователь по имени Виктор ван дер Веен (Victor van der Veen): «До недавнего времени мы даже не могли подумать о подобных багах железа, и софт никогда не писали так, чтобы их учитывать. Теперь мы можем использовать эти дыры безопасности для того, чтобы взламывать смартфоны и планшеты с высоким уровнем надежности и без необходимости использования уязвимостей программного обеспечения. И нет никакой возможности быстро выпустить патч, решающий проблему».

На данный момент с помощью Drammer root-доступ удалось получить к следующим устройствам: Nexus 4, Nexus 5 и G4 от LG, Moto G модели от 2013 и 2014 годов от Motorola, Galaxy S4 и Galaxy S5 от Samsung, а также One от OnePlus. В некоторых случаях не всегда удавалось добиться должного постоянства результатов — к примеру, получить root-доступ удалось лишь для 12 из 15 моделей Nexus 5, в случае Galaxy S5 скомпрометирован был один из двух испытываемых смартфонов.

Исследователи до конца не понимают, почему так происходит, но предполагают, что дело может быть в разном «возрасте» тестируемых устройств — более активное или длительное использование может приводить к «износу» ячеек памяти. Кроме того, возможно, чипы памяти от определенных производителей более устойчивы к уязвимости Rowhammer, чем другие, а разные поколения одного и того же смартфона могут использовать разные чипы.

Демонстрация работы


Исследователи опубликовали два демонстрационных видео работы Drammer для получения root-доступа на LG Nexus 5. На видео смартфон подключен к компьютеру по USB, однако для осуществления атаки это не обязательно.

Представленный на первом видео смартфон работает под управлением Android 6.0.1 с установленными патчами безопасности от 5 октября. Начиная примерно с 0:15 приложение начинает «простукивать» память и между 0:30 и 0:50 эксплойт добавляет новые записи в таблицу страниц памяти. На отметке 0:50 Drammer получает root-доступ и открывает шелл, дающий полный контроль над устройством.



На втором видео Drammer используется в связке с кодом, эксплуатирующим уязвимость Stagefright — она остается неисправленной на многих устройствах. В итоге атака позволяет получить контроль над ядром ОС. На видео можно увидеть, что эксплоит Stagefright также открывает шелл, однако по-прежнему имеет лишь ограниченные права и, к примеру, не может получить доступ к SD-карточки смартфона. В свою очередь, запущенный позже Drammer получает root-доступ (начиная с 3:30 на видео).



Исследователи оповестили инженеров Google о своей работе еще в июле 2016 года, и компания присвоила уязвимости наивысший, критический статус. Кроме того, исследователи получили $4000 в рамках программы Bug Bounty. Компания оповестила своих партнеров-производителей в октябре, а выпуск обновлений планируется в ноябре. Тем не менее, разработчики предупреждают, что даже тогда hardware-уязвимость Rowhammer не будет окончательно закрыта, атакующим просто станет сложнее ее использовать.

Подробный доклад о проделанной работе будет представлен на конференции ACM Conference on Computer and Communications Security, которая проходит в эти дни в Вене. Детали обнаруженной уязвимости опубликованы на специальной информационной странице.
Поделиться с друзьями
-->

Комментарии (27)


  1. gvrax
    25.10.2016 15:16
    +2

    Если я правильно понимаю — физически — уязвимость может использоваться не только на андроид устройствах (точнее даже — не только на смартфонах и планшетах) но и на PC например и т.п. И операционной системой Андроид это также не ограничивается…


    1. molnij
      25.10.2016 15:26
      +1

      Да


  1. KonstantinSoloviov
    25.10.2016 16:41

    Нужен фоновый процесс которые обновляет критические области памяти. То есть простукивать ячейки с другой стороны.


    1. fishca
      25.10.2016 17:25

      В обратную сторону «выстукивать»?


      1. KonstantinSoloviov
        25.10.2016 18:27
        -1

        … для реализации техники Rowhammer нужно осуществить более 540 тыс. обращений к памяти за 64 миллисекунды, что усложняет взлом.

        Вот, так понятнее стало: память динамическая — 64 миллисекунды это очевидно период регенерации, то есть если между циклами регенерации успеть простукать бит он воспримется как родной. ECC поможет, но не спасет — парные ошибки обнаружены не будут. Выстукивать обратно — это фактически заниматься регенерацией причем очень неэффективно. Мда и правда проблема. Уменьшить период регенерации, скорее всего невозможно т.к. пресловутые 64 миллисекунды — это, вероятно, период распространения волны регенерации по всем сторокам памяти.
        Выход один — все время заниматься какой-нить ерундой, что бы отнимать время у зловреда и не давать простукать битики.


        1. ValdikSS
          25.10.2016 18:35

          У высокочастотной DDR4-памяти период регенерации 32 мс и ниже.


          1. KonstantinSoloviov
            25.10.2016 20:49

            Больше плотность (тонкий техпроцесс), меньшая емкость ячейки (против физики не попрешь) — необходимость более частой регенерации. Думаю, что «этот горький катаклизм который, я наблюдаю» (с) был известен инженерам еще при разработке чипа. Тут нужно деструктивное мышление, а созидатель думает — «ну кому в голову придет в голову перезаписывать ячейку 8.43 млн раз в секунду» (надеюсь правильно посчитал). Кстати, а что же кеш-память то? То есть L0-L1-L2 (что там у нас есть) с такой скоростью простреливаюся?


          1. KonstantinSoloviov
            25.10.2016 21:23
            +6

            Внезапно понял, что это напоминает из реальной жизни — бампинг!

            видео


    1. Goodkat
      25.10.2016 17:34

      На уровне OS можно считать чексуммы критических участков памяти.
      Но это же такой оверхед выйдет…


      1. Temtaime
        26.10.2016 01:31

        Это ошибка железа и должна быть исправлена в железе.


        1. Goodkat
          26.10.2016 01:59

          Как вы исправите её в железе-то? Чипы памяти в каждом устройстве поменяете?


      1. vikarti
        26.10.2016 07:46

        шифровать память? как на xbox360 где есть аппаратная поддержка этого


  1. Goodkat
    25.10.2016 17:32
    +1

    Да ладно приложение на Android, его ещё нужно установить и запустить.
    Rowhammer можно использовать даже на Javascript.

    Используйте ECC-память, может поможет :)


    1. datacompboy
      25.10.2016 17:43
      +1

      Помнится, показывали как в серверах rowhammer даже с ECC работал…


  1. TimsTims
    25.10.2016 17:55
    +1

    Правильно ли я понял, что если тупо насиловать память, то она рано или поздно даёт критический сдвиг битов, который значит root = 1?


    1. Assada
      25.10.2016 18:26
      -2

      Я как понял что таким простукиванием можно все что угодно сделать(настучать любую комбинацию). Хоть фильм записать на sd, хоть любые данные слить (именно простукиванием, а не через шел)


      1. Alexsandr_SE
        26.10.2016 00:33

        А как ПО узнает какие ячейки «простукивать»?


    1. smind
      27.10.2016 16:36

      Почему то, теперь анекдот про способ взлома сервера Пентагона, не кажется таким уж нереальным )

      На 74 357 181-й попытке- сервер согласился, что у него пароль «Мао Цзедун».


      1. ChALkeRx
        27.10.2016 17:14

        Да это со времён MySQL ещё не кажется, когда у них каждая 256-попытка входа с неправильным паролем проходила успешно.


  1. NeoCode
    25.10.2016 17:57

    А практическую пользу можно из этого извечь? То есть сделать рут на устройстве без перепрошивки и без риска поставить трояна?
    Исходники этой штуки открыты?


  1. kay
    25.10.2016 22:42

    Проще с dirtycow root получить.
    Бинарник уже скомпилировал. Осталось понять как shadow редактировать


  1. da411d
    26.10.2016 01:40

    А нельзя ограничить частоту доступа к памяти?


    1. petrovichtim
      26.10.2016 05:54

      Боюсь что так производительность её упадет


  1. mmMike
    26.10.2016 06:06
    +1

    В современных банковских смарткартах в OS предусмотрены методы для защиты от атак, основанных на порче памяти (ОЗУ и флеш).


    И в рекомендациях, например (и не только), к созданию безопасных JavaCard апплетов есть рекомендации типа:


    1. Не используйте boolean типы. Лучше всего использовать константы и сравнения с ними.
    2. Используйте контрольные коды/блоки критичных данных и всегда их проверяйте перед использование данных.

    Так что… проблема известная. Просто игнорируемая для устройств который не требуется сертификация и требования к безопасности считаются не существенными.


  1. Tihon_V
    26.10.2016 12:38

    т.е. теоретически можно эксплуатировать уязвимость и в контейнерах, чтобы получить доступ к памяти хостовой ОС?


    1. ChALkeRx
      27.10.2016 17:15

      Учтите, что на серверах обычно всё-таки ECC, а с ним такое не проходит.


  1. wwarlock
    02.11.2016 11:00

    Вчера четыре раза запускал drammer(каждый запуск примерно по 4000 секунд) на LG Nexus 5, но либо надо запускать еще больше раз, либо на этом телефоне железо хорошее, либо я уже успел поставить какие-то патчи безопасности.
    Взломать пока не вышло.