针对Linux 文件完整性监控的实现
摘要
计算机和互联网是20世纪以来最伟大的发明之一,随着计算机技术的不断发展,人们的生活方式发生了巨大的变化。计算机和互联网的发展给人们的生产生活带来了极大的便利,但同时也存在一定的安全隐患。在人们借助互联网展开一系列活动的时候,个人信息和交易信息就会在网络中储存并传输。网络安全方面还存在一定的隐患,当前各种病毒层出不穷,黑客袭击事件也十分常见,如何去保护网络信息安全是当前全人类共同关注的重点问题。本文从网络安全的角度出发来Linux系统信息安全进行分析。osquery是一个安全开源工具,它采用操作系统并将其转换为一个巨大的数据库,使用可以使用类似SQL的语句进行查询的表。通过这些查询,可以监控文件完整性,检查防火墙的状态和配置,执行目标服务器的安全审核等。它是一个跨平台的应用程序,支持最新版本的macOS,Windows 10,CentOS和Ubuntu。它被官方描述为“基于SQL的操作系统仪器,监控和分析”框架,起源于Facebook。本设计将会利用osquery 去实时的监控linux 系统,对系统做出保护,可以快速的响应非法分子对系统的破坏。
关键词:osquery 文件监控 日志分析 信息安全
目录
第一章 绪论
1. 1 Linux文件完整性的重要性
Linux 支持的文件系统种类繁多,他们为用户的数据存储和管理提供了良好的操作和使用界面。在文件系统中,存在着文件 / 目录访问权限管理和控制. 加密文件系统等的安全机制和问题需要考虑,本设计将详细介绍保证 Linux 文件系统安全的技术和方法。在黑客攻击服务器中会对服务器的文件进行修改或者删除,只有掌握了对文件完整性的实时监控,才可以的有效的防御黑客的攻击,和应急响应的速度。
1. 2 项目概况
当前形势是特别发达的信息化时代,为了防止信息的泄露和系统遭受攻击,可以用最快的速度响应系统出现的问题,所以本设计将要使用osquery监控系统和ELK日志分析系统,搭建一个可以实时的文件监控系统监控的属性变化主要包括:权限. 属主. 属组. 文件大小. 创建时间. 最后修改时间. 最后访问时间。
在本设计将会涉及到:
• 安装osquery。
• 配置操作系统的各个方面,如Rsyslog,osquery需要正常运行。
• 设置可通过两种使用的配置文件osqueryi和osqueryd。
• 使用osquery 包,它是可以添加到计划中的预定义查询组。
• 使用特殊查询osqueryi来查找安全问题。
• 启动守护程序,以便它可以自动运行查询。
• 日志转发。
1. 3 Osquery 背景
osquery是Windows,OS X如图macOS,Linux和FreeBSD的操作系统检测框架。这些工具使低级操作系统分析和监控既高效又直观。
osquery将操作系统公开为高性能关系数据库。这允许编写SQL查询以探索操作系统数据。使用osquery,SQL表表示抽象概念,例如运行进程,加载的内核模块,开放网络连接,浏览器插件,硬件事件或文件哈希。
osquery,可以访问以下组件:
osqueryi:交互式osquery shell,用于执行即席查询。
osqueryd:用于在后台调度和运行查询的守护程序。
osqueryctl:用于测试osquery的部署或配置的帮助程序脚本。它也可以用来代替操作系统的服务管理器来启动/停止/重启osqueryd。
osqueryi与osqueryd都是独立的工具。他之间并没有联系,你可以使用一个而不用另一个。运行每个标志和选项所需的大多数标志和选项都是相同的,可以使用osqueryd的配置文件启动osqueryi,这样就可以在不使用大量命令行开关的情况下自定义环境。
第二章 安装使用osquery 监控系统
2. 1 安装osquery
在centos7 上安装osquery
- 将osquery密钥添加到系统。
curl -L https://pkg. osquery. io/rpm/GPG | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery如图2-1所示。
图2-1 添加秘钥到系统
- 添加并启用osquery存储库,然后安装该软件包
yum-config-manager --add-repo https://pkg. osquery. io/rpm/osquery-s3-rpm. repo如图2-2所示。
图2-2 添加并启用osquery存储库
- 安装osquery-s3 Sudo yum-config-manager --enable osquery-s3-rpm如图2-3所示。
图2-3 安装osquery-s3
- 使用yum 安装 osquery Sudo yum install osquery如图2-4所示。
图2-4 安装osquery
5. 安装后的osquery并不是可以立即使用的; 它不是一个即开即用的应用程序。无论是使用交互式shell还是守护进程,都必须从命令行或通过配置文件传递一些标志和选项。要查看守护程序可用的标志和选项。
6. 运行osqueryi是列出和查询打开后的osquery表的最简单方法。例如,使用以下命令启动它:osqueryi –verbose 如图2-5所示。
图2-5 启动osqueryi
7. 其他查询,如select time, severity, message from syslog;将返回如下消息,这说明还有好多配置没有完成。如图2-6所示。
图2-6 time查询
2. 1. 1配置osquery访问系统日志
修改操作系统的syslog应用程序,以允许osquery使用和查询系统日志。在centos7上,这需要修改Rsyslog配置文件。需要进行的唯一修改是在配置文件中附加几行代码。
首先,打开/etc/rsyslog. conf文件:sudo vim /etc/rsyslog. conf
添加一些配置行来告诉Rsyslog要写入哪个管道,以及要写入该管道的syslog参数。在默认情况下,管道为/var/osquery/syslog_pipe。然后,osquery从写入该管道的信息中填充其syslog表。
将以下行附加到文件:如图2-7所示。
/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")
图2-7 添加管道配置
保存并关闭文件。要应用更改,重新启动syslog守护程序:
sudo systemctl restart rsyslog
2. 2 配置与管理osquery
2.2.1 修改配置文件
创建配置文件可以更容易地运行osqueryi。osqueryi可以从/etc/osquery/osquery. conf中的配置文件中读取这些选项,而不必传递大量命令行选项。当然,配置文件也可供守护进程使用。
配置文件还包含需要按计划执行的查询。但是,可以按计划运行的大多数查询都将作为所谓的packs发送。软件包packs是位于/usr/share/osquery/packs目录中的文件。
osquery没有配置文件,但是有一个示例配置文件可以复制到/etc/osquery并修改。但是,该文件没有在Ubuntu等Linux发行版上运行它所需的所有选项,因此创建自己的文件。
- 使用以下命令创建并打开配置文件:
sudo vim /etc/osquery/osquery. conf
使用JSON格式配置文件。将以下内容复制到配置文件中:如图2-8所示。
/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"
},
图2-8 修改配置文件
配置文件的下一部分是调度部分。每个查询都由一个键或名称标识,该键或名称在文件中必须是唯一的,然后是要运行的查询以及运行查询的间隔如图以秒为单位。
- 添加一个每300秒查看crontab表的预定查询,将这些行添加到配置文件中:如图2-9所示。
/etc/osquery/osquery. conf
"schedule": {
"crontab": {
"query": "SELECT * FROM crontab;",
"interval": 300
}
},
图2-9 添加配置
3. 编写任意数量的查询。只需保持正确的格式。如果不这样做,该文件将无法通过验证。例如,要添加更多查询,请添加以下行:如图2-10所示。
/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
}
},
图2-10 任意数量查询
4. 查询之后,可以添加称为装饰器如图decorators的特殊查询,这些查询是将数据添加到其他计划查询的查询。此处显示的装饰器查询将将运行osquery的主机的UUID和用户的用户名添加到每个计划的查询中。
将这些行附加到文件:如图2-11所示。
/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;"
]
},
图2-11 添加查询计划
5. osquery指向包含更多特定查询的包列表。每次安装osquery都会在/usr/share/osquery/packs中的提供一组默认包。其中一个包用于macOS,其余用于Linux系统。虽然可以使用默认位置的包,但也可以将它复制到/etc/osquery目录中。
将这些行添加到文件中以完成该文件。如图2-12所示。
/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"
}
}
图2-12 特定查询
保存并关闭该文件,然后使用以下命令对其进行验证:sudo osqueryctl config-check
2.2.2 osquery文件完整性监
密切关注服务器上文件的完整性是监控其系统安全性的关键方面。为此,osquery提供了一个现成的解决方案。将向列表中添加一个包,其中包含将用于文件完整性监视的查询和指令,将调用该文件fim. conf。
创建此文件并在编辑器中打开它:sudo vim /usr/share/osquery/packs/fim. conf
1. 创建一个软件包,每隔300秒监视/home,/etc以及/tmp目录中的文件事件。软件包文件的完整设置显示在以下文件列表中。将其复制到文件中。如图2-13所示。
/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/%%"
]
}
}
图2-13 配置监视时间
2. 使新文件及其规则可用于osquery,请在/etc/osquery/osquery. conf末尾的包列表中引用它。打开文件进行编辑:
$ sudo vim /etc/osquery/osquery. conf
然后修改包部分以包含新文件:如图2-14所示。
/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"
}
图2-14 新文件用于osquery
保存并关闭文件。只是为了确保没有在文件中出错,再次验证它:
$ sudo osqueryctl config-check,现在就可以开始使用osqueryi查询系统。
2.2.3 osqueryi安全检查
有很多地方可以使用osquery。使用osqueryi交互式shell对系统执行各种安全检查。请记住,此时,没有启动osquery守护程序。这就是osquery的优点。
即使守护程序未处于活动状态,也可以使用osqueryi来运行查询,同时仍然使用构建的配置文件来配置环境。
- osquery使用配置文件启动,配置如下:如图2-15所示。
$ sudo osqueryi - config_path / etc / osquery / osquery 。conf – verbose
图2-15 使用配置文件启动
注:传递osqueryi状语从句:osqueryd的冗长。选项是一个好的做法,因为它可以让你看到任何可能表明osquery问题的错误或警告通常,osqueryi可以在没有根权限的情况下运行,但如果在指定守护程序的配置文件时调用它,则必须以root身份运行它。
2. 管理员以外的其他人现在登录系统状况,查询命令:osquery>; select * from logged_in_users ;
输出结果应如下所示:如图2-16所示。
图2-16 登录系统状况
在此输出中,有两个真实用户帐户登录到计算机,它都来自相同的IP地址。该IP地址应该是已知的IP地址。如果不是,应该调查登录的来源。
3. 上一个查询会告诉现在登录的是谁,但之前登录的是什么?可以通过查询最后一个表来查找,如下所示:如图2-17所示。
osquery>; select * from last ;
图2-17 上次登录人员
输出结果没有任何异常,因此最近没有其他人登录过这台机器。
4. 查看防火墙是否已配置并激活?防火墙是否仍在运行?如果有疑问,请运行此查询以查找:如图2-18所示。
osquery>; select * from iptables ;
图2-18 查看防火墙
如果没有输出,则表示尚未配置IPTables防火墙。对于面向Internet的服务器而言,这不是一件好事,因此可以更好地配置防火墙。
- 运行上一个命令,修改为对特定列进行过滤,如下所示:
osquery>; select chain, policy, src_ip, dst_ip from iptables ;
该查询应该提供如下输出结果。查找未配置的任何异常源和目标IP地址:如图2-19所示。
图2-19 查找未配置的任何异常源和目标
6. 在crontab中设置了哪些类型的查询,此查询将帮助查找已按计划间隔运行的恶意软件:如图2-20所示osquery\>: select command, path from crontab ;
图2-20 查询恶意软件
系统上是否有启用setuid的文件,在任何centos7服务器上都有相当多的,但是它是哪些,是否有任何不应该出现在系统上。
检测backdoored二进制文件。定期运行此查询并将其结果与较旧的结果进行比较,以便可以密切关注任何添加。该查询如下:osquery>: select * from suid_bin ;
此查询的部分输出结果可能如下所示:如图2-21所示。
图2-21 检测backdoored二进制文件
7. 要查看已加载的内核模块列表,请运行以下查询:
osquery>; select name, used_by, status from kernel_modules where status="Live";如图2-22所示。
图2-22 已加载的内核模块
这是希望定期运行的另一个查询,并将其输出结果与较旧的结果进行比较,以查看是否有任何更改。
另一种可以帮助管理员在服务器上找到后门的方法是运行一个列出所有侦听端口的查询。为此,查询语句如图2-23所示。
osquery>; select * from listening_ports
图2-23 所有侦听端口
在服务器上,如果输出只包含知道服务器应该监听的端口,则无需担心。但如果有其他端口打开,将需要调查这些端口是什么。
8. 要查看服务器上的文件活动,请运行以下查询:如图2-24所示。
osquery>; select target_path, action, uid from file_events ;
输出结果显示服务器上的所有最近文件活动,以及负责该活动的用户标识。
图2-24 服务器上的文件活动
有许多查询,例如可以在服务器上运行的查询,以了解可能存在的安全问题。可以列出可用的表格:如图2-25所示。
osquery>: . tables
图2-25 可查询的列表
2.2.4运行osqueryd
守护进程osqueryd允许osquery以设定的时间间隔运行查询。这些查询包括在第四步中配置的查询,在该步骤中指定的包中的查询,以及在第四步中配置的FIM包中的查询。如果尚未研究它,现在是时候应该看一下/usr/share/osquery/packs的内容。如图2-26所示。
图2-26 查询可用包
1. osqueryd生成的结果将写入/var/log/osquery目录中调用的文件osqueryd. results. log中。打开后,该文件不存在。它仅在守护程序启动时创建并开始生成结果。如图2-27所示。
图2-27 查看日志
可以开始使用systemctl或osqueryctl启动osqueryd。两者都完成了同样的事情,所以你使用哪一个并不重要。osqueryd将在启动时检查配置文件是否存在,并在未找到配置文件时提醒。它将在没有配置文件的情况下继续运行,尽管它不会做任何有用的事情。但是,由于已经设置了配置文件,因此需要在此处启动守护程序:sudo systemctl start osqueryd或者可以输入: sudo osqueryctl start
2. 在启动守护进程后的几分钟内,/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 如图2-28所示。
图2-28 查询该文件的最后10行内容
按CTRL+C停止拖尾日志。从长远来看,需要将查询结果日志发送到可以使用的外部分析平台。
2.2.5. osqueryi交互模式
osquery为用户提供了两个主要接口,osqueryi和osqueryd。
osqueryi是osquery交互式查询控制台。 它就像MySQL上的'mysql'命令shell和PostgreSQL数据库上的'psql'shell。在服务器终端上键入“osqueryi”命令,将获得osquery交互式控制台模式。接下来,将了解osqueryi控制台模式的基本命令。在交互模式osqueryi上显示所有基本可用命令。如图2-29所示。
osquery> . help
图2-29 基本可用命令
- 显示当前的osquery配置和设置。如图2-30所示。
图2-30 显示当前的osquery配置
Osquery提供多种视图模式来显示查询结果。 默认模式是“漂亮”模式。
现在将更改查询结果的查看模式,对于本设计,将使用'line'模式。
osquery>. mode csv
osquery>. mode list
osquery>. mode column
osquery>. mode line
osquery>. mode pretty
Osquery将操作系统公开为关系数据库系统。 有关系统的所有信息都存储在osquery表中,可以通过查询所有可用表来探索整个系统信息。
- 要获取osquery中所有可用表的列表,请运行以下命令。如图2-31所示。
osquery>. tables
图2-31 osquery中所有可用表的列表
一旦知道了osquery系统中的所有可用表,将查看列。
- 使用以下命令获取表的模式如图,列,类型架构列。如图2-32所示。
osquery>. schema users
osquery>. schema processes
图2-32 获取表的模式
2.2.6. 查询Linux文件监控
在此步骤中,将使用osquery监视实时Linux系统。 将通过osqueryi交互模式监控系统配置文件信息,用户,网络接口等。
- 获取系统信息如图2-32所示。
osquery> SELECT * FROM system_info;
图2-32 获取系统信息
显示有关系统硬件的详细信息。如图2-33 所示。
osquery> SELECT hostname, cpu_type, physical_memory, hardware_vendor, hardware_model FROM system_info;
图2-33 统硬件的详细信息
显示当前的操作系统信息,包括操作系统版本,平台,操作系统补丁和代号。如图2-34所示。
osquery>SELECT * FROM os_version;
图2-34 操作系统信息
2. 查看内核版本和模块,为了检查系统的内核信息,osquery提供了表'kernel_info'和'kernel_modules'。显示系统使用的内核。如图2-35所示。
osquery> SELECT * FROM kernel_info;
图2-35 内核版本和模块
3. 显示系统上所有已加载的内核模块。如图2-36所示。
osquery> SELECT * FROM kernel_modules LIMIT 5;
图2-36 已加载的内核模块
4. 检查存储库和包osquery提供了用于检查Linux Ubuntu和CentOS上的存储库和已安装软件包的表。在CentOS上,们可以通过'yum_sources'检查可用的存储库,并检查通过'rpm_packages'安装的软件包。
检查所有可用的CentOS存储库。如图2-37所示。
osquery> SELECT * FROM yum_sources;
图2-37 CentOS存储库
5. 查询yum源osquery> SELECT name, baseurl, enabled FROM yum_sources; 如图2-38所示。
图2-38 查询yum 源
- 通过添加“已启用”过滤器检查已启用的存储库。如图2-39所示。
osquery> SELECT name, baseurl, enabled FROM yum_sources WHERE enabled=1;
图2-39 已启用的存储库
- 使用rpm_packages表检查所有安装的软件包。如图2-40所示。
osquery> SELECT * FROM rpm_packages;
osquery> SELECT name, version FROM rpm_packages ORDER BY name;
图2-40 所有安装的软件包
对于特定包名称,请添加名称过滤器。如图2-41所示。
osquery> SELECT name, version FROM rpm_packages WHERE name="firewalld";
图2-41 特定包名称
装载磁盘信息可以使用mounts表来检查有关系统驱动器的所有详细信息,包括免费的inode,标志,类型等。
检查系统安装的所有磁盘。如图2-42所示。
osquery>SELECT * FROM mounts;
osquery>SELECT device, path, type, inodes_free, flags FROM mounts;
图2-42 装载磁盘信息
- 对于特定类型的设备。如图2-43所示。
osquery>SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="tmpfs";
图2-43 特定类型的设备
记忆信息以字节为单位检查系统内存。如图2-44所示。
osquery>SELECT * FROM memory_info;
图2-44 检查系统内存
网络接口信息使用“interface_addresses”检查网络地址。如图2-45所示。
osquery>SELECT * FROM interface_addresses;
图2-45 网络接口信息
- 服务器正常运行,检查服务器正常运行时间。如图2-46所示。
osquery>SELECT * FROM uptime;
图2-46 正常运行时间
检查用户,osqery提供了用于检查系统用户的详细信息表。 可以使用'users'表来检查系统上的所有用户,使用'last'表检查用户上次登录,并使用'logged_in_users'来获取具有活动shell的登录用户。
- 要检查服务器上的所有可用用户,请使用“用户”表。如图2-47
osquery>SELECT * FROM users;
图2-47 所有可用用户
- 对于普通用户,们可以将uid指定为'> = 1000'。如图2-48所示。
osquery>SELECT * FROM users WHERE uid>=1000;
图2-48 查询普通用户
要检查上次登录用户,请使用“last”表。如图2-49所示。
osquery>SELECT * FROM last;
图2-49上次登录用户
- 对于普通用户,请将'type'填入'7'。如图2-50所示。
osquery>SELECT username, time, host FROM last WHERE type=7;
图2-50 过滤普通用户
使用活动shell检查登录用户,使用'logged_in_users'表。如图2-51所示。
图2-51 活动shell登录用户
2.2.7 . osquery转发日志
1. 修改/etc/rsyslog. conf文件,增加下面5行语句 如图2-29所示。
module(load="imfile" PollingInterval="5")
$InputFileName /var/log/osquery/osqueryd. results. log
$InputFileTag osquery:
$InputFileStateFile osqueryd. results. log
$InputRunFileMonitor
图2-29 配置日志转发
- 修改/etc/rsyslog. conf文件,修改日志接受服务器地址如图2-30所示。
图2-30 配置接受服务器
- 打开日志接收系统利用3CDaemon 软件进行接收日志如图2-31所示。
图2-31 日志接收系统
2. 3 测试监控文件
1. 通过在定义的目录“home”和“他tmp”上创建一个新文件来测试文件完整性监控包。转到“/var”目录,创建一个名为“nzy. txt”的新文件。
cd /tmp
touch nzy. txt
转到'/ home 目录并创建一个名为'nzy. py'的新文件。
cd / home
nzy. Py
- 使用实时交互模式osqueryi日志检查所有日志监控。
osqueryi运行下面的osqueryi命令。
- 对于'/home'目录。
select target_path, category, action, atime, ctime, mtime from file_events WHERE category="home"; 如图 2-32所示。
图 2-32 查询home 文件的修改
- 对于/tmp目录。
select target_path, category, action, atime, ctime, mtime from file_events WHERE category="tmp"; 如图 2-33所示。
图2-33 查询tmp 文件的修改
第三章 利用ELK搭建日志分析系统
为什么用到ELK:
一般需要进行日志分析场景:直接在日志文件中 grep. awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档. 文本搜索太慢怎么办. 如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
一个完整的集中式日志系统,需要包含以下几个主要特点:
收集-能够采集多种来源的日志数据
传输-能够稳定的把日志数据传输到*系统
存储-如何存储日志数据
分析-可以支持 UI 分析
警告-能够提供错误报告,监控机制
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
不管是用于记录,监控或者程序的Debug,日志,对于任何系统来说都是一个及其重要的部分。但一般日志的数据量会比较大,并且分散在各个地方。如果管理的服务器或者程序比较少的情况还可以逐一登录到各个服务器去查看,分析。但如果服务器或者程序的数量比较多了之后这种方法就显得力不从心。基于此,一些集中式的日志系统也就应用而生。
目前比较有名成熟的有,Splunk(商业). FaceBook 的Scribe. Apache 的 Chukwa
Cloudera 的 Fluentd. 还有ELK 等等。
3. 1 ELK简介
ELK不是一款软件,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源的,现在归于 Elastic. co 公司。
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。作为ELK协议栈的核心,它用于集中存储数据。特点:
- 实时如图准实时
- 分布式
- 面向文档
- 高可用性,易扩展,支持集群如图Cluster. 分片和复制如图Shards 和 Replicas。
- 接口友好如图RESTful
Logstash 是一个具有实时渠道能力的数据收集引擎。使用 JRuby 语言编写。其作者是世界著名的运维工程师乔丹西塞 (JordanSissel)。目前最新的版本是 5. 3。特点:
- 几乎可以访问任何数据
- 可以和多种外部应用结合
- 支持弹性扩展
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。目前最新的版本是 5. 3。
3. 2 ELK的环境准备
1. 修改文件限制
# 修改系统文件;vi /etc/security/limits.conf
#增加的内容;* soft nofile 65536;* hard nofile 65536;* soft nproc 2048;* hard nproc 4096
2. 调整进程数
#修改系统文件;vi /etc/security/limits.d/20-nproc.conf
#调整成以下配置
soft nproc 4096;soft nproc unlimited
3. 调整虚拟内存&最大并发连接
#修改系统文件;vi /etc/sysctl.conf
#增加的内容;vm.max_map_count=655360;fs.file-max=655360
4. JDK8安装
CentO安装JDK8:https://ken.io/note/centos-java-setup
5. 创建ELK专用用户
useradd elk
6. 创建ELK相关目录并赋权
#创建ELK APP目录mkdir /usr/elk
#创建ELK 数据目录mkdir /elk
#更改目录Owner;chown -R elk:elk /usr/elk;chown -R elk:elk /elk
7. 下载ELK包并解压
https://www.elastic.co/downloads
#打开文件夹cd /home/download
#下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz
wget wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz
#解压tar -zvxf elasticsearch-6.0.0.tar.gz;tar -zvxf logstash-6.0.0.tar.gz;tar -zvxf kibana-6.0.0-linux-x86_64.tar.gz
3. 3ELK的安装
3.3.1 配置清华镜像站yum源
[root@elk ~]# ntpdate 0. centos. pool. ntp. org
[root@elk ~]# vim /etc/yum. repos. d/elk. repo
[elk]
name=elk
baseurl=https://mirrors. tuna. tsinghua. edu. cn/elasticstack/yum/elastic-6. x/
enable=1
gpgcheck=0
1.用yum 源 安装Elasticsearch Logstash Kibana
[root@elk ~]# yum install elasticsearch logstash kibana nodejs filebeat -y
2. Elasticsearch 节点配置
修改elasticsearch 节点配置文件以便服务器连通
[root@elk ~]# grep -v ^# /etc/elasticsearch/elasticsearch. yml
cluster. name: elk-stack
node. name: elk. node1
path. data: /var/lib/elasticsearch
path. logs: /var/log/elasticsearch
network. host: 0. 0. 0. 0
http. port: 9200
discovery. zen. ping. unicast. hosts: ["192. 168. 12. 148:9300"]
discovery. zen. minimum_master_nodes: 1
[root@elk ~]# systemctl start elasticsearch
[root@elk ~]# ss -ntlup| grep -E "9200|9300"
3. Kibana 配置
修改kibana 节点访问ip 地址
[root@elk ~]# egrep -v "^#|^$" /etc/kibana/kibana. yml
server. port: 5601
server. host: "0. 0. 0. 0"
elasticsearch. url: "http://192. 168. 12. 148:9200"
kibana. index: ". kibana"
4.汉化Kibana 配置
Kibnan 默认语言是英文的为方便配置故改为中文版
[root@elk ~]# yum install -y git
[root@elk ~]# git clone https://github. com/anbai-inc/Kibana_Hanization. git
[root@elk ~]# cd Kibana_Hanization
[root@elk ~]# python main. py /usr/share/kibana
[root@elk ~]# systemctl restart kibana
[root@elk ~]# ss -ntlup| grep 5601
5. Logstash 配置
[root@elk ~]# echo 'path. config: /etc/logstash/conf. d' >>/etc/logstash/logstash. yml
添加日志处理文件,以便接受osquery 系统日志文件
[root@elk ~]# vim /etc/logstash/conf. d/local_syslog. conf
input {
#filebeat客户端
beats {
port => 5044
}
}
#筛选
#filter { }
output {
# 输出到es
elasticsearch {
hosts => ["http://192. 168. 12. 148:9200"]
index => "syslog-%{+YYYY. MM. dd}"
}
}
[root@elk ~]# systemctl start logstash
[root@elk ~]# lsof -i:5044
6. 访问 Kibana 如图3-1所示。
图3-1 kibana 界面
3. 3 利用ELK分析Osquery 日志数据
Kibana:
1. 选择管理 - >索引模式 - >创建索引模式在“索引模式”框中,输入osquery-result- *并选择“下一步”。从Time Filter字段名称下拉列表中,选择@timestamp,然后选择Create index pattern。如图3-2所示。
图3-2 Kibana 配置
2. 现在转到Discover并从Index下拉列表中选择osquery-result- *。应该看到的查询过滤了。转至管理 - >导入并导入此要点中的两个文件。一个是可视化,一个是osquery的仪表板。如图3-3所示。
图3-3 Kibana 配置
第四章 总结与展望
在本次毕业设计中我对系统安全有了更深层次的理解,论文设计过程当中,我通过对论文的不断研究和学习,使我自己的专业水准更上一层楼。在当前社会高速发展的大环境下,随着我国信息化的不断推进,系统安全的需求已经达到了一定的高度。本文当中提到了osquery和elk工具的应用,这俩款工具都对系统安全的监测起到了一定的作用。但是在学习和使用这两款工具的时候,我依然还有很多不足的地方,例如:elk接收日志以及该工具功能更深层次的使用。有句话说“活到老学到老”,“学无止境”我相信,在我参加工作以后,我还会对这两个工具的功能继续研究,以及诸多类似工具的学习和使用,达到对系统安全维护的新高度。
致谢
时光匆匆如流水,转眼便是大学毕业时节,春梦秋云,聚散真容易。离校日期已日趋渐进,毕业论文的完成也随之进入了尾声。从开始进入课题到论文的顺利完成,一向都离不开老师. 同学. 朋友给热情的帮忙,在那里请理解诚挚的谢意!在此向电子学院信息安全与管理专业的所有老师表示衷心的感谢,多谢你们三年的辛勤栽培,多谢你们在教学的同时更多的是传授们做人的道理,多谢三年里面你们孜孜不倦的教诲!
本设计在甘志伟老师的悉心指导下完成的,渊博的专业知识严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严于律己。以待人的崇高风范,朴实无法,平易近人的人格魅力对本人影响深远。不仅仅使本人树立了远大的学习目标,掌握了基本的研究方法,还使本人明白了许多为人处事的道理。本次设计从选题到完成,每一步都是在导师的悉心指导下完成的,倾注了导师很多心血。在此,谨向老师表示崇高的敬意和衷心的感谢!在写论文的过程中,遇到了很多的问题,在老师的耐心指导下,问题都得以解决。所以在此,再次对老师道一声:老师,多谢您!
三年寒窗,所收获的不仅仅仅是愈加丰厚的知识,更重要的是在阅读,实践中所培养的思维方式,表达潜力和广阔视野。很庆幸这三年来遇到了如此多的良师益友,无论在学习上,生活上,还是工作上,都给予了无私的帮忙和热心的照顾,让在一个充满温馨的环境中度过三年的大学生活。感恩之情难以用言语量度,谨以最朴实的话语致以最崇高的敬意。
“长风破浪会有时,直挂云帆济沧海。”这是少年时最喜欢的诗句。就用这话作为这篇论文的一个结尾,也是一段生活的结束。期望自能够继续少年时的梦想,永不放下。
参考文献
[1] Saurabh Chhajed, Learning ELK Stack中文版
[2] 高凯,大数据搜索与日志挖掘及可视化方案:ELK stack: elasticsearch. logstash. kibana.
[3] 刘衍衍等编著. 计算机安全技术. 吉林:吉林科技技术出版社. 1997. 8
[4] 冯元等. 计算机网络安全基础. 北京;科学出版社. 2003. 10
[5] 张千里,陈光英 . 网络安全新技术. 北京:人民邮电出版社,2003. 1
[6] 石志国等编著. 计算机网络安全教程. 北京:清华大学出版社,2004. 2
[7] 岳 浩《Linux操作系统教程》机械工业出版社 2005. 4
[8] 邱世华. Linux操作系统之奥秘. 北京:电子工业出版社,2008
[9] 曹天杰等编著. 计算机系统安全. 北京:高等教育出版社,2003. 9
[10] 韩海东,王超,李群. 入侵检测系统实例剖析 北京:清华大学出版社 2002年5月
[11] 石志国等编著. 计算机网络安全教程. 北京:清华大学出版社,2004. 2
[12] Digital Fore nsic Research Workshop. “A Road Map for Digital Forensic Research”,2001.
[13] Jun-Sun Kim, Minsoo Kim and Bong-Nam Noth . A Fuzzy Expert System for Network Forensics.