3.1.2.3. Theo dõi hành vi của ứng dụng
polgen giúp chúng ta tạo các type mới dựa trên việc theo dõi các ứng dụng chạy. Để thực hiện việc này, các ứng dụng đó phải có type trên hệ thống SELinux. Chúng ta có thể tạo file .psl để mô tả cấu trúc của chương trình để polgen sinh ra một policy tạm thời cho ứng dụng.
1. Polgen Specification Language (.psl)
Chúng ta cần mô tả thành phần và mối liên kết giữa chúng trong ứng dụng bằng ngôn ngữ PSL (Polgen Specification Language). Sau đây là ví dụ một file .psl
của chương trình jabberd:
prefix=/home/user_name/opt/jabberd exec_prefix=$prefix/bin etcdir=$prefix/etc pkgetcdir=$etcdir/jabberd vardir=$prefix/var pkgvardir=$vardir/jabberd logdir=$pkgvardir/log piddir=$pkgvardir/pid component $exec_prefix/jabberd { entry_point 1 type process reads { $pkgetcdir/jabberd.cfg } } component $exec_prefix/c2s { type process reads { $pkgetcdir/c2s.xml} writes { $piddir/c2s.pid, $logdir/c2s.log} } component $exec_prefix/s2s { type process reads { $pkgetcdir/s2s.xml} writes { $piddir/s2s.pid, $logdir/s2s.log} } component $exec_prefix/router { type process
reads { $pkgetcdir/router.xml, router_users.xml} writes { $piddir/router.pid,
$logdir/router.log} }
component $exec_prefix/resolver { type process
reads { $pkgetcdir/resolver.xml} writes { $piddir/resolver.pid, $logdir/resolver.log} } component $exec_prefix/sm { type process reads { $pkgetcdir/sm.xml} writes { $piddir/sm.pid, $logdir/sm.log} }
Các thành phần này có thể đọc hay ghi vào các file và tạo kết nối socket.
$prefix dùng để chỉ ra đường dẫn của cấu trúc file, chúng ta sẽ phải chỉ ra rõ ràng khi phân tích ứng dụng.
2. Stracesc
Chúng ta dùng chương trình stracesc để phân tích hoạt động của ứng dụng.
stracesc sẽ cho chúng ta biết tất cả những system call mà ứng dụng gọi khi chạy. Lưu ý rằng stracesc chỉ theo dõi hoạt động của ứng dụng khi nó đang chạy. Do đó chúng ta cần phải chạy tất cả các chức năng của ứng dụng nếu có thể. Ví dụ, khi theo dõi một trình duyệt web, ta không chỉ duyệt một vài trang web mà còn phải thay đổi cấu hình của trình duyệt, dùng một số plugin thông thường. stracesc thực hiện theo dõi động, nên chúng ta cần phải thi hành hết tất cả code của ứng dụng.
Phân tích động phải được thực hiện trên một hệ thống SELinux và ở chế độ
permissive để stracesc có thể hoạt động đúng. $ stracesc -fX -o programprogram
3. trackall
Tiếp theo đó chúng ta sử dụng trackall: $ trackall -o tracked_data_dirprogram
Lệnh trên sẽ rút gọn output của stracesc thành định dạng dễ phân tích và lưu vào các file program.tracked (program là tên ứng dụng), được dùng trong giai đoạn phân tích mẫu. Với lựa chọn –o tracked_data_dir, các file output của trackall sẽ được đặt trong thư mục tracked_data_dir. Chúng có thể được di chuyển sang nơi khác để tạo policy.
3.1.2.3. Nhận diện mẫu
Chương trình spar (Security-enhanced linux PAttern Recognizer) tìm kiếm các file .tracked hay .psl để nhận diện mẫu. spar theo dấu các tương tác ở mức thấp của ứng dụng, sau đó cho phép chúng ta lựa chọn các option để sinh policy.
$ spar -n myprog -d track_data_dir -o results_data_dir Các tham số của spar:
- h: help
- n: Tên của ứng dụng. Mặc định là tên thư mục chứa các file .tracked.
- d: thư mục chứa file .tracked. Mặc định là thư mục hiện tại.
- o: thư mục chứa output. Mặc định spar tạo một thư mục con results trong thư mục hiện tại.
Sau khi phân tích, spar tương tác với người dùng để tối ưu trước khi sinh ra các file .te, .fc, .if.