Mục Lục CHƯƠNG1 CƠ SỞ LÝ THUYẾT 5 1 1 GIỚI THIỆU VỀ HASHCAT 5 1 1 1 Tổng quan Hashcat 5 1 1 2 Cài đặt 5 1 1 3 Tùy chọn 6 1 1 4 Thuật Toán 8 1 1 5 Sử dụng Hashcat 9 CHƯƠNG 2 HASHCAT MỞ RỘNG 12 1 1 OclHashcat ( cuda Hashcat ) 12 1 1 1 Tổng quan 12 1 1 2 Tùy chọn 12 1 1 3 Cách sử dụng 13 1 1 4 Lời khuyên 14 1 2 OclHashcat Plus ( cuda Hashcat Plus ) 14 1 2 1 Tổng quan 14 1 2 2 Tùy chọn 15 1 2 3 Cách sử dụng 16 1 2 4 Lời khuyên 17 1 3 OclHashcat lite ( cudaHashcat lite ) 17 1 3 1 Tổng quan 17 1 3 2 T.
Trang 1Mục Lục
CHƯƠNG1 CƠ SỞ LÝ THUYẾT 5
1.1 GIỚI THIỆU VỀ HASHCAT 5
1.1.1 Tổng quan Hashcat 5
1.1.2 Cài đặt 5
1.1.3 Tùy chọn 6
1.1.4 Thuật Toán 8
1.1.5 Sử dụng Hashcat 9
CHƯƠNG 2 HASHCAT MỞ RỘNG 12
1.1 OclHashcat ( cuda Hashcat ) 12
1.1.1 Tổng quan 12
1.1.2 Tùy chọn 12
1.1.3 Cách sử dụng 13
1.1.4 Lời khuyên 14
1.2 OclHashcat-Plus ( cuda Hashcat-Plus ) 14
1.2.1 Tổng quan 14
1.2.2 Tùy chọn 15
1.2.3 Cách sử dụng 16
1.2.4 Lời khuyên 17
1.3 OclHashcat-lite ( cudaHashcat-lite ) 17
1.3.1 Tổng quan 17
1.3.2 Tùy chọn 18
1.3.3 Cách sử dụng 21
1.3.4 Lời khuyên 21
CHƯƠNG 3 PHÒNG CHỐNG TẤN CÔNG BẺ KHÓA MẬT KHẨU HASHCAT 21
1.1 Đặt password đủ mạnh 21
1.2 Thay đổi mật khẩu thường xuyên 22
1.3 Một số cách phòng chống khác 23
CHƯƠNG 4 DEMO CÁCH BẺ KHÓA MẬT KHẨU DÙNG HASHCAT 25
TÀI LIỆU THAM KHẢO 28
Trang 2CHƯƠNG1 CƠ SỞ LÝ THUYẾT
1.1 GIỚI THIỆU VỀ HASHCAT
1.1.1 Tổng quan 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ếnnhất hiện nay trên giao diện dòng lệnh 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
Hashcat là công cụ khôi phục mật khẩu dựa trên CPU nhanh nhất Mặc dù khôngnhanh bằng các đối tác GPU của nó: oclHashcat, oclHashcat-plus, and oclHashcat-lite
Rules/ - Thư mục này chứa một số quy tắc được tạo trước để bạn sử dụng với hashcat.Examples/ - Thư mục này có nhiều tệp được sử dụng với các chế độ băm khác nhau.Đây là một cách tốt để thực hành với hashcat và hiểu các kiểu băm trông như thế nào.IE: A0.M0.hash có danh sách các băm MD5 đơn giản
Salts/- Chứa danh sách các salts 3 byte tăng dần từ a đến z Những thứ này có thể hữuích, nhưng nhìn chung bạn sẽ không cần chúng Các danh sách này có thể được mởrộng hoặc có thể thêm các danh sách salts mới Đây là cách sử dụng hashcat nâng cao
Trang 3Tables / - Thư mục tables chứa các tệp được sử dụng với các khóa chuyển đổi min / max và tệp Những điều này có thể hữu ích khi bạn biết các yêu cầu của mậtkhẩu.
stdout: Thay vì cố gắng khôi phục mật khẩu, hashcat chỉ cần xuất ra cửa sổđầu cuối
disable-potfile: Ngăn Hashcat ghi các hàm băm đã khôi phục vào hashcat.pot.(Default: not used)
rules-file = FILE hoặc –r: Thêm điều này sẽ cho phép hashcat sử dụng filerules được chỉ định Hashcat sau đó sẽ chạy các quy tắc được chỉ định chống lại
nỗ lực hiện tại (Default: not used)
rules-file = rules / best64.rule hoặc -r rules / best64.rule
output-file = FILE hoặc –o: Chỉ định nơi các mã băm bị crack sẽ được ghivào Điều này nên được sử dụng nếu bạn có kế hoạch giữ lại các hàm băm hoặckhông muốn sao chép/ dán chúng từ terminal hoặc cmd (Default: not used) output-file = crack.out hoặc –o crack.out
output-format = NUM: NUM có thể là 0, 1 hoặc 2 Nói chung là không cầnthiết, nhưng nếu văn bản thuần túy chứa ký tự hex sẽ cần được chỉ định đểngăn văn bản thuần túy xấu (Default: Mode 0)
output-format = 0
debug-file = FILE: Chỉ định tệp mà thông tin gỡ lỗi sẽ được ghi vào.(Default: not used)
Debug-file = debug.txt
salt-file = FILE hoặc –e: Chỉ định danh sách “salt” được tạo trước đó sẽ được
sử dụng trong một phiên Điều này được sử dụng khi muối băm bị thiếu.(Default: not used)
debug-mode = NUM: Viết quy tắc tìm kiếm, từ gốc hoặc từ bị biến đổi đãthành công chống lại (các) hàm băm được cung cấp thành –debug-file =.(Default: not used)
seperator-char = CHAR hoặc –p: Được sử dụng để chỉ định dấu phân táchtrong danh sách băm IE hash: tên người dùng: guid –p: sẽ cho hashcat biếtcách đọc vị trí kết thúc của một trường Default: ‘:’
p :
Trang 4threads hoặc –n: Để sử dụng trên bộ xử lý đa luồng Hầu hết tất cả các bộ xử
lý đều chứa nhiều lõi Nếu bạn có bộ xử lý lõi tứ, hãy đặt –n 4 hoặc –n 6 chohexacore Nếu bạn chạy một bộ xử lý đa hệ thống, đặt –n thành số lõi * số bộ
xử lý vật lý IE kép hexacore sẽ là 6 (lõi) * 2 (bộ xử lý) = 12 (tổng số luồng) Default: 8
n 12
segment-size = NUM hoặc –c: Chỉ định dung lượng bộ nhớ tính bằng MB sẽđược phép lưu vào bộ nhớ đệm của danh sách các từ Nếu bạn đang làm việcvới một lượng bộ nhớ hạn chế, điều này có thể được thiết lập để không ảnhhưởng đến các dịch vụ khác Công tắc sau sẽ cho phép lưu trữ 10MB từ trongdanh sách của bạn Default: 32
c10
words-skip= NUM hoặc –s: Bỏ qua số từ đã cho khi tiếp tục một phiên đãdừng Cái này ngăn việc chạy lại các từ đối với danh sách băm của bạn, điềunày sẽ làm giảm thời gian thực hiện Công tắc sau sẽ bỏ qua 100000 từ đầutiên (Default: not used)
s 100000
words-limit = NUM hoặc –l: Chỉ định số lượng từ cần được xử lý Điều nàyhữu ích khi khôi phục cùng một danh sách băm trên nhiều máy tính để cùngmột máy tính không bao giờ chạy các từ đang được xử lý bởi người khác Côngtắc sau sẽ chỉ sử dụng 20000 từ đầu tiên (Default: not used)
l 20000
generate-rules = NUM hoặc –g: Yêu cầu hashcat tạo NUM quy tắc được ápdụng cho mỗi lần thử Các chuyển đổi sau sẽ có hashcat để tạo ngẫu nhiên 512quy tắc đang bay để được sử dụng cho phiên đó Điều này có thể loại bỏ nhucầu về các tệp quy tắc lớn, mặc dù các tệp quy tắc được nhắm mục tiêu có thểlàm tăng cơ hội khôi phục mật khẩu văn bản thuần túy (Default: not used) g 512
generate-rules-func-min / max = NUM: Chỉ định số lượng hàm sẽ được sửdụng Con số nào có thể không giới hạn nhưng số lượng lớn không đượckhuyến khích Khi được sử dụng cùng với –g, bất kỳ quy tắc nào bên ngoài càiđặt này sẽ bị bỏ qua IE: -g 512 tạo ra l r, l ^ f và sa @, đây là tất cả các quy tắchợp lệ để được sử dụng, tuy nhiên, l ^ f sa@ r $ 3 sẽ bị bỏ qua vì nó chứa 5hàm (Default: min = 1 max = 4
attack-mode = NUM hoặc –a: Chỉ định kiểu tấn công sẽ được thực hiện đốivới một hàm băm Sử dụng các vectơ tấn công khác nhau sẽ cải thiện cơ hộikhôi phục băm Các chế độ như sau:
0 = Straight - Đơn giản chỉ cần chạy tất cả các từ trong từ điển đối với danhsách băm của bạn Có một từ điển tốt ở đây sẽ cải thiện cơ hội khôi phục thànhcông một hàm băm
1 = Kết hợp - Kết hợp các từ từ từ điển đã cho
Trang 5- Các chế độ 0 và 1 cũng là các chế độ duy nhất chấp nhận các công tắc –r hoặc–g.
2 = Toggle-Case - Chuyển tất cả chữ hoa thành chữ thường và tất cả chữthường thành chữ hoa Chữ số và kí tự đặc biệt bị bỏ qua vì chúng không cótrường hợp
3 = Brute-Force - BF nên được sử dụng như một phương sách cuối cùng vì nókhông hiệu quả với các mật khẩu dài và có thể khá mất thời gian
4 = Hoán vị - Lấy các chữ cái từ một từ và sắp xếp lại chúng Ví dụ: abc trởthành abc, acb, bca, bac, cba, taxi
5 = Table-Lookup - Ngắt một chuỗi thành các ký tự riêng lẻ và áp dụng quytắc cho từng ký tự phù hợp với bảng đầu vào Default: Mode 0
hash-mode = NUM hoặc –m: Điều này cho hashcat biết loại băm cụ thể màbạn đang làm việc Hãy nhớ rằng hashcat sẽ giả sử –m 0 nếu không có –mđược đặt và sẽ tạo ra lỗi cho bất kỳ hàm băm nào trên 32 byte Các danh sáchquá dài và tôi không thể giải thích được Default: Mode 0
m 100
toggle-min / max = NUM: Cài đặt điều này sẽ cho hashcat biết để mong đợitối thiểu / tối đa là X và Y Có thể rút ngắn thời gian chạy bằng cách bỏ qua cácgiá trị nằm ngoài yêu cầu mật khẩu Default: min=1 max=16
bf-cs-buf = CHARS: Cho hashcat biết những ký tự sẽ sử dụng khi cưỡng bức
vũ phu Lệnh sau sẽ chỉ sử dụng các ký tự từ a đến g và các số từ 1 đến 5 Điềunày có thể chấp nhận toàn bộ không gian bàn phím là 96 ký tự
(Default: not used)
table-file = table / toggle_case_and_leet.tab
1.1.4 Thuật Toán
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ìmcách xác định được thuật toán hash thì Hashcat mới phá hash được Ví dụ về các thuật
Trang 6toán băm được hỗ trợ bởi hashcat là LM băm, MD4, MD5, SHA-gia đình và UnixCrypt định dạng cũng như các thuật toán được sử dụng trong MySQL và Cisco PIX.Đầ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:
~$ hash-identifier
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
Hình 1.1 Kết quả của lệnh tra thuật toán
Possible Hashs là trường hợp là thuật toán Trong trường hợp trên (hình 1.1) SHA-256
và Hval-256 là thuật toán
Least Possible Hashs là trường hợp ít nhất có thể xảy ra
1.1.5 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ậpvào phần hướng dẫn sử dụng của Hashcat
~$ hashcat help
Trang 7Hình 1.2 Kết quả của lệnh help
Vì hashcat không nhận biết được thuật toán nên ta phải chỉ cho hashcat biết thuật toán
ta cần sử dụng của hash đầu vào là gì Trên Hashcat, thông tin này được gọi là hashmodes
Hình 1.3 Danh sách các thuật toán
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ếtphân loại của các thuật toán hash nữa.(Hình 1.3)
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
Trang 8giá trị trong danh sách này để hash nó với thuật toán đã chỉ định và so sánh vớihash đầ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ị hashtrù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 danhsách như Dictionary attack Hình thức tấn công này được sử dụng khi bạnmuốn tìm username và password của người dùng Lúc này bạn sẽ cần 1 danhsách những usernames hay được dùng nhất và 1 danh sách những passwordshay đượ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áchusername và danh sách password và lần lượt thử đăng nhập bằng các cặp kếthợ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ấpnà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ẫunhiê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 Dictionaryattack, 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> sách hoặc chuỗi-ký-tự>
<danh-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:
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
Trang 932 và 64bit Đây là một bước tiến lớn so với các giải pháp dựa trên CPU
do lượng dữ liệu mà GPU có thể xử lý thông qua CUDA (NVIDIA), Stream (AMD) và OpenCL.
Từ việc mất hàng giờ trên CPU thì chỉ còn mất vài phút với GPU.
Một lưu ý nhanh khác, atom đã chia oclHashcat thành hai tệp thực thi chính.
OclHashcat dành cho AMD (ATI) chỉ dành cho người dùng Nó sẽ yêu cầu cài đặt Stream SDK để thực hiện trên phiên bản WINDOWS cần bổ sung windows ADM users cần 1 màn hình hoặc nắp để kết nối tới mỗi card.
Hình 1.4 Giao diện oclHashcat khi crack password
1.1.2 Tùy chọn
Trang 10OclHashcat có nhiều tuỳ chọn:
- oclHashcat hoạt động hơi khác so với hashcat vì nó sử dụng mặt nạ trái trái và mặt nạ phải.Được chia thành hai mảnh,bạn có thể chỉ định một từ điển hoặc một bộ ký tự cho một trong hai bên
Ví dụ: /oclHashcat64.bin hashlist dict1 ?d?d?d?d
quiet: Loại bỏ đầu ra thành STDOUT để thiết bị đầu cuối, dấu nhắc
lệnh của bạn không bị ngập trong văn bản.
remove: mỗi hash bị bẻ khóa, nó bị xóa khỏi danh sách băm ngăn cản
oclHashcat khỏi cố gắng bẻ khóa nó một lần nữa,không cần thêm đầu vào.
output-file = FILE hoặc –o: Chỉ định nơi các mã băm bị crack sẽ được
ghi vào( sử dụng nếu bạn có kế hoạch giữ lại các hàm băm hoặc không muốn sao chép / dán chúng từ thiết bị đầu cuối hoặc dấu nhắc lệnh).
output-format = NUM: NUM có thể là 0, 1 hoặc 2, NUM là không cần
thiết, nhưng nếu văn bản thuần túy chứa hex ký tự này sẽ cần được chỉ định để ngăn văn bản thuần túy xấu.
salt-file = FILE hoặc –e: Cung cấp muối cho các hàm băm thiếu muối
của chúng Hữu ích cho băm vbull hoặc xtcommerce
gpu-devices = STR hoặc –d: sử dụng để chỉ định một số GPU (theo
thứ tự) nếu bạn có nhiều thiết lập GPU hoặc thẻ GPU kép Do khối lượng
dữ liệu được xử lý quá lớn, máy tính để bàn sẽ bị lag hoặc giật, sử dụng option này để đảm bảo máy tính để bàn hoạt động trơn tru trong khi cố gắng khôi phục.
gpu-accel = NUM hoặc –n: gpu-accel xác định, điều chỉnh khối lượng
công việc Giá trị càng cao, thẻ sẽ hoạt động Giá trị cao hơn có thể hiệu quả hơn Lưu ý :con số càng cao, càng nhiều điện năng cần thiết.
gpu-loops = NUM: sử dụng để chỉnh sửa cho công việc thêm khối Cụ
thể hơn, số lượng từ mỗi công việc đơn vị Về cơ bản, cung cấp nhiều công việc hơn cho mặt nạ bên trái.
increment: tăng mặt nạ bên phải +1 cho mỗi vị trí.
1.1.3 Cách sử dụng
OclHashcat sử dụng mặt nạ trái và phải với tất cả các cuộc tấn công của
nó Một trong hai mặt nạ có thể được đặt thành bảng mã hoặc từ điển.
Tấn công Bruteforce: làm cạn kiệt một hoặc nhiều ký tự trên mặt nạ trái
và phải cho đến khi tìm thấy plain
Ví dụ : một brute force của một văn bản thuần túy tám ký tự có đủ chữ và số.
./oclHashcat64.bin hashlist -1 ?l?u?d?s ?1?1?1?1 ?1?1?1?1
Trang 11có thể được thực hiện bằng cách chỉ định các ký tự : một brute force của một văn bản thuần túy tám ký tự chỉ sử dụng một ký tự trên ở vị trí một,
ký tự dưới ở vị trí từ hai đến sáu và các chữ số ở bảy và tám.
./oclHashcat64.bin hashlist ?u?l?l?l ?l?l?d?d
sử dụng từ điển trên cả mặt nạ trái và phải
Tấn công kết hợp: là sử dụng từ điển trên cả mặt nạ trái và phải , thực hiện bằng cách sử dụng một từ điển trong một mặt nạ và sử dụng một bộ
ký tự được chỉ định trong mặt nạ kia
Ví dụ: Đối với ví dụ này, sử dụng một từ điển trong mặt nạ bên trái, sau
đó nối thêm? D? D? D? D qua mặt nạ bên phải để sử dụng 0000-9999 ở cuối mỗi từ trong từ điển.
-./oclHashcat64.bin hashlist dict1 ?d?d?d?d
Ngược lại ,sử dụng? L? L? L? L trong mặt nạ bên trái và từ điển ở bên phải
-./oclHashcat64.bin hashlist ?l?l?l?l dict1
1.1.4 Lời khuyên
OclHashcat chỉ khả dụng trên các cạc đồ họa NVIDIA và AMD được hỗ trợ Nếu mô hình thẻ video của bạn là không khả dụng thông qua CUDA, Stream hoặc OpenCL, bạn sẽ không thể chạy bộ ocl.
PPhải cung cấp đủ khả năng làm mát và năng lượng vì quá trình xử lý GPU diễn ra mạnh mẽ và có thể gây ra hư hỏng phần cứng nếu các biện pháp phòng ngừa không được thực hiện Trước khi chạy oclHashcat, atom, hoặc bất kỳ thành viên nào khác đều có thể được giữ chịu trách nhiệm cho bất kỳ thiệt hại nào do chạy phần mềm này.
1.2 OclHashcat-Plus ( cuda Hashcat-Plus )
1.2.1 Tổng quan
- oclHashcat-plus là một trình bẻ khóa đa băm dựa trên GPGPU sử dụng
phương thức tấn công brute-force (được thực hiện dưới dạng tấn công mặt
nạ ), tấn công tổ hợp , tấn công từ điển , tấn công hỗn hợp , tấn công mặt
nạ và tấn công dựa trên quy tắc
- Phiên bản oclHashcat thứ hai này , được thiết kế cho các cuộc tấn công dựa
trên từ điển, được gọi là “oclHashcat-plus”
Trang 12Hình 1.5 Giao diện oclHashcat-Plus khi crack password
remove: Một lần nữa, giống như hashcat vì mỗi hash bị bẻ khóa, nó sẽ bị
xóa khỏi danh sách để ngăn oclHashcat cố gắng bẻ khóa nó một lần nữa.Không cần thêm đầu vào Mặc định: không được sử dụng
output-file=tên FILE hoặc –o tên FILE: chỉ định văn bản sau khi hash
sẽ được ghi vào Mặc định: không được sử dụng
runtime=NUM : chỉ định thời gian mà oclhashcat-plus có thể chạy (đơn
vị là giây) Mặc định: không được sử dụng
segment-size=NUM hoặc -c: chỉ định bộ nhớ đệm cho wordlist để không
bị ảnh hưởng đến các dịch vụ khác Mặc định: 32
gpu-async: Điều này được sử dụng cho các thẻ NVIDIA cũ hơn như GTS
8800 Nó có thể tăng hiệu suất bằng cách gọi một vòng lặp CPU để xử lý