0. 起因
在最近的一次红队行动中,微步沙箱的流量监控策略识别到了工具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}
当反向代理不开启加密或多路复用时,这个协议就是明文裸奔的,被被动检测到或被主动测绘到可以说非常正常了
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 bytes
len(Server Handshake Padding):Secret Key的前16字节相加模256
len(Client Handshake Padding):Secret Key的后16字节相加模256
len(Encrypt IV Padding):Encrypt IV的24字节逐位异或Secret Key相加,模256
len(Decrypt IV Padding):Decrypt IV的24字节逐位异或Secret Key相加,模256
再看看添加随机padding后反向代理握手包的特征(命令是iox proxy s@tcp:127.0.0.1:9999 -k ffffff
和iox proxy s@tcp-l:9999 proxy:1080 -k ffffff
)
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 ffffff
和iox proxy sx@tcp-l:9999 proxy:1080 -k ffffff
)
(每段数据开头的02都是smux的包头)
为了解决这个问题,只需要改变流量链的顺序,将加密器和compress放在smux的下层,像这样
plain triffic => smux I/O multiplexing => compress => encrypt => TCP socket
本来以为逻辑要大改,但幸好我之前做了抽象,所以只需要修改SocketDesc中部分逻辑即可,再来看看修改后的流量特征
重构后多少会有点小bug,并且有一些不够清真的补丁,比如对Multiplexing与否的Listener有一套不同的逻辑,迫使定义了一个ListenerWrapper来统一处理
5. 总结
各位Red Teamer今后如果在行动中使用到iox,切记:
-
开启加密
-
经常更换命令行传递的密钥
原文始发于微信公众号(0x4d5a):iox对抗沙箱流量监控
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论