Thứ tư, 15/02/2017 | 00:00 GMT+7

Cách giám sát bảo mật hệ thống của bạn với osquery trên Ubuntu 16.04

osquery là một công cụ bảo mật open-souce sử dụng hệ điều hành và biến nó thành một database khổng lồ, với các bảng mà bạn có thể truy vấn bằng các câu lệnh giống SQL. Với những truy vấn này, bạn có thể giám sát tính toàn vẹn của file , kiểm tra trạng thái và cấu hình của firewall , thực hiện kiểm tra bảo mật của server mục tiêu, v.v.

Đó là một ứng dụng đa nền tảng hỗ trợ các version macOS, Windows 10, CentOS và Ubuntu gần đây. Nó chính thức được mô tả là một khung "phân tích, giám sát và đo lường hệ điều hành hỗ trợ SQL" và có nguồn root từ Facebook.

Với osquery, bạn có thể chạy các lệnh như select * from logged_in_users ; chống lại server của bạn và nhận lại kết quả như sau:

Output
+-----------+----------+-------+------------------+------------+------+ | type | user | tty | host | time | pid | +-----------+----------+-------+------------------+------------+------+ | login | LOGIN | ttyS0 | | 1483580429 | 1546 | | login | LOGIN | tty1 | | 1483580429 | 1549 | | user | root | pts/0 | 24.27.68.82 | 1483580584 | 1752 | | user | sammy | pts/1 | 11.11.11.11 | 1483580770 | 4057 | | boot_time | reboot | ~ | 4.4.0-57-generic | 1483580419 | 0 | | runlevel | runlevel | ~ | 4.4.0-57-generic | 1483580426 | 53 | +-----------+----------+-------+------------------+------------+------+

Nếu điều này hấp dẫn bạn, bạn sẽ thích sử dụng osquery làm công cụ giám sát bảo mật hệ thống và phát hiện xâm nhập cho server của bạn .

Cài đặt osquery cho phép bạn truy cập vào các thành phần sau:

  • osqueryi : Shell osquery tương tác, để thực hiện các truy vấn đặc biệt.
  • osqueryd : Một daemon để lập lịch và chạy các truy vấn trong nền.
  • osqueryctl : Một tập lệnh trợ giúp để kiểm tra việc triển khai hoặc cấu hình của osquery. Nó cũng được dùng thay cho trình quản lý dịch vụ của hệ điều hành để bắt đầu / dừng / khởi động lại osqueryd .

osqueryiosqueryd là các công cụ độc lập. Chúng không giao tiếp và bạn có thể sử dụng cái này mà không cần cái kia. Hầu hết các cờ và tùy chọn cần thiết để chạy mỗi cờ đều giống nhau và bạn có thể chạy osqueryi bằng cách sử dụng file cấu hình của osqueryd để bạn có thể tùy chỉnh môi trường mà không cần sử dụng nhiều lựa chọn dòng lệnh.

Trong hướng dẫn này, bạn sẽ:

  • Cài đặt hệ điều hành.
  • Cấu hình các khía cạnh của hệ điều hành, như Rsyslog, mà hệ điều hành cần hoạt động bình thường.
  • Cài đặt file cấu hình được dùng bởi cả osqueryiosqueryd .
  • Làm việc với các gói hệ điều hành, là các group truy vấn được định nghĩa mà bạn có thể thêm vào lịch biểu.
  • Thực hiện các truy vấn đặc biệt bằng cách sử dụng osqueryi để tìm kiếm các vấn đề bảo mật.
  • Khởi động daemon để nó có thể chạy các truy vấn tự động.

Các bản ghi được tạo bởi osqueryd , daemon, nhằm mục đích được chuyển đến các điểm cuối ghi log bên ngoài, yêu cầu chuyên môn bổ sung để cài đặt và sử dụng đúng cách. Hướng dẫn này sẽ không đề cập đến cấu hình đó, nhưng bạn sẽ học cách cấu hình và chạy daemon cũng như lưu kết quả local .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần có những thứ sau:

Bạn cũng cần có hiểu biết cơ bản về SQL và kiến thức cơ bản về bảo mật hệ thống Linux .

Bước 1 - Cài đặt hệ điều hành trên Server

Bạn có thể cài đặt osquery bằng cách biên dịch nó từ nguồn hoặc bằng cách sử dụng trình quản lý gói. Vì không có gói có thể cài đặt trong repository lưu trữ Ubuntu chính thức, bạn sẽ phải thêm repository Ubuntu chính thức của dự án vào hệ thống.

Đầu tiên, thêm public key của repository :

  • sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B

Sau đó, thêm repository :

  • sudo add-apt-repository "deb [arch=amd64] https://osquery-packages.s3.amazonaws.com/xenial xenial main"

Cập nhật database gói:

  • sudo apt-get update

Cuối cùng, cài đặt osquery:

  • sudo apt-get install osquery

Ngoài ra, osquery không phải là cực kỳ hữu ích; nó không phải là một ứng dụng plug-and-play. Cho dù bạn định sử dụng shell tương tác hay daemon, bạn phải chuyển một số cờ và tùy chọn, từ dòng lệnh hoặc thông qua file cấu hình. Để xem các cờ và tùy chọn có sẵn cho daemon, hãy nhập:

  • osqueryd --help

Đầu ra sẽ bao gồm hàng chục cờ dòng lệnh và các tùy chọn cấu hình. Dưới đây là kết quả một phần từ server thử nghiệm được sử dụng cho bài viết này.

Output
osquery 2.1.2, your OS as a high-performance relational database Usage: osqueryd [OPTION]... osquery command line flags: --flagfile PATH Line-delimited file of additional flags --config_check Check the format of an osquery config and exit --config_dump Dump the contents of the configuration --config_path VALUE Path to JSON config file --config_plugin VALUE Config plugin name --config_tls_endpoint VALUE TLS/HTTPS endpoint for config retrieval --config_tls_max_attempts VALUE Number of attempts to retry a TLS config/enroll request --config_tls_refresh VALUE Optional interval in seconds to re-read configuration --daemonize Run as daemon (osqueryd only) ... ... osquery configuration options (set by config or CLI flags): --audit_allow_config Allow the audit publisher to change auditing configuration --audit_allow_sockets Allow the audit publisher to install socket-related rules --audit_persist Attempt to retain control of audit --aws_access_key_id VALUE AWS access key ID --aws_firehose_period VALUE Seconds between flushing logs to Firehose (default 10) --aws_firehose_stream VALUE Name of Firehose stream for logging --aws_kinesis_period VALUE Seconds between flushing logs to Kinesis (default 10) --aws_kinesis_random_partition_key Enable random kinesis partition keys --aws_kinesis_stream VALUE Name of Kinesis stream for logging --aws_profile_name VALUE AWS profile for authentication and region configuration --aws_region VALUE AWS region

Để xem các cờ dòng lệnh bổ sung chỉ có sẵn cho shell tương tác, hãy nhập:

  • osqueryi --help

Chạy osqueryi là phương pháp dễ dàng nhất để liệt kê và truy vấn các bảng osquery có sẵn. Ví dụ: chạy nó bằng lệnh sau:

  • osqueryi --verbose

Điều này sẽ đặt bạn vào một shell tương tác và bạn sẽ thấy một kết quả tương tự như sau:

Output
I0105 01:52:54.987584 4761 init.cpp:364] osquery initialized [version=2.1.2] I0105 01:52:54.987808 4761 extensions.cpp:351] Could not autoload extensions: Failed reading: /etc/osquery/extensions.load I0105 01:52:54.987944 4761 extensions.cpp:364] Could not autoload modules: Failed reading: /etc/osquery/modules.load I0105 01:52:54.988209 4761 init.cpp:606] Error reading config: config file does not exist: /etc/osquery/osquery.conf I0105 01:52:54.988334 4761 events.cpp:886] Error registering subscriber: socket_events: Subscriber disabled via configuration I0105 01:52:54.993973 4763 interface.cpp:307] Extension manager service starting: /home/sammy/.osquery/shell.em Using a virtual database. Need help, type '.help' osquery>

Do lỗi và thông báo thông tin trong kết quả , rõ ràng là tất cả các phần của osquery không hoạt động chính xác. Các truy vấn nhất định, như select * from yara ; không trả về gì, cho thấy rằng bảng chưa được điền dữ liệu.

Các truy vấn khác, như select time, severity, message from syslog ; sẽ trả về một thông báo như sau, cho biết ta cần phải làm nhiều việc hơn:

Output
W1202 15:44:48.600539 1720 virtual_table.cpp:492] Table syslog is event-based but events are disabled W1202 15:44:48.600587 1720 virtual_table.cpp:499] Please see the table documentation: https://osquery.io/docs/#syslog

Ta sẽ thực hiện một số sửa đổi đối với cấu hình server của bạn để giải quyết vấn đề này.

Thoát khỏi console bằng lệnh :

  • .exit

Trong phần tiếp theo, ta sẽ sửa đổi các khía cạnh của hệ điều hành mà osquery cần để hoạt động bình thường.

Bước 2 - Cho phép osquery truy cập Nhật ký hệ thống

Trong bước này, ta sẽ sửa đổi ứng dụng log hệ thống của hệ điều hành để cho phép osquery sử dụng và truy vấn log hệ thống. Trên Ubuntu 16.04, điều đó nghĩa là sửa đổi file cấu hình Rsyslog. Và sửa đổi duy nhất bạn cần thực hiện là thêm một vài dòng mã vào file cấu hình.

Để bắt đầu, hãy mở file /etc/rsyslog.conf :

  • sudo nano /etc/rsyslog.conf

Ta cần thêm một số dòng cấu hình cho Rsyslog biết đường ống nào để ghi vào và các thông số log hệ thống sẽ ghi vào đường ống đó. Theo mặc định, đường ống là /var/osquery/syslog_pipe . osquery sau đó điền vào bảng syslog của nó từ thông tin được ghi vào đường ống đó.

Nối các dòng sau vào file :

/etc/rsyslog.conf
template( name="OsqueryCsvFormat" type="string" string="%timestamp:::date-rfc3339,csv%,%hostname:::csv%,%syslogseverity:::csv%,%syslogfacility-text:::csv%,%syslogtag:::csv%,%msg:::csv%\n" ) *.* action(type="ompipe" Pipe="/var/osquery/syslog_pipe" template="OsqueryCsvFormat")

Lưu và đóng file . Để áp dụng các thay đổi, hãy khởi động lại daemon log hệ thống:

  • sudo systemctl restart rsyslog

Bây giờ ta hãy tạo một file cấu hình cài đặt một số tùy chọn mặc định và lên lịch cho một số truy vấn.

Bước 3 - Tạo file cấu hình osquery

Tạo file cấu hình giúp chạy osqueryi dễ dàng hơn. Thay vì phải vượt qua nhiều tùy chọn dòng lệnh, osqueryi có thể đọc các tùy chọn đó từ file cấu hình nằm trong /etc/osquery/osquery.conf . Và, tất nhiên, file cấu hình cũng sẽ có sẵn cho daemon.

Tệp cấu hình cũng chứa các truy vấn cần được thực hiện theo lịch trình. Tuy nhiên, hầu hết các truy vấn mà bạn có thể chạy theo lịch trình được gửi dưới dạng những gì được gọi là gói . Gói là các file nằm trong folder /usr/share/osquery/packs .

osquery không đi kèm với file cấu hình, nhưng có một file cấu hình mẫu mà bạn có thể sao chép vào /etc/osquery và sửa đổi. Tuy nhiên, file đó không có tất cả các tùy chọn bạn cần để chạy nó trên bản phân phối Linux như Ubuntu, vì vậy ta sẽ tạo file của riêng mình.

Có ba phần trong file cấu hình:

  • Danh sách các tùy chọn daemon và cài đặt tính năng. Những điều này cũng có thể được đọc bởi osqueryi .
  • Danh sách các truy vấn đã lên lịch để chạy và khi nào chúng sẽ chạy.
  • Danh sách các gói được sử dụng để thực hiện các truy vấn được lên lịch cụ thể hơn.

Sau đây là danh sách các tùy chọn mà ta sẽ sử dụng cho file cấu hình của bạn , ý nghĩa của chúng và các giá trị mà ta sẽ đặt chúng. Danh sách các tùy chọn này đủ để chạy osqueryiosqueryd trên Ubuntu 16.04 và các bản phân phối Linux khác.

  • config_plugin : Muốn osquery đọc cấu hình của nó từ đâu. Theo mặc định, chúng được đọc từ một file trên đĩa, vì vậy giá trị của nó là filesystem .
  • logger_plugin : Chỉ định nơi osquery sẽ ghi kết quả của các truy vấn đã lên lịch. , ta sẽ sử dụng filesystem .
  • logger_path : Đây là đường dẫn đến folder log nơi bạn sẽ tìm thấy các file chứa thông tin, cảnh báo, lỗi và kết quả của các truy vấn đã lên lịch. Theo mặc định, đây là /var/log/osquery .
  • disable_logging : Bằng cách đặt giá trị này thành false ta cho phép ghi log .
  • log_result_events : Bằng cách đặt giá trị này thành true , mỗi dòng trong log kết quả sẽ đại diện cho sự thay đổi trạng thái.
  • schedule_splay_percent: Điều này cho osquery rằng khi một số lượng lớn các truy vấn được dự kiến vào khoảng thời gian tương tự, để chạy chúng trải ra để hạn chế bất kỳ tác động hiệu quả trên server . Giá trị mặc định là 10 , là phần trăm.
  • pidfile : Nơi ghi id tiến trình của daemon osquery. Mặc định là /var/osquery/osquery.pidfile .
  • Event_expiry : Tính bằng giây, thời gian giữ được người đăng ký dẫn đến kết quả là cửa hàng hỗ trợ osquery. Ngoài hộp, giá trị này được đặt thành 3600 .
  • database_path : Đường dẫn đến database của osquery. Ta sẽ sử dụng mặc định, là /var/osquery/osquery.db .
  • dài dòng : Khi bật tính năng ghi log , điều này được sử dụng để bật hoặc tắt các thông báo thông tin dài dòng. Ta sẽ đặt điều này thành false .
  • worker_threads : Số stream công việc được sử dụng để xử lý các truy vấn. Điều này được đặt thành 2 theo mặc định, vì vậy ta sẽ để nó ở mức đó.
  • enable_monitor : Được sử dụng để bật hoặc tắt trình theo dõi lịch trình. Ta sẽ kích hoạt nó, vì vậy giá trị sẽ là true .
  • disable_events : Được sử dụng để điều chỉnh hệ thống xuất bản / đăng ký của osquery. Ta cần kích hoạt tính năng này, vì vậy giá trị ở đây sẽ là false .
  • disable_audit : Được sử dụng để tắt nhận các sự kiện từ hệ thống con kiểm tra của hệ điều hành. Ta cần nó được kích hoạt, vì vậy giá trị được sử dụng ở đây sẽ là false .
  • Audit_allow_config : Cho phép nhà xuất bản kiểm tra thay đổi cấu hình kiểm tra. Mặc định là true .
  • Aud_allow_sockets : Điều này cho phép nhà xuất bản kiểm toán cài đặt các luật liên quan đến socket. Giá trị sẽ là true .
  • host_identifier : Điều này được sử dụng để xác định server đang chạy osquery. Khi tổng hợp kết quả từ nhiều server , nó giúp dễ dàng xác định server mà một mục nhập log cụ thể đến từ server nào. Giá trị là hostname hoặc uuid . Ngoài ra, nó được đặt thành hostname , vì vậy ta sẽ sử dụng giá trị đó.
  • enable_syslog : Để osquery sử dụng thông tin log hệ thống, điều này phải được đặt thành true .
  • Sched_default_interval : Khi khoảng thời gian của truy vấn được lập lịch không được đặt, hãy sử dụng giá trị này. Nó chỉ mất vài giây và ta sẽ đặt nó thành 3600 .

Bạn đã thấy cách xem tất cả các cờ dòng lệnh và các tùy chọn cấu hình có thể sử dụng cho osqueryiosqueryd , nhưng các tùy chọn trên sẽ đủ để chạy osquery trên server này.

Tạo và mở file cấu hình bằng lệnh sau:

  • sudo nano /etc/osquery/osquery.conf

Tệp cấu hình sử dụng định dạng JSON . Sao chép nội dung sau vào file :

/etc/osquery/osquery.conf
{   "options": {     "config_plugin": "filesystem",     "logger_plugin": "filesystem",     "logger_path": "/var/log/osquery",     "disable_logging": "false",     "log_result_events": "true",     "schedule_splay_percent": "10",     "pidfile": "/var/osquery/osquery.pidfile",     "events_expiry": "3600",     "database_path": "/var/osquery/osquery.db",     "verbose": "false",     "worker_threads": "2",     "enable_monitor": "true",     "disable_events": "false",     "disable_audit": "false",     "audit_allow_config": "true",     "host_identifier": "hostname",     "enable_syslog": "true",     "audit_allow_sockets": "true",     "schedule_default_interval": "3600"    }, 

Phần tiếp theo của file cấu hình là phần lập lịch. Mỗi truy vấn được xác định bằng một khóa hoặc tên, phải là duy nhất trong file , theo sau là truy vấn để chạy và khoảng thời gian, tính bằng giây, để chạy truy vấn. Ta sẽ thêm một truy vấn đã lên lịch xem bảng crontab cứ sau 300 giây.

Thêm các dòng này vào file cấu hình:

/etc/osquery/osquery.conf
  "schedule": {     "crontab": {       "query": "SELECT * FROM crontab;",       "interval": 300     }   }, 

Bạn có thể viết bất kỳ số lượng truy vấn nào bạn muốn. Chỉ cần giữ đúng định dạng. Nếu bạn không, file sẽ không được xác thực. Ví dụ: để thêm một vài truy vấn nữa, hãy thêm các dòng sau:

/etc/osquery/osquery.conf
  "schedule": {     "crontab": {       "query": "SELECT * FROM crontab;",       "interval": 300     },     "system_profile": {       "query": "SELECT * FROM osquery_schedule;"     },      "system_info": {       "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",       "interval": 3600     }   }, 

Sau các truy vấn đã lên lịch, bạn có thể thêm các truy vấn đặc biệt được gọi là decorator , là các truy vấn thêm dữ liệu vào các truy vấn đã lên lịch khác. Các truy vấn trang trí hiển thị ở đây sẽ thêm UUID của server chạy hệ điều hành và tên user của user cho mọi truy vấn được lập lịch.

Nối các dòng này vào file :

/etc/osquery/osquery.conf
  "decorators": {     "load": [       "SELECT uuid AS host_uuid FROM system_info;",       "SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"     ]   }, 

Cuối cùng, ta có thể trỏ osquery đến một danh sách các gói chứa các truy vấn cụ thể hơn. Mọi cài đặt osquery đều đi kèm với một bộ gói mặc định nằm trong folder /usr/share/osquery/packs . Một trong những gói dành cho macOS, trong khi những gói còn lại dành cho hệ thống Linux. Mặc dù bạn có thể sử dụng các gói từ vị trí mặc định của chúng, bạn cũng có thể sao chép chúng vào folder /etc/osquery .

Thêm các dòng này vào file để hoàn thành file .

/etc/osquery/osquery.conf
  "packs": {      "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",      "incident-response": "/usr/share/osquery/packs/incident-response.conf",      "it-compliance": "/usr/share/osquery/packs/it-compliance.conf",      "vuln-management": "/usr/share/osquery/packs/vuln-management.conf"   } } 

Lưu ý dấu ngoặc nhọn đóng ở cuối, trùng với dấu ngoặc nhọn mở trên dòng đầu tiên của file . Tệp cấu hình đã hoàn thành của bạn sẽ giống như sau:

/etc/osquery/osquery.conf
{   "options": {     "config_plugin": "filesystem",     "logger_plugin": "filesystem",     "logger_path": "/var/log/osquery",     "disable_logging": "false",     "log_result_events": "true",     "schedule_splay_percent": "10",     "pidfile": "/var/osquery/osquery.pidfile",     "events_expiry": "3600",     "database_path": "/var/osquery/osquery.db",     "verbose": "false",     "worker_threads": "2",     "enable_monitor": "true",     "disable_events": "false",     "disable_audit": "false",     "audit_allow_config": "true",     "host_identifier": "hostname",     "enable_syslog": "true",     "audit_allow_sockets": "true",     "schedule_default_interval": "3600"    },   "schedule": {     "crontab": {       "query": "SELECT * FROM crontab;",       "interval": 300     },     "system_profile": {       "query": "SELECT * FROM osquery_schedule;"     },      "system_info": {       "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",       "interval": 3600     }   },   "decorators": {     "load": [       "SELECT uuid AS host_uuid FROM system_info;",       "SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"     ]   },   "packs": {      "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",      "incident-response": "/usr/share/osquery/packs/incident-response.conf",      "it-compliance": "/usr/share/osquery/packs/it-compliance.conf",      "vuln-management": "/usr/share/osquery/packs/vuln-management.conf"   } } 

Lưu file , sau đó xác thực nó bằng lệnh sau:

  • sudo osqueryctl config-check

Đầu ra sẽ như thế này:

Output
I0104 11:11:46.022858 24501 rocksdb.cpp:187] Opening RocksDB handle: /var/osquery/osquery.db

Nếu có lỗi, kết quả sẽ chỉ ra vị trí của lỗi để bạn có thể khắc phục.

Khi bạn có file cấu hình hợp lệ, bạn có thể chuyển sang cấu hình gói hệ điều hành cần thiết để giám sát tính toàn vẹn của file .

Bước 4 - Cài đặt Gói giám sát tính toàn vẹn của file osquery

Theo dõi cẩn thận tính toàn vẹn của các file trên server của bạn là một khía cạnh quan trọng của việc giám sát bảo mật hệ thống của nó. Để làm điều này, osquery cung cấp một giải pháp sẵn sàng.

Các gói bạn đã thêm vào cấu hình trong phần trước sẽ được chuyển ra khỏi hộp. Trong phần này, ta sẽ thêm một gói nữa vào danh sách, gói này sẽ chứa truy vấn và chỉ thị sẽ được sử dụng để giám sát tính toàn vẹn của file . Đối với bài tập này, ta sẽ gọi file fim.conf .

Tạo file này và mở nó trong editor :

  • sudo nano /usr/share/osquery/packs/fim.conf

Ta sẽ tạo một gói sẽ theo dõi các sự kiện file trong folder /home , /etc/tmp cứ sau 300 giây. Cài đặt hoàn chỉnh cho file gói được hiển thị trong danh sách file sau đây. Sao chép nó vào file .

/usr/share/osquery/packs/fim.conf
{ "queries": { "file_events": { "query": "select * from file_events;", "removed": false, "interval": 300 } }, "file_paths": { "homes": [ "/root/.ssh/%%", "/home/%/.ssh/%%" ], "etc": [ "/etc/%%" ], "home": [ "/home/%%" ], "tmp": [ "/tmp/%%" ] } }

Lưu và đóng file .

Để làm cho file mới và các luật của nó có sẵn cho osquery, hãy tham chiếu nó trong danh sách gói ở cuối /etc/osquery/osquery.conf . Mở file để chỉnh sửa:

  • sudo nano /etc/osquery/osquery.conf

Sau đó, sửa đổi phần gói để bao gồm file mới:

/etc/osquery/osquery.conf
... "packs": { "fim": "/usr/share/osquery/packs/fim.conf", "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf", "incident-response": "/usr/share/osquery/packs/incident-response.conf", "it-compliance": "/usr/share/osquery/packs/it-compliance.conf", "vuln-management": "/usr/share/osquery/packs/vuln-management.conf" }

Lưu và đóng file . Và chỉ đảm bảo rằng bạn không mắc lỗi trong file , hãy xác thực lại nó:

  • sudo osqueryctl config-check

Bây giờ ta hãy bắt đầu sử dụng osqueryi để truy vấn hệ thống.

Bước 5 - Sử dụng osqueryi để Thực hiện Kiểm tra Bảo mật Ad-hoc

Có rất nhiều nơi mà osquery có ích. Trong phần này, bạn sẽ thực hiện các kiểm tra bảo mật khác nhau trên hệ thống của bạn bằng cách sử dụng osqueryi , shell tương tác. Lưu ý tại thời điểm này, ta vẫn chưa khởi động daemon osquery. Và đó là vẻ đẹp của osquery - bạn có thể chạy các truy vấn bằng osqueryi ngay cả khi daemon không hoạt động, trong khi vẫn sử dụng file cấu hình mà ta đã xây dựng để cấu hình môi trường.

Để chạy osquery với một file cấu hình, hãy nhập:

  • sudo osqueryi --config_path /etc/osquery/osquery.conf --verbose

Lưu ý : Chuyển osqueryiosqueryd tùy chọn dài dòng là một phương pháp hay vì nó cho phép bạn xem bất kỳ lỗi hoặc cảnh báo nào có thể chỉ ra sự cố với osquery. Và thông thường, osqueryi có thể được chạy mà không có quyền root, nhưng nếu bạn đang gọi nó trong khi chỉ định file cấu hình của daemon, bạn phải chạy nó dưới dạng root.

Hãy bắt đầu với các bước kiểm tra bảo mật cơ bản và bắt đầu từ đó. Ví dụ, ai khác ngoài bạn đang đăng nhập vào hệ thống? Tìm hiểu với truy vấn này:

  • select * from logged_in_users ;

Đầu ra sẽ như thế này:

Output
+-----------+----------+-------+------------------+------------+------+ | type | user | tty | host | time | pid | +-----------+----------+-------+------------------+------------+------+ | boot_time | reboot | ~ | 4.4.0-57-generic | 1483580419 | 0 | | runlevel | runlevel | ~ | 4.4.0-57-generic | 1483580426 | 53 | | login | LOGIN | ttyS0 | | 1483580429 | 1546 | | login | LOGIN | tty1 | | 1483580429 | 1549 | | user | root | pts/0 | 11.11.11.11 | 1483580584 | 1752 | | user | sammy | pts/1 | 11.11.11.11 | 1483580770 | 4057 | +-----------+----------+-------+------------------+------------+------+

Trong kết quả này, có hai account user thực được đăng nhập vào máy và cả hai đều từ cùng một địa chỉ IP. Địa chỉ IP đó phải là một địa chỉ IP đã biết. Nếu không, bạn nên điều tra xem thông tin đăng nhập đó đến từ đâu.

Truy vấn trước cho bạn biết ai đã đăng nhập bây giờ, nhưng còn những lần đăng nhập trước đó thì sao? Bạn có thể tìm hiểu bằng cách truy vấn bảng cuối cùng , như sau:

  • select * from last ;

Kết quả cho thấy không có gì khác thường, vì vậy không có người nào khác đăng nhập vào máy gần đây:

Output
+----------+-------+------+------+------------+------------------+ | username | tty | pid | type | time | host | +----------+-------+------+------+------------+------------------+ | reboot | ~ | 0 | 2 | 1483580419 | 4.4.0-57-generic | | runlevel | ~ | 53 | 1 | 1483580426 | 4.4.0-57-generic | | | ttyS0 | 1546 | 5 | 1483580429 | | | LOGIN | ttyS0 | 1546 | 6 | 1483580429 | | | | tty1 | 1549 | 5 | 1483580429 | | | LOGIN | tty1 | 1549 | 6 | 1483580429 | | | root | pts/0 | 1752 | 7 | 1483580584 | 11.11.11.11 | | sammy | pts/1 | 4057 | 7 | 1483580770 | 11.11.11.11 | +----------+-------+------+------+------------+------------------+

Tường lửa có được cấu hình và kích hoạt không? Tường lửa vẫn chạy chứ? Nếu nghi ngờ, hãy chạy truy vấn này để tìm hiểu:

  • select * from iptables ;

Nếu không có kết quả , thì nghĩa là firewall IPTables chưa được cấu hình . Đối với một server kết nối Internet thì đó không phải là điều tốt, vì vậy bạn nên cấu hình firewall tốt hơn.

Bạn có thể chạy lệnh trước đó, được sửa đổi để lọc trên các cột cụ thể, như sau:

  • select chain, policy, src_ip, dst_ip from iptables ;

Truy vấn đó sẽ đưa ra kết quả như sau. Tìm kiếm bất kỳ địa chỉ IP nguồn và đích bất thường nào mà bạn không cấu hình :

Output
+---------+--------+---------+-----------+ | chain | policy | src_ip | dst_ip | +---------+--------+---------+-----------+ | INPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | INPUT | ACCEPT | 0.0.0.0 | 127.0.0.0 | | INPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | INPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | INPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | INPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | INPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | INPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | INPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | INPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | FORWARD | ACCEPT | 0.0.0.0 | 0.0.0.0 | | FORWARD | ACCEPT | 0.0.0.0 | 0.0.0.0 | | OUTPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | | OUTPUT | ACCEPT | 0.0.0.0 | 0.0.0.0 | +---------+--------+---------+-----------+

Loại công việc nào được lên lịch trong crontab? Bạn đã lên lịch cho họ? Truy vấn này sẽ giúp bạn tìm thấy phần mềm độc hại đã được lên lịch chạy trong các khoảng thời gian cụ thể:

  • select command, path from crontab ;

Và kết quả sẽ có dạng này. Bất kỳ lệnh nào trong đó có vẻ đáng ngờ đều cần điều tra thêm:

Output
+----------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+ | command | path | +----------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+ | root cd / && run-parts --report /etc/cron.hourly | /etc/crontab | | root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) | /etc/crontab | | root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) | /etc/crontab | | root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) | /etc/crontab | | root if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi | /etc/cron.d/mdadm | | root test -x /etc/cron.daily/popularity-contest && /etc/cron.daily/popularity-contest --crond | /etc/cron.d/popularity-contest | +----------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+

Có file nào trên hệ thống được kích hoạt setuid không? Có khá nhiều trên bất kỳ server Ubuntu 16.04 nào, nhưng chúng là những cái nào và có cái nào không được cho là có trên hệ thống không? Các câu trả lời cho câu hỏi này sẽ giúp bạn phát hiện các mã binary được làm ngược. Chạy truy vấn này định kỳ và so sánh kết quả của nó với kết quả cũ hơn để bạn có thể theo dõi bất kỳ sự bổ sung nào. Truy vấn đó là:

  • select * from suid_bin ;

Một phần kết quả từ truy vấn này có thể trông giống như sau:

Output
+-------------------------------+----------+-----------+-------------+ | path | username | groupname | permissions | +-------------------------------+----------+-----------+-------------+ | /bin/ping6 | root | root | S | | /bin/su | root | root | S | | /bin/mount | root | root | S | | /bin/umount | root | root | S | | /bin/fusermount | root | root | S | | /bin/ntfs-3g | root | root | S | | /bin/ping | root | root | S | | /sbin/mount.ntfs-3g | root | root | S | | /sbin/mount.ntfs | root | root | S | | /sbin/unix_chkpwd | root | shadow | G | | /sbin/pam_extrausers_chkpwd | root | shadow | G | | /usr/bin/chage | root | shadow | G | | /usr/bin/locate | root | mlocate | G | | /usr/bin/chfn | root | root | S | | /usr/bin/chsh | root | root | S | | /usr/bin/newuidmap | root | root | S | | /usr/bin/write | root | tty | G | | /usr/bin/mlocate | root | mlocate | G | | /usr/bin/at | daemon | daemon | SG | | /usr/bin/sg | root | root | S |

Để xem danh sách các module kernel đã tải, hãy chạy truy vấn sau:

  • select name, used_by, status from kernel_modules where status="Live" ;

Đây là một truy vấn khác mà bạn cần chạy định kỳ và so sánh kết quả của nó với các kết quả cũ hơn để xem có điều gì thay đổi không.

Tuy nhiên, một phương pháp khác sẽ giúp bạn tìm thấy các cửa hậu trên server là chạy một truy vấn liệt kê tất cả các cổng lắng nghe. Để làm điều đó, hãy thực hiện truy vấn này:

  • select * from listening_ports ;

Trên một server mới chỉ có SSH chạy trên cổng 22 , kết quả sẽ giống như sau:

Output
+-------+------+----------+--------+---------+ | pid | port | protocol | family | address | +-------+------+----------+--------+---------+ | 1686 | 22 | 6 | 2 | 0.0.0.0 | | 1686 | 22 | 6 | 10 | :: | | 25356 | 0 | 0 | 0 | | +-------+------+----------+--------+---------+

Trên server của bạn, nếu kết quả chỉ bao gồm các cổng mà bạn biết server nên lắng nghe, thì không có gì phải lo lắng. Nhưng nếu có các cổng khác đang mở, bạn cần điều tra xem các cổng đó là gì.

Để xem hoạt động của file trên server , hãy chạy truy vấn sau:

  • select target_path, action, uid from file_events ;

Đầu ra hiển thị tất cả hoạt động file gần đây trên server , cùng với id user chịu trách nhiệm cho hoạt động.

Output
+---------------------------+---------+------+ | target_path | action | uid | +---------------------------+---------+------+ | /home/sammy/..bashrc.swp | CREATED | 1000 | | /home/sammy/..bashrc.swp | UPDATED | 1000 | | /home/sammy/..bashrc.swp | UPDATED | 1000 | | /home/sammy/.bashrc | UPDATED | 1000 | | /home/sammy/..bashrc.swp | DELETED | 1000 | | /home/sammy/..bashrc.swp | CREATED | 1000 | | /home/sammy/..bashrc.swp | UPDATED | 1000 | | /home/sammy/..bashrc.swp | UPDATED | 1000 | | /home/sammy/.bashrc | UPDATED | 1000 | | /home/sammy/.bashrc | UPDATED | 1000 | | /home/sammy/.bashrc | UPDATED | 1000 | | /home/sammy/..bashrc.swp | DELETED | | | /etc/test_file.txt | DELETED | | | /home/sammy/.bash_history | UPDATED | 1000 | | /home/sammy/.bash_history | UPDATED | 1000 | | /etc/secret_file.md | CREATED | 0 | | /etc/secret_file.md | UPDATED | 0 | | /etc/secret_file.md | UPDATED | 0 | +---------------------------+---------+------+

Có rất nhiều truy vấn như vậy mà bạn có thể chạy trên server của bạn để biết các vấn đề bảo mật có thể xảy ra.

Nếu bạn không chắc chắn về schemas của bảng, hãy sử dụng lệnh sau để tìm hiểu:

  • .schema name-of-table

Và bạn có thể liệt kê các bảng có sẵn với:

  • .tables

Có rất nhiều ví dụ khác trong các gói đi kèm với osquery và nhiều ví dụ được thiết kế để chạy định kỳ bởi osqueryd . Trong phần tiếp theo, bạn sẽ học cách khởi động daemon để chạy các truy vấn đó.

Bước 6 - Chạy osqueryd

osqueryd , daemon, cho phép osquery chạy các truy vấn theo khoảng thời gian đã định. Những truy vấn đó bao gồm những truy vấn bạn đã cấu hình ở Bước 4, những truy vấn trong gói mà ta đã chỉ định ở bước đó và trong gói FIM mà ta đã cấu hình ở Bước 5. Nếu bạn chưa nghiên cứu chúng, bây giờ là thời điểm tốt để thực hiện xem xét nội dung của /usr/share/osquery/packs .

Kết quả do osqueryd tạo ra được ghi vào một file có tên là osqueryd.results.log trong folder /var/log/osquery . Ngoài hộp, file đó không tồn tại. Nó chỉ được tạo khi khởi động daemon và bắt đầu tạo kết quả.

Bạn có thể khởi động osqueryd bằng systemctl hoặc osqueryctl . Cả hai đều hoàn thành cùng một điều, vì vậy không quan trọng bạn sử dụng cái nào. osqueryd sẽ kiểm tra sự tồn tại của file cấu hình khi nó khởi động và thông báo cho bạn nếu nó không tìm thấy. Nó sẽ vẫn chạy mà không có file cấu hình, mặc dù nó sẽ không làm được gì hữu ích.

Nhưng vì bạn đã cài đặt file cấu hình, tất cả những gì bạn cần làm ở đây là khởi động daemon:

  • sudo systemctl start osqueryd

Hoặc bạn có thể gõ:

  • sudo osqueryctl start

Trong vài phút sau khi khởi động daemon, kích thước của /var/log/osquery/osqueryd.results.log sẽ tăng lên. Bạn có thể thấy điều đó đang xảy ra bằng lệnh và lặp lại lệnh tiếp theo:

  • ls -lh /var/log/osquery/osqueryd.results.log

Kích thước ngày càng tăng của file cho biết rằng kết quả của các truy vấn đã lên lịch đang được ghi vào đĩa. Thật không may, osquery không có cơ sở cảnh báo như OSSEC , vì vậy bạn không thể xem kết quả của các truy vấn đã lên lịch trừ khi bạn xem file kết quả. Bạn có thể làm điều đó bằng lệnh tail , lệnh này sẽ liên tục truyền trực tuyến 10 dòng cuối cùng của file đó lên màn hình của bạn:

  • sudo tail -f /var/log/osquery/osqueryd.results.log

Nhấn CTRL+C để dừng theo dõi log .

Về lâu dài, bạn cần gửi log kết quả truy vấn đến một nền tảng phân tích bên ngoài mà bạn có thể làm việc cùng. Các tùy chọn nguồn mở khả thi bao gồm Doorman , ZentralElasticSearch .

Kết luận

osquery là một công cụ mạnh mẽ, hữu ích để chạy các truy vấn một lần và được lập lịch sử dụng cú pháp SQL quen thuộc. osqueryi là thành phần osquery để viết các truy vấn một lần, trong khi osqueryd là để lập lịch các truy vấn. Để hiểu kết quả của các truy vấn đã lên lịch, bạn cần chuyển chúng đến một nền tảng phân tích log bên ngoài. Bạn có thể tìm thêm thông tin về osquery tại https://osquery.io/ .


Tags:

Các tin liên quan

Cách cài đặt và cấu hình thông báo bảo mật OSSEC trên Ubuntu 14.04
2014-12-23
Cách sử dụng OpenVAS để kiểm tra tính bảo mật của hệ thống từ xa trên Ubuntu 12.04
2014-01-27