[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론GangSeok Lee
2013 CodeEngn Conference 09
MS 윈도우의 원데이 패치에 대해서 분석 및 접근 방법을 살펴본다. 또한, 최근에 나온 원데이 취약점 패치 분석을 진행하며 필요한 팁에 대해서 알아보고자 한다.
http://codeengn.com/conference/09
http://codeengn.com/conference/archive
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다GangSeok Lee
2014 CodeEngn Conference 10
열혈 취약점 헌터들의 고분군투기!
취약점을 찾게되면 어떤 일이 벌어질까? 급전이 필요한 외롭고 찌질한 대한민국 해커들의 급전을 위한 취약점 찾기 여행기. 과연 우리는 취약점을 찾고 급전을 만들어 외롭고 찌질한 이 상황을 타개할 수 있을 것인가?
http://codeengn.com/conference/10
http://codeengn.com/conference/archive
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론GangSeok Lee
2013 CodeEngn Conference 09
MS 윈도우의 원데이 패치에 대해서 분석 및 접근 방법을 살펴본다. 또한, 최근에 나온 원데이 취약점 패치 분석을 진행하며 필요한 팁에 대해서 알아보고자 한다.
http://codeengn.com/conference/09
http://codeengn.com/conference/archive
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다GangSeok Lee
2014 CodeEngn Conference 10
열혈 취약점 헌터들의 고분군투기!
취약점을 찾게되면 어떤 일이 벌어질까? 급전이 필요한 외롭고 찌질한 대한민국 해커들의 급전을 위한 취약점 찾기 여행기. 과연 우리는 취약점을 찾고 급전을 만들어 외롭고 찌질한 이 상황을 타개할 수 있을 것인가?
http://codeengn.com/conference/10
http://codeengn.com/conference/archive
2014 CodeEngn Conference 11
웹브라우저 구조에 따른 자바스크립트 난독화 알아보기
이제는 인터넷 없이 생활조차 하기 힘든 세상으로 킬러 어플리케이션로 자리잡았다. 이러한 인터넷 환경에서 웹 사이트 방문만으로 악성코드에 감염 될 수 있다. 이 공격을 드라이브-바이 다운로드 (Drive-By Download)로 불리며, 웹 해킹, 소프트웨어 취약점, 악성코드를 같이 사용하는 공격 기술이다. 그리고 공격에 사용되는 별개의 기술들을 하나로 묶어 주는 것이 자바스크립트로 탐지와 분석을 어렵게 하기위해 난독화를 사용한다. 그러면, 왜 자바스크립트 난독화가 생길 수 있는지 브라우저 컴포넌트 구조를 통해 알아보고, 종류에 대해 알아본다. 그리고 자바스크립트 난독화를 해제하기 위한 방법론에 대해서도 알아본다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KOGangSeok Lee
2014 CodeEngn Conference 11
IE 원데이로 시작하는 실전 익스플로잇!
BOF, FSB, UAF 등의 메모리 커럽션 취약점을 워게임, CTF 통해서 배우게 되지만 비교적 더 낮은 난이도에도 불구하고 실제 상용 프로그램에 대해서는 막연한 느낌뿐인 학생들이 많은 것 같다. 웹브라우저에서 발견되는 취약점 중 가장 흔한 UAF에 대해 설명하고 비교적 최신에 발견된 CVE-2014-0322, CVE-2014-1776 두가지 전형적인 IE 브라우저 UAF 취약점을 익스플로잇하는 방법을 설명하려고 한다. 추후 사례로 소개되는 두 가지 취약점에 대해 직접 학습이 가능하도록 단계별 튜토리얼을 별도 제공하고자한다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
전체목차: https://netpple.github.io/docs/make-container-without-docker/
pid namespace는 컨테이너 안에서 독자적인 "process tree" / "process id 체계"를 제공합니다. 어떻게 가능한 것일까요? 이를 이해하기 위하여 proc filesystem과 pid 쳬계에 대해서 얘기합니다. 그리고 프로세스 트리의 최상위인 특별한 프로세스 pid1 에 대하여도 다룹니다
2014 CodeEngn Conference 11
웹브라우저 구조에 따른 자바스크립트 난독화 알아보기
이제는 인터넷 없이 생활조차 하기 힘든 세상으로 킬러 어플리케이션로 자리잡았다. 이러한 인터넷 환경에서 웹 사이트 방문만으로 악성코드에 감염 될 수 있다. 이 공격을 드라이브-바이 다운로드 (Drive-By Download)로 불리며, 웹 해킹, 소프트웨어 취약점, 악성코드를 같이 사용하는 공격 기술이다. 그리고 공격에 사용되는 별개의 기술들을 하나로 묶어 주는 것이 자바스크립트로 탐지와 분석을 어렵게 하기위해 난독화를 사용한다. 그러면, 왜 자바스크립트 난독화가 생길 수 있는지 브라우저 컴포넌트 구조를 통해 알아보고, 종류에 대해 알아본다. 그리고 자바스크립트 난독화를 해제하기 위한 방법론에 대해서도 알아본다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KOGangSeok Lee
2014 CodeEngn Conference 11
IE 원데이로 시작하는 실전 익스플로잇!
BOF, FSB, UAF 등의 메모리 커럽션 취약점을 워게임, CTF 통해서 배우게 되지만 비교적 더 낮은 난이도에도 불구하고 실제 상용 프로그램에 대해서는 막연한 느낌뿐인 학생들이 많은 것 같다. 웹브라우저에서 발견되는 취약점 중 가장 흔한 UAF에 대해 설명하고 비교적 최신에 발견된 CVE-2014-0322, CVE-2014-1776 두가지 전형적인 IE 브라우저 UAF 취약점을 익스플로잇하는 방법을 설명하려고 한다. 추후 사례로 소개되는 두 가지 취약점에 대해 직접 학습이 가능하도록 단계별 튜토리얼을 별도 제공하고자한다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
전체목차: https://netpple.github.io/docs/make-container-without-docker/
pid namespace는 컨테이너 안에서 독자적인 "process tree" / "process id 체계"를 제공합니다. 어떻게 가능한 것일까요? 이를 이해하기 위하여 proc filesystem과 pid 쳬계에 대해서 얘기합니다. 그리고 프로세스 트리의 최상위인 특별한 프로세스 pid1 에 대하여도 다룹니다
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
머신러닝 및 데이터 과학 분야의 컴퓨팅 수요는 해가 갈수록 급증하고 있습니다. 이와 더불어 분산처리 기술, 데이터 파이프라이닝 및 개발 환경 스택 관리 등의 관련된 다양한 이슈들 또한 엄청나게 늘어나고 있습니다. 머신러닝 모델의 기하급수적인 모델 복잡도 증가 추세와 마찬가지로, 모델 학습을 위한 환경 관리 또한 갈수록 복잡도가 높아지는 추세입니다.
이 세션에서는 이러한 문제를 해결하기 위해 python 언어 기반의 분산처리 스케쥴링/오케스트레이션 미들웨어 플랫폼을 개발한 4년간의 과정에서 겪은 다양한 문제들에 대해 다룹니다. 2015년 컨테이너 기반의 고밀도 분산처리 플랫폼 설계 및 프로토타이핑 과정을 PyCon KR에서 발표한 이후, 실제 구현 및 오픈소스화, 안정화를 거치며 겪은 다양한 기술적/비기술적 문제들에 대한 경험을 공유합니다.
기술적으로는 최근 몇 년 간의 클러스터 플랫폼 관련 기술의 진보와 함께 탄생한 다양한 도구들과, 이러한 도구들을 python 기반으로 엮어내기 위해 사용하고 개발한 다양한 오픈소스들을 다룹니다. Python 기반의 컨테이너 스케쥴링 및 오케스트레이션 과정의 구현과, 다양한 프로그래밍 언어로 만든 SDK를 graphQL을 이용하여 연동하는 과정에서의 몇몇 유의점을 설명합니다. 아울러 python 기반의 SDK를 다양한 언어로 포팅했던 경험을 간단하게 안내합니다.
플랫폼을 개발하는 중 등장한 TensorFlow, PyTorch 등의 다양한 머신러닝 프레임워크들을 도입하며 겪은 문제와 해결 과정에 대해서도 나눕니다. 연구 분야에는 Python 2.7 기반의 프레임워크들이 여전히 많습니다. 이러한 프레임워크 및 라이브러리의 지원을 위하여 Python 2 기반의 프레임워크와 Python 3.7로 구현한 컨테이너 인터페이스를 단일 컨테이너 환경에 중복 빌드 및 상호 간섭 없이 공존시키기 위해 개발한 아이디어를 소개합니다.
마지막으로 Python 기반의 프레임워크를 개발, 배포 및 상용화 하는 과정에서 겪은 다양한 어려움을 소개합니다. 솔루션을 배포 및 보급할 때 겪는 다양한 런타임, 하드웨어 환경 및 개인 정보 보호를 위한 폐쇄망 대상의 디플로이 등에 대응하기 위하여 Python 응용프로그램을 단독 실행용으로 패키징하는 과정에서 겪은 팁들을 설명합니다. 또한 GUI 빌드 및 Python, Go 및 C++을 함께 사용한 드라이버 가상화 레이어 개발 등의 내용도 살짝 다룹니다.
이 슬라이드는 PyCon KR 2019의 발표 슬라이드입니다. ( https://www.pycon.kr/program/talk-detail?id=138 )
레드햇의 Etsuji Nakai 씨의 "OpenStack: Inside Out" 한글 번역본입니다.
다시 한번 좋은 문서를 공유해주신 Etsuji Nakai 씨에게 감사를 드립니다.
http://www.slideshare.net/enakai/open-stack-insideoutv10
4. Section
0x00. 루팅?
https://g.co/ABH
▶ 안드로이드 기기의 UID=0 권한을 가질 수 있게 도와주는 root helper 를
설치하는 행위
▶ 이를 통해, 앱이 원래대로라면 가질 수 없는 UID=0 권한을 획득할 수 있음
▶ 하지만 잠재적인 보안 이슈를 이유로, 많은 금융 앱들이 루트된 기기에서
동작을 거부함
▶ 이를 동작 가능하게 해 보자
perillamint Hideroot August 17, 2016 4 / 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
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
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
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
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
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