Android/Seploicy

audit2allow를 활용한 SELinux 정책 생성 및 검증

임베디드 친구 2025. 5. 11. 14:18
728x90
반응형

audit2allow를 활용한 SELinux 정책 생성 및 검증

SELinux(보안 강화 리눅스)는 Android 시스템에서 보안 정책을 적용하는 중요한 역할을 합니다. SELinux 정책을 적용하다 보면 새로운 바이너리나 서비스가 기존 정책에 의해 차단되는 경우가 발생합니다. 이러한 문제를 해결하려면 SELinux 정책을 적절하게 수정하고 보완해야 합니다.

audit2allow는 SELinux의 avc: denied 로그를 기반으로 필요한 정책을 생성하는 도구로, 정책 작성과 검증 과정에서 필수적으로 활용됩니다. 이번 포스팅에서는 audit2allow를 활용하여 SELinux 정책을 생성하고 검증하는 방법을 상세히 설명하겠습니다.

1. SELinux avc: denied 로그 분석

SELinux 정책이 특정 작업을 차단하면 dmesg 또는 logcat에서 다음과 같은 avc: denied 메시지가 출력됩니다.

adb logcat -b all | grep 'avc: denied'

예를 들어, 다음과 같은 로그가 발생할 수 있습니다.

avc: denied { read } for pid=1234 comm="my_binary" name="example_file" dev="sda1" ino=1234 
scontext=u:r:untrusted_app:s0 tcontext=u:object_r:system_file:s0 tclass=file

이 로그는 my_binary 실행 파일이 system_file 컨텍스트를 가진 파일을 읽으려고 했지만 정책에 의해 차단되었음을 의미합니다.

2. audit2allow를 활용한 정책 생성

차단된 동작을 허용하는 정책을 생성하려면 audit2allow를 사용하면 됩니다. 먼저, dmesglogcat에서 avc: denied 로그를 audit.log 파일로 저장합니다.

adb logcat -b all | grep 'avc: denied' > audit.log

이제 audit2allow를 실행하여 필요한 정책을 생성합니다.

audit2allow -i audit.log

실행 결과 예제는 다음과 같습니다.

allow untrusted_app system_file:file read;

이 정책은 untrusted_app 도메인이 system_file 컨텍스트를 가진 파일을 읽을 수 있도록 허용하는 규칙입니다.

3. 새로운 정책을 모듈화하여 적용하기

단순히 audit2allow의 출력 결과를 추가하는 것보다, 정책을 모듈화하여 적용하는 것이 좋습니다. 이를 위해 my_policy.te 파일을 생성하고, 생성된 정책을 추가합니다.

vi my_policy.te

파일 내용:

module my_policy 1.0;

require {
    type untrusted_app;
    type system_file;
    class file read;
}

allow untrusted_app system_file:file read;

이제 checkmodulesemodule_package를 사용하여 정책을 컴파일합니다.

checkmodule -M -m -o my_policy.mod my_policy.te
semodule_package -o my_policy.pp -m my_policy.mod
semodule -i my_policy.pp

이제 새로운 SELinux 정책이 적용되었습니다.

4. SELinux 정책 검증 및 문제 해결

(1) 정책이 정상적으로 적용되었는지 확인

정책이 정상적으로 로드되었는지 확인하려면 다음 명령어를 실행합니다.

semodule -l | grep my_policy

출력 결과에 my_policy가 포함되어 있다면 정상적으로 적용된 것입니다.

(2) 새로운 avc: denied 로그 확인

정책 적용 후에도 여전히 차단되는 동작이 있다면, 다시 logcat에서 avc: denied 로그를 확인해야 합니다.

adb logcat -b all | grep 'avc: denied'

새로운 avc: denied 로그가 발견된다면, 추가적인 정책이 필요할 수 있습니다.

(3) SELinux 설정 변경 및 테스트

SELinux를 permissive 모드로 설정하여 테스트할 수도 있습니다.

adb shell setenforce 0  # permissive 모드 설정
adb shell getenforce    # 현재 모드 확인

이제 애플리케이션이 정상적으로 동작하는지 확인한 후, permissive 모드를 다시 enforcing 모드로 변경합니다.

adb shell setenforce 1  # enforcing 모드 설정

5. 결론

audit2allow는 SELinux 정책을 생성하고 수정할 때 매우 유용한 도구입니다. avc: denied 로그를 기반으로 필요한 정책을 생성하고, 이를 적용하여 SELinux 보안을 유지하면서도 시스템 기능이 정상적으로 동작하도록 조정할 수 있습니다. 새로운 바이너리나 서비스를 추가할 때 SELinux 정책을 효과적으로 적용하기 위해 audit2allow를 적극 활용하시기 바랍니다.

728x90
반응형