Các nghiên cứu code signing

Một phần của tài liệu Cơ chế bảo mật mã thực thi trên linux (Trang 41 - 47)

41

Chúng ta có thể thấy code signing mang lại lợi ích rất lớn trong việc kiểm tra tính toàn vẹn của dữ liệu cũng như xác minh nguồn gốc dữ liệu, đảm bảo một môi trường an toàn cho người sử dụng. Code signing đã được triển khai trên rất nhiều nền tảng khác nhau như Microsoft Windows, Macs OS X, Java Platform… vậy trên các hệ điều hành hệ thống Linux thì sao? Trong phần này, chúng ta sẽ đi tìm hiểu và đánh giá những nghiên cứu code signing đã có trên linux.

Tính đến thời điểm hiện tại, có thể có rất nhiều các nghiên cứu code signing trên linux nhưng do giới hạn về thời gian, trong khuôn khổ luận văn này, tác giả sẽ đưa ra đánh giá về những nghiên cứu sau:

 Signelf – Digitally signing ELF binaries

 The digsig project

 Linux IMA (Integrity Measurement Architecture)

Signelf (Joseph A.Fox)

Signelf là một bộ công cụ được viết bằng C++ để ký vào các file dạng ELF đặc biệt là các file thư viện. Signelf sử dụng thư viện libcrypt để thực hiện các thao tác ký và xác minh các file tương ứng.

Mục đích của tác giả khi tạo project này là phục vụ cho hệ thống có kiến trúc dạng plugin (hệ thống sử dụng các thư viện chia sẻ như là plugin để bổ sung mở rộng các tính năng), do đó, cần có cơ chế xác minh nguồn gốc, độ an toàn của những plugin này. Bằng việc phân tích cấu trúc định ELF, tác giả đã tạo thêm một section mới vào các file nhị phân để chứa thông tin chữ ký. Thông tin chữ ký được tạo bằng cách tính băm hai section data và text trong file và ký với private key của tác giả:

42

Signing:

signelf <path/to/shared/object.so>

Để xác minh chữ ký hợp lệ, tác giả cung cấp API verifyLib: #include “signelf.h”

#include “pubkey.h”

bRetVal = signelf::verifyLib(szKeyBuf, sizeof(szKeyBuf, sizeof(szKeyBuf), “/path/to/share/object.so”);

trong đó szKeyBuf là public key và được định nghĩa trong pubkey.h

Đánh giá:

Signelf là một dự án đơn giản, chưa có cơ chế kiểm tra, xác minh tự động, việc kiểm tra xác minh dừng lại ở mức cung cấp API cho lập trình viên tích hợp vào phần mềm. Signelf thích hợp với mô hình tích hợp code signing dưới dạng module, để phần mềm tự kiểm tra xác minh các bản cập nhật, bản vá cho phần mềm.

The digsig project – The DigSig Team

DigSig là một kernel module, thực hiện kiểm tra các chữ ký điện tử của các file thực thi và thư viện (định dạng ELF) trước khi chúng được thực thi. Các file nhị phân này được ký bởi công cụ BSign – một công cụ dùng để ký lên các file nhị phần trên usermode. Cũng tương tự như công cụ signelf ở trên, BSign ký vào các file nhị phần và

43

đặt thông tin chữ ký vào section signature trong các file định dạng ELF này. Ở mức kernel, digsig sẽ thực hiện verify các chữ ký này mỗi khi chúng được gọi thực thi và từ chối thực thi những file có chữ ký không hợp lệ.

Digsig hỗ trợ các tính năng:

 Xác minh chữ ký của các file thực thi (ELF binaries) và các thư viện chia sẻ.

 Hỗ trợ thu hồi chữ ký.

 Cơ chế cache chữ ký để tăng hiệu năng hệ thống.

Digsig hoạt động dưới dạng một kernel module nên để sử dụng digsig, người dùng (quản trị viên hệ thống) phải thực tích hợp digsig vào linux kernel:

# ./digsig.init start my_public_key.pub Testing if sysfs is mounted in /sys. sysfs found

Loading Digsig module. Loading public key. Done.

Sau đó thì việc xác minh chữ ký sẽ được kích hoạt, tất cả các tiến trình muốn được khởi tạo phải có chữ ký hợp lệ:

$./test $ su Password:

# tail -f /var/log/messages

colby kernel: DIGSIG MODULE - binary is ./test

44 Found signature section

colby kernel: DIGSIG MODULE - dsi_bprm_compute_creds: Signature verification successful

Tất cả các tiến trình có chữ ký không hợp lệ sẽ không được phép thực thi:

$ ./corrupt

bash: ./corrupt: Operation not permitted

colby kernel: DIGSIG MODULE - binary is ./corrupt

colby kernel: DIGSIG MODULE Error - dsi_bprm_compute_creds: Signatures do not match for ./corrupt

Digsig sử dụng LSM (Linux Security Module – một framework hỗ trợ tích hợp nhiều tính năng bảo mật vào linux kernel) thực hiện hook trong quá trình linux kernel thực thi một file binary để tiến hành kiểm tra tính hợp lệ của các chữ ký tương ứng.

Phiên bản cuối cùng của digsig là digsig-1.5 tương thích với phiên bản linux kernel 2.6.21 trở về trước và rất tiếc digsig không tiếp tục được phát triển để có thể tương thích với các phiên bản linux kernel sau này.

Đánh giá: Mặc dù phụ thuộc vào framework LSM nhưng có thể nói digsig là một project hoàn chỉnh cho giải pháp tích hợp code signing vào linux. Tuy nhiên, do thiếu người phát triển nên dự án tạm thời dừng lại, phiên bản cuối cùng của digsig tương thích với linux kernel 2.6.21 và không tương thích với các bản linux kernel gần đây nên vẫn chưa có giải pháp tích hợp code signing nào cho các phiên bản linux kernel gần đây.

45

Linux IMA (Integrity Measurement Architecture)

Mục tiêu của project là phát hiện các file đã bị chỉnh sửa (khai thác hoặc vô tình bị thay đổi), thẩm định độ an toàn của file thông qua giá trị đánh giá được lưu ở thuộc tính mở rộng của file và yêu cầu kiểm tra tính toàn vẹn của file. Những mục tiêu này bổ sung cho các điều khiển truy cập bắt buộc được cung cấp bởi các LSM modules như SELinux, Smack, trong đó, tùy thuộc vào cấu hình các chính sách sử dụng mà có thể bảo vệ được được tính toàn vẹn của file.

Linux IMA thực hiện hook vào linux kernel để đánh giá tính toàn vẹn của các files được kích hoạt trước khi nó được thực thi hoặc được ánh xạ lên vùng nhớ.

Linux IMA có thể tương tác với các vi mạch TPM (Trusted Platform Modules) trong hệ thống để bảo vệ các mã băm đã được đăng ký khỏi các khai thác đến từ ứng dụng hoặc các tấn công giả mạo quản trị viên hệ thống. Linux IMA đã hỗ trợ Linux Kernel, hỗ trợ ghi log những files, những câu lệnh chạy với quyền ưu tiên và có thể cấu hình thêm nhiều tính năng nữa. Từ phiên bản linux kernel 3.7, bản vá IMA appraisal patch

đã đượcbổ sung vào phân hệ IMA nhờ đó, hệ thống có thể chỉ cần đăng ký một giá trị đo (measured value) như một thuộc tính mở rộng và sau khi lần đánh giá kế tiếp thực hiện kiểm tra giá trị thuộc tính mở rộng này với giá trị đo, nếu giá trị băm là không khớp, ứng dụng sẽ bị từ chối nạp lên vùng nhớ.

Linux IMA bao gồm 5 tính năng chính:

 Collect – đánh giá một file trước khi file này được truy cập.

 Store – thêm kết quả đo vào một danh sách thường trú trong kernel và nếu phần cứng hỗ trợ TPM (Trusted Platform Module), mở rộng IMA PCR.

46

 Attest – Nếu có phần cứng hỗ trợ, sẽ sử dụng TPM để ký vào giá trị IMA PCR, cho phép kiểm tra từ xa (remote validation) danh sách đo.

 Protect – bảo vệ thuộc tính mở rộng bảo mật của file (bao gồm cả giá trị hash) khỏi nguy cơ tấn công.

Ba tính năng đầu tiên được đưa vào hệ thống IMA trong phiên bản linux 2.6.30. Hai tính năng cuối được được giới thiệu như một tập các tính năng bổ sung EVM/IMA- appraisal patch tỏng phiên bản linux kernel 2.6.36.EVM (Extended Verification Module) sử dụng cơ chế đơn giản hơn, bảo mật hơn để nạp các evm-key và được đưa vào từ linux kernel 3.2. Tính năng bảo vệ metadata của file bằng chữ ký điện tử được đưa vào từ Linux kernel 3.3 và đến phiên bản Linux kernel 3.7 IMA-appraisal mới được đưa vào.

Đánh giá:

 Linux-IMA hỗ trợ cấu hình rất mạnh.

 Với phần cứng hỗ trợ (TPM – Trusted Platform Module), hiệu quả hoạt động của Linux-IMA có thể tăng lên rất nhiều.

 Tốn tài nguyên do luôn phải duy trì một danh sách đo (measurement list) từ khi khởi động hệ thống và trong suốt quá trình hoạt động.

Một phần của tài liệu Cơ chế bảo mật mã thực thi trên linux (Trang 41 - 47)

Tải bản đầy đủ (PDF)

(66 trang)