Kiện Toàn Bảo Mật Cho Apache - Phần 1
Bảo mật Apache: từng bước.
Artur Maj
Tài liệu này theo dạng chỉ dẫn từng bước cách cài đặt và chỉnh lý Apache
1.3.x web server với mục đích xử lý và phòng tránh các trường hợp đột nhập
lúc những yếu điểm của chương trình này được khám phá.
Chức năng
Trước khi bắt đầu kiện toàn bảo mật Apache, chúng ta phải xác định rõ chức
năng cần thiết nào của server sẽ được xử dụng. Tính đa năng của Apache tạo
ra những khó khăn để thực hiện một mô thức tổng quát với mục đích kiện
toàn bảo mật cho server trong mọi trường hợp có thể được. Ðây là lý do tài
liệu này dựa trên các chức năng sau:
* Web server có thể truy cập từ Internet; và,
* Chỉ những trang HTML tĩnh (static HTML pages) sẽ được phục vụ,
* Server hỗ trợ tên miền cho cơ chế dịch vụ ảo,
* Các trang web đã ấn định chỉ có thể truy cập từ các cụm IP addresses hoặc
người dùng (khai báo căn bản),
* Server sẽ tường trình trọn bộ các thỉnh cầu (bao gồm những thông tin về
các web browsers).
Ðiều đáng nhấn mạnh ở đây là mô hình trên không hỗ trợ PHP, JSP, CGI
hoặc bất cứ công nghệ nào khác có thể tạo cơ hội tương tác đến các dịch vụ
Web. Ứng dụng cho những công nghệ trên có thể dẫn đến những đe dọa to
lớn cho vấn đề bảo mật, dù chỉ là một đoạn script nhỏ, kín đáo cũng có thể
giảm thiểu mức triệt để bảo mật của server. Tại sao? trước hết, các ứng trình
ASP/CGI có thể chứa những yếu điểm bảo mật (ví dụ SQL injection, cross-
site-scripting). Kế tiếp, chính các kỹ nghệ ấy có thể nguy hiểm (các yếu
điểm trong PHP, các module của Perl v..v..). Ðó là lý do tại sao tôi mạnh mẽ
đề nghị xử dụng những công nghệ ấy chỉ khi nào nhu cầu tương tác với một
web site hoàn toàn cần thiết mà thôi.
Lời bàn và mở rộng:
Việc kiện toàn bảo mật cho một web server liên quan đến nhiều thủ thuật ở
nhiều mức độ khác nhau. Tác giả chuộng nguyên tắc "tối thiểu" để giảm
thiểu những lỗ hổng bảo mật có thể hiện diện trên một web server. Lý thuyết
mà nói, nguyên tắc này đưa đến những ứng dụng và chỉnh định chặt chẽ hơn
cho vấn đề bảo mật. Tuy nhiên, hoạt tính và nhu cầu làm việc của một web
server không thể dừng lại ở khuôn khổ "tối thiểu" và bị áp đặt trong giới hạn
các trang static HTML được. Thiết kế một chương trình làm việc cho web
với yêu cầu đa năng và đa hoạt là một trong những yêu cầu hàng đầu. Một
web site chỉ chuyên chú ở khuôn khổ các trang static HTML không những
giới hạn tính năng của các trang web này một cách đáng kể, mà còn sa lầy
trên mặt thực dụng và giá trị kinh tế lẫn giá thành xây dựng và bảo trì cho
website. Giải pháp tối ưu có lẽ là sự cân bằng giữa kiến thức kiện toàn bảo
mật cho web server cộng với khả năng thiết kế web một cách khoa học và
vững chãi về mặt tính năng, hoạt động lẫn mặt giảm thiểu lỗi thiết kế, lỗi lập
trình.
Một trong những hạn chế hay đúng hơn là lối mòn thường gặp trong các
thiết kế ứng dụng web là việc pha trộn lẫn lộn các phân đoạn làm việc với
nhau. Nói một cách khác, các thiết kế gia và các lập trình viên không đầu tư
đủ thời gian để nghiên cứu, phân tích và áp dụng các mẫu thiết kế hợp lý cho
công trình của mình mà thường đi thẳng vào bước thực hiện. Các bước "đi
thẳng" thường thiếu độ chín chắn trong bước thiết kế, dẫn đến tính năng hạn
hẹp và mở cửa cho các lỗi bảo mật nghiêm trọng. Trên thực tế, sự khác biệt
giữa việc làm cho một web site chạy được và làm cho một web site chạy
được, chạy có hiệu xuất, có khả năng mở rộng và bảo đảm mật tính là
chuyện khác nhau một trời một vực. Thói quen "xào nấu" các lệnh điều tác
cho một hệ điều hành hoặc các lệnh tương tác đến database trực tiếp từ một
trang html trần trụi, nhúng các lệnh điều tác vào php, jsp, asp... là chuyện rất
thường gặp. Ðây là một ví dụ điển hình cho cái gọi là "chạy được nhưng
thiếu hiệu xuất, thiếu khả năng mở rộng và mở cửa cho các lỗi bảo mật quan
trọng".
Vì khuôn khổ bài viết không tiện đi sâu vào các mẫu thiết kế cho những ứng
dụng web, các bạn nên nghiên cứu thêm về những thiết kế này ở một số
URL sau tùy theo công nghệ bạn đang dùng:
http://www.object-arts.com/EducationCentre/Overviews/MVC.htm
http://www.enode.com/x/markup/tutorial/mvc.html
http://www.phppatterns.com/index.php/article/articleview/19/1/1/
http://www.dmbcllc.com/asp_mvc.aspx
http://www.jdance.com/jsparchitecture.shtm
http://www.redbooks.ibm.com/abstracts/sg245755.html
http://www.redbooks.ibm.com/abstracts/sg245754.html
Bạn có thể dùng google để search thêm các tài liệu về MVC với keyword:
"MVC Pattern" hoặc tham khảo một số tài liệu chuyên ngành từ các website
lớn như http://java.sun.comhoặc http://www.ibm.com.
Những trù bị bảo mật
Một trong những nhân tố quan trọng nhất cho mọi công trình điện toán là
việc xác thực các trù bị bảo mật. Ðiều này phải được thoả mãn trước khi
công trình được ứng tạo. Các trù bị bảo mật cho web server của chúng ta
như sau:
* Hệ điều hành phải được kiện toàn càng chặt chẽ càng tốt, bao gồm việc
phòng bị cho những tấn công từ bên ngoài lẫn bên trong,
* Server không được cung cấp bất cứ dịch vụ nào khác ngoại trừ HTTP:
(80/TCP),
*
Truy cập từ xa đến server phải được khiển tác bởi tường lửa, thiết bị này
chặn trọn bộ những tiếp nối cho lối ra và cho phép những tiếp nối cho lối
vào đến cổng 80/TCP của web server mà thôi,
*
Web server Apache là dịch vụ duy nhất hiện hữu trên hệ thống,
*
Chỉ có những modules nào tuyệt đối cần thiết mới được cho phép hoạt động,
*
Các trang web dùng cho công tác chẩn xét và tự động hoá mục lục phải được
tắt bỏ,
*
Srver nên giảm thiểu tối đa vấn đề tiết lộ những thông tin của chính server
(mật tính qua ẩn tính),
*
Apache server phải chạy bằng UID/GID riêng biệt (tín chỉ cá nhân, tín chỉ
nhóm), không được dùng bất cứ process nào khác của hệ thống,
*
Các process của Apache phải có giới hạn nhất định đến hệ thư mục
(chrooting); và,
*
Không có bất cứ chương trình dạng shell nào hiện hữu trong môi trường
chrooted (/bin/sh, /bin/csh, v..v..).
Lời bàn và mở rộng:
Một lần nữa tác giả đẩy mạnh tính "tối thiểu". Tuy nhiên, điểm khác biệt
trong tính "tối thiểu" ở phần này thuộc bình diện môi trường hơn là giảm
thiểu hoạt tính của web server Apache.
Bước kiện toàn bằng cách chỉ cho phép port 80/TCP trên server chạy
Apache là thao tác căn bản cần phải làm vì nếu tấn công, tin tặc chỉ có một
cổng để tấn công và để phòng thủ, người bảo vệ chỉ tập trung đến một cổng.
Hơn thế, với cơ chế kiểm soát của tường lửa như tác giả đề nghị, tính bảo
mật chắc chắn sẽ được nâng cao. Ở đây tác giả không đề cập một cách cụ thể
loại tường lửa nào nên dùng vì quy trình chọn lựa, chỉnh định một tường lửa
cho thích hợp phụ thuộc vào nhiều yếu tố khá phức tạp. Ðể mở rộng chi tiết
này, tôi tin rằng sự hiện diện của một stateful firewall vừa có khả năng kiểm
soát state ở tầng IP vừa có khả năng kiểm soát nội dung ở tầng application là
cách tốt nhất. Nếu điều kiện tài chính cho phép, một stateful firewall như