Tự bẻ khóa chính mình: Kiểm thử chính sách mật khẩu với Hashcat và John the Ripper

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Bảo mật cổng vào: Tại sao việc kiểm thử mật khẩu lại quan trọng

Vào một sáng thứ Ba lúc 2 giờ sáng, log máy chủ của tôi bùng nổ. Tôi thấy hơn 4.500 lượt thử đăng nhập SSH mỗi giờ, tất cả đều nhắm vào ‘admin’ hoặc ‘root’ với các biến thể của ‘Password123’. Lời cảnh tỉnh đó đã thay đổi cách tôi nhìn nhận về bảo mật và tầm quan trọng của việc chặn Brute Force. Tôi có một tường lửa vững chắc, nhưng khối lượng lớn các lần thử đã chứng minh rằng một chính sách chỉ mạnh bằng lượng entropy mà người dùng thực sự lựa chọn.

Trong mạng doanh nghiệp, chúng ta thường áp dụng quy tắc tiêu chuẩn “8 ký tự, một chữ hoa, một ký tự đặc biệt”. Tuy nhiên, phần cứng hiện đại khiến những yêu cầu này trở nên tầm thường. Kiểm thử hạ tầng của chính bạn bằng Hashcat hoặc John the Ripper (JtR) không chỉ dành cho các đội red team. Đó là trách nhiệm cơ bản của quản trị viên hệ thống. Bạn cần biết chính xác mật khẩu ‘mạnh’ đó sẽ trụ vững được bao lâu dưới áp lực trước khi kẻ tấn công thực hiện phép tính đó thay cho bạn.

Khi thiết kế các chính sách này, tôi thường sử dụng Password Generator trên ToolCraft để đo chuẩn các chuỗi có độ entropy cao. Vì đây là một công cụ phía client, tôi không phải lo lắng về việc các chuỗi kiểm thử của mình bị rò rỉ lên máy chủ backend. Nó giúp tôi hình dung được khoảng cách giữa một chuỗi 16 ký tự thực sự ngẫu nhiên và các mẫu dễ đoán mà người dùng ưa thích.

Cài đặt: Thiết lập môi trường kiểm thử

Hầu hết các bản phân phối Linux đều giúp việc chạy các công cụ này trở nên dễ dàng. Tôi thường sử dụng các hệ thống dựa trên Debian như Ubuntu hoặc Kali khi thiết lập môi trường kiểm thử, nhưng logic này áp dụng được ở mọi nơi.

Cài đặt John the Ripper

John the Ripper là lựa chọn ưu tiên của tôi cho các cuộc kiểm thử nhanh. Nó hoạt động dựa trên CPU và tự động xử lý hàng chục loại mã băm (hash). Để có kết quả tốt nhất, hãy cài đặt phiên bản “jumbo” để có hỗ trợ định dạng tối đa:

sudo apt update
sudo apt install john

Cài đặt Hashcat

Hashcat là một “tay chơi” hạng nặng. Nó chuyển giao các tác vụ nặng nhọc cho GPU của bạn thông qua OpenCL hoặc CUDA. Để bạn dễ hình dung, một card đồ họa NVIDIA RTX 4090 hiện đại có thể thử hơn 2,5 triệu mã băm SHA-512 (Unix) mỗi giây. Một CPU tiêu chuẩn có thể phải vật lộn để đạt tới con số 50.000. Nếu bạn đang dùng máy chủ không có card rời, nó sẽ quay lại sử dụng CPU, nhưng bạn sẽ mất đi lợi thế hiệu năng khổng lồ đó.

sudo apt install hashcat

Kiểm tra xem phần cứng của bạn có được nhận dạng hay không bằng cách chạy:

hashcat -I

Cấu hình: Phân tích mã băm và xây dựng Wordlist

Trước khi bắt đầu bẻ khóa, bạn cần biết mình đang đối mặt với cái gì. Linux lưu trữ mật khẩu người dùng trong /etc/shadow. Những mật khẩu này thường được băm bằng SHA-512 và là mục tiêu hàng đầu trong các kỹ thuật leo thang đặc quyền Linux.

Chuẩn bị file Shadow cho John

John the Ripper yêu cầu mã băm mật khẩu và siêu dữ liệu người dùng phải được hợp nhất. Chúng ta sử dụng tiện ích unshadow cho việc này:

sudo unshadow /etc/passwd /etc/shadow > my_passwords.db
chmod 600 my_passwords.db

Xây dựng Wordlist tùy chỉnh

Các danh sách chung như rockyou.txt là một điểm bắt đầu tốt, nhưng chúng thiếu ngữ cảnh địa phương. Theo kinh nghiệm của tôi, nhân viên thường sử dụng tên công ty, năm hiện tại hoặc tên đội thể thao địa phương. Bạn có thể sử dụng crunch để tạo ra các mẫu cụ thể này.

Nếu tôi nghi ngờ người dùng đang lách luật bằng các mẫu như “Congty2024!”, tôi sẽ tạo ra các biến thể để kiểm chứng giả thuyết đó. Để kiểm tra các chuỗi cụ thể, đôi khi tôi sử dụng Hash Generator để tạo mã băm thủ công cho các mẫu phổ biến tại địa phương. Đó là một cách an toàn, 100% phía client để xem liệu một dự đoán cụ thể có khớp với mã băm tìm thấy trong quá trình kiểm thử hay không mà không để lộ dữ liệu lên web.

Chạy kiểm thử cơ bản với John

Bắt đầu với chế độ “single crack” của JtR. Chế độ này sử dụng tên người dùng và thông tin GECOS làm cơ sở, giúp phát hiện ra một lượng lớn người dùng một cách đáng ngạc nhiên:

john --single my_passwords.db

Nếu cách đó không mang lại kết quả, hãy chuyển sang tấn công bằng wordlist:

john --wordlist=/usr/share/wordlists/rockyou.txt my_passwords.db

Xác minh: Đánh giá độ mạnh của chính sách

Thành công không phải là bẻ khóa được mọi mật khẩu. Đó là việc đo lường thời gian bị xâm nhập (time-to-compromise). Nếu hệ thống thực sự bị xâm nhập, bạn sẽ cần đến các kỹ năng điều tra số trên Linux để khôi phục bằng chứng và hiểu rõ quy trình tấn công.

Bẻ khóa nâng cao với Hashcat

Hashcat yêu cầu một chế độ (mode) cụ thể cho từng loại mã băm. Đối với SHA-512 (Unix), chế độ là 1800. Giả sử bạn đã trích xuất chỉ các chuỗi mã băm vào file hashes.txt, bạn có thể chạy một cuộc tấn công từ điển với các quy tắc (rules).

Các quy tắc rất mạnh mẽ; chúng tự động thử các biến thể như thay thế ‘s’ bằng ‘$’ hoặc thêm ‘2024’.

hashcat -m 1800 -a 0 hashes.txt /path/to/wordlist.txt -r /usr/share/hashcat/rules/best64.rule

Giải thích dữ liệu

Nhấn ‘s’ trong quá trình thực hiện để xem trạng thái. Hãy nhìn vào “Speed” (Tốc độ) và “Estimated Time” (ETA – Thời gian dự kiến). Nếu một mật khẩu 12 ký tự hiển thị ETA là 80 năm trên phần cứng của bạn, chính sách đang làm tốt nhiệm vụ của nó. Nếu ETA là 4 giờ, đã đến lúc bắt buộc sử dụng các cụm mật khẩu (passphrase) dài hơn.

Hãy chú ý đến các mẫu trong mật khẩu bị bẻ khóa. Mọi người có đang sử dụng tháng hiện tại không? “MuaHe2024”? Dữ liệu định tính này là vàng đối với việc đào tạo người dùng. Nó chứng minh cho ban quản lý thấy rằng các quy tắc phức tạp thường chỉ dẫn đến những sự thay thế dễ đoán.

Các phương pháp hay nhất để bảo mật liên tục

  • Ưu tiên độ dài: Một câu dài 16 ký tự khó bẻ khóa hơn theo cấp số nhân so với một mật khẩu “phức tạp” 8 ký tự như P@ssw0rd!.
  • Hiện đại hóa thuật toán băm: Đảm bảo hệ thống của bạn sử dụng Argon2 hoặc SHA-512 với số vòng lặp (rounds) cao để làm chậm các cuộc tấn công dựa trên GPU.
  • Kiểm thử hàng quý: Đừng đợi đến khi bị xâm nhập. Hãy chạy các bài kiểm thử này vài tháng một lần để phát hiện mật khẩu yếu trước khi kẻ xấu làm điều đó.
  • Công cụ ưu tiên quyền riêng tư: Khi kiểm thử regex hoặc định dạng log JSON, hãy sử dụng các công cụ phía client. Tôi luôn đánh dấu ToolCraft cho việc này—tôi có thể xử lý dữ liệu nhạy cảm mà không bao giờ để nó rời khỏi máy cục bộ của mình.

Bằng cách tích hợp Hashcat và John the Ripper vào quy trình làm việc, bạn sẽ ngừng việc đoán mò về bảo mật. Bạn có được sự hiểu biết dựa trên dữ liệu về các lỗ hổng của mình, cho phép bạn xây dựng các hàng phòng thủ thực sự hiệu quả.

Share: