如何在终端上定位发起恶意请求的进程?
2023-6-6 12:27:8 Author: 星冥安全(查看原文) 阅读量:18 收藏

前言

在日常工作中,我们常常会监测到办公网发出的恶意域名请求。然而,由于缺乏EDR工具的辅助,我们在定位这些恶意请求时效率往往较低。因此,我们总结了一些有助于提高定位效率的方法,包括开源工具使用和借助系统自身日志分析。这些方法都可以帮助我们更快速、准确地定位办公网发出恶意域名请求的进程,提高我们的安全响应能力。

MacOS篇

安全工具

思考这个问题的时候,首先想到的是借助现有安全工具,于是调研了多款具备网络监控能力的工具,下面展示可以满足需求的两款工具的实际使用效果。

火绒剑Mac版

火绒提供了对进程进行网络监控的能力。

实际测试中,开启对dns请求的过滤,并没有任何输出。但是对于dns解析固定的域名,可以通过开启监控,过滤指定ip来协助定位。

DNSMonitor

DNSMonitor是一款利用 Apple 的Network Extension Framework监控 DNS 请求和响应的开源安全工具。
项目地址:https://github.com/objective-see/DNSMonitor
下载地址:https://objective-see.org/products/utilities.html
使用方法:
将软件解压至Applications目录,运行后允许加载系统扩展和监控dns流量即可使用。

DNSMonitor.app/Contents/MacOS/DNSMonitor -h
DNSMonitor usage: -h or -help display this usage info -json output is formatted as JSON -pretty JSON output is 'pretty-printed'

监控效果如下,可以获取执行dns请求的程序路径和进程ID,能够完美匹配需求。

开启MacOS统一日志的私有数据日志并进行查询

macOS统一日志是一种全新的日志系统,在Mac OS X 10.12 Sierra中首次引入。它将多个日志来源整合到一个统一的日志文件中,包括系统日志、应用程序日志和安全日志等。其中包含了DNS请求日志,但是默认是被作为私有数据日志记录的,需要手动开启。在Sierra后的不同的系统版本中有不同的启用方式。

从Sierra到Mojave

在终端中运行下列命令即可开启
sudo log config --mode "private_data:on"

Catalina <10.15.3

上述方法在Catalina中不再有效。研究员Saagar Jha提供了一款PrivateLogs工具用于开启私有数据日志。
在终端中运行下列命令即可开启

$ PrivateLogs enable$ PrivateLogs statusenabled

PrivateLogs工具:https://saagarjha.com/blog/2019/09/29/making-os-log-public-on-macos-catalina/#putting-it-all-together

Catalina 10.15.3+

在更高的版本中,可以通过安装描述文件,打开私有数据日志

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict>  <key>PayloadContent</key>  <array>    <dict>      <key>PayloadDisplayName</key>      <string>ManagedClient logging</string>      <key>PayloadEnabled</key>      <true/>      <key>PayloadIdentifier</key>      <string>com.apple.logging.ManagedClient.1</string>      <key>PayloadType</key>      <string>com.apple.system.logging</string>      <key>PayloadUUID</key>      <string>ED5DE307-A5FC-434F-AD88-187677F02222</string>      <key>PayloadVersion</key>      <integer>1</integer>      <key>System</key>      <dict>        <key>Enable-Private-Data</key>        <true/>      </dict>    </dict>  </array>  <key>PayloadDescription</key>  <string>Enable Unified Log Private Data logging</string>  <key>PayloadDisplayName</key>  <string>Enable Unified Log Private Data</string>  <key>PayloadIdentifier</key>  <string>C510208B-AD6E-4121-A945-E397B61CACCF</string>  <key>PayloadRemovalDisallowed</key>  <false/>  <key>PayloadScope</key>  <string>System</string>  <key>PayloadType</key>  <string>Configuration</string>  <key>PayloadUUID</key>  <string>D30C25BD-E0C1-44C8-830A-964F27DAD4BA</string>  <key>PayloadVersion</key>  <integer>1</integer></dict></plist>

效果如下:

日志查询方式

在终端中运行下列命令,可检测是否开启成功

$  sudo log config --statusSystem mode = INFO PRIVATE_DATA

在终端中运行下列命令,可以查询近一小时的日志

log show --last 1h --predicate 'eventMessage CONTAINS[cd] "dns"' |grep "mDNSResponder" |grep "START PID"

效果如下:

备注:只能查询开启私有数据日志记录之后的日志,历史日志仍以私有日志形式展示。实际测试中在Ventura只显示了部分私有数据日志,精力有限,未跟进探究。

小结

以上几种方式各有优缺点。DNSmonitor可以完美解决开篇的问题,而火绒在此设定场景下的监控能力对比DNSmonitor稍有不足,但是其能力也不限于网络监控。如果不想借助第三方工具,可以按系统版本参照上文对应方法开启私有数据日志,另外不信任第三方描述文件的话,也可以参照官方文档自行编写。

官方文档:https://developer.apple.com/documentation/devicemanagement/systemlogging

Windows篇

微软的Sysmon 10,集成了DNS查询记录功能,此功能将允许Sysmon用户在受监视的计算机上记录进程所执行的DNS查询。从功能介绍来看,是契合需求的。
通过官方下载地址下载,cmd命令窗口执行sysmon.exe -accepteula -i sysmonconfig-export.xml 命令进行安装,配置文件来自Github开源项目sysmon-config。

官方下载地址:https://learn.microsoft.com/en-us/sysinternals/downloads/sysmonsysmon-config:https://github.com/SwiftOnSecurity/sysmon-config

安装成功后即可在事件查看器中的应用程序和服务日志/Microsof /Windows/Sysmon/Operational 查看dns请求日志,事件ID为22。

如果想查询特定的域名,需要编辑xml格式的查询语句进行筛选,这里直接贴一段powershell脚本,可查询指定时间内的指定域名以及发起dns请求的用户和进程id。

#查询过去1小时内,事件ID为22,域名为www.baidu.com的日志
$xml ='<QueryList>
<Query Id="0" Path="Microsoft-Windows-Sysmon/Operational">
<Select Path="Microsoft-Windows-Sysmon/Operational">*[System[(EventID=22)
and TimeCreated[timediff(@SystemTime) &lt;= 3600000]]] and *[EventData[Data[@Name="QueryName"] and (Data="www.baidu.com")]]</Select>
</Query>
</QueryList>'

$events = Get-WinEvent -FilterXml $xml
$i=0

while ($i -lt $events.length) {
$time=$events[$i].TimeCreated
$dns=[regex]::matches($events[$i].Message, 'QueryName:(.+)') | %{$_.Groups[1].Value.Trim()}
$id=[regex]::matches($events[$i].Message, 'ProcessId:(.+)') | %{$_.Groups[1].Value.Trim()}
$user=[regex]::matches($events[$i].Message, 'User:(.+)') | %{$_.Groups[1].Value.Trim()}
Write-Host $time,' QueryName:'$dns' ','ProcessId:'$id' ','User:'$user
$i++
}

执行效果如下:

参考

https://github.com/SwiftOnSecurity/sysmon-confighttps://huorong.cn/info/1620802825658.htmlhttps://learn.microsoft.com/en-us/sysinternals/downloads/sysmonhttps://georgegarside.com/blog/macos/sierra-console-private/#google_vignettehttps://saagarjha.com/blog/2019/09/29/making-os-log-public-on-macos-catalina/
转载:https://www.anquanke.com/post/id/287604作者:陌陌安全欢迎大家去关注作者

欢迎师傅加入安全交流群(qq群:611901335),或者后台回复加群

如果想和我一起讨论,欢迎加入我的知识星球!!!

扫描下图加入freebuf知识大陆

师傅们点赞、转发、在看就是最大的支持

后台回复知识星球或者知识大陆也可获取加入链接(两个加其一即可)


文章来源: http://mp.weixin.qq.com/s?__biz=MzkxMDMwNDE2OQ==&mid=2247490682&idx=1&sn=f41755235b69f0170d93eb486133d454&chksm=c12c2abcf65ba3aab1183a9736009d06f31a4e16196fa6fce448cc8dcb39e921995b582540f4#rd
如有侵权请联系:admin#unsafe.sh