Professional Documents
Culture Documents
Nhiều khi phải thực thi các đoạn mã lạ/không rõ nguồn gốc/không tin cậy:
• Chương trình tải từ site không tin cậy trên Internet:
• toolbars, viewers, media player codec…
• Các ứng dụng cũ, không an toàn: ghostview,..
• Các dịch vụ: sendmail, bind
• ..
Vấn đề: xử lý thế nào khi ứng dụng thực thi sai (misbehaves)
Hủy tiến trình
Tiếp cận: hạn chế phạm vi/giam hãm
Giam hãm: đảm bảo ứng dụng không thể thực thi lệch ra khỏi cách thức đã được quy định
trước
Có thể cài đặt ở các tầng khác nhau:
• Thiết bị: thực thi ứng dụng trên phần cứng tách biệt (vd air gap)
• => khó quản lý
• Máy ảo: tách riêng nhiều HĐH trên 1 nền tảng phần cứng
• Chặn giữa các lời gọi dịch vụ hệ thống/HĐH:
• Tách biệt các tiến trình trên cùng 1 HĐH
• Phân tách riêng các thread chia sẻ cùng không gian địa chỉ:
• Cơ chế Software Fault Isolation (SFI)
• Đặc thù theo ứng dụng: vd sandbox trong trình duyệt web
Cài đặt việc giam hãm - jail
Thành phần quan trọng: reference monitor – quản trị tham chiếu
• Làm trung gian yêu xử lý cầu từ ứng dụng
• Cài đặt chính sách bảo vệ
• Bắt buộc việc tách biệt và giam hãm
• Phải luôn được gọi đến:
• Bất kỳ lời gọi/yêu cầu nào của ứng dụng đều phải được thực thi qua trung gian
• Đảm bảo kiểm soát:
• Tiến trình Reference monitor không thể bị hủy
• Nếu bị hủy => các tiến trình bị theo dõi cũng phải hủy
• Đủ nhỏ để đánh giá
Ví dụ: với lệnh chroot
Từ đây, "/tmp/guest" được thêm vào khi truy cập file system bởi các
ứng dụng được đặt trong phạm vi giam hãm (jail), vd
open("/etc/passwd", "r") open("/tmp/guest/etc/passwd", "r")
=> Ứng dụng không thể truy cập các file bên ngoài phạm vi giam hãm
Jailkit project
• jailkit project: auto builds files, libs, and dirs needed in jail
environment
• jk_init: creates jail environment
• jk_check: checks jail env for security problems
• checks for any modified programs,
• checks for world writable directories, etc.
• jk_lsh: restricted shell to be used inside jail
Problem: all utility progs (ls, ps, vi) must live inside jail
Escaping from jails
Early escapes: relative paths
open( “../../etc/passwd”, “r”)
open(“/tmp/guest/../../etc/passwd”, “r”)
Reboot system
To run:
jail jail-path hostname IP-addr cmd
• calls hardened chroot (no “../../” escape)
• can only bind to sockets with specified IP address
and authorized ports
• can only communicate with process inside jail
• root is limited, e.g. cannot load kernel modules
Problems with chroot and jail
Coarse policies:
• All or nothing access to file system
• Inappropriate for apps like web browser
• Needs read access to files outside jail
(e.g. for sending attachments in gmail)
Nhận xét: để phá hỏng hệ thống (vd ghi virus vào file), các ứng dụng cần thực thi các lời
gọi hệ thống, vd
• Để delete/overwrite files: cần gọi hàm như open, write
• Để tấn công mạng: cần gọi hàm socket, bind, connect, send
Ý tưởng
• Theo dõi các lời gọi hệ thống và chặn/cấm các lời gọi không được phép
Ví dụ cài đặt:
• Chạy ở chế độ kernel: GSWTK
• Chạy ở chế độ user: program shepherding
• Chế độ lai: Systrace
Vd: Janus
user space
monitored
application monitor
(outlook)
open(“etc/passwd”,
Hủy tiến trình ứng dụng nếu cố thực hiện yêu“r”)
cầu không được phép
OS Kernel
Biến đổi
Nếu ứng dụng phân chia => công cụ monitor cũng phân chia
• Tiến trình monitor phân tách sẽ theo dõi ứng dụng phân tách
Nếu ứng dụng monitor gapwj sự cố => ứng dụng phải bị hủy
Công cụ Monitor thường theo dõi tất cả trạng thái HĐH gắn với ứng dụng, vd
• Current working dir, UID, GID
• Khi thay đổi, vd “cd path” => monitor cũng cập nhật thông tin
Problems with ptrace (process trace)
Ptrace too coarse for this application
• Trace all system calls or none
• e.g. no need to trace “close” system call
• Monitor cannot abort sys-call without killing app
OS executes open(“me”)
• Classic TOCTOU bug: time-of-check / time-of-use not atomic
Alternate design: systrace
user space
monitored
application monitor policy file
(outlook) for app
open(“etc/passwd”, “r”)
sys-call
systrace
gateway
permit/deny
OS Kernel
systrace only forwards monitored sys-calls to monitor (saves context
switches)
systrace resolves sym-links and replaces sys-call
path arguments by full path to target
When app calls execve, monitor loads new policy file
Policy
Sample policy file:
path allow /tmp/*
path deny /etc/passwd
network deny all
Browser Quake
NPAPI
HTML
JavaScript
NaCl runtime
VM2 VM1
Apps Apps
Guest OS 2 Guest OS 1
Virtual Machine Monitor (VMM)
Host OS
Hardware
Giả thiết
• Mã độc hại (malware) có thể ảnh hưởng đến guest OS và guest apps (HĐH khách và ứng dụng khách -
trên máy ảo)
• Mã độc không thể vượt ra khỏi phạm vi máy ảo bị ảnh hưởng:
• không thể ảnh hưởng đến host OS (HĐH chủ)
• không thể ảnh hưởng đến các máy ảo khác trên cùng phần cứng
Trao đổi ngầm (covert channel): kênh trao đổi giữa các cấu thành đã được phân tách riêng
• Có thể được dùng để làm rò rỉ thông tin mật từ cấu thành bảo mật sang cấu thành công khai
Classified VM Public VM
secret
malware
doc covert
listener
channel
VMM
Ví dụ kênh ngầm
Anti-virus
Anti-virus
OS
OS VMM and virus
HW HW
The MATRIX
Mã độc trên nền VM (blue pill virus)
HĐH có thể nhận biết đang chạy trên nền ảo hóa VMM?
Ứng dụng:
• Phần mềm nhận dạng virus có thể phát hiện VMBR
• Mã virus (non-VMBR) có thể phát hiện VMM
=> Chống chạy debug để lần ngược mã(reverse engineering)
• Phần mềm gắn kết thiết bị (vd MS Windows) có thể chặn không chạy trên VMM
Phát hiện VMM (red pill techniques)
Mục tiêu: bảo vệ ứng dụng thực thi trên cùng không gian địa chỉ, vd
• Codec không được ảnh hưởng đến media player
• Trình điều khiển thiết bị không được làm hỏng kernel
Giải pháp đơn giản: các ứng dụng chạy trên các không gian địa chỉ tách biệt
• Nhược điểm: nếu thường xuyên trao đổi thông tin => chậm
Cô lập lỗi phần mềm
Tiếp cận:
• Phân bộ nhớ => các đoạn, vd đoạn mã, đoạn dữ liệu
app #1 app #2
• Xác định các lệnh không an toàn, vd: jmp, load
• Khi biên dịch, thêm các chỉ thị bảo vệ
• Khi nạp mã lệnh, đảm bảo các chỉ thị bảo vệ có
Segment matching technique
Designed for MIPS processor. Many registers available.
dr1, dr2: dedicated registers not used by binary
• Compiler pretends these registers don’t exist
• dr2 contains segment ID
Guard ensures code doe
Indirect load instruction R12 [addr]
becomes: load data from another se
dr1 addr
scratch-reg (dr1 >> 20) : get segment ID
compare scratch-reg and dr2 : validate seg. ID
trap if not equal
R12 [addr] : do load
Address sandboxing technique
dr2: holds segment ID
br addr
stub br addr
br addr
Performance
• Usually good: mpeg_play, 4% slowdown