Hacking Security Sites part 16

Chia sẻ: Dqwdasdasd Qwdasdasdasd | Ngày: | Loại File: PDF | Số trang:6

0
58
lượt xem
22
download

Hacking Security Sites part 16

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Cần thiết để ứng hiệu báo cáo những yêu cầu thực hiện đến server. mod_mime: Cần thiết để chỉnh lý nhóm chữ cái, mã hoá nội dung, tùy tác, ngôn ngữ nội dung và các loại MIME đại diện cho các loại tài liệu. Hacking Security Sites part 16

Chủ đề:
Lưu

Nội dung Text: Hacking Security Sites part 16

  1. mod_log_config: Cần thiết để ứng hiệu báo cáo những yêu cầu thực hiện đến server. mod_mime: Cần thiết để chỉnh lý nhóm chữ cái, mã hoá nội dung, tùy tác, ngôn ngữ nội dung và các loại MIME đại diện cho các loại tài liệu. Tất cả các modules khác của Apache phải được tắt bỏ. Chúng ta có thể tắt bỏ chúng một cách an toàn bởi vì chúng ta không cần đến chúng. Do tắt bỏ những modules không cần thiết, chúng ta tránh được trường hợp có thể bị đột phá khi những yếu điểm bảo mật vừa được khám phá thuộc về một trong những modules này. Cũng nên nhắc đến là có hai modules của Apache có thể nguy hiểm hơn các modules khác là: mod_autoindex và mod_info. Module thứ nhất cung cấp chức năng tự động sắp xếp thư mục và module này được phép chạy theo mặc định. Có thể dễ dàng dùng nó để xác định xem Apache được dùng trên một server nào đó hay không (ví dụ: http://server_name/icons/) và để lấy nội dung của các thư mục trên Web server dẫu không có các mục lục trong những thư mục này. Module thứ nhì, mod_info không nên cho phép truy cập từ Internet chính vì lý do nó tiết lộ cấu hình của Apache. Câu hỏi kế tiếp là làm sao biên dịch các modules. Phương pháp tĩnh được xem là lựa chọn tốt hơn hết. Nếu những yếu điểm của Apache vừa được khám phá, có lẽ chúng ta sẽ không những tái biên dịch các modules bị lỗi mà sẽ tái biên dịch trọn bộ software. Chọn phương pháp tĩnh, chúng ta triệt tiêu nhu cầu của thêm một module nữa - mod_so. Lời bàn và mở rộng: Chọn lựa các modules cho Apache server thích hợp với từng nhu cầu là một việc khó khăn và mất thời gian. Chọn lựa đúng module và bảo đảm tính bảo mật lại càng khó khăn hơn. Ðể xác định module nào cần thiết và bảo đảm, việc chọn lựa và theo dõi "bug track" cho từng module là một điều rất cần thiết. Hiện nay có trên 200 modules lớn nhỏ, đủ loại chức năng cho Apache server. Bạn nên tham khảo thông tin ở website này cho công tác lựa chọn: http://modules.apache.org/ Website trên có sẵn search engine giúp bạn trong việc khảo sát và lựa chọn modules. Biên dịch software Trước tiên - nếu có bất cứ miếng vá (patch) nào cho bảo mật thì phải thực hiện ngay. Sau đó, server được biên dịch và cài đặt như sau: Code: ./configure --prefix=/usr/local/apache --disable-module=all --server-uid=apache --server- gid=apache --enable-module=access --enable-module=log_config --enable-module=dir -- enable-module=mime --enable-module=auth (lệnh trên trải dài trong 1 dòng, không tách rời ra thành nhiều dòng)
  2. make su umask 022 make install chown -R root:sys /usr/local/apache Lời bàn và mở rộng: Ðối với các bạn chưa làm quen hoặc chỉ mới bắt đầu làm quen đến *nix, khái niệm biên dịch software có lẽ khá mới mẻ và lạ lẫm. Tuy nhiên, cảm giác này chỉ ở bước đầu trong quá trình làm quen mà thôi. Hầu như các bước trong phân đoạn "biên dịch software" cho các software khác nhau đều tương tự như nhau. Ðiều lý thú trong vấn đề "biên dịch software" trên phương diện bảo mật ở đây, ngoài cơ hội có thể xem mã nguồn, tìm lỗi, tìm lổ hổng từ mã nguồn, bạn còn có cơ hội thiết lập và biên dịch software mình cần theo ý muốn. Trong đoạn lệnh ./configure ở trên minh hoạ cụ thể tính "tự do" ở chỗ bạn có toàn quyền muốn thêm hoặc bớt module tùy thích. Tính linh động trong vấn đề biên dịch software và tính đóng kín khi dùng một "installshield" trở nên hiển nhiên khi đem ra so sánh. Khi bạn phải cài một software gồm các binaries đã được biên dịch (theo khuôn khổ nào đó) sẵn, bạn không có nhiều cơ hội quyết định hoặc chọn lựa theo ý muốn nữa. Ðây là một trong những nguyên tắc khá quan trọng cho những ai quan tâm hoặc làm việc trực tiếp đến vấn đề bảo mật. Ðổi "root" của server Bước kế tiếp giới hạn các process của Apache truy dụng vào các hệ thống hồ sơ. Chúng ta có thể thực hiện vấn đề này bằng cách "chrooting" phần daemon chính của server (httpd). Tổng thể mà nói, thủ thuật "chrooting" có nghĩa là tạo một cấu trúc nguồn thư mục mới, dời chuyển các hồ sơ daemon vào đó và chạy các daemon thích ứng trong môi trường mới này. Nhờ vào đó, daemon (và cái process con) chỉ sẽ truy dụng đến cấu trúc thư mục mới. Chúng ta bắt đầu chu trình này bằng cách tạo ra một thư mục mới bên trong thư mục /chroot/httpd: mkdir -p /chroot/httpd/dev mkdir -p /chroot/httpd/etc mkdir -p /chroot/httpd/var/run mkdir -p /chroot/httpd/usr/lib mkdir -p /chroot/httpd/usr/libexec mkdir -p /chroot/httpd/usr/local/apache/bin mkdir -p /chroot/httpd/usr/local/apache/logs mkdir -p /chroot/httpd/usr/local/apache/conf mkdir -p /chroot/httpd/www
  3. Chủ nhân của các thư mục trên phải là root và quyền truy dụng nên chỉnh lý ở mức 0755. Kế tiếp, chúng ta tạo hồ sơ thiết bị đặc biệt /dev/null: ls -al /dev/null (crw-rw-rw- 1 root wheel 2, 2 Mar 14 12:53 /dev/null) mknod /chroot/httpd/dev/null c 2 2 chown root:sys /chroot/httpd/dev/null chmod 666 /chroot/httpd/dev/null Một phương pháp khác cần dùng để tạo thiết bị /chroot/httpd/dev/log, thiết bị này cần thiết để server làm việc đúng mức. Trong trường hợp hệ thống FreeBSD, cần thêm dòng sau đây vào /etc/rc.conf: syslogd_flags="-l /chroot/httpd/dev/log" Chúng ta phải tái khởi động hệ thống hoặc chính syslogd daemon để ứng tác các thay đổi. Ðể tạo thiết bị /chroot/httpd/dev/log trên các hệ điều hành khác, chúng ta phải xem các phần chỉ dẫn thích đáng (man syslogd). Bước kế tiếp là bước sao chép chương trình httpd chính vào cấu trúc cây mới tạo ở trên, bao gồm các hồ sơ nhị phân và các thư viện cần thiết. Ðể thực hiện bước này, chúng ta phải chuẩn bị danh sách của các hồ sơ cần thiết. Chúng ta có thể tạo nên danh sách ấy bằng cách sử dụng lệnh như sau (tùy theo mỗi hệ điều hành mà các hồ sơ này hiện diện hay không): Lệnh Code: ldd (All): Lists dynamic dependencies of executable files or shared libraries ktrace/ktruss/kdump (*BSD): Enables kernel process tracing, Displays kernel trace data sotruss (Solaris): Traces shared library procedure calls strace/ltrace (Linux): Traces system calls and signals strings (All): Finds the printable strings in binary files trace (AIX): Records selected system events trace (freeware) (HP-UX 11): Traces the system calls a process invokes in HP-UX 11 Ví dụ dùng các lệnh ldd, strings và truss như sau: localhost# ldd /usr/local/apache/bin/httpd
  4. /usr/local/apache/bin/httpd: libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x280bd000) libc.so.4 => /usr/lib/libc.so.4 (0x280d6000) localhost# strings /usr/local/apache/bin/httpd | grep lib /usr/libexec/ld-elf.so.1 libcrypt.so.2 libc.so.4 localhost# truss /usr/local/apache/bin/httpd | grep open (...) open("/var/run/ld-elf.so.hints",0,00) = 3 (0x3) open("/usr/lib/libcrypt.so.2",0,027757775370) = 3 (0x3) open("/usr/lib/libc.so.4",0,027757775370) = 3 (0x3) open("/etc/spwd.db",0,00) = 3 (0x3) open("/etc/group",0,0666) = 3 (0x3) open("/usr/local/apache/conf/httpd.conf",0,0666) = 3 (0x3) (...) Các lệnh trên nên được áp dụng không cho chương trình httpd mà còn cho trọn bộ các thư viện và các nhị phân cần thiết (các thư viện thường đòi hỏi các thư viện khác). Ðối với trường hợp hệ thống FreeBSD, các hồ sau cần được sao chép vào cấu trúc thư mục mới: cp /usr/local/apache/bin/httpd /chroot/httpd/usr/local/apache/bin/ cp /var/run/ld-elf.so.hints /chroot/httpd/var/run/ cp /usr/lib/libcrypt.so.2 /chroot/httpd/usr/lib/ cp /usr/lib/libc.so.4 /chroot/httpd/usr/lib/ cp /usr/libexec/ld-elf.so.1 /chroot/httpd/usr/libexec/ Bằng cách sử dụng lệnh truss, chúng ta cũng có thể khám phá được các hồ sơ chỉnh dụng sau cần được hiện diện trong môi trường chrooted: cp /etc/hosts /chroot/httpd/etc/ cp /etc/host.conf /chroot/httpd/etc/ cp /etc/resolv.conf /chroot/httpd/etc/ cp /etc/group /chroot/httpd/etc/
  5. cp /etc/master.passwd /chroot/httpd/etc/passwords cp /usr/local/apache/conf/mime.types /chroot/httpd/usr/local/apache/conf/ Nên nhớ rằng từ hồ sơ /chroot/httpd/etc/passwords, chúng ta phải tháo bỏ hết các dòng ngoại trừ "nobody" và "apache". Tương tự, chúng ta cũng phải tháo bỏ hết các dòng ngoại trừ "nobody" và "apache" trong /chroot/httpd/etc/group. Kế tiếp chúng ta phải dựng database cho mật mã như sau: cd /chroot/httpd/etc pwd_mkdb -d /chroot/httpd/etc passwords rm -rf /chroot/httpd/etc/master.passwd Bước kế tiếp dùng để thử nghiệm httpd server xem nó chạy đúng mức trong môi trường chroot mới. Ðể thao tác vấn đề này, chúng ta phải sao chép hồ sơ chỉnh dụng mặc định của Apache và bản mẫu index.html: cp /usr/local/apache/conf/httpd.conf /chroot/httpd/usr/local/apache/conf/ cp /usr/local/apache/htdocs/index.html.en /chroot/httpd/www/index.html Sau khi sao chép các hồ sơ đề cập trên, chúng ta phải thay đổi chỉ phối DocumentRoot như được trình bày bên dưới (trong /chroot/httpd/usr/local/apache/conf/httpd.conf): DocumentRoot "/www" Tiếp theo chúng ta có thể thử chạy server: chroot /chroot/httpd /usr/local/apache/bin/httpd Nếu có trở ngại gì, tôi đề nghị phương thức phân tích log của Apache một cách sâu sát (/chroot/httpd/usr/local/apache/logs). Một cách khác là dùng lệnh sau: truss chroot /chroot/httpd /usr/local/apache/bin/httpd Chương trình truss chắc chắn sẽ chỉ ra nguyên nhân của các trở ngại. Sau khi triệt tiêu những lỗi còn lại, chúng ta có thể thiết lập Apache server. Lời bàn và mở rộng:
  6. Trên tinh thần bảo mật, đoạn trên là một trong những đoạn có thể cho là quan trọng nhất trong quá trình thiết lập một Apache web server. Câu hỏi được đặt ra: "tại sao chroot lại quan trọng đến thế?" Ðối với những ai đã quen thuộc với cấu trúc filesystem trên một *nix nào đó, thì trả lời cho câu hỏi này khá dễ dàng. Tuy nhiên, đối với những ai chưa nắm rõ cấu trúc này thì hơi khó hơn một tí. Từ câu nói ở trên "Tổng thể mà nói, thủ thuật "chrooting" có nghĩa là tạo một cấu trúc nguồn thư mục mới, dời chuyển các hồ sơ daemon vào đó và chạy các daemon thích ứng trong môi trường mới này. Nhờ vào đó, daemon (và cái process con) chỉ sẽ truy dụng đến cấu trúc thư mục mới." có thể diễn giải như sau:  
Đồng bộ tài khoản