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 앱에서 이 기능을 제거하여 사용자의 우려를 해결할 것입니다.