마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AOSP custom HAL 추가 시, App과 연동할때 Permission 관련 질문입니다.

0 추천

kitkat 버전에서 정상 동작하고, oreo버전으로 급 4단계를 버전업 해버리니까 변경사항이 장난이 아니네요..

 

구조는 APP - JNI - app Framework - native Framework - HAL 로 이어지는 구조의 프로그램입니다

binder 통신을 하고 있고요

 

궁금점은 기존 kitkat때는 없던 보안문제들이 수두룩 걸립니다.

1. service를 실행 후, application에서 binder통신을 위해 connect 할 시, avc:  denied  { find } 에러가 뜹니다.

해당문제는 일단 sepolicy쪽의 service_context 및 service.te 를 건드리면 뭔가 될거 같은 느낌이 옵니다만

확실한 방향을 모르는 상태입니다. 일단 급하면 setenforce 0 명령어 입력 시, 권한을 무시하더군요..

 

2.현재 가장 궁금한 사항입니다. 기존 kitkat에서는 application에서 manifests 에 permission을 정의하여서

사용했습니다.

<uses-permission android:name="android.permission.ServiceA" />

이런식으로 말이죠.. 근데 이것또한 버전업되면서 요새는 Runtime Permission rule을 따라야 된다고 하더군요

그런데 여기서 제가 궁금한것은 "android.permission.ServiceA" 란 놈은 제가 임의로 정의한 이름이며,

native Service 코드쪽에서도  if (!checkCallingPermission(("android.permission.ServiceA"))) 이런식으로 permission을 체크합니다.

그런데 checkCallingPermission 함수에서 에러가 항상 나는데, 이 문제가 버전이 업그레이드 되면서 Runtime permission rule 과 연관이 있는건지가 궁금합니다.

또한 저 처럼 Custom Service 를 작성할 시, 어떤식으로 application에서 권한 획득을 해야되는지도

궁금하네요..

 

이상입니다.ㅜ

 

차닝 (540 포인트) 님이 2019년 1월 22일 질문

1개의 답변

0 추천

권한에 대한 애러가 avc:  denied  { find } 이렇게 밖에 나오지 않나요 ? 뒤에 scontext tcontext tclass 라던거 이런 문구 없나요 ? 제가 할때는 이런 부분들을 참고해서 .te파일을 찾아간뒤에 Selinux에 관한 룰을 풀어줬습니다. 제가 이해하기론 .te 파일은 권한에 대한 설정이 기록되어 있는 곳이고 그곳을 수정함으로 써 권한을 풀어주는 것으로 알고 있거든여.. Selinux Rule 라고 검색하셔서 보시면 조금더 이해가 빠르실꺼같아요 

https://www.lesstif.com/pages/viewpage.action?pageId=18219476

 

CJ여비 (5,730 포인트) 님이 2019년 1월 22일 답변
avc:  denied  { find } for service=myTestservice pid=5996 uid=10059 scontext=u:r:untrusted_app:s0:c512,c768
tcontext=u:object_r:default_android_service:s0
tclass=service_manager permissive=0

정확히는 이런식이였습니다
차닝님 혹시 해결하셨나요 ?

untrusted_app.te 라는 곳에

allow untrusted_app  default_android_service:service_manager {find} 이 룰을 넣고 빌드 해보심이...
해봤는데 컴파일 에러나네요ㅎ

근데 구글링해본결과로는 default_android_service란 이름으로 서비스를 추가하면
안된다고 한것 같습니다.
현재 myTestservice 란 것을 추가한 뒤, myTestservice.te란 파일을 만들어야되는것 같은데... 조금더 해봐야지 알거같네요 ㅠ..
일단 1번문제보단 2번문제가 급하네요 ㅜ
...