Как стать автором
Обновить

Комментарии 18

Приложения идентифицируются с помощью URL и скачиваются системой непосредственно перед их запуском. Такое архитектурное решение было выбрано для того, чтобы программные пакеты в Fuchsia всегда были в актуальном состоянии (наподобие веб-страниц).

Что-то у меня боязнь таких новаций.

Реклама должна быть свеженькой, а зонды максимально въедливыми. Не стоит забывать кто закладывал основы этой ОС.

Интересно насколько это ядро Zircon похоже на минималистичное L4.

В итоге по адресу assert_fail_msg вы записали указатель на функцию, которая не особо зависит от смещений. Интересно, как это можно эксплуатировать в реальных условиях, например запуск внешнего кода или процесса с привилегиями ядра? С учётом того, что файловая система ограничена и ядру напрямую видимо запрещено ходить в интернет. Просто ваш пример эксплуатации немного искусственный. Условно говоря, запись в лог ядра - это не эксплуатация, тем более что вызов assert_fail_msg вы не контролируете.

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

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

По адресу assert_fail_msg() я записал сам код хука руткита и затем данные для него (строку, которая распечатывается в ядерном журнале). В этом хуке можно читать и писать любую память, я знаю адрес его расположения.

Я думаю, это достаточная основа для написания любого руткита.

Спасибо, за статью! виден титанический труд)
В качестве первого эксперимента я перезаписал всю таблицу системных вызовов значением 0x41, получив управление в моей функции pwn()

Я правильно понял, это все сделано в условиях вашей «синтетической» уязвимости?

Спасибо! На самом деле, это было быстрое исследование. Всего полтора месяца, плюс две недели на написание статьи.

Я правильно понял, это все сделано в условиях вашей «синтетической» уязвимости?

Да, верно. Я решил не жадничать и оставить поиск 0-day на следующий раз.

Кстати, syzkaller для Fuchsia на днях починили: https://github.com/google/syzkaller/pull/3205

По словам архитектора безопасности Fuchsia OS, он бы атаковал систему так же, как и я

Но почему-то этого не сделал.

Не, все нормально :) Он здорово разбирается в теме и, как я понял, имеет опыт разработки эксплойтов.

А насколько много сейчас устройств на базе этой ОС? Вроде только Nest же, не?

Вот список железа, на котором работает Fuchsia:
https://fuchsia.dev/fuchsia-src/development/hardware

Там устройства:

  • Intel NUC,

  • Chromebooks,

  • Khadas VIM3 (на ARM Cortex-A73)

В продаже у Google сейчас два устройства, на которых установлена Fuchsia:

  • Nest Hub

  • Nest Hub Max

Ходят слухи про прототипы смартфонов под управлением Fuchsia:
https://screenrant.com/future-samsung-smartphones-might-ship-with-fuchsia-os-instead-of-android/

Вроде как ещё были слухи, что гугл планирует линуксовое ядро заменить на циркон/fuchsia.

В Fuchsia даже нет глобальной файловой системы. Вместо этого каждому компоненту выдается отдельное пространство для работы с файлами.

Cудя по документации, файловая система построена очень интересно. Извне – все readonly, интересные циклы общения между компонентами.

Возникает вопрос: насколько затратно выходит работа такой схемы?

Да, эксплуатация повреждения памяти в куче очень сильно зависит от поведения аллокатора.

Есть множество различных средств безопасности, которые противодействуют этому типу уязвимостей. Посмотрите мою карту средств защиты ядра Linux: https://github.com/a13xp0p0v/linux-kernel-defence-map

В ней даются связи между классами уязвимостей, методами их эксплуатации и средствами защиты.

После просмотра нескольких листингов на C++ идеология написания ядра Linux на чистом C больше не кажется архаичной.

Статья отличная, даже просто как тур по Zircon интересно читается!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий