ChamChiCon Season 1 – Exploiting Android Kernel

토크 제목: Recent Android Kernel Exploitation: KNOX Kernel Mitigation Bypasses

안드로이드는 리눅스 커널에 기반한 구글에서 개발한 운영체제이다. 이러한 기본 소스 베이스 위에 각 벤더들은 자신들이 원하는 여러 어플리케이션과 양념들을 추가해서 하나의 제품으로 판매하게 된다. 물론 하드웨어적인 차별화도 이러한 과정에서 중요한 셀링 포인트가 된다.

그렇다면 보안이라는 것은 안드로이드 기계들에서 어떠한 의미를 가질까? 안타깝게도 상대적으로 아이폰에 비해서 안드로이드는 보안상으로 취약한 플랫폼, 특히 여러 악성 앱들이 쉽게 깔리고, 쉽게 루팅이 되는 시스템으로 인식이 되어 있다. 적어도 몇년 전까지는 그랬다.

이러한 게임이 바뀌게 된것은 삼성의 KNOX 플랫폼의 출현과 관련이 있다. KNOX는 여러가지 보안과 관련된 여러 기제들을 모아 놓은 하나의 패키지로서 삼성에 의해서 갤럭시 플랫폼에 제공되는 보안 장치라고 볼 수 있다. 이러한 보안 플랫폼은 TrustZone이라는 ARM의 중요 가상화 기술 위에서 수립 되었다. 사실 윈도우즈 플랫폼에서도 최근 VBS (Virtualization-based Security)라고 그래서 가상화, 특히 Hypervisor를 통한 보안에 굉장한 관심이 쏟아지고 있다. 어떻게 보면, PC 보안과 모바일 보안은 서로를 미러링하면서 발전하는 것이 아닌가 하는 생각이 든다.

이러한 가상화 기반의 보안 장치가 등장하기 전 안드로이드는 특히 커널 레벨의 구조체 어드레스 릭과 데이타 구조체 보호에 신경을 쓰는 양상을 보이는데, 이유는 이러한 정보들과 데이타 구조체들이 루팅을 위해서 악용되는 경향이 강했기 때문이다. 아래 테이블은 지난 10여년간의 여러 커널 exploit 보안 장치들, mitigation들이 어떻게 발전해 왔는지를 잘 보여 준다.

TargetTimeNameDescription
Android 2.3Dec 6, 2010mmap_min_addr (zero-page restrict)Linux mmap_min_addr to mitigate null pointer dereference privilege escalation (further enhanced in Android 4.1)
Android 4.1Jul 9, 2012kptr_restrictPrevent kernel pointer leak
Android 4.1Jul 9, 2012dmesg_restrictPrevent users from looking at dmesg output
Android 4.4Oct 31, 2013PXNPrevent kernel to change execution to user mode +X memory
Android 5.0Nov 12, 2014SEAndroidSecurity Enhancements for Android, a security solution for Android that identifies and addresses critical gaps
Android 6.0Nov 7 2014KERNEL_TEXT_RDONLYEnable this option to mark the kernel text pages as read only to trigger a fault if any code attempts to write to a page part of the kernel text section.
Android 6.0Oct 5, 2015CONFIG_DEBUG_RODATAKernel text and rodata will be made read-only. This is to help catch accidental or malicious attempts to change the kernel’s executable code.
KNOX 2.4.1Jul 2015Secure Boot, RKPIt is believed RKP introduced with KNOX 2.4. RKP is a TZ-based security suite
KNOX 2.6Feb 2016Enhanced Real Time Kernel Protection (RKP), Kernel address space layout randomizationkASLR makes kernel exploit difficult by randomizing kernel memory layout
KNOX 2.8April 2017Control Flow ProtectionkCFI will prevent exploiting memory corruption vulnerability challenging by eliminating usable pointer corruption points.

초기에는 주로 리눅스 커널에서 만들어진 여러 mitigation들을 가져다 쓰는 형태였고, 그 내용도 주로 간단하게 구현이 가능한 메모리 내용 누출 방지용 장치나 NULL 페이지 맵핑등을 통한 익스플로잇 방지 장치들이었으나, 2013년 ARM의 PXN 기능을 사용하기 시작하면서 간단한 커널 익스플로잇들을 대거 막아 내게 되었고, 그 이후로는 커널 구조체 보호에 많은 에너지를 쏟게 되었다. KNOX의 RKP는 이러한 이러한 전쟁에서 어느 정도 mitigation의 승기를 잡을 수 있게 해준 장치였다. 왜냐하면 다음과 같이 TZ가 제공하는 아늑한 SECURE WORLD에서 주요 보안 장치들이 편안하게 여러 보안과 관련된 operation을 수행할 수 있게 되었기 때문이었다. 이는 기존의 이미 vulnerable하고 안전이 보장 되지 않는 험악한 NORMAL WORLD에서 전적으로 보안 장치들이 운용되어야 했던 상황에서의 엄청난 발전이었다.

보안의 많은 양상들은 전쟁에 비유할 수 있다. 이전의 SECURE WORLD가 없는 모델은 보안 메커니즘들이 전쟁터에 그대로 노출 되어 있어서, 자신들도 총을 맞고 무력화 될 수 있는 형태였다면, 가상화를 통해서 SECURE WORLD와 NORMAL WORLD 사이가 철저하게 분리된 모델은 마치 드론 파일럿이 원격으로 드론들을 조종해서 전쟁을 치르는 것에 비유할 수 있다. 드론 자체는 격추되거나 파괴 될 수 있겠지만, 드론 파일럿은 안전하고, 새로운 드론을 띄워서 추가 공격을 진행할 수도 있다. 어쨌든 NORMAL WORLD가 망가져도 최종 방어선인 SECURE WORLD를 통해서 수많은 탐지 작업, 복구 작업 들을 실시할 수 있는 것들은 엄청난 발전이라고 볼 수 있다.

가상화를 통한 보안은 PC 세계에서도 지금 가장 hot한 주제라고 볼 수 있다. 윈도우즈 세계에서도 커널이라는 전장에서 보안 메커니즘과 익스플로잇이 맞짱을 떠온 오랜 역사가 있는데, 결론은 항상 익스플로잇이 처음에는 지는 것 같아도 시간이 지나면 본질적으로 익스플로잇은 항상 보안 장치의 헛점을 언젠가는 발견하게 되고, 그것을 이용하게 된다는 것이다. 수많은 우리가 알고 있는 mitigation들은 사실 RW primitives만으로 쉽게 무력화할 수 있는 길이 열리게 되고, 또한 각 오용되는 여러 커널 구조체에 대한 온갖 sanity check 떡칠도 결국은 exploit이 이길수 밖에 없는 구조이다. 가상화가 없는 상태에서는 보안은 본질적으로 지는 게임을 하고 있다고 생각한다.

그러한 면에서 KNOX와 RKP는 혁신적이다. 다만, 한가지 이렇게 드론을 조종하듯이 아주 안락한 의자에 앉아서 SECURE WORLD에서 보안을 하더라도 본질적으로 전쟁 자체는 NORMAL WORLD에서 일어 날 수 밖에 없다. 드론이 추락해도 파일럿은 죽지 않지만, 추락한 드론으로 인한 방어막이 뚫리는 것은 본질적으로 같다. 어택 서피스가 획기적으로 줄어 들지만, 본질적으로 기존 보안 모델과 exploit 사이의 군비 경쟁(arms race)적인 요소가 완전히 사라지지는 않는다.


이 토크에서는 이러한 KNOX라는 철옹성을 어떻게 뚫을 것인가. 거기에 더해서 PXN이라는 안드로이드에 탑재된 기본 커널 익스플로잇 방어 장치를 어떻게 우회할 것인가에 대해서 논의한다. KNOX는 그 동안 많이 선방해 왔지만, 본질적으로 방어장치는 100개의 방어 지점에서 1개만 실패하면 전체의 방어 모델이 무너지는 성질이 있어서, 항상 어느 순간에는 bypass가 되어 오는 히스토리를 가지고 있다.

어떻게 보면, 이러한 익스플로잇 방법론을 배우는 것이 어떠한 의미를 가지는 가에 대해서 의문을 가질 수 있다. 하지만, 보안의 많은 다른 필드들은 서로간의 유사성을 가진다. 군비 경쟁 처럼 막고, 뚫리는 과정을 거치는 패턴들이 비슷하기도 하고, 결국 찾아 가는 서로간의 최적화된 보안 모델 또한 비슷 비슷한 곳을 향해서 가는 경향도 있다. 이러한 유사성은 모바일과 PC 사이의 관계 뿐만 아니라. 자신이 방어해야하는 어떠한 도메인에도 비슷하게 적용될 수 있다. 하다 못해 네트워크에서 업무용 네트워크와 인터넷 접속용 네트워크를 분리하려는 경향성 자체도 사실 Hypervisor나 TrustZone을 통해서 위험 지역과 안전 지역을 분리하려는 운영체제와 플랫폼의 노력과도 너무 닮았다. 또한 다만 하나의 single point of failure를 통해서 전체의 보안 모델이 순식간에 무너지는 그러한 양상도 많이 닮았다. 이러한 측면에서 KNOX와 KNOX bypass에 대해서 배우는 것은 단지 모바일 위협에 대한 것만은 아니다.

아무쪼록 이 세션을 통해서 현재의 모바일 환경, 특히 안드로이드 환경에서의 보안에 대해서 인사이트를 얻어 갈 수 있기를 바란다.

참치콘 정보는 다음 링크를 참조하기를 바란다.
https://ohjeongwook.com/2019/04/25/chamchicon-season-1-information/

Leave a Reply