IntrotoLogAnalysisTHM
Introduction
日志分析是网络安全和系统监控的重要方面。在较高层面上,日志分析检查并解释各种来源(设备、应用程序和系统)生成的日志事件数据,以监控指标并识别安全事件。它涉及收集、解析和处理日志文件,以将数据转化为可操作的目标。通过采用有效的日志分析策略,安全团队可以更准确地响应安全事件并主动洞察潜在威胁。
在这个房间中,我们将探讨与日志分析方法、有效日志记录实践以及帮助检测和响应的常用工具相关的概念。
学习目标
- 学习日志分析最佳实践。
- 发现日志分析的基本工具。
- 通过使用多种工具和技术获得分析日志的实践经验。
房间先决条件
建议对日志及其收集方式有一个大致的了解。日志分析模块中的前面的房间是该主题的很好的入门读物:
Log Analysis Basics
在基础设施系统收集和利用的各种数据源中,日志对于提供有关这些系统的内部工作和网络交互的宝贵见解至关重要。日志是记录发生的事件的按时间顺序的消息流。日志分析是理解日志中捕获的事件的过程,以清晰地描绘整个基础设施中发生的情况。
什么是日志?
日志是系统、设备或应用程序内记录的事件或事务。具体来说,这些事件可能与应用程序错误、系统故障、审核的用户操作、资源使用、网络连接等相关。每个日志条目都包含事件上下文相关的详细信息,例如时间戳(发生的日期和时间)、源(生成日志的系统)以及有关特定日志事件的其他信息。
sample.log
Jul 28 17:45:02 10.10.0.4 FW-1: %WARNING% general: Unusual network activity detected from IP 10.10.0.15 to IP 203.0.113.25. Source Zone: Internal, Destination Zone: External, Application: web-browsing, Action: Alert. |
在上面的示例中,此日志条目表示防火墙检测到的有关内部系统异常网络活动的事件,表明存在潜在的安全问题。此示例中要考虑的相关字段是:
Jul 28 17:45:02
- 此时间戳显示事件的日期和时间。
10.10.0.4
- 这是指生成日志的系统的 IP 地址(源)。
%WARNING%
- 这表示日志的严重性,在本例中为 警告。日志条目通常被赋予严重性级别来分类和传达其相对重要性或影响。这些严重性级别有助于根据事件的严重性确定响应、调查和行动的优先级。不同的系统使用的严重性级别可能略有不同,但通常您会发现以下逐渐增加的严重性级别:信息、警告、错误和严重。
Action: Alert
- 在这种情况下,防火墙的策略配置为在发生此类异常活动时发出通知。
其余字段为我们提供与记录的事件相关的特定信息。具体来说,从 IP 10.10.0.15 到 IP 203.0.113.25 检测到异常网络活动。根据“源区域”字段,流量显示目的地为互联网(外部),并且应用程序被分类为网络浏览。
为什么日志很重要?
收集日志并采用有效的日志分析策略对于组织的持续运营至关重要有几个原因。一些最常见的活动包括:
- 系统故障排除:分析系统错误和警告日志有助于IT团队了解并快速响应系统故障,最大限度地减少停机时间并提高整体系统可靠性。
- 网络安全事件: 在安全环境中,日志对于检测和响应安全事件至关重要。例如,防火墙日志、入侵检测系统 (IDS) 日志和系统身份验证日志包含有关潜在威胁和可疑活动的重要信息。执行日志分析可帮助 SOC 团队和安全分析师识别并快速响应未经授权的访问尝试、恶意软件、数据泄露和其他恶意活动。
- 威胁狩猎: 在主动方面,网络安全团队可以使用收集的日志来主动搜索可能逃避传统安全措施的高级威胁。安全分析师和威胁猎人可以分析日志,以查找可能表明存在威胁行为者的异常模式、异常情况和妥协指标 (IOC)。
- 合规性: 出于监管和合规性目的,组织必须经常维护其系统活动的详细记录。定期日志分析可确保组织能够提供准确的报告并证明遵守 GDPR、HIPAA 或 PCI DSS 等法规。
日志类型
正如日志简介 室中所讨论的,计算环境中的不同组件会生成各种类型的日志,每种日志都有不同的用途。这些日志类型包括但不限于:
- 应用程序日志: 来自特定应用程序的消息,提供对其状态、错误、警告和其他操作详细信息的见解。
- 审核日志: 系统或应用程序内发生的事件、操作和更改,提供用户活动和系统行为的历史记录。
- 安全日志: 与安全相关的事件,例如登录、权限更改、防火墙活动以及影响系统安全的其他操作。
- 服务器日志: 系统日志、事件日志、错误日志和访问日志,每个日志都提供有关服务器操作的不同信息。
- 系统日志: 内核活动、系统错误、启动顺序和硬件状态,有助于诊断系统问题。
- 网络日志: 网络内的通信和活动,捕获有关事件、连接和数据传输的信息。
- 数据库日志: 数据库系统内的活动,例如执行的查询、操作和更新。
- Web 服务器日志: Web 服务器处理的请求,包括 URL、源 IP 地址、请求类型、响应代码等。
每种日志类型都对环境中的活动提供了独特的视角,并且在上下文中分析这些日志对于有效的网络安全调查和威胁检测至关重要。
Investigation Theory
采用多种方法、最佳实践和基本技术来创建连贯的时间表并进行有效的日志分析调查。
时间线
进行日志分析时,创建时间线是理解系统、设备和应用程序内事件顺序的一个基本方面。从较高层次来看,时间线是所记录事件的时间顺序表示,根据事件的发生进行排序。 可视化时间线的能力是了解和理解特定时期内发生的事件的强大工具。
在事件响应场景中,时间线在重建安全事件中发挥着至关重要的作用。通过有效的时间表,安全分析师可以追踪导致事件发生的事件顺序,从而使他们能够识别最初的危害点并了解攻击者的策略、技术和程序 (TTP)。
时间戳
在大多数情况下,日志通常包含记录事件发生时间的时间戳。由于许多分布式设备、应用程序和系统可能在不同区域生成单独的日志事件,因此考虑每个日志的时区和格式至关重要。将时间戳转换为一致的时区对于跨不同日志源进行准确的日志分析和关联是必要的。
许多日志监控解决方案通过时区检测和自动配置来解决这个问题。例如,Splunk 在对数据进行索引和搜索时自动检测和处理时区。无论在各个日志事件中如何指定时间,时间戳都会转换为 UNIX 时间并在索引时存储在“_time”字段中。
然后可以在可视化过程中将这种一致的时间戳转换为本地时区,从而使报告和分析更加高效。该策略确保分析师可以进行准确的调查并从日志数据中获得有价值的见解,而无需人工干预。
超级时间线
超级时间线,也称为综合时间线,是日志分析和数字取证中的一个强大概念。超级时间线提供了跨不同系统、设备和应用程序的事件的全面视图,使分析人员能够全面了解事件的顺序。这对于调查涉及多个组件或系统的安全事件特别有用。
超级时间线通常包括来自前面讨论的日志源的数据,例如系统日志、应用程序日志、网络流量日志、防火墙日志等。通过将这些不同的来源组合到一个时间线中,分析师可以识别单独分析日志时需要显而易见的相关性和模式。
手动创建包含所有这些信息的综合时间表需要时间和精力。您不仅需要记录系统上每个文件的时间戳,还需要了解每个应用程序的数据存储方法。幸运的是,Plaso (Python Log2Timeline) 是一个由 Kristinn Gudjonsson 和许多贡献者创建的开源工具,可以自动从各种日志源创建时间线。它专为数字取证和日志分析而设计,可以解析和处理来自各种来源的日志数据,以创建统一的、按时间顺序排列的时间线。
要了解有关 Plaso 及其功能的更多信息,请访问此处的官方文档页面。
数据可视化
数据可视化工具,例如 Kibana(Elastic Stack 的)和 Splunk,有助于通过用户界面将原始日志数据转换为交互式且富有洞察力的视觉表示。此类工具使安全分析师能够通过可视化模式和异常(通常以图形视图的形式)来理解索引数据。可以将多个可视化、指标和图形元素构建到定制的仪表板视图中,从而为日志分析操作提供全面的“单一管理平台”视图。
要创建有效的日志可视化,首先必须了解正在收集的数据(和来源)并定义明确的可视化目标。
例如,假设目标是监视和检测失败登录尝试增加的模式。在这种情况下,我们应该查看可视化日志,以审核来自身份验证服务器或用户设备的登录尝试。一个好的解决方案是创建一个折线图,显示一段时间内登录尝试失败的趋势。为了管理捕获数据的密度,我们可以过滤可视化以显示过去 7 天。这将为我们提供一个良好的起点来可视化增加的失败尝试并发现异常情况。
日志监控与报警
除了可视化之外,实施有效的日志监控和警报还可以让安全团队“主动”识别威胁并在生成警报时立即做出响应。
许多 SIEM 解决方案(例如 Splunk 和 Elastic Stack)允许根据日志事件中获取的指标创建自定义警报。值得创建警报的事件可能包括多次失败的登录尝试、权限升级、访问敏感文件或其他潜在安全漏洞的指标。 警报可确保安全团队及时收到需要立即关注的可疑活动通知。
应定义事件响应过程各个阶段的升级和通知程序的角色和职责。升级程序可确保事件得到及时处理,并确保每个严重级别的相关人员都得到通知。
如需在 Splunk 中实际操作仪表板和警报,建议查看 Splunk:仪表板和报告 室!
外部研究和威胁英特尔
确定我们在日志分析中可能感兴趣的内容至关重要。如果我们不完全确定我们要寻找什么,那么分析日志就很困难。
首先,我们来了解一下什么是威胁情报。总之,威胁情报是可归因于恶意行为者的信息片段。威胁情报的示例包括:
- IP 地址
- 文件哈希
- 域名
在分析日志文件时,我们可以搜索是否存在威胁情报。例如,采用下面的 Apache2 Web 服务器条目。我们可以看到一个IP地址试图访问我们网站的管理面板。
输出Apache2访问日志
cmnatic@thm cat access.log |
使用 ThreatFox 等威胁情报源,我们可以搜索日志文件以查找已知恶意行为者的存在。
使用 GREP 在日志文件中搜索 IP 地址
cmnatic@thm grep "54.36.149.64" logfile.txt |
Detection Engineering
常见日志文件位置
日志分析的一个重要方面是了解在哪里可以找到各种应用程序和系统生成的日志文件。虽然日志文件路径可能因系统配置、软件版本和自定义设置而异,但了解常见日志文件位置对于高效调查和威胁检测至关重要。
- 网络服务器:
- nginx:
- 访问日志:
/var/log/nginx/access.log
- 错误日志:
/var/log/nginx/error.log
- 阿帕奇:
- 访问日志:
/var/log/apache2/access.log
- 错误日志:
/var/log/apache2/error.log
- 数据库:
- MySQL:
- 错误日志:
/var/log/mysql/error.log
- PostgreSQL:
- 错误和活动日志:
/var/log/postgresql/postgresql-{version}-main.log
- 网络应用程序:
- PHP:
- 错误日志:
/var/log/php/error.log
- 操作系统:
- Linux:
- 常规系统日志:
/var/log/syslog
- 身份验证日志:
/var/log/auth.log
- 防火墙和 IDS/IPS:
- iptables:
- 防火墙日志:
/var/log/iptables.log
- snort :
- Snort 日志:
/var/log/snort/
虽然这些是常见的日志文件路径,但请务必注意,实际路径可能会因系统配置、软件版本和自定义设置而异。建议查阅官方文档或配置文件来验证日志文件路径是否正确,以确保分析和调查的准确性。
常见模式
在安全环境中,识别日志数据中的常见模式和趋势对于识别潜在的安全威胁至关重要。这些“模式”是指威胁行为者或网络安全事件在日志中留下的可识别工件。幸运的是,有一些常见的模式,如果学习了这些模式,将提高您的检测能力,并使您能够有效地响应事件。
异常用户行为
可以识别的主要模式之一与不寻常或异常的用户行为有关。这是指用户进行的任何偏离其典型或预期行为的行为或活动。
为了有效检测异常用户行为,组织可以采用结合检测引擎和机器学习算法的日志分析解决方案来建立正常行为模式。 与这些模式或基线的偏差可以作为潜在的安全事件发出警报。这些解决方案的一些示例包括 Splunk 用户行为分析 (UBA)、*[IBM QRadar UBA](https: //www.ibm.com/docs/en/qradar-common?topic=app-qradar-user-behavior-analytics)*, 和 [Azure AD 身份保护](https://learn.microsoft.com/en -us/azure/active-directory/身份保护/概述身份保护)。
具体指标可能因来源而异,但可以在日志文件中找到的一些示例包括:
- 多次登录尝试失败
- 短时间内登录失败次数异常多,可能表明存在暴力攻击。
- 异常登录时间
- 用户典型访问时间或模式之外的登录事件可能表明未经授权的访问或帐户受到威胁。
- 地理异常
- 来自用户通常不访问的国家/地区的 IP 地址的登录事件可能表明潜在的帐户泄露或可疑活动。
- 此外,从不同地理位置同时登录(或不可能旅行的迹象)可能表明帐户共享或未经授权的访问。
- 频繁更改密码
- 表明用户密码在短时间内频繁更改的日志事件可能表明有人试图隐藏未经授权的访问或接管帐户。
- 不寻常的用户代理字符串
- 在 HTTP 流量日志的上下文中,来自具有与其典型浏览器不同的不常见用户代理字符串的用户的请求可能表明自动攻击或恶意活动。
- 例如,默认情况下,Nmap 扫描仪 将记录包含“Nmap 脚本引擎”的用户代理。默认情况下,Hydra 暴力破解工具 将在其用户代理中包含“(Hydra)”。这些指示器在日志文件中可用于检测潜在的恶意活动。
这些异常的重要性可能因具体环境和现有系统的不同而有很大差异,因此有必要微调任何自动异常检测机制以最大限度地减少误报。
常见的攻击特征
识别日志数据中的常见攻击特征是检测和快速响应威胁的有效方法。攻击签名包含威胁行为者留下的特定模式或特征。它们可能包括恶意软件感染、基于 Web 的攻击(SQL 注入、跨站点脚本、目录遍历)等等。由于这完全取决于攻击面,因此一些高级示例包括:
SQL注入
SQL注入尝试利用与数据库交互的 Web 应用程序中的漏洞。在应用程序或数据库日志中查找异常或格式错误的 SQL 查询,以识别常见的 SQL 注入攻击模式。
可疑的 SQL 查询可能包含意外字符,例如单引号 ('
)、注释 (--
、#
)、联合语句 (UNION
) 或基于时间的攻击 (WAITFOR DELAY
、sleep()
)。可以在[此处](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL Injection)找到可供参考的有用的 SQLi 负载列表。
在下面的示例中,可以通过“q=”查询参数的“UNION SELECT”部分来识别 SQL 注入尝试。攻击者似乎已经使用单引号转义了 SQL 查询,并注入了 union select 语句以从数据库中的“users”表中检索信息。通常,此有效负载可能是 URL 编码的,需要额外的处理步骤才能有效地识别它。
sqli.log
10.10.61.21 - - [2023-08-02 15:27:42] "GET /products.php?q=books' UNION SELECT null, null, username, password, null FROM users-- HTTP/1.1" 200 3122 |
跨站脚本 (XSS)
利用跨站脚本(XSS)漏洞,攻击者可以将恶意脚本注入网页。为了识别常见的 XSS 攻击模式,查找具有意外或异常输入的日志条目通常很有帮助,其中包括脚本标记 (<script>
) 和事件处理程序 (onmouseover
、onclick
、onerror
)。可以在此处找到可供参考的有用的 XSS 有效负载列表。
在下面的示例中,可以通过插入到“search”参数中的“”负载来识别跨站脚本攻击,这是 XSS 漏洞的常见测试方法。
xss.log
10.10.19.31 - - [2023-08-04 16:12:11] "GET /products.php?search=\<script>alert(1);</script> HTTP/1.1" 200 5153 |
路径遍历
利用路径遍历漏洞,攻击者可以访问 Web 应用程序预期目录结构之外的文件和目录,从而导致对敏感文件或代码的未经授权的访问。要识别常见的遍历攻击模式,请查找遍历序列字符(../
和 ../../
)以及对敏感文件的访问指示(/etc/passwd
、/etc/shadow
) 。可以在[此处](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Directory Traversal/README.md)找到可供参考的有用目录遍历有效负载列表。
需要注意的是,与上面的示例一样,目录遍历通常是 URL 编码(或双 URL 编码),以避免被防火墙或监控工具检测到。因此,“%2E”和“%2F”是有用的 URL 编码字符,因为它们分别引用“.”和“/”。
在下面的示例中,可以通过重复的“../”字符序列来识别目录遍历尝试,表明攻击者正在尝试“退出”Web目录并访问敏感的“/etc/passwd”文件在服务器上。
path-traversal.log
10.10.113.45 - - [2023-08-05 18:17:25] "GET /../../../../../etc/passwd HTTP/1.1" 200 505 |
Automated vs. Manual Analysis
自动分析
自动化分析涉及工具的使用。例如,这些通常包括 XPLG 或 SolarWinds Loggly 等商业工具。 自动分析工具允许对日志进行处理和数据分析。这些工具通常利用人工智能/机器学习来分析模式和趋势。随着人工智能领域的发展,我们期望看到更有效的自动化分析解决方案。
Advantages | Disadvantages |
---|---|
通过执行手动分析所需的大量手动工作来节省时间 | 自动分析工具通常仅供商业使用,因此价格昂贵。 |
人工智能的使用可以有效地识别模式和趋势。 | 人工智能的有效性取决于模型的能力。例如,误报的风险增加,或者可能会错过更新的或从未见过的事件,因为人工智能没有经过训练来识别这些事件。 |
手动分析
手动分析是在不使用自动化工具的情况下检查数据和工件的过程。例如,分析师滚动浏览 Web 服务器日志将被视为手动分析。手动分析对于分析师来说至关重要,因为不能依赖自动化工具。
Advantages | Disadvantages |
---|---|
它很便宜并且不需要昂贵的工具。例如,简单的 Linux 命令就可以实现这一目的。 | 这是非常耗时的,因为分析人员必须完成所有工作,包括重新格式化日志文件。 |
允许进行彻底调查。 | N/A |
降低自动化工具警报过度拟合或误报的风险。 | 事件或警报可能会被错过!尤其是当有大量数据需要梳理时。 |
允许进行上下文分析。分析师对组织和网络安全形势有更广泛的了解。 | N/A |
Log Analysis Tools: Command Line
在分析收集的日志时,有时我们最容易使用的工具就是命令行本身。通过命令行分析日志提供了一种快速而强大的方法来深入了解系统活动、解决问题和检测安全事件,即使我们没有配置 SIEM 系统也是如此。
许多内置的Linux命令可以让我们快速解析和过滤相关信息。 使用命令行查看日志文件是进行日志分析的最基本但最重要的任务之一。几种常见的内置工具用于此目的,提供不同的功能来有效地读取和浏览日志文件。
您可以在 AttackBox 上的“/root/Rooms/introloganalysis/task6”下找到“apache.log”文件来执行此任务。但是,它也附加到此任务并可供下载。
猫
“cat”命令(“concatenate”的缩写)是一种简单的实用程序,它读取一个或多个文件并在终端中显示其内容。当用于日志文件时,它将整个日志内容打印到屏幕上。
例如,要查看名为“apache.log”的日志文件的内容,可以使用以下命令:
cat Example
user@tryhackme$ cat apache.log |
由于其输出较大,它通常不是处理长日志文件的最佳方法。
较少的
在处理较大文件时,“less”命令是对“cat”命令的改进。它允许您逐页查看文件的数据,提供更方便的方式来阅读冗长的日志。使用 less 打开文件时,默认显示第一页,您可以使用箭头键或使用 Page Up 和 Page Down 向下滚动。
例如,要使用“less”查看同一日志文件,请使用以下命令:
less Example
user@tryhackme$ less apache.log |
您可以通过“q”键退出命令的输出。
tail
“tail”命令是专门为查看文件末尾而设计的,对于查看日志文件中最近生成的事件的摘要非常有用。 tail
最常见的用法是与 -f
选项结合使用,它允许您实时“跟踪”日志文件,因为它会在生成和写入新日志条目时不断更新终端。这在监视实时事件或实时系统行为日志时非常有用。
默认情况下,“tail”仅显示文件的最后十行。但是,我们可以使用“-n”选项更改此设置并指定要查看的行数。
例如,如果我们只想打印apache.log
文件的最后五行并实时“跟踪”日志,我们可以使用以下命令:
tail Example
user@tryhackme$ tail -f -n 5 apache.log |
能够从命令行对日志文件进行排序、过滤和操作是执行有效日志分析的一个重要方面。分析师通常需要提取特定信息、过滤相关数据、汇总结果并转换日志,以发现见解并识别异常情况。
注意: tail
命令的相反是 head
,它允许您默认查看文件的前十行,并接受相同的参数。也请随意尝试一下!
wc
“wc”(字数统计)命令是一个简单但功能强大的实用程序,对于快速分析和统计数据收集非常有用。 wc
的输出提供有关日志文件中的行数、单词数和字符数的信息。这可以帮助安全分析师在进行更详细的分析之前了解他们正在处理的日志数据的大小和数量。
wc Example
user@tryhackme$ wc apache.log |
在“apache.log”上运行“wc”后,我们可以确定该文件包含70行、1562个单词(以空格分隔)和14305个字符。
cut
“cut”命令根据指定的分隔符从文件中提取特定的列(字段)。这是一个方便的命令,用于处理具有结构化或制表符分隔数据的日志文件。
如果我们想要提取文件中的所有IP地址,我们可以使用“cut”命令指定“空格”字符分隔符,并只选择返回的第一个字段。
cut Example
user@tryhackme$ cut -d ' ' -f 1 apache.log |
上述命令将返回日志文件中每个 IP 地址的列表。在此基础上进行扩展,我们可以将字段编号更改为“-f 7”以提取 URL,将字段编号更改为“-f 9”以提取 HTTP 状态代码。
sort
有时,按时间顺序或字母顺序对返回的条目进行排序会很有帮助。 “sort”命令根据特定标准按升序或降序排列文件中的数据。这对于识别日志数据中的模式、趋势或异常值至关重要。通常还可以将另一个命令(例如 cut)的输出组合起来,并使用管道 |
重定向字符将其用作排序命令的输入。
例如,要对上述“cut”命令返回的 IP 地址列表进行排序,我们可以运行:
sort Example
user@tryhackme$ cut -d ' ' -f 1 apache.log | sort -n |
在上面的命令中,我们将“cut”的输出通过管道传输到“sort”命令中,并添加“-n”选项以数字排序。这会将输出更改为按升序列出 IP 地址。
如果我们想颠倒顺序,我们可以添加 -r
选项:
sort Example (Reversed)
user@tryhackme$ cut -d ' ' -f 1 apache.log | sort -n -r |
uniq
“uniq”命令从排序的输入中识别并删除相邻的重复行。在日志分析中,这可能是简化数据列表(如收集的 IP 地址)的有用工具,特别是当日志条目可能包含重复或冗余信息时。 “uniq”命令通常与“sort”命令结合使用,在删除重复条目之前对数据进行“排序”。
例如,我们上面运行的“sort”命令的输出包含一些重复的 IP 地址,当数据按数字排序时更容易发现。要从列表中删除这些重复提取的 IP,我们可以运行:
uniq Example
user@tryhackme$ cut -d ' ' -f 1 apache.log | sort -n -r | uniq |
我们还可以附加“-c”选项来输出唯一的行,并在每行前面添加出现次数。这对于快速确定流量异常高的 IP 地址非常有用。
uniq Example (with count)
user@tryhackme$ cut -d ' ' -f 1 apache.log | sort -n -r | uniq -c |
sed
sed
和 awk
都是强大的文本处理工具,通常用于日志分析。它们有时可以互换使用,但这两个命令都有其用例,并且可以允许安全分析师有效地操作、提取和转换日志数据。
使用替换语法,“sed”可以将特定模式或字符串替换为日志条目。例如,要将 apache.log
文件中所有出现的“31/Jul/2023”替换为“July 31, 2023”,我们可以使用:
sed Example
user@tryhackme$ sed 's/31\/Jul\/2023/July 31, 2023/g' apache.log |
请注意,需要反斜杠字符“\”来“转义”我们模式中的正斜杠,并告诉“sed”将正斜杠视为文字字符。另请注意,“sed”命令不会直接更改“apache.log”文件;它会直接更改“apache.log”文件。相反,它仅将文件的修改版本输出到命令行中的标准输出。如果要覆盖文件,可以添加“-i”选项来就地编辑文件,或使用重定向运算符“>”将输出保存到原始文件或另一个文件。
警告: 如果将“-i”选项与“sed”一起使用,则可能会覆盖原始文件并丢失有价值的数据。确保保留备份副本!
awk
对于“awk”命令,一个常见的用例是基于特定字段值的条件操作。例如,要打印 HTTP 响应代码大于或等于“400”(这将指示 HTTP 错误状态)的日志条目,我们可以使用以下命令:
awk Example
user@tryhackme$ awk '$9 >= 400' apache.log |
在本例中,我们使用“$9”字段(在此日志示例中指的是 HTTP 状态代码),要求它大于或等于“400”。
这仅触及了这些命令功能的表面,强烈建议您在此处阅读有关其选项和用例的更多信息。
grep
“grep”命令是一种功能强大的文本搜索工具,广泛用于 UNIX 系统,并在日志分析中提供了特殊的用例。它允许您在文件或文本流中搜索特定模式或正则表达式。使用“grep”可以帮助分析人员快速识别与特定条件、特定资源或关键字或与安全事件相关的模式匹配的相关日志条目。
grep
最基本的用法是在日志文件中搜索特定字符串。例如,如果我们对服务器上“/admin.php”网页的任何日志条目感到怀疑,我们可以“grep”“admin”以返回任何相关结果:
grep Example
user@tryhackme$ grep "admin" apache.log |
与“uniq -c”命令一样,我们可以将“-c”选项附加到“grep”来计算与搜索条件匹配的条目。例如,由于上述命令仅返回一行,因此附加“-c”将返回“1”。
grep Example (with count)
user@tryhackme$ grep -c "admin" apache.log |
如果我们想知道日志文件中的哪个行号与匹配的条目相关,我们可以添加“-n”选项来帮助快速定位特定的事件:
grep Example (line number)
user@tryhackme$ grep -n "admin" apache.log |
在这种情况下,行号“37”被添加到日志条目输出之前。
最后,我们可以使用“-v”选项反转我们的命令,仅选择不包含指定模式或关键字的行。这对于从日志文件中快速过滤掉不需要的或不相关的行非常有用。例如,如果我们对访问“/index.php”页面的任何日志条目不感兴趣,我们可以运行以下命令将其过滤掉:
grep Example (inverted)
user@tryhackme$ grep -v "/index.php" apache.log | grep "203.64.78.90" |
请注意,在上面的命令中,我们过滤掉了“index.php”页面,并将输出通过管道传输到另一个 grep 命令,该命令仅提取包含 IP 地址“203.64.78.90”的日志条目。
与“awk”和“sed”一样,“grep”是一个非常强大的工具,无法在单个任务中完全涵盖。强烈建议您在官方 GNU 手册页 此处 上阅读更多相关信息。
虽然命令行日志分析提供了强大的功能,但它可能只适合某些场景,尤其是在处理庞大而复杂的日志数据集时。 Elastic (ELK) Stack 或 Splunk 等专用日志分析解决方案可以提高效率,并提供额外的日志分析和可视化功能。然而,命令行对于快速、简单的日志分析任务仍然至关重要。
Log Analysis Tools: Regular Expressions
正则表达式(缩写为 regex)是定义搜索、匹配和操作文本数据模式的宝贵方法。正则表达式模式是使用表示匹配规则的特殊字符的组合来构造的,并且在许多编程语言、文本编辑器和软件中都支持。
本房间不会涵盖构建正则表达式模式的深入使用。然而,正则表达式 室是学习和练习正则表达式的绝佳资源。
正则表达式广泛用于日志分析,以在将日志转发到集中式 SIEM 系统之前提取相关信息、过滤数据、识别模式和处理日志。甚至可以将正则表达式与“grep”命令一起使用,因为它是在日志文件中搜索模式的极其强大的方法。
grep 的正则表达式
作为一个简单的示例,请参阅附加到此任务的 ZIP 文件中的“apache-ex2.log”文件。您可以在 AttackBox 上的“/root/Rooms/introloganalysis/task7”下找到任务文件。确保首先运行“unzip regex.zip”,然后运行“cd regex”来“解压缩”文件。
该日志文件包含来自博客站点的日志条目。该网站的结构使得每篇博客文章都有其唯一的 ID,通过“post” URL 参数从数据库动态获取。如果我们只对 ID 在 10-19 之间的特定博客文章感兴趣,我们可以在日志文件上运行以下“grep”正则表达式模式:
grep Regex Example
user@tryhackme$ grep -E 'post=1[0-9]' apache-ex2.log |
请注意,我们添加了“-E”选项来表示我们正在搜索模式而不仅仅是字符串,这使得我们可以使用正则表达式。对于模式本身,我们匹配文字字符“post=”。之后,我们添加数字“1”,然后使用“[0-9]”动态插入字符 0-9。将其放在一起,“1[0-9]”将匹配任何以“1”开头的两位数字,例如 10、11、12 及以后。
日志解析的正则表达式
正则表达式在日志解析中也发挥着至关重要的作用,日志解析是将日志条目分解为结构化组件并从中提取相关信息的过程。来自不同来源的日志文件可能具有不同的格式和字段,有时需要额外的处理才能将原始日志数据转换为结构化的、可操作的信息。
此外,工程师可以创建针对特定日志定制的自定义正则表达式模式,以将日志条目的特定部分映射到 SIEM 系统的命名字段。总的来说,这个过程使得以后查询和分析提取的数据变得更加容易。
考虑以下原始的、非结构化的日志条目:
日志条目示例
126.47.40.189 - - [28/Jul/2023:15:30:45 +0000] "GET /admin.php HTTP/1.1" 200 1275 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.9999.999 Safari/537.36" |
从安全角度来看,这里的几个字段有利于提取到 SIEM 中进行可视化。其中一些包括:
- IP地址
- 时间戳
- HTTP 方法(例如 POST、GET 或 PUT)
- 网址
- 用户代理
RegExr 是一个在线工具,可帮助教授、构建和测试正则表达式模式。要继续操作,请复制上述日志条目并将其粘贴到工具的“文本”部分。
作为一个基本示例,如果我们只想从该日志中提取远程 IP 地址,我们可以从逻辑上考虑 IP 地址的结构。 IP 地址是日志条目的第一部分,由四个用句点分隔的八位字节组成。我们可以使用以下模式:
\b([0-9]{1,3}\.){3}[0-9]{1,3}\b |
将此模式粘贴到 RegExr 中的“表达式”字段中,您将注意到日志中的 IP 地址已成功提取并突出显示。
分解这个模式,它以字边界锚“\b”开始和结束,以确保我们匹配完整的 IP 地址。在两者之间,我们定义以下内容:
[0-9]{1,3}
- 匹配一到三位数字以匹配从 0 到 999 的数字。虽然 IPv4 地址八位字节不能超过 255,但这种简化的模式适用于我们的用例。\.
- 转义并匹配 IP 地址中的文字.
字符。{3}
- 指定前一个捕获组([0-9]{1,3}\.)
应重复 3 次。[0-9]{1,3}
- 同样,这匹配从 0 到 999 的数字,完成 IP 地址的第四个八位字节。
示例:Logstash 和 Grok
Grok 是一个功能强大的 Logstash 插件,使您能够将非结构化日志数据解析为结构化且可搜索的数据。它通常用于为人类阅读而非计算机使用而编写的任何日志格式。它的工作原理是将文本模式与“%{SYNTAX:SEMANTIC}”模式语法相结合。然而,有时,Logstash 缺乏我们需要的内置模式。在这些情况下,我们可以使用 Oniguruma 语法 定义自定义模式并利用正则表达式。有关 Grok 及其在 Elastic Stack 中的使用的更多信息,请参阅 Elastic 文档 此处。
我们可以使用之前创建的模式从日志文件中成功提取 IPv4 地址,并将其处理到自定义字段中,然后再将其发送到 SIEM。在 Elastic Stack 场景中,我们可以使用 Logstash 配置文件中的“Grok”插件添加过滤器来实现此目的。
logstash.conf
input { |
在上面的配置中,我们使用之前定义的正则表达式模式从传入日志事件的“消息”字段中提取 IPv4 地址。提取的值将添加到我们定义的自定义“ipv4_addresses”字段名称下。通常,默认配置会自动提取 IP 地址。但这个简单的示例显示了正则表达式模式在处理复杂日志文件和自定义字段要求时的强大功能。
Logstash 房间 和 [Grok 官方文档](https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok. html)是进一步探索 Logstash 输入和过滤器配置的绝佳资源!
Log Analysis Tools: CyberChef
CyberChef 是分析师工具包中的一个强大工具。 CyberChef 由 GCHQ 创建,长期以来一直被视为“网络瑞士军刀”。该应用程序拥有超过 300 个操作,这些操作组合在一起形成了一个配方,使处理数据变得轻而易举。一些主要功能包括:
- 编码和解码数据
- 加密和散列算法
- 数据分析,例如解析日志文件和提取数据
- 还有很多!
此任务将演示如何使用 CyberChef 来解析日志文件以及使用配方进行分析。在开始之前,让我们先熟悉一下 CyberChef 界面。首先,让我们通过访问 CyberChef 在浏览器中启动 CyberChef。请注意,如果您是 AttackBox 的免费用户,则会安装 CyberChef 的本地副本,并且可以通过单击 Firefox 中的“离线 CyberChef”书签进行访问。
了解 CyberChef
我们来分解一下界面:
- **The “Operations”**选项卡 - 此选项卡允许我们选择我们希望对输入执行的操作
- Recipe - 此选项卡是操作的集合
- input - 此选项卡是我们输入要分析的数据或来源的地方
- output - 此选项卡是应用操作后输入的最终输出
让我们演示一下 CyberChef 的使用情况。在此示例中,我提供了一个输入“dHJ5aGFja21l”,它是base64 中的“tryhackme”。选择“From Base64”操作后,我们可以看到“tryhackme”的输出:
请注意,如果您不确定输入的编码是什么,您可以使用 CyberChef 的 “Magic” 操作来最好地猜测输入是什么以及此处可能使用哪些操作。
CyberChef 的正则表达式
回想一下,正则表达式是搜索和匹配数据的好方法。在此示例中,我们使用捕获了 SSH 身份验证尝试的日志文件,并使用正则表达式输出所有尝试进行身份验证的 IP 地址。
此外,我们使用正则表达式模式 \b([0-9]{1,3}\.){3}[0-9]{1,3}\b
来搜索 IP 地址值:
通过在操作的“输出格式”上选择“列表匹配”过滤器,我们可以消除日志中的所有噪音并仅输出 IP 地址。当然,这只是一个小例子。日志文件通常可以长达数百行。
在 CyberChef 中上传文件
文件和文件夹可以上传到 CyberChef。这提供了一种将日志文件上传到 CyberChef 的便捷方法。为此,请单击带有指向内部的箭头的框。此外,CyberChef 具有允许您解压缩压缩文件的运算符,例如 .tar.gz 或 .zip。
Log Analysis Tools: Yara and Sigma
Sigma
Sigma 是一个高度灵活的开源工具,以结构化格式描述日志事件。 Sigma 可用于使用模式匹配来查找日志文件中的条目。西格玛用于:
- 检测日志文件中的事件
- 创建 SIEM 搜索
- 识别威胁
Sigma 使用 YAML 语法作为其规则。此任务将演示 Sigma 用于检测 SSH 中的失败登录事件。请注意,编写 Sigma 规则超出了本会议室的范围。但是,让我们针对上面列出的场景分解一个 Sigma 规则示例:
title: Failed SSH Logins |
在这个 Sigma 规则中:
Key | Value | Description |
---|---|---|
title | 失败的 SSH 登录尝试 | 本标题概述了西格玛规则的目的。 |
description | 在 sshd 日志中搜索失败的 SSH 登录尝试 | 该键提供了对标题进行扩展的描述。 |
status | experimental | 该键解释了规则的状态。例如,“experimental”意味着必须进行进一步的测试或改进。 |
author | CMNatic | 制定规则的人。 |
logsource | product: linux service: sshd | 在哪里可以找到包含我们要查找的数据的日志文件? |
detection | sshd | 该键列出了 Sigma 规则想要查找的内容。 |
a0|contains | a0|contains: ‘Failed’ | 在这种情况下,查找所有带有“failed”的条目。 |
a1|contains | a1|contains: ‘Illegal’ | 在这种情况下,查找所有带有“lllegal”的条目。 |
falsepositives | 用户忘记或错误输入凭据 | 列出可能存在此条目但不一定表示恶意行为的情况。 |
现在可以在 SIEM 平台中使用此规则来识别已处理日志中的事件。如果您想了解有关 Sigma 的更多信息,我建议您查看 TryHackMe 上的 Sigma 房间。
Yara
Yara 是另一种模式匹配工具,在分析师的工具库中占有一席之地。 Yara 是一种 YAML 格式的工具,可根据二进制和文本模式(例如十六进制和字符串)识别信息。虽然 Yara 通常用于恶意软件分析,但它在日志分析方面非常有效。
让我们看一下名为“IPFinder”的 Yara 规则示例。此 YARA 规则使用正则表达式来搜索任何 IPV4 地址。如果我们正在分析的日志文件包含 IP 地址,YARA 会对其进行标记:
rule IPFinder { |
让我们看看组成这个 Yara 规则的键:
Key | Example | Description |
---|---|---|
rule | IPFinder | 该键命名规则。 |
meta | author | 该密钥包含元数据。例如,在本例中,它是规则作者的姓名。 |
strings | $ip = /([0-9]{1,3}.){3}[0-9]{1,3}/ wide ascii | 该键包含 YARA 应查找的值。在本例中,它使用 REGEX 来查找 IPV4 地址。 |
condition | $ip | 如果检测到变量 $ip,则应触发该规则。 |
使用YARA检测特定IP地址
cmnatic@thm:~$ yara ipfinder.yar apache2.txt |
此 YARA 规则可以扩展为查找:
- 多个IP地址
- 基于范围的 IP 地址(例如 ASN 或子网)
- 十六进制 IP 地址
- 如果列出的 IP 地址超过一定数量(即,如果发现 IP 地址五次,则发出警报)
- 并与其他规则相结合。例如,如果某个 IP 地址访问特定页面或执行特定操作
如果您想了解有关 Yara 的更多信息,请查看 TryHackMe 上的 Yara 房间。
Conclusion
在这个房间中,我们介绍了采用有效日志分析策略背后的基本方法。我们探讨了日志数据收集、常见攻击模式以及调查和响应过程的有用工具的重要性。