如何在Ubuntu 16.04上使用osquery监控系统安全

・1 分钟阅读

介绍

OSQuery是一个开源安全工具,它采用监控操作系统并将它转换为一个巨大的数据库,可以使用SQL-like语句查询表,使用这些查询,可以监视文件完整性,检查防火墙的状态和配置,执行目标服务器的安全审计以及更多信息。

它是一个跨平台的应用程序,支持最新版本的macOS ,windows 10 ,CentOS和Ubuntu ,官方称之为SQL驱动的操作系统检测、监控和分析"框架,起源于Facebook 。

使用osquery,你可以运行以下命令 select * from logged_in_users ; 根据你的服务器,并返回如下结果:


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 |
+-----------+----------+-------+------------------+------------+------+

如果这对你有吸引力,那么你应该喜欢使用osquery作为服务器的系统安全监视和入侵检测工具。

安装osquery可让您访问以下组件:

osqueryi :交互式osquery shell,用于执行即席查询
osqueryd :在后台调度和运行查询的守护进程
osqueryctl :用于测试osquery的部署或配置的helper脚本,它还可以使用系统管理器的操作服务来start/stop/restart osqueryd

osqueryiosqueryd是独立的工具,每个参数和选项都是相同的,你可以使用osqueryd的配置文件来启动osqueryi

在本教程中,你将:

安装osquery ,配置osquery需要正常运行的操作系统方面(如Rsyslog ),设置osqueryiosqueryd都可以使用的配置文件,使用osquery包,这是可以添加到计划中的预定义查询组,使用osqueryi执行即席查询来查找安全问题,启动守护进程,以便,它可以自动运行查询,

osqueryd生成的日志将被发送到外部日志端点,该端点需要额外专门的技术才能设置和使用,本教程不会涵盖该配置,你将学习如何配置和运行守护程序以及将结果保存在本地。

前提条件

要完成本教程,你需要有以下位置:

一台 Ubuntu 16.04服务器,配置了有sudo权限的非root用户和防火墙,按照Ubuntu 16.04初始安装指南设置。

步骤1-在服务器上安装osquery

通过从源代码编译osquery或者使用软件包管理器来安装它,由于官方Ubuntu库中没有可安装的包,所以,你必须向系统中添加项目Ubuntu库的正式版本。

首先,添加存储库密钥的公共:


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

然后添加存储库:


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

更新软件包数据库:


sudo apt-get update

最后,安装osquery :


sudo apt-get install osquery

它不是即插即用的应用程序,无论你打算使用交互式shell还是守护进程,都必须通过命令行或通过配置文件传递一些标志和选项,要查看守护进程可用的标志和选项,请键入:


osqueryd --help

输出将包括许多命令行标志和配置选项,下面显示了用于本文的测试服务器的部分输出。


Outputosquery 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

要查看只有交互式shell可用的其他命令行标志,请键入:


osqueryi --help


osqueryi --verbose

这会将你置于交互式shell中,你将看到类似于下面这样的输出:


OutputI0105 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>

输出中存在错误和信息消息,很明显,osquery的所有部分都不能正常工作,某些查询,例如 select * from yara ; 如果没有返回数据,则表示表没有被填充。

其他查询,例如 select time, severity, message from syslog ; 将返回如下消息,表明我们需要做的工作很多:


OutputW1202 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

我们对服务器的配置进行一些修改,以解决此问题。

键入以下命令退出控制台:


.exit

在下一节中,我们修改osquery正常运行所需的操作系统方面。

步骤2-允许osquery访问系统日志

在这一步中,我们修改操作系统的syslog应用程序,以允许osquery使用和查询系统日志,在16.04上,这意味着修改Rsyslog配置文件,你惟一需要做的修改是在配置文件中添加几行代码。

请打开/etc/rsyslog.conf文件:


sudo nano /etc/rsyslog.conf

我们需要添加一些配置行,告诉Rsyslog要写入哪个管道,以及要写入那个管道的syslog参数,默认情况下,管道为/var/osquery/syslog_pipe ,然后osquery从写入到该管道的信息填充syslog表。

将以下行附加到该文件:


/etc/rsyslog.conftemplate(
 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")

保存并关闭文件,若要应用更改,请重新启动syslog守护进程:


sudo systemctl restart rsyslog

现在创建一个配置文件来设置一些默认选项,并且安排一些查询。

步骤3创建osquery配置文件

创建配置文件使运行osqueryi变得更容易,osqueryi可以从/etc/osquery/osquery.conf中的配置文件读取这些选项,而不必传递大量的命令行选项,当然,这个配置文件也可以用于守护进程。

配置文件还包含需要在计划中执行的查询,但是,可以按计划运行的大多数查询都是以包的形式发送的,包是位于/usr/share/osquery/packs目录中的文件。

osquery没有配置文件,但是有一个例子配置文件可以复制到/etc/osquery,并且可以修改它,但是,该文件没有在Ubuntu等Linux发行版上运行它所需的所有选项,因此我们将创建自己的文件。


sudo nano /etc/osquery/osquery.conf

配置文件使用json格式,将以下内容复制到该文件中:

/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" 
 },

配置文件的下一部分是调度部分,每个查询都是按键或名称标识的,它必须是文件中唯一的,跟随运行的查询,以秒为单位,我们将添加一个计划查询,每300秒查看一次crontab表。

将这些行添加到配置文件中:

/etc/osquery/osquery.conf

"schedule": {
"crontab": {
"query":"SELECT * FROM crontab;",
"interval": 300
 }
 },

你可以编写任意数量的查询,例如,要添加更多的查询,请添加以下行:

/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
 }
 },

在计划的查询之后,你可以添加称为装饰器的特殊查询,这些查询将数据放在其他计划的查询之前。

将这些行附加到文件:

/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;"
 ]
 },

最后,我们可以将osquery指向包含更多特定查询的包列表,每个osquery安装都有一个默认的包集,位于/usr/share/osquery/packs目录中,其中一个包用于macOS,而别的则用于Linux系统,你可以从默认位置使用包,也可以将它们复制到/etc/osquery目录。

将这些行添加到文件以完成文件。

/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"
 }
}

注意结束的大括号,它匹配文件第一行的打开大括号,你完成的配置文件应如下所示:

/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"
 }
}

保存并关闭文件,然后使用以下命令对它进行验证:


sudo osqueryctl config-check

输出应如下所示:


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

如果出现错误,输出将指示错误的位置,以便你可以修复它。

一旦有了有效的配置文件,就可以继续配置文件完整性监视所需的osquery包。

4步骤-设置osquery文件完整性监视包

监视服务器上文件的完整性是监视它系统安全性的关键方面。为此,osquery提供了一个现成的解决方案。

你在上一节中添加到配置中的包将从框中删除,在本节中,我们向列表中添加一个包,它将包含将用于文件完整性监视的查询和指令,对于这个练习,我们调用文件fim.conf

创建此文件并在编辑器中打开它:


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

我们创建一个包,每300秒在/home/etc/tmp目录中监视文件事件,包文件的完整设置如下面的文件清单所示,将它复制到文件中。


/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/%%"
 ]
 }
}

保存并关闭文件。

要使新文件及它规则可用于osquery,请在/etc/osquery/osquery.conf末尾的包列表中引用它,打开文件进行编辑:


sudo nano /etc/osquery/osquery.conf

然后修改pack部分以包含新文件:


/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"
 }

保存并关闭文件,为了确保你没有在文件中犯错,请再次验证:


sudo osqueryctl config-check

现在开始使用osqueryi查询系统。

第5步使用osqueryi执行临时安全检查

osquery在很多地方都派上用场,在本节中,你将使用osqueryi,交互式shell在你的系统上执行各种安全检查,请记住,目前我们还没有启动osquery守护进程,即使是osquery,也可以使用osqueryi运行查询,但是,仍然使用我们构建的配置文件来配置环境。

要使用配置文件启动osquery,请键入:


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

注意:通过osqueryiosqueryd传递详细选项是一个好习惯,因为,它可以让你看到可能表示osquery问题的错误或警告,通常,osqueryi在没有root权限的情况下运行,但是如果在指定守护进程文件的配置时调用它,则必须将它作为root运行。

从基本的安全检查开始,例如,除了你之外,还有谁登录到系统中? 使用以下查询查找:


select * from logged_in_users ;

输出应如下所示:


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 |
+-----------+----------+-------+------------------+------------+------+

在这个输出中,有两个真正的用户帐户登录到计算机,它们都是同一个IP地址,IP地址应该是一个已知的IP地址,如果不是,你应该调查登录的来源。

上一个查询告诉你现在谁登录,但是谁最后登录了呢?这可以通过查询最后一个表找到,如下所示:


select * from last ;

输出指示没有普通的消息,所以,最近没有其他人登录到该机器:


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 |
+----------+-------+------+------+------------+------------------+

防火墙是否已配置并激活? 防火墙仍在运行? 如果有疑问,请运行此查询来查找:


select * from iptables ;

如果没有输出,那么它意味着IPTables防火墙还没有配置,对于面向互联网的服务器来说,这不是一件好事,所以,你最好配置防火墙。

你可以运行上一个命令,修改为筛选特定列,如下所示:


select chain, policy, src_ip, dst_ip from iptables ;

查询应该提供如下输出,查找未配置的异常源和目标IP地址:


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 |
+---------+--------+---------+-----------+

在crontab中计划的作业类型?


select command, path from crontab ;

而输出应该采用这种形式,在那里任何可疑的命令都需要进一步调查:


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 |
+----------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+

系统上是否存在启用了setuid的文件? 这些问题的答案将帮助你检测二进制后门文件。定期运行此查询并将它结果与旧结果进行比较,以便你可以监视添加的,查询为:


select * from suid_bin ;

此查询的部分输出可能如下所示:


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 |

要查看已加载的内核模块列表,请运行以下查询:


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

这是你希望定期运行的另一个查询,并将它输出与旧的结果进行比较,以查看是否已更改。

另一种方法可以帮助你在服务器上找到后门,它是运行一个列出所有监听端口的查询,要执行这个操作,请执行以下查询:


select * from listening_ports ;

在一个只在端口22上运行的新服务器上,输出将如下所示:


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

在你的服务器上,如果输出只包含了你知道服务器应该监听的端口,则无需担心,但是如果打开了其他端口,你将希望调查这些端口是什么。

要查看服务器上的文件活动,请运行以下查询:


select target_path, action, uid from file_events ;

输出显示服务器上所有最近的文件活动,以及负责该活动的用户id 。


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 |
+---------------------------+---------+------+

可以在服务器上运行许多查询,以便了解可能存在的安全问题。

如果不确定表的架构,请使用以下命令查找:


.schema name-of-table

你可以使用以下方法列出可用表:


.tables

在下一节中,你将学习如何启动守护进程来运行这些查询。

第6步运行osqueryd

守护进程osqueryd允许osquery按设定的时间间隔运行查询,

osqueryd生成的结果被写到/var/log/osquery目录下的一个叫做osqueryd.results.log的文件中,不存在,该文件不存在,它只有在守护进程启动,并且开始生成结果时才会被创建。

你可以使用systemctlosqueryctl启动osqueryd ,两种方法都完成相同的操作,所以,不管使用哪一种,osqueryd会在启动时检查配置文件是否存在,并且如果它没有找到,则警告你。

但是由于你已经设置了配置文件,所以,你需要做的就是启动守护进程:


sudo systemctl start osqueryd

或者你可以键入:


sudo osqueryctl start

在启动守护进程后的几分钟内,/var/log/osquery/osqueryd.results.log 你可以看到通过键入和重复下一个命令,可以看到发生的情况:


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

文件的大小增加表示已安排查询的结果正在写入磁盘,不幸的是,osquery没有像OSSEC这样的警报工具,所以,你无法看到计划查询的结果,除非你查看结果文件,可以通过tail命令进行此操作,它将连续地将文件的最后10行传输到屏幕:


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

CTRL+C停止跟踪日志。

长期使用,你可以将查询结果日志发送到一个外部分析平台,你可以使用包括DoormanZentralElasticsearch

结束语

osquery是一个功能强大的工具,对于使用熟悉的SQL语法运行一次性查询和计划查询非常有用,osqueryi是用来写一个查询的osquery组件,而osqueryd则用于调度查询,为了了解计划查询的结果,你需要将它们发送到外部日志分析平台。

讨论 (1)
Yangchunyan110 profile image