SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Hideroot
LKM 루트킷 기술을 활용한 안드이로이드 루팅 탐지 무력화
perillamint Hideroot August 17, 2016 1 / 39
Section
Index
루팅?
루팅 탐지와 무력화
Rootkit
LKM 루트킷 작성
은닉 코드 구현
시연
주의해야 할 것은 su 바이너리가 아니다
끝
References
perillamint Hideroot August 17, 2016 2 / 39
Section
0x00. 루팅?
https://g.co/ABH
perillamint Hideroot August 17, 2016 3 / 39
Section
0x00. 루팅?
https://g.co/ABH
▶ 안드로이드 기기의 UID=0 권한을 가질 수 있게 도와주는 root helper 를
설치하는 행위
▶ 이를 통해, 앱이 원래대로라면 가질 수 없는 UID=0 권한을 획득할 수 있음
▶ 하지만 잠재적인 보안 이슈를 이유로, 많은 금융 앱들이 루트된 기기에서
동작을 거부함
▶ 이를 동작 가능하게 해 보자
perillamint Hideroot August 17, 2016 4 / 39
Section
Index
루팅?
루팅 탐지와 무력화
Rootkit
LKM 루트킷 작성
은닉 코드 구현
시연
주의해야 할 것은 su 바이너리가 아니다
끝
References
perillamint Hideroot August 17, 2016 5 / 39
Section
0x01. 루팅 탐지
libNSaferJNI.so
▶ 1세대: 실행 후 에러 코드 체크
▶ 2세대: /system/xbin/su 유무 체크 (I wonder why they didn’t used
PATH envar)
▶ 3세대: NDK 에서 libc 함수들을 이용해 체크
▶ 4세대: system call 을 직접 호출해 체크 (iOS 에서 관찰됨)
perillamint Hideroot August 17, 2016 6 / 39
Section
0x02. 루팅 탐지 무력화
Three Rings for the Elven-kings under the sky
▶ 1세대: 가장 초보적 - 권한 허용 거부를 누른다.
▶ 2세대: XPosed 와 같은 Java hooking library
▶ 3세대: Cydia substrate (for NDK hook)
▶ 4세대: LKM rootkit, kernel patching, etc.
▶ 혹은 가장 귀찮은 방법: 앱을 패치해서 탐지 루틴을 무력화한다.
perillamint Hideroot August 17, 2016 7 / 39
Section
Index
루팅?
루팅 탐지와 무력화
Rootkit
LKM 루트킷 작성
은닉 코드 구현
시연
주의해야 할 것은 su 바이너리가 아니다
끝
References
perillamint Hideroot August 17, 2016 8 / 39
Section
0x03. User-mode rootkit - Xposed framework
Seven for the Dwarf-lords in their halls of stone
▶ 일반 앱들에게, DalvikVM(or ART) 에 코드를 인젝션 할 수 있는 권한을
주는 프레임워크
▶ 이를 이용, Java 리플렉션을 통해 다른 앱 (특히 시스템 프레임워크) 에
코드를 주입, 기능 추가를 할 수 있음
▶ 은행 앱에 훅을 주입한다면?
▶ 2세대 루팅 탐지 우회 가능
▶ 구현체: Rootcloak (Android)
perillamint Hideroot August 17, 2016 9 / 39
Section
0x04. User-mode rootkit - Cydia Substrate
Nine for Mortal Men doomed to die
▶ 네이티브 라이브러리 훅을 제공하는 프레임워크
▶ Apple iOS 의 Cydia Substrate 의 안드로이드 포트
▶ 이를 이용하면, NDK 의 libc 콜들을 후킹 가능
▶ 은행 앱이 부르는 libc 함수들을 후킹한다면?
▶ 3세대 탐지 우회 가능
▶ 구현체: Rootcloak Plus (Android), kBankTweak (iOS)
perillamint Hideroot August 17, 2016 10 / 39
Section
0x05. Kernel mode rootkit
One for the Dark Lord on his dark throne in the Land of Mordor
▶ 직접적인 커널 변형.
▶ Ring 0 권한에서 실행
▶ 커널 내에서, 커널의 메모리 공간을 액세스하며, 이를 수정할 수 있음.
▶ 이를 이용한 system call 후킹을 통해, 유저랜드에 보여지는 것들을
조정할 수 있음.
▶ 일반적인 앱들은 같은 권한을 가질 수 없음 ‒ 커널 코드 인젝션을
위해서는 루트 권한 필요
▶ 인-커널 코드가 자신을 Ring-3 어플리케이션으로부터 숨기고자 하면,
효과적으로 자기 자신을 숨길 수 있음.
▶ 4세대 탐지 우회 가능
▶ 구현체: Hideroot PoC (Android (Linux kernel)), HideJB (iOS)
perillamint Hideroot August 17, 2016 11 / 39
Section
Index
루팅?
루팅 탐지와 무력화
Rootkit
LKM 루트킷 작성
은닉 코드 구현
시연
주의해야 할 것은 su 바이너리가 아니다
끝
References
perillamint Hideroot August 17, 2016 12 / 39
Section
0x06. 메모리 보호
Kernel panic - not syncing.
▶ MMU 는 단순히 가상 메모리 주소를 실제 메모리 주소로 번역하는 것
이외에도 메모리 권한 관리를 한다.
▶ sys_call_table 을 변조하거나, 함수 프롤로그를 패치하기 위해서는
경우에 따라, 메모리 권한 변경이 필요할 수 있다.
▶ 몇몇 제조사 커널은, 이를 위한 함수를 제공하지만
(mem_text_address_writable), 바닐라 커널에는 이가 존재하지
않는다
▶ 이에, 아키텍쳐별로, MMU 를 조작하기 위한 코드가 필요하다.
perillamint Hideroot August 17, 2016 13 / 39
Section
0x07. 멀티-레벨 페이징
Walk through tables
▶ MMU 는 메모리를 효율적으로(적은 메모리를 이용하여) 관리하기 위해,
다단계 페이징을 사용한다
▶ Qualcomm Snapdragon 800 의 경우 3단계 페이징이 사용된다.
▶ 페이지의 속성을 변경하기 위해서는, pgd → pud → pmd 순으로,
페이지 테이블을 찾아간 뒤
▶ PMD_SECT_APX 플래그를 지워주면 된다.
perillamint Hideroot August 17, 2016 14 / 39
Section
0x08. 시스템 콜 후킹 - sys_call_table
▶ 시스템 콜이 불리우면, 플랫폼 종속적인 부분을 거쳐, 최종적으로
sys_call_table 에 도착한다
▶ sys_call_table 에 들어있는 함수 포인터 주소를 조작하면, 시스템 콜이
불렸을 때, 원하는 함수를 실행하게 할 수 있다.
▶ sys_call_table 의 메모리 보호를 해제했다면, 이의 내용을 변경할 수
있다.
▶ 이를 이용해, 시스템 콜들을 후킹할 수 있다.
perillamint Hideroot August 17, 2016 15 / 39
Section
0x08. 시스템 콜 후킹 - sys_call_table
[11]
perillamint Hideroot August 17, 2016 16 / 39
Section
0x09. 시스템 콜 후킹 - code hot patching
*Uptime* funk
▶ 폰 노이만 구조 컴퓨터에서는, homoiconicity 가 성립한다.
▶ Code is data, data is code.
▶ 이에, 함수 프롤로그를 패치해서, 후킹 코드를 주입하면, 함수의 흐름을
돌릴 수 있다.
▶ 구현 사례: Ksplice (Oracle), kGraft (SUSE), kpatch (Red Hat),
KProbes (Linux)
perillamint Hideroot August 17, 2016 17 / 39
Section
0x09. 시스템 콜 후킹 - code hot patching
*Uptime* funk
[10]
perillamint Hideroot August 17, 2016 18 / 39
Section
0x0A. Code hot patching - in the wild
Non-ideal world
▶ Kpatch나 MS Windows Hotfix 와 같은 솔루션은, 함수 프롤로그에
NOP sled 와 같은 여분 공간을 둠
▶ 하지만, Kpatch 미 대응 커널은, 핫패칭에 편리한 부분을 두지 않음.
▶ 이를 패치하기 위해서는, Detour 펑션을 활용해야 함
perillamint Hideroot August 17, 2016 19 / 39
Section
0x0A. Code hot patching - in the wild
Non-ideal world
[9]
perillamint Hideroot August 17, 2016 20 / 39
Section
0x0B. Code hot patching - CPU cache
▶ 코드 핫 패칭을 할 시에는, 코드를 수정 후, dcache 와 icache 를
동기화시켜주는 작업이 필요하다.
▶ 이를 위해서는, Level of Unification 까지 캐시를 flush 해, 모든 코어가
패치된 메모리를 같이 공유할 수 있도록 해야 한다.
▶ ARM infocenter 에서 찾을 수 있던 어셈 코드[1, 7]로 테스트 했을 시
▶ Exynos 4412 에서는 잘 동작했지만, Snapdragon 800 에서는
동작하지 않았음
▶ 이를 해결하기 위한 작업이 필요하다. (May require NDA’ed
Snapdragon datasheet)
perillamint Hideroot August 17, 2016 21 / 39
Section
Index
루팅?
루팅 탐지와 무력화
Rootkit
LKM 루트킷 작성
은닉 코드 구현
시연
주의해야 할 것은 su 바이너리가 아니다
끝
References
perillamint Hideroot August 17, 2016 22 / 39
Section
0x0C. 파일 은닉
Nazgûl
▶ open(2), stat64(2), access(2), getdents64(2) 와 같은 시스템 콜을
후킹하면, 원하는 파일을 은닉할 수 있다.
▶ 이를 이용, Superuser.apk, /system/xbin/su 등을 특정 UID 에게만
숨기고, 나머지에는 노출한다면?
▶ → 루팅 탐지 우회 가능
perillamint Hideroot August 17, 2016 23 / 39
Section
0x0C. 파일 은닉
Nazgûl
▶ 안드로이드의 앱은 서로 다른 UID 를 갖는다
▶ → 커널 세계에서, UID 를 이용해 앱을 구별하자!
perillamint Hideroot August 17, 2016 24 / 39
Section
0x0C. 파일 은닉
Nazgûl
#include <linux/module.h>
#include <linux/cred.h>
int hide_uid[100];
unsigned int hide_uid_count=0;
module_param_array(hide_uid, int, &hide_uid_count, 0644);
int check_hide_uid(void)
{
int i;
for (i = 0; i < hide_uid_count; i++)
{
if (hide_uid[i] == current_uid())
return 1;
}
return 0;
}
perillamint Hideroot August 17, 2016 25 / 39
Section
0x0C. 파일 은닉
Nazgûl
long (*orig_sys_access) (const char __user * filename, int mode);
asmlinkage long my_sys_access(const char __user * filename, int mode)
{
int fake = check_hide_uid();
if (fake != 0 && check_hide_file(filename))
return -ENOENT;
return orig_sys_access(filename, mode);
}
perillamint Hideroot August 17, 2016 26 / 39
Section
0x0D. TBDs
//TODO: Do this
▶ mmuhack.c 의 AMD64, AArch64 로의 포팅
▶ Qualcomm Snapdragon 이외의 다른 프로세서 (ex. HiSilicon Kirin,
AllWinner, Samsung Exynos, etc) 에서의 테스트
perillamint Hideroot August 17, 2016 27 / 39
Section
Index
루팅?
루팅 탐지와 무력화
Rootkit
LKM 루트킷 작성
은닉 코드 구현
시연
주의해야 할 것은 su 바이너리가 아니다
끝
References
perillamint Hideroot August 17, 2016 28 / 39
Section
0x0E. 스크린샷
금감원이 이 짤을 싫어합니다.
perillamint Hideroot August 17, 2016 29 / 39
Section
0x0E. 스크린샷
금감원이 이 짤을 싫어합니다.
perillamint Hideroot August 17, 2016 30 / 39
Section
0x0E. 스크린샷
금감원이 이 짤을 싫어합니다.
perillamint Hideroot August 17, 2016 31 / 39
Section
0x0F. 시연
This slide intentionally left blank
perillamint Hideroot August 17, 2016 32 / 39
Section
0x10. GitHub repo
https://github.com/perillamint/hideroot
perillamint Hideroot August 17, 2016 33 / 39
Section
Index
루팅?
루팅 탐지와 무력화
Rootkit
LKM 루트킷 작성
은닉 코드 구현
시연
주의해야 할 것은 su 바이너리가 아니다
끝
References
perillamint Hideroot August 17, 2016 34 / 39
Section
0x11. (su 바이너리 존재 유무보다) 진짜로 위험한 것들
https://cve.mitre.org/
▶ 시장에 돌아다니는 EOL 장치들과 Outdated 장치들
▶ 취약한 장치를 노리는 One-day 익스플로잇들[8]
▶ 중국산 검찰청.apk 가 Futex exploit[2], QCOM kernel
exploit[3, 4, 5, 6] 등을 구현한다면?
▶ 이러한 것들을 현재의 파일-기반 루팅 탐지가 검출해낼 수 있을까?
perillamint Hideroot August 17, 2016 35 / 39
Section
Index
루팅?
루팅 탐지와 무력화
Rootkit
LKM 루트킷 작성
은닉 코드 구현
시연
주의해야 할 것은 su 바이너리가 아니다
끝
References
perillamint Hideroot August 17, 2016 36 / 39
Section
0x12. 끝
reboot(0xFEE1DEAD, 672274793, 0x4321FEDC);
perillamint Hideroot August 17, 2016 37 / 39
Section
Index
루팅?
루팅 탐지와 무력화
Rootkit
LKM 루트킷 작성
은닉 코드 구현
시연
주의해야 할 것은 su 바이너리가 아니다
끝
References
perillamint Hideroot August 17, 2016 38 / 39
Section
ARM.
ARM926EJ-S™ Technical Reference Manual, 2008.
CVE-2014-3153.
Available from MITRE, CVE-ID CVE-2014-3153., 2014.
CVE-2016-2059.
Available from MITRE, CVE-ID CVE-2016-2059., 2016.
CVE-2016-2503.
Available from MITRE, CVE-ID CVE-2016-2503., 2016.
CVE-2016-2504.
Available from MITRE, CVE-ID CVE-2016-2504., 2016.
CVE-2016-5340.
Available from MITRE, CVE-ID CVE-2016-5340., 2016.
e. a. Linus Torvalds.
cache-v7.s.
perillamint Hideroot August 17, 2016 38 / 39
Section
http:
//lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L82,
2016.
Pierluigi Paganini.
Godless is a new strain of android malware recently spotted by
experts from trend micro that leverages multiple rooting
exploits.
http://securityaffairs.co/wordpress/48633/breaking-news/
godless-android-malware.html, 2016.
Sameer Patil.
Code injection and api hooking techniques.
http://nagareshwar.securityxploded.com/2014/03/20/
code-injection-and-api-hooking-techniques/, 2014.
V4711.
Linux kernel live patching kpatch.svg.
https://upload.wikimedia.org/wikipedia/commons/2/27/Linux_
kernel_live_patching_kpatch.svg, 2014.
perillamint Hideroot August 17, 2016 38 / 39
Section
新城 靖.
メモリ管理、アドレス空間、ページテーブル.
http:
//www.coins.tsukuba.ac.jp/~yas/coins/os2-2010/2011-01-25/,
2011.
perillamint Hideroot August 17, 2016 39 / 39
Section
0x13. License
Copyright (C) 2016 perillamint
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
License, Version 1.3 or any later version published by the Free
Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no
Back-Cover Texts. A copy of the license is included in the section
entitled “GNU Free Documentation License”.
Repository address:
https://github.com/perillamint/inc0gnito_2016_hideroot
perillamint Hideroot August 17, 2016 39 / 39

Mais conteúdo relacionado

Mais procurados

16.02.27 해킹캠프 오픈 소스 최우석
16.02.27 해킹캠프 오픈 소스 최우석16.02.27 해킹캠프 오픈 소스 최우석
16.02.27 해킹캠프 오픈 소스 최우석KISEC
 
[무료] 시스템해킹(해커스쿨문제풀이) 공개버전
[무료] 시스템해킹(해커스쿨문제풀이) 공개버전[무료] 시스템해킹(해커스쿨문제풀이) 공개버전
[무료] 시스템해킹(해커스쿨문제풀이) 공개버전James (SeokHun) Hwang
 
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?GangSeok Lee
 
Codegate 2013 Junior - Music Player Exploit
Codegate 2013 Junior - Music Player ExploitCodegate 2013 Junior - Music Player Exploit
Codegate 2013 Junior - Music Player Exploitsweetchip
 
16.02.27 해킹캠프 오픈_소스_최우석_ver0.3
16.02.27 해킹캠프 오픈_소스_최우석_ver0.316.02.27 해킹캠프 오픈_소스_최우석_ver0.3
16.02.27 해킹캠프 오픈_소스_최우석_ver0.3KISEC
 
System hacking basics
System hacking basicsSystem hacking basics
System hacking basicsgnomekr
 
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KOGangSeok Lee
 
Codegate 2014 - Bug Hunting Challenge [Track0]
Codegate 2014 - Bug Hunting Challenge [Track0]Codegate 2014 - Bug Hunting Challenge [Track0]
Codegate 2014 - Bug Hunting Challenge [Track0]sweetchip
 
Memory corruption stack
Memory corruption stackMemory corruption stack
Memory corruption stackcodevania
 
Inc0gnito fuzzing for_fun_sweetchip
Inc0gnito fuzzing for_fun_sweetchipInc0gnito fuzzing for_fun_sweetchip
Inc0gnito fuzzing for_fun_sweetchipsweetchip
 

Mais procurados (20)

16.02.27 해킹캠프 오픈 소스 최우석
16.02.27 해킹캠프 오픈 소스 최우석16.02.27 해킹캠프 오픈 소스 최우석
16.02.27 해킹캠프 오픈 소스 최우석
 
02.모의해킹전문가되기
02.모의해킹전문가되기02.모의해킹전문가되기
02.모의해킹전문가되기
 
[무료] 시스템해킹(해커스쿨문제풀이) 공개버전
[무료] 시스템해킹(해커스쿨문제풀이) 공개버전[무료] 시스템해킹(해커스쿨문제풀이) 공개버전
[무료] 시스템해킹(해커스쿨문제풀이) 공개버전
 
Quick bcc
Quick bccQuick bcc
Quick bcc
 
자연어5 | 1차강의
자연어5 | 1차강의자연어5 | 1차강의
자연어5 | 1차강의
 
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
 
파이썬을 활용한 자연어 분석 - 2차
파이썬을 활용한 자연어 분석 - 2차파이썬을 활용한 자연어 분석 - 2차
파이썬을 활용한 자연어 분석 - 2차
 
Codegate 2013 Junior - Music Player Exploit
Codegate 2013 Junior - Music Player ExploitCodegate 2013 Junior - Music Player Exploit
Codegate 2013 Junior - Music Player Exploit
 
자연어4 | 1차강의
자연어4 | 1차강의자연어4 | 1차강의
자연어4 | 1차강의
 
16.02.27 해킹캠프 오픈_소스_최우석_ver0.3
16.02.27 해킹캠프 오픈_소스_최우석_ver0.316.02.27 해킹캠프 오픈_소스_최우석_ver0.3
16.02.27 해킹캠프 오픈_소스_최우석_ver0.3
 
서울 R&D 캠퍼스 자연어 수업자료
서울 R&D 캠퍼스 자연어 수업자료서울 R&D 캠퍼스 자연어 수업자료
서울 R&D 캠퍼스 자연어 수업자료
 
System hacking basics
System hacking basicsSystem hacking basics
System hacking basics
 
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
 
Codegate 2014 - Bug Hunting Challenge [Track0]
Codegate 2014 - Bug Hunting Challenge [Track0]Codegate 2014 - Bug Hunting Challenge [Track0]
Codegate 2014 - Bug Hunting Challenge [Track0]
 
파이썬과 자연어 4 | word/doc2vec
파이썬과 자연어 4 | word/doc2vec파이썬과 자연어 4 | word/doc2vec
파이썬과 자연어 4 | word/doc2vec
 
파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud
 
Memory corruption stack
Memory corruption stackMemory corruption stack
Memory corruption stack
 
Inc0gnito fuzzing for_fun_sweetchip
Inc0gnito fuzzing for_fun_sweetchipInc0gnito fuzzing for_fun_sweetchip
Inc0gnito fuzzing for_fun_sweetchip
 
파이썬과 자연어 5 | 딥러닝
파이썬과 자연어 5 | 딥러닝파이썬과 자연어 5 | 딥러닝
파이썬과 자연어 5 | 딥러닝
 
파이썬을 활용한 자연어 분석
파이썬을 활용한 자연어 분석파이썬을 활용한 자연어 분석
파이썬을 활용한 자연어 분석
 

Semelhante a Hideroot - Inc0gnito 2016

(망고210& Gingerbread) u-boot 컴파일 및 다운로드
(망고210& Gingerbread) u-boot 컴파일 및 다운로드(망고210& Gingerbread) u-boot 컴파일 및 다운로드
(망고210& Gingerbread) u-boot 컴파일 및 다운로드종인 전
 
도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespaceSam Kim
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoMario Cho
 
망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법종인 전
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340Samsung Electronics
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명Peter YoungSik Yun
 
Android+init+process
Android+init+processAndroid+init+process
Android+init+processHong Jae Kwon
 
리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1Sangho Park
 
안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법chon2010
 
[slideshare]k8s.pptx
[slideshare]k8s.pptx[slideshare]k8s.pptx
[slideshare]k8s.pptxssuserb8551e
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집Daegwon Kim
 
망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9종인 전
 
망고100 보드로 놀아보자 6
망고100 보드로 놀아보자 6망고100 보드로 놀아보자 6
망고100 보드로 놀아보자 6종인 전
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법NAVER D2
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기Jaehwa Park
 

Semelhante a Hideroot - Inc0gnito 2016 (20)

(망고210& Gingerbread) u-boot 컴파일 및 다운로드
(망고210& Gingerbread) u-boot 컴파일 및 다운로드(망고210& Gingerbread) u-boot 컴파일 및 다운로드
(망고210& Gingerbread) u-boot 컴파일 및 다운로드
 
도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
 
망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
Android+init+process
Android+init+processAndroid+init+process
Android+init+process
 
리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1
 
안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법
 
[slideshare]k8s.pptx
[slideshare]k8s.pptx[slideshare]k8s.pptx
[slideshare]k8s.pptx
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9
 
망고100 보드로 놀아보자 6
망고100 보드로 놀아보자 6망고100 보드로 놀아보자 6
망고100 보드로 놀아보자 6
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기
 

Hideroot - Inc0gnito 2016

  • 1. Hideroot LKM 루트킷 기술을 활용한 안드이로이드 루팅 탐지 무력화 perillamint Hideroot August 17, 2016 1 / 39
  • 2. Section Index 루팅? 루팅 탐지와 무력화 Rootkit LKM 루트킷 작성 은닉 코드 구현 시연 주의해야 할 것은 su 바이너리가 아니다 끝 References perillamint Hideroot August 17, 2016 2 / 39
  • 4. Section 0x00. 루팅? https://g.co/ABH ▶ 안드로이드 기기의 UID=0 권한을 가질 수 있게 도와주는 root helper 를 설치하는 행위 ▶ 이를 통해, 앱이 원래대로라면 가질 수 없는 UID=0 권한을 획득할 수 있음 ▶ 하지만 잠재적인 보안 이슈를 이유로, 많은 금융 앱들이 루트된 기기에서 동작을 거부함 ▶ 이를 동작 가능하게 해 보자 perillamint Hideroot August 17, 2016 4 / 39
  • 5. Section Index 루팅? 루팅 탐지와 무력화 Rootkit LKM 루트킷 작성 은닉 코드 구현 시연 주의해야 할 것은 su 바이너리가 아니다 끝 References perillamint Hideroot August 17, 2016 5 / 39
  • 6. Section 0x01. 루팅 탐지 libNSaferJNI.so ▶ 1세대: 실행 후 에러 코드 체크 ▶ 2세대: /system/xbin/su 유무 체크 (I wonder why they didn’t used PATH envar) ▶ 3세대: NDK 에서 libc 함수들을 이용해 체크 ▶ 4세대: system call 을 직접 호출해 체크 (iOS 에서 관찰됨) perillamint Hideroot August 17, 2016 6 / 39
  • 7. Section 0x02. 루팅 탐지 무력화 Three Rings for the Elven-kings under the sky ▶ 1세대: 가장 초보적 - 권한 허용 거부를 누른다. ▶ 2세대: XPosed 와 같은 Java hooking library ▶ 3세대: Cydia substrate (for NDK hook) ▶ 4세대: LKM rootkit, kernel patching, etc. ▶ 혹은 가장 귀찮은 방법: 앱을 패치해서 탐지 루틴을 무력화한다. perillamint Hideroot August 17, 2016 7 / 39
  • 8. Section Index 루팅? 루팅 탐지와 무력화 Rootkit LKM 루트킷 작성 은닉 코드 구현 시연 주의해야 할 것은 su 바이너리가 아니다 끝 References perillamint Hideroot August 17, 2016 8 / 39
  • 9. Section 0x03. User-mode rootkit - Xposed framework Seven for the Dwarf-lords in their halls of stone ▶ 일반 앱들에게, DalvikVM(or ART) 에 코드를 인젝션 할 수 있는 권한을 주는 프레임워크 ▶ 이를 이용, Java 리플렉션을 통해 다른 앱 (특히 시스템 프레임워크) 에 코드를 주입, 기능 추가를 할 수 있음 ▶ 은행 앱에 훅을 주입한다면? ▶ 2세대 루팅 탐지 우회 가능 ▶ 구현체: Rootcloak (Android) perillamint Hideroot August 17, 2016 9 / 39
  • 10. Section 0x04. User-mode rootkit - Cydia Substrate Nine for Mortal Men doomed to die ▶ 네이티브 라이브러리 훅을 제공하는 프레임워크 ▶ Apple iOS 의 Cydia Substrate 의 안드로이드 포트 ▶ 이를 이용하면, NDK 의 libc 콜들을 후킹 가능 ▶ 은행 앱이 부르는 libc 함수들을 후킹한다면? ▶ 3세대 탐지 우회 가능 ▶ 구현체: Rootcloak Plus (Android), kBankTweak (iOS) perillamint Hideroot August 17, 2016 10 / 39
  • 11. Section 0x05. Kernel mode rootkit One for the Dark Lord on his dark throne in the Land of Mordor ▶ 직접적인 커널 변형. ▶ Ring 0 권한에서 실행 ▶ 커널 내에서, 커널의 메모리 공간을 액세스하며, 이를 수정할 수 있음. ▶ 이를 이용한 system call 후킹을 통해, 유저랜드에 보여지는 것들을 조정할 수 있음. ▶ 일반적인 앱들은 같은 권한을 가질 수 없음 ‒ 커널 코드 인젝션을 위해서는 루트 권한 필요 ▶ 인-커널 코드가 자신을 Ring-3 어플리케이션으로부터 숨기고자 하면, 효과적으로 자기 자신을 숨길 수 있음. ▶ 4세대 탐지 우회 가능 ▶ 구현체: Hideroot PoC (Android (Linux kernel)), HideJB (iOS) perillamint Hideroot August 17, 2016 11 / 39
  • 12. Section Index 루팅? 루팅 탐지와 무력화 Rootkit LKM 루트킷 작성 은닉 코드 구현 시연 주의해야 할 것은 su 바이너리가 아니다 끝 References perillamint Hideroot August 17, 2016 12 / 39
  • 13. Section 0x06. 메모리 보호 Kernel panic - not syncing. ▶ MMU 는 단순히 가상 메모리 주소를 실제 메모리 주소로 번역하는 것 이외에도 메모리 권한 관리를 한다. ▶ sys_call_table 을 변조하거나, 함수 프롤로그를 패치하기 위해서는 경우에 따라, 메모리 권한 변경이 필요할 수 있다. ▶ 몇몇 제조사 커널은, 이를 위한 함수를 제공하지만 (mem_text_address_writable), 바닐라 커널에는 이가 존재하지 않는다 ▶ 이에, 아키텍쳐별로, MMU 를 조작하기 위한 코드가 필요하다. perillamint Hideroot August 17, 2016 13 / 39
  • 14. Section 0x07. 멀티-레벨 페이징 Walk through tables ▶ MMU 는 메모리를 효율적으로(적은 메모리를 이용하여) 관리하기 위해, 다단계 페이징을 사용한다 ▶ Qualcomm Snapdragon 800 의 경우 3단계 페이징이 사용된다. ▶ 페이지의 속성을 변경하기 위해서는, pgd → pud → pmd 순으로, 페이지 테이블을 찾아간 뒤 ▶ PMD_SECT_APX 플래그를 지워주면 된다. perillamint Hideroot August 17, 2016 14 / 39
  • 15. Section 0x08. 시스템 콜 후킹 - sys_call_table ▶ 시스템 콜이 불리우면, 플랫폼 종속적인 부분을 거쳐, 최종적으로 sys_call_table 에 도착한다 ▶ sys_call_table 에 들어있는 함수 포인터 주소를 조작하면, 시스템 콜이 불렸을 때, 원하는 함수를 실행하게 할 수 있다. ▶ sys_call_table 의 메모리 보호를 해제했다면, 이의 내용을 변경할 수 있다. ▶ 이를 이용해, 시스템 콜들을 후킹할 수 있다. perillamint Hideroot August 17, 2016 15 / 39
  • 16. Section 0x08. 시스템 콜 후킹 - sys_call_table [11] perillamint Hideroot August 17, 2016 16 / 39
  • 17. Section 0x09. 시스템 콜 후킹 - code hot patching *Uptime* funk ▶ 폰 노이만 구조 컴퓨터에서는, homoiconicity 가 성립한다. ▶ Code is data, data is code. ▶ 이에, 함수 프롤로그를 패치해서, 후킹 코드를 주입하면, 함수의 흐름을 돌릴 수 있다. ▶ 구현 사례: Ksplice (Oracle), kGraft (SUSE), kpatch (Red Hat), KProbes (Linux) perillamint Hideroot August 17, 2016 17 / 39
  • 18. Section 0x09. 시스템 콜 후킹 - code hot patching *Uptime* funk [10] perillamint Hideroot August 17, 2016 18 / 39
  • 19. Section 0x0A. Code hot patching - in the wild Non-ideal world ▶ Kpatch나 MS Windows Hotfix 와 같은 솔루션은, 함수 프롤로그에 NOP sled 와 같은 여분 공간을 둠 ▶ 하지만, Kpatch 미 대응 커널은, 핫패칭에 편리한 부분을 두지 않음. ▶ 이를 패치하기 위해서는, Detour 펑션을 활용해야 함 perillamint Hideroot August 17, 2016 19 / 39
  • 20. Section 0x0A. Code hot patching - in the wild Non-ideal world [9] perillamint Hideroot August 17, 2016 20 / 39
  • 21. Section 0x0B. Code hot patching - CPU cache ▶ 코드 핫 패칭을 할 시에는, 코드를 수정 후, dcache 와 icache 를 동기화시켜주는 작업이 필요하다. ▶ 이를 위해서는, Level of Unification 까지 캐시를 flush 해, 모든 코어가 패치된 메모리를 같이 공유할 수 있도록 해야 한다. ▶ ARM infocenter 에서 찾을 수 있던 어셈 코드[1, 7]로 테스트 했을 시 ▶ Exynos 4412 에서는 잘 동작했지만, Snapdragon 800 에서는 동작하지 않았음 ▶ 이를 해결하기 위한 작업이 필요하다. (May require NDA’ed Snapdragon datasheet) perillamint Hideroot August 17, 2016 21 / 39
  • 22. Section Index 루팅? 루팅 탐지와 무력화 Rootkit LKM 루트킷 작성 은닉 코드 구현 시연 주의해야 할 것은 su 바이너리가 아니다 끝 References perillamint Hideroot August 17, 2016 22 / 39
  • 23. Section 0x0C. 파일 은닉 Nazgûl ▶ open(2), stat64(2), access(2), getdents64(2) 와 같은 시스템 콜을 후킹하면, 원하는 파일을 은닉할 수 있다. ▶ 이를 이용, Superuser.apk, /system/xbin/su 등을 특정 UID 에게만 숨기고, 나머지에는 노출한다면? ▶ → 루팅 탐지 우회 가능 perillamint Hideroot August 17, 2016 23 / 39
  • 24. Section 0x0C. 파일 은닉 Nazgûl ▶ 안드로이드의 앱은 서로 다른 UID 를 갖는다 ▶ → 커널 세계에서, UID 를 이용해 앱을 구별하자! perillamint Hideroot August 17, 2016 24 / 39
  • 25. Section 0x0C. 파일 은닉 Nazgûl #include <linux/module.h> #include <linux/cred.h> int hide_uid[100]; unsigned int hide_uid_count=0; module_param_array(hide_uid, int, &hide_uid_count, 0644); int check_hide_uid(void) { int i; for (i = 0; i < hide_uid_count; i++) { if (hide_uid[i] == current_uid()) return 1; } return 0; } perillamint Hideroot August 17, 2016 25 / 39
  • 26. Section 0x0C. 파일 은닉 Nazgûl long (*orig_sys_access) (const char __user * filename, int mode); asmlinkage long my_sys_access(const char __user * filename, int mode) { int fake = check_hide_uid(); if (fake != 0 && check_hide_file(filename)) return -ENOENT; return orig_sys_access(filename, mode); } perillamint Hideroot August 17, 2016 26 / 39
  • 27. Section 0x0D. TBDs //TODO: Do this ▶ mmuhack.c 의 AMD64, AArch64 로의 포팅 ▶ Qualcomm Snapdragon 이외의 다른 프로세서 (ex. HiSilicon Kirin, AllWinner, Samsung Exynos, etc) 에서의 테스트 perillamint Hideroot August 17, 2016 27 / 39
  • 28. Section Index 루팅? 루팅 탐지와 무력화 Rootkit LKM 루트킷 작성 은닉 코드 구현 시연 주의해야 할 것은 su 바이너리가 아니다 끝 References perillamint Hideroot August 17, 2016 28 / 39
  • 29. Section 0x0E. 스크린샷 금감원이 이 짤을 싫어합니다. perillamint Hideroot August 17, 2016 29 / 39
  • 30. Section 0x0E. 스크린샷 금감원이 이 짤을 싫어합니다. perillamint Hideroot August 17, 2016 30 / 39
  • 31. Section 0x0E. 스크린샷 금감원이 이 짤을 싫어합니다. perillamint Hideroot August 17, 2016 31 / 39
  • 32. Section 0x0F. 시연 This slide intentionally left blank perillamint Hideroot August 17, 2016 32 / 39
  • 34. Section Index 루팅? 루팅 탐지와 무력화 Rootkit LKM 루트킷 작성 은닉 코드 구현 시연 주의해야 할 것은 su 바이너리가 아니다 끝 References perillamint Hideroot August 17, 2016 34 / 39
  • 35. Section 0x11. (su 바이너리 존재 유무보다) 진짜로 위험한 것들 https://cve.mitre.org/ ▶ 시장에 돌아다니는 EOL 장치들과 Outdated 장치들 ▶ 취약한 장치를 노리는 One-day 익스플로잇들[8] ▶ 중국산 검찰청.apk 가 Futex exploit[2], QCOM kernel exploit[3, 4, 5, 6] 등을 구현한다면? ▶ 이러한 것들을 현재의 파일-기반 루팅 탐지가 검출해낼 수 있을까? perillamint Hideroot August 17, 2016 35 / 39
  • 36. Section Index 루팅? 루팅 탐지와 무력화 Rootkit LKM 루트킷 작성 은닉 코드 구현 시연 주의해야 할 것은 su 바이너리가 아니다 끝 References perillamint Hideroot August 17, 2016 36 / 39
  • 37. Section 0x12. 끝 reboot(0xFEE1DEAD, 672274793, 0x4321FEDC); perillamint Hideroot August 17, 2016 37 / 39
  • 38. Section Index 루팅? 루팅 탐지와 무력화 Rootkit LKM 루트킷 작성 은닉 코드 구현 시연 주의해야 할 것은 su 바이너리가 아니다 끝 References perillamint Hideroot August 17, 2016 38 / 39
  • 39. Section ARM. ARM926EJ-S™ Technical Reference Manual, 2008. CVE-2014-3153. Available from MITRE, CVE-ID CVE-2014-3153., 2014. CVE-2016-2059. Available from MITRE, CVE-ID CVE-2016-2059., 2016. CVE-2016-2503. Available from MITRE, CVE-ID CVE-2016-2503., 2016. CVE-2016-2504. Available from MITRE, CVE-ID CVE-2016-2504., 2016. CVE-2016-5340. Available from MITRE, CVE-ID CVE-2016-5340., 2016. e. a. Linus Torvalds. cache-v7.s. perillamint Hideroot August 17, 2016 38 / 39
  • 40. Section http: //lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L82, 2016. Pierluigi Paganini. Godless is a new strain of android malware recently spotted by experts from trend micro that leverages multiple rooting exploits. http://securityaffairs.co/wordpress/48633/breaking-news/ godless-android-malware.html, 2016. Sameer Patil. Code injection and api hooking techniques. http://nagareshwar.securityxploded.com/2014/03/20/ code-injection-and-api-hooking-techniques/, 2014. V4711. Linux kernel live patching kpatch.svg. https://upload.wikimedia.org/wikipedia/commons/2/27/Linux_ kernel_live_patching_kpatch.svg, 2014. perillamint Hideroot August 17, 2016 38 / 39
  • 42. Section 0x13. License Copyright (C) 2016 perillamint Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. Repository address: https://github.com/perillamint/inc0gnito_2016_hideroot perillamint Hideroot August 17, 2016 39 / 39