Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как устроен SELinux в Android

MOSDROID
December 02, 2017

Как устроен SELinux в Android

Виктор Лапин @ Адвантум on MOSDROID #4 – watch video http://bit.ly/2jd9SGW

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

MOSDROID

December 02, 2017
Tweet

More Decks by MOSDROID

Other Decks in Programming

Transcript

  1. Как устроен SELinux в Android Пишем политику безопасности для системного

    приложения Виктор Лапин Руководитель группы разработки
 Компания Адвантум
 mail: [email protected]
  2. как устроен механизм безопасности SELinux, каким образом с ним может

    взаимодействовать разработчик, к а к п и с а т ь с в о и п о л и т и к и безопасности и как научить ОС использовать свою политику для отдельно взятого системного приложения. Описание доклада Я расскажу:
  3. О к о н ч и л у н и

    в е р с и т е т прикладной биотехнологии ( М Г У П Б ) , о к о л о 1 0 л е т п р о р а б о т а л в о в с я ч е с к о м энтерпрайзе, с годами все больше начал уходить в Android. Участвую в разработке двух кастомных прошивок Android на базе AOSP/CAF. Кто я ? Виктор Лапин Руководитель группы разработки

  4. Кто и зачем разработал SELinux В 2012 году представлена реализация

    для Android Открытый исходный код SELinux (англ. Security-Enhanced L i n u x — L i n u x с у л у ч ш е н н о й безопасностью) — реализация системы принудительного контроля доступа, которая может работать п а р а л л е л ь н о с классической системой контроля доступа. Разработан Агентством Национальной Безопасности США для защиты правительственных Unix-серверов. В 2013 году первое устройство с поддержкой SELinux (Galaxy S4)
  5. ИСТОРИЯ ПОЯВЛЕНИЯ В ANDROID Android до 4.2.2 N O N

    E 3 РЕЖИМА PERMI SSI VE ENFORCING Android 4.3 Android 4.4 и выше
  6. и почему разработчики приложений обычно об этом не задумываются КАК

    ЭТО РАБОТАЕТ? Процесс Действие SELinux (MAC) Да Нет Успех Log: ”avc: denied” Linux (DAC) root?
  7. u:r:untrusted_app:s0 u – user. Константа, не используется. r (или object_r)

    – role. Константа, не используется. untrusted_app – type. Имя контекста безопасности. s0 – level. Константа, не используется. Метка безопасности
  8. 1. system/sepolicy (ранее external/sepolicy) – политики уровня системы. 2. device/<vendor>/<codename>/sepolicy

    – политики уровня устройства. 3. vendor/<ROM>/sepolicy – политики уровня кастомной прошивки. Откуда брать исходники?
  9. Neverallow // Запретить загрузку политик уровня ядра всем доменам кроме

    init neverallow { domain -init } kernel:security load_policy; // Запретить исполнение любых файлов кроме системных и исполняемых всем доменам кроме указанных neverallow { domain -appdomain -autoplay_app -dumpstate -shell -audioserver -system_server -zygote } { file_type -system_file -exec_type -postinstall_file }:file execute;
  10. /sepolicy – скомпилированный файл политик уровня ядра. /file_contexts – перечень

    меток безопасности для файлов. /property_contexts – перечень меток безопасности для системных свойств. /service_contexts – перечень меток безопасности для сервисов. /system/etc/security/mac_permissions.xml – присвоение пакетам приложений меток seinfo. /seapp_contexts – перечень меток безопасности приложений на основе seinfo. Результаты сборки
  11. 1. system/sepolicy/global_macros – базовые макросы вроде предоставления доступа к файлам.

    2. system/sepolicy/te_macros – макросы для взаимодействия с доменами и свойствами. Макросы
  12. Dolby Atmos Пишем свой домен на примере приложения type dolby,

    domain; app_domain(dolby) # app sandbox type dolby_data_file, file_type, data_file_type; set_prop(dolby, default_prop) ! neverallow! set_prop(dolby, system_prop) set_prop(dolby, audio_prop) set_prop(dolby, bluetooth_prop) allow dolby accessibility_service:service_manager find; allow dolby activity_service:service_manager find; allow dolby audio_service:service_manager find; allow dolby audioserver_service:service_manager find; allow dolby connectivity_service:service_manager find; allow dolby display_service:service_manager find; allow dolby graphicsstats_service:service_manager find; allow dolby input_method_service:service_manager find; allow dolby input_service:service_manager find; allow dolby media_session_service:service_manager find; allow dolby network_management_service:service_manager find; allow dolby power_service:service_manager find; allow dolby surfaceflinger_service:service_manager find; # access to app sandbox allow dolby dolby_data_file:dir create_dir_perms; allow dolby dolby_data_file:file create_file_perms; # allow access to the files by other domains allow domain dolby_data_file:dir r_dir_perms; allow domain dolby_data_file:file r_file_perms;
  13. mac_permissions.xml: <signer signature="@RELEASE" > <package name="com.atmos"> <seinfo value="dolby_app" /> </package>

    </signer> seapp_contexts: user=_app seinfo=dolby_app domain=dolby type=dolby_data_file Dolby Atmos Учим систему использовать написанный домен
  14. init.yaosp.rc: service arise /system/su.d/ arisesound_setprop user root group root system

    seclabel u:r:arise:s0 oneshot disabled A.R.I.S.E. Учим систему использовать написанный домен
  15. 1. Разработчик, не верь Logcat! 2. Разработчик, верь Dmesg! 3.

    Разработчик, не используй audit2allow! Отладка
  16. Sepolicy Отладка политик avc: denied { read } for pid=4303

    comm=“android.taskerm” name=“devices” dev=“sysfs” ino=7192 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0 allow untrusted_app sysfs:dir read;
  17. ИТОГО SELinux не замещает Unix-разрешения, а работает вместе с ними.

    SELinux не обходится root-доступом без доработки напильником. SELinux приходит в жизнь разработчика вместе с доступом к системному разделу. Написание своих политик избавляет от необходимости снижать безопасность устройства.