Bài viết này mô tả những cách thức kiểm tra tính an toàn mật khẩu trên các hệ thống UNIX, LINUX, và các hệ thống *.nix nói chung. Như các hệ thống trên Window, các mật khẩu *.nix được bảo vệ ngay tại hệ thống và trên đường truyền.
Bảo vệ mật khẩu của bạn ngay tại hệ thống
Mật khẩu trên hệ thống *nix được lưu trong file /etc/passwd, một file chứa các tên người sử dụng, UIDs, GIDs, và các mật khẩu được mã hoá cho người sử dụng trên hệ thống. Ngoài ra, file này còn lưu các thông tin khác, như tên đầy đủ của người sử dụng, đường dẫn thư mục, hay hệ thống shell.
Bất kỳ ai truy cập hệ thống cũng có thể hiển thị nội dung của file /etc/passwd. Điều này tạo ra khả năng phá hoại với các user và những kẻ tấn công có thể tạo ra các lỗ hổng bảo mật để nhận được một bản sao của file mật khẩu này.
Các hệ thống *.nix thường sử dụng thuật toán mã hoá (như thuật toán DES) để tạo ra các bảng băm mật khẩu. DES sử dụng thuật toán mã hoá 56 bit. Với thuật toán này, DES đã được sử dụng như thuật toán mã hoá phổ biến trước đây. Tuy nhiên, theo thời gian, khi phần cứng phát triển và giá thành thiết bị rẻ đi, thuật toán này đã trở nên dễ dàng giải mã và tạo lại mã. Vì vậy, với các hệ thống tốc độ nhanh sẽ việc crack các mật khẩu không phải quá khó.
Ví dụ: l0phtCrack có thể sử dụng để crack các mật khẩu của Windows, chương trình crack của Alec Mufet có thể sử dụng để crack mật khẩu hệ thống *.nix. Việc phá mã đã được phát triển theo thời gian, được viết từ năm 1991 và hiện tại nó đã được phát triển đến phiên bản 5.0a.
Việc phá mã có thể được cấu hình để tương thích với bất kỳ môi trường nào; các file cấu hình có thể được sửa đổi hỗ trợ cho các định dạng file mật khẩu khác nhau, loại thuật toán mã hoá khác nhau, ... Việc phá mã sử dụng danh sách từ điển như nền tảng cho việc phá mã; các file từ điển này cũng có thể được cấu hình lại một cách dễ dàng. Nói chung, để liệt kê danh sách cấu trúc thư mục cho việc thử chương trình, bạn cũng có thể cấu hình tập từ điển hay các luật tạo mã như một phần trong việc phá mã. Các luật này có thể bao gồm các phương thức như gắn trước hay sau các ký tự vào các từ chuẩn, gấp đôi hay đảo ngược các từ, thay đổi các ký tự từ thường sang hoa ..., hay thay thế một từ này bằng một từ khác.
Vậy làm cách nào để bảo vệ các mật khẩu trên hệ thống *.nix trong khi file /etc/passwd là file có thể đọc và sự phát triển ồ ạt của các công cụ crack mật khẩu.
Tăng tính an toàn của mật khẩu
Một vài phương thức cải thiện mật khẩu đã được thực hiện cho phương thức an toàn mật khẩu trong hệ thống *.nix. Đầu tiên được giới thiệu là loại mật khẩu bóng (shadow password). Việc chứa các bảng băm mật khẩu trong file đọc được /etc/passwd không an toàn, vì vậy các bảng băm này được đưa vào trong một file riêng rẽ, file /etc/shadow. File này chỉ có thể đọc bởi quyền root và vì vậy có khả năng bảo mật tốt hơn. Hai file này được sử dụng cùng nhau để cung cấp việc chứng thực cho user.
Các file mật khẩu bóng đã trở nên thông dụng và được sử dụng mặc định cho rất nhiều hệ thống *.nix như Sun Solaris. Tuy nhiên, chúng không phải là mặc định của toàn bộ các hệ thống. Chẳng hạn với Red Hat Linux, việc sử dụng mật khẩu bóng được lựa chọn trong các bước cài đặt hệ thống. Các mật khẩu bóng nên được sử dụng ở bất cứ đâu trong hệ thống.
Thứ hai, một số phiên bản của *.nix hiện tại cung cấp thuật toán mã hoá tốt hơn, (có thể sử dụng tuỳ chọn trong mã hoá), sử dụng thuật toán bảng băm MD5 thay thế cho DES.
Thứ ba, các chính sách mật khẩu, như được thảo luận trong các bài viết trước, có thể tăng tính bảo mật bằng cách đòi hỏi độ dài tối thiếu cho mật khẩu, thay đổi mật khẩu đều đặn,... Các tuỳ chọn này có sẵn và phụ thuộc vào hệ thống *.nix và phiên bản của passwd trên hệ thống của bạn.
Passwd là lệnh mặc định sử dụng cho việc thay đổi mật khẩu trên các hệ thống *.nix. Lệnh này cũng hỗ trợ việc kiểm tra tính an toàn tối thiếu đối với các mật khẩu của người sử dụng nhưng không hỗ trợ tính năng đòi hỏi người sử dụng thay đổi mật khẩu của họ sau một khoảng thời gian. Ví dụ lệnh passwd trong Sun Solaris hỗ trợ tính năng trên, và cũng tạo ra các kiểm tra sau:
Độ dài tối thiểu, mà nhà quản trị có thể chỉ định (mặc định là 6 ký tự). Chú ý rằng bất chấp độ dài mật khẩu, chỉ có 8 ký tự đầu được xem cho mục đích chứng thực.
Phải chứa ít nhất 2 ký tự (hoa hoặc thường) và một số hay biểu tượng.
Không thể là tên, đảo ngược tên truy cập hệ thống, hay bất cứ việc dịch chuyển ký tự từ tên truy cập hệ thống.
Các mật khẩu mới phải có ít nhất 3 ký tự khác so với mật khẩu cũ.
npasswd, được viết bởi Clyde Hoover, thực hiện các kiểm tra sau:
Kiểm tra từ vựng (độ dài tối thiểu); không cho phép các ký tự lặp lại hay các mẫu mật khẩu thông thường như các con số thường gặp; đòi hỏi mật khẩu là sự pha trộn giữa con số, ký tự, biểu tượng
Kiểm tra file passwd (không cho phép lấy thông tin từ file passwd).
Kiểm tra từ điển (không cho phép các mật khẩu được tạo từ các từ được tìm thấy trong các file từ điển cấu hình).
Kiểm tra thời điểm (tuỳ chọn - không cho phép sử dụng các mật khẩu đã được sử dụng gần đây).
Kiểm tra địa phương (tuỳ chọn - site cấu hình - các kiểm tra chỉ định; mặc định là không cho phép nhiều tên hostname trong file .rhosts).
Anlpasswd của viện nghiên cứu quốc gia Argonne về chuyên ngành thuật toán và khoa học máy tính, là một chương trình viết bằng ngôn ngữ Perl. Sự cải thiện chính của nó là hỗ trợ cho môi trường NIS và kiểm tra các mật khẩu user chống lại danh sách từ điển với khoảng 13 tỷ từ khi được tạo bởi chương trình crack.
Passwd+, được viết bởi Matt Bishop, là một chương trình rất phức tạp, mà giúp bạn cấu hình một số kiểm tra (dựa trên mô hình mẫu, xâu, số hay ký tự). Mỗi mật khẩu phải thoả mãn toàn bộ các kiểm tra này.
Nếu lựa chọn thay thế passwd với các giá trị này (nhìn chung là một ý tưởng tốt) cần cần xem xét một số điểm. Đầu tiên, kiểm tra liệu các giá trị passwd của bạn có hỗ trợ sử dụng mật khẩu bóng; ngoài các file mật khẩu bóng, bạn phải dựa vào độ mạnh của thuật toán mã hoá và độ lớn của mật khẩu (ví dụ như loại bỏ các mật khẩu yếu) để bảo vệ bạn. Thứ hai, nếu bạn đang chạy NIS hay NIS++, đảm bảo rằng phần mềm hỗ trợ chỉ một môi trường; không phải toàn bộ. Các mật khẩu bóng có thuật toán mã hoá mạnh, và có bộ lọc mật khẩu tốt hơn, cung cấp tính năng bảo vệ tốt hơn bằng cách tạo ra độ khó hơn cho kẻ tấn công duy trì và crack mật khẩu của người sử dụng.
Các mối đe doạ khác và các giải pháp khác
Các mật khẩu tại hệ thống hiện tại có thể được bảo mật tốt hơn, nhưng mối đe doạ vẫn tồn tại. Điều này đặc biệt đúng với trong các môi trường hệ thống *.nix, có rất nhiều mối đe doạ này dựa trên các chương trình TCP/IP và các giao thức mà không xây dựng các thuật toán mã hoá hay cơ chế bảo vệ khác. Ví dụ: telnet và các lệnh r* (rsh, rlogin,..) gửi các mật khẩu dưới dạng text.
Việc bảo vệ các mật khẩu được mã hoá được chứa trên hệ thống sẽ không còn ý nghĩa nhiều khi bạn truyền các mật khẩu này dưới dạng text qua mạng. Các giao thức không bảo mật nên được đặt với các giao thức bảo mật thay thế. Sử dụng secure shell - ssh, mà các thông tin được mã hoá truyền tới đầu cuối, được thiết kế thay đổi telnet và rsh; secure copy (scp) có thể được sử dụng để thay thế ftp và rcp. OpenSSH là một sản phẩm miễn phí được phát triển như một phần trong toàn bộ dự án OpenBSD. Nó gồm có ssh, scp và các công cụ ssh. Các giá trị BSD (OpenBSD, FreeBSD, BSDi) và một số các phiên bản Linux (Debian, SuSE, RedHat, Mandrake). Hiện tại, OpenSSH có thể được sử dụng như phần thêm vào cho mỗi hệ thống *.nix.
Các giải pháp khác
Do sự đa dạng đối với mật khẩu của các hệ thống *.nix cả ngay trong hệ thống và khi truyền thông, một số phương pháp khác đã được thực hiện để làm tăng tính an toàn cho mật khẩu. Một trong những phương pháp thông dụng nhất là mô tả các mật khẩu sử dụng một lần và sau đó được hủy bỏ. Các hệ thống này có 2 thuận lợi sau:
Chúng hướng tới thực thi các truyền thông mật khẩu mang tính bảo mật, hầu hết sử dụng việc mã hoá trong khuôn dạng của một giao thức dạng challenge/response, vì vậy các mật khẩu không bao giờ được truyền trên mạng.
Vì mật khẩu được sử dụng chỉ một lần, thậm chí nếu chúng bị lấy đi bởi kẻ tấn công, nó cũng không thể sử dụng lại.
Các hệ thống mật khẩu sử dụng 1 lần (OTP - Once-Time Password) có thể được thực hiện bởi phần cứng - như là các thẻ smart card - hay trong phần mềm. Trong khi các giải pháp thương mại tồn tại, chúng ta hãy xét đến một số các chương trình dạng miễn phí.
S/KEY, một trong những hệ thống dựa theo mô hình OPT, được viết bởi Bellcore (hiện tại viết bởi Telcordia) và được phát triển như một phần mềm mã nguồn mở. Bellcore gần đây đã bắt đầu phát triển phiên bản thương mại, nhưng phiên bản miễn phí vẫn được cung cấp. Khi S/KEY trở thành sản phẩm thương mại, phần mã nguồn mở của chương trình này vẫn được quan tâm và phát triển thành sản phẩm OPIE. Cả S/KEY và OPIE sử dụng một hệ thống challenge/response. Trong mỗi trường hợp, mật khẩu của người sử dụng được chứa, trong dạng mẫu được mã hoá, trên hệ thống máy chủ.
Mỗi hệ thống sử dụng bộ mã tạo mật khẩu chung dựa theo thông tin người sử dụng cung cấp lúc ban đầu và liên kết với một số tuần tự. Mật khẩu đầu tiên của người sử dụng được tạo bằng cách đặt thông tin của người sử dụng đó qua một thuật toán bảng băm (như thuật toán MD4 cho S/KEY, MD5 cho OPIE) với số N mật khẩu được tạo. N là số lần trong dãy bảng băm để người sử dụng có thể truy cập. Mật khẩu kế tiếp được tạo bằng cách giảm N đi 1 và đặt thông tin đó trong bảng băm số N-1, và tiếp tục như vậy.
Với mục đich chứng thực, khi một người sử dụng đăng nhập vào hệ thống, anh ta sẽ gửi tên truy nhập của anh ta tới máy chủ. Máy chủ sẽ trả lời theo phương thức challenge, bao gồm tạo số tuần tự của người sử dụng. Sau khi người sử dụng gõ mật khẩu và gửi tới máy chủ, nếu mật khẩu trùng với mã mà máy chủ đã tạo trước đó một khoảng thời gian, người sử dụng đó được chấp nhận truy cập hệ thống. (Chú ý rằng, mật khẩu này chỉ có giá trị trong một khoảng thời gian nhất định. Và trong khoảng thời gian này, người sử dụng sẽ không thể đang nhập lại nếu hệ thống không được thiết lập lại hay khởi tạo lại).
S/KEY và OPIE đã thực sự được thiết kế để bảo vệ các kẻ tấn công như replay attack, vì thông tin mật khẩu chỉ có giá trị cho mỗi phiên làm việc, nó không thể bị lây bởi một công cụ mạo danh hay sử dụng lại tại thời điểm khác.
Tuy nhiên, một thông tin mã hoá yếu cũng có thể làm hệ thống như S/KEY hay OPIE có thể có lỗ hổng như một mật khẩu yếu. Vì vậy, ban đầu, chúng ta cần quay lại nơi mà chúng ta xuất phát: đó chính là sử dụng các mật khẩu có độ dài đủ lớn.
Phần kết
An toàn của mật khẩu trên các hệ thống *.nix bao gồm 3 khía cạnh chính:
Đầu tiên, bạn phải tạo các mật khẩu và các bảng băm với độ khó cho các kẻ tấn công khó có thể phá mã được. Bạn có thể thực hiện điều này sử dụng các file mật khẩu, như hạn chế quyền truy cập hơn là thay đổi file chuẩn /etc/passwd file.
Thứ hai, bạn phải mã hoá mật khẩu khi truyền tin. Thay thế các giao thức sử dụng việc chứng thực dạng text với các dạng chứng thực được mã hoá.
Thứ ba, đảm bảo rằng thuật toán mã hoá, bản thân nó là an toàn. Không có phương thức mã hoá nào là hoàn hảo; Để sử dụng thuật toán mã hoá mạnh nhưng nơi có thể (MD5 hay MD4 hay thủ tục mã hoá crypt). Thậm chí khi bạn sử dụng thuật toán mã hoá, các mật khẩu mạnh vẫn là phương thức tốt nhất bảo vệ việc phá mã hay đoán mật khẩu.
Cuối cùng, việc kiểm tra các mật khẩu của bạn (ví dụ: với quyền truy cập) là một trong những cách tốt nhất để nâng cao độ an toàn cho hệ thống của bạn. Các công cụ như Crack rất hữu ích không chỉ cho những kẻ tấn công mà còn cho cả những người quản trị an toàn hệ thống. Toàn bộ các công cụ được liệt kê trong bảng sau:
Công cụ kiểm tra | Phiên bản hiện tại | Có sẵn tại | Môi trường chạy |
Crack | 5.0a | Trung tâm nghiên cứu giáo dục thuộc trường đại học Purdue (CERIAS)
| *nix; Solaris, Linux, FreeBSD, NetBSD, OSF, and Ultrix |
anlpasswd | 2.3 | Có rất nhiều Website cung cấp, gồm cả server FTP của CERIAS | *nix |
npasswd |
| Thuộc trường đại học Texas tại Austin và tại một số website khác
| BSDI, FreeBSD, NetBSD, SunOS, UNIX, and Ultrix |
passwd+ | 5.0a | Trường đại học Dartmouth và một số website khác. Địa chỉ download: ftp://ftp.dartmouth.edu/pub/security/ | *nix |
S/KEY | 1.1 (phẩn mềm miễn phí) | Bellcore FTP site | AIX, BSDI, DG-UX, Digital UNIX/Alpha, FreeBSD, HP-UX, IRIX, Linux, NetBSD, OpenBSD, SCO, Solaris, SunOS, and Ultrix |
OPIE | 2.32 | *nix |
(Theo Password Security on Unix and Linux Networks của Jennifer Kolde )