Bài viết đã thử nghiệm 3 mật khẩu khác nhau với một công cụ bẻ khóa mật khẩu nguồn mở để tìm ra phương pháp thực sự hiệu quả khi nói đến khả năng bảo mật của mật khẩu.
Mục lục bài viết
- Bẻ khóa mật khẩu là gì?
- Cách tự bẻ khóa mật khẩu của chính mình bằng HashCat
- Thực hiện một cuộc bẻ khóa đơn giản bằng cách sử dụng phương pháp Dictionary Attack
- Thực hiện một vụ bẻ khóa phức tạp hơn bằng cách sử dụng các cuộc tấn công Brute Force có che giấu
- Cách giữ an toàn cho tài khoản khỏi bị bẻ khóa mật khẩu
Bẻ khóa mật khẩu là gì?

Khi bạn tạo tài khoản với dịch vụ trực tuyến, nhà cung cấp thường mã hóa thông tin đăng nhập của bạn trên máy chủ của họ. Điều này được thực hiện bằng thuật toán để tạo "hash", một chuỗi ký tự và số ngẫu nhiên có vẻ duy nhất cho mật khẩu của bạn. Tất nhiên, nó không thực sự ngẫu nhiên, mà là một chuỗi ký tự rất cụ thể mà chỉ mật khẩu của bạn mới có thể tạo ra, nhưng đối với người không có chuyên môn, nó trông giống như một mớ hỗn độn.
Biến một từ thành hash nhanh và dễ hơn nhiều so với việc "giải mã" hash thành từ một lần nữa. Do đó, khi bạn đặt mật khẩu, dịch vụ bạn đang đăng nhập sẽ chạy mật khẩu của bạn qua hash rồi lưu trữ kết quả trên máy chủ của họ.
Nếu file mật khẩu này bị rò rỉ, tin tặc sẽ cố gắng tìm ra nội dung của nó bằng cách bẻ khóa mật khẩu. Vì mã hóa mật khẩu nhanh hơn giải mã nên tin tặc sẽ thiết lập một hệ thống lấy mật khẩu tiềm năng làm đầu vào, mã hóa chúng bằng cùng phương pháp với máy chủ, sau đó so sánh kết quả với cơ sở dữ liệu mật khẩu.
Nếu hàm hash của mật khẩu tiềm năng khớp với bất kỳ mục nào trong cơ sở dữ liệu, tin tặc biết rằng mọi lần truy cập đều khớp với mật khẩu tiềm năng đã thử.
Cách tự bẻ khóa mật khẩu của chính mình bằng HashCat
Hãy thử bẻ khóa một số mật khẩu mà bài viết đã tạo để xem việc này dễ đến mức nào. Để thực hiện việc này, ví dụ sẽ sử dụng Hashcat, một công cụ bẻ khóa mật khẩu miễn phí và mã nguồn mở mà bất kỳ ai cũng có thể sử dụng.
Đối với các bài kiểm tra này, ví dụ sẽ bẻ khóa các mật khẩu sau:
- 123456: Một mật khẩu cổ điển và là cơn ác mộng về an ninh mạng, 123456 là mật khẩu được sử dụng phổ biến nhất trên thế giới. NordPass đã tính toán rằng 3 triệu tài khoản đã sử dụng 123456 làm mật khẩu của họ, trong đó có 1,2 triệu tài khoản bảo vệ tài khoản cấp công ty.
- Susan48!: Một mật khẩu tuân theo các mẫu mà hầu hết người dùng sẽ sử dụng để tạo mật khẩu an toàn. Điều này thường đáp ứng các tiêu chí để bảo vệ mật khẩu cơ bản, nhưng như chúng ta sẽ khám phá sau, nó có một số điểm yếu quan trọng có thể bị khai thác.
- t9^kJ$2q9a: Một mật khẩu được tạo bằng công cụ của Bitwarden. Nó được thiết lập để tạo mật khẩu dài 10 ký tự bằng chữ hoa và chữ thường, ký hiệu và số.
Bây giờ, hãy mã hóa mật khẩu bằng MD5. Đây là cách mật khẩu sẽ hiển thị nếu chúng nằm trong file mật khẩu đã lưu:
- 123456: e10adc3949ba59abbe56e057f20f883e
- Susan48!: df1ce7227606805745ee6cbc644ecbe4
- t9^kJ$2q9a: 450e4e0ad3ed8766cb2ba83081c0a625
Bây giờ, đã đến lúc bẻ khóa chúng.
Thực hiện một cuộc bẻ khóa đơn giản bằng cách sử dụng phương pháp Dictionary Attack

Để bắt đầu, hãy thực hiện phương pháp Dictionary Attack, một trong những phương pháp tấn công mật khẩu phổ biến nhất. Đây là một cuộc tấn công đơn giản, trong đó hacker lấy một danh sách các mật khẩu tiềm năng, yêu cầu Hashcat chuyển đổi chúng thành MD5 và xem có mật khẩu nào khớp với 3 mục nhập ở trên không. Đối với thử nghiệm này, ví dụ sử dụng file "rockyou.txt" làm từ điển của mình, đây là một trong những vụ rò rỉ mật khẩu lớn nhất trong lịch sử.
Để bắt đầu bẻ khóa, tác giả bài viết vào thư mục Hashcat, nhấp chuột phải vào một khoảng trống và nhấn vào Open in Terminal. Bây giờ, Terminal đã mở và được đặt thành thư mục Hashcat, gọi ứng dụng Hashcat bằng lệnh sau:
.\hashcat -m 0 -a 0 passwordfile.txt rockyou.txt -o results.txt
Đây là những gì lệnh thực hiện:
- .\hashcat gọi Hashcat.
- -m 0: Xác định loại mã hóa sẽ sử dụng. Trường hợp này sẽ sử dụng MD5, được liệt kê là số 0 trên tài liệu trợ giúp Hashcat.
- -a 0: Xác định cuộc tấn công muốn thực hiện. Tài liệu trợ giúp Hashcat liệt kê Dictionary Attack là số 0, vì vậy chúng ta gọi nó ở đây.
- passwordfile.txt rockyou.txt: File đầu tiên bao gồm 3 mật khẩu được mã hóa mà chúng ta đã thiết lập trước đó. File thứ hai là toàn bộ cơ sở dữ liệu mật khẩu rockyou.
- -o results.txt: Biến này xác định nơi chúng ta đặt kết quả. Trong lệnh, nó đặt các mật khẩu đã bẻ khóa vào file TXT có tên là "results".
Mặc dù rockyou có kích thước rất lớn, Hashcat đã xử lý tất cả chúng trong 6 giây. Trong file kết quả, Hashcat cho biết đã bẻ khóa được mật khẩu 123456, nhưng mật khẩu Susan và Bitwarden vẫn chưa bị bẻ khóa. Đó là vì 123456 đã được người khác sử dụng trong file rockyou.txt, nhưng không ai khác sử dụng mật khẩu Susan hoặc Bitwarden, nghĩa là chúng đủ an toàn để tồn tại sau cuộc tấn công này.
Thực hiện một vụ bẻ khóa phức tạp hơn bằng cách sử dụng các cuộc tấn công Brute Force có che giấu

Các cuộc tấn công Dictionary Attack có hiệu quả khi ai đó sử dụng cùng một mật khẩu như mật khẩu được tìm thấy trong một danh sách mật khẩu lớn. Chúng nhanh chóng và dễ thực hiện, nhưng chúng không thể bẻ khóa các mật khẩu không có trong từ điển. Do đó, nếu bạn thực sự muốn kiểm tra mật khẩu của mình, cần sử dụng các cuộc tấn công Brute Force.
Nếu các cuộc tấn công Dictionary Attack chỉ là lấy một danh sách được thiết lập sẵn và chuyển đổi từng cái một, thì những cuộc tấn công Brute Force cũng làm như vậy nhưng với mọi sự kết hợp có thể tưởng tượng được. Chúng khó thực hiện và mất nhiều thời gian hơn, nhưng cuối cùng chúng sẽ bẻ khóa được bất kỳ mật khẩu nào. Như chúng ta sẽ sớm thấy, khả năng đó đôi khi có thể mất rất nhiều thời gian.
Đây là lệnh được sử dụng để thực hiện một cuộc tấn công Brute Force "thực sự":
.\hashcat -m 0 -a 3 target.txt --increment ?a?a?a?a?a?a?a?a?a?a -o output.txt
Đây là những gì lệnh thực hiện:
- -a 3: Biến này định nghĩa cuộc tấn công mà chúng ta muốn thực hiện. Tài liệu trợ giúp Hashcat liệt kê các cuộc tấn công Brute Force là số 3, vì vậy nó được gọi ở đây.
- target.txt: File chứa mật khẩu được mã hóa mà chúng ta muốn bẻ khóa.
- --increment: Lệnh này yêu cầu Hashcat thử tất cả các mật khẩu có độ dài một ký tự, sau đó là hai, rồi ba, v.v... cho đến khi tìm ra kết quả.
- ?a?a?a?a?a?a?a?a?a?a: Đây được gọi là "mask". Mask cho phép chúng ta cho Hashcat biết ký tự nào được sử dụng ở vị trí nào. Mỗi dấu hỏi chỉ định một vị trí ký tự trong mật khẩu và chữ cái chỉ định những gì chúng ta thử ở mỗi vị trí. Chữ cái "a" biểu thị các ký tự viết hoa và viết thường, số và ký hiệu, vì vậy mask này có nội dung "Thử mọi thứ trên mỗi vị trí". Đây là một mask tệ hại, nhưng chúng ta sẽ sử dụng nó hiệu quả sau.
- -o output.txt: Biến này xác định nơi chúng ta đặt kết quả. Lệnh ví dụ đưa các mật khẩu đã bẻ khóa vào file TXT có tên là "output".
Ngay cả với mask tệ hại này, mật khẩu 123456 vẫn bị bẻ khóa trong vòng 15 giây. Mặc dù là mật khẩu phổ biến nhất, nhưng đây là một trong những mật khẩu yếu nhất.
Mật khẩu "Susan48!" tốt hơn nhiều - máy tính cho biết sẽ mất 4 ngày để bẻ khóa. Tuy nhiên, có một vấn đề. Bạn còn nhớ khi bài viết nói rằng mật khẩu Susan có một số lỗi nghiêm trọng không? Lỗi lớn nhất là mật khẩu được xây dựng theo cách có thể đoán trước được.
Khi tạo mật khẩu, chúng ta thường đặt các thành phần cụ thể vào những vị trí cụ thể. Bạn có thể tưởng tượng người tạo mật khẩu Susan đã thử sử dụng "susan" lúc đầu nhưng được yêu cầu thêm chữ hoa và số. Để dễ nhớ hơn, họ đã viết hoa chữ cái đầu tiên và thêm các số vào cuối. Sau đó, có lẽ một dịch vụ đăng nhập đã yêu cầu một ký hiệu, vì vậy người đặt mật khẩu lại gắn nó vào cuối.
Như vậy, chúng ta có thể sử dụng mask để yêu cầu Hashcat chỉ thử các ký tự cụ thể tại những vị trí cụ thể để khai thác mức độ dễ đoán của mọi người khi tạo mật khẩu. Trong mask này, "?u" sẽ chỉ sử dụng chữ in hoa tại vị trí đó, "?l" sẽ chỉ sử dụng chữ thường và "?a" biểu thị bất kỳ ký tự nào:
.\hashcat -m 0 -a 3 -1 ?a target.txt ?u?l?l?l?l?a?a?a -o output.txt
Với mask này, Hashcat phá mật khẩu trong 3 phút 10 giây, nhanh hơn nhiều so với 4 ngày.
Mật khẩu Bitwarden dài 10 ký tự và không sử dụng bất kỳ mẫu nào có thể đoán trước được, vì vậy phải thực hiện một cuộc tấn công Brute Force mà không có bất kỳ mask nào để bẻ khóa nó. Thật không may, khi yêu cầu Hashcat thực hiện điều đó, nó đã đưa ra lỗi, nói rằng số lượng kết hợp có thể vượt quá giới hạn số nguyên. Chuyên gia bảo mật CNTT cho biết mật khẩu Bitwarden phải mất 3 năm mới có thể giải mã, nên như vậy cũng là đủ rồi.
Cách giữ an toàn cho tài khoản khỏi bị bẻ khóa mật khẩu
Các yếu tố chính ngăn cản bài viết bẻ khóa mật khẩu Bitwarden là độ dài của nó (10 ký tự) và tính không thể đoán trước. Do đó, khi tạo mật khẩu, hãy cố gắng tạo mật khẩu dài nhất có thể và phân bổ các ký hiệu, số và chữ hoa đều trong mật khẩu. Điều này ngăn chặn tin tặc sử dụng mask để dự đoán vị trí của từng phần tử và khiến chúng khó bẻ khóa hơn nhiều.
Bạn có thể đã biết những câu châm ngôn cũ về mật khẩu như "sử dụng một mảng ký tự" và "làm cho nó dài nhất có thể". Hy vọng rằng bạn biết lý do tại sao mọi người khuyên dùng những mẹo hữu ích này - chúng là sự khác biệt chính giữa mật khẩu dễ bị bẻ khóa và mật khẩu an toàn.