스크립트 SWF 파일 Exploit Drive by Download 분석
I N D E X 1 악성 스크립트 분석 2 SWF 파일 Exploit 분석 3 쉘코드 실행 과정 분석
1. 악성 스크립트 분석
1-1 악성 링크 구조 Compress Site Gate/Redirect Site Rig Landing Page
1-2 Compress Site
1.3 Gate/Redirect Site
1.4 Rig Landing Page 인코딩된 코드 디코딩 코드 인코딩된 코드 디코딩 코드
1.4 Rig Landing Page(첫 번째 인코딩된 코드)
1.4 Rig Landing Page(두 번째 인코딩된 코드)
2. SWF 파일 Exploit 분석
1 2 2-1 CVE-2015-5122 이태리 소재의 Hacking Team사의 데이터유출로 인해 알려지게 된 취약점 DisplayObject class의 opaqueBackground 속성 Setter에서 발생하는 UAF 취약점
2-2 악성 SWF 파일 개요(파일 구조) Encrypt Data ROP+Shellcode Exploit code Exploiter Decrypter Main Start <Sample>
2-2 악성 SWF 파일 개요(안티 디버깅) <난해한 변수명> <암호화된 데이터> <push+pop 난독화>
2-3 Exploit 과정 분석 New Vector.<int>(8) 호출 Vector<uint> TextLine createTextLine() 호출 클래스.prototype.valueOf = 함수
2-3 Exploit 과정 분석 textLine 개체.opaqueBackground = 클래스 객체 Vector<uint> Vector<uint>(Free) 사용자 정의 valueOf() 호출 TextLine TextLine(Free) Vector<uint> (TextLine(F) OverWrite) recreateTextLine() 호출 Vector<uint> 길이 변경(증가)
2-3 Exploit 과정 분석 사용자 정의 valueOf() return Vector<uint>(Free) opaqueBackground속성에 반환값 저장 TextLine(Free) 반환값 저장 Vector<uint> (TextLine(F) OverWrite) 확대(Vector<uint> 일부) 반환값 저장 Vector 길이 더미값 배열
2-3 Exploit 과정 분석(Exploit 원인 분석) textLine 객체 주소 반환 ESI에 객체 주소 저장 사용자 정의 valueOf 함수호출 Vector<uint> 반환값 저장
2-3 Exploit 과정 분석(코드 분석) 객체 생성 메소드 재정의 재정의 함수 호출
Vector<uint> .length=0x62 2-3 Exploit 과정 분석(코드 분석) textLine Free Vector<uint> .length=0x62 0x6a Return
2-3 Exploit 과정 분석(코드 분석) Vector<Object> Vector<uint> 저장 Length==0x6a Next Vector<uint> length=0x40000000 Current Vector<uint> length=0x40000000 -0x66 Next Vector<uint> length=0x62 -0x2
3. 쉘코드 실행 과정 분석
3-1 주소값 구하기 Current Current Vector+1 Current Vector+2 Current+1(+0x190) Vector Free Current+2(+0x320) Current Vector+1 주소 Current Vector 배열주소 Flash 모듈 주소 Base주소 (ByteArray)
3-2 ByteArray 생성 ByteArray 생성 0x8000 To search
3-3 ByteArray 주소값 구하기 ByteArray 객체일 경우 ByteArray 배열일 경우 ByteArray 배열주소 Base 주소 (toString)
3-4 ROP 가젯 검색 Code Section 0xFFFFF000 Flash 모듈 영역 주소 MZP
3-5 Payload 구성 ByteArray 주소영역 ROP 가젯+Shellcode
3-6 쉘코드 실행 ByteArray toString 주소 위치 함수 주소 후킹 ByteArray에 저장된 주소실행
Q & A Any question?
THANK YOU For your attention