一、windows日志

  • 如果windows服务被入侵,往往需要检索和分析相应的安全日志
  • 除了安全设备,系统自带的日志就是取证的关键材料,但是日志数量庞大,需要高效分析windows安全日志

1.1、windows事件日志

  • Windows事件日志文件实际上是以特定的数据结构的方式存储内容,其中包括有关系统,安全,应用程序的记录
  • 每个记录事件的数据结构中包含了9个元素(可以理解成数据库中的字段):
    • 日期/时间
    • 事件类型
    • 用户
    • 计算机
    • 事件ID
    • 来源
    • 类别
    • 描述
    • 数据等信息
  • 查看日志的方法:Win+R,输入 eventvwr.msc 打开事件查看器
eventvwr.msc

image-20240314110929733

1.2、事件查看器

  • 事件查看器将日志分为两大类,windows日志、应用程序日志和服务日志
  • windows日志中又有应用程序、安全、setup、系统和forworded event这几种事件类型

image-20240314111205080

1.2.1、应用程序日志
  • 包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件
  • 例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件
  • 如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于问题的解决
  • 日志默认位置: %SystemRoot%\System32\Winevt\Logs\Application.evtx

image-20240314111644129

1.2.2、系统日志
  • 记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等
  • 系统日志中记录的时间类型由Windows NT/2000操作系统预先定义
  • 日志默认位置: %SystemRoot%\System32\Winevt\Logs\System.evtx

image-20240314112100171

1.2.3、安全日志(主要看这个)

进行应急响应过程中主要看这个

  • 包含安全性相关的事件,如用户权限变更,登录及注销,文件及文件夹访问,打印等信息
  • 日志默认位置: %SystemRoot%\System32\Winevt\Logs\Security.evtx

image-20240314112456944

1.3、事件级别

事件级别 说明
信息 信息事件指应用程序、驱动程序或服务的成功操作的事件
警告 警告事件指不是直接的、主要的,但是会导致将来发生问题的事件。例如,当磁盘空间不足或未找到打印机时,都会记录一个“警告”事件
错误 错误事件指用户须知道的重要的问题,通常包括功能和数据的丢失。例如,如果一个服务不能作为系统引导被加载,那么它将会产生一个错误事件
成功审核 成功的审核安全访问尝试,主要是指安全性日志,这里记录着用户登录/注销、对象访问、特权使用、账户管理、策略更改、详细跟踪、目录服务访问、账户登录等事件
失败审核 失败的审核安全访问尝试。例如用户试图访问网络驱动器失败,则该尝试会被作为失败审核事件记录下来

image-20240314113052115

1.4、事件ID介绍

  • Windows的日志以事件ID来标识具体发生的动作行为,可通过下列网站查询具体id进行的操作

  • https://docs.microsoft.com/en-us/windows/security/threat-protection/搜索 event+ 相应事件的ID

  • 常见事件ID

    事件ID 说明
    4624 账号登录成功
    4625 账号登录失败
    4634 注销成功
    4647 用户启动的注销
    4672 使用超级用户(管理员)进行登录
    4720 创建用户
    4726 删除用户

二、Windows日志分析

2.1、本地交互式登录

  • ​ 4648-4624登录成功

https://learn.microsoft.com/zh-cn/windows/security/threat-protection/auditing/event-4624

首先是成功的登录,从日志分析来看至少会有2个事件发生,ID分别为 4648、4624,以下从上至下分别是各自的截图

image-20240314200546823

image-20240314200714208

  • ID为4648事件,详细信息

该事件说明有人使用身份凭据在尝试 登录,并且头字段中的用户名为SYSTEM,看看描述信息中有什么:

试图使用显式凭据登录。

使用者:
安全 ID: SYSTEM
帐户名: WIN-BSIMCIKEG9C$
帐户域: WORKGROUP
登录 ID: 0x3E7
登录 GUID: {00000000-0000-0000-0000-000000000000}

使用了哪个帐户的凭据:
帐户名: Administrator
帐户域: WIN-BSIMCIKEG9C
登录 GUID: {00000000-0000-0000-0000-000000000000}

目标服务器:
目标服务器名: localhost
附加信息: localhost

进程信息:
进程 ID: 0x38c
进程名: C:\Windows\System32\svchost.exe

网络信息:
网络地址: 127.0.0.1
端口: 0

在进程尝试通过显式指定帐户的凭据来登录该帐户时生成此事件。这通常发生在批量类型的配置中(例如计划任务) 或者使用 RUNAS 命令时。
  • ID为4624事件,描述信息
已成功登录帐户。

使用者:
安全 ID: SYSTEM
帐户名称: WIN-BSIMCIKEG9C$
帐户域: WORKGROUP
登录 ID: 0x3E7

登录信息:
登录类型: 2
受限制的管理员模式: -
虚拟帐户: 否
提升的令牌: 是

模拟级别: 模拟

新登录:
安全 ID: WIN-BSIMCIKEG9C\Administrator
帐户名称: Administrator
帐户域: WIN-BSIMCIKEG9C
登录 ID: 0x1306D0
链接的登录 ID: 0x0
网络帐户名称: -
网络帐户域: -
登录 GUID: {00000000-0000-0000-0000-000000000000}

进程信息:
进程 ID: 0x38c
进程名称: C:\Windows\System32\svchost.exe

网络信息:
工作站名称: WIN-BSIMCIKEG9C
源网络地址: 127.0.0.1
源端口: 0

详细的身份验证信息:
登录进程: User32
身份验证数据包: Negotiate
传递的服务: -
数据包名(仅限 NTLM): -
密钥长度: 0

创建登录会话时,将在被访问的计算机上生成此事件。

“使用者”字段指示本地系统上请求登录的帐户。这通常是一个服务(例如 Server 服务)或本地进程(例如 Winlogon.exe 或 Services.exe)。

“登录类型”字段指示发生的登录类型。最常见的类型是 2 (交互式)和 3 (网络)。

“新登录”字段指示新登录是为哪个帐户创建的,即已登录的帐户。

“网络”字段指示远程登录请求源自哪里。“工作站名称”并非始终可用,并且在某些情况下可能会留空。

“模拟级别”字段指示登录会话中的进程可以模拟到的程度。

“身份验证信息”字段提供有关此特定登录请求的详细信息。
- “登录 GUID”是可用于将此事件与 KDC 事件关联起来的唯一标识符。
-“传递的服务”指示哪些中间服务参与了此登录请求。
-“数据包名”指示在 NTLM 协议中使用了哪些子协议。
-“密钥长度”指示生成的会话密钥的长度。如果没有请求会话密钥,则此字段将为 0。
  • 事件ID为4625事件

失败的本地登录,会产生ID 4625的事件日志

帐户登录失败。

使用者:
安全 ID: SYSTEM
帐户名: WIN-BSIMCIKEG9C$
帐户域: WORKGROUP
登录 ID: 0x3E7

登录类型: 5

登录失败的帐户:
安全 ID: NULL SID
帐户名: -
帐户域: -

失败信息:
失败原因: 登录期间出错。
状态: 0xC0000073
子状态: 0xC0000073

进程信息:
调用方进程 ID: 0x38c
调用方进程名: C:\Windows\System32\svchost.exe

网络信息:
工作站名: -
源网络地址: -
源端口: -

详细身份验证信息:
登录进程: Advapi
身份验证数据包: Negotiate
传递服务: -
数据包名(仅限 NTLM): -
密钥长度: 0

登录请求失败时在尝试访问的计算机上生成此事件。

“使用者”字段指明本地系统上请求登录的帐户。这通常是一个服务(例如 Server 服务)或本地进程(例如 Winlogon.exe 或 Services.exe)。

“登录类型”字段指明发生的登录的种类。最常见的类型是 2 (交互式)和 3 (网络)。

“进程信息”字段表明系统上的哪个帐户和进程请求了登录。

“网络信息”字段指明远程登录请求来自哪里。“工作站名”并非总是可用,而且在某些情况下可能会留为空白。

“身份验证信息”字段提供关于此特定登录请求的详细信息。
-“传递服务”指明哪些直接服务参与了此登录请求。
-“数据包名”指明在 NTLM 协议之间使用了哪些子协议。
-“密钥长度”指明生成的会话密钥的长度。如果没有请求会话密钥,则此字段为 0

2.2、RDP协议远程登录

  • 4648-4624-4672-登录成功
  • 使用mstsc远程登录某个主机时,使用的帐户是管理员帐户的话,成功的情况下会有ID为4648、4624、4672的事件产生

2.3、登录爆破实例

  • 4624 –登录成功

  • 4625 –登录失败

  • 4634 – 注销成功

  • 4647 – 用户启动的注销

  • 4672 – 使用超级用户(如管理员)进行登录

  • 前提

image-20240314203310330

  • 先关闭靶机的防火墙
  • Window爆破一般是445(文件共享服务)和3389(远程桌面连接服务)
  • 使用hydra爆破
hydra -l administrator -P /usr/share/wordlists/fasttrack.txt smb://192.168.43.133 -vV

image-20240314203607137

2.3.1、日志筛选

输入事件ID:4625 ,进行日志筛选

发现登录失败事件数过多,很可能是爆破登录

image-20240314204704898

查看攻击的iP

image-20240314204742386

筛选来自此IP的登录日志是4624,判断是否爆破登录成功

筛选当前日志,XML,手动编辑查询,输入如下XML过滤语句

<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System/EventID=4624]and*[EventData[Data[@Name='IpAddress']='192.168.43.128']]</Select>
</Query>
</QueryList>

image-20240314205421819

image-20240314205434025

如果筛选日志中事件则说明,密码被爆破出,

三、Linux日志

Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。

3.1、说明

  • 内核及系统日志
    • 由系统服务rsyslog统一进行管理,日志格式基本相似
  • 用户日志
    • 记录系统用来登录及退出系统的相关信息
  • 程序日志
    • 由相应的应用程序进行独立管理。如:web服务,ftp服务

3.2、常见日志文件

一台linux不是所有的日志文件都有

日志文件 文件说明
/var/log/cron 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。
/var/log/secure 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH
切换用户sudo 授权甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接编辑查看,而需要使用last命令来查看
var/log/btmp 记录所有失败登录日志信息。这个文件是二进制文件,不能直接编辑查看,使用lastb命令或last -f/var/log/btmp命令可以查看btmp文件
/var/log/cups 涉及所有打印信息的日志。
/var/log/faillog 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。
/var/log/messages 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
/var/log/dmesg 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。记录了系统在开机时内核自检的信息,也可以使用dmesg命令查看内核自检信息
/var/log/auth.log 包含系统授权信息,包括用户登录和使用的权限机制等。
/var/log/boot.log 包含系统启动时的日志。
/var/log/daemon.log 包含各种系统后台守护进程日志信息。
/var/log/dpkg.log 包括安装或dpkg命令清除软件包的日志。
/var/log/kern.log 包含内核产生的日志,有助于在定制内核时解决问题。
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接编辑查看,而要使用lastlog命令查看
/var/log/user.log 记录所有等级用户信息的日志。
/var/log/alternatives.log 更新替代信息都记录在这个文件中。
/var/log/anaconda.log 在安装Linux时,所有安装信息都储存在这个文件中。
/var/log/yum.log 包含使用yum安装的软件包信息。
/var/log/maillog
/var/log/mail.log
包含系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。

3.3、比较重要的日志

登录失败记录:/var/log/btmp		 	#lastb 
最后一次登录:/var/log/lastlog #lastlog
登录成功记录: /var/log/wtmp #last
登录日志记录:/var/log/secure
目前登录用户信息:/var/run/utmp #w、who、users
历史命令记录:history
仅清理当前用户:history -c
  • 记录用户的最后一次信息:/var/log/lastlog
    • 查看的某系统用户最后一次登录的记录,一些系统用户从来不登录最后一次就是Never logged in。
    • 不用直接查看该日志文件,通过命令:lastlog
    • 举例:查看 root 用户最后一次登录的信息

image-20240314211410656

  • 登录用户的信息:/var/log/utmp
    • 记录有关当前登录用户的信息在文件utmp中,utmp文件可以使用命令查询。如:who、w等
    • who命令:访问utmp记录,显示当前正在登录的用户信息。
    • w:与who命令相似,但显示的信息更加详细。

image-20240314211457074

  • /var/log/wtmp

    • wtmp日志文件永久记录每个用户登录和退出、数据交换、关机及重启的信息。

    • wtmp文件被命令last和ac使用。

    • last命令:访问wtmp文件,显示自从文件第一次创建以来所有登陆过的用户

    • ac命令:统计登录的总时长,ac root:显示root用户登陆的总时长

      kali中没有ac命令

  • 登录失败日志:/var/log/btmp

    • 记录Linux登陆失败的用户、时间以及远程IP地址
    • 该文件是一个二进制保存的文件,直接使用 lastb命令查看

image-20240314212022651

这是我的云服务器登录失败日志,可以将这些登录的ip放到微步或者其他在线威胁平台中分析

image-20240314212219737

image-20240314212152723

  • 安全日志:/var/log/secure
    • 现在新版的ubuntu、debian、kali已经没有这个文件了 , 换成了 /var/log/auth.log
    • 一般用来记录安全相关的信息,记录最多的是哪些用户登录服务器的相关日志。例如:sshd会将所有信息(其中包括失败登录)记在这里
    • 如果该文件很大,说明有人在破解你的root密码

image-20240314213035429

四、日志分析工具

4.1、Log Parser

Log Parser(是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、ActiveDirectory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。
Log Parser 2.2下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=24659

image-20240314214048209

  • 基本查询结构
Logparser.exe –i:EVT –o:DATAGRID "SELECT * FROM c:\xx.evtx"

需要使用命令才能执行程序

  • 使用Log Parser分析日志

    查询登录成功的事件

登录成功的所有事件 
LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID= 4624"

指定登录时间范围的事件:
LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where TimeGenerated>'2018-06-19 23:32:11' and TimeGenerated<
'2018-06-20 23:34:00' and EventID=4624"

提取登录成功的用户名和IP:
LogParser.exe -i:EVT –o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\Security.evtx where EventID=
4624

​ 查询登录失败的事件

登录失败的所有事件:
LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID=4625"

提取登录失败用户名进行聚合统计:
LogParser.exe -i:EVT "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,EXTRACT_TOKEN(Message,19,' ') as user,count
(EXTRACT_TOKEN(Message,19,' ')) as Times,EXTRACT_TOKEN(Message,39,' ') as Loginip FROM c:\Security.evtx where EventID=4625 GROUP BY Message"

系统历史开关机记录:

LogParser.exe -i:EVT –o:DATAGRID " SELECT TimeGenerated,EventID,Message FROM c:\ System.evt

4.2、WIndowslogs(图形界面)

image-20240315133342124

使用管理员权限运行,直接读取系统的日志进行分析

image-20240315133359235

image-20240315133421003

一次只显示10条需要手动翻页

4.3、LogonTracer (数据多时使用)

该工具下载与安装需要一定的科学上网能力,且需要Linux系统内存大于4G
LogonTracer这款工具是基于Python编写的,并使用Neo4j作为其数据库(Neo4j多用于图形数据库),是一款用于分析Windows安全事件登录日志的可视化工具。它会将登录相关事件中的主机名(或IP地址)和帐户名称关联起来,并将其以图形化的方式展现出来,使得在日志取证时直观清晰。

github地址 :https://github.com/JPCERTCC/LogonTracer

安装方式:

此安装方式基于 Kali Linux 已安装 docker 和 更新国内阿里apt源 的前提情况下 ,

  • 安装 docker-compose

    apt install -y docker-compose (无需科学上网,需要下载1-2分钟)
  • 克隆 LogonTrace 项目

    git clonehttps://ghproxy.com/https://github.com/JPCERTCC/LogonTracer.git

    (无需科学上网,需要下载1分钟)

  • 进入LogonTrace项目docker-compose文件夹,并构建镜像

    cd LogonTracer/docker-compose
    docker network create neo4j-network
    docker-compose build (此步骤如果不使用科学上网,会非常慢,大概5-10分钟)
    docker-compose up -d (此步骤为开启容器,因为该工具使用neo4j数据库,即使该命令执行完成且无报错,也要等待约2分钟才能正常打开)
  • 打开Kali firefox浏览器,访问http://127.0.0.1:8080并登陆

    • 默认用户名 neo4j
    • 默认密码 password

image-20240315135815203

image-20240315140249672

上传成功后,刷新页面,自动分析

image-20240315143129874

image-20240315143152909