비주얼 스튜디오 옵션 - 릴리즈 모드

비주얼 스튜디오로 작성된 코드를 컴파일시 Stub Code가 추가되거나 보호 기법이 적용되어 있어 버퍼 오버플로우 취약점을 이해하는데 많은 어려움이 존재한다.


여기에서는 보호 기법 및 우회 기법을 소개하기 전까지 당분간 컴파일 옵션을 변경해서 사용하도록 하자.

 

Stub Code는 컴파일러가 프로그램을 생성할 때 임의로 추가시킨 코드로 컴파일별로 자신의 특성에 맞게 Stub Code를 추가시킨다.


악성코드 분석에서 Stub Code는 실행 파일 정보, Image Base Address 등 프로그램을 실행하는데 필요한 정보를 가져오는 코드로 구성되어 있어 중요하다. 하지만 어셈블리어로 작성된 코드는 Stub Code가 추가되어 있지 않다.


비주얼 스튜디오에서는 기본적으로 디버그 모드로 컴파일하도록 설정되어 있다. 이를 릴리즈 모드로 컴파일 하도록 설정 변경하자.


○ 프로젝트 > 속성 > 구성(C) : Release > 확인


릴리즈 모드


디버그 모드와 릴리즈 모드
디버그 모드란 비주얼 스튜디오를 이용해서 프로그램의 오류를 수정할 수 있도록 실행파일을 만드는 형태이고, 릴리즈 모드는 비주얼 스튜디오를 이용해서 프로그램 개발시 개발이 끝나고 프로그램을 배포할 때 사용하는 형태를 의미한다.

비주얼 스튜디오 옵션 - 최적화 옵션

최적화 옵션은 프로그램을 어떤 방식으로 배포할지 사용되는 옵션으로 최적화 옵션을 비활성화하면 모든 코드가 축소 및 확장 되지 않게 그대로 나온다.


○ 프로젝트 > 속성 > 구성 속성 > C/C++ > 최적화 > 최적화 : 사용 안 함(/Od)


최적화 옵션


비주얼 스튜디오 옵션 - 스택 쿠키 옵션

스택 쿠키는 버퍼 오버플로우 공격을 차단하기 위해 함수 시작과 끝 부분(SFP, RET) 사이에 랜덤한 값을 추가시킨 보호 기법이다.


보통 공격자가 작성한 코드는 RET를 덮어쓰게 되는데 스택 쿠키를 활성화하면 반드시 스택 쿠키를 덮어쓰게되므로 프로그램에서는 스택 쿠키 변조 유무를 판단하여 버퍼 오버플로우를 감지하고 예외 루틴을 진행한다.


여기에서는 스택 쿠키를 비활성화하여 보호 기법이 적용되지 않도록 설정 변경하자.


○ 프로젝트 > 속성 > 구성 속성 > C/C++ > 코드 생성 > 버퍼 보안 검사 : 아니오(/GS-)


스택 쿠키 옵션


비주얼 스튜디오 옵션 - ASLR/DEP 옵션

ASLR은 실행 파일이 메모리에 로딩될 때 ImageBase 주소를 랜덤하게 변경하는 보호 기법이다. DEP는 실행 권한이 없는 영역(스택, 힙, 데이터)에서 코드 실행을 금지하는 보호 기법이다.


여기에서는 ASLR과 DEP 옵션을 비활성화하여 보호 기법이 적용되지 않도록 설정 변경하자.


○ 프로젝트 > 속성 > 구성 속성 > 링커 > 고급 > 임의 기준 주소, DEP(데이터 실행 방지)


ASLR / DEP 옵션


디버거 옵션 - 익스플로러 메뉴

디버거(OllyDbg, Immunity Debugger, WinDbg)로 용이하게 취약점을 분석할 수 있도록 옵션을 변경하도록 한다.


OllyDbg / Immunity Debugger에서 Add OllyDbg to menu in Windows Explorer 버튼을 클릭하면 실행 파일 우측 메뉴에서 디버거 메뉴가 보이게 된다.


○ Options > Add to Explorer > Add OllyDbg to menu in Windows Explorer > Done


익스플로러 메뉴


실행 파일 마우스 우측 버튼을 클릭하면 Open With OllyDbg 메뉴가 생성된다. 해당 메뉴를 클릭하면 OllyDbg에서 자동으로 해당 파일을 분석할 수 있다.


익스플로러 메뉴 생성


디버거 옵션 - Just-in-time debugger

OllyDbg / Immunity Debugger에서 Make OllyDbg just-in-time debugger 버튼을 클릭하면 특정 프로그램에서 예외 발생(크래시, Crash)시 디버그 버튼을 클릭하면 해당 디버거로 분석할 수 있다.


○ Options > Just-in-time debugging > Make OllyDbg just-in-time debugger > Done


Just-in-time debugger 옵션


실행 파일이 예외가 발생하면 오류 보고 창이 출력된다. 또한, 디버그(B) 버튼을 클릭하면 설정한 디버거가 실행된다.


오류 보고 창


디버거 옵션 - postmortem debugger

특정 파일에서 예외가 발생하면 자동으로 WinDbg로 붙게 설정할 수 있다. cmd 창에서 WinDbg 실행 파일 경로로 이동한 뒤 windbg -I를 입력한다.


postmortem debugger 설정


WinDbg가 postmortem debugger로 설정되었다고 출력된다.


postmortem debugger 설정 확인


예외가 발생시 자동으로 설정된 디버거가 실행될 수 있도록 레지스트리에서 설정할 수 있는 방법이 존재한다.


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug


- Auto(0) : 예외 발생시 자동으로 디버거가 실행되지 않음

- Auto(1) : 예외 발생시 자동으로 설정된 디버거가 실행

- Debugger : 실행할 디버거의 절대 경로

-> Debugger : "C:\Program Files\Immunity Inc\Immunity Debugger\ImmunityDebugger.exe" -AEDEBUG %ld %ld


레지스트리에서 postmortem debugger


예외가 발생하면 자동으로 WinDbg가 실행된다. 이 기능을 끄려면 레지스트리에서 Auto값을 0으로 변경하면 된다.


설정된 디버거 실행


▶ Tomabo MP4 Player 3.11.6 취약점 분석 (SEH Based Stack Overflow)

▶ Easy RM to MP3 Converter(Stack Buffer Overflow) 취약점 분석

▶ MS Word 쉘코드 생성

▶ CVE-2014-6332 취약점 분석 (Internet Explorer)

▶ Metasploit(msfvenom) 쉘코드 디코딩

▶ UAC(User Account Control) 우회 - PowerShell

▶ CVE-2017-12617 취약점 분석 (Apache Tomcat)

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유