Kali Linux Căn Bản – Bài 8: Hash cracking với Hashcat, John The Ripper và CrackStation

Xin chào,

Chào mừng bạn đến với bài cuối của chuyên đề hash cracking của phòng CC: Pen Testing. Trong bài hôm nay chúng ta sẽ làm quen với các công cụ crack hash như Hashcat và John The Ripper, đây đều là các công cụ có sẵn trên Kali Linux, ngoài ra mình cũng giới thiệu thêm một công cụ crack hash online có tên là CrackStation.

Chưa hết, trong bài cũng sẽ giới thiệu đến các bạn các công cụ dùng để xác định tên thuật toán hash và danh sách rockyou.txt, đây là một danh sách tập hợp những usernames và passwords hay được sử dụng nhất. Chúng ta sẽ sử dụng rockyou.txt để thực hành crack hash.

Chúng ta cùng vào bài.


1 – Hashcat

Hashcat là phần mềm crack hash/khôi phục mật khẩu từ hash nhanh nhất và tiên tiến nhất hiện nay trên giao diện dòng lệnh. Hashcat cung cấp cho người sử dụng 5 chế độ tấn công/khôi phục mật khẩu khác nhau áp dụng cho hơn 300 thuật toán hash khác nhau. Hashcat là một phần mềm mã nguồn mở và hoàn toàn miễn phí. Hashcat có thể được sử dụng trên nhiều nền tảng khác nhau như Linux, Windows và MacOS.

Ở thời điển hiện tại, Hashcat có thể sử dụng GPU, CPU và các phần cứng tăng tốc độ tính toán khác trên hệ thống máy tính để tăng tốc độ phá password hash. Tuy nhiên, vì phần lớn chúng ta sử dụng máy ảo Kali Linux trên Virtual Box, nên chúng ta sẽ mất đi sự hỗ trợ đắc lực của GPU (card đồ họa). Thực tế, cũng có cách để cho máy ảo trên Virtual Box sử dụng GPU của máy chủ một cách gián tiếp. Tuy nhiên kỹ thuật làm tương đối phức tạp và còn phụ thuộc vào phần cứng của hệ thống bạn đang dùng, nên mình sẽ không đề cập ở đây.

Nếu bạn muốn Hashcat đạt được tốc độ phá mật khẩu tối đa mà hệ thống bạn đang sử dụng cho phép, cách dễ nhất là cài song song 2 hệ điều hành Windows và Kali Linux, hoặc bạn có thể cài trực tiếp Hashcat lên Windows. Link download tại đây nhé.

Lưu ý:

Việc phá password hash phụ thuộc rất nhiều vào sức mạnh phần cứng của hệ thống bạn đang sử dụng. Nếu hệ thống của bạn đang dùng quá yếu, thì dù có chạy Hashcat bên ngoài máy ảo, thì tốc độ phá password hash cũng chỉ được cải thiện ở mức rất nhỏ. Chính vì lẽ đó, các hệ thống được xây dựng chuyên cho mục đích phá password hash thường có phần cứng rất khủng.

Đơn cử như hệ thống thí nghiệm phá password hash của trường mình được trang bị 2 CPU Xeon đời mới nhất, 12 GPU RTX 2060 và vài trăm GB RAM. Thật ra hệ thống này chủ yếu được trường mình sử dụng như một virtualization server nơi cho phép học sinh tạo, chứa và chạy máy ảo nhiều hơn là phá hash, tuy nhiên bất cứ lúc nào cần, hệ thống cũng có thể được sử dụng để phá hash.

Nhưng điều đó không có nghĩa là với phần cứng khủng như vậy thì có thể phá hash của bất cứ thuật toán nào trong chớp mắt. Việc không xác định đúng hoặc không thể xác định được tên thuật toán hash, kèm theo password dài và khó có thể khiến cho hệ thống chạy phá hash liên tục không nghỉ trong nhiều tuần nếu không muốn nói là tháng hoặc năm. (Thật ra trong thực tế, nếu quá trình phá hash quá lâu, người ta sẽ tìm cách khác để tránh cho hệ thống chạy liên tục trong thời gian quá dài).

Nói tóm lại, việc crack hash là một việc rất tốn thời gian vì nó phụ thuộc vào các yếu tố như:

  • Thuật toán hash
  • Sức mạnh phần cứng của hệ thống dùng để crack
  • Password gốc có được salt và pepper hay không?
  • Password gốc có phức tạp hay không?
  • v.v

Có một hệ thống với phần cứng siêu mạnh có thể phần nào giúp bạn tiết kiệm được thời gian crack hash khi và chỉ khi giá trị hash của bạn có thể bị cracked và cách duy nhất để biết là thử crack đoạn hash đó trong một khoản thời gian nhất định. Do xác suất thành công của hướng tấn công này chỉ khoản 50%, nên khi pentest hoặc chơi CTF các bạn không nên quá phụ thuộc vào nó.

1a – Một số công cụ xác định thuật toán hash

Một điều khá bất lợi trên Hashcat đó là nó không thể nhận diện được password hash mà chúng ta cung cấp được mã hóa bằng thuật toán nào, vì lẽ đó chúng ta phải tìm cách xác định được thuật toán hash thì Hashcat mởi phá hash được.

1a-1 Công cụ Hash Identifier trên Kali Linux

Trên Kali Linux, chúng ta có thể sử dụng công cụ Hash Identifier trên giao diện dòng lệnh để xác định thuật toán hash.

Đầu tiên, trên Kali Linux, các bạn mở giao diện Terminal lên và gõ câu lệnh sau:

vincent@kali:~$ hash-identifier 
H1a-1.1

Cách sử dụng rất đơn giản, chỉ cần bạn copy và paste đoạn hash của bạn vào dòng “HASH:” và bấm enter. Hệ thống sẽ giúp bạn xác định thuật toán hash. Để thoát ra, các bạn ấn tổ hợp phím Ctrl + C

Chúng ta sẽ làm thử vài thí nghiệm nhé, bên dưới là hash của nội dung “xin-chao” được hash bằng 3 thuật toán hash khác nhau:

  • SHA-256: 1b56ba4873470ec595e186463bfb9151f8fb0c821f634cad0e5ac4cddfcbe753
  • MD4: 00d420f6ad9b196cad449396076eec24
  • Whirlpool: 95a67f65af5b7c1cd874ac874cb2feaff398a22d56c5c08fb975a2e89f183314d2dfc2f27b29c052f7365e97039278020ee15c088150ad02067d68524fe5cf66

Ví dụ 1: SHA-256

H1a-1.2

Chúng ta thấy Hash Identifier bên cạnh việc xác định và xuất ra tên những thuật toán hash mà nó nghĩ rằng nhiều khả năng đã được dùng để tạo ra hash đầu vào (Possible Hashs), nó còn liệt kê ra các kết quả mà nó nghi ngờ nhưng không chắc chắn (Least Possible Hashs).

Và chúng ta có thể thấy, SHA-256 nằm trong nhóm Possible Hashs. Như vậy, Hash Identifier đã xác định đúng thuật toán hash.

Ví dụ 2: MD4

H1a-1.3

Như chúng ta thấy, với MD4 hash, Hash Identifier lại đặt tên thuật toán đúng ở phần Least Possible Hashs. Nguyên nhân là do một trong những yếu tố các phần mềm nhận biết thuật toán hash dùng để xác định đúng thuật toán hash chính là dựa vào độ dài của hash đầu vào.

Ở đây MD5 và MD4 có cùng độ dài là 32 ký tự hex chỉ khác nhau đôi chút cách xử lý dữ liệu, và vì MD5 có phần phổ biến hơn MD4, nên Hash Identifier nghĩ rằng hash đầu vào nhiều khả năng là MD5 hơn MD4.

Ví dụ 3: Whirlpool

H1a-1.4

Với thuật toán hash Whirlpool, Hash Identifier đã dự đoán thuật toán hash chính xác.

1a-2 – Một số công cụ xác định thuật toán hash online

Ngoài Hash Identifier, mình còn sử dụng một số công cụ xác định thuật toán hash online khác ví dụ như:

Mục đích là để kiểm tra lại kết quả của Hash Identifier.

Lưu ý:

Kết quả của các công cụ xác định thuật toán hash chỉ là tương đối và không phải lúc nào các công cụ này cũng xác định được thuật toán đã dùng để hash dữ liệu. Trong trường hợp ấy, chúng ta có thể sử dụng các giải pháp crack hash có kèm theo chức năng tự xác định thuật toán trước khi crack ví dụ như John The Ripper (mình sẽ trình bày ở phần 2) hoặc các công cụ crack hash online.

1b – Cách sử dụng Hashcat

Trên giao diện dòng lệnh của Kali Linux, chúng ta gõ câu lệnh bên dưới để truy cập vào phần hướng dẫn sử dụng của Hashcat

vincent@kali:~$ hashcat --help
H1b.1

Vì Hashcat không có chức năng tự xác định thuật toán hash như mình đã nói lúc đầu, nên sau khi xác định được thuật toán hash bằng các công cụ mình đã nói ở phần 1a, chúng ta sẽ phải chỉ cho Hashcat thuật toán được dùng của hash đầu vào là gì. Trên Hashcat, thông tin này được gọi là hash modes.

H1b.2

Như chúng ta thấy, Hashcat hỗ trợ rất nhiều thuật toán hash khác nhau đồng thời còn cho chúng ta biết phân loại của các thuật toán hash nữa.

Hash cat hỗ trợ 4 hình thức crack hash:

  • Dictionary (-a 0): Bạn sẽ cung cấp cho Hashcat một danh sách (có thể là tập hợp những passwords hay được dùng nhất). Hashcat sẽ sử dụng lần lượt từng giá trị trong danh sách này để hash nó với thuật toán đã chỉ định và so sánh với hash đầu vào, nếu kết quả sai, Hashcat sẽ thử giá trị tiếp theo trong danh sách được cung cấp, nếu đúng thì Hashcat trả lại kết quả đã tạo nên giá trị hash trùng khớp với giá trị hash đầu vào.
  • Combination (-a 1): Tương tự như Dictionary attack ở trên, tuy nhiên khi dùng Combination các bạn sẽ phải cung cấp 2 danh sách chứ không phải chỉ 1 danh sách như Dictionary attack. Hình thức tấn công này được sử dụng khi bạn muốn tìm username và password của người dùng. Lúc này bạn sẽ cần 1 danh sách những usernames hay được dùng nhất và 1 danh sách những passwords hay được dùng nhất. Hashcat sẽ lần lượt tạo ra các cặp kết hợp giữa danh sách username và danh sách password và lần lượt thử đăng nhập bằng các cặp kết hợp này cho đến khi tìm ra được username và password chính xác hoặc cho đến khi tất cả các cặp kết hợp đều đã được thử và không có cặp nào chính xác.
  • Mask (-a 3): Mask attack tương tự như Bruteforce attack, bạn sẽ cung cấp một loạt các ký tự ví dụ a, b, c, d, e, f, 1, 2, 3, v.v. và từ các ký tự được cung cấp này, Hashcat sẽ tự kết hợp các ký tự lại với nhau và tạo ra các chuỗi ký tự ngẫu nhiên ví dụ như abc123, và các chuỗi này sẽ được dùng để tấn công giống như Dictionary attack. Cách tấn công này sẽ phù hợp để tìm những username và password không nằm trong danh sách được cung cấp khi tấn công Dictionary attack, tuy nhiên sẽ rất mất thời gian.
  • Hybrid (-a 6 và -a 7): Kết hợp cả Dictionary attack và Mask attack.

Một câu lệnh tấn công Hashcat cơ bản sẽ có cú pháp như sau:

hashcat -a <tấn-công> -m <thuật-toán-hash> <file-chứa-hash-đầu-vào> <danh-sách hoặc chuỗi-ký-tự>

Ví dụ: 
hashcat -a 0 -m 0 file-chứa-hash file-danh-sách 

Theo đó ta có các thành phần bắt buộc phải có như sau:

  • -a: Số của hình thức tấn công:
    • -a 0: Dictionary
    • -a 1: Combination
    • -a 3: Mask
    • -a 6 và -a 7: Dictionary + Mask
  • -m: Số của thuật toán hash (bất cứ khi nào quên, bạn đều có thể tra cứu lại bằng lệnh hashcat –help). Trong ví dụ mình dùng -m 0 để chỉ thuật toán hash MD5.
  • File chứa hash đầu vào
  • File chứa danh sách nếu tấn công Dictionary hoặc chuỗi ký tự nếu tấn công Mask

Một số mẫu câu lệnh khác của Hashcat:

H1b.3

Hôm nay, chúng ta sẽ thực hành Dictionary attack để crack hash với Hashcat nhé.

1b-1 – File rockyou.txt

Đầu tiên chúng ta cần một danh sách đã. Trong Kali Linux, có sẵn một danh sách khá thần thánh tên là rockyou.txt. Để đến được directory chứa file này, các bạn hãy gõ những câu lệnh sau:

vincent@kali:~$ cd /usr/share/wordlists 
vincent@kali:/usr/share/wordlists$ ls
H1b-1.1

Chúng ta sẽ thấy được file rockyou.txt. Tuy nhiên chúng ta chưa dùng được file ngay đâu vì file hiện đã bị zip bằng gzip, chúng ta cần phải giải nén file trước đã. Làm điều đó bằng câu lệnh sau:

vincent@kali:/usr/share/wordlists$ sudo gzip -d rockyou.txt.gz

Chú thích: Flag -d dùng để chỉ bạn muốn decompress (giải nén) file.

Kiểm tra lại bằng lệnh ls chúng ta sẽ thấy file rockyou.txt đã được giải nén thành công.

H1b-1.2

Rock you là một file có kích thước rất lớn, nếu bạn dùng lệnh “wc -l” để kiểm tra sẽ thấy file chứa hơn 14 triệu dòng dữ liệu, kích thước file khoản 123 MB. Đây là tập hợp của những username và password hay được sử dụng nhất.

H1b-1.3

Nếu các bạn dự định mở file để kiểm tra xem password mà mình dùng có nằm trong file này hay không? Thì các bạn nên dùng các câu lệnh để kiểm tra sẽ nhanh và hiệu quả hơn là mở file này trực tiếp. Vì nếu phần cứng hệ thống máy của bạn quá yếu, mở một file với dữ liệu nhiều thế này có khả năng sẽ làm máy bạn bị treo.

Để kiểm tra chúng ta sẽ dùng các câu lệnh sau:

vincent@kali:/usr/share/wordlists$ cat rockyou.txt | grep "passsword12345678"

Bạn nào quên các câu lệnh trên thì hãy xem lại các bài trong series Linux Căn Bản nhé.

Trong câu lệnh trên, mình đã thử kiểm tra xem password12345678 liệu có nằm trong danh sách không? và kết quả là có

H1b-1.4

Lưu ý:

Password của bạn không nằm trong rockyou.txt không đồng nghĩa với việc password của bạn an toàn.

Ví dụ: Bạn thấy kết quả password12345678 có nằm trong danh sách, sau đó bạn đổi lại thành password87654321, việc thay đổi này sẽ chẳng giải quyết được vấn đề gì nhiều cả vì các cụm từ như password và 123456789 đều là những cụm từ dễ đoán, hacker hoàn toàn có thể tập trung bruteforce các password tạo thành từ các chữ và chữ số sau password,1,2,3,4,5,6,7,8,9,0, việc này có thể tốn thời gian nhưng chắc chắn password của bạn sẽ bị lộ nếu hacker đủ kiên trì.

Thêm một điều nữa đó là password này chủ yếu chứa các ký tự tiếng Anh, chứ không bao gồm các từ tiếng Việt như:

  • matkhau
  • anhyeuem
  • emyeuanh
  • v.v

Nhưng điều đó cũng không đồng nghĩa với việc một file text chứa các mật khẩu có kèm từ tiếng Việt không tồn tại đâu nhé.

Thế nên, nếu password bạn đang dùng quá đơn giản thì nên thay ngay đi nhé. Về vấn đề này mình sẽ có một bài riêng sau này về cách tạo và quản lý mật khẩu, mong các bạn sẽ ủng hộ.

1b-2 – Crack MD5 và MD4 với Hashcat

Phòng CC: Pen Testing task 13 có cho chúng ta 2 chuỗi hash ở MD5 và MD4, chúng ta thử thực hành crack hash xem sao nhé.

MD5: 56ab24c15b72a457069c5ea42fcfc640

Chúng ta sẽ dùng câu lệnh sau để lưu đoạn hash trên vào file md5.hash:

vincent@kali:~$ echo "56ab24c15b72a457069c5ea42fcfc640" >> md5.hash

Sau đó dùng hashcat để crack đoạn hash trên:

vincent@kali:~$ hashcat -a 0 -m 0 md5.hash /usr/share/wordlists/rockyou.txt
H1b-2.1

Sau vài giây chạy, chúng ta đã có được mật khẩu gốc trước khi hash.

MD4: 4bc9ae2b9236c2ad02d81491dcb51d5f

Đầu tiên, chúng ta sẽ lưu đoạn hash trên vào file md4.hash

vincent@kali:~$ echo "4bc9ae2b9236c2ad02d81491dcb51d5f" >> md4.hash

Sau đó dùng câu lệnh sau để crack hash

vincent@kali:~$hashcat -a 0 -m 900 md4.hash /usr/share/wordlists/rockyou.txt

Chú thích: 900 là module của MD4.

H1b-2.2

Sau vài giây, chúng ta cũng có được password gốc trước khi hash.

2 – John The Ripper

Một công cụ khác cũng hay được sử dụng để crack hash là John The Ripper. Đây cũng là một công cụ trên giao diện dòng lệnh và cũng có thể được cài trên nhiều hệ điều hành khác nhau như MacOS, Windows và Linux (bạn nào muốn cài trên Windows thì tham khảo link sau nhé). John The Ripper có 2 phiên bản chính, 1 bản miễn phí, mã nguồn mở và 1 bản tính phí.

John The Ripper được thiết kế rất dễ sử dụng và có tích hợp cả tính năng tự động nhận diện thuật toán hash, thế nên chúng ta không cần phải xác định thuật toán rồi mới crack giống như Hashcat.

Để truy cập vào hướng dẫn sử dụng của John The Ripper bản miễn phí được cài sẵn trên Kali Linux chúng ta làm như sau:

Trên giao diện Terminal của Kali Linux gõ:

vincent@kali:~$ john --help
H2.1

Ngoài ra, để xem danh sách các thuật toán hash mà John The Ripper có thể gõ câu lệnh sau:

vincent@kali:~$ john --list=formats
H2.2

Cú pháp của John The Ripper rất đơn giản như sau:

vincent@kali:~$ john <file-chứa-hash>

John được trang bị một danh sách password riêng, mặc dù danh sách này khá hạn chế và không thể so sánh với rockyou.txt. Danh sách mặc định của John The Ripper có path như sau: /usr/share/john/password.lst

Khi bạn sử dụng câu lệnh john như trên, John The Ripper sẽ chạy để tìm thuật toán hash, sau đó sẽ sử dụng danh sách mặc định của mình để crack hash. Quá trình này sẽ tốn rất nhiều thời gian so với khi bạn cung cấp cho John tên của thuật toán hash, nhưng trong trường hợp chúng ta không thể tìm được tên thuật toán hash thì đành phải chấp nhận.

Chúng ta sẽ thử dùng John The Ripper để crack file md5.hash mà chúng ta đã làm ở phần 1b-2 xem sao nhé.

vincent@kali:~$ john md5.hash
H2.3

Sau khi crack xong các bạn sẽ dùng lệnh sau để xem được password đã được crack

vincent@kali:~$ john md5.hash --show

Lưu ý:

Khi chạy câu lệnh:

vincent@kali:~$ john md5.hash

Mình đã ngồi chờ hơn 2 tiếng, nhưng John The Ripper vẫn chưa crack xong. Mình quyết định thêm –format=raw-md5 để cho John The Ripper biết thuật toán hash được dùng trong file là gì, lúc này ta sẽ có câu lệnh:

vincent@kali:~$ john --format=raw-md5 md5.hash

Kết quả John The Ripper chỉ mất vài giây để crack xong đoạn hash.

H2.4

Vì lẽ đó, nếu có thể, hãy cố gắng xác định thuật toán hash trước khi crack bạn nhé.

Trên TryHackMe task 14 có cho chúng ta 2 bài tập crack MD5 và SHA1, mình sẽ làm mẫu với MD5, các bạn thử tự làm SHA1 nhé.

Chúng ta có đoạn hash MD5 sau: 5d41402abc4b2a76b9719d911017c592

Để tiết kiệm thời gian, chúng ta sẽ chỉ cho John The Ripper tên thuật toán hash và sẽ sử dụng rockyou.txt thay vì danh sách mặc định.

Đầu tiên, chúng ta lưu đoạn hash trên vào file crack.hash

vincent@kali:~$ echo "5d41402abc4b2a76b9719d911017c592" >> crack.hash

Sau đó, chúng ta sử dụng câu lệnh sau:

vincent@kali:~$ john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 crack.hash
H2.5

Sau vài giây, đoạn hash đã được crack xong. Nếu John The Ripper không hiện ra password đã crack thì bạn sử dụng lệnh sau:

vincent@kali:~$ john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 crack.hash --show

3 – Công cụ crack hash online

Ngoài Hashcat và John The Ripper ra, mình còn sử dụng CrackStation, một công cụ crack hash online miễn phí, tuy nhiên điểm hạn chế của các công cụ online là số thuật toán hash mà chúng hỗ trợ không nhiều.

Các bạn hãy sử dụng kiến thức đã học ở bài trước và bài hôm nay để trả lời các câu hỏi từ task 11 đến 14 nhé.


Cám ơn các bạn đã theo dõi,

Vincent Nguyễn

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s