Tăng cường an ninh cho hệ thống

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

Cùng với sự phát triển không ngừng của truyền thông kỹ thuật số, Internet và sự phát triển nhảy vọt của nền công nghiệp phần mềm, bảo mật máy tính là một vấn đề ngày càng trở nên quan trọng. Cần phải hiểu rằng không có hệ thống máy tính nào là an toàn tuyệt đối. Tất cả những gì chúng ta có thể làm là giúp cho hệ thống máy tính của mình trở nên an toàn hơn.

Kể từ khi Linux được phát triển một cách rộng rãi và nhanh chóng, đặc biệt là trong các giao dịch kinh doanh quan trọng, an ninh là một vấn đề quyết định sự sống còn của Linux. Với hàng trăm công cụ bảo vệ sẵn có, người dùng Linux được trang bị tốt hơn để ngăn chặn và duy trì một hệ thống an toàn. Linux không những hoạt động tốt mà còn có những tính năng và sản phẩm liên quan cho phép xây dựng một môi trường tương đối an toàn.

5.1.1 NHỮNG NGUY CƠ AN NINH TRÊN LINUX.

Theo quan điểm của một số chuyên gia máy tính, Linux có tính an toàn cao hơn các hệ điều hành của Microsoft, vì các sản phẩm của Microsoft không được xem xét kỹ lưỡng và chặt chẽ bằng các sản phẩm mã nguồn mở như Linux. Hơn nữa, Linux dường như là "miễn nhiễm" với virus máy tính (hiện tại đã có xuất

hiện một vài loại virus hoạt động trên môi trường Linux nhưng không ảnh hưởng gì mấy đến người dùng Linux). Nhưng một hệ thống Linux được cấu hình không tốt sẽ tệ hơn nhiều so với một hệ thống của Microsoft được cấu hình tốt !!! Khi có được một chính sách an ninh tốt và hệ thống được cấu hình theo đúng chính sách đó thì sẽ giúp người dùng tạo được một hệ thống an toàn. Nhưng sự an toàn không phải là thứ có thể đạt được như một mục tiêu cuối cùng. Đúng hơn đó là tập hợp của những cách cài đặt, vận hành và bảo trì một hệ điều hành, mạng máy tính, ... Nó phụ thuộc vào các hoạt động hàng ngày của hệ thống, người dùng và người quản trị.

5.1.2 TĂNG CƯỜNG AN NINH CHO KERNEL.

Mặc dù thừa hưởng những đặc tính của hệ thống UNIX và khá an ninh hơn một số hệ điều hành khác, hệ thống GNU/Linux hiện nay vẫn tồn tại những nhược điểm sau:

Quyền của user ‘root’ có thể bị lạm dụng. User ‘root’ có thể dễ dàng thay đổi bất kỳ điều gì trên hệ thống.

Nhiều file hệ thống có thể dễ dàng bị sửa đổi. Nhiều file hệ thống quan trọng như /bin/login có thể bị sửa đổi bởi hacker để cho phép đăng nhập không cần mật khẩu. Nhưng những file loại này lại hiếm khi nào thay đổi trừ khi nâng cấp hệ thống.

Các module có thể được dùng để chặn kernel. “Loadable Kernel Module” là một thiết kế tốt để tăng cường tính uyển chuyển, linh hoạt cho kernel. Nhưng sau khi một module được nạp vào kernel, nó sẽ trở thành một phần của kernel và có thể hoạt động như kernel nguyên thủy. Vì vậy, các chương trình với mục đích xấu có thể được viết dạng module và nạp vào kernel, rồi sau đó hoạt động như một virus.

Các process không được bảo vệ. Các process như web server có thể trở thành mục tiêu bị tấn công của hacker sau khi thâm nhập hệ thống.

Để cải thiện tính an ninh cho các server Linux, chúng ta cần có một kernel an toàn hơn. Điều này có thể thực hiện được bằng cách sửa đổi kernel nguyên thuỷ bằng các ‘patch’ ( miếng vá )tăng cường tính an ninh cho hệ thống. Các patch này có các tính năng chính yếu sau:

Bảo vệ – Bảo vệ các file hệ thống quan trọng khỏi sự thay đổi ngay cả với user root. Bảo vệ các process quan trọng khỏi bị ngừng bởi lệnh ‘kill’. Chặn các tác vụ truy cập IO mức thấp (RAW IO) của các chương trình không được phép. Phát hiện – Phát hiện và cảnh báo với người quản trị khi server bị scan. Cũng như khi có các tác vụ trên hệ thống vi phạm các luật (rules) định trước. Đối phó – Khi phát hiện sự vi phạm trên hệ thống, các ghi nhận chi tiết sẽ được thực hiện cũng như có thể ngừng lập tức phiên làm việc gây ra .

5.1.3 LINUX FIREWALL

An toàn hệ thống luôn luôn là một vấn đề sống còn của mạng máy tính và firewall ( bức tường lửa ) là một thành phần cốt yếu cho việc đảm bảo an ninh. Một firewall là một tập hợp các qui tắc, ứng dụng và chính sách đảm bảo cho người dùng truy cập các dịch vụ mạng trong khi mạng bên trong vẫn an toàn đối với các kẻ tấn công từ Internet hay từ các mạng khác. Có hai loại kiến trúc firewall cơ bản là : Proxy/Application firewall và filtering gateway firewall. Hầu hết các hệ thống firewall hiện đại là loại lai (hybrid) của cả hai loại trên.

Nhiều công ty và nhà cung cấp dịch vụ Internet sử dụng máy chủ Linux như một Internet gateway. Những máy chủ này thường phục vụ như máy chủ mail, web, ftp, hay dialup. Hơn nữa, chúng cũng thường hoạt động như các firewall, thi hành các chính sách kiểm soát giữa Internet và mạng của công ty. Khả năng uyển chuyển khiến cho Linux thu hút như là một thay thế cho những hệ điều hành thương mại.

Tính năng firewall chuẩn được cung cấp sẵn trong kernel của Linux được xây dựng từ hai thành phần : ipchains và IP Masquerading.

Linux IP Firewalling Chains là một cơ chế lọc gói tin IP. Những tính năng của IP Chains cho phép cấu hình máy chủ Linux như một filtering gateway/firewall dễ dàng. Một thành phần quan trọng khác của nó trong kernel là IP Masquerading, một tính năng chuyển đổi địa chỉ mạng (network address translation- NAT) mà có thể che giấu các địa chỉ IP thực của mạng bên trong. Để sử dụng ipchains, người dùng cần thiết lập một tập các luật mà qui định các kết nối được cho phép hay bị cấm. Ví dụ:

# Cho phép các kết nối web tới Web Server :

/sbin/ipchains -A your_chains_rules -s 0.0.0.0/0 www -d 192.16.0.100 1024: -j ACCEPT

# Cho phép các kết nối từ bên trong tới các Web Server bên ngoài /sbin/ipchains -A your_chains_rules -s 192.168.0.0/24 1024: -d 0.0.0.0/0 www -j ACCEPT

# Từ chối truy cập tất cả các dịch vu khác /sbin/ipchains -P your_chains_rules input DENY

Ngoài ra, chúng ta cũng có thể sử dụng các sản phẩm firewall thương mại như Check Point FireWall-1, Phoenix Adaptive Firewall, Gateway Guardian, XSentry Firewall, Raptor, ... hay rất nhiều các phiên bản miễn phí, mã nguồn mở cho Linux như T.Rex Firewall, Dante, SINUS, TIS Firewall Toolkit, ...

5.2 AN TOÀN MẬT KHẨU TRÊN HỆ THỐNG MẠNG LINUX.5.2.1 BẢO VỆ MẬT KHẨU NGAY TẠI HỆ THỐNG. 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

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