freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

如何在终端上定位发起恶意请求的进程?
2023-03-20 10:49:02
所属地 北京

前言

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

MacOS篇

安全工具

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

火绒剑Mac版

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

image

实际测试中,开启对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,能够完美匹配需求。

image

开启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 status
enabled

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>

效果如下:

image

日志查询方式

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

$  sudo log config --status
System mode = INFO PRIVATE_DATA

在终端中运行下列命令,可以查询近一小时的日志
log show --last 1h --predicate 'eventMessage CONTAINS[cd] "dns"' |grep "mDNSResponder" |grep "START PID"

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

小结

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

Windows篇

微软的Sysmon 10,集成了DNS查询记录功能,此功能将允许Sysmon用户在受监视的计算机上记录进程所执行的DNS查询。从功能介绍来看,是契合需求的。
通过官方下载地址下载,cmd命令窗口执行sysmon.exe -accepteula -i sysmonconfig-export.xml命令进行安装,配置文件来自Github开源项目sysmon-config
安装成功后即可在事件查看器中的应用程序和服务日志/Microsof /Windows/Sysmon/Operational 查看dns请求日志,事件ID为22。

image

如果想查询特定的域名,需要编辑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++
}

执行效果如下:

image

参考

https://github.com/SwiftOnSecurity/sysmon-config
https://huorong.cn/info/1620802825658.html
https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon
https://georgegarside.com/blog/macos/sierra-console-private/#google_vignette
https://saagarjha.com/blog/2019/09/29/making-os-log-public-on-macos-catalina/

# 终端安全 # 应急响应 # 办公网安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录