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

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

Avatar for MOSDROID MOSDROID
December 02, 2017

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

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

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

Avatar for MOSDROID

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 приходит в жизнь разработчика вместе с доступом к системному разделу. Написание своих политик избавляет от необходимости снижать безопасность устройства.