An toàn mật khẩu trên hệ thống mạng Linux

Một phần của tài liệu Tìm hiểu về hệ điều hành Linux (Trang 65 - 77)

5.2.1 BẢO VỆ MẬT KHẨU NGAY TẠI HỆ THỐNG.

Mật khẩu trên hệ thống Linux đượ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.

Trong các hệ thống Linux thường sử dụng thuật toán mã hoá (như thuật toán DES) 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 thì việc phá các mật khẩu không phải quá khó.

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 được coi là 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.

5.2.2 TĂNG TÍNH AN TOÀN CỦA MẬT KHẨU.

Một vài phương thức đã được sử dụng để cải thiện an toàn mật khẩu cho hệ thống Linux . Phương thức đầu tiên được giới thiệu là việc sử dụng loại mật khẩu bóng (shadow password).

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 Linux . Đối 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 tại hệ thống hiện tại có thể được bảo mật tốt hơn, nhưng các mối đe doạ vẫn tồn tại. Điều này đặc biệt đúng trong môi trường các hệ thống Linux, có rất nhiều mối đe doạ 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á chứa trên hệ thống sẽ không còn ý nghĩa nhiều khi ta 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 thay bằng các giao thức có cơ chế bảo mật . 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 Linux.

Do sự đa dạng đối với mật khẩu của các hệ thống Linux ngay cả 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.

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.

5.3 BẢO MẬT HỆ THỐNG MẠNG LINUX.

Hiện nay, trên môi trường máy chủ, Linux ngày càng chiếm một vị trí quan trọng. Nguyên nhân khiến Linux dần trở thành một đối thủ tiềm nǎng của hệ điều

hành Microsoft Windows là do tính ổn định, độ linh hoạt và khả nǎng chịu tải lớn: đây là những đặc điểm quan trọng hàng đầu của một hệ thống máy phục vụ. Cách thức bảo mật hệ thống Linux :

• Loại bỏ tất cả các account và nhóm đặc biệt

Ngay sau khi cài đặt Linux, người quản trị có thể xoá bỏ tất cả các account và nhóm (group) đã được tạo sẵn trong hệ thống nhưng không có nhu cầu sử dụng, ví dụ như lp, sync, shutdown, halt, news, uucp, operator, games, gopher, v.v... Thực hiện việc xoá bỏ account với lệnh :

# userdel

# userdel lp: nếu không có nhu cầu về in ấn trên hệ thống. # groupdel : xóa bỏ nhóm.

• Che giấu file chứa mật khẩu

Khởi thủy của các hệ điều hành Unix và Linux, mật khẩu của toàn bộ các account đã từng được lưu ngay trong file /etc/password, file có quyền đọc bởi tất cả các account trong hệ thống! Đây là một kẽ hở lớn cho các kẻ phá hoại: Mặc dù các mật khẩu đều được mã hoá, nhưng việc giải mã ngược là có thể thực hiện được (và có thể thực hiện khá dễ dàng, đặc biệt vì cơ chế mã hoã mật khẩu không phải là khó phá và ngày nay khả nǎng tính toán và xử lý của máy tính rất mạnh). Vì lí do trên, gần đây các nhà phát triển Unix và Linux đã phải đặt riêng mật khẩu mã hoá vào một file mà chỉ có account root mới đọc được: file /etc/shadow. (Khi sử dụng phương pháp này, để đảm bảo tính tương thích, nơi vốn đặt mật khẩu trong file /etc/password người ta đánh dấu "x")

• Tự động thoát khỏi shell

Người quản trị có thể cài đặt tính nǎng tự động thoát ra khỏi shell khi không có sự truy xuất nào trong một khoảng thời gian định trước bằng cách đặt một tham số quy định khoảng thời gian hệ thống vẫn duy trì dấu nhắc shell.

Muốn cài đặt tham số này, ta sử dụng biến môi trường TMOUT và gán cho nó một giá trị số thể hiện khoảng thời gian tính bằng giây hệ thống vẫn duy trì dấu nhắc. Để thực hiện điều này cho tất cả các account trong hệ thống, cách đơn giản nhất là đặt nó vào file /etc/profile dòng lệnh sau: (giả sử ta đặt khoảng thời gian là 600 giây)

TMOUT=600

• Loại bỏ các dịch vụ không sử dụng

Một điều khá nguy hiểm là sau khi cài đặt, hệ thống tự động bật chạy khá nhiều dịch vụ (và đa số là các dịch vụ không mong muốn), dẫn tới tốn tài nguyên và gây nên nhiều nguy cơ về bảo mật. Người quản trị có thể loại bỏ ngay lập tức các dịch vụ không dùng tới ngay sau khi cài máy. Hoặc đơn giản bằng cách xoá bỏ các gói phần mềm/dịch vụ không sử dụng (qua công cụ quản trị gói phần mềm rpm của RedHat) hoặc sử dụng công cụ ntsysv để duyệt xem tất cả các dịch vụ đang cài đặt rồi vô hiệu hoá những dịch vụ không cần thiết (bằng cách bỏ đánh dấu các dịch vụ không sử dụng với phím Space). Sau khi thoát ra khỏi ntsysv thì khởi động lại máy: các dịch vụ không mong muốn sẽ không chạy nữa.

• Không tiết lộ thông tin về hệ thống qua telnet

Dịch vụ cho phép truy xuất hệ thống từ xa telnet có khả nǎng tiết lộ thông tin về hệ thống, dễ tạo điều kiện cho những kẻ phá hoại tấn công dựa vào những điểm yếu đã biết. Điều này rất dễ nhận thấy: Mọi người dùng kết nối từ xa vào dịch vụ telnet đều nhận được thông tin về tên máy, phiên bản Linux và phiên bản của nhân (kernel) của máy chủ.

• Tránh sử dụng các dịch vụ không mã hoá thông tin trên đường truyền

• Cấm sử dụng account root từ consoles

Ngay sau khi cài đặt RedHat, account root sẽ không có quyền kết nối telnet vào dịch vụ telnet trên hệ thống (chỉ những account thường mới có thể kết nối). Nguyên nhân là do file /etc/securetty quy định những console được phép truy nhập bởi root chỉ liệt kê những console "vật lý" (tức là chỉ truy xuất được khi ngồi trực tiếp tại máy chủ) mà bỏ qua những kết nối qua mạng. Dịch vụ ftp cũng sẽ bị hạn chế này: account root không được phép truy xuất ftp qua mạng. Để tǎng tính bảo mật hơn nữa, soạn thảo file /etc/securety và bỏ đi những console mà ta không muốn root truy nhập từ đó.

• Cấm "su" lên root

Trong Linux, lệnh su (Substitute User) cho phép người dùng chuyển sang một account khác. Nếu không muốn một người bất kỳ "su" thành root,ta có thể thêm hai dòng sau vào nội dung file /etc/pam.d/su

auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/Pam_wheel.so group=wheel Như vậy, chỉ có những người có đǎng ký là thành viên của nhóm wheel mới có quyền "su" thành root. Để cho phép một người dùng có quyền này, người quản trị chỉ việc gán account của người này vào nhóm wheel (qua file /etc/group)

• Hạn chế các thông tin ghi bởi bash shell

Thông thường, tất cả các lệnh được thực hiện tại dấu nhắc shell của các account đều được ghi vào file ".bash_history" nằm trong thư mục cá nhân của các account. Điều này cũng gây nên những nguy hiểm tiềm ẩn, đặc biệt với những ứng dụng đòi hỏi phải gõ các thông mật như mật khẩu trên dòng lệnh. Người quản trị nên hạn chế nguy cơ này dựa trên 2 biến môi trường HISTFILESIZE và HISTSIZE: Biến môi trường HISTFILESIZE xác định số lệnh (gõ tại dấu nhắc shell) sẽ được lưu lại cho lần truy nhập sau, còn biến môi trường HISTSIZE xác định số lệnh sẽ được ghi nhớ trong phiên làm việc hiện thời. Ta có thể giảm giá trị của HISTSIZE và đặt bằng 0 giá trị HISTFILESIZE để giảm tối đa những nguy hiểm đã nêu trên.

Để thực hiện việc này, chỉ cần đơn giản thay đổi giá trị hai biến này trong file /etc/profile như sau:

HISTSIZE=20

Như vậy, tại phiên làm việc hiện thời, shell chỉ ghi nhớ 20 lệnh gần nhất, đồng thời không ghi lại các lệnh người dùng đã gõ khi người dùng thoát ra khỏi shell.

• Cấm nhòm ngó tới những file script khởi động Linux.

Khi khởi động Linux, các file script được đặt tại thư mục /etc/rc.d/init.d sẽ được thực hiện. Để tránh những sự tò mò không cần thiết, người quản trị nên hạn chế quyền truy xuất tới những file này chỉ cho account root bằng lệnh sau: # chmod -R 700 /etc/rc.d/init.d/*

• Xoá bỏ những chương trình SUID/SGID không sử dụng.

Thông thường, những ứng dụng được thực hiện dưới quyền của account gọi thực hiện ứng dụng. Tuy nhiên, Unix và Linux sử dụng một kỹ thuật đặc biệt cho phép một số chương trình thực hiện dưới quyền của người quản lý chương trình (chứ không phải người thực hiện). Đây chính là lý do tại sao tất cả mọi user trong hệ thống đều có thể đổi mật khẩu của mình trong khi không hề có quyền truy xuất lên file /etc/shadow: Nguyên nhân vì lệnh passwd có gán thuộc tính SUID và được quản lý bởi root, mà chỉ có root mới có quyền truy xuất /etc/shadow.

chương trình có tính nǎng thực thi được quản lý bởi root, do thiết kế tồi hoặc do được cài đặt cố tình bởi những kẻ phá hoại mà lại có thuộc tính SUID thì mọi điều tồi tệ đều có thể xảy ra.

Thuộc tính SGID cũng tương tự như thuộc tính SUID: các chương trình được thực hiện với quyền nhóm là nhóm quản lý chương trình chứ không phải nhóm của người chạy chương trình.

Như vậy, người quản trị sẽ phải thường xuyên kiểm tra xem trong hệ thống có những ứng dụng nào có thuộc tính SUID hoặc SGID mà không được phép không?

Để tìm tất cả các file có thuộc tính SUID/SGID, sử dụng lệnh find như sau: # find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls ưlg {} \; Nếu phát hiện được một file có thuộc tính SUID/SGID một cách không cần thiết, có thể loại bỏ các thuộc tính này bằng lệnh: # chmod a-s

• Tǎng tính bảo mật cho nhân (kernel) của Linux

Thực tế cho thấy rằng, Linux không hẳn được thiết kế với các tính nǎng bảo mật thật chặt chẽ .Do đó, việc sử dụng một hệ điều hành với nhân được củng cố là rất quan trọng: Một khi nhân - phần cốt lõi nhất của hệ điều hành - được thiết kế tốt thì nguy cơ bị phá hoại sẽ giảm đi rất nhiều.

KẾT LUẬN

Có thể nói ,đối với người dùng thông thường việc chuyển từ Windows sang Linux trong ngày một ngày hai là chưa thể. Tuy nhiên đối với những người làm tin học, đặc biệt là đối với sinh viên chúng ta, việc tìm hiểu và nghiên cứu Linux và phần mềm mã nguồn mở là một điều kiện rất tốt để nâng cao hiểu biết của mình. Linux dẫu sao vẫn là một hệ điều hành rất có giá trị: chi phí thấp, linh hoạt, ổn đinh, và bảo mật cao. Bản thân tôi tin rằng, trong tương lai gần, Linux sẽ dần dần trở thành một trong những hệ điều hành hàng đầu trên thế giới.

Một lần nữa , tôi xin chân thành cảm ơn cô giáo Nguyễn Thị Thúy và các thầy cô giáo trong khoa Tin học kinh tế đã quan tâm , giúp đỡ tôi hoàn thành đề án này .

TÀI LIỆU THAM KHẢO

1. Bùi Thế Ngũ , Hệ điều hành và máy vi tính , NXB Thống Kê 2000. 2. Nguyễn Tiến , Đặng Xuân Hưởng , Cẩm nang Linux , NXB Giáo Dục

2000.

3. Nguyễn Minh Hoàng ,Hoàng Đức Hải , Linux Lý thuyết & thực hành,

Một phần của tài liệu Tìm hiểu về hệ điều hành Linux (Trang 65 - 77)