Kết quả đạt được:
Tiến hành cập nhật linux kernel mới vào bootloader của hệ điều hành hiện tại và khởi động lại để tiến hành thử nghiệm giải pháp:
Trong phiên bản linux kernel thử nghiệm, tất cả các file được gọi thực thi từ đường dẫn có chứa chuỗi “tuantm_” sẽ được thực hiện xác minh chữ ký:
Thử nghiệm trên một file thực thi được ký có tên tuantm_test có mã nguồn như sau: #include <stdio.h>
60
printf(“Test CodeSigning \n\n”);
return 0; }
File có phụ thuộc thư viện như sau:
$ldd tuantm_test
linux-gate.so.1 => (0xb773b000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb756d000) /lib/ld-linux.so.2 (0xb773c000)
Như vậy, file phụ thuộc vào hai thư viện /lib/i386-linux-gnu/libc.so.6 và /lib/ld- linux.so.2. Thử nghiệm giải pháp chúng ta sẽ ký lên file tuantm_test:
$sign-file sha512 signing_key.priv signing_key.x509 tuantm_test tuantm_signed
Kết quả thực thi file trên nhân mới: $./tuantm_signed
STT Hàm thử nghiệm Kết quả Log (dmesg)
1 do_mmap_pgoff Chương trình bị từ chối thực thi
[TuanTM-mmap] - /lib/i386-linux- gnu/libc.so.6 is passed to
vrd_verify_signature with result -22 [TuanTM-mmap] - /lib/i386-linux- gnu/libc.so.6 is passed to
vrd_verify_signature with result -22
61
chạy và hiển thị: Test
CodeSigning
verify integrity checking!
Đánh giá kết quả:
Kết quả thu được khi thực thi file được ký từ giao diện shell hoàn toàn phù hợp với logic của thử nghiệm đặt ra:
Trường hợp 1: thử nghiệm với hàm do_mmap_pgoff, linux kernel sẽ thực hiện xác minh chữ ký với tất cả những file được map lên vùng nhớ bao gồm cả 2 file thư viện phụ thuộc, trong trường hợp này, hai file thư viện không được ký nên bị từ chối map lên vùng nhớ với mã lỗi trả về (-EPERM /* Operation not permitted */) nên chương trình không thể được thực thi.
Trường hợp 2: thử nghiệm với hàm do_execve_common, linux kernel sẽ thực hiện xác minh chữ ký với tất cả những file được gọi thực thi (qua hệ thống hàm execve), trong trường hợp này, chỉ tuantm_signed đã được ký sẽ được xác minh chữ ký (file đã được ký rồi) nên file được thực thi bình thường.
Thử nghiệm cho thấy việc tích hợp xác minh chữ ký tại hàm do_mmap_pgoff có thể ứng dụng để kiểm tra chữ ký của không chỉ các file thực thi mà bao gồm cả các file thư viện được sử dụng.