보안정보
전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.
스크립팅 엔진 메모리 손상 취약점(CVE-2016-0189) 분석
2016.10.05
20,882
보안관제사업부 보안분석팀 유병욱, 신지용
1. 개요
'CVE-2016-0189'는 인터넷 익스플로러(Internet Explorer)의 VBScript엔진이 소스코드를 처리하는 과정에 메모리를 손상시켜 임의의 코드를 실행시키는 취약점이다. 이를 이용하면 공격자는 악성 홈페이지에 접속한 사용자 PC에서 공격코드를 실행할 수 있으며 마이크로소프트사에서는 해당 취약점을 방지하기 위해 2016년 5월 10일에 CVE-2016-0189 취약점의 보안패치(MS16-053)를 배포했다.
이번 호에서는 스크립팅 엔진 메모리 손상 취약점(CVE-2016-0189)분석 및 이를 이용한 공격과 대응방안에 대해서 설명하고자 한다.
1) 취약점 정보
CVSS 점수 | 7.6 |
취약점 타이틀 | 스크립팅 엔진 메모리 손상 취약점 |
취약점 분류 | Denial Of Service, Execute Code, Overflow Memory corruption |
영향 받는 대상 | ※ 보안패치를 하지 않은 버전에 해당 한다. |
[표 1] CVE-2016-0189 정보
[참고] CVSS(Common Vulnerability Scoring System) 등급별 영향도
CVSS 등급 | CVSS 점수 | 영향 |
높음 | 7.0 ~ 10.0 | 원격 공격에 의해 모든 시스템 권한 획득 가능 |
중간 | 4.0 ~ 6.9 | 원격 공격 가능성이 있고 부분적인 권한 획득 가능 |
낮음 | 0.0 ~ 3.9 | 원격 공격 가능성이 낮고 사용자의 주의로 쉽게 대응 |
[표 2] CVSS 등급별 영향도
2) CVE-2016-0189, POC 소스코드 분석
다음은 CVE-2016-0189 취약점을 증명하는 코드로 더 이상 유효하지 않는 메모리에 접근하면서 인터넷 익스플로러의 충돌을 발생시킨다. 이 과정은 VBScript 코드로 20000 사이즈의 배열을 선언한 뒤에 해당 배열 사이즈를 1로 변경 후 다시 원래의 값을 불러오며 메모리 충돌을 일으키는 것이다.
※ ReDim Preserve API(VisualBasic) : 배열에 저장된 값을 보전하면서 배열의 길이를 재선언 한다.
[그림 1] CVE-2016-0189, POC 소스코드
위의 소스코드로 작성된 페이지에 접속하면 아래와 같이 메시지 창(STAGE 1)을 띄우고 ‘확인’ 버튼을 누르면 메모리 충돌을 일으켜 인터넷 익스플로러의 작동을 중지(STAGE 2)시킨다.
[그림 2] CVE-2016-0189 소스코드 실행 결과
2. MIC(Mandatory Integrity Control) 정책*을 우회하여 ‘명령 프롬프트 창’ 실행
1) 공격 시나리오
일반적으로 인터넷 익스플로러를 실행하면 ‘Low’등급의 프로세스가 생성되므로 해당 등급에서는 ‘명령 프롬프트 창’을 실행 시킬 수 없다. 따라서 ‘명령 프롬프트 창’을 실행하기 위해서 ‘Medium’등급의 인터넷 익스플로러가 필요한데, 사용자 PC에서 강제로 서버를 동작시킨 후 로컬 페이지에 접속 시켜 ‘Medium’등급의 인터넷 익스플로러가 ‘명령 프롬프트 창’을 실행시키는 공격을 한다.
[그림 3] 공격 시나리오
* MIC(Mandatory Integrity Control)정책은 별첨을 통해서 설명한다.
2) 테스트 환경 및 파일 설명
■ 피해자 PC 환경 |
■ 공격자 웹 서버에 아래의 파일을 업로드 한 후 동작 시킨다.
(1) 파일 | 악성행위 동작 페이지.html |
행위 | 악성행위 동작의 메인 페이지로서 접속한 사용자 PC에 악성파일을 다운로드 시키고 공격에 필요한 명령을 동작시킨다. |
내용 | ① 인터넷 익스플로러 임시저장 공간에 아래의 파일을 강제 다운로드 한다. |
(2) 파일 | 악성행위 실행 페이지.html |
행위 | CVE-2016-0189 취약점을 이용해 ‘명령 프롬프트 창’을 띄우는 공격을 한다. |
내용 | ① VBScript 엔진의 메모리 취약점을 공격한다. ② ‘명령프롬프트 창’을 실행한다. |
(3) 파일 | ielocalserver.dll |
행위 | 사용자 PC에서 동작하는 서버 프로그램 |
내용 | ① 5555번 포트 오픈 |
(4) 파일 | ieshell32.dll |
행위 | 서버 동작에 필요한 환경변수를 서버 프로그램으로 전달한다. |
[표 3] 공격에 필요한 파일 설명
3) 공격 시나리오 테스트
악성 홈페이지에 접속 하면 서버동작에 필요한 파일들을 인터넷 익스플로러의 임시저장폴더[1]에 자동으로 다운로드 된다.
[1] C:Users사용자명AppDataLocalMicrosoftWindowsINetCacheLowIE
[그림 4] 악성 홈페이지 접속
※ 다운로드 파일
① ieshell32.dll
② ielocalserver.dll
③ vbscript_godmode.html (악성행위 실행 페이지.html)
[그림 5] 파일 다운로드 패킷
다음으로 해당 파일이 ‘검색기록 삭제’를 통해 지워지는 것을 대비해 시스템 임시저장폴더[2]에 복사 하며, ‘ieshell32.dll’파일은 ‘shell32.dll’으로 이름을 변경한 뒤에 ‘위의폴더System32’에 복사한다. 복사가 끝나면 다운로드 받은 파일을 삭제하고 다음의 과정으로 진행한다.
[2] C:Users사용자명AppDataLocalTempLow
[그림 6] 복사된 파일
다음으로 사용자 PC에 다운받은 서버 프로그램을 동작시켜 아래와 같이 5555번 포트를 오픈 한다.
[그림 7] 사용자 PC에서 ‘5555’번 포트 오픈
사용자 PC에서 로컬서버인 ‘http://127.0.0.1:5555/악성행위실행페이지.html’에 자동으로 리다이렉트 되면서 ‘Medium’등급의 인터넷 익스플로 프로세스가 생성된다. 참고로 ‘Low’등급의 인터넷 익스플로러는 MIC등급의 영향으로 ‘명령프롬프트 창’을 실행할 수 없다.
‘악성행위실행페이지.html’에서 명령프롬프트 창을 띄우는 공격코드는 아래와 같이 삽입되어 있다.
[그림 8] 공격자 명령 코드
아래와 같이 인터넷 익스플로러는 ‘Medium’등급으로 실행되어 ‘명령프롬프트 창’을 실행 시킬 수 있었다.
[그림 9] 명령프롬프트창 실행
‘Medium’등급으로 실행된 인터넷 익스플로러는 ‘Low’등급에서 실행 시킬 수 있는 프로그램들의 제한을 우회하기 때문에 공격자 입장에서 다양한 공격을 할 수 있다. |
3. 대응방안
1) SNORT 탐지 규칙
alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any (msg:"ET EXPLOIT CVE-2016-0189 Common Construct M1"; flow:established,from_server; file_data; content:"%u0008%u4141%u4141%u4141"; nocase; content:"redim"; nocase; content:"Preserve"; content:"2000"; distance:0; pcre:"/^s*?x29/Rs"; content:"%u400C%u0000%u0000%u0000"; nocase; reference:url,theori.io/research/cve-2016-0189; reference:cve,2016-0189; classtype:attempted-user; sid:2022971; rev:1;) |
alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any (msg:"ET EXPLOIT CVE-2016-0189 Common Construct M2"; flow:established,from_server; file_data; content:"triggerBug"; nocase; content:"Dim "; nocase; distance:0; content:".resize"; nocase; pcre:"/^s*x28/Rs"; content:"Mid"; pcre:"/^s*?(xs*,s*1,s*24000s*x29/Rs"; reference:url,theori.io/research/cve-2016-0189; reference:cve,2016-0189; classtype:attempted-user; sid:2022972; rev:1;) |
2) 보안패치를 통한 공격차단
마이크로소프트에서는 CVE-2016-0189 취약점과 관련된 Internet Explorer 보안 패치(MS16-053)를 배포하고 있으므로 최신 보안 패치가 이루어지지 않은 사용자들은 해당 패치를 적용하는 것을 권고한다.
※ Windows 업데이트
https://technet.microsoft.com/ko-kr/library/security/MS16-053
3) VBScript.dll 및 JScript.dll에 대한 액세스 제한
해당 엔진(VBScript.dll, Jscript.dll)을 사용하지 않는다면 아래와 같은 방법으로 액세스 제한 조치를 할 수 있다. 만약, 해당 액세스 제한 조치를 ‘취소’ 하려면 아래 링크를 확인하기 바란다.
32비트 시스템의 경우 관리 명령 프롬프트에서 다음 명령을 입력한다.
C:> takeown /f %windir%system32vbscript.dll |
64비트 시스템의 경우 관리 명령 프롬프트에서 다음 명령을 입력한다.
C:> takeown /f %windir%syswow64vbscript.dll |
※ 액세스 제한을 취소하는 방법
https://technet.microsoft.com/ko-kr/library/security/MS16-053
4. 별 첨
1) MIC(Mandatory Integrity Control)
※ MIC(Mandatory Integrity Control) 이란? |
인터넷 익스플로러는 인터넷에서 가져오는 데이터들을 신뢰하지 않기 때문에 자식 프로세스를 ‘Low’등급으로 실행시켜 보안성을 높여주게 되어 있다. ‘Low’등급의 인터넷 익스플로러는 프로그램 실행 시 제약이 있으므로 공격자는 제약을 받지 않는 ‘Medium’등급의 인터넷 익스플로러가 필요하다.
※ Medium 등급의 인터넷 익스플로러를 사용하는 방법은 아래와 같다.
① 로컬서버 페이지에 접속
② 인트라넷 환경
③ 인터넷 익스플로러 옵션의 보호 모드 사용 해제
아래는 ‘Medium’등급의 인터넷 익스플로러를 확인하기 위한 테스트이며, 일반적으로 실행한 인터넷 익스플로러는 ‘Low’등급인 것을 확인할 수 있다.
[그림 10] 보호모드 설정 시 ‘Low’등급으로 동작
인터넷 옵션에서 ‘보호 모드 사용’을 해제하면 아래와 같이 ‘Medium’등급으로 프로세스가 생성된 것을 확인 할 수 있다.
[그림 11] 보호모드 미설정 시 ‘Medium’등급으로 동작
Elevation Policy 정책에 따라 ‘Low’등급의 인터넷 익스플로에서 실행시킬 수 있는 프로그램의 제한은 아래의 레지스트리 주소에 정의되고 있다.
※ Elevation Policy 정책의 레지스트리 주소
HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerLow RightsElevationPolicy
5. 참고 자료
[1] JScript 및 VBScript용 누적 보안 업데이트(3156764)
https://technet.microsoft.com/ko-kr/library/security/ms16-053.aspx
[2] PATCH ANALYSIS OF CVE-2016-08189
http://theori.io/research/cve-2016-0189
[3] Scripting Engine Memory Corruption Vulnerability (CVE-2016-0189)
http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-0189
[4] Understanding and Working in Protected Mode Internet Explorer
https://msdn.microsoft.com/en-us/library/bb250462(v=vs.85).aspx
[5] There’s No Place Like Localhost: A Welcoming Front Door To Medium Integrity
https://community.hpe.com/t5/Security-Research/There-s-No-Place-Like-Localhost-A-Welcoming-Front-Door-To-Medium/ba-p/6560786#.V80lIU2LSvj
[6] SNORT 탐지 규칙
http://rules.emergingthreats.net/