리버싱 발표ppt_7_11

Download Report

Transcript 리버싱 발표ppt_7_11

발표자 : 박현우
1
• 1. DLL Injection
• 2. DLL Ejection
• 3. PE 패치를 이용한 DLL 로딩
2
• DLL(Dynamic Linked Library) : 동적 연결 라이브러리
• 다른 프로세스에 침투하는 가장 쉽고 강력한 방법
• 다른 프로세스가 LoadLibrary() API를 스스로 호출하도록 명
령하여 내가 원하는 DLL 파일을 강제로 삽입하는 것
3
4
• 원격 스레드 생성(CreateRemoteThread() API)
• 레지스트리 이용(AppInit_DLLs 값)
• 메시지 후킹(SetWindowsHookEx() API)
5
• 방법 : 메모장에 DLL 파일을 인젝션하고, 인젝션된 DLL 파일은
인터넷에 접속하여 http://www.naver.com/index.html 파일을 다
운받도록 한다.
• 실습 파일
notepad.exe , InjectDll.exe , myhack.dll
• 순서
1) InjectDll.exe와 myhack.dll 파일을 다운받아 C:\work\ 에 복사
2) 메모장(notepad.exe) 을 실행하여 PID(Process ID) 를 확인
3) cmd 창에서 InjectDll.exe 를 실행
6
7
8
9
• DLL 인젝션의 반대
• 다른 프로세스가 FreeLibrary() API 를 스스로 호출하도록 명령하
여 삽입한 DLL 파일을 제거하는 것
• (CreateRemoteThread()로 인젝션한 경우만 가능)
• 실습 파일 - EjectDll.exe
• 방법 : cmd 창에서 EjectDll.exe 실행
10
11
• 지금까지 알아 본 것은 DLL을 ‘실행 중인 프로세스’에 DLL을 강
제로 인젝션하는 방법
<목표>
• 대상 프로그램 파일 자체를 직접 수정하여 실행 시 내가 원하는
DLL을 자동으로 로딩하도록 한다.
• 한 번 적용해 놓으면 별도의 인젝션 과정 없이 프로세스가 시작
할 때마다 원하는 DLL을 로딩
12
• < 알고 있어야 하는 개념 >
PE(Potable Executable) Header 구조
IAT(Import Address Table)
IID(Image Import Descriptor) : 임포트하는 DLL파일 마다의 구조체
IDT(Import Directory Table) : PE 파일에서 임포트하는 DLL에 대한
정보가 구조체 리스트 형식으로 저장
- INT(Import Name Table)
- RVA(Relative Virtual Address) : 메모리에서의 상대적 주소
•
-
13
• 실습 파일
TextView.exe , myhack3.dll ,
• < 패치 아이디어 >
IDT 리스트의 마지막에 myhack3.dll 파일을 추가!
(DLL 파일은 ‘구글 웹사이트’의 index.html 파일을 다운)
14
15
16
이 부분을 다른 넓은
위치로 옮기기 위한
빈 영역을 찾는다!
17
• 이 비어있는 영역이 진짜 Null Padding 영역인지 확인 필요!
18
• TextView.exe 패치 작업!
- PEView : PE 헤더 정보를 확인하는데 사용
- HxD(Hex Editor) : 실제로 파일의 값을 변경(패치)하는데 사용
1) 패치 할 새로운 영역의 주소로 IDT를 옮긴다.
2) myhack3.dll을 위한 IID구조체를 구성하여 IDT의 끝에 추가.
3) 정상적으로 실행하기 위한 값(INT, Name, IAT) 세팅.
4) IAT 섹션의 속성(Characteristics) 변경.
19
이제
IMPORT table이
주소 8C80 위치에
존재하는 걸로 간
주된다.
20
• TextView.exe 패치 작업! – 1) 2)
IDT 복사
myhack3.dll을 위한
IID 구조체 추가
21
• TextView.exe 패치 작업! – 3) INT, Name, IAT 세팅
22
• TextView.exe 패치 작업! – 4) 속성 변경
23
WRITE 속성이 추가됨! – 메모리에 로딩될 때 실제 함수 주소로
덮어써야 하므로 필요
24
• 확인!
25
• 확인!
26
감사합니다.
27