커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

Similar documents
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Adobe Flash 취약점 분석 (CVE )

Linux Binary Hardening with Glibc Hyeonho Seo

PowerPoint Presentation

H3250_Wi-Fi_E.book

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

untitled

Chapter #01 Subject

1

/chroot/lib/ /chroot/etc/

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

PowerPoint 프레젠테이션

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint 프레젠테이션

Windows 8에서 BioStar 1 설치하기

설계란 무엇인가?

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint Predicates and Quantifiers.ppt

02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C

Microsoft PowerPoint - IOControl [호환 모드]

adfasdfasfdasfasfadf

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Deok9_Exploit Technique

PowerPoint 프레젠테이션

Frama-C/JESSIS 사용법 소개

PowerPoint 프레젠테이션

Abstract View of System Components

Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]

리눅스 취약점대응방안권고 / KISA 취약점점검팀 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE 지정, 도메인네임을

PowerPoint Template

PowerPoint 프레젠테이션

[동고동락한다] [가슴 아프다] [비서관] 2013년 8월 19일 9.[비서관]덕에 아이가 탄생해서 [미역국] [맛있다] [처음엔 어떤 사연인 줄 몰랐었지만] 마귀와[동고동락한다]하였으니[가슴 아프다]하지만[처음엔 어떤 사연인 줄 몰랐었지만]여러 가지 말 못할 역경을

USER GUIDE

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

Computer Security Chapter 08. Format String 김동진 1 Secure Software Lab.

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

PowerPoint 프레젠테이션

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

망고100 보드로 놀아보자-4

PowerPoint 프레젠테이션

XSS Attack - Real-World XSS Attacks, Chaining XSS and Other Attacks, Payloads for XSS Attacks

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

ActFax 4.31 Local Privilege Escalation Exploit

슬라이드 1

리눅스 커널 소개

[ 목차 ] 1. 취약점개요 2. 배경지식 3. 취약점발생결과 (exploit 테스트 ) 4. 취약점발생원인분석 4.1 취약점 Q&A 5. exploit 분석 6. 보안대책 7. 결론 8. 레퍼런스 2

Lab 3. 실습문제 (Single linked list)_해답.hwp

PowerPoint 프레젠테이션

Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft Word - FunctionCall

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Microsoft Word - MSOffice_WPS_analysis.doc

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

chap 5: Trees

vi 사용법

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

컴파일러

B _00_Ko_p1-p51.indd

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

LXR 설치 및 사용법.doc

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

해킹 대응 경진대회

취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환

5 장소프트웨어관리편 리눅스의패키지관리시스템패키지란? 수많은리눅스배포판과마찬가지로우분투와 DYNA LINUX 또한소프트웨어설치 / 제거에관해서는패키지관리시스템에의존하고있습니다. 모든우분투용프로그램은 패키지 의형태로배포되고있는데, 여러분이이스트소프트웹사이트에서다운받는 a

금오공대 컴퓨터공학전공 강의자료

PowerPoint 프레젠테이션

Microsoft PowerPoint - 10-EmbedSW-11-모듈

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

SBR-100S User Manual

PowerPoint Template

PowerPoint 프레젠테이션

Keil Flexlm 라이선스 설명서

2013년 1회 정보처리산업기사 실기.hwp

<BFAAB1E2B4C9BAB8B0EDBCAD2E687770>

Microsoft PowerPoint - chap01-C언어개요.pptx

SIGIL 완벽입문

리눅스커널-06

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

±èÇö¿í Ãâ·Â

2009년 상반기 사업계획

슬라이드 1

메시지큐를이용한 IPC 프로그램구현과제보고서 1. 과제의목적 1 리눅스가지원하는프로세스간통신방식중다수의프로세스사이에구조화된데이터블럭, 즉메시지를전달하는데주로사용되는메시지큐방식에대하여무엇인지, 어떻게사용하는지공부한다. 2 공부한내용을점검하기위해기작성된 epda 프로세스관

Microsoft PowerPoint - o8.pptx

Web Scraper in 30 Minutes 강철

PowerPoint 프레젠테이션

슬라이드 1

운영체제실습_명령어

Microsoft PowerPoint - ch07 - 포인터 pm0415

Transcription:

커알못의 커널 탐방기 2015.12 이 세상의 모든 커알못을 위해서

개정 이력 버전/릴리스 0.1 작성일자 2015년 11월 30일 개요 최초 작성 0.2 2015년 12월 1일 보고서 구성 순서 변경 0.3 2015년 12월 3일 오탈자 수정 및 글자 교정 1.0 2015년 12월 7일 내용 추가 1.1 2015년 12월 10일 POC 코드 삽입 및 코드 수정 1.2 2015년 12월 15일 커널 익스플로잇을 통한 POC코드 추가 1.3 2015년 12월 22일 보고서 완성

목차 1. 프로젝트 개요... 1.1 프로젝트 목적... 1.2 프로젝트 진행 방식... 2. 프로젝트 내역... 2.1 Kernel Exploit... 2.1.1 Kernel Exploit Introduce... 2.1.2 Kernel Exploit END... 2.2 Pwnable syscall... 2.2.1 Syscall Introduce and analysis... 2.2.2 Shellcode Analysis... 2.2.3 The commit_creds & prepare_kerneld_cred... 2.2.4 Write Exploit Code... 2.3 Pwnable rootkit... 2.3.1 영후랑... 2.3.2 건이가... 2.3.3 열심히... 2.3.4 풀고... 2.3.4 있어요... 3. Reference... 3.1.1 참고자료들

1. 프로젝트 개요 1.1 프로젝트 목적 오픈소스로 공개된 리눅스 커널 소스를 통해 리눅스 커널에 대한 지식을 습득하고, 알아본 취약점으로 실제 워게임에 대한 익스플로잇 코드 작성 을 목표로 한다. 1.2 프로젝트 진행 방식 오픈 소스인 리눅스 커널 소스를 팀원 별로 나누어 분석한다. 분석한 커널 소스를 서로 발표하며 커널에 대한 전반적인 지식을 습득하 고 워게임 문제를 푸는 방식으로 진행하였다. 2. 프로젝트 내역 2.1 Kernel Exploit 커널은 운영체제의 핵심으로, 운영체제의 다른 부분에 여러 가지 기본적 인 서비스를 제공한다. 우리는 커널 익스플로잇을 할 예정이므로, 최종적 인 목표는 UID 를 0으로 만드는 것이 목표이다. 뒤에서 다루겠지만, 커널에서 UID는 commit_creds 와 prepare_nerneld_cred 에서 관련이 있다. 2.2 Pwnable syscall 2.2.1 Syscall Introduce and analysis 문제를 클릭하면 다음과 같은 내용이 나온다. -------------------------------------------------------------I made a new system call for Linux kernel. It converts lowercase letters to upper case letters. would you like to see the implementation? Download : http://pwnable.kr/bin/syscall.c ssh syscall@pwnable.kr -p2222 (pw:guest)

그리고 문제 서버에 접속하여 환경을 살펴보면 $ uname -a Linux (none) 3.11.4 #13 SMP Fri Jul 11 00:48:31 PDT 2014 armv7l GNU/Linux Linux 32bit 환경과, 바이너리가 ARM 이므로 ARM Shellcode를 사용 해야 한다. 문제의 소스코드는 다음과 같다. syscall.c

이 모듈은 단지 lowercase 를 uppercase 로 바꾸어 주는 역할을 한다. 다만 우리가 인자로 지정될 in, out 의 주소를 지정할 수 있기 때문에 특 정 주소를 root 의 권한으로 덮어 쓸 수 있다. 특정 주소를 덮어 쓸 수 있다는 부분에서 매우 취약하다고 생각했고, sys_call_table 의 주소를 구할 수 있고 그 주소는 고정되어 있기 때문에 우리가 특정 모듈이나 함수를 syscall 로 추가 할 수 있다. 우리가 덮어쓸 모듈 혹은 함수는 Shellcode 로 대신하고 다음은 이 shellcode 를 분석한 내용이다. 2.2.2 Shellcode Analysis (자료출처: https://github.com/wjlandryiii/exploits/blob/master/linux_arm_c VE_2013_2094/perf_ptmx_arm.c) 우리가 사용하는 쉘코드가 궁극적으로 실행하는 것은 다음과 같다. - commit_creds - prepare_kernel_cred 쉘코드 마지막의 8바이트는 비워져 있는데, 각 시스템 마다 Symbol 들의 주소가 다르기 때문이다. 쉘코드를 정상적으로 실행 시키기 위해서는 get_ksym 함수를 따로 만들 어 직접 계산해 주거나 익스플로잇 코드에 직접 넣어 주어서 쉘코드를 완 성시켜 주어야 한다. 2.2.3 The commit_creds & prepare_nerneld_cred 사실 Kernel 영역이 아닌 Application 영역에서의 쉘코드는

execve( /bin/sh...) 를 이용하여 쉘을 따거나 포트를 열고, 혹은 반대로 접속하여 리모트 환경에서도 쉘을 딸 수 있게 하는 동작을 해왔다. 하지만 처음에 말한 것 처럼, 커널 익스플로잇이라는 것은 자신의 UID 를 0으로 만들어 root 권한을 가지는 것을 말한다. 여기서는 커널과 commit_creds, prepare_kernel_cred 가 무슨 관련이 있는지 커널 소스를 통해 알아보 도록 하겠다. prepare_kernel_cred 의 소스는 위와 같은데, daemon 이라는 struct task_struct 타입의 변수를 인자로 받는다. 만약 daemon 변수가 참이면 그 변수를 기반으로 task_struct 정보를 불 러와 현재 프로세스를 daemon 기반으로 대입해준다. 하지만 0, false 가 입력되면 old를 &init_cred (init_cred 의 주소값) 에 대입해 주는데 들어가보면 아래와 같이 정의되어 있다.

.uid.gid 모두 GLOBAL_ROOT_UID 혹은 GLOBAL_ROOT_UID 로 초기화 하는 것을 볼 수 있다. 다시한번 GLOBAL_ROOT_~~ 로 들어가 보면 모두 0으로 define 되어 있다. KUIDT_INIT 은 uid_t 형식으로 초기화 해주는 define 함수이다. 즉 init_cred 는 uid=0 을 의미한다. 그럼 prepare_kernel_cred 는 uid=0을 가지는 task_struct 를 반환한 다고 했을 때, commit_creds 는 그 반환값을 가지고 어떤 동작을 하는지 확인해보면 쉘코드를 모두 이해할 수 있을 것이다. 저 소스코드를 찾은 곳에서 대략적인 주석을 달아놓았는데, commit_creds Install new credentials upon the current task New 로 들어온 값을 현재 태스크의 credential 로 대입하는 건데, 즉 prepare_kernel_cred 가 반환한 값으로 현재 cred 를 정한다는 뜻이다. 지금까지 알아본 내용은 대략 아래와 같다. 1. prepare_kernel_cred 가 uid=0 을 가진 init_cred 를 반환함 2. commit_creds 가 그 반환값을 가지고 current task 의 cred 에 대입 3. 현재 task 의 uid 가 0이 됨. 2.2.4 Write Exploit Code 위에서 알아본 내용으로 문제 커널 익스플로잇 코드를 작성해 보자! 우선 익스플로잇 시나리오는 아래와 같다. 1. Shellcode mapping 2. Shellcode 의 주소를 아무 syscall 에 덮어씀 3. 그 syscall 을 실행시킴 4. 현재 프로세스의 uid=0 5. Get flag

우선 우리가 알아야 하는 정보는 commit_creds 의 주소값, prepare_kernel_cred 의 주소값이다. 처음 익스플로잇을 진행했을 떄는 /proc/kallsyms 에서 grep 으로 직접 주소를 넣어주었지만, 여기선 자동 으로 값을 구해주는 함수를 구현하여 넣어주었다. Shellcode 는 mmap 함수를 통하여 메모리 0x40044444에 매핑을 시켜두고, (NULL Byte를 피하기 위해, 0x044444를 넣지 않았다.) Syscall 224 번을 매핑된 주소로 추가하여 syscall(224)를 실행시켜 주자. 완성된 전체 소스는 아래와 같다.

2.3 Pwnable rootkit 2.3.1

3. Reference Exploit 전체 소스 (https://gist.github.com/err0rless/1637cd8b60fb251867fd) SHELLCODE + kernel exploit reference https://github.com/wjlandryiii/exploits/blob/master/linux_arm_cve_2013_2094/pe rf_ptmx_arm.c Kernel exploit reference http://security.cs.rpi.edu/~candej2/kernel/kernel_exploit.c Kernel exploit reference https://github.com/cloudsec/exploit/blob/master/perf_exp.c Introducing linux kernel symbols https://onebitbug.me/2011/03/04/introducing-linux-kernel-symbols/ prepare_kernel_cred kernel source http://lxr.free-electrons.com/source/kernel/cred.c#l576 commit_cred kernel source http://lxr.free-electrons.com/source/kernel/cred.c#l409 mmap() function reference http://man7.org/linux/man-pages/man2/mmap.2.html