Хоча питання давнє, воно все ще з’являється вгорі питань без відповіді (мої теги) . Тому я думаю, що я повинен відповісти на це :)
ПІДТРИМКА AOSP ДЛЯ МОЖЛИВОСТІ:
Питання стосується конкретно пристроїв Google, я ніколи не використовував пристрій Google. Однак я можу сказати напевно, що можливості Linux (процес) повинні бути включені на більшості пристроїв (якщо не на всіх), які працюють так само низько, як Android 1.6. Посилання знаходиться в init
і system_server
, як дуже основних компонентів AOSP. Наприклад, в Android 4.2 installd
- ще один основний компонент - був створений для роботи зі зниженими можливостями.
Можливості файлової системи були одним з головних поліпшень безпеки в Android 4.3, який видаляв set-uid
/ використовував set-gid
такі файли, як run-as
встановлення можливостей файлів. Це спричинило революційні зміни у вкоріненому шляху Android.
Підтримка можливостей Ambient була додана в Android 8, що відмовляє від використання можливостей файлів:
Файлові можливості, у свою чергу, становлять ризик для безпеки, оскільки будь-який процес, що виконує файл із можливостями файлу, зможе отримати ці можливості.
Багато init
послуг залежать від них, наприклад storaged
, зокрема мої власні sshd
та dnscrypt-proxy
послуги.
ПІДТРИМКА КЕРНЕЛУ ДЛЯ МОЖЛИВОСТІ:
Перехід до частини ядра, створення ядра без можливостей не є обов’язковим:
Від ядра 2.5.27 до ядра 2.6.26, можливості були необов’язковим компонентом ядра, і їх можна було включити / відключити за допомогою параметра конфігурації ядра CONFIG_SECURITY_CAPABILITIES .
І:
У ядрах до Linux 2.6.33 можливості файлів були необов'язковою функцією, яку можна налаштувати за допомогою параметра CONFIG_SECURITY_FILE_CAPABILITIES . З моменту Linux 2.6.33 параметр конфігурації видалено, а можливості файлів завжди є частиною ядра.
Найдавніша поширена версія ядра в сховищах Android - 2.6.39, яка також підтримує можливості файлів.
Підтримка можливостей файлової системи на стороні ядра, мабуть, була відкладена у деяких виробників оригіналу, але вони повинні були переключитися, оскільки в іншому випадку функціональність порушиться. Наприклад surfaceflinger
(Android) поверхневий композитор ) не працюватиме без можливостей файлів, оскільки Android 7.1.
Магістраль Linux ядро 4.3 було виправлено в в Sep'15 для навколишнього середовища (процес) можливостей, портований для Android ядра 3.18 і 4.1 в 2016 році Таким чином , вони обов'язково частина ядра.
ВИСНОВОК:
У дистрибутивах Linux дуже небагато програм використовують можливості Linux. Хоча є pam_cap
, в основному (або все?) Дистрибутиви до сих пір використовують set-uid
на su
, sudo
, ping
, mount
, passwd
і так далі. Але можливості Android глибоко інтегровані в рамкові та основні сервіси. Для їх видалення знадобиться редагування сотень або може бути тисячі рядків у AOSP та джерелі ядра. Немає сенсу, що OEM (зокрема Google, який розробив AOSP і модифікував ядро Linux для Android) не використовував цю функцію безкоштовного захисту, коли вона доступна в ядрі Android. Це чиста функція, пов’язана з ОС, не вимагає додаткової апаратної підтримки. Отже, будь-який телефон будь-якого виробника повинен підтримувати можливості.
ЗАПИТАННЯ:
Чи зможу я встановити можливості на виконувані файли, не змінюючи початковий двійковий код ядра?
Так, ти повинен бути.
Необхідні речі - це інструменти для встановлення кришок ...
Я використовую capsh
, getcap
, setcap
, getpcaps
з libcap
і netcap
, pscap
з libcap-ng
без будь - яких проблем. Але я віддаю перевагу можливостям Ambient, їх легко налаштувати і не залежать від будь-яких функцій файлової системи, таких як Extended Attributes, як у випадку з можливостями файлів. Ви також можете використовувати listxattr
, та getxattr
, setxattr
і removexattr
інструменти, xattr_syscall_wrapper
щоб безпосередньо маніпулювати security.capability
чи будь-яким іншим XATTR.
З вашого коментаря:
Щойно я помітив, що /system/bin/ping
команда відсутня setuid
на моєму реальному пристрої Samsung, що говоритьCAP_NET_RAW
Android ping ні має, set-uid
ні CAP_NET_RAW
. Він створює спеціальний не-RAW- сокет, IPPROTO_ICMP
який, на відміну від IPPROTO_RAW
нього, не вимагає ніяких привілеїв.
ДОДАТКОВІ ЛІТЕРАТУРИ:
На додаток до 10+ посилань, наведених вище, ось кілька інших частин коду AOSP, що підтримують та використовують можливості Linux:
- Основні компоненти: Bionic
libc
, init
, trusty
(ОС)
- Зовнішні компоненти:
libcap
,libcap-ng
- Демони / послуги:
zygote
(роздвоєні додатки і system_server
), hostapd
, wpa_supplicant
, dnsmasq
, logd
, netd
( NetLink
менеджер, приватний DNS), debuggerd
(тест), sdcard
демон, performanced
, incidentd
, mtpd
, traced_probes
(Perfetto), racoon
(IPSec), wificond
ряд HAL демонів , включаючиrild
.
- Виконувані:
reboot
(INIT), dumpstate
, tcpdump
, strace
, iputils
( ping
, і traceroute
т.д.)
- Minijail: спеціальний інструмент і бібліотека для пісочниці, яка обертається навколо можливостей.
adbd
використовує цю бібліотеку для скасування привілеїв.
- SELinux використовує
capability
клас для надання / заборони можливостей доменам.
Звідси робиться висновок, що Android сильно залежить від можливостей Linux, це не мало використовувана функція.
ПОВ'ЯЗАНІ: