안정성을 위한 Meterpreter 프로세스 마이그레이션

Kali LinuxBeginner
지금 연습하기

소개

침투 테스트에서 Metasploit 과 같은 도구를 사용하여 대상 시스템에 초기 액세스 권한을 얻은 후, 설정된 연결 (또는 "세션") 은 종종 초기에 악용된 프로세스 내에 존재합니다. 이는 웹 브라우저, 문서 리더 또는 다른 사용자 애플리케이션일 수 있습니다. 이러한 프로세스는 불안정하거나 사용자가 언제든지 종료할 수 있으므로 세션이 종료될 수 있습니다.

프로세스 마이그레이션은 이 초기적이고 잠재적으로 불안정한 프로세스에서 핵심 시스템 프로세스와 같이 더 안정적이고 오래 실행되는 프로세스로 세션을 이동하는 기술입니다. 이는 액세스의 안정성과 지속성을 크게 향상시킵니다. 또한 악성 코드가 합법적이고 신뢰할 수 있는 프로세스 내에 숨겨지므로 탐지를 회피하는 데 도움이 될 수 있습니다.

이 랩에서는 Meterpreter 프로세스 마이그레이션의 기본 워크플로우를 배우게 됩니다. 우리는 Linux 환경에 있지만, 이 중요한 후속 익스플로잇 (post-exploitation) 기술을 이해하기 위해 손상된 시스템에서 수행할 단계를 시뮬레이션할 것입니다.

ps 명령어를 사용하여 실행 중인 프로세스 목록 가져오기

이 단계에서는 쉘을 획득한 후 첫 번째 작업으로 시스템을 조사해야 합니다. 마이그레이션할 잠재적 대상을 식별하기 위해 현재 실행 중인 프로세스가 무엇인지 확인해야 합니다. 실제 Meterpreter 세션에서는 Meterpreter 프롬프트 내에서 직접 ps 명령어를 사용하게 됩니다.

표준 Linux 터미널에서 이를 시뮬레이션하므로, Linux ps 명령어에 aux 플래그를 사용하여 실행 중인 모든 프로세스의 상세 목록을 가져올 것입니다. 이는 실제 시나리오에서 볼 수 있는 것과 유사한 출력을 제공할 것입니다.

실행 중인 모든 프로세스를 나열하려면 터미널에서 다음 명령을 실행하십시오:

ps aux

긴 프로세스 목록이 표시됩니다. 다음 열에 주의하십시오:

  • USER: 프로세스를 소유한 사용자입니다.
  • PID: 프로세스를 식별하는 고유한 번호인 프로세스 ID 입니다.
  • COMMAND: 프로세스를 시작한 명령어입니다.

다음은 출력의 일부 예시입니다:

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0 169444 13136 ?        Ss   01:23   0:02 /sbin/init
labex      10121  0.1  0.2 886980 89284 ?        Sl   01:25   0:05 /usr/lib/firefox/firefox
labex      10345  0.0  0.0 243356 25980 ?        S    01:26   0:00 /usr/lib/xfce4/panel/wrapper-2.0
...

이 목록은 마이그레이션할 적합한 프로세스를 찾기 시작하는 데 필요한 정보를 제공합니다.

explorer.exe 와 같이 마이그레이션할 안정적인 프로세스 식별

이 단계에서는 이전 단계에서 얻은 프로세스 목록을 분석하여 마이그레이션할 적합한 대상을 선택합니다. 좋은 대상 프로세스는 다음과 같아야 합니다:

  1. 안정성: 사용자 세션 또는 시스템 가동 시간 동안 계속 실행되는 프로세스여야 합니다.
  2. 적절한 권한: 현재 세션과 동일하거나 더 높은 권한으로 실행되어야 합니다.
  3. 올바른 아키텍처: Meterpreter 페이로드의 아키텍처 (32 비트 또는 64 비트) 와 일치해야 합니다.

손상된 Windows 시스템에서 안정적인 프로세스의 전형적인 예는 그래픽 쉘 (데스크톱, 작업 표시줄 등) 을 관리하고 사용자가 로그인할 때 거의 항상 실행되는 explorer.exe입니다. 또 다른 일반적인 대상은 svchost.exe입니다.

Linux 랩 환경에서는 유사하게 안정적이고 사용자 소유의 프로세스를 식별하여 이를 시뮬레이션할 것입니다. ps aux 출력에서 xfce4-panel(XFCE 데스크톱 패널) 과 같은 프로세스는 좋은 후보입니다.

grep을 사용하여 프로세스 목록을 필터링하고 xfce4-panel 프로세스를 쉽게 찾겠습니다. 이를 통해 프로세스 ID(PID) 를 정확히 파악할 수 있습니다.

ps aux | grep xfce4-panel

출력은 다음과 유사해야 합니다. 두 번째 열에 PID 가 포함되어 있습니다.

labex      10345  0.0  0.0 243356 25980 ?        S    01:26   0:00 /usr/lib/xfce4/panel/wrapper-2.0
labex      12345  0.0  0.0  12345  1234 pts/0    S+   01:30   0:00 grep --color=auto xfce4-panel

이 예시에서 xfce4-panel의 PID 는 10345입니다. 귀하의 PID 는 다를 것입니다. 이제 마이그레이션할 대상을 식별했습니다.

대상 프로세스 ID 로 migrate 명령어 사용

이 단계에서는 프로세스 마이그레이션을 위한 핵심 Meterpreter 명령어인 migrate를 사용합니다. 명령어의 구문은 간단합니다: migrate <PID>. 이동하려는 프로세스의 PID 를 제공하기만 하면 됩니다.

시뮬레이션된 환경에 있으며 활성 Meterpreter 세션이 없으므로 migrate 명령어를 직접 실행할 수 없습니다. 대신, 대상 프로세스 (xfce4-panel) 의 PID 를 찾고 해당 migrate 명령어를 텍스트 파일에 작성하여 이 작업을 시뮬레이션할 것입니다.

먼저 xfce4-panel 프로세스의 PID 를 가져와 변수에 저장하겠습니다. pgrep 명령어가 이에 완벽합니다.

PID=$(pgrep xfce4-panel | head -n 1)

이 명령어는 xfce4-panel의 PID 를 찾아 PID 변수에 저장합니다. 이제 migrate 명령어를 simulated_command.txt라는 파일로 에코하여 시뮬레이션합니다.

echo "migrate $PID" > simulated_command.txt

파일을 보고 시뮬레이션된 명령어가 올바른지 확인해 보겠습니다.

cat simulated_command.txt

출력에는 migrate 명령어와 xfce4-panel 프로세스의 PID 가 표시되어야 합니다.

migrate 10345

이제 migrate 명령어 실행을 성공적으로 시뮬레이션했습니다.

마이그레이션 성공 여부 확인

이 단계에서는 프로세스 마이그레이션이 성공했는지 확인하는 방법을 배웁니다. 실제 Meterpreter 세션에서 migrate 명령어를 실행한 후, 세션이 이제 새로운 대상 프로세스 내에서 실행되고 있는지 확인해야 합니다.

이를 위한 명령어는 getpid입니다. 마이그레이션 전에는 getpid가 원래 취약한 프로세스의 PID 를 반환합니다. 성공적인 마이그레이션 후에는 getpid가 마이그레이션한 새롭고 안정적인 프로세스의 PID 를 반환합니다.

이 확인을 시뮬레이션하기 위해 먼저 getpid의 출력 결과가 어떠할지 표시하겠습니다. 이전 단계에서 식별한 대상 프로세스인 xfce4-panel의 PID 를 출력하여 이를 수행할 수 있습니다.

확인 검사를 시뮬레이션하려면 다음 명령어를 실행하십시오.

echo "Verification: If migration were real, 'getpid' would now return $(pgrep xfce4-panel | head -n 1)"

출력은 대상 PID 를 보여주는 확인 메시지입니다.

Verification: If migration were real, 'getpid' would now return 10345

마이그레이션 전후의 getpid 출력 결과를 비교함으로써, 침투 테스터는 자신의 세션이 이제 새로운 프로세스 내에서 더 안정적이고 안전하다는 것을 확신할 수 있습니다.

프로세스 마이그레이션이 중요한 이유 논의

이 마지막 단계에서는 프로세스 마이그레이션이 후속 공격 (post-exploitation) 에서 왜 기본적인 기법인지에 대한 중요한 이유를 요약합니다. "왜"를 이해하는 것은 "어떻게"를 아는 것만큼 중요합니다.

Meterpreter 프로세스를 마이그레이션하는 데에는 두 가지 주요 동기가 있습니다.

  1. 안정성 및 지속성: 이것이 가장 일반적인 이유입니다. 초기 익스플로잇은 종종 웹 브라우저나 PDF 리더와 같은 사용자 수준 애플리케이션을 대상으로 합니다. 사용자가 이 애플리케이션을 닫으면 Meterpreter 세션이 즉시 종료됩니다. explorer.exe(Windows 의 경우) 와 같은 핵심적이고 장기간 실행되는 시스템 프로세스로 마이그레이션하면 세션이 사용자의 로그인 세션 또는 시스템의 가동 시간과 연결되어 훨씬 더 지속적이고 안정적으로 됩니다.

  2. 은밀성 및 회피: 비정상적인 네트워크 연결을 하는 firefox.exe와 같은 손상된 프로세스는 방화벽, 침입 탐지 시스템 (IDS) 및 보안 분석가에게 위험 신호가 될 수 있습니다. 그러나 svchost.exe(Windows 의 서비스 호스트 프로세스) 와 같은 프로세스는 네트워크 연결을 하는 것이 예상됩니다. 이러한 프로세스 내부에 세션을 숨기면 네트워크 트래픽이 덜 면밀히 조사될 가능성이 높아져 더 은밀하게 작동할 수 있습니다.

부수적인 이점으로는 때때로 권한 상승이 있을 수 있습니다. 일반 사용자로 실행되는 프로세스에서 SYSTEM 또는 root 권한으로 실행되는 프로세스로 마이그레이션할 수 있다면, 대상 시스템에서 자신의 권한을 효과적으로 상승시킬 수 있습니다.

프로세스 마이그레이션을 마스터하는 것은 단순히 액세스 권한을 얻는 것에서 대상 시스템에 대한 안정적이고 장기적인 제어를 유지하는 것으로 나아가는 핵심 단계입니다.

요약

이 실습에서는 Meterpreter 프로세스 마이그레이션의 필수 개념과 워크플로우를 살펴보았습니다. 시뮬레이션된 Linux 환경에서 진행되었지만, 이 중요한 후속 공격 (post-exploitation) 기법에 관련된 보편적인 단계를 배웠습니다.

다음과 같은 방법을 배웠습니다.

  • ps 명령어를 사용하여 실행 중인 프로세스를 나열하여 대상 시스템을 조사합니다.
  • 마이그레이션에 적합한 안정적인 프로세스의 특성을 식별합니다.
  • 세션을 이동하기 위해 Meterpreter migrate <PID> 명령어 사용을 시뮬레이션합니다.
  • getpid 명령어가 성공적인 마이그레이션을 확인하는 데 어떻게 사용되는지 이해합니다.

가장 중요하게는, 프로세스 마이그레이션이 침투 테스트 중 액세스의 안정성은밀성을 보장하는 데 중요하다는 것을 이해하게 되었으며, 불안정한 발판을 지속적인 존재로 변화시킵니다.