DumbRDPAlert 开发手记
May 21, 2023
- 在 Windows 平台独立测试时,
-ldflags "-H=windowsgui"
可以编译为 GUI 应用,但此时没有可用的 stdout 和 stderr,日志写出会出现异常,请指定仅打印日志到对应文件。使用计划任务运行时选择不保存密码即可不显示 GUI (没有桌面的交互访问权限)。 - XML 中使用的Property字符串参数应当尽可能使用双引号,单引号在 Windows 下可能无法正常识别。例如,此处的 “AuthUser” 应当使用双引号。以 Windows System Event 作为参数时,可以使用 XPath 定义数据位置。使用 ValueQueries 类型即可,应当放置在 EventTrigger 层级下。
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription><QueryList><Query Id="0" Path="Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational"><Select Path="Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational">*[System[EventID=1149]]</Select></Query></QueryList></Subscription>
<ValueQueries>
<Value name="AuthUser">Event/UserData/EventXML/Param1</Value>
<Value name="AuthUserDomain">Event/UserData/EventXML/Param2</Value>
<Value name="AuthSrcIP">Event/UserData/EventXML/Param3</Value>
</ValueQueries>
</EventTrigger>
</Triggers>
调用第三方程序时可以使用:
<Actions Context="Author">
<Exec>
<Command>C:\ProgramData\RDPAlertY\RDPAlert.exe</Command>
<Arguments>"$(AuthUserDomain)" "$(AuthUser)" "$(AuthSrcIP)"</Arguments>
</Exec>
</Actions>
- 这个程序不依赖计划任务的运行方式应当是使用 winsw 创建服务拉起程序,然后程序内部使用 ETW Trace Session 订阅一个 MS-TerminalServices-RemoteSessionManager-Operational 类别的日志,然后关注 ID 1149并解析内容即可。