2.5.1 Hệ thống tường lửa (Firewall)
Hệ thống FireWall bảo vệ chống lại những sự tấn công từ bên ngoài bao gồm: Tấn công trực tiếp: Cách thứ nhất là dò mật khẩu trực tiếp. Thông qua
các chƣơng trình dò tìm mật khẩu với một số thông tin về ngƣời sử dụng nhƣ ngày sinh, tuổi, địa chỉ…và kết hợp với thƣ viện do ngƣời dùng tạo ra. Trong một số trƣờng hợp khả năng thành công có thể lên tới 30%. Ví dụ nhƣ chƣơng trình dò tìm mật khẩu chạy trên hệ điều hành Unix có tên là Crack. Cách thứ hai là sử dụng lỗi của các chƣơng trình ứng dụng và bản thân hệ điều hành đã đƣợc sử dụng từ những vụ tấn công đầu tiên và vẫn đƣợc để chiếm quyền truy cập (có đƣợc quyền của ngƣời quản trị hệ thống).
Nghe trộm: Có thể biết đƣợc tên, mật khẩu, các thông tin chuyền qua mạng thông qua các chƣơng trình cho phép đƣa vi giao tiếp mạng (NIC) vào chế độ nhận toàn bộ các thông tin lƣu truyền qua mạng.
Giả mạo địa chỉ IP.
Vô hiệu hóa các chức năng của hệ thống (deny service). Đây là kiểu tấn công nhằm làm tê liệt toàn bộ hệ thống không cho phép nó thực hiện các chức năng mà nó đƣợc thiết kế.
Lỗi ngƣời quản trị hệ thống.
Yếu tố con ngƣời với tính cách chủ quan và không hiểu rõ tầm quan trọng của việc bảo mật hệ thống nên dễ dàng để lộ các thông tin quan trọng cho tin tặc.
Ngày nay, trình độ của những kể tin tặc ngày càng giỏi hơn, các kiểu tấn công ngày càng tinh vi hơn, trong khi đó các hệ thống mạng còn chậm chạp trong việc xử lý các lỗ hổng của mình. Điều này đòi hỏi không chỉ những ngƣời quản trị hệ thống mạng phải có kiến thức tốt về bảo mật mạng để giữ vững an toàn cho thông tin của hệ thống mà đối với ngƣời dùng cá nhân cũng nên hiểu rõ tầm quan trọng của bảo mật thông tin qua đó tìm hiểu một số cách phòng tránh những sự tấn công từ phía tin tặc.
Thấy đƣợc tầm quan trọng của hệ thống FireWall trong việc đảm bảo an toàn cho hệ thống, các hệ thống nguồn mở cũng phát triển nhiều phần mềm FireWall. Chẳng hạn nhƣ với hệ thống Linux một số phần mềm FireWall có thể kể ra là Iptables, Ipchains, ShoreWall…Tuy nhiên phổ biến và sử dụng rộng rãi hơn cả là Iptables. Vì vậy, những ngƣời quản trị hệ thống cần nắm đƣợc cách cài đặt, cấu hình phần mềm FireWall để triển khai các biện pháp bảo đảm an toàn cho hệ thống.
Nhƣ đã giới thiệu trong phần trƣớc hệ thống firewall là một trong những thành phần quan trọng đảm bảo an toàn cho hệ thống. Trong các hệ thống nguồn mở nhƣ Linux một trong những firewall thông dụng nhất đó là iptables. Iptables là một tƣờng lửa ứng dụng lọc gói dữ liệu rất mạnh, miễn phí và cài đặt sẵn trên hệ thống Linux. Netfilter/Iptables gồm hai phần là Netfilter ở trong nhân Linux và Iptables nằm ngoài nhân. Iptables chịu trách nhiệm giao tiếp giữa ngƣời dùng và Netfilter để đẩy các luật của ngƣời dùng vào cho Netfilter xử lý. Netfilter tiến hành lọc các gói dữ liệu ở mức IP. Netfilter làm việc trực tiếp với nhân, nhanh và không làm giảm tốc độ của hệ thống. Thông tin chi tiết về Iptables tham khảo tại: http://www.netfilter.org
Một số tính năng của Iptables đó là:
Tích hợp tốt với nhân Linux, để cải thiện sự tin cậy và tốc độ chạy của Iptables. Quan sát kỹ tất cả các gói dữ liệu. Điều này cho phép firewall theo dõi một kết
đó tiên liệu hành động kế tiếp của các giao thức. Điều này quan trọng trong việc hỗ trợ các giao thức FTP, DNS...
Lọc gói dữ liệu trên địa chỉ MAC và các cờ trong TCP header. Điều này giúp ngăn chặn việc tấn công bằng cách sử dụng các gói dị dạng (malformed packets) và ngăn chặn việc truy cập từ nội bộ đến một mạng khác bất chấp IP của nó.
Ghi chép hệ thống (System logging) cho phép việc điều chỉnh mức độ của báo cáo.
Hỗ trợ việc tích hợp các chƣơng trình Web proxy chẳng hạn nhƣ Squid. Ngăn chặn các kiểu tấn công từ chối dịch vụ.
Iptables là một tƣờng lửa đƣợc tích hợp sẵn trong các phiên bản của hệ điều hành mã nguồn mở Linux Ubuntu. Khi cài đặt Linux Ubuntu, Iptables đã có sẵn, tuy nhiên hệ thống mặc định cho phép tất cả các giao tiếp vào ra. Chi tiết về cấu trúc, quá trình xử lý gói tin và cấu hình firewall iptables sẽ đƣợc trình bày trong chƣơng 3.
Ngoài firewall iptables đã giới thiệu sơ lƣợc ở trên, chúng ta cũng có thể sử dụng một hệ thống firewall khác nhƣ shorewall, chi tiết về shorewall tham khảo tại http://shorewall.net.
2.5.2 Một số chương trình dò tìm phát hiện xâm nhập qua mạng Các chương trình dò tìm để khảo sát hệ thống:
Thâm nhập vào một hệ thống bất kỳ nào cũng cần phải có sự chuẩn bị. Tin tặc phải xác định ra máy đích và tìm xem những cổng (port) nào đang mở trƣớc khi hệ thống có thể bị xâm phạm. Quá trình này thƣờng đƣợc thực hiện bởi các công cụ dò tìm (Scanning tools), kỹ thuật chính để tìm ra máy đích và các cổng đang mở trên đó. Dò tìm là bƣớc đầu tiên tin tặc sẽ sử dụng trƣớc khi thực hiện tấn công. Bằng cách sử dụng công cụ dò tìm nhƣ Nmap, tin tặc có thể dò khắp các mạng để tìm ra máy đích có thể bị tấn công. Một khi xác định đƣợc các máy này, kẻ xâm nhập có thể dò tìm các cổng đang lắng nghe. Nmap cũng sử dụng một số kỹ thuật cho phép xác định khá chính xác các loại máy đang kiểm tra. Bằng cách sử dụng các công cụ của chính tin tặc thƣờng dùng, ngƣời quản trị hệ thống có thể nhìn vào hệ thống của mình từ góc độ của các tin tặc và giúp tăng cƣờng tính an toàn của hệ thống. Có rất nhiều công cụ dò tìm có thể sử dụng nhƣ: Nmap, strobe, sscan, SATAN…Tuy nhiên, sử dụng các công cụ này không thể thay thế cho một ngƣời quản trị có kiến thức. Bởi vì việc dò tìm thƣờng dự báo một cuộc tấn công, các site nên ƣu tiên cho việc theo dõi chúng. Với các công cụ dò tìm, các nhà quản trị hệ thống mạng có thể phát hiện ra những gì mà các tin tặc có thể thấy khi dò trên hệ thống.
Các chương trình phát hiện sự xâm nhập qua mạng:
Nếu hệ thống có kết nối vào Internet, hệ thống của chúng ta có thể trở thành một mục tiêu bị dò tìm các lỗ hổng về bảo mật. Hệ thống phát hiện xâm nhập qua mạng (Network Intrusion Dectection System - NIDS) theo dõi các thông tin truyền trên mạng và phát hiện nếu có tin tặc đang cố xâm nhập vào hệ thống. Một ví dụ điển hình là hệ thống theo dõi số lƣợng lớn các yêu cầu kết nối TCP đến nhiều cổng trên một máy nào đó, do vậy có thể phát hiện ra nếu có ai đó đang thử một tác vụ dò tìm TCP port. Một NIDS có thể chạy trên máy cần theo dõi hoặc trên một máy độc lập theo dõi toàn bộ thông tin trên mạng. Các công cụ có thể đƣợc kết hợp để tạo một hệ thống phát hiện xâm nhập qua mạng. Chẳng hạn dùng tcpwrapper để điều khiển, ghi nhận các dịch vụ đã đƣợc đăng ký. Các chƣơng trình phân tích nhật ký hệ thống, nhƣ swatch, có thể dùng để xác định các tác vụ dò tìm trên hệ thống. Và điều quan trọng nhất là các công cụ có thể phân tích các thông tin trên mạng để phát hiện các tấn công DoS hoặc đánh cắp thông tin nhƣ tcpdump, ethereal, ngrep, NFR (Network Flight Recorder), PortSentry, Sentinel, Snort,…
Các chương trình kiểm tra khả năng bị xâm nhập:
Kiểm tra khả năng bị xâm nhập liên quan đến xác định và sắp xếp các lỗ hổng an ninh trong hệ thống bằng cách dùng một số công cụ kiểm tra. Nhiều công cụ kiểm tra cũng có khả năng khai thác một số lỗ hổng tìm thấy để làm rõ quá trình thâm nhập trái phép sẽ đƣợc thực hiện nhƣ thế nào. Ví dụ, một lỗi tràn dịch vụ của chƣơng trình phục vụ dịch vụ FTP có thể dẫn đến việc thâm nhập vào hệ thống với quyền “root”. Nếu ngƣời quản trị mạng có kiến thức về kiểm tra khả năng bị xâm nhập trƣớc khi nó xảy ra, họ có thể tiến hành các tác vụ để nâng cao mức độ an ninh của hệ thống mạng. Có rất nhiều các công cụ mạng có thể sử dụng trong việc kiểm tra khả năng bị xâm nhập. Hầu hết các quá trình kiểm tra đều dùng ít nhất một công cụ tự động phân tích các lỗ hổng an ninh. Các công cụ này thăm dò hệ thống để xác định các dịch vụ hiện có. Thông tin lấy từ các dịch vụ này sẽ đƣợc so sánh với cơ sở dữ liệu các lỗ hổng an ninh đã đƣợc tìm thấy trƣớc đó. Các công cụ thƣờng đƣợc sử dụng để thực hiện các kiểm tra loại này là ISS Scanner, Cybercop, Retina, Nessus, cgiscan, CIS,…
Kết chƣơng
Chƣơng này trình bày một số nội dung quan trọng trong việc đảm bảo an toàn thông tin trên hệ điều hành nguồn mở. Đầu tiên, trình bày các nguy cơ ảnh hƣởng đến việc đảm bảo an toàn, bảo mật thông tin cho hệ điều hành nguồn mở. Qua đó thấy đƣợc một số hiểm hoạ có thể dẫn đến mất an toàn thông tin từ đó trình bày một số giải pháp đảm bảo an toàn nhƣ: Giải pháp đảm bảo an toàn nhân bằng cách sử dụng SELinux, hệ thống phát hiện xâm nhập (LIDS), Libsafe. Giải pháp đảm bảo an toàn file. Các giải pháp bảo vệ tài khoản ngƣời dùng, Giải pháp đảm bảo an toàn cho các giao dịch qua mạng nhƣ sử dụng hệ thống tƣờng lửa, sử dụng các chƣơng trình dò tìm phát hiện xâm nhập qua mạng…
CHƢƠNG III: TRIỂN KHAI GIẢI PHÁP ĐẢM BẢO AN TOÀN THÔNG TIN TRÊN HỆ ĐIỀU HÀNH MÃ NGUỒN MỞ
3.1 Triển khai giải pháp SELinux
Nhƣ đã trình bày trong chƣơng 2, SELinux là một bản vá cho nhân Linux nhằm tăng cƣờng tính năng bảo mật của Linux. Trong Linux chuẩn, các thuộc tính quản lý truy cập của một chủ thể chính là user và group ID kết hợp với tất cả tiến trình thông qua cấu trúc tiến trình trong hệ thống. Các thuộc tính này đƣợc bảo vệ bởi hệ thống và chỉ đƣợc thay đổi thông qua các công cụ quản trị nhƣ tiến trình login và chƣơng trình setuid. Đối với các đối tƣợng nhƣ file, inode (index node là một khái niệm để lƣu thông tin cơ bản nhƣ file type, permission, Owner,...của đối tƣợng) chứa một tập các bit về chế độ truy cập, ID của group và file user. Ngƣời dùng tập kết hợp của 3 bit read/write/excute để quản lý quyền truy cập.
Trong SELinux, các đối tƣợng quản lý truy cập luôn gồm ba phần (user,role, type). Tất cả các đối tƣợng và chủ thể trong hệ điều hành đều có một ngữ cảnh truy cập kết hợp giữa 3 thành phần này. Trong khi bản Linux chuẩn dùng ID của tiến trình dành cho từng User, group; chế độ truy cập của file và các ID cho file để cấp quyền truy cập tài nguyên hay không, bản SELinux dùng các ngữ cảnh bảo mật của một tiến trình và các đối tƣợng để cấp quyền truy cập.
Để cài đặt SELinux có thể thực hiện thông qua lệnh: sudo apt-get install selinux
Sau khi cài đặt xong hệ thống yêu cầu cần khởi động lại, chúng ta có thể sử dụng lệnh nhƣ hình minh họa dƣới đây để kiểm tra các thông tin của SELinux đƣợc cài đặt trên máy.
Hình 3.1: Xem trạng thái hiện tại của SELinux
SELinux có ba trạng thái là:
- enforcing: Trạng thái mặc định, nếu SELinux ở trạng thái này các chính sách an ninh đã thiết lập sẽ đƣợc thực thi. Sẽ không có ngƣời dùng hoặc chƣơng trình nào có thể làm bất cứ điều gì mà các thiết lập bảo mật không cho phép.
- premissive: Với trạng thái này SELinux sẽ gửi tin nhắn cảnh báo trong trƣờng hợp có vi phạm các chính sách bảo mật tuy nhiên hệ thống sẽ không thi hành các chính sách bảo mật đã đƣợc thiết lập.
- disabled: Tắt SELinux. Tất cả các chính sách bảo mật của SELinux sẽ đều bị vô hiệu hóa.
Để thay đổi các trạng thái của SELinux sử dụng lệnh setenforce. Để biết đƣợc trạng thái của SELinux hiện tại sử dụng lệnh getenforce. Dƣới đây minh họa việc thiết lập trạng thái khác nhau:
- Để thiết lập trạng thái SELinux về permissive: setenforce 0
- Để thiết lập trạng thái SELinux về enforcing: setenforce 1
Ngoài việc sử dụng lệnh setenforce để thay đổi trạng thái của SELinux chúng ta cũng có thể thực hiện bằng cách thiết lập trong tập tin cấu hình của SELinux: /etc/selinux/config nhƣ minh họa dƣới đây:
Hình 3.2: Nội dung tập tin cấu hình SELinux
Có thể sử dụng thêm tùy chọn -Z để xem các thiết lập SELinux trong các file và tiến trình nhƣ:
- ls -Z: Hiển thị thiết lập bảo mật của các đối tƣợng file hệ thống. - ps -Z: Hiển thị thiết lập bảo mật của các tiến trình trong hệ thống. - id -Z: Hiển thị thiết lập bảo mật của ngƣời dùng hiện thời.
Việc kiểm soát truy cập tài nguyên trên các hệ điều hành đƣợc dựa vào một loại thuộc tính quản lý truy cập kết hợp với các đối tƣợng (file, socket, network host) và chủ thể (application, process). Tất cả các đối tƣợng và chủ thể này đều có một ngữ cảnh bảo mật (security context) riêng kết hợp cùng. Một ngữ cảnh bảo mật có 4 thành
phần chính: Ngƣời dùng (user), vai trò (role), mã loại (type) và mức (level). Các thành phần này đƣợc ngăn cách bởi dấu “:” nhƣ minh họa dƣới đây:
Hình 3.3: Các thành phần của một security context
Để thiết lập lại ngữ cảnh bảo mật sử dụng lệnh chcon với một số tham số tùy chọn cơ bản nhƣ: -u (thay đổi user của ngữ cảnh bảo mật), -t (thay đổi type), -r (thay đổi role), --reference (tham chiếu ngữ cảnh bảo mật của một tập tin hoặc tiến trình khác). Ví dụ dƣới đây trình bày việc sử dụng chcon để thay đổi user từ unconfined_u sang system_u.
Hình 3.4: Sử dụng chcon để thay đổi security context
Ngoài việc sử dụng chcon để thiết lập lại ngữ cảnh bảo mật cho tập tin hoặc tiến trình, có thể sử dụng getsebool -a để xem danh sách tất cả các tiến trình và trạng thái bật (on), tắt (off) của selinux với chúng nhƣ minh họa dƣới đây:
Hình 3.5: Sử dụng getsebool để xem trạng thái của thiết lập của selinux
Để thay đổi lại trạng thái sử dụng lệnh setsebool. dƣới đây minh họa việc thay đổi thiết lập selinux của use_samba_home_dirs từ of sang on:
Hình 3.6: Sử dụng setsebool thiết lập lại trạng thái của selinux
3.2 Triển khai giải pháp đảm bảo an toàn file
Các vấn đề trong việc đảm bảo an toàn file đã đƣợc trình bày cụ thể trong chƣơng 2, Trong phần này sẽ tiến hành cụ thể việc thiết lập các quyền truy cập file nhƣ
thế nào. Đồng thời cũng trình việc thêm, bớt hoặc gán các quyên truy cập đối tƣợng cho từng ngƣời dùng cũng nhƣ thay đổi lệnh thay đổi ngƣời dùng, nhóm ngƣời dùng sử dụng đối tƣợng. Phần này cũng trình bày việc sử dụng lệnh md5sum và sha1sum để kiểm tra tính toàn vẹn của file.
3.2.1 Thiết lập các quyền truy cập file
Nhƣ đã trình bày trong chƣơng 2, một trong những điểm mạnh của hệ thống Linux là khả năng phân quyền hạn truy nhập (Permission) cho mọi đối tƣợng bao gồm cả file, thƣ mục, hay các liên kết (link). Khả năng này đóng vai trò quan trọng trong việc cung cấp mức an ninh cao và tính ổn định cho hệ điều hành Linux.
Mỗi một đối tƣợng đƣợc gắn với 3 loại quyền là read (đọc), write (sửa chữa) và execute (thực thi). Mỗi quyền này đƣợc chỉ định cho 3 loại ngƣời dùng đó là : user (chủ sở hữu của đối tƣợng - mặc định ban đầu là ngƣời dùng tạo ra đối tƣợng đó), group (một nhóm các ngƣời dùng có các quyền hạn giống nhau đối với đối tƣợng - mặc định ban đầu là group mà user ở trên thuộc về), other (tất cả các ngƣời dùng