1. 뮤직 플레이어 Exploit
2013 CODEGATE JUNIOR
현성원(sweetchip) 서울대원고등학교
Blog : http://pgnsc.tistory.com
Site : http://studyc.co.kr
E-mail : sweetchip@studyc.co.kr
Facebook : https://fb.com/sweetchipp
2. Vulnerability
시연 자료 : http://codegate.studyc.co.kr시연 자료 : http://codegate.studyc.co.kr
3. § 보안 취약점
§ 하드웨어나 소프트웨어의 결함을 이용하여 사용자가 허용이상의 권한
을 획득 하거나 동작을 가능하게 하는 약점
§ 취약점을 이용하여 권한탈취, 정보유출이 가능하다
§ 서버 데몬의 0-Day를 이용하여 서버를 다운, 권한탈취가 가능하다
§ 취약점을 이용한 PDF, HWP파일을 이용하여 나도 모르게 해커에게 해
커에게 권한을 탈취 당해, 자료를 유출당했다.
Vulnerability
§ 보안 취약점
§ 하드웨어나 소프트웨어의 결함을 이용하여 사용자가 허용이상의 권한
을 획득 하거나 동작을 가능하게 하는 약점
§ 취약점을 이용하여 권한탈취, 정보유출이 가능하다
§ 서버 데몬의 0-Day를 이용하여 서버를 다운, 권한탈취가 가능하다
§ 취약점을 이용한 PDF, HWP파일을 이용하여 나도 모르게 해커에게 해
커에게 권한을 탈취 당해, 자료를 유출당했다.
4. § 프로그램에서 데이터를 저장할때 개발자가 정한 크기의 버퍼를 사용한다.
§ 버퍼의 용량보다 더 많은 데이터 할당시 다른 메모리영역 까지 침범하여 오류
를 발생시킨다.
§ 버퍼 오버플로우를 이용하여 다른 메모리 영역의 데이터를 바꿀수 있으므로,
공격이 가능하다.
§ 입력한 값의 길이를 검사하는 부분을 추가한다면 충분히 방어가 가능하다.
Windows Buffer Overflow
§ 프로그램에서 데이터를 저장할때 개발자가 정한 크기의 버퍼를 사용한다.
§ 버퍼의 용량보다 더 많은 데이터 할당시 다른 메모리영역 까지 침범하여 오류
를 발생시킨다.
§ 버퍼 오버플로우를 이용하여 다른 메모리 영역의 데이터를 바꿀수 있으므로,
공격이 가능하다.
§ 입력한 값의 길이를 검사하는 부분을 추가한다면 충분히 방어가 가능하다.
5. § Target : 뮤직 플레이어
§ Buffer Overflow 취약점
§ ID3 Tag 이용한 Exploit
시연
§ Target : 뮤직 플레이어
§ Buffer Overflow 취약점
§ ID3 Tag 이용한 Exploit
6. § ID3는 MP3 파일에서 사용하는 메타
데이터 포맷으로, 음악의 제목, 음악
가 이름등의 음악 파일에 관련된 정
보를 담는다.
§ 로컬의 MP3 파일을 불러올때 ID3를
불러온다.
§ 출처 : http://ko.wikipedia.org/wiki/ID3
ID3 Tag?
§ ID3는 MP3 파일에서 사용하는 메타
데이터 포맷으로, 음악의 제목, 음악
가 이름등의 음악 파일에 관련된 정
보를 담는다.
§ 로컬의 MP3 파일을 불러올때 ID3를
불러온다.
§ 출처 : http://ko.wikipedia.org/wiki/ID3
7. § 파일 로딩시 ID3 값의 길이
를 검사하지 않는 문제점
§ 그러므로 비정상적으로 많은
데이터 주입 가능
§ 결국 버퍼오버플로우 발생
Vuln?
§ 파일 로딩시 ID3 값의 길이
를 검사하지 않는 문제점
§ 그러므로 비정상적으로 많은
데이터 주입 가능
§ 결국 버퍼오버플로우 발생
8. § Python Script 사용
§ ID3 Tag + Nop * 8000000
§ iamcrasher.mp3 파일 생성
§ 재생
취약점 찾기
§ Python Script 사용
§ ID3 Tag + Nop * 8000000
§ iamcrasher.mp3 파일 생성
§ 재생
9. OllyDBG
- 국내에 잘 알려진 도구
- 다양한 플러그인 지원
- 무료
Immunity DBG
- OllyDBG와 비슷한 UI
- Python Script 지원
- OllyDBG보다 빠르다
취약점 분석
OllyDBG
- 국내에 잘 알려진 도구
- 다양한 플러그인 지원
- 무료
Immunity DBG
- OllyDBG와 비슷한 UI
- Python Script 지원
- OllyDBG보다 빠르다
10. § 최신 버전은 Themida 로 실행압축 되어있었다.
§ Unpack Script등을 이용한다면 언패킹이 가능하다
§ 스크립트는 일부 버전만 나와있으므로 예전 버전을 구하기로 했다.
§ 예전 버전으로 사용하여 Themida 우회 없이 분석이 가능했다.
분석중 문제.
§ 최신 버전은 Themida 로 실행압축 되어있었다.
§ Unpack Script등을 이용한다면 언패킹이 가능하다
§ 스크립트는 일부 버전만 나와있으므로 예전 버전을 구하기로 했다.
§ 예전 버전으로 사용하여 Themida 우회 없이 분석이 가능했다.
12. § SafeSEH, DEP, ASLR 중 SafeSeh와 DEP가 exe에 걸려있는 상태
§ ASLR은 Windows Vista부터 적용되는 보호기법이므로 XP에선 해당되
지 않는다.
§ DEP는 XP sp3 기준으로 Optin 옵션이다. [다음 페이지에 설명]
Memory Protection
§ SafeSEH, DEP, ASLR 중 SafeSeh와 DEP가 exe에 걸려있는 상태
§ ASLR은 Windows Vista부터 적용되는 보호기법이므로 XP에선 해당되
지 않는다.
§ DEP는 XP sp3 기준으로 Optin 옵션이다. [다음 페이지에 설명]
13. § Safe Seh는 SEH Overwrite 공격을 막기위한 보호기법
§ SE Handler의 값이 올바르지 않은 값으로 변조 되었는지 체크
§ 변조를 확인하면 프로그램을 종료한다.
§ EXE와 로딩된 모듈중, SafeSeh 옵션이 걸려있지 않은 모듈의 Pop/Pop/Ret 이나 Call /
Jmp dword ptr[ebp+n] 종류의 명령어를 이용한다면 우회가 가능하다.
§ 간단하게 찾아주는 Pvefindaddr 과 Mona 파이썬 스크립트가 있다.
Memory Protection - Safe Seh
§ Safe Seh는 SEH Overwrite 공격을 막기위한 보호기법
§ SE Handler의 값이 올바르지 않은 값으로 변조 되었는지 체크
§ 변조를 확인하면 프로그램을 종료한다.
§ EXE와 로딩된 모듈중, SafeSeh 옵션이 걸려있지 않은 모듈의 Pop/Pop/Ret 이나 Call /
Jmp dword ptr[ebp+n] 종류의 명령어를 이용한다면 우회가 가능하다.
§ 간단하게 찾아주는 Pvefindaddr 과 Mona 파이썬 스크립트가 있다.
14. § SEH [ Structured Exception Handler , 구조적 예외처리]
§ Pointer to next SEH record : 다음 SE Handler의 주소
§ SE Handler : 예외 발생시 이동할 Pointer.
§ 프로그램에서 Exception 발생시 처리 하는 역할
§ 강제로 예외를 발생시키고 BOF 공격으로 SE Handler 를 변조시킨다
면 EIP 변조가 가능하다. 이를 SEH Overwite 기법이라고 한다.
Memory Protection - SEH
§ SEH [ Structured Exception Handler , 구조적 예외처리]
§ Pointer to next SEH record : 다음 SE Handler의 주소
§ SE Handler : 예외 발생시 이동할 Pointer.
§ 프로그램에서 Exception 발생시 처리 하는 역할
§ 강제로 예외를 발생시키고 BOF 공격으로 SE Handler 를 변조시킨다
면 EIP 변조가 가능하다. 이를 SEH Overwite 기법이라고 한다.
15. § DEP [Data Excution Prevention]
§ 코드 영역 이외 Stack, Heap, Data Section의 Code Execution 금지
§ 코드 실행시 Exception 으로 프로그램을 종료
§ Windows XP / SP3 기준으로 DEP는 Optin이 기본옵션이므로, 해당 플
레이어는 DEP의 제약을 받지 않는다.
Memory Protection - DEP
§ DEP [Data Excution Prevention]
§ 코드 영역 이외 Stack, Heap, Data Section의 Code Execution 금지
§ 코드 실행시 Exception 으로 프로그램을 종료
§ Windows XP / SP3 기준으로 DEP는 Optin이 기본옵션이므로, 해당 플
레이어는 DEP의 제약을 받지 않는다.
16. Memory Protection - ASLR
§ ASLR (Address Space Layout Randomization, 랜덤 주소 배치)
§ 프로그램 로딩 또는 부팅시 배치되는 주소가 매번 바뀌는 보호기법
§ 메모리 주소를 바뀌게 해서 효과적으로 BOF 공격을 방어
§ Windows Vista 부터 적용되는 방어기법으로, XP에는 해당사항이 아님
§ 사진은 왼쪽부터 ASLR On / On / Off 상태이다.
17. § 16진수로 짜여진 프로그램 코드, 주로 Stack 영역에서 실행
§ Shellcode는 Backtrack 의 Metasploit 프로젝트를 이용하여 쉽게 제작
이 가능하다.
§ 쉘코드를 이용하여 원격연결, 실행, 백도어 포트개방등 다양한 명령을
실행이 가능하다.
§ 상황에 따라 인코딩이 필요한 경우도 있다. 예를들어, _swprintf 는 x00
과 xff가 들어있는경우 쉘코드가 손상되므로 저런 문자가 생기지 않도
록 인코딩을 하는것이 중요하다.
§ 예제 - 리눅스에서 /bin/sh를 실행하는 쉘코드
x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80
Shell Code
§ 16진수로 짜여진 프로그램 코드, 주로 Stack 영역에서 실행
§ Shellcode는 Backtrack 의 Metasploit 프로젝트를 이용하여 쉽게 제작
이 가능하다.
§ 쉘코드를 이용하여 원격연결, 실행, 백도어 포트개방등 다양한 명령을
실행이 가능하다.
§ 상황에 따라 인코딩이 필요한 경우도 있다. 예를들어, _swprintf 는 x00
과 xff가 들어있는경우 쉘코드가 손상되므로 저런 문자가 생기지 않도
록 인코딩을 하는것이 중요하다.
§ 예제 - 리눅스에서 /bin/sh를 실행하는 쉘코드
x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80
18. § 2가지 이상 ShellCode를 이용한 Exploit 을 시연할 예정이다.
§ 1. Exec Shellcode - CMD 나 Calc 를 실행시킴
§ 2. Bind Shellcode - Victim의 Backdoor Port 를 개방
§ 3. Reverse Shellcode - Victim이 Hacker의 Server로 연결
시연에 사용할 Shellcode
§ 2가지 이상 ShellCode를 이용한 Exploit 을 시연할 예정이다.
§ 1. Exec Shellcode - CMD 나 Calc 를 실행시킴
§ 2. Bind Shellcode - Victim의 Backdoor Port 를 개방
§ 3. Reverse Shellcode - Victim이 Hacker의 Server로 연결
20. § Victim의 Backdoor 포트를 여는 쉘코드
§ 실제로 쉘코드를 실행하면 왼쪽과 같이
4444포트로 포트가 개방됨
§ 포트를 여는 과정에서 방화벽이나 안티바
이러스등 블로킹을 당할수 있는 단점
Shellcode - Bind Shellcode
§ Victim의 Backdoor 포트를 여는 쉘코드
§ 실제로 쉘코드를 실행하면 왼쪽과 같이
4444포트로 포트가 개방됨
§ 포트를 여는 과정에서 방화벽이나 안티바
이러스등 블로킹을 당할수 있는 단점
21. Shellcode - Reverse Shellcode
§ Bind Shellcode 와는 반대로 Victim 이 Server에 역으로 접속
§ Bind 에 비해 방화벽이나 안티바이러스에 블로킹 당할 확률이 낮다
§ Victim의 IP를 몰라도 된다.
22. § BOF 이후의 Stack의 상태를 예상한다.
§ SEH 를 변조하기 위해 Fack Handler 삽
입한 상태
§ Fake Handler 에 의해 0x00280b0b 로
이동
§ 이동후 Call ebp+30 에 의해 short jump
의 주소로 이동 [스택에 진입]
§ 약 0x12 Byte 만큼 점프후 padding 진입
§ padding[x90]와 Shellcode 실행
§ GOT SHELL
Payload 구성
§ BOF 이후의 Stack의 상태를 예상한다.
§ SEH 를 변조하기 위해 Fack Handler 삽
입한 상태
§ Fake Handler 에 의해 0x00280b0b 로
이동
§ 이동후 Call ebp+30 에 의해 short jump
의 주소로 이동 [스택에 진입]
§ 약 0x12 Byte 만큼 점프후 padding 진입
§ padding[x90]와 Shellcode 실행
§ GOT SHELL
23. § 사진은 Python으로 제작된 exploit
§ 모은 정보를 이용하여 Exploit을 작성.
§ GOT SHELL :D
Exploit 구성
§ 사진은 Python으로 제작된 exploit
§ 모은 정보를 이용하여 Exploit을 작성.
§ GOT SHELL :D