ActiveX 취약점 분석 방법(ActiveX Vulnerability Analysis)

ActiveX

MS사(Microsoft)에서 만든 COM(컴포넌트 오브젝트 모델)과 OLE(오브젝트 링킹 앤 임베딩)기술두개를 합쳐서 새로 이름 지은 것이 바로 ActiveX입니다. 주로 IE에서 애드온인 ActiveX Control으로 사용됩니다. 유독 우리나라에선 많이 사용되었지만, 보안적인 문제로 인하여 점차 사라지고 있는 상황입니다. ActiveX의 불편함과 보안성을 지적하는 패러디도 많이 나타났지요.

불편하다곤 하지만, 초기에 MS의 개발 자원을 웹에서 이용할 수 있다는 점으로 동적 웹페이지의 시대를 열기도 했었죠. 기능이 많아 약점도 많은 이 ActiveX에 대해 분석하는 방법에 대한 이야기입니다.

분석에 앞서 ActiveX를 설치하면 파일이 남는 부분에 대해 잠깐 보도록 하겠습니다. ActiveX는 기본적으로 시스템루트 디렉토리 하단의 Downloaded Program Files 하단에 관련 파일이 있으며, ocx 등의 파일을 확보할 수 있습니다.

ActiveX Analysis

기본적으로 웹 기반에서 동작하기 떄문에 웹 취얒검은 동일하게 영향을 받을 수 있으며 이외에도 BOF, FSB 등 메모리 관련된 부분들도 영향받을 수 있습니다. 결과적으로 잘 성공하는 경우 Client에서 임의로 명령을 실행하는 경우가 가능합니다.

Testing Params

일단 ActiveX에 대해 우리가 넘겨줘야할 파라미터, 값들에 대해서 찾아야합니다. 여러가지 방법을 통해서 사용하는 함수들을 알아낼 수 있습니다.

  • WebPage에서 JS로 호출되는 구간을 통해 확인
  • 서비스 동작에서 호출하진 않지만 관련 js 등을 분석하여 추가로 얻어낸 호출 구간들 확인
  • Tool을 통해 함수 확인

In response

위 2가지 방법은 ActiveX가 사용되는 페이지를 보고 있을 때 편리합니다. ActiveX를 사용할때 ActiveX에서 사용하는 Method 를 웹에서 호출해야 하기 때문이죠.

obj = new getActiveClient
userObj = obj.getUserInfo()

With OLE/COM Object Viewer

두번째 방법은 Tool을 통해 사용하는 함수를 확인하는 방법입니다. 주로 OLE/COM Object Viewer로 확인이 가능합니다. oleview.exe는 MS Resource Kit에 포함되어 있으며, 아래 링크에서 RK 설치 후 tool 디렉토리에 들어가시면 사용하실 수 있습니다.

hxxps://www.microsoft.com/en-us/download/details.aspx?id=17657 였으나 현재는 제공되지 않는 것 같네요 😭

설치 후 Program files (x86)/Windows Resource Kits/Tools/oleview.exe 로 실행 가능하며 각 툴 내 리스트에서 우클릭 후 View Type Information 을 통해 확인할 수 있습니다.

left layer list -> right click -> View Type Information

위처럼 메소드에 대해서 확인이 가능합니다. 추가로 처음 사용시 dll 이 없는 이슈가 있었는데, 해당 dll을 깔아 쉽게 설치가 가능합니다. (아래 Error 발생 시)

ActiveX에서 사용하는 메소드에 대해 확인이 되었으니, 일반 웹 해킹 기법과 유사하게 공격이 가능합니다. 임의로 해당 ActiveX파일을 호출하는 웹 페이지를 만든 후 사용하는 Method 에 대해 파라미터 값을 변조하여 Traversal,Execute Command 등 여러가지 공격을 수행하면 됩니다.

예를들면 아래와 같이 볼 수 있겠네요.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title>Untitled</title>
<meta name="generator" content="Namo WebEditor v3.0">
</head>

<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">

<p><object classid="clsid:0D886696-C7CE-11D3-A175-08002BF12506" width="445" height="449">
</object>
</p>
</body>

</html>

간단한 ActiveX 코드를 가지고 설명하도록 하겠습니다. 먼저 object 태그를 이용하여 ActiveX 를 로드합니다. 조금 더 발전된 코드에서 취약점 분석이 들어가는 부분입니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title>Untitled</title>
<meta name="generator" content="Namo WebEditor v3.0">
</head>

<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">

<script language="vbscript">
sub OnTextButtonClick()
        Test.SetText form.TextEdit.value       
end sub

sub OnDrawTypeChange()
        Test.DrawType = form.DrawTypeCombo.value
end sub
</script>

<p><object classid="clsid:0D886696-C7CE-11D3-A175-08002BF17507" width="315" height="320">
id = "Test" </object>
 &nbsp;</p>
<form name="form" method="get">
<p><input type="text" name="TextEdit" value="ActiveX 테스트"> <input type="button"
 name="TextButton" value="설정"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<select
 name="DrawTypeCombo">
<option value="0">사각형</option>
<option value="1"></option></select></p>
</form>
<p>&nbsp;</p>
</body>

</html> 

여기서 중요한 부분이 바로 vbscript 로 작성된 함수들입니다. 이 함수들을 통해 ActiveX로 데이터가 넘어가며 처리한 결과를 웹에 나타나게 되는데, 이 부분에서 ../../../를 통해 시스템 파일을 유도하거나, 시스템 명령으로 악성 코드를 설치할 수 있는 발판을 마련하게 됩니다.

요즘 많이 쓰이지는 않지만, 종종 레거시 시스템에선 보이기도해서 아직은 잘 알고 있어야할 부분인 것 같네요 :D

Reference

  • http://www.dart.com/web-get-page-code-example.aspx
  • http://teamcrak.tistory.com/111
  • http://jys92.com.ne.kr/VisualC/UseActiveXInWeb.htm