Phòng chống dictionary attack trên Linux như thế nào?


Dictionary attack là một trong nhiều kỹ thuật dò tìm mật khẩu hoặc khóa bí mật. Chúng ta sẽ cùng xem qua cách thức để hạn chế loại tấn công này trong bài viết dưới đây.

Giới thiệu

Theo định nghĩa từ Wikipedia thì:

Dictionary attack là một kỹ thuật (technique) dùng để hạ gục cơ chế mã hóa (cipher) hoặc xác thực (authentication) bằng cách tìm ra khóa giải mã (decryption key) hoặc chuỗi mật khẩu (passphrase). Việc dò tìm này dựa trên các dictionary (hoặc word list) – là một kho cực kỳ đồ sộ gồm hàng ngàn hoặc thậm chí hàng triệu các chuỗi ký tự thuộc nhiều loại như:

–      Từ vững trong các ngôn ngữ khác nhau

–      Tên người, tên địa danh

–      Các mật khẩu phổ dụng như: 123456, iloveu, admin

Các chương trình bẻ khóa mật khẩu (password cracking) thường được trang bị các bộ dictionary nhằm khai thác khuynh hướng sử dụng các mật khẩu đơn giản, dễ đoán (weak password) của người dùng.

Tuy nhiên, bạn có thể sử dụng các công cụ dictionary attack này để kiểm tra độ an toàn của mật khẩu. Bây giờ chúng ta quay trở lại vấn đề chính trong bài:

Phòng chống dictionary attack trên Linux như thế nào?

Đặt mật khẩu thật phức tạp, khó đoán (strong password) xem ra là cách hữu hiệu nhất để ngăn ngừa khả năng mật khẩu bị dictionary attack tìm ra. Vậy thì thế nào mới gọi là strong password đây? Ví dụ, xem xét một mật khẩu như sau:

#!T()i2@C|-|In4t01;

Qua đây, có thể thấy một strong password phải thõa mãn các (không hẳn là tất cả) yêu cầu sau:

–      Mật khẩu không nằm trong các bộ từ điển có sẵn, không đặt theo tên người, địa danh, thú cưng hoặc thông tin cá nhân như: ngày sinh, số CMND, biệt danh,…

–      Chiều dài của mật khẩu đủ lớn, ít nhất là 8 ký tự trở lên và không được có nhiều ký tự được lặp lại nhiều lần trong mật khẩu.

–      Bao gồm cả chữ chữ cái in hoa, in thường, chữ số, các ký tự đặc biệt như: ~, !, @, -, +, :, }, |, >, ?,…

Nhưng, đa số người dùng đều không ưa những mật khẩu dài loằng ngoằng và khó nhớ. Họ không biết hoặc thậm chí phớt lờ những chỉ dẫn để tạo strong password như trên. Vậy làm sao để ép buộc họ tuân thủ chặt chẽ chính sách mật khẩu do bạn đề ra khi họ có ý định thay đổi mật khẩu?

Trong Linux, câu trả lời đó đến từ pam_cracklib.so – một PAM module cho phép bạn thiết lập chính sách mật khẩu đủ mạnh để hạn chế dictionary attack. Nó sẽ kiểm tra mật khẩu được nhập vào để đảm bảo rằng người dùng sẽ không được phép đặt lại mật khẩu mới cho tới khi mật khẩu đó thỏa mãn các yêu cầu đặt ra.

Lưu ý: pam_cracklib.so đã được cài sẵn trên Redhat/Fedora/CentOS. Nếu hệ thống Debian/Ubuntu chưa có module này thì gõ lệnh sau để cài đặt nó.

# apt-get install libpam-cracklib

Dưới đây là cách tinh chỉnh cho module pam_cracklib.so.

–      Gõ lệnh sau để mở file cấu hình cho PAM

# vi /etc/pam.d/system-auth

–      Tìm dòng bắt đầu bằng password required (hoặc requisite) pam_cracklib.so và sửa lại như sau:

password required pam_cracklib.so retry=2 minlen=12 difok=6

Lưu và đóng file này lại. Ý nghĩa các tùy chọn là:

  • retry = 2: nhắc nhở người dùng nhiều nhất 2 lần trước khi trả về thông báo lỗi.

Ví dụ:

Sử dụng lệnh passwd để thay đổi mật khẩu. Nếu ở lần 1 bạn gõ vào mật khẩu mới không thỏa mãn 1 trong các yêu cầu của chính sách mật khẩu, thì bạn sẽ nhận được nhắc nhở và có thêm lần 2 để gõ lại mật khẩu khác. Nếu ở lần 2 này mật khẩu bạn gõ vào cũng không thỏa mãn yêu cầu thì bạn lại nhận được nhắc nhở nhưng không có thêm lần 3 để bạn gõ tiếp mật khẩu khác và bạn nhận được thông báo như sau:

passwd: Have exhausted maximum number of retries for service

  • minlen = 12: Chiều dài tối thiểu của mật khẩu là 12 ký tự.
  • difok = 6: Số ký tự trong mật khẩu mới có thể trùng với mật khẩu cũ. Ví dụ, người dùng sẽ thấy thông báo lỗi sau – BAD PASSWORD: is too similar to the old one nếu mật khẩu mới có 6 ký tự (hoặc hơn) trùng với mật khẩu cũ trước đó.

Ngoài ra, bạn có thể áp dụng thêm các tùy chọn sau để tăng độ khó cho mật khẩu:

  • dcredit=N : Số lượng chữ số.
  • ucredit=N : Số lượng chữ cái in hoa.
  • lcredit=N : Số lượng chữ cái thường.
  • ocredit=N : Số lượng các ký tự đặc biệt khác.

Lưu ý cuối cùng là những tùy chọn rằng buộc này chỉ áp dụng đối với những tài khoản người dùng thông thường. Người dùng root không hề bị ảnh hưởng bởi các yêu cầu về mật khẩu này. Nhưng đối với tài khoản root, bạn lại càng phải đặt mật khẩu phức tạp hơn cho nó… Xem thêm bài viết này để hiểu rõ hơn sức mạnh của root và vấn đề an toàn hệ thống.

–manthang.

One comment

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 )

Google+ photo

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

Connecting to %s