在应急响应初步阶段,我们会对系统日志、中间件安全日志、恶意文件等进行收集。接下来便是要进一步对这些文件进行分析:对恶意文件逆向、日志文件分析、梳理入侵时间线和入侵路径等。本文主要对Windows安全日志进行举例分析。
环境信息:
系统版本:Windows Server 2008 R2
IP地址:192.168.64.140
用户名:win-92uodoq3eg2\administrator
Windows的日志文件主要有系统日志、应用程序日志、安全日志这三类,另外,根据不同的系统服务配置可能还会产生其他的日志文件,如Powershell日志、WWW日志、FTP日志、DNS服务器日志等。这些日志文件由Windows的EventLog服务生成并记录,EventLog服务由Windows服务管理器(%SystemRoot%\system32\services.exe)启动并管理。
在默认情况下, Windows日志仅仅记录一些特定日志,因为Windows日志中每种日志的大小默认为20M,超过大小之后会覆盖最早的日志记录。如果我们需要记录详细的安全日志,则需要通过修改本地策略或者在高级审核策略配置(gpedit.msc)中来启用其他项的日志记录功能。
Windows安全日志存储在C:\Windows\System32\winevt\Logs,该目录下存在许多evtx日志文件,windows安全日志文件主要记录在Security.etvx中,双击即可打开该文件查看windows安全日志。(Windows 2000 / Server2003 / Windows XP 安全日志默认位置在C:\WINDOWS\System32\config\SecEvent.Evt )

通过WIN+R键调出运行界面后,在界面中执行eventvwr,可打开windows日志管理器,选择安全项即可查看windows系统安全日志。


右键单击计算机,点击管理打开服务器管理器,诊断-事件查看器-Windows日志-安全


Windows 2000 / Server2003 / Windows XP :%SystemRoot%\System32\Winevt\Logs\*.evt
Windows Vista / 7 / 10 / Server2008 及以上版本:%SystemRoot%\System32\Config\*.evtx
Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。每种日志默认大小20M,超过大小后会覆盖最早的日志记录
应用程序日志、系统日志,存储着故障排除信息,对于系统管理员更为有用;安全日志,记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么,对于应急响应来说,更有帮助,本文主要对安全日志进行分析研究。
系统日志:系统日志包含由Windows系统组件记录的事件,记录系统进程和设备驱动程序的活动。由它审核的系统事件包括启动失败的设备驱动程序、硬件错误、重复的IP地址以及服务启动、暂停和停止。系统日志也记录启动期间要加载的驱动程序或其他系统组件的故障,记录的事件类型也是预先确定的。
默认位置:
%SystemRoot%\System32\Winevt\Logs\System.evtx
安全日志:安全日志记录各种系统审核和安全处理,包括用户权限的变化、文件和目录的访问、打印以及用户系统登陆和注销,如有效或无效的登陆尝试、与资源使用有关的事件。管理员有按需要指定安全日志中要记录的事件类型,安全日志只有系统管理员可以访问。
默认位置:
%SystemRoot%\System32\Winevt\Logs\Security.evtx
应用程序日志:应用程序日志包含计算机系统中的用户程序和商业程序在运行时出现的错误活动,它审核的事件包括所有应用程序产生的错误以及其他报告的信息,如性能监视审核的事件或一般程序事件。记录事件的种类大致有:硬盘使用情况、数据库文件的文件错误、设备驱动程序加载失败、用户登录系统失败计数等。
默认位置:
%SystemRoot%\System32\Winevt\Logs\Application.evtx
其他日志
Windows PowerShell.evtx
Microsoft-Windows-PowerShell/Operational.evtx
Microsoft-Windows-PowerShell/Analytic.etl
Microsoft-Windows-WinRM/Operational.evtx
Microsoft-Windows-WinRM/Analytic.etl
Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/perational.evtx
Microsoft-Windows-TerminalServices-RemoteConnectionManager/perational.evtx
Microsoft-Windows-TerminalServices-LocalSessionManager/perational.evtx
每条安全日志由以下结构组成:
| 关键字(审核成功/审核失败) | 日期和时间(事件发生的时间) | 来源 | 事件ID | 任务类别 |
|---|

在事件管理器 “查看”菜单上,单击“添加/删除列”。可显示或隐藏事件属性。

下表列出常见的事件属性。
| 属性名 | 描述 |
|---|---|
| 源 | 记录事件的软件,可以是程序名(如“SQL Server”),也可以是系统或大型程序的组件(如驱动程序名)。例如,“Elnkii”表示 EtherLink II 驱动程序。 |
| 事件 ID | 标识特定事件类型的编号。描述的第一行通常包含事件类型的名称。例如,6005 是在启动事件日志服务时所发生事件的 ID。此类事件的描述的第一行是“事件日志服务已启动”。产品支持代表可以使用事件 ID 和来源来解决系统问题。 |
| 级别 | 以下事件严重性级别可能出现在安全日志中: 审核成功。指明用户权限操作成功。 审核失败。指明用户权限操作失败。 在事件查看器的正常列表视图中,这些分类都由符号表示。 |
| 用户 | 事件发生所代表的用户的名称。如果事件实际上是由服务器进程所引起的,则此名称为客户端 ID;如果没有发生模仿的情况,则为主 ID。如果适用,安全日志项同时包含主 ID 和模仿 ID。当服务器允许一个进程采用另一个进程的安全属性时就会发生模拟的情况。 |
| 操作代码 | 包含标识活动或应用程序引起事件时正在执行的活动中的点的数字值。例如,初始化或关闭。 |
| 日志 | 已记录事件的日志的名称。 |
| 任务类别 | 用于表示事件发布者的子组件或活动。 |
| 关键字 | 可用于筛选或搜索事件的一组类别或标记。示例包括“网络”、“安全”或“未找到资源”。 |
| 计算机 | 发生事件的计算机的名称。该计算机名称通常为本地计算机的名称,但是它可能是已转发事件的计算机的名称,或者可能是名称更改之前的本地计算机的名称。 |
| 日期和时间 | 记录事件的日期和时间。 |
当我们分析用户登录记录的时候就会发现,在Windows系统的安全日志中,有一个“登录类型”的说明。其实这个登陆类型就是记录了用户登录到Windows系统的方式,以下简单介绍几种常见的:
| 登录类型 | 描述 | 说明 |
|---|---|---|
| 2 | 交互式登录(Interactive) | 用户在本地进行登录。 |
| 3 | 网络(Network) | 最常见的情况就是连接到共享文件夹或共享打印机时。 |
| 4 | 批处理(Batch) | 通常表明某计划任务启动。 |
| 5 | 服务(Service) | 每种服务都被配置在某个特定的用户账号下运行。 |
| 7 | 解锁(Unlock) | 屏保解锁。 |
| 8 | 网络明文(NetworkCleartext) | 登录的密码在网络上是通过明文传输的,如FTP。 |
| 9 | 新凭证(NewCredentials) | 使用带/Netonly参数的RUNAS命令运行一个程序。 |
| 10 | 远程交互,(RemoteInteractive) | 通过终端服务、远程桌面或远程协助访问计算机。 |
| 11 | 缓存交互(CachedInteractive) | 以一个域用户登录而又没有域控制器可用。 |
如下图 为Administrator用户 通过键盘输入密码正常登录到windows的日志,登录类型为 2

一般登录的进程名为
C:\Windows\System32\winlogon.exe

这里使用IPC连接方式
使用192.168.64.1 IPC连接 192.168.64.140
net use \\192.168.64.140\ipc$ "1" /user:"administrator"


从安全日志可看到源IP,登录用户等信息
以下是一个服务启动后的日志,登录类型为 5

服务启动进程名为
C:\Windows\System32\services.exe

锁屏后尝试解锁


通过Win 10(192.168.64.1)使用safefox账户对Win 2008进行远程桌面连接(192.168.64.140)


4625登录失败日志会存在子状态码的属性,通过改属性,我们可以对登录失败原因进行分析
| 地位和子状态码 | 描述(针对失败的原因的检查) |
|---|---|
| 0xc0000064 | 用户名不存在 |
| 0xc000006a | 用户名是正确的,但密码是错误的 |
| 0xc0000234 | 用户当前锁定 |
| 0xc0000072 | 帐户目前禁用 |
| 0xc000006f | 用户试图登录天的外周或时间限制 |
| 0xc0000070 | 工作站的限制 |
| 0xc0000193 | 帐号过期 |
| 0xc0000071 | 过期的密码 |
| 0xc0000133 | 时钟之间的直流和其他电脑太不同步 |
| 0xc0000224 | 在下次登录用户需要更改密码 |
| 0xc0000225 | 显然一个缺陷在Windows和不是一个风险 |
| 0xc000015b | 没有被授予该用户请求登录类型(又名登录正确的)在这台机器 |
| 0xc000006d | 似乎是由于系统问题和不安全 |
例如下图中,通过子状态码0xc000006a可以的得知,登录失败的具体原因是用户名是正确的,但密码是错误的

事件ID是Windows日志的基本属性之一,通过事件ID可以分析事件类型,以下是常见的几种事件ID
| 事件ID | 说明 | 事件ID | 说明 |
|---|---|---|---|
| 1102 | 清理审计日志 | 4720 | 创建用户 |
| 4624 | 账号成功登录 | 4726 | 删除用户 |
| 4625 | 账户登录失败 | 4728 | 一个成员被添加到启用安全的全局组中。 |
| 4768 | 已请求 Kerberos 身份验证票证 (TGT)。 | 4729 | 成员已从启用安全的全局组中删除。 |
| 4771 | Kerberos 预身份验证失败。 | 4732 | 一个成员被添加到启用安全的本地组。 |
| 4772 | Kerberos 身份验证票证请求失败。 | 4733 | 成员已从启用安全的本地组中删除。 |
| 4769 | 已请求 Kerberos 服务票证。 | 4634 | 帐户已注销。 |
| 4776 | 域控制器尝试验证帐户的凭据。 | 4756 | 一个成员被添加到启用安全的通用组。 |
| 4770 | 更新了 Kerberos 服务票证。 | 4672 | 分配给新登录的特殊权限。 |
| 4672 | 分配给新登录的特殊权限。 | 4757 | 成员已从启用安全的通用组中删除。 |
| 5156 | 出站连接记录 | 4719 | 系统审核策略已更改。 |
| 4698 | 已创建计划任务。 | 5158 | 入站连接记录 |
| 4699 | 计划任务被删除。 | 4702 | 已更新计划任务。 |
| 4700 | 已启用计划任务。 | 4688 | 已创建新进程。 |
| 4701 | 计划任务被禁用。 | 4689 | 一个进程已经退出。 |
其中需要重点关注的有4624,4625,4720,4726,4700,1102等。
主机开机时,常常会产生大量的安全日志:

其中,【事件ID 4608】表示Windows正在启动。之后伴随着一条特殊的登陆成功记录,为什么说特殊呢?因为这一条【事件ID 4624】登陆成功记录中的登陆类型为:0

之后便是许多登陆类型为5的登陆成功记录。

这个很好理解,上面说到登陆类型5,代表是服务账户登陆,而我们的Windows系统启动时,就会有许多服务启动,因此会有许多服务账户登陆记录。然后是启动防火墙驱动、启动防火墙等其他系统事件。
当Windows系统初始化完成后,就到我们的登陆界面了。当我们通过登陆界面登陆时,会产生4条记录如下:

【事件ID 4776】计算机试图验证帐户的凭据。记录了登陆用户名、来源机器名。
【事件ID 4648】试图使用显式凭据登录。同样记录了登陆用户名、来源机器名、来源地址。进程名为:C:\Windows\System32\winlogon.exe
【事件ID 4624】登陆成功。登陆类型2,也就是在本地键盘上进行的登录。
【事件ID 4672】为新登录分配了特殊权限。记录了登陆用户名、登陆用户权限。
其中,4648表示我们是通过登陆界面登陆的。而其他三条,是正常使用账号密码进行登陆都会产生的。也就是说,登录一次产生3条日志:验证凭据、登陆成功、分配权限。
总结:4608启动-4624(0)首次-4624(5)服务启动-4624(5)-4624(5)-4776登录-4648-4624-4672
在安全日志4720中可以查看攻击者创建的用户,即使是隐藏用户都可以查看到。4726则是可以查看到被删除的用户。该事件日志中还可以查看该任务的发起者。
创建普通账户xiansec

创建新账户会有以下日志生成,其中4720创建用户帐户是创建新账户产生的日志
4728 已向启用了安全性的全局组中添加某个成员。
4720 已创建用户帐户。
4722 已启用用户帐户。
4738 已更改用户帐户。
4732 已向启用了安全性的本地组中添加某个成员。
通过4720日志可以查看创建新账户的发起人信息

删除普通账户xiansec

删除账户会有以下日志生成,其中4726日志是删除账户产生的日志
4733 已从启用了安全性的本地组中删除某个成员。
4729 已从启用了安全性的全局组中删除某个成员。
4726 已删除用户帐户。
通过4726日志可以查看删除账户的发起人信息


连接成功


查看安全日志:
和5.1 系统正常启动一样有4条日志信息,只有登陆类型不一样,为10

【事件ID 4776】计算机试图验证帐户的凭据。记录了登陆用户名、来源机器名。
【事件ID 4648】试图使用显式凭据登录。同样记录了登陆用户名、来源机器名、来源地址。进程名为:C:\Windows\System32\winlogon.exe
【事件ID 4624】登陆成功。登陆类型10,远程桌面登录。
【事件ID 4672】为新登录分配了特殊权限。记录了登陆用户名、登陆用户权限。
故意输错密码


查看日志
只有一条审核失败日志4625

使用超级弱口令检查工具V1.0 Beta28进行爆破 这里故意将线程调低 方便日志分析

爆破成功

使用字典共15条密码,正确密码在最后一条,爆破15次,最后一次成功,完成4个日志动作 4624登录-4672-4776-4648
执行命令如下:
net use \\192.168.64.140 /u:admin 123 #密码错误
net use \\192.168.64.140 /u:admin 12 #密码错误
net use \\192.168.64.140 /u:admin 1 #密码正确

分析日志

两次4625 审核失败日志 4624(3)登录成功 记录了来源IP,来源主机名,登陆的用户名等信息。
使用超级弱口令检查工具V1.0 Beta28模拟进行爆破

分析日志

存在大量4625的登录失败日志 且登录类型为3,登录进程:为NtLmSsp

登录成功会产生一条登录类型为3的4624登录成功日志,同时会有4672,4776事件ID日志生成
在windows中,若运维人员开启了记录所有安全日志项,那么攻击者在拿到该服务器权限后 的所有操作都可以在该安全日志中被记录到。所以清空该Security日志肯定是一个善后的必然选择。如果
打开windows日志 清除日志


清除日志会生成一条事件ID为1102 日志清除的日志

日志详情

此条日志会记录清除日志操作的账户名
本文主要对Windows安全日志进行了分析与研究,从日志的分类、登录事件分析以及场景日志分析等方面进行了研究。总的来说,windows安全日志对于应急人员是重要且基础的分析项,对其进行深入学习研究有助于应急排查工作。
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解
如何在出现异常时指定全局救援,如果您将Sinatra用于API或应用程序,您将如何处理日志记录? 最佳答案 404可以在not_found方法的帮助下处理,例如:not_founddo'Sitedoesnotexist.'end500s可以通过调用带有block的错误方法来处理,例如:errordo"Applicationerror.Plstrylater."end错误的详细信息可以通过request.env中的sinatra.error访问,如下所示:errordo'Anerroroccured:'+request.env['si