安全应急响应指南(Windows应急响应)

admin 2022年4月19日01:27:33评论253 views字数 6685阅读22分17秒阅读模式


一、前言

安全应急响应指南(Windows应急响应)


本次演示的windows机器为Windows server 2008

二、服务

安全应急响应指南(Windows应急响应)


1.开始--->管理工具--->服务:

安全应急响应指南(Windows应急响应)
安全应急响应指南(Windows应急响应)

2.command+ R --->msconfig --->服务

   可以看有没有第三方服务:

安全应急响应指南(Windows应急响应)
安全应急响应指南(Windows应急响应)

3.command+ R --->msconfig 启动

   可以看到开机启动项:

安全应急响应指南(Windows应急响应)


三、进程

安全应急响应指南(Windows应急响应)


1.通过查看任务管理器来查看进程等信息:


安全应急响应指南(Windows应急响应)


四、网络连接

安全应急响应指南(Windows应急响应)


1.command+ R --->cmd --> netstat -an

安全应急响应指南(Windows应急响应)

2.浏览器记录

(1)历史浏览记录

(2)下载记录

(3)保存的密码

(4)收藏夹&&书签

五、PowerShell的攻击检测

安全应急响应指南(Windows应急响应)


1、什么是Powershell?

  PowerShell是一种功能强大的脚本语言和shell程序框架,主要用于Windows计算机方便管理员进行系统管理并有可能在未来取代Windows上的默认命令提示符。PowerShell脚本因其良好的功能特性常用于正常的系统管理和安全配置工作,然而,这些特性被攻击者理解并转化为攻击特性,也就成为了攻击者手中的攻城利器,给企业网络造成威胁。

  WindowsPowerShell v3将伴随着MicrosoftHyper-V 3.0和WindowsServer 2012发布。PowerShellv3是一个Windows任务自动化的框架,它由一个命令行shell和内置在这个.NET框架上的编程语言组成。

  PowerShellv3采用新的cmdlet让管理员能够更深入到系统进程中,这些进程可以制作成可执行的文件或脚本(script)。一条cmdlet是一条轻量命令,WindowsPowerShell运行时间在自动化脚本的环境里调用它。

Cmdlet包括显示当前目录的Get-Location,访问文件内容的Get-Content和结束运行进程的Stop-Process。PowerShellv3在WindowsServer 8中装载了WindowsManagement Framework 3.0,PowerShell运行环境也能嵌入到其它应用。

2、Powershell启动方式

(1)win+R搜索Powershell

(2)直接搜索

(3)CMD命令行启动

3、Powershell对于黑客的魅力

(1)可以轻松访问网络套接字

(2)可以在内存中动态编译恶意代码,能够在内存中运行代码,而不需要写入磁盘文件。

(3)可以直接访问win32应用程序编程接口(API);可以直接调用.Net

(4)可以轻松访问WMI接口

(5)强大的脚本环境

(6)动态、运行时方法调用

(7)轻松访问加密库,例如IPSec和各种哈希算法

(8)轻松绑定COM

(9)CMD.exe通常会被限制运行而Powershell不会

安全应急响应指南(Windows应急响应)


六、Powershell的攻击面

安全应急响应指南(Windows应急响应)



1、核心攻击手法:下载文件

PowerShell的主要作用是从远程位置下载恶意文件到受害者主机中,然后使用诸如Start-Porcess、Invoke-Item或者Invoke-Expression之类的命令执行恶意文件,PowerShell也可以将远程文件直接下载到受害者主机内存中,然后从内存中执行。

攻击活动中常用到的System.net.Webclient中的两种方法:

(New-object System.net.webclient).DownlodFile()

(New-object System.net.Webclient).DownloadString()

2、常用选项

(1)-WindowsStyle Hidden隐藏自己的窗口

(2)-ExecutionPolicy Bypass绕过策略

(3)DownloadString()方法不会在目标磁盘中下载任何的文件,而是直接将远程文件中的内容拷贝到目标设备的内存中。这些文件一般来说都是一些恶意脚本,并且能够使用Powershell-Command参数在内存中直接执行。这项技术在很多所谓的无文件恶意软件攻击中得到广泛使用,因为恶意脚本可以直接在目标设备的内存中运行而不会在硬盘中留下任何痕迹。除此直外,这种技术还可以绕过基于签名的检测机制。

安全应急响应指南(Windows应急响应)

(4)cmd.js是一个远程脚本,它能够从目标设备的内存中去远程调用calc.exe,整个过程中不会在硬盘中留下任何痕迹。


安全应急响应指南(Windows应急响应)

(5)在这个样例中,同时使用了DownloadString()和DownloadFile()这两种方法,其中的DownloadString()方法可从远程主机中下载PHP代码


七、分析与防御

安全应急响应指南(Windows应急响应)


PowerShell历代版本的防御思路与攻击手段


安全应急响应指南(Windows应急响应)


(1)、PowerShellV2

在执行任何PowerShell命令或脚本时,无论是本地还是用过远程处理,Windows都可以将事件写入以下三个日志文件:

Windows PowerShell.evtx

Microsoft-WINDOWS-PowerShell/Operational.evtx

Microsoft-Windows-PowerShell/Analytic.etl

由于PowerShell通过Windows远程管理(WinRM)服务实现其远程处理功能,因此以下两个事件日志还捕获远程PowerShell活动:

Microsoft-Windows-winRM、Operational.evtx

Microsoft-Windows-WinRM/Analytic.etl

WindowsPowerShell.evtx

事件ID:400

引擎状态从无-->有本地和远程powershell活动的开始

事件ID:600

记录一些提供程序在系统上进行Powershell处理活动的开始

事件ID:403

引擎状态从可用状态-->无记录powershell活动结束

400&403

Hostname

本地:Hostname=ConsoleHost

远程:Hostname=ServerRemoteHost

如何打开事件查看器

直接搜索事件查看器

安全应急响应指南(Windows应急响应)


(2)、PowerShellV3/V4

PowerShell模块日志可以配置为记录所有的PowerShell模块的活动情况,包括单一的PowerShell命令、导入的模块、远程管理等。

安全应急响应指南(Windows应急响应)

(3)、PowerShellv5

微软从Powershell5.0开始加入了日志转存、ScriptBlock日志记录功能,并将其归入到事件4101当中,ScriptBlockLogging提供了在事件日志中记录反混淆的Powershell代码的能力。



修改以下注册表选项来开启:

HKLMSOFTWAREWow6432NodePoliciesMicrosoftWindowsPowerShellScriptBlockLogging->EnableScriptBlockLogging =1

或者通过GPO启用PowerShell脚本块日志记录功能并记录脚本文件的调用信息

(4)、PowerShellv6

PowerShell在Linux和MacOS等操作系统上的支持,在MacOS上安装(pwsh),处于安全性考虑日志记录作为必不可少的一部分,PowerShell使用本机os_logAPI登录Apple的统一日志记录系统。在Linux上,PowerShell使用Syslog,微软将此上升为一种几乎全平台支持的日志记录解决方案。

(5)PowerShell父进程和子进程

一般来说,当我们从开始菜单或磁盘目录中直接运行PowerShell的话,它会在explorer.exe进程下运行。你可以使用进程管理器等工具来查看父进程和子进程之间的关系,你可以从下图中看到,Explorer.exe是PowerShell.exe的父进程:



安全应急响应指南(Windows应急响应)


大多数PowerShell攻击中,PowerShell脚本或命令会通过命令行进程执行。因此,在这种场景下,PowerShell.exe的父进程将会是windows命令处理程序:

安全应急响应指南(Windows应急响应)


(6)PowerShell的受限语言模式

简短说明

介绍语言模式及其对PowerShell会话的影响。

长说明

PowerShell会话的语言模式部分确定可在会话中使用PowerShell语言的元素。

PowerShell支持以下语言模式:

FullLanguage

PowerShell 3.0 (中引入了 ConstrainedLanguage)

RestrictedLanguage

NoLanguage

(7)语言模式

本部分介绍PowerShell会话中的语言模式。

FullLANGUAGE (FullLanguage)

FullLanguage模式允许会话中的所有语言元素。FullLanguage是所有版本上默认会话的默认语言Windows(WindowsRT)。

RestrictedLanguage(受限)

在RestrictedLanguage模式下,用户可以运行命令(cmdlet、函数、CIM命令和工作流)但不允许使用脚本块。

从PowerShell7.2 New-Object开始,配置系统锁定时,cmdlet在RestrictedLanguage模式下处于禁用状态。

默认情况下,RestrictedLanguage模式下只允许以下变量:

$PSCulture

$PSUICulture

$True

$False

$Null

使用RestrictedLanguage模式的模块清单还允许以下附加变量:

$PSScriptRoot

$PSEdition

$EnabledExperimentalFeatures

仅允许以下比较运算符:

-eq (等于)

-gt (大于)

-lt (小于)

不允许使用赋值语句、属性引用和方法调用。


(8)NoLanguage(语言)

NoLanguage模式只能通过API使用。NoLanguage模式表示不允许任何形式的脚本文本。这不允许使用 AddScript()方法,该方法发送要分析和执行的PowerShell脚本片段。只能使用 AddCommand()和AddParameter(),这两者不会通过分析器。

从PowerShell7.2 New-Object开始,配置系统锁定时,cmdlet在NoLanguage模式下处于禁用状态。

(9)受约束(受约束语言)

ConstrainedLanguage模式允许所有cmdlet和所有PowerShell语言元素,但它限制允许的类型。

ConstrainedLanguage模式旨在支持用户模式代码完整性(UMCI)上WindowsRT。它是唯一受支持的语言模式WindowsRT,但它在所有受支持的系统上都可用。

UMCI通过只允许在基于Microsoft的设备上安装Microsoft签名和Microsoft认证的应用WindowsRT ARM 设备。ConstrainedLanguage模式可防止用户使用PowerShell绕过或违反UMCI。

ConstrainedLanguage模式的功能如下所示:

所有 cmdlet Windows模块和其他 UMCI 批准的 cmdlet 都完全正常运行,并且对系统资源具有完全访问权限,但如上所述。

允许 PowerShell 脚本语言的所有元素。

可以导入Windows模块中包含的所有模块,以及模块导出的所有命令在会话中运行。

cmdlet Add-Type 可以加载已签名的程序集,但不能加载任意 C# 代码或 Win32 API。

cmdlet New-Object 只能用于下面列出的允许 (类型) 。

PowerShell (下面列出的) 类型。不允许使用其他类型。

允许类型转换,但仅在结果为允许的类型时进行。

只有当生成的类型是允许的类型时,将字符串输入转换为类型的 Cmdlet 参数才工作。

可以 ToString() 调用下面列出的允许类型的 (和) .NET 方法。无法调用其他方法。

用户可以获取允许类型的所有属性。用户只能在 Core 类型上设置属性值。仅允许以下 COM 对象:

Scripting.Dictionary

Scripting.FileSystemObject

VBScript.RegExp

ConstrainedLanguage模式下允许以下类型。用户可以获取属性、调用方法,并将对象转换为这些类型。

允许的类型:

AliasAttribute

AllowEmptyCollectionAttribute

AllowEmptyStringAttribute

AllowNullAttribute

Array

Bool

字节

char

CmdletBindingAttribute

DateTime

Decimal

DirectoryEntry

DirectorySearcher

Double

FLOAT

Guid

Hashtable

int

Int16

long

ManagementClass

ManagementObject

ManagementObjectSearcher

NullString

OutputTypeAttribute

ParameterAttribute

PSCredential

PSDefaultValueAttribute

PSListModifier

PSObject

PSPrimitiveDictionary

PSReference

PSTypeNameAttribute

正则表达式

SByte

string

SupportsWildcardsAttribute

SwitchParameter

System.Globalization.CultureInfo

System.Net.IPAddress

System.Net.Mail.MailAddress

System.Numerics.BigInteger

System.Security.SecureString

TimeSpan

UInt16

UInt32

UInt64

启动受限语言模式:

[Environment]::SetEnvironmentVariable('__PSLockdownPolicy','4','Machine')

通过组策略启动:

ComputerConfigurationPreferencesWindowsSettingsEnvironment

(10)、PowerShellv5 +Applocker+DeviceGuard

  PowerShellv5自带了很多优秀的安全增强功能,非常适合企业环境使用。这些安全增强功能包括:

脚本块日志:将反混淆化的PowerShell代码记录到事件日志中;

系统泛微的脚本拷贝:该功能可通过组策略开启,可记录下每一条在系统中执行过的PowerShell命令和代码块;

受限语言模式的PowerShell:进入受限语言模式;

整合反恶意软件(Windows10):windows10的反恶意软件扫描接口(AMSI)允许所有的脚本引擎(PowerShell、VBScript和JScript)请求对动态内容进行安全分析,包括脚本文件、命令行输入的命令以及内存中下载和执行的代码。

可以在PowerShell代码执行之前对其进行安全扫描。

除此之外,用户还可以使用Applocker来阻止未知来源的PowerShell代码。

   DeviceGuard是windows10和WindowsServer2016新推出的功能,它可以利用先进的硬件功能来增强受限语言模式和应用程序白名单功能。


八、记录PowerShell活动

安全应急响应指南(Windows应急响应)


(1)组策略来开启PowerShell模块记录功能:

Microsoft.PowerShell.*(例如Microsoft.PowerShell.Managementmodule):记录大多数PowerShell的核心功能;

(2)ActiveDirectory:记录活动目录的使用;

BITSTransfer:记录BITS(后台只能传输服务)的使用;

NetAdapter/NetConnection:记录与网络相关的活动情况;

PSScheduledJob/ScheduledTasks(PSv5):记录管理计划任务

SmbShare:记录SMB共享活动

为了让这些日志发挥作用,我们需要将其提供给一个一个中央日志系统,并针对已知的攻击方法进行警告配置。

(3)相关活动:

涉及到.Net的下载活动(New-objectNet.WebClient).DownloadString

invoke-Expression

BITS活动

计划任务创建/删除

远程PowerShell

检测PowerShell攻击代码最好的方式就是查找关键标识符,即关键代码段


原文始发于微信公众号(昆仑云安全):安全应急响应指南(Windows应急响应)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月19日01:27:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安全应急响应指南(Windows应急响应)https://cn-sec.com/archives/920255.html

发表评论

匿名网友 填写信息