폭스콘이 OEM으로 하는 Android 휴대폰에서 “Pork Explosion” 취약점 발견!
최근 보안 연구원 JonSawyer는 폭스콘이 OEM으로 생산하는 몇몇 Android 스마트폰에서 백도어를 발견했습니다. 공격자는 해당 백도어를 이용하여 사용자의 안드로이드 휴대폰을 루팅할 수 있습니다. JonSawyer는 과거에 미국지방정부와 사법기관에 보안자문서비스를 진행한 경험이 있어, 이러한 발견이 적지않은 파장을 불러올 것으로 예상되고 있습니다.
폭스콘은 여러 제조사의 안드로이드 스마트폰을 OEM 방식으로 생산하고 있습니다. 뿐만 아니라 일부 기업은 폭스콘에 휴대폰 시스템 펌웨어 중 일부 하위레벨의 코드를 개발하도록 허용하고 있습니다.
Sawyer은 폭스콘이 OEM 방식으로 Android 스마트폰을 제작할 때, '고의'로 App 내 코드에 디버깅 기능을 남겨둔 점에 주목했습니다. 이후 특수한 앱의 도움을 받아 공격자가 해당 백도어를 이용하여 사용자의 휴대폰을 공격하도록 한 점을 발견하였다고 밝혔습니다.
그는 "해당 취약점은 폭스콘 기술자의 과실로 발생한 것으로 보인다. 해당 백도어가 고의로 남게 된 것인지 아니면 실수로 남게 된 것인지는 우선 논하지 않겠다. 그러나 이런 실수는 매우 위험한 것으로, 공격자가 해당 취약점을 성공적으로 악용할 경우, 안드로이드의 보안매커니즘인 SELinux를 우회하여 루팅 권한을 얻어 아무런 자격증명 없이 각종 데이터에 접근할 수 있다"고 말했습니다.
Pork Explosion으로 명명된 이번 취약점은 공격자와 포렌직 전문가 모두에게 매우 유용한 취약점입니다. 스마트폰에는 각종 보안 취약점이 존재하기 때문에 포렌직 전문가들은 이러한 점을 이용하여 목표 디바이스에서 각종 자료들을 성공적으로 채증할 수 있습니다. Sawyer는 해당 취약점이 공격자가 직접 root shell에 접근하는 것을 허용하며, 따라서 포렌직 전문가들 역시 해당 취약점을 이용하여 데이터를 채증하고 암호를 해독하는 등의 행위를 할 수 있다고 주장했습니다.
Sawyer는 폭스콘의 Infocus M810 와 Nextbit Robin 두 가지 휴대폰에서 해당 취약점을 발견했다고 밝혔습니다. 그는 올해 8월 Nextbit 회사 및 Google 안드로이드 보안팀에 연락을 취했으며, 해당 취약점에 대한 정보를 보안전문가들에게 전달하였다고 밝혔습니다. 이에 Nextbit은 해당 취약점을 패치 완료하였습니다. 그러나 Infocus는 아직까지 업데이트를 진행하지 않고 있습니다.
취약점 분석
공격자가 만약 목표 휴대폰을 획득했다면, USB를 이용하여 SELinux를 사용할 수 없도록 설정한 후 디바이스의 rootshell을 획득합니다. 이 밖에도 adb명령, fastboot 및 App의 부트스트랩을 이용하여 디바이스를 공격합니다.
Nexbit Robin의 App 부트스트랩을 이용하여 분석한 결과, fastboot 명령이 주목을 받았습니다. 해당 명령은 해당 위치에 나오면 안되는 것이기 때문입니다.
LOAD:0F92F8DC fastboot_table ; CODE XREF:sub_F939888+174p
LOAD:0F92F8DC
LOAD:0F92F8DC var_C = -0xC
LOAD:0F92F8DC
LOAD:0F92F8DC STMFD SP!, {R4,LR}
LOAD:0F92F8E0 MOV R4, #0xF9B9C14
LOAD:0F92F8E8 SUB SP, SP, #8
LOAD:0F92F8EC MOV R0, #0x2AE4
LOAD:0F92F8F0 MOV R1, #0xF140
LOAD:0F92F8F4 LDR R3, [R4]
LOAD:0F92F8F8 MOVT R0, #0xF97
LOAD:0F92F8FC MOVT R1, #0xF92
LOAD:0F92F900 STR R3,[SP,#0x10+var_C]
LOAD:0F92F904 BL fastboot_register
LOAD:0F92F908 MOV R0, #0x2AEC
LOAD:0F92F90C MOV R1, #0xDCB4
LOAD:0F92F910 MOVT R0, #0xF97
LOAD:0F92F914 MOVT R1, #0xF92
LOAD:0F92F918 BL fastboot_register
LOAD:0F92F91C MOV R0, #0x2B00
LOAD:0F92F920 MOV R1, #0xEB58
LOAD:0F92F924 MOVT R0, #0xF97
LOAD:0F92F928 MOVT R1, #0xF92
LOAD:0F92F92C BL fastboot_register
LOAD:0F92F930 MOV R0, #0x2B10
LOAD:0F92F934 MOV R1, #0xE3A0
LOAD:0F92F938 MOVT R0, #0xF97
LOAD:0F92F93C MOVT R1, #0xF92
LOAD:0F92F940 BL fastboot_register
LOAD:0F92F944 MOV R0, #0x2B24
LOAD:0F92F948 MOV R1, #0xE598
LOAD:0F92F94C MOVT R0, #0xF97
LOAD:0F92F950 MOVT R1, #0xF92
LOAD:0F92F954 BL fastboot_register
LOAD:0F92F958 MOV R0, #0x2B34
LOAD:0F92F95C MOV R1, #0xE6C4
LOAD:0F92F960 MOVT R0, #0xF97
LOAD:0F92F964 MOVT R1, #0xF92
LOAD:0F92F968 BL fastboot_register
LOAD:0F92F96C MOV R0, #0x2B44
LOAD:0F92F970 MOV R1, #0xE7C8
LOAD:0F92F974 MOVT R0, #0xF97
LOAD:0F92F978 MOVT R1, #0xF92
LOAD:0F92F97C BL fastboot_register
LOAD:0F92F980 MOV R0, #0x2B50
LOAD:0F92F984 MOV R1, #0xE954
LOAD:0F92F988 MOVT R0, #0xF97
LOAD:0F92F98C MOVT R1, #0xF92
LOAD:0F92F990 BL fastboot_register
LOAD:0F92F994 MOV R0, #0x2B60 ;reboot-recovery
LOAD:0F92F998 MOV R1, #0xE500
LOAD:0F92F99C MOVT R0, #0xF97
LOAD:0F92F9A0 MOVT R1, #0xF92
LOAD:0F92F9A4 BL fastboot_register
LOAD:0F92F9A8 MOV R0, #0x2B70 ;reboot-ftm
LOAD:0F92F9AC MOV R1, #0xE54C
LOAD:0F92F9B0 MOVT R0, #0xF97
LOAD:0F92F9B4 MOVT R1, #0xF92
LOAD:0F92F9B8 BL fastboot_register
LOAD:0F92F9BC MOV R0, #0x2B7C
LOAD:0F92F9C0 MOV R1, #0xEE1C
LOAD:0F92F9C4 MOVT R0, #0xF97
LOAD:0F92F9C8 MOVT R1, #0xF92
LOAD:0F92F9CC BL fastboot_register
LOAD:0F92F9D0 MOV R0, #0x2B88
LOAD:0F92F9D4 MOV R1, #0xF804
LOAD:0F92F9D8 MOVT R0, #0xF97
LOAD:0F92F9DC MOVT R1, #0xF92
LOAD:0F92F9E0 BL fastboot_register
LOAD:0F92F9E4 MOV R0, #0x2B98
LOAD:0F92F9E8 MOV R1, #0xF518
LOAD:0F92F9EC MOVT R0, #0xF97
LOAD:0F92F9F0 MOVT R1, #0xF92
LOAD:0F92F9F4 BL fastboot_register
LOAD:0F92F9F8 MOV R0, #0x2BA0
LOAD:0F92F9FC MOV R1, #0xEFE0
LOAD:0F92FA00 MOVT R0, #0xF97
LOAD:0F92FA04 MOVT R1, #0xF92
LOAD:0F92FA08 BL fastboot_register
LOAD:0F92FA0C LDR R2, [SP,#0x10+var_C]
LOAD:0F92FA10 LDR R3, [R4]
LOAD:0F92FA14 CMP R2, R3
LOAD:0F92FA18 BNE loc_F92FA38
LOAD:0F92FA1C MOV R0, #0x2BA8
LOAD:0F92FA20 MOV R1, #0xF0D0
LOAD:0F92FA24 MOVT R0, #0xF97
LOAD:0F92FA28 MOVT R1, #0xF92
LOAD:0F92FA2C ADD SP, SP, #8
LOAD:0F92FA30 LDMFD SP!, {R4,LR}
LOAD:0F92FA34 B fastboot_register
위 코드에서 볼 수 있듯이, 휴대폰에는 일반 명령과 OEM 명령 두 종류의 fastboot명령이 존재합니다. 일반 명령은 "command:parameters”의 형식으로 USB를 통하여 전송됩니다. 예를들어 “getvar all”명령은 “getvar:all”형식으로 발송됩니다. 그리고 “reboot”명령은 직접 “reboot”형식으로 발송됩니다.
여기서 주의해야 할 것은, 이러한 일반 명령어는 fastboot클라이언트 중에 하드코딩 되어 있다는 것입니다. 그러나 OEM 명령은 제조사 표준명령형식에 따라 실행되지 않습니다. OEM명령은 “oem command parameters”형식으로 발송됩니다. 예를들어 “oem writeimei 1234567899876543”입니다.
위에 나열한 명령 중, 문제가 있는 명령은 “reboot-ftm"입니다. 해당 명령어는 일반 명령어에 속하지 않을 뿐만 아니라 OEM 명령어에도 속하지 않습니다. 실제로 해당 명령어는 모바일 디바이스에서 제공하는 것으로, fastboot중에서는 해당 명령어를 실행할 수 없습니다.
해당 명령어를 실행하기 위해 전문가들은 임의의 클라이언트를 생성했습니다. 이후 임의의 클라이언트와 디바이스를 연결한 후에 디바이스 bootloader에 “7265626F6F742D66746D(reboot-ftm)”데이터를 전송하였습니다. 코드는 다음과 같습니다.
Jons-Mac-Pro:nextbit jcase$ adb shell
root@ether:/ # 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)
root@ether:/ # getenforce
Disabled
root@ether:/ # grep finger /system/build.prop
# Do not try to parse description, fingerprint, orthumbprint
ro.build.fingerprint=Nextbit/ether/ether:6.0.1/MMB29M/00WW_1_350:user/release-keys
타겟 디바이스에 해당 명령어를 발송한 후, 휴대폰은 자동으로 "공장테스트모드"로 부팅됩니다. 해당 모드에서는 eMMC브랜드, MAC주소, IMEI번호 등 휴대폰의 소프트웨어와 하드웨어의 상세한 정보들을 확인할 수 있습니다. 만약 adb명령어를 이용하여 휴대폰에 접속한다면, "adb reboot ftm"명령을 이용하여 공장테스트모드에 접속할 수 있게 됩니다.
공장테스트모드에서는 adb프로세스가 root권한으로 동작하며, 어떠한 자격증명도 없이 adb를 통하여 디바이스의 shell권한을 획득할 수 있습니다. 주의해야할 점은 이 때 디바이스의 SELinux는 중지된 상태라는 것입니다. 보안 연구원은 해당 취약점을 찾기 위해 "ftmboot"와 "ftmdata" 두 영역을 먼저 찾는 것을 제안했습니다.
참고 :
http://www.theregister.co.uk/2016/10/14/pork_explosion_foxconn_flaw
CVE-2016-8610: “SSL Death Alert“ 취약점 발견 (0) | 2016.10.27 |
---|---|
사용자 안드로이드 기기를 루팅해 전체 제어 권한을 갖는 Drammer 안드로이드 핵 발견 (0) | 2016.10.26 |
대규모 ATM 해킹이 발생... 320만명 인도 사용자의 계정정보 유출돼 (0) | 2016.10.25 |
Linux 커널에서 "Dirty Cow(CVE-2016-5195)" 제로데이 취약점 발견! (0) | 2016.10.25 |
TrickBot, Dyre 뱅킹 트로이목마와 강한 상관관계가 있는 것으로 보여져 (2) | 2016.10.24 |
댓글 영역