EmergencyResponse-应急响应之Windows基础

当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失

常见的应急响应事件分类:

  1. web入侵:网页挂马、主页篡改、Webshell
  2. 系统入侵:病毒木马、勒索软件、远控后门
  3. 网络攻击:DDOS攻击、DNS劫持、ARP欺骗

入侵排查思路

img

在简单做完定向分析并取证后,如果客户直接把系统重置了就不需要下一步了,如果客户要求从头到尾把系统排查一下那么就利用工具和手法进行排查。

对账户、进程、端口、服务、启动项、计划任务、文件、日志进行逐个检测,

系统基本信息

将隐藏文件和后缀名显示打开!!!

  1. msinfo32查看Windows信息

    1. 硬件信息
    2. 运行任务
    3. 服务
    4. 系统驱动程序
    5. 加载的模块
    6. 启动程序

    image-20241203085850947

    image-20241203085939226

  2. systeminfo

    1. 查看补丁是否齐全,是否存在ms08-067相关漏洞

      img

    2. 工具

      https://github.com/AonCyberLabs/Windows-Exploit-Suggester

      https://github.com/peass-ng/PEASS-ng

查找可疑目录及文件

相关目录

下载目录 回收站文件
Temp History
应用程序打开历史 搜索历史
Lnk 驱动:(cmd>Drivequery)日期
进程dll关联查询(tasklist -m) 共享文件(cmd>Net share)
最近的文件(资源管理器>%UserProfile%\Recent) 文件更新
已安装文件,控制面板或者(regedit>\software\Microsoft\Windows\CurrentVersion\Uninstall)
Directory Description
C:\Windows\System32\drivers\etc\hosts DNS文件
C:\Windows\System32\drivers\etc\networks 网络配置文件
C:\Windows\System32\config\SAM 用户名及密码文件
C:\Windows\System32\config\SECURITY Security日志文件
C:\Windows\System32\config\SOFTWARE Software日志文件
C:\Windows\System32\config\SYSTEM System日志文件
C:\Windows\System32\config\winevt\ Windows事件日志
C:\Windows\repair\SAM 用户名及密码备份文件

image-20241203101324677

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 检查方法
a. 查看用户目录,新建账号会在这个目录生成一个用户目录,查看是否有新建用户目录.
# Window 2003:
C:\Documents and Settings
# Window 2008 R2:
C:\Users\
b. 单击【开始】>【运行】,输入
C:\Documents and Settings\Administrator\Recent
C:\Documents and Settings\Default User\Recent
%UserProfile%\Recent
分析最近打开分析可疑文件.
c. 在服务器各个目录,可根据文件夹内文件列表时间进行排序,查找可疑文件.
d. forfiles /?

FORFILES [/P pathname] [/M searchmask] [/S]
[/C command] [/D [+ | -] {yyyy/MM/dd | dd}]

描述:
选择一个文件(或一组文件)并在那个文件上
执行一个命令。这有助于批处理作业。

参数列表:
/P pathname 表示开始搜索的路径。默认文件夹是当前工作的
目录 (.)。
/M searchmask 根据搜索掩码搜索文件。默认搜索掩码是 '*'。
/S 指导 forfiles 递归到子目录。像 "DIR /S"。
/C command 表示为每个文件执行的命令。命令字符串应该
用双引号括起来。
默认命令是 "cmd /c echo @file"。下列变量
可以用在命令字符串中:
@file - 返回文件名。
@fname - 返回不带扩展名的文件名。
@ext - 只返回文件的扩展名。
@path - 返回文件的完整路径。
@relpath - 返回文件的相对路径。
@isdir - 如果文件类型是目录,返回 "TRUE";
如果是文件,返回 "FALSE"。
@fsize - 以字节为单位返回文件大小。
@fdate - 返回文件上一次修改的日期。
@ftime - 返回文件上一次修改的时间。
要在命令行包括特殊字符,字符请以 0xHH
形式使用十六进制代码(例如,0x09 为 tab)。
内部 CMD.exe 命令前面应以 "cmd /c" 开始。
/D date 选择文件,其上一次修改日期大于或等于 (+),
或者小于或等于 (-) 用 "yyyy/MM/dd" 格式指定的日期;
或选择文件,其上一次修改日期大于或等于 (+)
当前日期加 "dd" 天,或者小于或等于 (-) 当前
日期减 "dd" 天。有效的 "dd" 天数可以是
0 - 32768 范围内的任何数字。如果没有指定,
"+" 被当作默认符号。
/? 显示此帮助消息。

示例:
FORFILES /?
FORFILES
FORFILES /P C:\WINDOWS /S /M DNS*.*
FORFILES /S /M *.txt /C "cmd /c type @file | more"
FORFILES /P C:\ /S /M *.bat
FORFILES /D -30 /M *.exe
/C "cmd /c echo @path 0x09 在 30 前就被更改。"
FORFILES /D 2001/01/01
/C "cmd /c echo @fname 在 2001年1月1日就是新的。"
FORFILES /D +2024/7/18 /C "cmd /c echo @fname 今天是新的。"
FORFILES /M *.exe /D +1
FORFILES /S /M *.doc /C "cmd /c echo @fsize"
FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

FORFILES /P C:\WINDOWS /S /M DNS\*.\*

  • 功能:在 C:\WINDOWS 文件夹及其所有子文件夹中查找以 “DNS” 开头的文件(无论扩展名是什么)。
  • 参数解释
    • /P C:\WINDOWS:指定从 C:\WINDOWS 文件夹开始搜索
    • /S:递归搜索子文件夹
    • /M DNS*.*:匹配以 “DNS” 开头的所有文件

FORFILES /S /M \*.txt /C "cmd /c type @file | more"

  • 功能:在当前目录及其所有子目录中,查找扩展名为 .txt 的文件,并显示每个文件的内容(分页显示)。
  • 参数解释
    • /S:递归搜索子文件夹
    • /M *.txt:匹配 .txt 文件
    • /C "cmd /c type @file | more"
      • cmd /c:执行后面的命令
      • type @file:显示当前文件内容
      • | more:分页显示文件内容

FORFILES /P C:\ /S /M *.bat

  • 功能:在 C:\ 驱动器及其所有子目录中查找 .bat 文件

  • 参数解释

    • /P C:\:从 C:\ 目录开始
    • /S:递归搜索
    • /M *.bat:匹配 .bat 文件

    FORFILES /P D:\xxxxxxx\Desktop /S /M *.bat /C "cmd /c echo @path"

    image-20241203111113710

FORFILES /D -30 /M *.exe /C "cmd /c echo @path 0x09 在 30 前就被更改。"

  • 功能:查找当前目录中最近 30 天之前修改的 .exe 文件,并输出文件路径和提示信息。

  • 参数解释

    • /D -30:匹配最近 30 天之前修改的文件
    • /M *.exe:匹配 .exe 文件
    • /C "cmd /c echo @path 0x09 在 30 前就被更改。"
      • @path:当前文件的完整路径
      • 0x09:表示制表符(TAB 键)
      • echo ...:显示消息

    image-20241203112011590

FORFILES /D 2001/01/01 /C "cmd /c echo @fname 在 2001年1月1日就是新的。"

  • 功能:查找自 2001 年 1 月 1 日起修改的文件,并输出文件名及提示信息
  • 参数解释
    • /D 2001/01/01:匹配从 2001 年 1 月 1 日开始修改的文件
    • /C "cmd /c echo @fname ..."
      • @fname:当前文件名(不包括路径和扩展名)
      • echo ...:显示消息

FORFILES /D +2024/7/18 /C "cmd /c echo @fname 今天是新的。"

  • 功能:查找从 2024 年 7 月 18 日之后修改的文件,并输出文件名和提示信息
  • 参数解释
    • /D +2024/7/18:匹配从指定日期开始修改的文件
    • /C "cmd /c echo @fname ...":输出文件名和消息

FORFILES /M *.exe /D +1

  • 功能:查找最近 1 天内修改的 .exe 文件
  • 参数解释
    • /M *.exe:匹配 .exe 文件
    • /D +1:匹配最近 1 天内修改的文件

FORFILES /S /M *.doc /C "cmd /c echo @fsize"

  • 功能:在当前目录及其子目录中,查找 .doc 文件并输出每个文件的大小(以字节为单位)
  • 参数解释
    • /S:递归搜索
    • /M *.doc:匹配 .doc 文件
    • /C "cmd /c echo @fsize":显示文件大小

FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

  • 功能:在当前目录中查找 .txt 文件,并使用 Notepad 打开每个非目录文件
  • 参数解释
    • /M *.txt:匹配 .txt 文件
    • /C "cmd /c if @isdir==FALSE notepad.exe @file"
      • @isdir:检查文件是否为目录
      • notepad.exe @file:用 Notepad 打开文件

后门查杀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动项
HKEY_LOCAL_MACHINE\SOFTWARE\Microft\windows\currentversion\run
# 用户登录
HKCU\Environment
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
# 定时任务/计划任务
1. 单击[开始]>[设置]>[控制面板]>[任务计划],查看计划任务属性,便可以发现木马文件的路径
2. 单击[开始]>[运行];输入cmd,然后输入at,检查计算机与网络上的其它计算机之间的会话或计划任务,如有,则确认是否为正常连接
# 服务自启动
1. 单击[开始]>[运行],输入services.msc,注意服务状态和启动类型,检查是否有异常服务
# dll劫持
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\Control\Session Manager\ExcludeFromKnownDlls
# COM劫持
%APPDATA%\Roaming\Microsoft\Installer\{BCDE0395-E52F-467C-8E3D-C4579291692E}\

image-20241203113517427

image-20241203113632850

image-20241203120311630

image-20241203120522804

image-20241203120637038

image-20241203120732827

程序运行记录

使用WinPrefetchView解析Prefetch文件夹中的.pf文件取证。

https://www.nirsoft.net/utils/win_prefetch_view.html#google_vignette

img

检查系统账号安全

  1. 查看服务器是否有弱口令

    1
    2
    # 检查方法:
    据实际情况咨询相关服务器管理员
  2. 查看服务器是否存在可疑账号、新增账号.

    1
    2
    3
    4
    5
    6
    # 检查方法:
    lusrmgr.msc 查看是否有新增/可疑的账号
    net localgroup administrators
    wmic UserAccount get
    在管理员群组的(Administrators)里如有新增账户,请立即禁用或删除掉.
    使用D盾、HM查杀工具,集成了对克隆账号检测的功能.

    image-20241203131438181

    img

  3. 结合日志,查看管理员登录时间、用户名是否存在异常.

    1
    2
    3
    4
    # 检查方法:
    a. Win+R打开运行,输入"eventvwr.msc",回车运行,打开"事件查看器"
    b. 导出Windows日志--安全,利用LogParser进行分析
    LogParser.exe -i:EVT "SELECT TimeGenerated AS LoginTime, EXTRACT_TOKEN(Strings, 5, '|') AS username FROM C:\Users\Administrator\Desktop\Security.evtx WHERE EventID = 4624"

    选择 “Windows 日志”–>”安全”,选择”将所有事件另存为(E)…”:

    image-20241203131756873

    image-20241203131933121

    日志分析:

    https://www.microsoft.com/en-us/download/details.aspx?id=24659

    通过这个链接下载LogParser.msi

    image-20241203133100191

    搜索应用,并打开,出现如下窗口:

    image-20241203133122840

    使用注意:

    1
    LogParser.exe -i:EVT "SELECT TimeGenerated AS LoginTime, EXTRACT_TOKEN(Strings, 5, '|') AS username FROM E:\APP\Log Parser 2.2\datas\Security.evtx WHERE EventID = 4624"

    image-20241203133754067

    报错了,主要是由于路径中包含空格,而路径没有用引号包裹完整,从而导致 Log Parser 将路径的一部分(如 Log Parser 2.2)误解为其他参数。

    正确用法:用双引号将包含空格的路径完全包裹起来

    1
    >LogParser.exe -i:EVT "SELECT TimeGenerated AS LoginTime, EXTRACT_TOKEN(Strings, 5, '|') AS username FROM 'E:\APP\Log Parser 2.2\datas\Security.evtx' WHERE EventID = 4624

    image-20241203133919777

    img

  4. wmic命令

    1
    wmic useraccount get Name,SID

    img

隐藏账号-番外篇

window 隐藏系统用户操作,CMD命令行下,建立了一个用户名为test$,密码为Test123的简单隐藏账户,并且把该隐藏账户提升为了管理员权限。

image-20241203155136519

image-20241203155515032

CMD命令行使用net user,看不到test$这个账号,但使用net localgroup administrators命令、控制面板和本地用户和组是可以显示此用户:

image-20241203155918144

image-20241203163526788

克隆账号制作过程:

  1. “开始”→“运行”,输入

    1
    regedit

    后回车,需要到

    1
    HKEY_LOCAL_MACHINE\SAM\SAM

    单机右建权限,给予

    1
    administrator

    image-20241203163708764

    用户完全控制以及读取的权限,在后面打勾就行。然后关闭注册表编辑器,再次打开即可:

    image-20241203163825271

    关于注册表,重新打开后:
    image-20241203164106757

  2. 来到注册表编辑器的HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names处,点击test$用户,得到在右边显示的键值中的”类型”一项显示为0x3ea,找到箭头所指目录:

    image-20241203164155893

  3. 找到administrator所对应的的项为000001F4,将00001F4的F值复制到000003EA的F值中,保存:

    image-20241203165205447

    image-20241203165635856

    image-20241203165937872

  4. 分别test$000003EA导出到桌面,删除test$用户

    1
    net user test$ /del

    image-20241203170227963

    image-20241203170404866

    删除了用户后,再次查看注册表,发现用户相关信息已经不存在了:
    image-20241203170543437

  5. 将刚才导出的两个后缀为.reg的注册表项导入注册表中,这样所谓的隐藏账户就创建好了
    image-20241203170706116

    PS:不管是在命令提示符下输入net user 或者在系统用户管理界面都是看不到test$这个账户的,只有在注册表中才能看得到

    image-20241204101002760

    image-20241204101050066

检查异常端口、进程

  1. 检查端口连接情况,是否有远程连接、可疑连接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 检查方法:
    # 注意以下状态的网络连接:
    - ESTABLISHED: 连接建立数据传输
    - LISTEN: 监听中等待连接
    a. netstat -ano
    b. 根据netstat定位出的pid,再通过tasklist命令进行进程定位
    tasklist | findstr "PID"
    # 注册表查看RDP端口
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

    image-20241204101328236

    image-20241204101632610

    Tcpview、火绒剑、命令行下netstat -ano

    image-20241204103010709

    image-20241204102848877

    DNSQuerySniffer:DNS解析查询工具。可以通过此工具确定访问恶意域名的端口号,该工具还可以将主机访问过的所有域名记录下来。

    image-20241204103553190

  2. 进程
    ProcessExplorer:https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer
    D盾:https://www.d99net.net/

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 检查方法:
    a. 开始--运行--输入
    msinfo32
    依次点击"软件环境→正在运行任务"就可以查看到进程的详细信息,比如进程路径、进程ID、文件创建日期、启动时间等.
    b. 打开D盾查杀工具,进程查看,关注没有签名信息的进程.
    c. 通过微软官方提供的ProcessExplorer等工具进行排查.
    d. 查看可疑的进程及其子进程.可以通过观察以下内容:
    1. 没有签名验证信息的进程
    2. 没有描述信息的进程
    3. 进程的属主
    4. 进程的路径是否合法
    5. CPU或内存资源占用长时间过高的进程

    image-20241204104010921

    image-20241204104613794

  3. 小技巧:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    a. 查看端口对应的PID: netstat -ano | findstr "port"
    b. 查看进程对应的PID: 任务管理器--查看--选择列--PID
    或者 tasklist | findstr "PID"
    c. 查看进程对应的程序位置:
    1. 任务管理器--选择对应进程--右键打开文件位置
    2. cmd输入wmic process
    d. tasklist /svc # 进程--PID--服务
    e. 查看Windows服务所对应的端口:
    %system%/system32/drivers/etc/services
    # 一般 %system% 就是C:\Windows
    f. # 查询对应进程的详细信息
    # 进程的标题或名称,进程启动时使用的命令行,创建进程的类的名称,进程创建的日期和时间,客户端超级计算机的创建类名(通常与 CreationClassName 相同),计算机的名称,进程的描述,进程的可执行文件路径,进程的执行状态(例如:正在运行、停止等),进程句柄的十六进制表示,进程当前打开的句柄数量,安装日期,进程在内核模式下运行的总时间,进程可使用的最大工作集大小(内存页数),进程可使用的最小工作集大小(内存页数),进程的名称,操作系统创建的类的名称,操作系统的名称,其他操作计数,其他传输计数,进程引起的页面错误次数,进程使用的页面文件大小,创建此进程的父进程的ID
    # Caption,CommandLine,CreationClassName,CreationDate,CSCreationClassName,CSName,Description,ExecutablePath,ExecutionState,Handle,HandleCount,InstallDate,KernelModeTime,MaximumWorkingSetSize,MinimumWorkingSetSize,Name,OSCreationClassName,OSName,OtherOperationCount,OtherTransferCount,PageFaults,PageFileUsage,ParentProcessId

    wmic process get Caption,CommandLine,ExecutablePath,InstallDate,Name,ProcessId /format:csv | findstr "phpstudy"

    # format:
    # /FORMAT:CSV 逗号分隔值格式
    # /FORMAT:HTML 超文本标记语言格式
    # /FORMAT:LIST 以列表形式输出(默认格式)
    # /FORMAT:MOF 管理对象格式
    # /FORMAT:RAWXML 原始XML格式
    # /FORMAT:TABLE 以表格形式输出

    image-20241204104739486

    image-20241204104948662

    img

  4. WinRM端口复用连接排查

    • 在默认情况下,WinRM服务的端口为5985,但可通过配置将其改成80端口

    • 在排查时,可使用命令winrm enumerate winrm/config/listener查看是否启动服务,当存在返回信息时,则说明服务运行中,当无返回信息时,则服务关闭

      img

    • 关闭服务命令

      • cmd:winrm delete winrm/config/Listener?Address=*+Transport=HTTP
      • powershell
        • Set-Service -Name winrm -StartupType Disabled
        • Stop-Service winrm

检查启动项、计划任务、服务

什么是Windows启动项?

  • 开机的时候系统会在前台或者后台运行的程序

什么是Windows启动项后门?

Windows启动项后门也是攻击者常用的权限维持方式,大体上可以分为两种。

  • 一是重启电脑时自启动后门程序实现权限维持;
  • 二是点击某应用、服务、程序时自启动后门程序实现权限维持。

什么是计划任务?

  • 一般是指在操作系统中设置定时任务
  • 计划任务是系统的常见功能,利用任务计划功能,可以将任何脚本、程序或文档安排在某个最方便的时间运行。

什么是计划任务后门?

  • 计划任务是经常被攻击者拿来利用的控制点,计划任务可以让目标主机在特定的时间执行我们预先准备的后门程序从而帮助我们进行权限维持。

什么是Windows服务?

  • Windows 会话中可运行的可执行应用程序
  • 在Windows系统中还有一个重要的机制,就是服务。通常大部分的服务都拥有SYSTEM权限,如果攻击者利用Windows的服务机制创建一个后门服务,那么这个后门将比一般的持久化方法更为强健。
  1. 检查服务器是否有异常的启动项

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    # 检查方法:
    a. 登录服务器,单击【开始】>【所有程序】>【启动】,默认情况下此目录在是一个空目录,
    确认是否有非业务程序在该目录下.
    b. 单击开始菜单>【运行】,输入msconfig,查看是否存在命名异常的启动项目,
    是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件.
    c. 单击【开始】>【运行】,输入regedit,打开注册表,
    查看开机启动项是否正常,特别注意如下注册表项:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\Run
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
    (ProfilePath)\Start Menu\Programs\Startup 启动项
    检查右侧是否有启动异常的项目,如有请删除,并建议安装杀毒软件进行病毒查杀,清除残留病毒或木马.

    # 注册表目录含义
    # 此处存储的信息可确保在Windows资源管理器中执行时打开正确的程序.它还包含有关拖放规则、快捷方法和用户界面信息的更多详细信息
    HKEY_CLASSES_ROOT(HKCR)
    # 包含当前登录系统的用户的配置信息,有用户的文件夹、屏幕颜色和控制面板设置
    HKEY_CLASSES_USER(HKCU)
    # 包含运行操作系统的计算机硬件特定信息,有系统上安装的驱动器列表及已安装硬件和应用程序的通用配置
    HKEY_LOCAL_MACHINE(HKLM)
    # 包含系统上所有用户配置文件的配置信息,有应用程序配置和可视配置
    HKEY_USERS(HKU)
    # 存储有关系统当前配置的信息
    HKEY_CLASSES_CONFIG(HCU)

    # 注册表操作命令
    1. reg add添加注册表
    2. reg delete删除注册表
    3. reg query返回注册表的子项下的项和下一层项的列表

    d. 利用安全软件查看启动项、开机时间管理等.
    e. 组策略,运行gpedit.msc.
    f. msconfig 图形化查看启动项

    image-20241205095528349

    img

    autoruns:检查启动项、计划任务、服务最推荐的工具。

    https://learn.microsoft.com/en-us/sysinternals/downloads/autoruns

    image-20241205102219367

    WMI后门:无文件,相对来说难以排查,但也可以使用autoruns排查。

    image-20241205104113129

  2. 检查计划任务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 检查方法:
    a. 单击【开始】>【设置】>【控制面板】>【任务计划】
    查看计划任务属性,便可以发现木马文件的路径.
    b. taskschd.msc
    c. compmgmt.msc
    d. schtasks
    e. powershell输入Get-ScheduledTask
    f. C:\Windows\System32\Tasks\
    g. C:\Windows\SysWOW64\Tasks\
    h. C:\Windows\tasks\

    image-20241205105129043

    image-20241205105058863

    image-20241205105250226

    image-20241205105343009

  3. 服务自启动

    服务可以理解为运行在后台的进程,这些服务可以在计算机启动时自动启动,也可以暂停和重新启动,而且不显示任何用户界面

    服务作为一种运行在后台的进程,是恶意软件常用的贮存方法

    1
    2
    3
    # 检查方法:
    单击【开始】>【运行】,输入services.msc,注意服务状态和启动类型
    检查是否有异常服务.

    image-20241205105417263

进程分析

Windows进程排查,主要是找到恶意进程的PID,程序路径有时还需要找到PPID(PID的父进程),及程序加载的DLL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. 任务管理器
2. tasklist命令
1. tasklist /svc 查看进程服务
2. tasklist /m 查看加载dll的恶意进程
3. tasklist /m dll文件名 指定dll的调用情况
4. tasklist过滤器 tasklist /fi 'pid eq 992' eq表示等于
5. 可以先使用netstat -ano查看端口连接信息,然后使用tasklist | findstr进行排查
3. powershell
1. 用途在存在守护进程的进程,确认子父进程的关系
2. Get-WmiObject Win32_Process | select Name,ProcessId,ParentProcessId,Path
4. wmic命令
1. 以csv格式列出所有信息
wmic process list full /format:csv
2. 以csv格式显示进程的名称、父进程ID、进程ID
wmic process get name,parentprocessid,processid /format:csv

image-20241205105920759

主要注意点大致就是:没有厂商名字、没有签名验证信息、没有描述信息的可疑进程。还有典型的挖矿现象(CPU 或内存资源占用长时间过高)的进程。

Pchunter:黑色为微软官方进程,蓝色为外界安装软件进程,红色为可疑进程,同时注意进程参数

img

但是,因为版本老旧,一般都是使用火绒剑代替:

image-20241205112314190

process Explorer:进程浏览器。界面功能从左到右为:Process进程CPU占比Private Bytes提交大小Working Set(工作设置、内存)PIDDescription描述Company Name公司名。
小技巧:被注入的进程属性里会多出.NET Assemblies.NET Performance两个菜单

image-20241205112626588

文件痕迹排查

1
2
3
4
5
6
7
8
9
10
11
12
13
1. 敏感目录
1. 各个盘符的tmp/temp相关目录 恶意程序投放的文件一般都会在路径相对统一的文件夹下,而临时目录相对统一
2. 浏览器记录:人工入侵事件,入侵者会下载后续入侵的相关工具
3. Recent文件 位置:Everything全盘搜索即可 Recent文件主要存储了最近运行文件的快捷方式,可通过分析最近运行的文件,排查可疑文件
4. Prefetch预读取文件夹 位置:%SystemRoot%\Prefetch\ 用来存放系统已访问过的文件的预读取信息,扩展名位pf
5. Amcache.hve文件可以查询应用程序的执行路径、上次执行的时间以及SHA1值
2. 时间查找
1. 简介:安全事件发生后,需要确认事件发生的时间点,然后排查时间点前后文件变动情况,缩小排查范围
2. 列出攻击日期内新增的文件,从而发现相关的恶意软件
1. forfiles命令查找对应条件的文件
2. 使用everything对该时间段的文件进行排查
3. 对文件的创建时间、修改时间、访问时间进行排查 查看文件属性,查看创建时间和修改时间是否存在逻辑上的问题,如果存在则该文件需要重点排查
3. webshell使用D盾、HwsKill、WebShellKill等webshell扫描工具进行扫描

image-20241205114029121

辅助功能镜像劫持-Shift粘贴键后门

什么是Shift粘贴键后门?

  • Shift粘滞键是当用户连按5次shift就会自动弹出的一个程序,其实不光是粘滞键,还有各种辅助功能,这类辅助功能都拥有一个特点就是当用户未进行登录时也可以触发。所以攻击者很有可能通过篡改这些辅助功能的指向程序来达到权限维持的目的。 (辅助功能镜像劫持是一样的原理)

为了使电脑更易于使用和访问,Windows 添加了一些辅助功能。这些功能可以在用户登录之前以组合键启动。根据这个特征,一些恶意软件无需登录到系统,通过远程桌面协议就可以执行恶意代码。
比如最常见的按5下shift出现的粘滞键Sethc.exe,还有Windows + U组合键时启动的utilman.exe程序
还有:

1
2
3
4
5
屏幕键盘: C:\Windows\System32\osk.exe
放大镜: C:\Windows\System32\Magnify.exe
旁白: C:\Windows\System32\Narrator.exe
显示切换器 C:\Windows\System32\DisplaySwitch.exe
应用切换器: C:\Windows\System32\AtBroker.exe

低版本

在较早的 Windows 版本,只需要进行简单的二进制文件替换,比如经典的shift后门是将C:\Windows\System32\sethc.exe替换为cmd.exe
仅限windows 2003、xp系统

1
2
copy c:\windows\system32\sethc.exe c:\windows\system32\sethc.exe.bak
copy c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe

img

img

高版本

我们需要用到IFEO,即映像劫持

什么是IFEO

所谓的IFEO就是Image File Execution Options,直译过来就是映像劫持。它又被称为“重定向劫持”(Redirection Hijack),它和“映像劫持”(Image Hijack,或IFEO Hijack)只是称呼不同,实际上都是一样的技术手段。白话来讲就是做某个操作的时候被拦截下来,干了别的事。

当我们双击运行程序时,系统会查询该IFEO注册表,如果发现存在和该程序名称完全相同的子键,就查询对应子健中包含的“debugger”键值名,如果该参数不为空,系统则会把 Debugger 参数里指定的程序文件名作为用户试图启动的程序执行请求来处理。这样成功执行的是遭到“劫持”的虚假程序。

劫持的原理总结:

  • 正常流程:用户启动某个程序(如 notepad.exe)。
  • IFEO 检查:操作系统检查 IFEO 注册表中的配置,看是否存在与该程序名相同的键。
  • 劫持:如果存在 "Debugger" 键且其值指向恶意程序,操作系统会启动恶意程序而不是目标程序。

攻击者如何利用 IFEO:

  1. 替代合法程序:攻击者可以在 IFEO 配置中注入指向恶意可执行文件的路径。当用户启动被劫持的程序时,实际启动的可能是攻击者设定的恶意程序。
  2. 绕过安全检测:有时,攻击者可以使用 IFEO 来执行与正常操作相关的恶意代码,例如通过在 cmd.exepowershell.exe 等系统程序中设置恶意调试器,来执行未被检测的恶意脚本或命令。
  3. 持久化:由于 IFEO 是在注册表中配置的,因此只要该项没有被删除,劫持就会持续有效,增加了攻击者持久化的能力。

防御措施:

  • 监控注册表:定期检查 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 路径下的子项,确保没有被修改或注入恶意条目。
  • 加固程序执行权限:限制程序的执行权限,防止恶意软件修改系统配置。
  • 防病毒软件:使用反病毒软件进行实时监控,检查是否存在恶意劫持行为。

IFEO 劫持是一种巧妙且隐蔽的攻击手段,攻击者可以通过这种方式在用户不知情的情况下执行恶意程序,因此它对安全防护提出了较高要求。

命令行修改
1
2
3
# 需要管理员权限
# 在以下注册表中的sethc.exe项添加一个Debugger字符值(REG_SZ),并且赋值为cmd.exe的执行路径为C:\windows\system32\cmd.exe,如图:
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"

image-20241205134327343

image-20241205134455274

image-20241205134748353

成功。

Windows日志及工具

Windows日志介绍

依赖的服务:EventLog服务

位置:

  • Windows 2000 / Server2003 / Windows XP :%SystemRoot%\System32\Config\*.evtx
  • Windows Vista / 7 / 10 / Server2008 及以上版本: %SystemRoot%\System32\Winevt\Logs\*.evtx

img

image-20241205135210966

Windows日志分类

类型 描述
系统日志(System.evtx) 系统日志包含由Windows系统组件记录的事件,记录系统进程和设备 驱动程序的活动。由它审核的系统事件包括启动失败的设备驱动程序、硬件错误、重复的IP地址 以及服务启动、暂停和停止。
应用程序日志(Application.evtx) 记录程序在运行过程中的日志信息。
安全日志(Security.evtx) 安全日志记录各种系统审核和安全处理,包括用户权限的变化、文件 和目录的访问、打印以及用户系统登陆和注销,如有效或无效的登陆尝试、与资源使用有关的事 件。管理员有按需要指定安全日志中要记录的事件类型。

系统日志

简介:主要指Windows系统中的各个组件在运行中产生的各种事件

  1. 系统驱动在运行中出现的问题
  2. 操作系统的多种组件在运行中出现的各种问题
  3. 应用软件在运行中出现的重大问题

问题包括:数据丢失、错误,以及系统崩溃行为

  1. Windows2000-WindowsServer2003:C:\WINDOWS\System32\config\SysEvent.evt
  2. Windows Vista-Win10以及Windows Server 2008/2012:%SystemRoot%\System32\Winevt\Logs\System.evt
1
2
3
4
# 分析方法:
a. 前提:开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等.
b. Win+R打开运行,输入"eventvwr.msc",回车运行,打开"事件查看器".
C. 导出应用程序日志、安全日志、系统日志,利用LogParser进行分析.

image-20241205135505248

安全日志

简介:记录系统各种安全事件

  1. 各种登录与退出系统的成功或不成功的信息
  2. 对系统中各种重要资源的操作,如对系统文件的创建、删除、修改等操作
  1. Windows2000-WindowsServer2003:C:\WINDOWS\System32\config\SecEvent.evt
  2. WindowsVista-Win10以及WindowsServer2008/2012:%SystemRoot%\System32\Winevt\Logs\Security.evt

应用程序日志

简介:各类应用程序产生的各类事件:登录、退出等日志

  1. Windows2000-WindowsServer2003:C:\WINDOWS\System32\config\AppEvent.evt
  2. WindowsVista-Win10以及WindowsServer2008/2012:%SystemRoot%\System32\Winevt\Logs\Application.evt

在默认情况下, Windows日志仅仅记录一些特定日志,因为Windows日志中每种日志的大小默认为 20M,超过大小之后会覆盖最早的日志记录。如果我们需要记录详细的安全日志,则需要通过修改本地策略或者在高级审核策略配置中来启用其他项的日志记录功能。

image-20241205135812869

img

img

Windows事件ID

审核策略更改

此安全设置确定 OS 是否对尝试更改用户权限分 配策略、审核策略、帐户策略或信任策略的每 一个实例进行审核.

类别 子类别 默认状态 对应高级审核策略配置
审核策略更改 审核审核策略更改 成功 策略更改
审核身份验证策略更改 成功 策略更改
审核授权策略更改 无审核 策略更改
审核筛选平台策略更改 无审核 策略更改
审核 MPSSVC 规则级策略更改 无审核 策略更改
审核其他策略更改事件 无审核 策略更改
子类别 默认状态 事件ID 事件说明
审核审核策略更改 成功 4715 对象的审核策略 (SACL) 已更改.
成功 4719 系统审核策略已更改.
成功 4817 对象的审核设置已更改.
成功 4902 创建了每用户审核策略表.
成功 4904 已尝试注册安全事件源.
成功 4905 已尝试取消注册安全事件源.
成功 4906 CrashOnAuditFail 值已更改.
成功 4907 对象的审核设置已更改.
成功 4908 特殊组登录表已修改.
成功 4912 每用户审核策略已更改.
审核身份验证策略更改 成功 4713 Kerberos 策略已更改.
成功 4716 可信域信息已修改.
成功 4717 系统安全访问被授予一个帐户.
成功 4718 系统安全访问权限已从帐户中删除
成功 4739 域策略已更改.
成功 4864 检测到命名空间冲突.
成功 4865 添加了受信任的林信息条目.
成功 4866 删除了受信任的林信息条目.
成功 4867 受信任的林信息条目已修改.

审核登录事件

此安全设置确定 OS 是否对尝试登录此计算机 或从中注销的用户的每个实例进行审核.

类别 子类别 默认状态 对应高级审核策略配置
审核登录事件 审核账户锁定 成功 登录/注销
审核 IPsec 扩展模式 无审核 登录/注销
审核 IPsec 主模式 无审核 登录/注销
审核 IPsec 快速模式 无审核 登录/注销
审核注销 成功 登录/注销
审核登录 客户端:成功 服务器:成功和失败 登录/注销
审核网络策略服务器 成功和失败 登录/注销
审核其他登录/注销事件 无审核 登录/注销
审核特别登录 成功 登录/注销
子类别 默认状态 事件ID 事件说明
审核账户锁定 成功 4625 帐户登录失败.
审核注销 成功 4634 帐户已注销.
审核注销 成功 4647 用户发起的注销.
审核登录 客户端PC: 成功 服务器: 成功和失败 4624 帐户登录成功.
4625 帐户登录失败.
4648 尝试使用显式凭据登录.
4675 SID 被过滤.
审核网络策略服务器 成功和失败 网络策略服务器授予用户访问权限.
6273 网络策略服务器拒绝访问用户.
6274 网络策略服务器放弃了对用户的请求.
6275 网络策略服务器丢弃了用户的计费请求.
6276 网络策略服务器隔离了一个用户.
6277 网络策略服务器授予用户访问权限,但由于主机不符合定义的健康策略而使其处于试用状态.
6278 网络策略服务器授予用户完全访问权限,因为主机符合定义的健康策略.
6279 由于多次失败的身份验证尝试,网络策略服务器锁定了用户帐户.
6280 网络策略服务器解锁了用户帐户.
审核特别登录 成功 4964 已将特殊组分配给新登录

img

img

img

登录类型 描述 说明
2 交互式登录(Interactive) 用户在本地进行登录.
3 网络(Network) 最常见的情况就是连接到共享文件夹或共享打印机时.
4 批处理(Batch) 通常表明某计划任 务启动.
5 服务(Service) 每种服务都被配置 在某个特定的用户 账号下运行.
7 解锁(Unlock) 屏保解锁.
8 网络明文(NetworkCleartext) 登录的密码在网络 上是通过明文传输 的,如FTP.
9 新凭证(NewCredentials) 使用带/Netonly参数 的RUNAS命令运行一 个程序.
10 远程交互(RemoteInteractive) 通过终端服务、远程桌面或远程协助访问计算机.
11 缓存交互(CachedInteractive) 以一个域用户登录而又没有域控制器可用

img

img

地位和子状态码 描述
0xc0000064 用户名不存在
0xc000006a 用户名是正确的,但密码是错误的
0xc0000234 用户当前锁定
0xc0000072 帐户目前禁用
0xc000006f 用户试图登录天的外周或时间限制
0xc0000070 工作站的限制
0xc0000193 帐号过期
0xc0000071 过期的密码
0xc0000133 时钟之间的直流和其他电脑太不同步
0xc0000224 在下次登录用户需要更改密码
0xc0000225 显然一个缺陷在Windows和不是一个风险
0xc000015b 没有被授予该用户请求登录类型(又名登录 正确的)在这台机器
0xc000006d 似乎是由于系统问题和不安全

审核账户管理

此安全设置确定是否审核计算机上的每个帐户管理事件.帐户管理事件示例包括:

  • 创建、更改或删除用户帐户或组.
  • 重命名、禁用或启用用户帐户.
  • 设置或更改密码.
类别 子类别 默认状态 对应本地审核策略
帐户管理 审核应用组程序管理 无审核 审核账户管理
审核计算机帐户管理 无审核
审核通讯组管理 无审核
审核其他账户管理事件 无审核
审核安全组管理 成功
审核用户账户管理 成功
子类别 默认状态 事件ID 事件
审核安全组管理 成功 4727 已创建启用安全性的全局组.
4728 一个成员被添加到启用安全的全局组中.
4729 成员已从启用安全的全局组中删除.
4730 已删除启用安全的全局组.
4731 已创建启用安全性的本地组.
4732 一个成员被添加到启用安全的本地组.
4733 成员已从启用安全的本地组中删除.
4734 已删除启用安全的本地组.
4735 已更改启用安全的本地组.
4737 已更改启用安全的全局组.
4754 已创建启用安全的通用组.
4755 已更改启用安全的通用组.
4756 一个成员被添加到启用安全的通用组.
4757 成员已从启用安全的通用组中删除.
4758 已删除启用安全的通用组.
4764 组的类型已更改.
审核用户账户管理 成功 4720 已创建用户帐户.
4722 已启用用户帐户.
4723 试图更改帐户的密码.
4724 已尝试重置帐户密码.
4725 用户帐户被禁用.
4726 用户帐户被删除.
4738 用户帐户已更改.
4740 用户帐户被锁定.
4765 SID 历史记录已添加到帐户
4766 尝试向帐户添加 SID 历史记录失败.
4767 用户帐户已解锁.
4780 ACL 是在作为管理员组成员的帐户上设置的.
4781 帐户名称已更改:
4794 已尝试设置目录服务还原模式.
5376 凭据管理器凭据已备份.
5377 凭据管理器凭据是从备份中恢复的.
远程登录事件

当通过远程桌面协议(RDP)进行远程登录时,会在源主机和目的主机上生成一系列事件。以下是与RDP远程登录相关的重要事件ID及其含义,这些事件可以在Windows安全日志和远程连接日志中找到。

安全日志(Security.evtx)
事件ID 描述 重点说明
4624 账户成功登录 表明有账户成功通过RDP登录
4648 使用明文凭证尝试登录 可能表明凭证被窃取或滥用
4778 重新连接到一台Windows主机的会话 表明会话被重新连接
4779 断开到一台Windows主机的会话 表明会话被断开
远程连接日志

应用程序和服务日志->Microsoft->Windows->TerminalServices->RemoteConnectionManager->Operational

事件ID 描述 重点说明
1149 用户认证成功 表明用户通过RDP认证成功
21 远程桌面服务:会话登录成功 表明RDP会话登录成功
24 远程桌面服务:会话已断开连接 表明RDP会话被断开
25 远程桌面服务:会话重新连接成功 表明RDP会话被重新连接
登录类型
登录类型 描述 重点说明
10 RemoteInteractive 专用于RDP登录
12 CachedRemoteInteractive 表明使用了缓存的RDP登录信息

Log Parser

  1. -i参数表示输入格式,可以接受以下值:
    • EVT: 表示输入格式为 Windows Event Log 格式 (.evt 或 .evtx 文件)。
    • CSV: 表示输入格式为逗号分隔值 (CSV) 文件。
  • IISW3C: 表示输入格式为 IIS (Internet Information Services) W3C 扩展日志文件格式。
    • TSV: 表示输入格式为制表符分隔值 (TSV) 文件。
  • TEXTLINE: 表示输入格式为文本文件,每行作为一个数据行。
    • TEXTWORD: 表示输入格式为文本文件,每个单词作为一个数据行。
  1. -o参数表示输出格式,可以接受以下值:
    • DATAGRID: 表示输出结果以数据网格形式显示,适合交互式探索和查看。
    • CSV: 表示输出结果为逗号分隔值 (CSV) 格式,适合导出和后续处理。
  • TSV: 表示输出结果为制表符分隔值 (TSV) 格式。
    • XML: 表示输出结果为 XML 格式。
  • SQL: 表示输出结果为 SQL 数据库表格格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 图形化
# 默认安装到C:\Program Files (x86)\Log Parser 2.2
# 将日志拷贝出来在进行操作
LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM C:\Users\Administrator\Desktop\Security.evtx"

# 分析IIS日志
LogParser.exe "select time, c-ip,cs-uri-stem,cs-uri-query, sc-status, time-taken from C:\Users\Administrator\Desktop\ex170818.log where cs-uri-query like '%and%' " -o:datagrid

# 使用SQL语句统计实现我们需要的数据。

LogParser.exe -i:IISW3C -o:DATAGRID "SELECT c-ip,COUNT(c-ip) FROM C:\Users\Administrator\Desktop\ex170818.log GROUP BY c-ip ORDER BY COUNT(c-iP) DESC"

# 将结果数据导出到csv中

LogParser.exe -i:IISW3C -o:csv "SELECT c-ip,COUNT(c-ip) into 1.csv FROM C:\Users\Administrator\Desktop\ex170818.log GROUP BY c-ip ORDER BY COUNT(c-iP) DESC"

image-20241205140735636

img

img

img

img

1
2
3
# 在入侵事件中,我们经常会需要查找"post"请求,判断是否有上传木马文件等行为,或者访问页面中包含"user"、"manager"、"admin"等类似管理员的字段判断是否访问了后台管理页面。
LogParser.exe -i:IISW3C -o:DATAGRID "SELECT * FROM C:\Users\Administrator\Desktop\ex170818.log WHERE cs-method='POST'"
LogParser.exe -i:IISW3C -o:DATAGRID "SELECT * FROM C:\Users\Administrator\Desktop\ex170818.log WHERE cs-uri-stem LIKE '%admin%'"

img

img

LogParser Studio

官网

image-20241205141719638

image-20241205141726953

img

  1. 打开需要分析的日志文件

    img

  2. 选中需要分析的日志文件,接着新建一个查询

    img

  3. 我们还是以刚才统计出访问次数最多的IP地址及次数为例子
    SELECT top 10 c-ip,count(c-ip) FROM '[LOGFILEPATH]' GROUP BY c-ip ORDER BY COUNT(c-iP) DESC

  4. 然后点击我们的执行按钮,即可输出结果

    img

    这里注意LogParser StudioLogParser有几个区别:

  5. 输入文件类型:LogParser Studio已经预先选择输入文件类型,查询语句不需要再定义

  6. 输出文件类型:LogParser Studio默认使用窗口展示数据,如需指定其他输出文件类型或者导出文件,需要在语句中定义

  7. 也可将我们自定义的SQL语句,保存加入到库中,方便下次使用

  8. 也可点击相应的按钮将查询统计的数据导出。