利用 PowerShell 演示批量反向被动 DNS 查询,以确保 IT 安全 | 反向 IP/DNS API | WhoisXML API

演示使用 PowerShell 进行批量反向被动 DNS 查询以进行 IT 安全调查:Phorphiex 僵尸网络的案例

IP 地址是 IT 安全调查的直接输入数据:从技术上讲,它们是互联网节点进行通信的必要条件。因此,如果在网络犯罪发生后没有以某种狡猾的方式删除这些数据,或者在犯罪发生前的任何日志中发现这些数据,那么它们就会对揭示实际发生的情况大有帮助。 

IBM Xforce exchange 是一个报告许多安全事件的论坛,与负责维护 IT 安全的人员息息相关。在本博客中,我们将选取其中的一份报告,检查如何使用 PowerShell(安装在 Windows 上,也可用于 Linux 和 Mac OS X)扩展 WhoisXML API 给出的信息。我们假定您具备 PowerShell 编程的中低级技能,可以按照下面的说明进行操作。 

我们将使用 WhoisXML API 的反向 DNS API 提供的被动 DNS 数据:我们可以获得被动 DNS 传感器观察到的网络通信事件列表,其中给定 IP 将解析到一个实际域名。这意味着给定 IP 在给定时间以给定域名在互联网上进行通信;这是无法从域名系统本身获得的信息。同时,这对揭示恶意对手的特征有很大帮助,下面的演示性研究将清楚地说明这一点。 

1.从 IBM XForce 数据集获取数据 

我们的主题是最近观察到的 Phorphiex 僵尸网络的活动。引用 IBM 的描述(网址:https://exchange.xforce.ibmcloud.com/collection/Phorpiex-Botnet-Extortion-Activity-Monitoring-76265914d081e79d158260bf5385a9da,访问日期:2021 年 8 月 19 日)、 

"IBM X-Force 正在创建的程序集旨在为您提供在我们的环境中发现的 Phorpiex 僵尸网络勒索活动的最新 IoC 和情报。只要有新的发现,该集合就会自动更新。请注意,该集合中的 IoC 是可操作的,因此可用于阻止以保护您的环境。因此,当没有进一步证据支持指标的恶意性时,可能会发生特定 IoC 在动态时间范围内从该集合中删除的情况"。 

"Phorpiex "僵尸网络最初是一个使用 IRC 协议运行的僵尸网络,后来改用模块化架构。它通过漏洞利用工具包和其他恶意软件家族的支持进行传播。由于取得了成功,其运营商现在将其作为 "恶意软件即服务"(MaaS)来运营。这种服务允许其他网络团伙使用僵尸网络基础设施来实现其恶意意图。不过,僵尸网络日常威胁的一大部分是所谓的 "sextortion "垃圾邮件活动。垃圾邮件中的 "sextortion "是指以发布受害者的亲密照片或视频为威胁,胁迫受害者在给定时间内支付一定金额。众所周知,这是一种虚假的威胁,因为迄今为止还没有已知的案例证明威胁行为者拥有此类材料"。 

IBM X-Force Exchange 提供了一系列报告,其中包含最近观察到该僵尸网络活动的 IP 地址。在撰写本博客时,可以从 IBM X-Force Exchange 下载的信息中推断出 IP 地址列表。也就是说,可以从上述链接下载文件,方法是从 "我受到影响 "按钮旁边的菜单中选择 "导出 "选项。选择 STIX 2.0 格式将下载一个标准 JSON 格式的文件,从中可以推导出 IP 地址并进行进一步处理。 

2.从 STIX 2.0 格式报告中提取 IP 地址 

我们下载的 STIX 2.0 文件已保存为 xfe-collection_76265914d081e79d158260bf5385a9da.json。然后,在下载文件所在的目录中,用 PowerShell 这种方式获取 IP 列表,我们要做的转换如下: 

$data=Get-Content ".\xfe-collection_76265914d081e79d158260bf5385a9da.json" |
ConvertFrom-Json
$data.objects.pattern |
foreach {$_ | Select-String -Pattern '(\d{1,3}\.){3}\d{1,3}'}|
foreach {$_.Matches.Value}> ips.csv 

第一条命令将集合中的条目转换为 PowerShell 对象。第二行获取 JSON 的模式字段,该字段也包含字符串形式的 IP 地址。然后通过正则表达式匹配获取 IPv4 地址。生成的 ips.csv 文件每行包含一个 IP 地址。下一步,我们将开发一个脚本,使用反向 IP API 将被动 DNS 信息补充到该文件中。 

3.使用反向被动 DNS 数据扩展 IP 列表的脚本 

我们可以使用 PowerShell cmdlet 和以下代码(建议保存为 ExtendIPCsvWithReversePDNS.ps1)来实现用反向被动 DNS 数据扩展 IP 地址列表的目标: 

#Extends a list of IPs with Reverse IP/DNS lookup results
# The input list does not contain a header and contains valid IPs
#Usage:
# 1. set the environment variable APIKEY to your API key:
#    PS C:\Users\User\WorkingDirectory> $APIKey="YOUR_API_KEY"
# 2. Once done, you can run it like this:
#   PS C:\Users\User\WorkingDirectory> .\ExtendIPCsvWithReversePDNS.ps1
'.\inputfile.csv' '.\outputfile.csv'
# Note: if the output file exists and is not empty, the results will be appended.

[CmdletBinding()]
param(
    [string] $InputFile,
    [string] $OutputFile
)

$BaseUrl = "https://reverse-ip.whoisxmlapi.com/api/v1?apiKey=" + $ENV:APIKEY +"&ip="

Function Convert-FromUnixDate ($UnixDate) {

[timezone]::CurrentTimeZone.ToUniversalTime(([datetime]'1/1/1970').AddSeconds($UnixDate))
}

Import-Csv -Header "IP" -Path $InputFile | ForEach-Object {
Write-Host $_.IP
$URI = $BaseUrl + $_.IP
#Need this to be visible in the catch branch
$IP = $_.IP
$IPData = [PSCustomObject]@{
IP = $IP
}
try{
$APIResponse = Invoke-WebRequest -Uri $URI -UseBasicParsing
$k=0
$Result = ConvertFrom-Json $APIResponse.Content
foreach($row in $Result.result) {
$first_seen = Convert-FromUnixDate $row.first_seen
$last_visit = Convert-FromUnixDate $row.last_visit
Write-Host $k $row.name $first_seen $last_visit
$field1 = "name_" + [string]$k
$field2 = "first_seen_" + [string]$k
$field3 = "last_visit_" + [string]$k
$IPData | Add-Member -MemberType NoteProperty -Name $field1 -Value $row.name
$IPData | Add-Member -MemberType NoteProperty -Name $field2 -Value $first_seen
$IPData | Add-Member -MemberType NoteProperty -Name $field3 -Value $last_visit
$k += 1}
for($l=$k; $l -lt 300; $l++){
$field1 = "name_" + [string]$l
$field2 = "first_seen_" + [string]$l
$field3 = "last_visit_" + [string]$l
$IPData |
    Add-Member -MemberType NoteProperty -Name $field1 -Value " "
$IPData |
    Add-Member -MemberType NoteProperty -Name $field2 -Value " "
$IPData |
    Add-Member -MemberType NoteProperty -Name $field3 -Value " "
}
}
catch{
Write-Host "Ran into an issue: $($PSItem.ToString())"
for($l=0; $l -lt 300; $l++){
$field1 = "name_" + [string]$l
$field2 = "first_seen_" + [string]$l
$field3 = "last_visit_" + [string]$l
$IPData |
    Add-Member -MemberType NoteProperty -Name $field1 -Value " "
$IPData |
    Add-Member -MemberType NoteProperty -Name $field2 -Value " "
$IPData |
    Add-Member -MemberType NoteProperty -Name $field3 -Value " "
}
}
$IPData |
    Export-Csv -Append -NoTypeInformation -Encoding UTF8 $OutputFile
}

脚本在前几行注释中包含了使用说明,以保持前后一致;我们将在后面介绍调用脚本的方法。在操作过程中,我们定义了两个位置参数:输入文件(每行一个 IP 列表)和输出文件(结果将附加到该文件中)。我们将 API 的基本 URL 保存在 $BaseUrl。函数 Convert-FromUnicDate 的作用是将 API 以 Epoch 形式返回的时间转换为日期。 

主循环通过管道获取 IP。我们将在 $IPData 中存储每个 IP 的记录。API 调用及其处理都在 try-catch 中进行,以处理出错的情况。我们使用 Invoke-WebRequest 调用 API,并使用 ConvertFrom-Json 解析生成的 JSON。我们希望每个 IP 都成为输出 csv 文件中的一行,因此我们循环查看 API 结果字段(即结果列表),并将每条记录的名称、首次访问和最后访问映射到带有序号的下一个字段。由于 Export-Csv 目前无法处理每行不同数量的输入,因此我们在其余字段中填入一个空格作为占位符。在向控制台打印错误信息后,我们在 catch 分支中也做了同样的操作,以便在出错时有一个空行。(请注意,API 一次调用最多可返回 300 条记录;如果给定的 IP 有更多记录,在按上述方法调用时,它会为我们提供 300 条任意记录,因此我们在这里生成了包含 300 个结果三连串的行。有关如何获取所有记录的说明,请参阅API 文档)。最后,将生成的 IPData 对象附加到输出的 csv 文件中。 

要使用该脚本,必须将环境变量 $APIKey 设置为实际的 API 密钥,即 

$APIKey="YOUR_API_KEY"

(上面的 YOUR_API_KEY 字符串应替换为您的 API 密钥,该密钥可在https://reverse-ip.whoisxmlapi.com/api/signup或您注册后的账户页面注册后获得)。然后,我们就可以按照开头注释中的描述运行脚本了。将其用于我们之前准备的文件 ips.csv、 

PS C:\Users\User\WorkingDirectory> .\ExtendIPCsvWithReversePDNS.ps1 '.\ips.csv' '.\ips_result.csv'。

结果是文件 ips_result.csv,可以导入到办公电子表格或作为文本查看。该文件包含一行标题和一行每个 IP 的标题,如下所示: 

"91.232.140.99", "91.232.140.99.ip.rudna-net.pl", "1/4/2019 8:32:10 PM", "7/16/2021 8:09:19 AM"," "," ","

由于线路很长,我们将其省略。 

4.结果和结论 

我们没有在此公布数据文件,因为其中包含恶意 IP,而且文件相当大。我们将总结我们的发现。从详细结果来看,其中许多 IP 显然不在被动 DNS 数据库中。直接 DNS 查询证实,其中大部分确实没有反向 DNS 记录。即使是那些有反向记录的 IP,通常也是解析为有线电视或移动网络提供商自动生成的名称,并赋予动态 IP。 

由此可以得出结论,根据对 IP 地址收集的反向被动 DNS 分析,僵尸活动是基于不同提供商的个人用户的机器。 

由于被动 DNS 数据包含日期时间,而最初的 STIX 2.0 文件也包含日期,因此可以通过日期关联找到真正受影响的域名。根据这些结果,可以向受影响的提供商发出警告,这些提供商随后可以分析其日志,并通知他们的客户,这些客户成为僵尸网络的一部分,通常是由于他们受到了某些漏洞利用工具包活动的影响。 

作为总结,我们还从技术角度详细介绍了如何使用反向 IP/DNS 应用程序接口(Reverse IP/DNS API)通过补充信息来扩展 IP 列表。我们的演示使用了现实生活中的数据,并产生了直接有用的结果。请访问https://www.whoisxmlapi.com/获取 API 密钥,以便自己重现上述结果或进行类似分析。WhoisXML API 的其他强大网络安全工具也值得一看。