OnePlus 3/3T 부트로더 취약점으로 인해 Fastboot에서 SELinux를 허용 모드로 변경할 수 있음

OnePlus 3/3T 부트로더의 심각한 취약점으로 인해 공격자가 SELinux 상태를 적용에서 허용으로 전환할 수 있습니다! 더 자세히 알아보려면 계속 읽어보세요!

그만큼 원플러스 3 그리고 원플러스 3T 지금 구입할 수 있는 최고의 휴대폰 중 하나입니다. 2017년에 출시될 플래그십은 아직 소비자에게 공개되지 않았지만, OnePlus 3/3T가 실제 성능을 지배합니다. 저렴한 가격으로.

하지만 기기를 공정하게 평가하려면 OnePlus의 최선의 노력에도 불구하고 OnePlus 3/3T에 결함이 없는 것은 아니라는 점을 인정해야 합니다. 예를 들어, 우리는 이전에 다음과 같은 보안 문제에 대해 보고했습니다. OnePlus에서 IMEI 세부정보 유출 휴대폰에서 업데이트를 확인할 때 네트워크를 통해. 이제 목록에 추가해야 할 또 다른 보안 문제가 있습니다. 이 문제는 잠재적으로 더 위험한 결과를 초래할 수 있습니다.

OnePlus 3/3T의 부트로더 취약점으로 인해 악의적인 공격이 발생할 수 있습니다. IBM X-Force 애플리케이션 보안 연구 팀의 Roee Hay가 발견한 내용 IBM X-Force Exchange 플랫폼에 공개됨, 이 취약점을 통해 공격자는 기기의 SELinux 상태를 조작하여 허용 모드로 전환할 수 있습니다. 공격자에게 필요한 모든 것은 물리적 접근이든 장치에 또는 ADB 연결에 대한 원격 액세스 장치에.

SELinux, 또는 Security-Enhanced Linux는 보안 정책에 대한 액세스 및 관리를 허용하는 Linux 커널 보안 모듈입니다. SELinux는 Android 4.3부터 Android에 도입되었으며 다음과 같이 설정되었습니다. 시행 Android 4.4부터 기본 모드입니다. 이 필수 액세스 제어 시스템은 기존 액세스 제어 권한을 적용하고 권한 상승 공격을 방지하는 데 도움이 됩니다. 이는 악의적으로 루트 액세스 권한을 얻으려는 앱이나 취약점과 같이 장치에 대한 무단 제어에 대한 장애물 역할을 합니다. SELinux를 다음으로 설정 시행 Android에서는 기본적으로 이러한 공격으로부터 일반 사용자를 보호하는 첫 번째 단계로 사용됩니다.

이 취약점은 악용하기 매우 간단합니다. 실제로 일반적인 악용의 모습과는 달리 OnePlus 측에서 큰 실수를 저지른 것으로 보입니다. 먼저, 공격자는 OnePlus 3/3T를 'fastboot' 모드로 재부팅합니다. 물리적 액세스가 있는 경우 부팅 중에 볼륨 크게 버튼을 누르기만 하면 됩니다. 그렇지 않은 경우 ADB 명령을 실행할 수 있습니다. adb reboot bootloader 장치에. 장치의 빠른 부팅 모드는 USB 인터페이스를 노출하므로 보안에 민감한 명령이 잠긴 장치에서 완료되는 것을 허용해서는 안 됩니다. 하지만 OnePlus 3/3T에서는 간단히 fastboot oem selinux permissive fastboot 인터페이스를 통한 명령은 SELinux 모드를 시행 에게 허용적.

fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

문제를 더욱 복잡하게 만드는 것은 OnePlus 3 및 3T에는 장치의 현재 SELinux 상태를 언급하는 '정보 화면' 항목이 없다는 것입니다. 피해자는 익스플로잇이 적극적으로 사용되는 것을 목격하지 않은 경우에도 자신의 장치가 손상된 상태를 계속 인식하지 못할 것입니다. '정보 화면'에 SELinux 상태 항목이 없다는 점은 Android 6.0 기반 오픈 베타 릴리스와 Android 7.0 공식 ROM 모두에서 누락되었습니다.

SELinux 상태를 허용으로 전환하는 여러 앱이 있습니다. SELinuxModeChanger 애플리케이션. 이 방법을 통해 SELinux를 전환하면 재부팅을 통해 상태가 지속되는 것을 허용하지 않습니다. 하지만 당신은 할 수 있습니다 스크립트를 활용하다 유지하기 위해 허용적 하드 재부팅 시 SELinux 상태. 이 두 방법 모두 루트 액세스가 필요합니다. 이는 사용자가 노출된 위험에 대해 이미 알고 있음을 의미합니다. 그러나 SELinux 모드를 다음으로 변경하는 것의 주요 차이점은 다음과 같습니다. 허용적 위의 취약점을 이용하는 것은 하드 재부팅 후에도 지속됨, 그렇군요 루트 액세스가 필요하지 않고.

현재로서는 해당 취약점에 대한 해결 방법이 없습니다.


업데이트:

우리는 다음에게 연락했습니다. 술탄스다OnePlus 장치에 대해 가장 잘 알려진 사용자 정의 ROM 개발자 중 한 명인 에게 이 문제에 대해 자세히 알아보는 데 도움을 줄 수 있는지 알아보십시오. 그는 루트 소스를 찾기 위해 즉시 코드를 파헤쳤고, 그가 발견한 것은 다음과 같습니다.

"fastboot oem selinux" 방식은 " 명령이 작동하는 이유는 Linux를 부팅할 때 커널 명령줄에 추가 인수를 추가한다는 것입니다. 추가 인수는 "androidboot.selinux= 형식으로 제공됩니다.", 어디 "허용"될 수 있습니다. 재미있는 부분이 있습니다: "androidboot.커널 명령줄의 " 인수는 Android의 init에 의해 구문 분석됩니다. 일반적인 Android 프로덕션 빌드("사용자" 빌드)에서는 "androidboot.selinux" 인수가 완전히 무시되고 selinux는 항상 강제로 적용됩니다. 따라서 이 버그는 두 가지 문제로 구성됩니다.

  1. 사용자는 일반적으로 엔지니어링/디버깅 ROM 빌드에서 selinux를 허용하는 플래그를 부트로더가 전달하도록 할 수 있습니다.
  2. OnePlus는 프로덕션 ROM 빌드의 경우에도 "androidboot.selinux" 플래그를 존중하기 위해 Android의 초기화를 수정했습니다.

프로덕션 빌드에 대해 "androidboot.selinux" 플래그를 무시하도록 Android의 init가 구성된 위치는 다음과 같습니다. https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

소스 코드의 ALLOW_DISABLE_SELINUX 플래그는 userdebug 및 엔지니어링 빌드에 대해서만 1로 설정됩니다.

(내 ROM은 프로덕션(사용자) 모드에서 빌드하기 때문에 이 문제의 영향을 받지 않습니다.)

따라서 "androidboot.selinux"는 내 ROM에서 무시됩니다. "fastboot oem selinux" " 명령은 CAF의 공개 부트로더 소스에 그러한 명령이 없기 때문에 OnePlus가 만든 것으로 보입니다. 잠금 해제된 부트로더를 사용하는 사용자를 위해 이 문제를 해결할 수 있는 4가지 방법이 생각납니다.

  1. 부트로더를 16진수 편집하여 "selinux" 문자열의 모든 인스턴스를 다른 문자열(예: "sclinux")로 변경하여 플래그가 Android의 init에서 인식되지 않도록 합니다.
  2. OxygenOS에서 Android init 바이너리를 16진수 편집하여 "androidboot.selinux"의 모든 인스턴스를 다음으로 대체합니다. Android init가 인식하지 못하도록 다른 것(예: "androidboot.sclinux") androidboot.selinux 플래그
  3. Android 초기화에서 "androidboot.selinux" 플래그를 숨기려면 SafetyNet 우회와 유사한 커널 명령줄 드라이버에 해킹을 추가하세요.

뒤에서 무슨 일이 일어나고 있는지 파악하는 데 시간과 노력을 쏟은 Sultanxda에게 감사의 말씀을 전하고 싶습니다. 또한 상황을 인지하고 문제를 조사 중인 OnePlus에도 연락했습니다.


OnePlus가 심각한 문제를 공개적으로 인정하고 문제 해결 계획을 투명하게 공개하기를 바랍니다.