Biến Linux thành cơ sở dữ liệu: Truy vấn và giám sát bảo mật bằng osquery

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Cơn ác mộng khi quản trị hàng trăm server Linux

Hãy tưởng tượng sếp yêu cầu bạn liệt kê ngay phiên bản Nginx trên 200 server để kiểm tra lỗ hổng CVE mới nhất. Nếu dùng script Bash và ssh loop thủ công, bạn sẽ mất cả buổi chiều để grepawk đống dữ liệu hỗn độn.

Mỗi công cụ như ps, netstat hay lsof lại trả về một định dạng text khác nhau. Việc chuẩn hóa dữ liệu này để làm báo cáo thực sự là một cực hình. Osquery xuất hiện để giải quyết bài toán đó bằng cách coi hệ điều hành như một cơ sở dữ liệu quan hệ. Thay vì vật lộn với shell script, bạn chỉ cần viết SQL.

Tại sao osquery lại khác biệt?

Để thấy rõ giá trị của osquery, hãy nhìn vào bảng so sánh các phương pháp giám sát phổ biến hiện nay:

  • CLI truyền thống (top, netstat): Nhanh, có sẵn nhưng không thể scale. Việc lấy dữ liệu từ 500 node cùng lúc là điều bất khả thi.
  • Log Aggregator (ELK, Splunk): Lưu trữ tốt, biểu đồ đẹp. Tuy nhiên, chi phí tài nguyên rất lớn và dữ liệu thường có độ trễ (hậu kiểm).
  • osquery: Truy vấn thời gian thực, dữ liệu chuẩn hóa, cực kỳ nhẹ. Bạn có thể hỏi hệ thống bất cứ điều gì và nhận kết quả sau vài mili giây.

Sức mạnh của việc “Query hệ điều hành”

Osquery (do Facebook phát triển) trừu tượng hóa các thành phần hệ thống thành hơn 200 bảng dữ liệu. Từ tiến trình đang chạy, kernel module đến các kết nối mạng đều nằm gọn trong các bảng SQL.

Thay vì nhớ hàng tá tham số của netstat -tulpn, bạn chỉ cần chạy: SELECT * FROM listening_ports;. Kết quả trả về là định dạng bảng sạch sẽ, dễ dàng xuất ra JSON để tích hợp với các hệ thống khác.

Triển khai osquery trên Linux thực tế

Dưới đây là cách cài đặt nhanh trên Ubuntu. Với các hệ thống RHEL/CentOS, bạn chỉ cần thay thế bằng yum hoặc dnf.

1. Cài đặt agent

Đầu tiên, hãy thêm repository chính thức để nhận các bản cập nhật bảo mật mới nhất:

export OSQUERY_KEY=14841204C457537ED9F7D182915B1051F6F3CFC5
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY
sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
sudo apt update && sudo apt install osquery -y

2. Truy vấn tương tác với osqueryi

osqueryi là công cụ tuyệt vời để troubleshoot nhanh. Nó hoạt động giống hệt shell của MySQL hay PostgreSQL.

osqueryi

Hãy thử kiểm tra 5 tiến trình đang ngốn RAM nhất trên server của bạn:

SELECT name, pid, (resident_size / 1024 / 1024) AS ram_mb 
FROM processes 
ORDER BY resident_size DESC LIMIT 5;

3. 3 kịch bản bảo mật thực chiến

Đây là những câu lệnh mình thường xuyên sử dụng trong quá trình Incident Response (ứng cứu sự cố).

Phát hiện User không có mật khẩu:
Kẻ tấn công thường tạo user ẩn hoặc xóa mật khẩu để duy trì quyền truy cập. Truy vấn này sẽ lật tẩy chúng:

SELECT * FROM users WHERE password = '';

Tìm kiếm Reverse Shell:
Câu lệnh này giúp tìm các tiến trình đang kết nối ra ngoài internet nhưng không phải là localhost:

SELECT p.name, pos.remote_address, pos.remote_port 
FROM process_open_sockets AS pos 
JOIN processes AS p ON pos.pid = p.pid 
WHERE pos.remote_address NOT IN ('127.0.0.1', '::1', '0.0.0.0', '');

Theo dõi thay đổi file cấu hình:
Kiểm tra xem ai đã sửa file trong /etc trong vòng 24 giờ qua:

SELECT path, mtime, uid FROM file 
WHERE path LIKE '/etc/%' AND mtime > (strftime('%s', 'now') - 86400);

Lưu ý nhỏ: Khi thiết lập tài khoản quản trị để log dữ liệu, hãy tránh xa các mật khẩu yếu. Mình thường dùng Password Generator để tạo chuỗi ngẫu nhiên 20 ký tự. Công cụ này chạy local trên trình duyệt nên rất an toàn cho dân kỹ thuật.

Giám sát tự động với osqueryd

Để giám sát liên tục, bạn cần osqueryd (daemon). Nó sẽ chạy các truy vấn theo lịch (schedule) và đẩy log về trung tâm.

Mặc định, osquery có tính năng “Watchdog”. Nếu một câu truy vấn ngốn quá 12% CPU hoặc 200MB RAM, nó sẽ tự động bị ngắt để bảo vệ server. Điều này giúp bạn yên tâm triển khai trên các hệ thống Production quan trọng.

Cấu hình mẫu trong /etc/osquery/osquery.conf để kiểm tra mã độc rootkit mỗi giờ:

{
  "schedule": {
    "rootkit_check": {
      "query": "SELECT * FROM kernel_modules WHERE status != 'Live';",
      "interval": 3600
    }
  }
}

Kinh nghiệm tối ưu hiệu năng

Dù osquery rất tối ưu, nhưng một câu SQL tồi vẫn có thể làm treo máy. Hãy nhớ 3 quy tắc vàng:

  1. Đừng bao giờ SELECT * trên bảng file: Nếu bạn scan toàn bộ ổ cứng để tính hash MD5, server sẽ “khóc thét”. Chỉ quét các thư mục trọng yếu như /bin hoặc /sbin.
  2. Sử dụng JOIN thông minh: Luôn lọc dữ liệu ở bảng chính trước khi JOIN với bảng khác.
  3. Tận dụng Event-based: Sử dụng các bảng _events để chỉ nhận thông báo khi có sự kiện thay đổi, thay vì quét định kỳ (polling).

Lời kết

Osquery không chỉ là một công cụ, nó là tư duy quản trị hiện đại. Việc đưa mọi thông số về chuẩn SQL giúp bạn dễ dàng tích hợp vào pipeline CI/CD hoặc Dashboard SOC. Nếu bạn đang quản lý cụm server quy mô lớn, hãy cài thử osquery ngay hôm nay. Bạn sẽ thấy việc kiểm soát hạ tầng chưa bao giờ nhàn đến thế.

Share: