Biên dịch Linux Kernel với các tùy chọn bảo mật đặc biệt
Công việc đầu tiên là chuẩn bị môi trường biên dịch để tích hợp các tính năng bảo mật nâng cao như TOMO (Transparent Memory Object) và KASLR (Kernel Address Space Layout Randomization). Chúng ta sẽ sử dụng nguồn code kernel chính thức và cấu hình config file thủ công để đảm bảo kiểm soát tuyệt đối.
Tải về nguồn code kernel phiên bản mới nhất (ví dụ 6.x) và giải nén vào thư mục làm việc.
sudo apt-get update
sudo apt-get install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev bc
git clone --depth 1 --branch v6.6.0 https://github.com/torvalds/linux.git
cd linux
make olddefconfig
Kết quả mong đợi: Thư mục source code được tạo và file .config mặc định được sinh ra mà không có lỗi.
Chỉnh sửa file cấu hình để bật TOMO và KASLR. TOMO giúp mã hóa đối tượng trong bộ nhớ khi không được truy cập, còn KASLR ngẫu nhiên hóa địa chỉ bộ nhớ của kernel để chống các tấn công buffer overflow.
cd linux
scripts/config --enable CONFIG_TRANSPARENT_HUGEPAGE
scripts/config --enable CONFIG_KASLR
scripts/config --enable CONFIG_KASLR_EARLY
scripts/config --enable CONFIG_DEBUG_KALLSYMS
scripts/config --disable CONFIG_DEBUG_INFO
scripts/config --disable CONFIG_PERF_EVENTS
scripts/config --disable CONFIG_TRACING
make olddefconfig
Kết quả mong đợi: File .config đã cập nhật các flag bảo mật. Không có cảnh báo về các tùy chọn bị vô hiệu hóa quan trọng.
Biên dịch kernel với số lượng luồng tối đa để tăng tốc độ, sau đó cài đặt các module cần thiết.
make -j$(nproc)
sudo make modules_install
sudo make install
Kết quả mong đợi: File vmlinuz và initramfs được tạo ra và cài đặt vào thư mục /boot. GRUB được cập nhật tự động.
Verify kết quả biên dịch
Kiểm tra xem kernel mới đã được thêm vào menu khởi động và các flag bảo mật đã được kích hoạt.
grep -E "KASLR|TRANSPARENT_HUGEPAGE" /boot/config-$(uname -r)
update-grub
Kết quả mong đợi: Output hiển thị CONFIG_KASLR=y và CONFIG_TRANSPARENT_HUGEPAGE=y. GRUB menu hiện ra tên phiên bản kernel mới nhất.
Cấu hình Secure Boot và TPM để bảo vệ quá trình khởi động
Sau khi có kernel, bước tiếp theo là bảo vệ chuỗi khởi động (boot chain) bằng Secure Boot và sử dụng TPM (Trusted Platform Module) để lưu trữ khóa mã hóa. Điều này ngăn chặn việc thay đổi kernel hoặc bootloader trái phép.
Đảm bảo BIOS/UEFI đã bật chế độ Secure Boot và TPM 2.0. Sau đó, cài đặt các công cụ cần thiết trên Linux để quản lý khóa.
sudo apt-get install -y tpm2-tools shim-signed mokutil
sudo systemctl enable tpm2-cryptsetup
sudo tpm2_getrandom -d 32 > /root/tpm_random_seed
Kết quả mong đợi: Các gói phần mềm được cài đặt thành công và file seed ngẫu nhiên được tạo để dùng trong quá trình tạo khóa.
Tạo cặp khóa MOK (Machine Owner Key) để ký các module kernel và bootloader. Đây là bước bắt buộc để Secure Boot chấp nhận kernel tự biên dịch.
cd /root
make -C /usr/src/shim-signed MOKManager.certs
sudo mokutil --prepare-enroll
sudo mokutil --add /root/MOK.priv
sudo mokutil --add /root/MOK.crt
Kết quả mong đợi: Hệ thống yêu cầu bạn khởi động lại và nhập mật khẩu để đăng ký khóa MOK vào NVRAM của UEFI.
Cấu hình file grub để kích hoạt Secure Boot và chỉ định key đã tạo.
sudo nano /etc/default/grub
Thêm hoặc sửa dòng sau trong file:
GRUB_SECURITY_POLICY="secure-boot"
Tiếp theo, cập nhật GRUB và khởi động lại để kích hoạt Secure Boot.
sudo update-grub
sudo reboot
Kết quả mong đợi: Khi khởi động, màn hình hiện yêu cầu nhập mã PIN (mặc định là 0000 hoặc mã bạn đặt) để đăng ký khóa MOK. Sau khi nhập đúng, hệ thống boot vào kernel đã ký.
Verify kết quả Secure Boot và TPM
Kiểm tra trạng thái Secure Boot và khả năng đọc từ TPM.
mokutil --sb-state
sudo tpm2_pcrread
Kết quả mong đợi: Mokutil trả về "SecureBoot: enabled" và tpm2_pcrread hiển thị danh sách các giá trị PCR (Platform Configuration Register) từ chip TPM.
Tắt các tính năng không cần thiết để giảm bề mặt tấn công
Với mục tiêu Zero-Knowledge Database, server không cần các tính năng đồ họa, mạng xã hội hay các module không liên quan. Việc tắt chúng giúp giảm thiểu điểm yếu tiềm ẩn (attack surface).
Tắt các module kernel không cần thiết như Bluetooth, USB storage, và các driver đồ họa.
sudo nano /etc/modprobe.d/blacklist.conf
Thêm nội dung sau vào file:
blacklist bluetooth
blacklist btusb
blacklist usb_storage
blacklist radeon
blacklist nouveau
blacklist nvidia
Kết quả mong đợi: Các module trên sẽ không được load tự động khi khởi động.
Áp dụng các tham số kernel để tăng cường bảo mật ở mức hệ thống, bao gồm tắt core dump, hạn chế quyền root và kích hoạt ASLR toàn phần.
sudo nano /etc/sysctl.d/99-security.conf
Thêm nội dung sau vào file:
kernel.core_uses_pid = 1
kernel.core_pattern = /var/crash/%E.%P.%t.%h.%s/core
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.yama.ptrace_scope = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_timestamps = 0
Kết quả mong đợi: File cấu hình sysctl được lưu, các tham số sẽ được áp dụng sau khi chạy lệnh sysctl.
Áp dụng các thay đổi sysctl ngay lập tức và khóa file cấu hình để ngăn chỉnh sửa trái phép.
sudo sysctl --system
sudo chmod 600 /etc/sysctl.d/99-security.conf
Kết quả mong đợi: Các tham số bảo mật được áp dụng ngay lập tức. File config bị khóa quyền chỉ đọc cho root.
Verify kết quả giảm bề mặt tấn công
Kiểm tra xem các module đã bị tắt và các tham số sysctl đã được áp dụng đúng chưa.
lsmod | grep -E "bluetooth|usb_storage|radeon|nouveau"
sysctl kernel.kptr_restrict
sysctl kernel.yama.ptrace_scope
Kết quả mong đợi: Lệnh lsmod không trả về kết quả gì (các module đã bị tắt). sysctl trả về giá trị 2 và 3 tương ứng.
Điều hướng series:
Mục lục: Series: Triển khai Zero-Knowledge Database với SQLcrypt và Linux Kernel
« Phần 1: Chuẩn bị môi trường và kiến trúc tổng quan
Phần 3: Triển khai và cấu hình SQLcrypt trên Linux »