Серьезная уязвимость в загрузчике OnePlus 3/3T позволяет злоумышленникам переключать состояние SELinux с принудительного на разрешенное! Читайте дальше, чтобы узнать больше!
OnePlus 3 и OnePlus 3T являются одними из лучших телефонов, которые вы можете купить прямо сейчас. Хотя будущие флагманы 2017 года еще не представлены потребителям, в их отсутствие OnePlus 3/3T превосходит реальные показатели по производительности по доступной цене.
Но если быть честными в оценке устройства, мы должны признать, что, несмотря на все усилия OnePlus, OnePlus 3/3T не лишены недостатков. Например, ранее мы уже сообщали о таких проблемах безопасности, как OnePlus раскрыл данные IMEI по сети, когда вы проверяете наличие обновлений на своем телефоне. И теперь мы можем добавить в этот список еще одну проблему безопасности, имеющую потенциально более опасные последствия.
Уязвимость в загрузчике OnePlus 3/3T открывает двери для вредоносных атак. Как обнаружил Рои Хэй из исследовательской группы IBM X-Force по безопасности приложений и
SELinuxили Security-Enhanced Linux — это модуль безопасности ядра Linux, который обеспечивает доступ и управление политиками безопасности. SELinux был представлен в Android начиная с Android 4.3 и был настроен на обеспечение соблюдения режим по умолчанию, начиная с Android 4.4. Эта система обязательного контроля доступа помогает обеспечить соблюдение существующих прав контроля доступа и пытается предотвратить атаки с целью повышения привилегий. Это служит препятствием для несанкционированного контроля над вашим устройством, например, приложения или уязвимости, направленной на злонамеренное получение root-доступа. Установка SELinux в обеспечение соблюдения по умолчанию на Android служит первым шагом для защиты обычных пользователей от таких атак.
Эту уязвимость довольно легко эксплуатировать — на самом деле, похоже, что со стороны OnePlus это серьезная ошибка, а не то, как вы могли бы представить себе типичный эксплойт. Сначала злоумышленник перезагружает OnePlus 3/3T в режим «быстрой загрузки» — если у вас есть физический доступ, просто нажмите кнопку увеличения громкости во время загрузки, но если у вас этого нет, вы можете ввести команду ADB. adb reboot bootloader
к устройству. Режим быстрой загрузки на устройстве предоставляет интерфейс USB, который не должен допускать выполнения каких-либо чувствительных к безопасности команд на заблокированных устройствах. Но на OnePlus 3/3T просто выдавая fastboot oem selinux permissive
команда через интерфейс fastboot переключает режим SELinux с обеспечение соблюдения к Разрешительный.
fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s...
OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $
Проблема еще больше усложняется тем, что в OnePlus 3 и 3T на экране «Об экране» нет записи, в которой упоминалось бы текущее состояние SELinux устройства. Жертва по-прежнему будет не обращать внимания на скомпрометированное состояние своего устройства, если она не станет свидетелем активного использования эксплойта. Отсутствие записи о состоянии SELinux на экране «Об экране» отсутствует как в открытых бета-версиях на базе Android 6.0, так и в официальных прошивках Android 7.0.
Существует несколько приложений для переключения состояния SELinux на Permissive, например: SELinuxModeChanger приложение. Переключение SELinux с помощью этого метода не позволяет сохранить состояние после перезагрузки. Хотя, ты можешь использовать сценарии поддерживать Разрешительный Состояние SELinux при аппаратной перезагрузке. Оба этих метода требуют root-доступа, а это означает, что пользователь уже знает о рисках, которым он подвергается. Но основная разница с изменением режима SELinux на Разрешительный использование указанной выше уязвимости заключается в том, что она не только сохраняется после жесткой перезагрузки, оно так и делает без необходимости root-доступа.
На сегодняшний день не существует никаких средств защиты от этой уязвимости.
ОБНОВЛЯТЬ:
Мы обратились к Султанхда, одного из самых известных разработчиков пользовательских ПЗУ для устройств OnePlus, чтобы узнать, сможет ли он помочь нам узнать больше об этой проблеме. Он быстро покопался в коде, чтобы найти исходный код, и вот что он нашел:
То, как «fastboot oem selinux
- Пользователи могут заставить загрузчик передавать флаг, который обычно разрешает selinux для сборки ПЗУ для разработки/отладки.
- OnePlus изменил инициализацию Android, чтобы учитывать флаг «androidboot.selinux» даже для производственных сборок ПЗУ.
Вот где инициализация Android настроена на игнорирование флага «androidboot.selinux» для производственных сборок: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7
Флаг ALLOW_DISABLE_SELINUX в исходном коде имеет значение 1 только для пользовательских отладочных и инженерных сборок.
(Это не влияет на мое ПЗУ, поскольку я собираю свое ПЗУ в производственном (пользовательском) режиме)
Таким образом, «androidboot.selinux» просто игнорируется в моем ПЗУ, «fastboot oem selinux»
- Отредактируйте загрузчик в шестнадцатеричном формате, чтобы изменить все экземпляры строки «selinux» на что-то другое (например, «sclinux»), чтобы флаг не распознавался при инициализации Android.
- Отредактируйте шестнадцатеричный двоичный файл инициализации Android в OxygenOS, чтобы заменить все экземпляры «androidboot.selinux» на что-то другое (например, «androidboot.sclinux»), чтобы инициализация Android не распознавала Флаг androidboot.selinux
- Добавьте хак в драйвер командной строки ядра, аналогичный моему обходу SafetyNet, чтобы скрыть флаг «androidboot.selinux» из инициализации Android.
Мы хотели бы поблагодарить Султанкса за его время и усилия, которые помогли нам разобраться в том, что происходит за кулисами. Мы также обратились к OnePlus, который знает о ситуации и изучает этот вопрос.
Мы надеемся, что OnePlus публично признает наличие серьезной проблемы и прозрачен в своих планах по ее устранению.