OnePlus가 실수로 루트 액세스에 대한 백도어 역할을 하는 앱을 사전 설치했습니다.

OnePlus는 OnePlus 3, 3T 및 5에 루트 액세스 권한을 부여하는 백도어 역할을 하는 Qualcomm 엔지니어링 테스트 앱을 그대로 두었습니다.

업데이트: OnePlus가 발행했습니다. 공식 답변 문제에. 향후 업데이트에서는 EngineerMode에서 ADB 루트 기능을 제거할 예정입니다.

원플러스가 수집 중인 것으로 밝혀진 지 한 달 남짓이 지났습니다. 분석을 위한 개인 식별 정보. 회사는 신속하게 방향을 바꾸었고 업데이트에서 회사는 사용자에게 명확하게 제공함으로써 더욱 투명해지겠다고 약속했습니다. OxygenOS 분석을 거부하는 옵션. 그 이후로 그 사태는 해결되었지만, 오늘 밤 또 다른 사태가 추악한 머리를 키우고 있습니다. "라는 이름을 사용하는 트위터 사용자엘리엇 앨더슨"(인기 Mr. Robot TV 시리즈의 주인공 이름을 따서 명명)는 OnePlus가 실수로 진단 테스트 응용 프로그램을 그대로 두었습니다. 퀄컴에서 만든. 이 애플리케이션을 디컴파일한 후 그는 이것이 가능하다는 것을 발견했습니다. 루트 액세스 권한을 부여하는 데 악용되어 효과적으로 백도어 역할을 함.

응용 프로그램은 "EngineerMode"라고 하며 기본적으로 Qualcomm에서 만든 시스템 응용 프로그램입니다. OEM이 OnePlus와 같은 OEM에 제공되어 OEM이 모든 하드웨어 구성 요소를 쉽게 테스트할 수 있도록 합니다. 장치. 이 애플리케이션은 모든 OnePlus 3, OnePlus 3T 및 OnePlus 5 장치에 사전 설치되어 있으며 앱의 모든 활동이 내보내기되므로 모든 활동 실행기를 통해 쉽게 액세스할 수 있습니다.

우리는 실제로 몇 달 전에 이 애플리케이션의 존재를 보도했습니다., 그러나 당시에는 그것이 무엇에 사용될 수 있는지 전혀 몰랐습니다. Twitter 사용자가 애플리케이션을 디컴파일했습니다(소스가 온라인에 게시됨). 여기) DiagEnabled라는 흥미로운 활동을 발견했습니다. 특히 활동 내에서 한 가지 방법이 눈에 띄었습니다: escalatedUp. 이 메소드는 부울 값(true/false)과 문자열을 허용합니다. 문자열은 시스템 속성을 설정하기 전에 메서드에서 확인하는 비밀번호입니다.

persist.sys.adbroot 그리고 oem.selinux.reload_policy 1로.

첫 번째 시스템 속성은 사용자가 ADB를 루트로 실행할 수 있도록 허용하므로 특히 흥미롭습니다. 그러면 부트로더를 잠금 해제하지 않고도 전화기에서 전체 루트 액세스 권한을 얻을 수 있는 가능성이 즉시 열립니다. 그렇다면 EngineerMode 앱이 이러한 시스템 속성을 '1'로 설정하도록 하려면 어떻게 해야 할까요?

@fs0c131y는 위에 게시된 메서드의 로직을 전달하기 위해 인텐트에 보낼 올바른 비밀번호를 찾아야 했습니다. 그러나 이 비밀번호를 찾는 것은 간단한 작업이 아닙니다. 그는 비밀번호 생성을 담당하는 라이브러리(libdoor.so라고 함)를 디컴파일하여 비밀번호 해시가 있는 위치를 찾았습니다. /data/backup/fpwd. 비밀번호는 다음과 같은 다양한 빌드 속성에서 생성됩니다. ro.product.model 그리고 ro.product.brand 리버스 엔지니어링하기가 쉽지 않습니다.

다행히 도움을 받아 데이비드 웨인스타인 그리고 이제 안전하다 그는 트위터에서 ADB를 루트 ​​권한으로 승격하기 위해 EngineerMode에 필요한 비밀번호를 발견했습니다.

우리가 해야 할 일은 다음 형식으로 인텐트를 보내는 것뿐입니다.

adb shell am start -n com.android.engineeringmode/.qualcomm.DiagEnabled --es "code""angela"

여기서 com.android.engineeringmode/.qualcomm. DiagEnabled는 우리가 활용 중인 DiagEnabled 활동의 구성 요소 이름이고, "code"는 문자열 이름이고 "angela"는 관련 비밀번호 값입니다.

@fs0c131y는 그렇게 할 것이라고 말합니다. 애플리케이션을 게시하다 곧 ADB를 루트 ​​권한으로 승격시키고 부팅 이미지를 패치하여 dm-verity를 ​​비활성화하고 하위 바이너리를 설치하기 위해 이 인텐트를 보낼 것입니다. 이 루트 애플리케이션이 언제 게시되는지 확인하려면 XDA 포럼을 주의 깊게 살펴보세요.

이것이 최종 사용자에게 의미하는 바는 다음과 같습니다. 부트로더를 잠금 해제하지 않고도 OnePlus 3, OnePlus 3T 및 OnePlus 5를 쉽게 루팅할 수 있습니다.. 하지만 이 악용은 악성 앱이 자체적으로 루트 액세스 권한을 부여하는 것을 허용하지 않으므로 누군가가 ADB를 설정하기 위해 장치에 물리적으로 액세스할 수 없는 한 악용으로부터 안전합니다.

이 악용으로부터 자신을 보호하려는 경우 다음을 수행할 수 있습니다. 현재 사용자에게서 앱을 제거합니다. 그러면 인텐트가 EngineerMode 앱으로 전송되는 것을 방지할 수 있습니다. ADB에서 다음 명령을 사용하십시오.

adbshellpmuninstall-k--user 0 com.android.engineermode

물론 이는 여전히 악용으로 간주되며 OnePlus가 이 문제를 곧 패치할 수 있기를 바랍니다. 실제로 해야 할 일은 향후 빌드에서 이 애플리케이션을 제거하는 것뿐입니다.


업데이트 1: 비밀번호는 'angela'입니다.

사용자 @fs0c131y는 자신의 트위터 페이지에 루팅된 ADB 셸에 들어가는 데 필요한 비밀번호가 포함된 업데이트를 게시했습니다. 그 비밀번호는...안젤라. 미스터 로봇을 시청하지 않으시는 분들을 위해 말씀드리자면 안젤라는 주인공 중 한 사람의 이름입니다. 퀄컴에는 미스터로봇 팬이 많을 것 같아요.

위에서 ADB에 게시한 명령을 입력하면 ADB가 즉시 연결 해제되고 서버가 다시 시작되는 것을 알 수 있습니다. ADB를 다시 입력하면 이제 루트 쉘이 된 것을 알 수 있습니다.


업데이트 2: 비밀번호가 파생된 방법

보안 회사인 Now Secure는 이 루트 공격이 발생하는 데 필요한 비밀번호를 어떻게 도출했는지 자세히 설명하는 블로그 게시물을 게시했습니다. 여기에서 전체 게시물을 읽을 수 있습니다..


업데이트 3: 영향을 받는 더 많은 장치

이 최신 소식은 놀라운 일이 아니지만, 더 많은 장치가 이 공격의 영향을 받는 것으로 보입니다. EngineerMode 앱은 Qualcomm 앱이기 때문에 다른 OEM이 해당 앱을 기기에 사전 설치해 두었을 가능성이 있습니다. 지금까지 사용자는 Twitter의 @fs0c131y에 연락하여 애플리케이션이 다음에 설치되었는지 확인했습니다. 일부 Asus Zenfone 및 Xiaomi 장치. 설정으로 이동하여 어떤 앱이 설치되어 있는지 확인하면 기기에 이 애플리케이션이 있는지 쉽게 확인할 수 있습니다.


업데이트 4: 기기 루팅

이제 루팅된 ADB 쉘을 통해 몇 가지 명령을 사용하여 다음을 수행할 수 있습니다. su 바이너리를 장치에 푸시. 이를 사용하여 SuperSU와 같은 루트 관리자 앱을 설치한 다음 다른 앱에 자유롭게 루트 액세스 권한을 부여할 수 있습니다. 부트로더를 잠금 해제하지 않고도 이 모든 것이 가능합니다!


업데이트 5: OnePlus의 응답

OnePlus는 공식적으로 상황에 대응했습니다. 안에 블로그 게시물, 회사는 공격자가 장치에 물리적으로 접근할 수 있고 USB 디버깅을 활성화한 경우에만 이 익스플로잇을 활용할 수 있다고 반복합니다. USB 디버깅을 활성화하려면 공격자가 장치의 핀/비밀번호도 필요합니다. 따라서 루트 백도어는 어떤 앱이나 사람도 쉽게 악용할 수 없지만 OnePlus는 EngineerMode 앱에서 이 기능을 제거하여 사용자의 우려를 해결할 것입니다.