[android] SELinux 맛보기(feat. DAC vs MAC)

 

 

 

 

Android에서 사용하는 SELinux에 대해서 알아보려고 합니다. 실행되는 프로세스가 정상적으로 동작을 안 하는 경우, 100% SELinux 문제라고 볼 수 있습니다. 물론 해당 프로세스를 실행시키는 코드 문제일 수도 있지만, 특정 권한을 허용하는 SELinux를 설정하지 않으면 원하는 동작이 제한됩니다. 그렇기 때문에 SELinux에 대해서 알아야 합니다. 

SELinux는 무엇일까?

Android site에 들어가면 SELinux에 대해 친절하게 설명해주고 있습니다. 

Android는 Android보안 모델의 일부로 보안 강화 Linux(SELinux)를 사용하여 루트 및 수퍼유저 권한으로 실행되는 프로세스를 포함한 모든 프로세스에 강제 액세스 제어(MAC)를 적용합니다. 

출처: https://source.android.com/docs/security/features/selinux?hl=ko

그러면 이 문장을 읽고 궁금증이 생길 것입니다. 강제 액세스 제어가 무엇인지 말입니다.

DAC - 임의 접근 제어

MAC에 대해서 알아보기 전에 알아야할 내용이 DAC입니다. DAC는 Discretionary Access Control로 임의 접근 제어를 의미합니다. 쉽게 생각하면 Linux에서 개발을 할 때 권한만 있으면 자유롭게 파일들을 접근할 수 있습니다. 하지만 DAC인 경우에 단점이 있습니다. 바로 아래와 같은 경우입니다. A가 가진 파일을 B가 접근을 할 수 있어서 복사해 갔습니다. 그리고 B가 가지고 있는 파일에 대해서 C가 복사해 갈 수 있습니다. 그런데 A의 파일은 C가 접근이 되지 않습니다. 하지만 언급했던대로 C는 A의 파일을 가지고 있을 수 있습니다. 이런 경우에 취약점이 발생합니다.

DAC 취약점
DAC 취약점

또는 악의적인 공격자가 Root와 같은 수퍼유저의 권한을 취득했을 때 모든 것이 뚫리는 취약점이 있습니다. 

MAC - 강제 액세스 제어

MAC은 이러한 취약점들을 잘 보완한 제어 방식입니다. 보안 정책에 따라서 접근이 자동적으로 통제되기 때문에 위와 같은 문제가 발생하지 않습니다. 위 예시로 설명드리면 A file에 대해 B는 권한이 허용되지만, C는 권한이 허용되지 않습니다. A file에 대해서 복사를 할 경우에도 C는 B가 복사한 A file에 대한 권한이 없기 때문에 제어가 불가합니다. 즉 사용자가 아닌 정책 위주로 접근을 제어합니다. 좀 더 쉽게 생각하면 list가 있는데 해당 list에 없는 접근은 다 접근이 불가합니다. 그렇기 때문에 보안 수준이 아주 높습니다. MAC에 대해서 android site에서 명시하고 있습니다. 참고 하시면 좋을 것 같습니다. 

https://source.android.com/docs/security/features/selinux/concepts?hl=ko

그래서 SELinux 뭔데?

쉽게 요약하면 이렇습니다. SELinux는 MAC를 지원하는 보안 모듈이며, 정해진 정책들에 따라 허용 또는 차단합니다. 보안성이 매우 높아 Android 시스템에서도 사용이 됩니다. 다음 시간에는 좀 더 자세히 SELinux에 대해서 알아보도록 하겠습니다.