문서화되지 않은 Android 기능을 사용하면 임의의 앱이 허용된 SELinux 환경에서 루트 액세스 권한을 얻을 수 있습니다. 더 자세히 알아보려면 계속 읽어보세요!
Android 모딩 세계에서 사람들은 루트 액세스를 모든 것의 초석으로 간주하는 경향이 있습니다. 이를 통해 사용자는 장치를 완전히 제어하고 기본 구성에서는 항상 사용할 수 없는 기능을 추가할 수 있습니다. 그러나 "큰 힘에는 큰 책임이 따른다"라는 말이 있듯이, 어떤 일이 벌어지고 있는지 알지 못하는 한 Android의 보안 모델을 우회하는 것은 현명하지 않습니다. 우리 포럼의 베테랑 Android 매니아라면 아마도 귀하의 장치에 백도어가 존재할 가능성이 있다는 사실을 알고 계실 것입니다. 최신 보안 기능을 갖춘 최신 Android 버전 위에 신뢰할 수 있는 루트 지원 모드를 실행할 가능성이 더 높습니다. 패치. 그렇긴 하지만, 겉보기에 효과가 있는 한 어떤 루트 조정을 설치하는지에 대해 별로 신경 쓰지 않는 사람들이 몇 명 있을 것입니다. 이것이 바로 SELinux가 허용으로 설정된 경우에만 작동하여 사용자가 보안 위협에 극도로 취약해지는 모드 트럭을 여전히 찾을 수 있는 이유입니다.
SELinux 란 무엇입니까?
SELinux 또는 보안이 강화된 Linux는 보안 정책의 액세스 및 관리를 위해 특별히 설계된 Linux 커널 보안 모듈입니다. 원래 Android 4.3 Jelly Bean에서 도입되었으며 Android 이후 기본값으로 적용 모드로 설정되었습니다. 4.4 KitKat, SELinux는 액세스 제어 권한을 적용하고 권한 상승을 방지하는 데 도움이 됩니다. 공격. 간단히 말해서, SELinux는 악의적으로 루트 액세스 권한을 얻으려는 앱이나 취약점과 같이 장치에 대한 무단 제어에 대한 장애물 역할을 합니다. SELinux를 기본적으로 "강제"로 설정하는 것은 일반 사용자를 이러한 공격으로부터 보호하는 주요 방법 중 하나입니다.
Permissive SELinux가 권장되지 않는 이유
다시 한번 말씀드리지만, Android 기기에서 루트 액세스를 얻는 일반적인 방법에서는 SELinux 상태를 반드시 변경할 필요는 없습니다. SELinux 모드를 '적용'에서 '허용'으로 전환하면 기기의 주요 보안 기능 중 하나가 의도적으로 비활성화됩니다. 사용자는 특수한 사용자 정의 커널을 설치하거나 기존 부팅 이미지의 매개변수를 수정하여 이러한 일이 발생하도록 명시적으로 허용해야 합니다. 적절한 SELinux 정책이 없는 잘못 코딩된 모드는 일반적으로 최종 사용자가 허용적인 SELinux로 전환하도록 강요하고 본질적으로 공격 표면을 확장합니다. 바로 개발자다.
vvb2060 그들이 언제 시연했는지 개념 증명 권한 상승 방법을 게시했습니다. 제어권을 얻기 위한 유일한 요구 사항은 SELinux를 허용하는 것뿐입니다.매지카를 입력하세요
SELinux가 허용으로 설정된 Android 10 이상을 실행하는 자신의 기기에서 사용자가 전체 루트 액세스 권한을 얻는 것은 놀라울 정도로 쉽습니다. 해야 할 일: 설치를 누르기만 하면 "Magica"가 자동으로 서비스의 루트 액세스 권한을 얻고 부팅에 Magisk를 설치합니다. 영상. 이는 단순히 장치를 조정하는 것보다 범위가 훨씬 더 넓습니다. XDA 수석 인정 개발자 및 Magisk 관리자에 따르면 탑존우, 악성 코드를 포함한 임의의 앱, 귀하의 동의나 허가 없이 장치를 영구적으로 루팅할 수 있습니다. PoC를 활용하여
Magica가 무엇을 활용하고 있는지 기술적인 수준에서 궁금하다면 topjohnwu는 다음과 같이 설명했습니다. Reddit 게시물:
"부팅 중에 SELinux가 허용되면 zygote는 이를 인지하고 seccomp syscall 필터를 비활성화합니다. 이는 기본적으로 타사 프로세스에서 허용되는 시스템 호출을 제한하지 않습니다.
Android 10 이상에는 타사 앱이 "격리된 서비스"를 위해 자체 Zygote를 생성할 수 있는 "App Zygote"라는 새로운 "문서화되지 않은" 기능이 있습니다(역시 거의 문서화되지 않음). "App Zygote" 및 "격리된 서비스"는 모두 Chrome/Webview*용으로 설계된 특수 기능입니다. App Zygote 프로세스는 특수 권한으로 실행되며 seccomp가 비활성화된 경우 setuid 0을 호출하고 권한을 에스컬레이션하고 루트 액세스 권한을 얻을 수 있습니다.
일반 루트 솔루션이 제공하는 것(예: Magisk)에 비해 여전히 제한적이지만 UID=0이면 Android의 수많은 보안 조치가 완전히 무효화됩니다. 예를 들어 부팅 이미지를 패치하는 데 사용하면 충분합니다. 즉, 수정된 Magisk와 같은 악성 코드를 주입하여 "실제" 루트 권한을 얻는 데 사용할 수 있습니다.
업데이트: UID=0 자체는 무엇을 할 수 있나요? Android 프레임워크 내에서는 요청 프로세스의 UID가 0일 때 거의 모든 서비스에 녹색 불이 켜집니다. 이는 이 루트 프로세스가 Android 특정 API(예: ActivityManager)를 사용하여 수많은 항목을 조작할 수 있음을 의미합니다."
*개발자에 따르면 아비락프, 이 두 기능은 "격리된 여러 프로세스 간에 리소스와 메모리를 공유하기 위해" 보다 일반적으로 설계되었습니다.
결론
허용적인 SELinux 환경에서 악성 코드의 표적이 된 사용자에게 입힐 수 있는 회복 불가능한 피해를 고려할 때, 반드시 필요한 경우가 아니면 모든 사람이 이를 계속 시행할 것을 강력히 권장합니다. 개념 증명 공격을 받은 것은 행운이지만, 얼마나 많은 악성 프로그램 작성자가 이미 이 공격 경로를 알고 있는지는 알 수 없습니다. 결국, 피해자는 그렇지 않은 경우 자신의 장치가 손상된 상태를 계속 인식하지 못할 것입니다. 영구 루트가 있는 악성 앱의 경우 달성하기 어렵지 않은 익스플로잇이 적극적으로 사용되는 것을 목격하십시오. 입장.