OnePlus 3 및 OnePlus 3T에서 두 가지 부트로더 관련 결함이 발견되었습니다. 하나는 패치됐고, 다른 하나는 해결 중이다.
이 기사가 게시된 이후 Oxygen OS 버전 4.0.3은 이 기사에서 논의된 두 번째 보안 취약점, 즉 dm-verity 취약점을 패치했습니다.
Android 루팅, 맞춤 ROM, 커널 및 기타 수정이 있는 멋진 세계로 들어가기 전에 먼저 기기에서 부트로더를 잠금 해제해야 합니다.
일부 장치(특히 이동통신사 브랜드 장치)에서는 사용자가 부트로더를 잠금 해제하기 전에 상당한 기술적 장애물을 처리해야 하므로 문제가 발생합니다. Huawei 휴대폰과 같은 다른 장치에서는 OEM에 고유한 부트로더 잠금 해제 코드를 청원해야 합니다. 이는 사소한 진입 장벽이지만 그리 어렵지는 않습니다. 개발자 설정에서 옵션을 선택한 다음 몇 가지만 보내면 되는 Google Nexus/Pixel 시리즈 또는 OnePlus 휴대폰이 더 좋습니다. 빠른 부팅 명령.
그러나 부트로더를 잠금 해제하는 것이 아무리 어렵더라도 한 가지는 항상 변하지 않습니다. 잠금 해제 시 장치를 초기화해야 한다는 요구 사항입니다. 부트로더가 잠금 해제되면 전체 데이터 파티션을 쉽게 추출할 수 있으므로 이는 확실한 보안상의 이유로 수행됩니다. 기술적 노하우를 갖춘 악의적인 개체가 사용자 지정 복구를 플래시 부팅하고 데이터에 액세스할 경우 장치의 전체 백업을 추출할 수 있습니다. 이것이 바로 부트로더 잠금 해제가 보안 위험으로 간주되는 이유이며, 잠금 해제 후 장치가 지워지는 이유입니다. 모든 것이 제대로 진행된다고 가정하면 일반 사용자는 표준 Android 잠금 방법을 우회하기 위해 부트로더를 잠금 해제하는 공격자로부터 안전해야 합니다. 그러나 모든 것이 계획대로 진행되는 것은 아닙니다.
OnePlus 3/3T 부트로더 잠금 해제 취약점
새로운 취약점 세트는 다음과 같습니다. 방금 공개됨 로이 헤이(Roee Hay)@roeehay), 그 중 첫 번째는 OnePlus 3/3T의 부트로더를 잠금 해제할 수 있게 해줍니다.
사용자 확인 없이 공장 초기화를 실행하지 않고. 이 취약점은 라벨이 붙어 있습니다. CVE-2017-5625는 심각한 심각도 취약점으로 간주되며 OxygenOS 3.2-4.0.1에서 실행되는 모든 OnePlus 3/3T 장치에 영향을 미칩니다. 이미 업그레이드한 사용자 증분 OxygenOS 4.0.2 업데이트 영향을 받지 않습니다 이 취약점으로 인해 Hay씨는 이 결함을 OnePlus에 비공개로 공개했습니다. 1월 23일 그래서 그들은 문제를 즉시 패치할 수 있었습니다.이 결함은 숨겨진 독점 fastboot 명령을 전송하여 작동합니다. fastboot oem 4F500301
. 이 명령을 보내면 사용자의 부트로더 잠금 상태가 우회됩니다(개발자 설정에서 "OEM 잠금 해제 허용"이 활성화되지 않은 경우에도 마찬가지). 장치는 사용자에게 메시지를 표시하지 않으며 원래대로 장치를 초기화하지도 않습니다. 실제로 장치는 여전히 부트로더가 잠겨 있다고 보고합니다! 또 다른 빠른 부팅 명령, fastboot oem 4F500302
, 일부 부트로더 설정을 재설정하고 이미 잠금 해제된 장치를 잠그는 데 사용할 수 있습니다.
Hay 씨는 첫 번째 fastboot 명령이 "매직플래그"는 플래싱 또는 삭제 명령을 수행할 때 부트로더의 잠금 상태를 결정하는 검사를 무시합니다.
// 'oem 4F500301' handler
intsub_918427F0()
{
magicFlag_dword_91989C10 = 1;
if ( dword_9198D804 != dword_9198D804 )
assert(1, dword_9198D804, dword_9198D804);
return sendOK((int)"", dword_9198D804);
}
Fastboot 플래시 핸들러
// 'flash' handler
constchar *__fastcall sub_91847EEC(char *partitionName, int *a2, int a3)
{
char *pname; // r5@1
...
pname = partitionName;
v4 = a2;
v5 = a3;
if ( returnTRUE1(partitionName, (int)a2) )
{
result = (constchar *)sub_918428F0(pname, v6);
if ( (result || magicFlag_dword_91989C10)
&& ((result = (constchar *)sub_91842880(pname, v10)) != 0 || magicFlag_dword_91989C10) )
{
result = (constchar *)sub_918428F0(pname, v10);
if ( !result || magicFlag_dword_91989C10 )
goto LABEL_7;
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Critical partition flashing is not allowed";
}
else
{
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Partition flashing is not allowed";
}
return (constchar *)FAIL2((int)v11, v10);
}
LABEL_7:
...
if ( *v4 != 0xED26FF3A )
{
if ( *v4 == 0xCE1AD63C )
cmd_flash_meta_img(pname, (unsigned int)v4, v5);
else
cmd_flash_mmc_img(pname, (int)v4, v5);
goto LABEL_10;
}
v7 = v4;
}
cmd_flash_mmc_sparse_img(pname, (int)v7, v5);
...
}
더 읽어보세요
Fastboot 지우기 핸들러
// 'erase' handler
int __fastcall sub_91847118(char *partitionName, int a2, int a3)
{
...
v3 = partitionName;
v4 = returnTRUE1(partitionName, a2);
if ( !v4 )
{
LABEL_7:
...
if ( v4 )
{
if ( dword_9198D804 == dword_9198D804 )
return eraseParition(v3);
}
...
}
v4 = sub_918428F0(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition erase is not allowed";
return FAIL2((int)v7, v5);
}
goto LABEL_23;
}
v4 = sub_91842880(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition flashing is not allowed";
return FAIL2((int)v7, v5);
}
LABEL_23:
assert(v4, v5, v6);
}
v4 = sub_918428F0(v3, v5);
if ( !v4 || magicFlag_dword_91989C10 )
goto LABEL_7;
v6 = dword_9198D804;
...
v7 = "Critical partition erase is not allowed";
return FAIL2((int)v7, v5);
}
더 읽어보세요
CVE-2017-5626을 사용하여 커널 코드 실행. 공격자는 원하는 부팅 이미지를 플래시할 수 있습니다. 그러나 수정된 부팅 이미지를 플래시하면 자체 검사 부팅이 시작되어 사용자에게 수정이 감지되었음을 경고합니다. 이를 우회할 수 있는 한 가지 방법은 수정되지 않은 오래된 부팅 이미지(이후 패치된 이전 익스플로잇이 포함된 이미지)를 플래시하는 것입니다. 그럼에도 불구하고 제공되는 "경고"는 5초 동안만 지속되며 자동으로 해제되고 공격자의 코드가 계속 실행되는 검증된 부팅 상태로 부팅됩니다.
Hay 씨는 이 결함이 악의적인 방식으로 악용될 수 있는 방법이 매우 많다고 언급했습니다. 예를 들어, 그는 부팅 이미지를 수정하여 SELinux 모드를 다음으로 설정했습니다. 허용적인 부팅 시 자동으로 ADB 액세스를 포함합니다. 그런 다음 이 취약점을 악용하여 수정된 부팅 이미지를 플래시한 후 그는 사용자가 자격 증명을 입력하기도 전에 루트 셸을 사용합니다.
OnePlus3:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),
3003(inet),3006(net_bw_stats),3009(readproc) context=u: r: su: s0
OnePlus3:/ # getenforce
Permissive
말할 필요도 없이 이것은 상당히 심각한 일이다. 일반적인 보안 조치로 인해 안전하다고 생각되는 도난당하거나 벽돌이 된 장치는 이 악용을 사용하여 완전히 물리칠 수 있습니다.
OnePlus 3/3T SELinux 취약점
두 번째 취약점은 다음과 같습니다. CVE-2017-5624, 영향을 미친다 모든 버전의 OxygenOS 그리고 사람이 할 수 있도록 허용 DM-verity를 비활성화합니다. Hay 씨는 OnePlus 보안 팀에 이 취약점을 공개했습니다. 1월 16일, 그러나 XDA 수석 회원이라는 점에 유의해야 합니다. th3g1z이 취약점을 독립적으로 발견했습니다. ~에 1월 23일. 우리는 OnePlus와 이야기를 나눴습니다. 이 두 번째 취약점을 인정하고 수정할 것임을 확인했습니다. 향후 업데이트에서.
이 공격은 수행하기도 매우 간단합니다. dm-verity를 비활성화(또는 활성화)하려면 단일 fastboot 명령만 실행하면 됩니다. fastboot oem disable dm-verity
. 활성화하려면 간단히 발행하십시오. fastboot oem enable dm-verity
. 부트로더 덤프에서 가져온 이 명령의 핸들러는 아래와 같습니다.
// 'oem disable_dm_verity' handler
intsub_9183B8EC()
{
int v0; // r0@1
int v1; // r1@1
dmVerity_dword_91960740 = 0;
v0 = sub_91845E10("ANDROID-BOOT!");
if ( dword_9198D804 != dword_9198D804 )
assert(v0, v1, dword_9198D804);
return sendOK((int)"", v1);
}
이 명령을 실행하면 Hay 씨가 dmVerity라고 부르는 플래그가 설정됩니다. 이 플래그는 부트로더가 dm-verity를 활성화하거나 비활성화할 수 있는 커널 명령줄 인수를 보내는 데 사용됩니다.
이는 사용자 동의 없이 사용자 데이터에 액세스하여 OnePlus 3/3T에서 높은 권한의 코드를 실행하는 첫 번째 취약점과 함께 사용될 수 있습니다. 예를 들어, Mr. Hay는 /system/priv-app에 애플리케이션을 설치하여 해당 애플리케이션이 priv-app 도메인에 추가되도록 할 수 있었습니다. 이를 통해 악성 애플리케이션이 장치의 높은 권한이 있는 기능에 액세스할 수 있습니다. Hay 씨는 아래 동영상에서 이 두 가지 취약점이 동시에 악용되는 모습을 보여줍니다. 보시다시피, 그가 장치를 부팅하면 그가 만든 애플리케이션이 이미 사전 설치된 것으로 표시됩니다.
OnePlus의 결론 및 참고 사항
이 두 가지 보안 취약점의 잠재적인 남용은 무섭습니다. 이러한 취약점을 OnePlus에 비공개로 신속하게 공개한 Mr. Hay에게 감사드립니다. 그럼에도 불구하고 이러한 장치에서 이러한 fastboot 명령에 액세스할 수 있다는 사실에 놀라지 않을 수 없습니다. 우리가 방법에 대한 가이드를 썼을 때 숨겨진 fastboot 명령 찾기, 우리의 의도는 사용자에게 경험을 향상시키기 위해 사용할 수 있는 몇 가지 흥미로운 명령이 있을 수 있음을 알리는 것이었습니다. 이렇게 높은 권한을 가진 명령이 부트로더 코드에 있을 것이라고는 전혀 생각하지 못했습니다.. 에 관해서는 "왜" 이러한 fastboot 명령은 펌웨어에 포함되어 있으며 "코멘트 없음."
현재로서는 각 Oxygen OS 빌드가 출시되자마자 OnePlus 3/3T를 업데이트하지 않은 경우 다음을 권장합니다. 즉시 업데이트하세요. Oxygen OS 4.0.2로 업데이트하면 첫 번째 취약점으로부터 보호받을 수 있지만 OnePlus까지 기다려야 합니다. 이러한 취약점으로부터 완전히 안전하다고 말하기 전에 두 번째 취약점을 패치하는 업데이트를 출시합니다. 착취. 우리는 앞으로 이런 종류의 악용 사례를 계속 감시해야 할 것입니다.
출처: 로이 헤이