mcpField
E
extracting-credentials-from-memory-dump

extracting-credentials-from-memory-dump

github.com/mukul975安全35.2k106 次安装8 周前更新
代码仓库

关于 extracting-credentials-from-memory-dump

这是一份面向事件响应和取证人员的内存凭据提取指南,使用 Volatility 3、pypykatz 等工具检查转储文件,评估凭据泄露范围。

主要功能

  1. 01检查内存转储及系统信息
  2. 02提取 SAM 哈希与 LSASS 数据
  3. 03分析 NTLM 凭据和 Kerberos 票据
  4. 04检查令牌及其他认证材料
  5. 05汇总凭据暴露情况

适用场景

  1. 01评估入侵后的凭据泄露范围
  2. 02调查凭据相关的横向移动
  3. 03检查勒索软件事件中的凭据窃取
  4. 04查找终端内存中的云凭据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill extracting-credentials-from-memory-dump

安装后在 Claude Code 中输入/extracting-credentials-from-memory-dump确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
agent.py

详细介绍

从内存转储中提取凭据

何时使用

  • 在事件响应期间,确定攻击者可以访问哪些凭据
  • 在发生入侵后评估凭据泄露的范围
  • 用于识别需要立即重置密码的账户
  • 在调查横向移动和哈希传递/票据传递攻击时
  • 用于从进程内存中恢复加密密钥或身份验证令牌

前提条件

  • raw、ELF 或 crash dump 格式的内存转储
  • 带有 Windows 符号表的 Volatility 3
  • Mimikatz(用于对提取的 LSASS 转储进行离线分析)
  • pypykatz(Mimikatz 的 Python 实现,用于基于 Linux 的分析)
  • 了解 Windows 身份验证(NTLM、Kerberos、DPAPI)
  • 对凭据提取具有适当的法律授权

工作流

步骤 1:准备工具并验证内存转储
# Install analysis tools
pip install volatility3 pypykatz

# Verify memory dump integrity
sha256sum /cases/case-2024-001/memory/memory.raw

# Identify the OS version
vol -f /cases/case-2024-001/memory/memory.raw windows.info

# Verify LSASS process exists in memory
vol -f /cases/case-2024-001/memory/memory.raw windows.pslist | grep -i lsass

# Output:
# PID    PPID   ImageFileName   Offset(V)        Threads  Handles  SessionId
# 684    564    lsass.exe       0xffffe00123456   35       1234     0
步骤 2:使用 Volatility 提取凭据哈希
# Dump SAM database hashes from memory
vol -f /cases/case-2024-001/memory/memory.raw windows.hashdump \
   | tee /cases/case-2024-001/analysis/hashdump.txt

# Output format:
# User           RID    LM Hash                          NTLM Hash
# Administrator  500    aad3b435b51404eeaad3b435b51404ee  fc525c9683e8fe067095ba2ddc971889
# Guest          501    aad3b435b51404eeaad3b435b51404ee  31d6cfe0d16ae931b73c59d7e0c089c0
# DefaultAccount 503    aad3b435b51404eeaad3b435b51404ee  31d6cfe0d16ae931b73c59d7e0c089c0
# svcbackup      1001   aad3b435b51404eeaad3b435b51404ee  2b576acbe6bcfda7294d6bd18041b8fe

# Extract LSA secrets
vol -f /cases/case-2024-001/memory/memory.raw windows.lsadump \
   | tee /cases/case-2024-001/analysis/lsadump.txt

# Extract cached domain credentials
vol -f /cases/case-2024-001/memory/memory.raw windows.cachedump \
   | tee /cases/case-2024-001/analysis/cachedump.txt
步骤 3:转储 LSASS 进程内存以进行详细分析
# Dump LSASS process memory (PID from Step 1)
vol -f /cases/case-2024-001/memory/memory.raw windows.memmap --pid 684 --dump \
   -o /cases/case-2024-001/analysis/lsass_dump/

# Alternative: Dump all files associated with LSASS
vol -f /cases/case-2024-001/memory/memory.raw windows.dumpfiles --pid 684 \
   -o /cases/case-2024-001/analysis/lsass_files/

# Use procdump plugin for cleaner process dump
vol -f /cases/case-2024-001/memory/memory.raw windows.dumpfiles \
   --pid 684 -o /cases/case-2024-001/analysis/

# Rename the dump file for pypykatz/mimikatz
mv /cases/case-2024-001/analysis/lsass_dump/pid.684.dmp \
   /cases/case-2024-001/analysis/lsass.dmp
步骤 4:使用 pypykatz 提取凭据
# Run pypykatz against the full memory dump
pypykatz lsa minidump /cases/case-2024-001/analysis/lsass.dmp \
   > /cases/case-2024-001/analysis/pypykatz_results.txt 2>&1

# Run pypykatz against the raw memory dump directly
pypykatz rekall /cases/case-2024-001/memory/memory.raw \
   > /cases/case-2024-001/analysis/pypykatz_full.txt 2>&1

# Parse pypykatz output for structured analysis
python3 << 'PYEOF'
import json

# pypykatz can also output JSON
import subprocess
result = subprocess.run(
    ['pypykatz', 'lsa', 'minidump', '/cases/case-2024-001/analysis/lsass.dmp', '-j'],
    capture_output=True, text=True
)

if result.stdout:
    data = json.loads(result.stdout)

    print("=== EXTRACTED CREDENTIALS ===\n")

    for session_key, session in data.get('logon_sessions', {}).items():
        username = session.get('username', 'Unknown')
        domain = session.get('domainname', '')
        logon_server = session.get('logon_server', '')
        logon_time = session.get('logon_time', '')
        sid = session.get('sid', '')

        if username and username != '(null)':
            print(f"Session: {domain}\\{username}")
            print(f"  SID: {sid}")
            print(f"  Logon Server: {logon_server}")
            print(f"  Logon Time: {logon_time}")

            # NTLM hashes
            msv = session.get('msv_creds', [])
            for cred in msv:
                nt = cred.get('NThash', '')
                lm = cred.get('LMHash', '')
                if nt:
                    print(f"  NTLM Hash: {nt}")
                if lm:
                    print(f"  LM Hash: {lm}")

            # Kerberos tickets
            kerb = session.get('kerberos_creds', [])
            for cred in kerb:
                password = cred.get('password', '')
                if password:
                    print(f"  Kerberos Password: {password}")
                tickets = cred.get('tickets', [])
                for ticket in tickets:
                    print(f"  Kerberos Ticket: {ticket.get('server', '')} (type: {ticket.get('enc_type', '')})")

            # WDigest (plaintext on older systems)
            wdigest = session.get('wdigest_creds', [])
            for cred in wdigest:
                pwd = cred.get('password', '')
                if pwd:
                    print(f"  WDigest Password: {pwd}")

            # DPAPI master keys
            dpapi = session.get('dpapi_creds', [])
            for cred in dpapi:
                mk = cred.get('masterkey', '')
                if mk:
                    print(f"  DPAPI Master Key: {mk[:40]}...")

            print()
PYEOF
步骤 5:提取 Kerberos 票据和令牌
# Extract Kerberos tickets from memory
python3 << 'PYEOF'
import subprocess, json

result = subprocess.run(
    ['pypykatz', 'lsa', 'minidump', '/cases/case-2024-001/analysis/lsass.dmp', '-j', '-k', '/cases/case-2024-001/analysis/kerberos/'],
    capture_output=True, text=True
)

# pypykatz exports .kirbi files to the specified directory
import os
kirbi_dir = '/cases/case-2024-001/analysis/kerberos/'
if os.path.exists(kirbi_dir):
    for f in os.listdir(kirbi_dir):
        if f.endswith('.kirbi'):
            filepath = os.path.join(kirbi_dir, f)
            size = os.path.getsize(filepath)
            print(f"  Kerberos ticket: {f} ({size} bytes)")
PYEOF

# Search process memory for authentication tokens and API keys
vol -f /cases/case-2024-001/memory/memory.raw windows.strings --pid 684 | \
   grep -iE '(bearer |authorization:|api[_-]key|token=|password=|secret=)' \
   > /cases/case-2024-001/analysis/auth_strings.txt

# Search for cloud credentials in memory
vol -f /cases/case-2024-001/memory/memory.raw windows.strings | \
   grep -iE '(AKIA[A-Z0-9]{16}|ASIA[A-Z0-9]{16}|aws_secret_access_key)' \
   > /cases/case-2024-001/analysis/aws_credentials.txt

# Search for browser session tokens
vol -f /cases/case-2024-001/memory/memory.raw windows.strings | \
   grep -iE '(session_id=|PHPSESSID=|JSESSIONID=|_ga=|sid=)' \
   > /cases/case-2024-001/analysis/session_tokens.txt
步骤 6:编写凭据发现报告
# Generate credential compromise assessment
python3 << 'PYEOF'
print("""
CREDENTIAL EXTRACTION REPORT
==============================
Case: 2024-001
Source: memory.raw (16 GB Windows 10 memory dump)
Analysis Date: 2024-01-20

COMPROMISED ACCOUNTS:
=====================

1. Local Accounts (SAM):
   - Administrator (RID 500): NTLM hash extracted
   - svcbackup (RID 1001): NTLM hash extracted
   - SQLService (RID 1002): NTLM hash extracted

2. Domain Accounts (LSASS):
   - CORP\\admin.user: NTLM hash + Kerberos TGT
   - CORP\\svc.backup: NTLM hash + plaintext password (WDigest)
   - CORP\\domain.admin: Kerberos TGS tickets for 3 services

3. Cached Domain Credentials:
   - CORP\\helpdesk.user: DCC2 hash
   - CORP\\it.manager: DCC2 hash

4. Cloud Credentials:
   - AWS Access Key: AKIA... found in process memory (PID 3456)
   - Azure AD token found in browser process memory

IMMEDIATE ACTIONS REQUIRED:
- Reset passwords for all listed accounts
- Revoke and rotate AWS access keys
- Invalidate all active Kerberos tickets (krbtgt reset)
- Review DPAPI-protected data for additional exposure
""")
PYEOF

关键概念

概念描述
LSASS(Local Security Authority)管理身份验证并将凭据存储在内存中的 Windows 进程
NTLM hash用于身份验证的用户密码的 NT LAN Manager 哈希
Kerberos TGT允许请求服务票据的票据授予票据
WDigest将明文密码存储在内存中的旧式身份验证协议(Windows 8.1 之前)
DPAPI使用从用户凭据派生的主密钥的数据保护 API
DCC2(Domain Cached Credentials)用于离线登录的缓存域密码哈希
LSA SecretsLSA 存储的加密服务账户密码和其他机密
Pass-the-Hash使用提取的 NTLM 哈希而无需知道明文密码的攻击技术

工具与系统

工具用途
Volatility 3具有 hashdump、lsadump、cachedump 插件的内存取证框架
pypykatz用于跨平台 LSASS 分析的 Mimikatz Python 实现
MimikatzWindows 凭据提取工具(针对转储离线使用)
secretsdump.py用于从 SAM/SYSTEM/SECURITY 中提取机密的 Impacket 工具
hashcat用于破解已恢复的 NTLM 和 DCC2 哈希的密码哈希破解工具
John the Ripper另一个密码破解工具
RubeusKerberos 票据操作和提取工具
Impacket用于处理 Windows 网络协议和凭据的 Python 工具包

常见场景

场景 1:入侵后凭据评估 从 LSASS 内存中提取所有缓存的凭据,以确定哪些账户已暴露,根据权限级别优先安排密码重置,检查黄金票据材料(krbtgt 哈希),评估云凭据是否可被访问。

场景 2:横向移动调查 提取 NTLM 哈希和 Kerberos 票据,以了解攻击者如何在系统之间移动,识别哈希传递/票据传递痕迹,将提取的凭据与事件日志中的网络登录事件关联起来。

场景 3:勒索软件操作者窃取凭据 分析加密前的内存转储以查找 Mimikatz 执行证据,提取所有可用的凭据类型,确定是否获取了域管理员凭据,评估 krbtgt 是否已泄露(黄金票据),规划凭据轮换策略。

场景 4:从终端窃取云凭据 在终端内存中搜索 CLI 工具和浏览器存储的 AWS 访问密钥、Azure 令牌和 GCP 服务账户密钥,识别已暴露的云权限,立即轮换发现的凭据,审计云审计日志以查找未经授权的访问。

输出格式

Credential Extraction Summary:
  Source: memory.raw (16 GB, Windows 10 Build 19041)
  LSASS PID: 684

  Credentials Recovered:
    Local NTLM Hashes:        4 accounts
    Domain NTLM Hashes:       3 accounts
    Kerberos TGTs:             2 tickets
    Kerberos TGS:              5 service tickets
    Plaintext Passwords:       1 (WDigest - svc.backup)
    Cached Domain Creds:       2 DCC2 hashes
    LSA Secrets:               3 service account passwords
    DPAPI Master Keys:         4 keys recovered
    Cloud Credentials:         1 AWS access key, 1 Azure token

  Highest Privilege Compromised: Domain Admin (CORP\domain.admin)

  Recommended Actions:
    - Immediate: Reset all extracted account passwords
    - Immediate: Rotate AWS access key AKIA...
    - Urgent: Double krbtgt password reset (golden ticket mitigation)
    - High: Revoke all Kerberos tickets via krbtgt rotation
    - Medium: Audit DPAPI-protected data exposure

评论

支持 Markdown