Lỗ hổng bắt nguồn từ tâm lý chủ quan
Nhiều quản trị viên hệ thống thường dồn toàn lực vào việc đổi port SSH, dựng Firewall hay cấu hình Fail2Ban dày đặc. Tuy nhiên, thực tế cho thấy lỗ hổng nguy hiểm nhất thường không nằm ở phần mềm mà nằm ở chính thói quen đặt mật khẩu của người dùng. Qua đợt audit hơn 10 server thực tế, mình nhận thấy những chuỗi như “P@ssword123” hay “Congty@2024” xuất hiện cực kỳ phổ biến. Dù trông có vẻ phức tạp, chúng lại là mục tiêu đầu tiên bị các bộ từ điển (wordlist) của hacker càn quét.
Chỉ cần một tài khoản bị chiếm quyền, dù là user không có quyền sudo, kẻ tấn công vẫn có thể dùng nó làm bàn đạp để leo thang đặc quyền (Privilege Escalation). Vì vậy, việc chủ động kiểm tra độ mạnh mật khẩu định kỳ là nhiệm vụ bắt buộc. Để làm việc này hiệu quả nhất, chúng ta cần sự kết hợp của bộ đôi: John the Ripper và Hashcat.
Cơ chế lưu trữ mật khẩu trên Linux
Linux không bao giờ lưu mật khẩu dưới dạng văn bản thuần túy (plain text). Thay vào đó, hệ thống băm chúng thành các chuỗi hash và lưu tại /etc/shadow, tệp tin mà chỉ root mới có quyền truy cập. Một dòng hash tiêu chuẩn thường có cấu trúc như sau:
username:$6$rounds=40960$saltstring$hashedpassword:19000:0:99999:7:::
Bạn cần chú ý ký tự nằm giữa hai dấu đô-la đầu tiên để xác định thuật toán:
- $1$: MD5 (Cũ, dễ crack)
- $2a$: Blowfish (Thường thấy trên OpenBSD)
- $5$: SHA-256
- $6$: SHA-512 (Tiêu chuẩn trên Ubuntu và CentOS hiện nay)
Mục tiêu của chúng ta là lấy các chuỗi hash này và dùng sức mạnh tính toán để giải mã ngược lại mật khẩu gốc.
Bước 1: Chuẩn bị dữ liệu Audit
John the Ripper (JtR) yêu cầu một định dạng tệp tin đặc biệt, kết hợp thông tin từ /etc/passwd và /etc/shadow. Chúng ta sẽ dùng công cụ unshadow để chuẩn bị dữ liệu này.
# Cài đặt John the Ripper
sudo apt update && sudo apt install john -y
# Gộp file passwd và shadow thành một
sudo unshadow /etc/passwd /etc/shadow > myhashes.txt
sudo chmod 600 myhashes.txt
Lưu ý quan trọng: Tệp myhashes.txt chứa toàn bộ hash mật khẩu của hệ thống. Hãy xóa sạch dấu vết của nó ngay sau khi hoàn tất quá trình kiểm tra để tránh rủi ro bảo mật.
Sử dụng John the Ripper: Đơn giản và thông minh
John the Ripper là lựa chọn hàng đầu cho các lần audit nhanh nhờ khả năng tự nhận diện loại hash và chế độ “Single Crack” cực kỳ thông minh.
1. Chế độ Single Crack
Chế độ này tập trung thử các biến thể dựa trên chính username. Thật bất ngờ là rất nhiều người dùng vẫn đặt mật khẩu trùng hoặc gần giống với tên đăng nhập của họ.
john --single myhashes.txt
2. Tấn công bằng Wordlist
Đây là phương pháp mang lại tỷ lệ thành công cao nhất. Bạn có thể sử dụng bộ rockyou.txt nổi tiếng chứa hơn 14,3 triệu mật khẩu từng bị rò rỉ trên thực tế.
john --wordlist=/usr/share/wordlists/rockyou.txt myhashes.txt
Để kiểm tra danh sách những mật khẩu đã bị bẻ khóa thành công, hãy chạy lệnh:
john --show myhashes.txt
Hashcat: Tận dụng sức mạnh phần cứng GPU
Nếu John the Ripper mạnh về CPU, thì Hashcat lại là vua trong việc tận dụng GPU (Card đồ họa). Một chiếc card RTX 3080 có thể thử hàng tỷ hash mỗi giây, nhanh hơn CPU hàng trăm lần khi xử lý các thuật toán phức tạp.
Trong các dự án audit hệ thống lớn với hàng nghìn user, mình luôn ưu tiên Hashcat để tiết kiệm thời gian. Trước tiên, bạn cần xác định Mode tương ứng với loại hash:
- SHA-512 (Unix):
-m 1800 - MD5:
-m 500 - SHA-256 (Unix):
-m 7400
Cách chạy Hashcat với tệp hash SHA-512:
# Chỉ trích xuất phần hash cần thiết cho Hashcat
cut -d: -f2 myhashes.txt > justhashes.txt
# Bắt đầu crack với wordlist (chế độ -a 0)
hashcat -m 1800 -a 0 justhashes.txt /path/to/rockyou.txt
Công cụ hỗ trợ và cách tạo mật khẩu an toàn
Đôi khi mình cần kiểm tra nhanh một chuỗi ký tự khi hash ra SHA-256 sẽ trông như thế nào để đối chiếu log mà không muốn gõ lệnh. Những lúc đó, mình thường dùng Hash Generator trên ToolCraft. Công cụ này chạy hoàn toàn trên trình duyệt (client-side), nên dữ liệu không bao giờ bị gửi lên server, đảm bảo an toàn tuyệt đối.
Sau khi phát hiện các tài khoản yếu, đừng chỉ nhắc nhở suông. Hãy hướng dẫn người dùng sử dụng Password Generator để tạo các chuỗi ngẫu nhiên. Một mật khẩu dài trên 12 ký tự gồm cả chữ hoa, số và ký tự đặc biệt sẽ khiến các cuộc tấn công wordlist trở nên vô vọng.
Ngăn chặn mật khẩu yếu bằng cấu hình hệ thống
Audit chỉ là bước đánh giá. Để giải quyết triệt để, bạn cần áp dụng chính sách mật khẩu nghiêm ngặt ngay từ đầu. Trên Ubuntu/Debian, module libpam-pwquality là công cụ tốt nhất để thực hiện việc này.
# Cài đặt module
sudo apt install libpam-pwquality -y
# Cấu hình tại /etc/pam.d/common-password
# Chỉnh sửa dòng pam_pwquality.so như sau:
password requisite pam_pwquality.so retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
Cấu hình trên buộc mật khẩu phải dài tối thiểu 12 ký tự và hội đủ 4 nhóm: chữ thường, chữ hoa, số và ký tự đặc biệt. Đặc biệt, tham số enforce_for_root đảm bảo ngay cả admin cũng phải tuân thủ quy tắc này.
Lời kết
Bảo mật không phải là một trạng thái cố định mà là một quá trình rà soát liên tục. Việc đóng vai “hacker” để tự tấn công hệ thống của mình giúp bạn nhìn ra những kẽ hở mà các công cụ tự động thường bỏ qua. Hãy bắt đầu audit ngay hôm nay thay vì chờ đợi một cuộc tấn công thực sự xảy ra.
Nếu bạn cần thêm các công cụ hỗ trợ dev và bảo mật nhỏ gọn, hãy ghé qua ToolCraft. Đây là kho tàng hơn 200 công cụ miễn phí giúp mình tối ưu hóa công việc quản trị hàng ngày.

