iox对抗沙箱流量监控

admin 2024年10月14日05:34:29评论28 views字数 1894阅读6分18秒阅读模式

0. 起因

在最近的一次红队行动中,微步沙箱的流量监控策略识别到了工具iox

iox对抗沙箱流量监控

其实对于v0.5版本的iox,开启加密的话几乎是不会被识别到的,因为反向代理的握手包是要经过加密器处理的,流量监控设备最多能监控到C/S间交换了24 bytes的IV和8 bytes的握手包

但坏就坏在我也很久没用自己的工具,进内网开反向代理时忘了开加密,一步错导致满盘皆输,深刻反省 :)

1. iox反向代理的握手过程

iox的反向代理内置了一个非常简单的控制协议:

CMD | N | PROTO_END

相关的定义在

const (    CTL_HANDSHAKE = iota    CTL_CONNECT_ME    CTL_CLEANUP    MAX_CONNECTION   = 0x800    CLIENT_HANDSHAKE = 0xc0    SERVER_HANDSHAKE = 0xe0)type Protocol struct {    CMD byte    N   byte}var PROTO_END = []byte{0xee, 0xff}

当反向代理不开启加密或多路复用时,这个协议就是明文裸奔的,被被动检测到或被主动测绘到可以说非常正常了

iox对抗沙箱流量监控

2. iox开启加密时的情况

在iox v0.5版本中,当开启加密时,C/S间会先交换24 bytes的随机IV,接下来的通信都会被加密器加密

也就是说,流量监控设备只能识别到C/S间交换了24 bytes IV + 8 bytes handshake 数据,但这32位数据全部是随机字节。并且对同一个进程的多个连接来说,这32 bytes数据都是不同的,几乎不可能被识别到

但仔细一想,C/S遵循先交换24 bytes数据再交换8 bytes数据的规则,从某种意义上来说也会被算作一种行为特征,那么解决的办法就是添加随机的padding

3. 添加随机padding

随机padding的添加需要满足以下条件:

Server handshake/Client handshake/Encrypt IV/Decrypt IV 这四个数据都需要添加padding,且这四个padding长度不同添加的padding必须由预交换的密钥(也就是命令行传递的密钥)派生,仅从流量层面无法推断出padding的长度

最终padding的生成方式:

Secret Key:命令行提交的密钥进行sha256得到32 byteslen(Server Handshake Padding):Secret Key的前16字节相加模256len(Client Handshake Padding):Secret Key的后16字节相加模256len(Encrypt IV Padding):Encrypt IV的24字节逐位异或Secret Key相加,模256len(Decrypt IV Padding):Decrypt IV的24字节逐位异或Secret Key相加,模256

再看看添加随机padding后反向代理握手包的特征(命令是iox proxy s@tcp:127.0.0.1:9999 -k ffffffiox proxy s@tcp-l:9999 proxy:1080 -k ffffff

iox对抗沙箱流量监控

4. 开启多路复用的情况

就当我以为大功告成时,突然发现当开启I/O多路复用时的特征无法抹去,原因是iox的数据传递顺序是

plain triffic => compress => encrypt => smux I/O multiplexing => TCP socket

也就是说,smux这个多路复用库传递的一些元数据是直接写入TCP socket,而不经过加密器,抓包会看到非常明显的特征,安全设备可以轻易识别出使用了smux多路复用(命令是iox proxy sx@tcp:127.0.0.1:9999 -k ffffffiox proxy sx@tcp-l:9999 proxy:1080 -k ffffff

iox对抗沙箱流量监控

(每段数据开头的02都是smux的包头)

为了解决这个问题,只需要改变流量链的顺序,将加密器和compress放在smux的下层,像这样

plain triffic => smux I/O multiplexing => compress => encrypt => TCP socket

本来以为逻辑要大改,但幸好我之前做了抽象,所以只需要修改SocketDesc中部分逻辑即可,再来看看修改后的流量特征

iox对抗沙箱流量监控

重构后多少会有点小bug,并且有一些不够清真的补丁,比如对Multiplexing与否的Listener有一套不同的逻辑,迫使定义了一个ListenerWrapper来统一处理

5. 总结

各位Red Teamer今后如果在行动中使用到iox,切记:

  1. 开启加密

  2. 经常更换命令行传递的密钥

原文始发于微信公众号(0x4d5a):iox对抗沙箱流量监控

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

发表评论

匿名网友 填写信息