osquery是一个安全开源工具,它采用操作系统并将其转换为一个巨大的数据库,使用可以使用类似SQL的语句进行查询的表。通过这些查询,您可以监控文件完整性,检查防火墙的状态和配置,执行目标服务器的安全审核等。
它是一个跨平台的应用程序,支持最新版本的macOS,Windows 10,CentOS和Ubuntu。它被官方描述为“基于SQL的操作系统仪器,监控和分析”框架,起源于Facebook。
使用osquery,您可以运行与服务器相似的命令select * from logged_in_users
;,并返回如下结果:
+-----------+----------+-------+------------------+------------+------+
| 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的部署或配置的帮助程序脚本。它也可以用来代替操作系统的服务管理器来启动/停止/重启osqueryd
。osqueryi
与osqueryd
都是独立的工具。他们之间并没有联系,你可以使用一个而不用另一个。运行每个标志和选项所需的大多数标志和选项都是相同的,您可以使用osqueryd
的配置文件启动osqueryi
,这样您就可以在不使用大量命令行开关的情况下自定义环境。。
在本教程中,您将:
osqueryi
和osqueryd
。osqueryi
来查找安全问题。由osqueryd守护程序生成的日志旨在运送到外部日志记录端点,这些端点需要其他专业知识才能正确设置和使用。本教程不会介绍该配置,但您将学习如何配置和运行守护程序并在本地保存结果。
要完成本教程,您需要具备以下内容:
没有服务器的用户可以购买和使用腾讯云服务器或者直接在腾讯云实验室Ubuntu服务器上机体验 ,您还应该具有对SQL语法的基本了解。
您可以通过从源代码编译它或使用软件包管理器来安装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
安装后的osquery并不是非常有用; 它不是一个即插即用的应用程序。无论您是打算使用交互式shell还是守护进程,都必须从命令行或通过配置文件传递一些标志和选项。要查看守护程序可用的标志和选项,请输入:
$ osqueryd --help
输出将包括许多命令行标志和配置选项。下面显示的是本文使用的测试服务器的部分输出结果。
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
要查看仅适用于交互式shell的其他命令行标志,请输入:
$ osqueryi --help
运行osqueryi
是列出和查询开箱后的osquery表的最简单方法。例如,使用以下命令启动它:
$ osqueryi --verbose
这会将您置于交互式shell中,您将看到类似于此的输出结果:
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>
由于输出中的错误和信息消息,很明显osquery的所有部分都无法正常运行。某些查询,例如select * from yara ;
没有返回任何内容,表明该表尚未填充数据。
其他查询,如select time, severity, message from syslog;
将返回如下消息,这表明我们需要做更多工作:
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
我们将对服务器的配置进行一些修改以解决此问题。
输入以下命令退出控制台:
osquery>; .exit
在下一节中,我们将修改osquery需要正常运行的操作系统的各个方面。
在此步骤中,我们将修改操作系统的syslog应用程序,以允许osquery使用和查询系统日志。在Ubuntu 16.04上,这意味着修改Rsyslog配置文件。您需要进行的唯一修改是在配置文件中附加几行代码。
首先,打开/etc/rsyslog.conf
文件:
$ sudo nano /etc/rsyslog.conf
我们需要添加一些配置行来告诉Rsyslog要写入哪个管道,以及要写入该管道的syslog参数。在默认情况下,管道为/var/osquery/syslog_pipe
。然后,osquery从写入该管道的信息中填充其syslog
表。
将以下行附加到文件:
/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")
保存并关闭文件。要应用更改,请重新启动syslog守护程序:
$ sudo systemctl restart rsyslog
现在让我们创建一个配置文件,设置一些默认选项并安排一些查询。
创建配置文件可以更容易地运行osqueryi
。osqueryi
可以从位于其/etc/osquery/osquery.conf
中的配置文件中读取这些选项,而不必传递大量命令行选项。当然,配置文件也可供守护进程使用。
配置文件还包含需要按计划执行的查询。但是,您可以按计划运行的大多数查询都将作为所谓的packs发送。软件包packs是位于/usr/share/osquery/packs
目录中的文件。
osquery没有配置文件,但是有一个示例配置文件可以复制到/etc/osquery
并修改。但是,该文件没有在Ubuntu等Linux发行版上运行它所需的所有选项,因此我们将创建自己的文件。
配置文件有三个部分:
osqueryi
。以下是我们将用于配置文件的选项列表,它们的含义以及我们将其设置的值。此选项列表是足以运行osqueryi
和osqueryd
在Ubuntu 16.04 annd其它Linux发行版。
您已经了解了如何查看osqueryi
和osqueryd
可用的所有命令行标志和配置选项,但上述选项足以在此服务器上运行osquery。
使用以下命令创建并打开配置文件:
$ 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
/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
}
},
在计划的查询之后,您可以添加称为装饰器(decorators)的特殊查询,这些查询是将数据添加到其他计划查询的查询。此处显示的装饰器查询将将运行osquery的主机的UUID和用户的用户名添加到每个计划的查询中。
将这些行附加到文件:
/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
输出结果应如下所示:
I0104 11:11:46.022858 24501 rocksdb.cpp:187] Opening RocksDB handle: /var/osquery/osquery.db
如果出现错误,输出将指示错误的位置,以便您可以修复它。
获得有效的配置文件后,您可以继续配置文件完整性监视所需的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
然后修改包部分以包含新文件:
/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
查询系统。
有很多地方可以使用osquery。在本节中,您将使用osqueryi交互式shell 对系统执行各种安全检查。请记住,此时,我们仍然没有启动osquery守护程序。这就是osquery的优点
即使守护程序未处于活动状态,您也可以使用osqueryi来运行查询,同时仍然使用我们构建的配置文件来配置环境。
要osquery使用配置文件启动,请输入:
$ sudo osqueryi --config_path /etc/osquery/osquery.conf --verbose
注:传递
osqueryi
和osqueryd
的verbose选项是一个好的做法,因为它可以让你看到任何可能表明osquery问题的错误或警告。通常,osqueryi可以在没有root权限的情况下运行,但如果在指定守护程序的配置文件时调用它,则必须以root身份运行它。
让我们从基本的安全检查开始,然后从那里开始工作。例如,您以外的其他人现在登录系统了吗?找出这个查询:
osquery>; select * from logged_in_users ;
输出结果应如下所示:
+-----------+----------+-------+------------------+------------+------+
| 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地址。如果不是,您应该调查登录的来源。
上一个查询会告诉您现在登录的是谁,但之前登录的是什么?您可以通过查询最后一个表来查找,如下所示:
osquery>; select * from last ;
输出结果没有任何异常,因此最近没有其他人登录过这台机器:
+----------+-------+------+------+------------+------------------+
| 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 |
+----------+-------+------+------+------------+------------------+
防火墙是否已配置并激活?防火墙是否仍在运行?如果有疑问,请运行此查询以查找:
osquery>; select * from iptables ;
如果没有输出,则表示尚未配置IPTables防火墙。对于面向Internet的服务器而言,这不是一件好事,因此您可以更好地配置防火墙。
您可以运行上一个命令,修改为对特定列进行过滤,如下所示:
osquery>; select chain, policy, src_ip, dst_ip from iptables ;
该查询应该提供如下输出结果。查找未配置的任何异常源和目标IP地址:
+---------+--------+---------+-----------+
| 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中安排了哪些类型的作业?你安排好了吗?此查询将帮助您查找已按计划间隔运行的恶意软件:
osquery\>: select command, path from crontab ;
输出结果应采用如下形式。任何看起来可疑的命令都需要进一步调查:
+----------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+
| 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的文件?在任何Ubuntu 16.04服务器上都有相当多的,但是它们是哪些,是否有任何不应该出现在系统上?这些问题的答案将帮助您检测backdoored二进制文件。定期运行此查询并将其结果与较旧的结果进行比较,以便您可以密切关注任何添加。该查询如下:
osquery>: select * from suid_bin ;
此查询的部分输出结果可能如下所示:
+-------------------------------+----------+-----------+-------------+
| 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 |
要查看已加载的内核模块列表,请运行以下查询:
osquery>; select name, used_by, status from kernel_modules where status="Live";
这是您希望定期运行的另一个查询,并将其输出结果与较旧的结果进行比较,以查看是否有任何更改。
另一种可以帮助您在服务器上找到后门的方法是运行一个列出所有侦听端口的查询。为此,请执行以下查询:
osquery>; select * from listening_ports ;
在只有端口22上运行SSH的新服务器上,输出结果如下所示:
+-------+------+----------+--------+---------+
| pid | port | protocol | family | address |
+-------+------+----------+--------+---------+
| 1686 | 22 | 6 | 2 | 0.0.0.0 |
| 1686 | 22 | 6 | 10 | :: |
| 25356 | 0 | 0 | 0 | |
+-------+------+----------+--------+---------+
在您的服务器上,如果输出只包含您知道服务器应该监听的端口,则无需担心。但如果有其他端口打开,您将需要调查这些端口是什么。
要查看服务器上的文件活动,请运行以下查询:
osquery>; select target_path, action, uid from file_events ;
输出结果显示服务器上的所有最近文件活动,以及负责该活动的用户标识。
+---------------------------+---------+------+
| 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 |
+---------------------------+---------+------+
有许多查询,例如您可以在服务器上运行的查询,以了解可能存在的安全问题。
如果您不确定表的架构,请使用以下命令查找:
osquery>; .schema name-of-table
您可以列出可用的表格:
osquery>: .tables
在osquery附带的包中有更多的例子,而且很多都是为了定期运行而设计的osqueryd。在下一节中,您将学习如何启动守护程序来运行这些查询。
第六步 - 运行osqueryd
守护进程osqueryd允许osquery以设定的时间间隔运行查询。这些查询包括您在第四步中配置的查询,我们在该步骤中指定的包中的查询,以及我们在第五步中配置的FIM包中的查询。如果您尚未研究它们,现在是时候应该看一下/usr/share/osquery/packs
的内容。
osqueryd生成的结果将写入/var/log/osquery
目录中调用的文件osqueryd.results.log
中。开箱后,该文件不存在。它仅在守护程序启动时创建并开始生成结果。
你可以开始使用systemctl或osqueryctl启动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停止拖尾日志。
从长远来看,您可能希望将查询结果日志发送到可以使用的外部分析平台。
osquery是一个功能强大的工具,对于使用熟悉的SQL语法运行一次性和预定查询非常有用。osqueryi是用于编写一次性查询的osquery组件,而osqueryd用于调度查询。
参考文献:《How To Monitor Your System Security with osquery on Ubuntu 16.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。