질문은 오래되었지만 계속 위에 표시됩니다. 답변되지 않은 (내 태그) 질문. 그래서 나는 이것에 대답해야한다고 생각합니다 :)
기능에 대한 AOSP의 지원 :
질문은 Google 기기에 관한 것입니다. Google 기기를 사용한 적이 없습니다. 그러나 확실히 말할 수있는 것은 Linux (프로세스) 기능이 Android 1.6만큼 낮게 실행되는 대부분의 장치 (모두는 아님)에서 활성화되어 있어야한다는 것입니다. AOSP의 주요 구성 요소 인 init
및 system_server
에 모두 참조가 있습니다. 예를 들어 Android 4.2에서는 installd
또 다른 핵심 구성 요소 인 기능이 삭제 된 상태로 실행되었습니다.
파일 시스템 기능 은 Android 4.3 의 주요 보안 향상 기능 중 하나로 파일 기능을 설정하는 등의 이진 파일 을 제거 set-uid
하거나 제거 했습니다. 이로 인해 안드로이드의 루팅 여정 에 혁신적인 변화 가 일어 났습니다.set-gid
run-as
파일 기능 사용 을 권장하지 않는 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부터 구성 옵션이 제거되었으며 파일 기능은 항상 커널의 일부입니다.
안드로이드 저장소에서 가장 오래된 일반적인 커널 버전은 2.6.39입니다 포함 너무 파일 기능을 지원합니다.
커널 측의 파일 시스템 기능에 대한 지원 은 일부 OEM에서 지연 되었지만 기능이 손상 될 수 있기 때문에 전환해야했습니다. 예를 들어 surfaceflinger
(Android의 Surface Composer )는 Android 7.1 이후 파일 기능이 없으면 작동하지 않습니다.
Mainline Linux kernel 4.3은 2016 년 9 월 15 일 Ambient (프로세스) 기능을 위해 패치 되어 2016 년에 Android 커널 3.18 및 4.1로 백 포트 되었습니다. 따라서 커널의 일부입니다.
결론:
Linux 배포판에서 아주 적은 프로그램이 Linux 기능을 사용합니다. 가 있지만 pam_cap
대부분 (또는 모든?) 배포판은 여전히 사용 set-uid
에 su
, sudo
, ping
, mount
, passwd
등. 그러나 Android 기능은 프레임 워크 및 핵심 서비스에 깊이 통합되어 있습니다. 그것들을 제거하려면 AOSP와 커널 소스에서 수백 줄을 편집하거나 수천 줄이 필요할 수 있습니다. OEM (특히 AOSP를 개발하고 Android 용 Linux 커널을 수정 한 Google)이 Android 커널에서 쉽게 사용할 수있는 경우이 무료 보안 기능 을 사용하지 않는 것은 이치에 맞지 않습니다 . 순수한 OS 관련 기능이며 추가 하드웨어 지원이 필요하지 않습니다. 따라서 모든 제조업체의 모든 전화는 기능을 지원해야합니다.
질문 :
원래 커널 바이너리를 변경하지 않고 실행 파일에서 기능을 설정할 수 있습니까?
그렇습니다.
필요한 것은 뚜껑을 설정하기위한 도구입니다 ...
내가 사용하고 capsh
, getcap
, setcap
, getpcaps
에서 libcap
와 netcap
, pscap
에서 libcap-ng
아무 문제없이. 그러나 Ambient 기능을 선호합니다. 이러한 기능은 구성하기 쉽고 파일 기능의 경우와 같이 확장 속성 과 같은 파일 시스템 기능에 의존하지 않습니다 . , 및 도구를 사용 하여 조작 할 수도 있습니다 listxattr
.getxattr
setxattr
removexattr
xattr_syscall_wrapper
security.capability
또는 기타에서 xattr 직접.
귀하의 의견에서 :
방금 /system/bin/ping
명령이 setuid
내 실제 삼성 장치에 없는 것으로 나타났습니다.CAP_NET_RAW
안드로이드의 핑 도도 set-uid
없다 CAP_NET_RAW
. 특수한 RAW가 아닌 소켓 IPPROTO_ICMP
을 만듭니다.이 소켓 은 달리 IPPROTO_RAW
권한이 필요하지 않습니다.
추가 참조 :
위에 제공된 10 개 이상의 참조 외에도 Linux 기능을 지원하고 사용하는 AOSP 코드의 다른 부분이 있습니다.
- 핵심 성분 : 바이오닉
libc
, init
, trusty
(OS)
- 외부 구성 요소 :
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
(초기화), dumpstate
, tcpdump
, strace
, iputils
( ping
, traceroute
등)
- Minijail : 기능을 중심으로 한 전용 샌드 박싱 도구 및 라이브러리.
adbd
이 라이브러리를 사용하여 권한을 삭제합니다.
- SELinux 는
capability
클래스를 사용 하여 도메인에 기능을 부여 / 거부합니다.
안드로이드는 리눅스 기능에 크게 의존하고 있으며, 거의 사용 되지 않는 기능이라고 결론 지었다 .
관련 :