windows
- 理解Windows网络_WFP
- 理解Windows事件跟踪_ETW
- wireguard配置
- Windows阻断网络流量获取
- Windows防火墙管理-netsh
- Windows相关资源
- Windows导览
- windows-ipv6管理
- window-message
- Win-to-go
理解Windows网络_WFP
- 理解Windows网络_WFP
理解 Windows 网络
- 理解 Windows 网络
WFP
名词解释
https://learn.microsoft.com/en-us/windows/win32/fwp/object-model https://learn.microsoft.com/en-us/windows/win32/fwp/basic-operation https://learn.microsoft.com/en-us/windows-hardware/drivers/network
callout: A callout provides functionality that extends the capabilities of the Windows Filtering Platform. A callout consists of a set of callout functions and a GUID key that uniquely identifies the callout. callout driver: A callout driver is a driver that registers callouts with the Windows Filtering Platform. A callout driver is a type of filter driver. callout function: A callout function is a function that is called by the Windows Filtering Platform to perform a specific task. A callout function is associated with a callout. filter: A filter is a set of functions that are called by the Windows Filtering Platform to perform filtering operations. A filter consists of a set of filter functions and a GUID key that uniquely identifies the filter. filter engine: The filter engine is the component of the Windows Filtering Platform that performs filtering operations. The filter engine is responsible for calling the filter functions that are registered with the Windows Filtering Platform. filter layer: A filter layer is a set of functions that are called by the Windows Filtering Platform to perform filtering operations. A filter layer consists of a set of filter layer functions and a GUID key that uniquely identifies the filter layer.
Dispatcher队列触发回调是尽快触发形式, 不需要等队列满, 因此可以满足实时性. 当用户回调较慢时, 阻塞的报文会尽可能插入下个队列, 队列上限256. 更多的阻塞报文则由系统缓存, 粗略的测试缓存能力是16500, 系统缓存能力可能随机器性能和配置不同存在差异. 用户回调处理报文时, 存在两份报文实体: 内核报文, 在回调处理完队列后一并释放. 因此回调较慢时, 一次回调执行会最多锁定系统256个报文的缓存能力. 回调中的拷贝, 处理完单个报文后立即释放.
在FwppNetEvent1Callback中对报文进行拷贝组装, 不会操作原始报文, 对业务没有影响.
订阅可以使用模板过滤器, 以减少需要处理的报文:
filterCondition
An array of FWPM_FILTER_CONDITION0 structures that contain distinct filter conditions (duplicated filter conditions will generate an error). All conditions must be true for the action to be performed. In other words, the conditions are AND’ed together. If no conditions are specified, the action is always performed.
不可使用相同的filter 所有过滤器间的关系是"与", 需要全都满足 微软文档显示支持的过滤器有八种, 实际上支持的过滤器会更多.
FWPM_CONDITION_IP_PROTOCOL
The IP protocol number, as specified in RFC 1700. FWPM_CONDITION_IP_LOCAL_ADDRESS
The local IP address. FWPM_CONDITION_IP_REMOTE_ADDRESS
The remote IP address. FWPM_CONDITION_IP_LOCAL_PORT
The local transport protocol port number. For ICMP, the message type. FWPM_CONDITION_IP_REMOTE_PORT
The remote transport protocol port number. For ICMP, the message code. FWPM_CONDITION_SCOPE_ID
The interface IPv6 scope identifier. Reserved for internal use. FWPM_CONDITION_ALE_APP_ID
The full path of the application. FWPM_CONDITION_ALE_USER_ID
The identification of the local user. 枚举系统已注册的订阅发现已有两个订阅, 查看其sessionKey GUID无法确认由谁注册, 对其进行分析发现两个订阅各自实现了以下功能:
订阅了所有FWPM_NET_EVENT_TYPE_CLASSIFY_DROP的数据包, 统计了所有被丢弃的包. 订阅了所有FWPM_NET_EVENT_TYPE_CLASSIFY_ALLOW的数据包, 可以用来做流量统计 这两个订阅用到的contition filter都是FWPM_CONDITION_NET_EVENT_TYPE(206e9996-490e-40cf-b831-b38641eb6fcb), 说明可以实现过滤的filter不止微软文档中提到的8个.
更多调研发现用户态调用接口仅能捕获drop的事件, 非drop事件需要使用内核模式获取, 因此微隔离不能使用FWPM_CONDITION_NET_EVENT_TYPE获取事件.
理解Windows事件跟踪_ETW
- 理解Windows事件跟踪_ETW
理解 ETW
筛除了一些不必要的信息, 完整文档参阅: https://docs.microsoft.com/en-us/windows/win32/etw/event-tracing-portal
理解基础
https://learn.microsoft.com/en-us/windows/win32/etw/about-event-tracing
Session
存在四种 session
session 种类 | 使用 | 限制 | 特点 |
---|---|---|---|
Event Tracing Session(Standard ETW) | 1. EVENT_TRACE_PROPERTIES2. StartTrace, 创建 session3. EnableTrace 1. EnableTrace for classic provider 2. EnableTraceEx for manifest-based provider4. ControlTrace 停止 session | - 一个 manifest-based provider 仅支持提供事件到至多 8 个 session- 一个 classic provider, 仅能服务一个 session.- session 抢占 provider 行为是后来居上. | 标准 ETW. |
SystemTraceProvider Session | 1. EVENT_TRACE_PROPERTIES->EnableFlags2. StartTrace3. ControlTrace 停止 session | - **SystemTraceProvider **是一个内核事件 provider, 提供一套预定义的内核事件.- NT Kernel Logger session是系统预置 session, 记录一系列系统预定义的内核事件- Win7/WinServer2008R2仅 NT Kernel Logger session 可使用 SystemTraceProvider - Win8/WinServer2012的 SystemTraceProvider 可以提供事件给8 个 logger session, 其中两个固定为 NT Kernel Logger 和 Circular Kernel Context Logger.- Win10 20348之后, 各 Systerm provider 可以被单独控制. | 获取系统内核预定义事件. |
AutoLogger session | 1. 修改注册表 2. EnableTraceEx3. ControlTrace 停止 session | - **Global Logger Session**是特殊独立的 session, 记录系统启动时事件.- 普通 AutoLogger 需要自行使能 provider, GlobleLogger 不需要.- AutoLogger 不支持 NT Kernel Logger 事件, 仅 GlobalLogger 支持.- 影响启动时间, 节制使用 | 记录操作系统启动期间事件 |
Private Logger Session | - | - User-mode ETW- 仅进程内使用- 不计入 64 session 并行限制. | 进程私有 |
工具
- logman
- wevtutil
- xpath 查询实例:
wevtutil qe Security /c:2 /q:"*[System[EventID=5157]]" /f:text
- xpath 查询实例:
- tracelog
- 使用 viusal studio 的
tracelog
工具, 可以在运行时动态的添加和删除 ETW Provider, 以及动态的添加和删除 ETW Session
- 使用 viusal studio 的
- mc
- etw-providers-docs
wireguard配置
- wireguard配置
wireguard 配置
防火墙配置
wireguard /installtunnelservice <wg_conf_path>
wg show
Get-NetConnectionProfile
Get-NetAdapter
Get-NetFirewallProfile
Set-NetFirewallProfile -Profile domain,public,private -DisabledInterfaceAliases <wg_config_name>
Set-NetIPInterface -ifindex <interface index> -Forwarding Enabled
New-NetFirewallRule -DisplayName "@wg1" -Direction Inbound -RemoteAddress 10.66.66.1/24 -Action Allow
New-NetFirewallRule -DisplayName "@wg1" -Direction Outbound -RemoteAddress 10.66.66.1/24 -Action Allow
# 定位拦截原因
auditpol /set /subcategory:"{0CCE9225-69AE-11D9-BED3-505054503030}" /success:disable /failure:enable
wevtutil qe Security /q:"*[System/EventID=5152]" /c:5 /rd:true /f:text
auditpol /set /subcategory:"{0CCE9225-69AE-11D9-BED3-505054503030}" /success:disable /failure:disable
Windows阻断网络流量获取
- Windows阻断网络流量获取
Windows 阻断网络流量获取
- 需要识别出被阻断的流量, 被阻断的流量包括出站入站方向.
- 阻断的两种形式, 基于链接(connection), 和基于数据包(packet). 数据包的丢弃较为频繁常见, 需要审查丢弃原因, 基于链接的阻断更符合实际需关注的阻断场景.
- 许多正常处理的报文也会被 drop, 因此需要区分 drop 和 block 行为, 我们主要关注 block 的情况.
搭建测试工程
WFP 主要工作在 usermode, 另一部分在 kernalmode, 能力以驱动形式体现, 搭建测试环境的方法比较复杂. 推荐的方法是测试机使用另一台物理机, 开发机编译好后, 发送至测试机远程调试. 受条件限制, 我们也可以直接在本地进行调试.
- Microsoft WFP Sample 工程
- 只关注: Windows-driver-samples\network\trans\WFPSampler
- WFPSampler 工程指导
编译问题:
其它问题:
通过审计获取 block 事件
默认情况下,禁用对 WFP 的审核。
- 可以通过组策略对象编辑器 MMC 管理单元、本地安全策略 MMC 管理单元或 auditpol.exe 命令,按类别(category)启用审核。
- 可以通过 auditpol.exe 命令按子类别(subcategory)启用审核。
- 应该使用 guid 进行设置, 否则不同语言系统有本地化的问题.
- 审计使用循环日志, 128KB 不用担心资源消耗
类别https://docs.microsoft.com/en-us/windows/win32/secauthz/auditing-constants
Category/Subcategory | GUID |
---|---|
… | … |
Object Access | {6997984A-797A-11D9-BED3-505054503030} |
Policy Change | {6997984D-797A-11D9-BED3-505054503030} |
… | … |
Object Access 子类和对应 GUID https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gpac/77878370-0712-47cd-997d-b07053429f6d
Object Access Subcategory | Subcategory GUID | Inclusion Setting |
---|---|---|
… | … | … |
Filtering Platform Packet Drop | {0CCE9225-69AE-11D9-BED3-505054503030} | No Auditing |
Filtering Platform Connection | {0CCE9226-69AE-11D9-BED3-505054503030} | No Auditing |
Other Object Access Events | {0CCE9227-69AE-11D9-BED3-505054503030} | No Auditing |
… | … | … |
Policy Change 子类和对应 GUID:
Policy Change Subcategory | Subcategory GUID |
---|---|
Audit Policy Change | {0CCE922F-69AE-11D9-BED3-505054503030} |
Authentication Policy Change | {0CCE9230-69AE-11D9-BED3-505054503030} |
Authorization Policy Change | {0CCE9231-69AE-11D9-BED3-505054503030} |
MPSSVC Rule-Level Policy Change | {0CCE9232-69AE-11D9-BED3-505054503030} |
Filtering Platform Policy Change | {0CCE9233-69AE-11D9-BED3-505054503030} |
Other Policy Change Events | {0CCE9234-69AE-11D9-BED3-505054503030} |
# auditpol手册参阅: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/auditpol
# 本段主要关注 'Object Access' 类别
# 获取可查询的字段
# -v 显示GUID, -r显示csv报告
auditpol /list /category /v
auditpol /list /subcategory:* /v
# 获取某个子类别的审计设置
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Get-Member
# 查询guid
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Format-Table Subcategory,'Subcategory GUID','Inclusion Setting'
# 查找subcategory
auditpol /list /subcategory:"Object Access","Policy Change" -v
# 备份
auditpol /backup /file:d:\audit.bak
# 还原
auditpol /restore /file:d:\audit.bak
# 修改Policy
# **Policy Change** | {6997984D-797A-11D9-BED3-505054503030}
auditpol /set /category:"{6997984D-797A-11D9-BED3-505054503030}" /success:disable /failure:disable
# Filtering Platform Policy Change | {0CCE9233-69AE-11D9-BED3-505054503030}
auditpol /set /subcategory:"{0CCE9233-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable
# **Object Access** | {6997984A-797A-11D9-BED3-505054503030}
auditpol /get /category:"{6997984A-797A-11D9-BED3-505054503030}"
auditpol /set /category:"{6997984A-797A-11D9-BED3-505054503030}" /success:disable /failure:disable
# Filtering Platform Packet Drop | {0CCE9225-69AE-11D9-BED3-505054503030}
auditpol /set /subcategory:"{0CCE9225-69AE-11D9-BED3-505054503030}" /success:disable /failure:enable
# Filtering Platform Connection | {0CCE9226-69AE-11D9-BED3-505054503030}
auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:disable /failure:enable
# 读取日志
$Events = Get-WinEvent -LogName 'Security'
foreach ($event in $Events) {
ForEach ($line in $($event.Message -split "`r`n")) {
Write-host $event.RecordId ':' $Line
break
}
}
事件说明:
Event ID | Explanation |
---|---|
5031(F) | The Windows Firewall Service blocked an application from accepting incoming connections on the network. |
5150(-) | The Windows Filtering Platform blocked a packet. |
5151(-) | A more restrictive Windows Filtering Platform filter has blocked a packet. |
5152(F) | The Windows Filtering Platform blocked a packet. |
5153(S) | A more restrictive Windows Filtering Platform filter has blocked a packet. |
5154(S) | The Windows Filtering Platform has permitted an application or service to listen on a port for incoming connections. |
5155(F) | The Windows Filtering Platform has blocked an application or service from listening on a port for incoming connections. |
5156(S) | The Windows Filtering Platform has permitted a connection. |
5157(F) | The Windows Filtering Platform has blocked a connection. |
5158(S) | The Windows Filtering Platform has permitted a bind to a local port. |
5159(F) | The Windows Filtering Platform has blocked a bind to a local port. |
关注的事件详细说明:
- Audit Filtering Platform Packet Drop
-
这类事件产生量非常大,建议关注5157事件, 它记录了几乎相同的信息, 但是 5157 基于链接记录而不是基于数据包.
-
Failure events volume typically is very high for this subcategory and typically used for troubleshooting. If you need to monitor blocked connections, it is better to use “5157(F): The Windows Filtering Platform has blocked a connection,” because it contains almost the same information and generates per-connection, not per-packet.
-
- Audit Filtering Platform Connection
获取 provider 信息
# 获取security相关的provider信息
Get-WinEvent -ListProvider "*Security*" | Select-Object providername,id
# Microsoft-Windows-Security-Auditing 54849625-5478-4994-a5ba-3e3b0328c30d
# 获取provider提供的task信息
Get-WinEvent -ListProvider "Microsoft-Windows-Security-Auditing" | Select-Object -ExpandProperty tasks
# SE_ADT_OBJECTACCESS_FIREWALLCONNECTION 12810 Filtering Platform Connection 00000000-0000-0000-0000-000000000000
ProviderName | Id |
---|---|
Security Account Manager | 00000000-0000-0000-0000-000000000000 |
Security | 00000000-0000-0000-0000-000000000000 |
SecurityCenter | 00000000-0000-0000-0000-000000000000 |
Microsoft-Windows-Security-SPP-UX-GenuineCenter-Logging | fb829150-cd7d-44c3-af5b-711a3c31cedc |
Microsoft-Windows-Security-Mitigations | fae10392-f0af-4ac0-b8ff-9f4d920c3cdf |
Microsoft-Windows-VerifyHardwareSecurity | f3f53c76-b06d-4f15-b412-61164a0d2b73 |
Microsoft-Windows-SecurityMitigationsBroker | ea8cd8a5-78ff-4418-b292-aadc6a7181df |
Microsoft-Windows-Security-Adminless | ea216962-877b-5b73-f7c5-8aef5375959e |
Microsoft-Windows-Security-Vault | e6c92fb8-89d7-4d1f-be46-d56e59804783 |
Microsoft-Windows-Security-Netlogon | e5ba83f6-07d0-46b1-8bc7-7e669a1d31dc |
Microsoft-Windows-Security-SPP | e23b33b0-c8c9-472c-a5f9-f2bdfea0f156 |
Microsoft-Windows-Windows Firewall With Advanced Security | d1bc9aff-2abf-4d71-9146-ecb2a986eb85 |
Microsoft-Windows-Security-SPP-UX-Notifications | c4efc9bb-2570-4821-8923-1bad317d2d4b |
Microsoft-Windows-Security-SPP-UX-GC | bbbdd6a3-f35e-449b-a471-4d830c8eda1f |
Microsoft-Windows-Security-Kerberos | 98e6cfcb-ee0a-41e0-a57b-622d4e1b30b1 |
Microsoft-Windows-Security-ExchangeActiveSyncProvisioning | 9249d0d0-f034-402f-a29b-92fa8853d9f3 |
Microsoft-Windows-NetworkSecurity | 7b702970-90bc-4584-8b20-c0799086ee5a |
Microsoft-Windows-Security-SPP-UX | 6bdadc96-673e-468c-9f5b-f382f95b2832 |
Microsoft-Windows-Security-Auditing | 54849625-5478-4994-a5ba-3e3b0328c30d |
Microsoft-Windows-Security-LessPrivilegedAppContainer | 45eec9e5-4a1b-5446-7ad8-a4ab1313c437 |
Microsoft-Windows-Security-UserConsentVerifier | 40783728-8921-45d0-b231-919037b4b4fd |
Microsoft-Windows-Security-IdentityListener | 3c6c422b-019b-4f48-b67b-f79a3fa8b4ed |
Microsoft-Windows-Security-EnterpriseData-FileRevocationManager | 2cd58181-0bb6-463e-828a-056ff837f966 |
Microsoft-Windows-Security-Audit-Configuration-Client | 08466062-aed4-4834-8b04-cddb414504e5 |
Microsoft-Windows-Security-IdentityStore | 00b7e1df-b469-4c69-9c41-53a6576e3dad |
构造 block 事件
必须非常注意,在构造 block 事件时, 会影响本地其它软件的运行!
可及时使用.\WFPSampler.exe -clean
来清理过滤器.
操作步骤:
-
打开 Filtering Platform Connection 的审计开关,
auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable
-
打开 Event Viewer, 构造一个 Custom View, 创建过滤器, 我们暂只关注 5155, 5157, 5159 三个事件.
-
构造一个过滤器, 我们使用WFPSampler.exe来构造过滤器, 阻止监听本地的80端口,
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4 -iplp 80
-
使用一个第三方(非 IIS)的 http server, 这里使用的 nginx, 默认监听 80 端口, 双击启动启动则触发 5155 事件
-
还原过滤器,
.\WFPSampler.exe -clean
-
还原审计开关,
auditpol /set /category:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:disable /failure:disable
# 5155 blocked an application or service from listening on a port for incoming connections
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4
# 5157 blocked a connection
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_CONNECT_V4
# 5159, blocked a bind to a local port
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4
# Other
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD
# To find a specific Windows Filtering Platform filter by ID, run the following command:
netsh wfp show filters
# To find a specific Windows Filtering Platform layer ID, you need to execute the following command:
netsh wfp show state
监控网络事件(NET_EVENT)
- 网络事件支持枚举查找, 支持订阅.
- 枚举方式支持定制过滤条件, 获取一段时间内的网络事件.
- 订阅方式可以注入一个 callback 函数, 实时反馈.
支持的事件种类:
typedef enum FWPM_NET_EVENT_TYPE_ {
FWPM_NET_EVENT_TYPE_IKEEXT_MM_FAILURE = 0,
FWPM_NET_EVENT_TYPE_IKEEXT_QM_FAILURE,
FWPM_NET_EVENT_TYPE_IKEEXT_EM_FAILURE,
FWPM_NET_EVENT_TYPE_CLASSIFY_DROP,
FWPM_NET_EVENT_TYPE_IPSEC_KERNEL_DROP,
FWPM_NET_EVENT_TYPE_IPSEC_DOSP_DROP,
FWPM_NET_EVENT_TYPE_CLASSIFY_ALLOW,
FWPM_NET_EVENT_TYPE_CAPABILITY_DROP,
FWPM_NET_EVENT_TYPE_CAPABILITY_ALLOW,
FWPM_NET_EVENT_TYPE_CLASSIFY_DROP_MAC,
FWPM_NET_EVENT_TYPE_LPM_PACKET_ARRIVAL,
FWPM_NET_EVENT_TYPE_MAX
} FWPM_NET_EVENT_TYPE;
支持的过滤条件(FWPM_NET_EVENT_ENUM_TEMPLATE):
Value | Meaning |
---|---|
FWPM_CONDITION_IP_PROTOCOL | The IP protocol number, as specified in RFC 1700. |
FWPM_CONDITION_IP_LOCAL_ADDRESS | The local IP address. |
FWPM_CONDITION_IP_REMOTE_ADDRESS | The remote IP address. |
FWPM_CONDITION_IP_LOCAL_PORT | The local transport protocol port number. For ICMP, the message type. |
FWPM_CONDITION_IP_REMOTE_PORT | The remote transport protocol port number. For ICMP, the message code. |
FWPM_CONDITION_SCOPE_ID | The interface IPv6 scope identifier. Reserved for internal use. |
FWPM_CONDITION_ALE_APP_ID | The full path of the application. |
FWPM_CONDITION_ALE_USER_ID | The identification of the local user. |
非 driver 调用的方式只能获得普通的 drop 事件.
监控网络链接(NetConnection)
相较监控网络事件, 监控链接需要更高权限. callback 方式
The caller needs FWPM_ACTRL_ENUM access to the connection objects’ containers and FWPM_ACTRL_READ access to the connection objects. See Access Control for more information.
暂未能成功监控网络链接.
查到同样问题, Receiving in/out traffic stats using WFP user-mode API, 和我调研中遇到的现象一样, 订阅函数收不到任何上报, 得不到任何事件, 没有报错. 开审计, 提权都没有成功. 有人提示非内核模式只能得到 drop 事件的上报, 这不能满足获取阻断事件的需求.
添加 security descriptor 示例: https://docs.microsoft.com/en-us/windows/win32/fwp/reserving-ports
Application Layer Enforcement(ALE)介绍
- ALE 包含一系列在内核模式下的过滤器, 支持状态过滤.
- ALE 层的过滤器可授权链接的创建, 端口分配, 套接字管理, 原始套接字创建, 和混杂模式接收.
- ALE 层过滤器的分类基于链接(connection), 或基于套接字(socket), 其它层的过滤器只能基于数据包(packet)进行分类.
- ALE 过滤器参考 ale-layers
- 更多过滤器参考 filtering-layer-identifiers
编码
大多数 WFP 函数都可以从用户模式或内核模式调用。 但是,用户模式函数返回表示 Win32 错误代码的 DWORD 值,而内核模式函数返回表示 NT 状态代码的 NTSTATUS 值。 因此,函数名称和语义在用户模式和内核模式之间是相同的,但函数签名则不同。 这需要函数原型的单独用户模式和内核模式特定标头。 用户模式头文件名以"u"结尾,内核模式头文件名以"k"结尾。
结论
需求仅需要知道事件发生, 不需要即时处理事件, 另外开发驱动会带来更大的风险, 因此决定使用事件审计, 监控日志生成事件的方式来获得阻断事件.
新开一个线程来使用NotifyChangeEventLog来监控日志记录事件.
附录
WFP 体系结构
WFP(Windows Filter Platform)
数据流
Data flow:
- A packet comes into the network stack.
- The network stack finds and calls a shim.
- The shim invokes the classification process at a particular layer.
- During classification, filters are matched and the resultant action is taken. (See Filter Arbitration.)
- If any callout filters are matched during the classification process, the corresponding callouts are invoked.
- The shim acts on the final filtering decision (for example, drop the packet).
参考链接
Windows防火墙管理-netsh
- Windows防火墙管理-netsh
Windows 防火墙管理-netsh
管理工具
netsh advfirewall
# 导出防火墙规则
netsh advfirewall export advfirewallpolicy.wfw
# 导入防火墙规则
netsh advfirewall import advfirewallpolicy.wfw
# 查看防火墙状态
netsh advfirewall show allprofiles state
# 查看防火墙默认规则
netsh advfirewall show allprofiles firewallpolicy
# netsh advfirewall set allprofiles firewallpolicy blockinbound,allowoutbound
# netsh advfirewall set allprofiles firewallpolicy blockinbound,blockoutbound
# 查看防火墙设置
netsh advfirewall show allprofiles settings
# 启用防火墙
netsh advfirewall set allprofiles state on
# 禁用防火墙
netsh advfirewall set allprofiles state off
# 查看防火墙规则
netsh advfirewall firewall show rule name=all
# 查看防火墙状态
netsh advfirewall monitor show firewall
netsh firewall(deprecated)
# 查看防火墙状态
netsh firewall show state
netsh mbn(Mobile Broadband network)
netsh wfp
# 查看防火墙状态
netsh wfp show state
# 查看防火墙规则
netsh wfp show filters
Windows相关资源
- Windows相关资源
Windows 资源整理
这里只列举了一些 Windows 上调试,排查问题以及测试的一些常用工具,其他的加壳脱壳,加密解密,文件编辑器以及编程工具不进行整理了。
工具篇
监控&分析
工具名 | 下载地址 | 说明 |
---|---|---|
DebugView | https://docs.microsoft.com/zh-cn/sysinternals/downloads/debugview | sysinternals 里面的工具,可用来查看、控制内核及用户态调式输出 |
Process Monitor | https://docs.microsoft.com/zh-cn/sysinternals/downloads/procmon | sysinternals 里面的工具,实时监视文件系统,注册表,进程,线程以及 DLL 的活动,方便排查问题 |
Process Explorer | https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer | sysinternals 里面的工具,进程查看器,可以浏览加载的 DLL,调用堆栈以及查找文件被哪些进程打开 |
WinObj | https://docs.microsoft.com/zh-cn/sysinternals/downloads/winobj | sysinternals 里面的工具,对象管理器命名空间的查看利器,没有加载驱动而是使用系统 API 实现,可参考 GitHub 中的 WinObjEx64 |
WinObjEx64 | https://github.com/hfiref0x/WinObjEx64 | 对象管理器命名空间的查看利器,开源的 |
Handle | https://docs.microsoft.com/zh-cn/sysinternals/downloads/handle | sysinternals 里面的工具,查看特定的文件或者目录被哪个应用程序占用 |
sysinternals | https://live.sysinternals.com/ | sysinternals 里面还有很多工具,一般用不着,暂时不进行罗列,上面几个是常用的工具 |
CPU-Z | https://www.cpuid.com/softwares/cpu-z.html | CPU 实时监测工具 |
ProcMonX | https://github.com/zodiacon/ProcMonX | 使用 ETW 实现的类似于 Process Monitor 功能的工具,开源 C#语言编写 |
ProcMonXv2 | https://github.com/zodiacon/ProcMonXv2 | 使用 ETW 实现的类似于 Process Monitor 功能的工具,开源 C#语言编写,第二版 |
processhacker | https://github.com/processhacker/processhacker | 开源的类似于 Process Explorer 的工具,支持 GPU 相关的信息显示 |
API Monitor | http://www.rohitab.com/apimonitor | 通过跟踪 API 的调用,用来查看应用程序和服务的工作方式或跟踪应用程序中存在的问题,可修改 API 的入参及出参 |
Dependency Walker | http://www.dependencywalker.com/ | 扫描任何 32 位或 64 位 Windows 模块,列出了该模块导出的所有功能等 |
DeviceTree | http://www.osronline.com/article.cfm%5earticle=97.htm | 显示系统的所有驱动对象以及相关设备栈信息 |
Unlocker | https://www.softpedia.com/get/System/System-Miscellaneous/Unlocker.shtml | 解锁占用文件的,很多类似的工具以及开源代码 |
RpcView | https://github.com/silverf0x/RpcView | 显示以及反编译当前系统的 RPC 接口等信息,分析 RPC 的情况下可以借以辅助 |
RequestTrace | https://the-sz.com/products/rt/ | 可以查看 WINDOWS 上 IRP、SRB、URB 的详细信息,包含数据缓存等,一般也不会使用,因为 WINDBG 调试就可以分析数据,不调试的情况可以使用它来辅助 |
IRPMon | https://github.com/MartinDrab/IRPMon | 通过挂钩驱动对象,实现类似于 RequestTrace、IrpTracker 的功能,监控驱动对象的所有 IRP 等形式的请求 |
IRPTrace | https://github.com/haidragon/drivertools | 里面有一些其他工具 |
AntiRootkit 工具
工具名 | 下载地址 | 说明 |
---|---|---|
PcHunter | https://www.anxinsec.com/view/antirootkit/ | 安全分析工具,为了对抗 Rootkit,使用穿透技术进行文件,网络,注册表等的操作,并提供线程、进程以及内核模块的各种详细信息 |
Windows-Kernel-Explorer | https://github.com/AxtMueller/Windows-Kernel-Explorer | 类似于 Pchunter,不开源,如果 PcHunter 没有支持最新系统,可以尝试这个软件 |
PowerTool | 目前没咋更新,朋友公司的同事开发的,据说代码很乱。。。 | |
py | https://github.com/antiwar3/py | 飘云 ark |
PE 工具
工具名 | 下载地址 | 说明 |
---|---|---|
CFF Explorer | https://ntcore.com/?page_id=388 | 还不错的 |
ExeinfoPe | http://www.exeinfo.xn.pl/ |
逆向&调试
工具名 | 下载地址 | 说明 | |
---|---|---|---|
Ghidra | https://www.nsa.gov/resources/everyone/ghidra/ | 由美国国家安全局(NSA)研究部门开发的软件逆向工程(SRE)套件,用于支持网络安全任务 | |
IDA | https://down.52pojie.cn/ | 最新的破解版吧好像是 7.5,可在吾爱破解论坛查找下载地址 | |
dnSpy | https://github.com/dnSpy/dnSpy | .NET 程序的逆向工具,对于不混淆不加密的.NET 程序相当于看源代码了,前提是了解.NET 框架 | |
OllyDbg | https://down.52pojie.cn/Tools/Debuggers// | 用于逆向分析应用程序,插件丰富,但是不开源也不支持 x64 程序 | |
x64DBG | https://x64dbg.com/ | 用于逆向分析应用程序,开源,支持 x64 程序,相对于 windbg 来说操作更方便点,和 OD 比较建议选择 x64dbg | |
CheatEngine | https://www.cheatengine.org/ | 逆向破解的神器,支持各种内存搜索、修改以及一些其他的高级逆向功能 | |
VirtualKD-Redux | https://github.com/4d61726b/VirtualKD-Redux/releases | Windbg 虚拟机调试的全自动化辅助工具,不再需要设置一堆环境变量,支持最新 VMWare | |
Driver Loader | http://www.osronline.com/article.cfm%5Earticle=157.htm | OSR 提供的工具,进行驱动的安装,加载以及卸载 | |
reverse-engineering | https://github.com/wtsxDev/reverse-engineering | 基本上逆向需要得工具都可以在这里找到 |
注入工具
工具名 | 下载地址 | 说明 | |
---|---|---|---|
yapi | https://github.com/ez8-co/yapi | 一个程序注入 x64/x86 进程 | 开源,使用少,可重点查看源码,支持 32 位程序向 64 位程序注入 |
Xenos | https://github.com/DarthTon/Xenos | 开源,而且使用了鼎鼎大名的黑古工程,支持内核注入 | |
ExtremeInjector | https://github.com/master131/ExtremeInjector | 应用层注入工具,支持 32 位程序向 64 位程序注入 |
网络
工具名 | 下载地址 | 说明 |
---|---|---|
Fiddler | https://www.telerik.com/fiddler | 可直接中间人劫持,不需要手动添加证书等,支持脚本进行流量劫持,同事也提供了 SDK 进行编码 |
Wireshark | https://www.wireshark.org/download.html | 这个就不多介绍了 |
Burp Suite | https://portswigger.net/burp | 渗透的好像都偏爱这个抓包工具,依赖 JDK,可在吾爱下载破解版 |
压测工具
工具名 | 下载地址 | 说明 |
---|---|---|
Driver Verifier | https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/driver-verifier | 系统自带,驱动稳定性测试工具 |
Application Verifier | https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/application-verifier | 系统自带,应用层的压测工具 |
CPUStress | https://docs.microsoft.com/en-us/sysinternals/downloads/cpustres | 让 CPU 负荷工作,测试极端情况下软件的稳定性以及响应度等 |
其他
工具名 | 下载地址 | 说明 |
---|---|---|
game-hacking | https://github.com/dsasmblr/game-hacking | |
awesome-malware-analysis | https://github.com/rootkiter/awesome-malware-analysis | 病毒分析工具集合 |
drawio | https://github.com/jgraph/drawio-desktop | 绘图神器 |
RazorSQL | https://www.razorsql.com/ | SQLite3 数据库 GUI 工具 |
Git 学习笔记 | https://github.com/No-Github/1earn/blob/master/1earn/Develop/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6/Git%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.md | Git 版本管理知识 |
Markdown 语法学习 | https://github.com/No-Github/1earn/blob/master/1earn/Develop/%E6%A0%87%E8%AE%B0%E8%AF%AD%E8%A8%80/Markdown/Markdown%E8%AF%AD%E6%B3%95%E5%AD%A6%E4%B9%A0.md | Markdown 语法学习 |
代码篇
操作系统
工具名 | 下载地址 | 说明 |
---|---|---|
ReactOS | https://github.com/reactos/reactos | 好像是逆向 windows 2000 的开源系统,可以替换 win 2000 的内核程序 |
wrk-v1.2 | https://github.com/jmcjmmcjc/wrk-v1.2 | Windows NT 5.2 Partial Source Code |
WinNT4 | https://github.com/ZoloZiak/WinNT4 | Windows NT4 Kernel Source code |
whids | https://github.com/0xrawsec/whids/tree/a826d87e0d035daac10bfa96b530c5deff6b9915 | Open Source EDR for Windows |
内核封装
VT 技术
工具名 | 下载地址 | 说明 |
---|---|---|
hvpp | https://github.com/wbenny/hvpp | |
HyperBone | https://github.com/DarthTon/HyperBone | |
HyperWin | https://github.com/amiryeshurun/HyperWin | |
Hypervisor | https://github.com/Bareflank/hypervisor | |
HyperPlatform | https://github.com/tandasat/HyperPlatform | |
Hyper-V-Internals | https://github.com/gerhart01/Hyper-V-Internals | |
Hypervisor-From-Scratch | https://github.com/SinaKarvandi/Hypervisor-From-Scratch | |
KasperskyHook | https://github.com/iPower/KasperskyHook | |
awesome-virtualization | https://github.com/Wenzel/awesome-virtualization | |
ransomware_begone | https://github.com/ofercas/ransomware_begone |
其他
工具名 | 下载地址 | 说明 |
---|---|---|
Divert | https://github.com/basil00/Divert | 将数据流量转发给应用程序,可以修改,丢弃等操作网络流量 |
Blackbone | https://github.com/DarthTon/Blackbone | 内核模式下的几种注入方式,包括了内核模式下的内存注入 |
NetWatch | https://github.com/huoji120/NetWatch | 威胁流量检测系统,可以做虚拟内存补丁 |
x64_AOB_Search | https://github.com/wanttobeno/x64_AOB_Search | 快速内存搜索算法,商用级别,支持通配符 |
DuckMemoryScan | https://github.com/huoji120/DuckMemoryScan | 检测绝大部分所谓的内存免杀马 |
FSDefender | https://github.com/Randomize163/FSDefender | 文件驱动监控 + 云备份方案 |
AntiRansomware | https://github.com/clavis0x/AntiRansomware | 防勒索方案,不让覆盖,写就进行扫描 |
Lazy | https://github.com/moonAgirl/Lazy | (恶意)勒索软件终结者 |
awesome-cheatsheets | https://github.com/skywind3000/awesome-cheatsheets/blob/master/tools/git.txt | 各种 python,git 速查表 |
CTF 资源
仓库名 | 仓库地址 | 说明 |
---|---|---|
CTF-All-In-One | https://github.com/firmianay/CTF-All-In-One | |
ctf-book | https://github.com/firmianay/ctf-book | CTF 竞赛权威指南(Pwn 篇) 相关资源 |
渗透相关
仓库名 | 仓库地址 | 说明 |
---|---|---|
Web-Security-Learning | https://github.com/CHYbeta/Web-Security-Learning | |
pentest | https://github.com/r0eXpeR/pentest | 内网渗透中的一些工具及项目资料 |
K8tools | http://k8gege.org/p/72f1fea6.html | K8tools 工具合集 |
Awesome-Red-Teaming | https://github.com/yeyintminthuhtut/Awesome-Red-Teaming | List of Awesome Red Teaming Resources |
Awesome-Hacking | https://github.com/Hack-with-Github/Awesome-Hacking | A collection of various awesome lists for hackers |
awesome-web-hacking | https://github.com/infoslack/awesome-web-hacking | 渗透知识 |
专利免费查询
仓库名 | 仓库地址 | 说明 |
---|---|---|
专利信息服务平台 | http://search.cnipr.com/ | |
patents | <www.google.com/patents> | |
incopat | <www.incopat.com> | |
佰腾 | https://www.baiten.cn/ | |
rainpat | https://www.rainpat.com/ | |
度衍 | https://www.uyanip.com/ |
Windows导览
- Windows 导览
Windows
windows-ipv6管理
- windows-ipv6管理
windows-ipv6 管理
# 查看ipv6地址, 过滤locallink地址, 过滤Loopback地址
Get-NetIPAddress -AddressFamily IPv6 | Where-Object {$_.IPAddress -notlike "fe80*" -and $_.IPAddress -notlike "::1"} | Format-Table -AutoSize
# 查看ipv6路由
Get-NetRoute -AddressFamily IPv6
# 查看ipv6邻居
Get-NetNeighbor -AddressFamily IPv6
# 查看interface
Get-NetAdapter
# 使能临时ipv6地址
Set-NetIPv6Protocol -UseTemporaryAddress Enabled
# 获取interface 信息
Get-NetIPInterface -AddressFamily IPv6 -ifAlias Ethernet | Select-Object -Property *
Get-NetIPv6Protocol
# 设置interface 信息, 解决Windows IPv6地址不更新的问题
Set-NetIPInterface -AddressFamily IPv6 -ifAlias Ethernet -Dhcp Disabled
Set-NetIPInterface -AddressFamily IPv6 -ifAlias Ethernet -AdvertiseDefaultRoute Disabled
Set-NetIPInterface -AddressFamily IPv6 -ifAlias Ethernet -IgnoreDefaultRoutes Enabled
# 手动恢复ipv6访问
# Set-NetIPInterface -AddressFamily IPv6 -ifAlias Ethernet -RouterDiscovery Disabled
# Set-NetIPInterface -AddressFamily IPv6 -ifAlias Ethernet -RouterDiscovery Enabled
Set-NetIPv6Protocol -DhcpMediaSense Disabled
Set-NetIPv6Protocol -RandomizeIdentifiers Disabled
Set-NetIPv6Protocol -UseTemporaryAddresses Disabled
Set-NetIPv6Protocol -MaxTemporaryDesyncTime 0:3:0
Set-NetIPv6Protocol -MaxTemporaryPreferredLifetime 0:10:0
Set-NetIPv6Protocol -MaxTemporaryValidLifetime 0:30:0
Set-NetIPv6Protocol -TemporaryRegenerateTime 0:0:30
window-message
- window-message
windows-message
Win-to-go
===
Windows To Go 的优点在于移动便携性, 缺点在于经典 Windows系统的数个功能受到限制.
- 前言
- Windows To Go Overview
- Windows To Go 和传统 Windows 安装方式的区别
- 使用 Windows To Go 来移动工作
- 准备安装 Windows To Go
- 硬件要求
- USB 硬盘或 U盘
- 载体机器(Host computer)
- 检查载体 PC 和 Windows To Go 盘的架构兼容性
- Windows To Go 的常见问题
前言
Windows To Go出现很多年了, 可是百度到的中文文档却如此少, 不禁为国内IT技术的发展而担忧.作者J参加工作时间不长, 能力有限, 但工作中接触大量英文开发文档, 因此仍希望能做一点基础的铺路工作, 方便后来者查阅, 有不当之处也请读者不吝指出. Windows To Go有详尽的官方文档, 有英文阅读能力的可以直接跳转到微软官方文档. 链接如下:
- Windows To Go Overview
- Best practice recommendations for Windows To Go
- Deployment considerations for Windows To Go
- Prepare your organization for Windows To Go
- Security and data protection considerations for Windows To Go
- Windows To Go: frequently asked questions
本文主要会介绍 Overview, 和一些常见问题, 大部分内容为翻译, 少量作者的提醒以[J]来标注直至句号结束, 以确保不误导读者.
Windows To Go Overview
Windows To Go 是 Windows 企业版和教育版上的功能, 大多数家庭用户使用的家庭版没有此功能. 它使我们能创建从U盘或硬盘启动的便携Windows系统. Windows To Go 并不是创造出来取代传统工作工具的. 它的主要目的是为了使具有经常切换工作空间需求的人更有效率. 在开始使用 Windows To Go 之前, 使用者必须了解以下注意事项:
- Windows To Go 和传统 Windows 安装方式的区别;
- 使用 Windows To Go 来移动工作;
- 准备安装 Windows To Go;
- 硬件要求.
Windows To Go 和传统 Windows 安装方式的区别
Windows To Go 的工作环境和传统 Windows 几乎一样, 只有以下几点不同:
- 除了使用中的U盘, 机器的其它硬盘默认为离线状态. 即在文件管理器里不可见, 这是为了保护数据的安全. [J]但你仍然有方法可以使其它硬盘出现, 并修改里边的文件.
- TPM 信任平台模块不可用. TPM 模块会绑定到特定某台电脑, 以保护商业数据. [J]多数民用电脑没有TPM模块, 但如果你的商用电脑已经加入了公司的域, 最好不要尝试在该电脑上使用 Windows To Go, 否则建议您先准备好下份工作的简历.
- Windows To Go的休眠默认被禁用, 但仍可以通过组策略来打开. [J]很多机器在休眠会断开和USB设备的连接, 导致不能从休眠中恢复, 这很好理解, 微软已经替我们考虑到了这点, 所以没必要去修改这个设置.
- Windows 的恢复(Restore)功能被禁用. 如果系统出现问题, 只能重装Windows了.
- 恢复到出厂设置不可用, 重置Windows不可用.
- 升级不可用. Windows 只能停留在安装时的版本, 不能从Windows 7 升到8, 也不能从 Windows 10 Red Stone 1 升级到 Red Stone 2.
使用 Windows To Go 来移动工作
Windows To Go 可以在多台机器之间切换, 系统会自动决定设备启动需要的驱动程序. 有一些和系统硬件强关联的应用可能无法运行. [J]比如Thinkpad触控板的设置程序, 指纹识别设置程序等.
准备安装 Windows To Go
可以使用 System Center Configuration Manager, 或者 Windows 的标准部署工具, 例如 DiskPart, Deployment Image Servicing and Management (DISM). 需要注意以下问题:
- 是否有需要注入到 Windows To Go 镜像的驱动?
- 在不同机器上移动工作时时, 怎样合适的存储及同步数据?
- 32位还是64位? [J]新的机器都支持64位, 64位处理器的机器也能运行32位系统, 32位处理器不能运行64位的系统, 64位系统运行时占用更大的硬盘空间和内存空间. 如果你需要迁移使用的机器处理器架构有只支持32位的处理器, 或者机器内存少于4G, 建议你使用32位系统.
- 从协作网络以外的网络远程连接时的分辨率应该设为多少?
硬件要求
USB 硬盘或 U盘
Windows To Go针对以下列出的设备已做出了特别优化来满足需求, 包括
- 优化USB设备的高随机读写, 以使日常操作更流畅.
- 在已认证的设备上可以启动Windows 7及后续系统.
- 即使运行Windows To Go, USB设备也享受原厂保修支持. [J]没说插U盘的电脑会享受保修.
没有通过认证的 USB 设备, 不支持使用 Windows To Go. [J]能不能使用试试就知道了, 不行也知道是为什么. [J]同时网上有修改 U 盘厂商和型号来达到强制支持的另类方法, 不做赘述.
载体机器(Host computer)
- 认证支持Windows 7及后续系统.
- 运行Windows RT系统的电脑不受支持.
- 苹果Mac电脑不受支持. [J]尽管网络上遍布谈Windows To Go在Mac上运行的体验, 但官方文档明确说了, 不支持Mac的使用场景.
以下列出载体电脑的最低配置.
Item | Requirement |
---|---|
启动方式 | 可以USB启动 |
固件 | 从USB启动的设置打开 |
处理器架构 | 必须支持Windows To Go |
外置USB Hub | 不支持. Windows To Go 设备必须直接接在载体电脑上 |
处理器 | 1GHz以上 |
RAM | 2 GB以上 |
显卡 | 有WDDM1.2的DirectX 9及以上 |
USB端口 | USB 2.0及以上 |
检查载体 PC 和 Windows To Go 盘的架构兼容性
Host PC Firmware Type | Host PC Processor Architecture | Compatible Windows To Go Image Architecture |
---|---|---|
Legacy BIOS | 32-bit | 32-bit only |
Legacy BIOS | 64-bit | 32-bit and 64-bit |
UEFI BIOS | 32-bit | 32-bit only |
UEFI BIOS | 64-bit | 64-bit only |