Presentation is loading. Please wait.

Presentation is loading. Please wait.

Memory Protection Mechanism of Linux

Similar presentations


Presentation on theme: "Memory Protection Mechanism of Linux"— Presentation transcript:

1 Memory Protection Mechanism of Linux
TEAM PWN&PLAY YIS of KSIA 김태욱 fb.com/xodnr631 안녕하세요, 코드게이트 주니어에 참석하신 모든 여러분들. 제 소개를 먼저 한 다면 저는 강원도 속초고등학교 3학년인 김태욱 입니다. 화면에 제 이메일 주소와 제 페이스북 주소가 있으니 발표가 끝나고 연락 주시면 감사하겠습니다.

2 YIS 또 한국 학생 IT 동아리 연합에 소속되어 있는 YIS 동아리에서 온라인 팀장을 맡고있습니다.

3 TEAM PWN&PLAY 저는 TEAM PWN&PLAY에서 활동중입니다.

4 SYSTEM HACKING Memory Protection Mechanism of Linux
제가 오늘 여러분들 앞에서 발표할 내용은 운영체제 리눅스의 메모리 보호기법에 대해 발표할것입니다. 일단 리눅스 메모리 보호기법은 시스템에 관심이 많은 분들이 주의깊게 들어주시면 유익하실텐데 오늘 발표하는 내용은 시스템 해킹에서 정말 중요한 내용입니다. 여러 시스템 해킹 기술을 대상으로 특정 메모리 영역을 보호하는 기술들입니다. 공격기술까지 자세하게 짚고 넘어가지는 않겠지만 오늘 설명해드릴 보호기법 4가지인 ASLR, DEP, ASCII Armor, Canary 기술을 여러분들이 확실히 이해하실 수 있도록 도와드리겠습니다. 그리고 여러분들이 나중에 시스템 해킹을 공부하시게 될때 제 발표를 기억해내면서 “아, 이런 원리를 가지고 있었던 놈이지. 어떻게 어떻게 공격을 시도해봐야겠다” 라고 생각해주시고 공격을 한다면 오늘 발표는 매우 만족스러울거라 생각됩니다. 그 리눅스 메모리 보호기술을 바로 설명해드리기 전에 제가 버퍼 오버플로우라는 시스템 해킹기술을 간단히 설명해드릴 것입니다. 그 이유는 일단 버퍼 오버플로우는 마초중의 마초, 시스템 해킹 기술 중 몰라서는 안되는 기술이며 해킹대회 시스템 문제로도 가장 많이 출제되는 유형입니다. 이번 코드게이트 취약점 문제도 마찬가지였죠. 또 명성에 걸맞게 운영체제의 메모리 보호기술이 여태까지 계속해서 업그레이드 되고 있는 이유 중 하나이기도 합니다.

5 Buffer Overflow (1) 사용자가 입력한 데이터의 크기가 너무 과하여 제한된 버퍼의 용량을 넘쳐버렸을때 생기는 버그를 이용해 해킹하는 기술 버퍼 : 컴퓨터의 주기억 장치와 주변장치 사이에서 데이터를 주고받을때 정보를 임시로 기억해두는 임시저장공간 먼저 여러분들께 시스템 해킹 기술인 버퍼 오버플로우에 대해 간단하게 설명을 해드릴 예정입니다. 그 이유는 메모리 보호기법이 현재까지 업그레이드 되고 있는 이유는 여러가지 지만 그 중 가장 큰 비율을 차지하고 있는 이유 중 하나가 바로 마초중의 마초, 이 시스템 해킹 기술인 ‘버퍼 오버플로우’ 해킹 기술 때문입니다. 이 버퍼 오버플로우 해킹 기술은 사용자가 입력한 데이터의 크기가 너무 과하여 제한된 버퍼의 용량을 넘쳐버렸을때 생기는 버그를 이용해 해킹하는 기술이며 여기서 버퍼는 임시저장공간을 말합니다. 이렇게만 얘기하면 상당히 어려울텐데 간단하게 비유를 한다면 아침드라마나 저녁드라마를 챙겨보시는 분들 계실겁니다. 드라마에 자주 나오는 이야기인데 정말 착한 주인공이 있습니다. 주인공에게 어느날 큰 문제가 닥쳤습니다. 바로 회사의 큰 거래를 하루빨리 성사시켜야 된다는 명령이 떨어졌으며 해결못할경우 해고를 당합니다. 어쩔수 없이 주인공은 자신의 단짝을 술자리에 불러냅니다. 주인공은 단짝친구가 술에 약한 것을 알고 계속해서 술을 맥입니다. 결국에 술 때문에 맛이간 친구는 친구의 꼬드김에 넘어가 거래를 하게되고 다음날 일어난 친구는 아무것도 기억이 안나지만 요상한 꼬드김에 넘어간걸 눈치채게되고 친구는 연락을 안받는… 그런…. 상황이 일어납니다. 여기서 바로 주인공은 친구에게 버퍼 오버플로우 해킹을 시도한것이며 단짝친구의 멘탈이 버퍼이며, 술이 데이터 입니다. 바로 과하게 흘러들어간 술, 데이터가 친구의 멘탈, 버퍼를 넘쳐버려 해킹을 당한것입니다.

6 Buffer Overflow (1) 사용자가 입력한 데이터의 크기가 너무 과하여 제한된 버퍼의 용량을 넘쳐버렸을때 생기는 버그를 이용해 해킹하는 기술 버퍼 : 컴퓨터의 주기억 장치와 주변장치 사이에서 데이터를 주고받을때 정보를 임시로 기억해두는 임시저장공간

7 Buffer Overflow (2) 낮은 주소 CODE DATA HEAP STACK 높은 주소 컴파일 된 기계어 코드
전역/정적 및 각종 변수 HEAP 프로그래머가 직접 할당한 공간 STACK 지역 변수, 함수 인자, 환경 변수 높은 주소 먼저 메모리 구조는 다음과 같이 이루어져있습니다. 코드영역, 데이터영역, 힙영역, 스택영역이 있으며 각 영역의 역할은 다음과 같습니다. 코드영역은 컴파일 된 기계어 코드, 데이터 영역은 전역/정적 변수 힙 영역은 프로그래머가 직접 할당한 공간입니다.

8 Buffer Overflow (2) 낮은 주소 CODE DATA HEAP STACK 높은 주소 컴파일 된 기계어 코드
전역/정적 및 각종 변수 HEAP 프로그래머가 직접 할당한 공간 STACK 지역 변수, 함수 인자, 환경 변수 높은 주소 버퍼 오버플로우가 집중적으로 일어나는 스택 영역은 지역 변수, 함수의 인자 등 함수 호출과 관련된 영역입니다.

9 Buffer Overflow (3) BUFFER SFP RET
BUFFER – SFP – RET – Argc/Argv – 환경변수 - 파일명 BUFFER SFP RET 스택 영역에 대해 좀 더 자세하게 보신다면 스택의 구조는 다음과 같이 이루어져 있습니다. 크게 본다면 버퍼, SFP, RET로 이루어져있습니다. 버퍼는 말 그대로 변수며, SFP는 세이프 프레임 포인터로 현재 함수의 주소가 들어있으며 RET는 리턴 어드레스로 돌아갈 함수의 주소가 들어있습니다.

10 Buffer Overflow (3) A A A A A A A A A A A A A A A A A A A BUFFER SFP
BUFFER – SFP – RET – Argc/Argv – 환경변수 - 파일명 BUFFER SFP RET A A A A A A A A A A A A A A A A A A A 버퍼 오버플로우 공격의 핵심은 RET, 리턴 어드레스 이며 바로 리턴 어드레스를 변조시켜 공격을 하는것이 버퍼 오버플로우 공격입니다.

11 Stack 낮은 주소 CODE DATA HEAP STACK 높은 주소 컴파일 된 기계어 코드 전역/정적 및 각종 변수
프로그래머가 직접 할당한 공간 STACK 지역 변수, 함수 인자, 환경 변수 높은 주소 하지만 시스템을 자세히 공부해보시지 않은 분들이라면 스택이 도대체 뭐하는 놈인가 감이 잘 안 올 수도 있습니다.

12 Stack 유저영역 낮은 주소 CODE DATA HEAP STACK 높은 주소 컴파일 된 기계어 코드 전역/정적 및 각종 변수
프로그래머가 직접 할당한 공간 STACK 지역 변수, 함수 인자, 환경 변수 높은 주소 유저영역 그래서 간단하게 설명해드린다면 스택은 메모리 영역 중 유저 영역의 한 부분입니다. 바로 또 이 유저 영역이란 무엇인가.

13 Memory 커널 유저 HIGH LOW 컴퓨터의 메모리는 여러분들이 컨닝페이퍼를 작성하듯이 컴퓨터가 계산을 위해 데이터와 명령어들을 보관해놓은 곳 입니다. 컴퓨터 메모리는 크게 커널영역과 유저영역으로 나뉘어져 있습니다. 사람의 뇌가 두뇌, 중뇌, 소뇌로 나뉘어져 있는것과 똑같이 말입니다.

14 STACK | HEAP | DATA | CODE
Memory 커널 유저 HIGH LOW STACK | HEAP | DATA | CODE 여기서 이제 또 컴퓨터 메모리의 경우에는 유저영역 부분이 역할별로 세분화 되어있으며 여기에 스택이란 놈이 있는것입니다. 자, 이렇게 이제 버퍼 오버플로우의 이론적인 내용은 마치고 넘어가겠습니다.

15 Buffer Overflow (5) <BOF 문제풀이 유형>
해외는 물론 국내에도 버퍼 오버플로우 워게임 서비스가 여러개 있습니다. 먼저 여러분들께 어떻게 공격이 이루어지는가. 간단한 시연과 유형 설명을 해드리도록 하겠습니다.

16 Buffer Overflow (5) int main(int argc, char *argv[]) { char buffer[256]; if(argc < 2){ printf("argv error\n”); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } 가장 전형적인 버퍼 오버플로우 문제 유형입니다. 256바이트 크기의 변수이며 인자가 두 개인지 검사하며 스트린카피함수를 통해 입력받은 인자를 변수에 복사하는데 이 때 인자의 크기를 검사하지않는 부분에서 취약점이 존재하므로 해킹이 일어납니다.

17 Buffer Overflow (5) 가장 전형적인 버퍼 오버플로우 문제 유형입니다. 256바이트 크기의 변수이며 인자가 두 개인지 검사하며 스트린카피함수를 통해 입력받은 인자를 변수에 복사하는데 이 때 인자의 크기를 검사하지않는 부분에서 취약점이 존재하므로 해킹이 일어납니다.

18 Buffer Overflow (5) int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } 또 다른 문제 유형입니다. 이 문제는 버퍼의 영역이 매우 좁습니다. 이 떄는 여러분들이 직접 매우 작은 크기의 쉘코드를 직접 만들어주셔서 공격하셔야 합니다.

19 Buffer Overflow (5) // here is changed! // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); 이번 유형에 추가된 소스코드는 바로 환경변수 메모리 영역을 초기화 하는 코드입니다. 이를 통해 에그쉘이라는 프로그램을 이용해 환경변수를 통해 공격하는 방법을 방지합니다.

20 Buffer Overflow (5) // here is changed! if(strlen(argv[0]) != 77){ printf("argv[0] error\n"); exit(0); } 이번 문제는 파일 제목 글자수를 검사하는 코드가 추가되어있습니다. Argv[0] 이 파일의 제목을 가리키는 인자입니다. 이 문제에서는 그냥 실행할경우 파일 접근이 안 될텐데, 바로 심볼릭 링크라는 것을 이용해 파일의 바로가기를 생성하는데 여기 조건이 걸려있는대로 파일명을 77자로 생성해주면 파일 접근에 성공하실 수 있습니다.

21 BUT 그러나!!!!! 여러분들은 정말 중요한걸 잊고있습니다. 과연 하드코딩함으로써만 방어가 가능할까요, 버퍼 오버플로우는 메모리에 접근하여 해킹을 시도하는 기술입니다. 단순히 소스코드, 그러니깐 방어도구의 업그레이드 뿐 아니라 방어환경, 즉 운영체제의 메모리 기술을 업그레이드 함으로써도 해킹을 막아낼수 있다는 말이겠죠..

22 이렇게 여러분의 공격스킬이 계속해서 업그레이드 되어갈수록.

23 바로 똑같이 앞서 말씀드렸듯이 적들의 공격스킬은 물론 여러분들의 공격을 막아낼 방어구와 방어스킬 또한 업그레이드 되고 있다는 사실입니다. 여러분들의 공격스킬이 업그레이드되면서 공격이 성공할때마다 윈도우, 리눅스와 같은 운영체제들은 좀 더 강력한 방어구를 걸치고, 좀 더 강력한 방어스킬을 가지고 업그레이드합니다. 근데 여러분은 업그레이드된 적을 몰라뵈고 똑같은 무기와, 똑같은 방패, 똑같은 스킬로 되돌아온 적을 공격하러갑니다. 그러면 어떻게될까요!? 당연히 말하지않아도 여러분은 업그레이드 된 적에게 당하고 맙니다.

24 그래서 여러분들이 제일 먼저 해야될건 적이 어떻게 업그레이드 되었는지 알아야 된다는것입니다
그래서 여러분들이 제일 먼저 해야될건 적이 어떻게 업그레이드 되었는지 알아야 된다는것입니다. 적을 알고 나를 알면 지피지기 백전백승! 이란 말이 있듯이 적에 대해서 먼저 알아둬야된다는것입니다. 그렇다면 아무리 강한 적이라도 물러서지 않고 공격을 시도 할 수 있으며 성공할 수 있는겁니다. 아까 단짝 친구가 술에 약한 것을 알고 술을 이용해 접근한건데 만약 그 주인공이 친구가 술에 약한 것을 몰랐다면 어떻게 되었을까요? 괜히 술자리에 불러냈다가 거래 성사시키려다가 먼저 엄청 취해버려서 뒤통수를 맞을수도 있겠죠? 이것도 바로 적을 알고 나를 알고 다가가는 기술입니다. 친구가 여자를 이용해도 안 통하고, 돈에도 통하지 않는 것을 알고 하지만 술이란 공격도구에 약한 것을 안 주인공은 친구에게 술이란 공격도구로 접근을 합니다. 이렇게 적을 알고 나를 알면 지피지기 백전백승이란 말입니다.

25 지금 보고계신 그림은 바로 적들의 방어기술 업그레이드 현황입니다.

26 오늘 여러분들께 적 들의 방어기술을 보여드리기 위해 사용한 놈은 바로 ‘페도라 12’ 입니다.

27 DEP(Data Execution Prevention)
Memory Protection (1) DEP(Data Execution Prevention) 그리고 이제 다음으로 두 번째로 설명해드릴 기술은 DEP란 기술 입니다. 이 DEP 란 기술은 스택이나 힙에 실행권한을 부여하지 않는 보호기술입니다. 실행권한은 ‘x’ 로 표시되는데 붙여져있지 않으신게 보이시죠, 바로 실행권한이 없어진것을 말합니다. 공격자가 BOF 공격을 일으키면 DEP가 적용된 상태이므로 실행권한이 없어 BOF 공격 코드가 실행되지 않습니다.

28 DEP(Data Execution Prevention)
Memory Protection (1) DEP(Data Execution Prevention) STACK BUFFER SFP RET 인자 환경변수 파일명 그림으로 쉽게 설명해보겠습니다.

29 DEP(Data Execution Prevention)
Memory Protection (1) DEP(Data Execution Prevention) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 먼저 앞서서 보여드렸던 공격방법들은 모두 쉘코드를 올린 특정 장소(그러니깐 변수, 환경변수, 파일명과 같은곳이요.) 의 주소를 리턴어드레스에 심어놔 공격을 했었습니다. 프로그램이 실행이되면 자연스럽게 스택을 참조하면서 공격이 일어나는것이죠.

30 DEP(Data Execution Prevention)
Memory Protection (1) DEP(Data Execution Prevention) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 하지만 이 DEP가 적용된 이후로 스택을 참조하며 프로그램이 실행될때 리턴어드레스에서 변조시킨 주소로 이동을 할텐데 여기서 이동되는 부분이 스택이라면 또 스택을 참조하는건데 그럼 또 다시 스택을 참조할게될때 이 DEP 방어기술로 인해 리턴어드레스에 성공적으로 주소를 덮어씌워 그 곳으로 이동한다 하더라도 실행이 되지 않고 프로그램이 비정상적으로 종료되는것입니다. 이 DEP 보호기술은 제가 앞서 설명해드렸던 ASLR 보다 먼저 나왔던 기술인데 이 DEP의 경우에는 쉬운 우회 공격기술이 있습니다.

31 Memory Protection (1) STACK RTL(Return-to-libc) LOW HIGH BUFFER SFP
인자 환경변수 파일명 LOW HIGH 바로 RTL 이라고 하는 기술입니다. 리턴 투 라이브러리의 약자이며 이 공격기술은 DEP와 같은 보호기술을 우회하기 위해 만들어졌습니다. 이 공격기술은 해커가 변조해야되는 리턴어드레스를 변조할때 스택이 아니라 공유 라이브러리 내의 함수로 덮어씌워줍니다. 그러면 스택에서 실행권한을 요구할 필요 없이 라이브러리 내에 있는 함수나 환경변수를 요구하게 되며 자연스럽게 스택의 실행권한을 차단한 DEP 보호기술은 우회하게 되는 것입니다.

32 Memory Protection (1) RTL(Return-to-libc)
BUFFER SFP RET A A A A A A A A A A A A A A A A A A A 리턴어드레스를 변조시키는 작업에서

33 &system() &execl() &/bin/sh
Memory Protection (1) RTL(Return-to-libc) BUFFER SFP RET A A A A A A A A A A A A A A A A A A A &system() &execl() &/bin/sh 공유 라이브러리 내의 함수 중 권한을 요구하는 함수들을 불러와 리턴어드레스에 덮어 씌워 권한을 획득하고 쉘을 실행하여 해킹에 성공하는것입니다.

34 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) 첫 번째로 소개시켜드릴 방어기술은 ASLR입니다. 흔히 랜덤스택이라고도 불리는 이 기술은 스택 영역의 배치를 난수화 시킴으로써 스택을 참조하는 프로그램이 실행될때마다 메모리 주소가 변동되어 해커가 쉽게 스택의 주소를 유추할 수 없게 만듭니다. 지금 실행 중인 프로세스 중 스택의 주소만 출력해서 확인하고있는건데 명령어를 실행할때마다 스택을 참조할텐데 이때마다 주소가 달라지는것을 확인할 수 있습니다.

35 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK 그림으로 쉽게 설명해보겠습니다.

36 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 보통 저희가 버퍼 오버플로우 공격을 할 때 가장 많이 사용하는 전형적인 공격방법이 바로 스택 공간을 이용하는 방법입니다.

37 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 난짱해커 스택의 주어진 버퍼영역에 쉘코드를 올리고 그 쉘코드가 올라가 있는 주소를 리턴 어드레스에 덮어씌워 공격을 시도하곤 하였습니다.

38 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 난짱해커 다시 말해서 스택이라는 공간이 있는데 화면에 보여지는것처럼 스택이 구성되어있습니다. 흔히 여러분들이 알 수 있는 버퍼 그러니깐 변수, SFP, RET, 인자, 환경변수, 파일명이 있는데 아까 말씀드렸듯이 가장 전형적인 공격방법이 보통 인자를 통해 버퍼의 값을 입력받고 그 인자나 버퍼의 시작주소 혹은 쉘코드가 나오기 전 부분의 주소를 RET 로 덮어씌워 프로그램이 RET 를 수행할때 변조한곳으로 이동하게 하여 해킹이 일어나게됩니다. 근데 이 ASLR, 랜덤스택이라는 기술로 그 주소가 계속 랜덤형식으로 되어 찾을 수가 없게 된것입니다.

39 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 난짱해커

40 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 난짱해커

41 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 난짱해커

42 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 난짱해커

43 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 난짱해커

44 ASLR(Address Space Layout Randomization)
Memory Protection (2) ASLR(Address Space Layout Randomization) STACK BUFFER SFP RET 인자 환경변수 파일명 LOW HIGH 난짱해커 똑같은주소 그래서 아까 유형 설명할때 나왔었던 작은 쉘코드를 이용해 풀거나, 심볼릭링크를 이용해 풀거나, 에그쉘을 이용해 환경변수에 푸는 유형들 또한 마찬가지로 어려워 졌다는 상황입니다.

45 다음과 같은 프로그램을 이용해서 다시 보겠습니다
다음과 같은 프로그램을 이용해서 다시 보겠습니다. 이 프로그램은 인자를 입력받으며 프로그램을 실행하면 변수의 주소, 파일명의 주소와 입력받은 인자의 주소를 출력합니다. 여기서 Argv[0]은 파일명을 의미하며 Argv[1]은 첫 번째로 입력받은 인자를 뜻합니다.

46 왼쪽은 해커스쿨에서 제공된 LOB 워게임 서비스에서 실행하였을때의 결과며 오른쪽은 페도라 12 환경에서 실행하였을때 결과입니다
왼쪽은 해커스쿨에서 제공된 LOB 워게임 서비스에서 실행하였을때의 결과며 오른쪽은 페도라 12 환경에서 실행하였을때 결과입니다. 차이점이 정확히 보이시죠, LOB 환경에서는 프로그램이 재실행될때마다 주소가 똑같지만 페도라 12 환경에서는 실행할때마다 주소가 계속해서 달라집니다. 그러니깐 리눅스에서 문제 파일을 GDB나 덤프코드로 디버깅을 하며 분석할때 (윈도우 환경에서 올리디버거로 디버깅하는거라 생각하시면 됩니다) 시작 주소를 찾아내어 그 주소를 타겟으로 공격을 하는데, LOB 환경에서는 랜덤스택이 적용되어 있지 않으므로 당연히 찾은 주소를 이용해 그냥 공격하면 되지만 페도라 12 환경에서는 ASLR이 적용되어 있어 계속해서 바뀌므로 분석한 주소로 공격을 할때 또 주소가 바뀌므로 공격이 먹히지 않게 되는것입니다. 이해가 되십니까? 랜덤스택이란 놈이 간단하게 비유를 한다면 엑스맨의 미스틱이라고 할 수 있겠는데요, 혹시 미스틱이라는 캐릭터를 아시는 분이 계십니까. ↑ 고정 된 주소 ↑ 계속해서 바뀌는 주소

47 ↑ 고정 된 주소 ↑ 계속해서 바뀌는 주소 바로 이 캐릭터인데요, 다들 아시죠?
미스틱은 자신이 원하는 모습으로 계속해서 변신을 할 수 있습니다. 영화 엑스맨 전투신 중 에서도 미스틱은 이런 계속해서 변신할 수 있는 기술을 이용한 적들과의 전투신이 있죠. 새로운 적이 나타날때마다 새로운 모습으로 얼마든지 변신이 가능한데 랜덤스택을 이와 똑같이 생각해주시면 됩니다. 프로그램을 실행할때마다 스택의 주소가 바뀌는 기술을 말입니다. ↑ 고정 된 주소 ↑ 계속해서 바뀌는 주소

48 Memory Protection (3) ASCII Armor
세 번째로 설명해드릴 방어기술은 ASCII Armor 란 기술입니다. 이 기술은 제가 방금전에 설명해드린 RTL 과 같은 공격기술 때문에 생긴 보호기술로 라이브러리를 보호하기 위한 기술입니다. 주소를 \x00와 같은 널문자로 시작하게 만들어 라이브러리를 호출하는 BOF 공격을 할 경우 널 문자를 만나면 프로그램이 끝나는 것을 이용하여 공격을 막아냅니다.

49 Memory Protection (3) STACK ASCII Armor LOW HIGH BUFFER SFP RET 인자
환경변수 파일명 LOW HIGH 그림으로 쉽게 설명을 해드리겠습니다. 아까 DEP 라는 보호기술이 추가되어서 RTL 이라는 공격 기술을 이용한다고 했었죠. 스택공간을 이용하지 못하게되니 그 외의 공간을 이용하여 공격을 하는 방법이었는데,

50 Memory Protection (3) STACK ASCII Armor LOW HIGH BUFFER SFP RET 인자
환경변수 파일명 LOW HIGH 그러니깐 아까 설명해드렸던 RTL 기법을 통해 라이브러리의 함수를 호출하거나 데이터를 전달 하는 경우 함수의 첫 바이트에 널문자를 삽입해 연속된 함수의 호출을 방해합니다. 프로그래밍을 공부해보신 분이라면 아시겠지만 이러한 원리로 널문자를 만나 프로그램이 종료되는것을 이용해 공격을 방어합니다.

51 Memory Protection (4) Canary BUFFER SFP RET

52 Memory Protection (4) Canary BUFFER SFP RET CANARY
카나리 기술은 BOF를 모니터링 하는 역할이라고 생각하시면 될것같습니다. 변수영역과 RET 사이에 또 다른 장애물을 설치하는 기술입니다. 근데 이 장애물이 참으로 까다로운 놈입니다.

53 Memory Protection (4) Canary A A A A A A A A A A ? ! # $ A A A A A
BUFFER SFP CANARY RET A A A A A A A A A A ? ! # $ A A A A A 카나리값이라고 데이터영역에서 랜덤한 값을 삽입해 함수가 시작되거나 종료되는 시점에 원본 데이터와의 체크를 통해 오버플로우를 감지하며 이 카나리값에 해당하는 조건을 만족하지 못한다면 프로그램이 종료되는데 BOF 공격 시 오버플로우에 대한 경고까지 하고 프로그램을 종료시킵니다.

54 Memory Protection (4) Canary CANARY RANDOM
이게 또 카나리 공격이 크게 3가지로 분류가 되는데 첫번째는 랜덤 카나리로 ASLR 기술처럼 프로그램이 실행될때마다 랜덤으로 카나리값을 생성해 공격자가 조건을 만족하지 못하게 만드는 방법이며

55 Memory Protection (4) Canary CANARY RANDOM TERMINATOR
두번째는 터미네이터 카나리로 카나리값이 구성될 때 마지막 값을 널문자와 같은 종료문자로 구성시켜 공격자가 접근을 할 수 없도록 만들어 내는 방법입니다.

56 Memory Protection (4) Canary CANARY RANDOM TERMINATOR NULL
그리고 마지막 세번째 방법으로는 널 카나리 기술로 카나리 값을 완전히 널문자로 구성시켜버려 접근을 못 하게 만들어버립니다. 여기까지 총 4가지 리눅스 메모리 보호기술을 설명해드렸으며 정리를 한번 하고 끝내도록 하겠습니다.

57 DEP 첫 번째로 설명해드렸었던 기술이 ASLR 이었죠, 스택의 주소를 랜덤화 시켜서 공격에 어려움을 가지게 하는 기술이었습니다.

58 두 번째로 설명해드렸던 기술은 DEP 라는 기술로 스택의 실행 권한을 없애버려 보통 스택에 쉘코드를 올려놓고 공격하는 공격기법을 막아내는 보호기술 이었습니다.
DEP + ASLR

59 DEP + ASLR + ASCII Armor 세 번째로 아스키아머라고 라이브러리 함수 주소의 시작을 널문자로 구성시켜 DEP 를 우회하는데 사용되는 RTL 기술을 막아내는 보호기술입니다.

60 DEP + ASLR + ASCII Armor + Canary
마지막으로 설명해드렸었던 보호기술은 가장 강력한 놈으로 카나리로 카나리값이란걸 생성해 조건을 만족하지 못한다면 공격을 무력화 시키는 보호기술 이었습니다.

61 이상으로 제 발표를 마치겠습니다. 들어주셔서 감사하고 수고하셨습니다.


Download ppt "Memory Protection Mechanism of Linux"

Similar presentations


Ads by Google