本文主要从老牌开源内网工具 LCX ,来介绍一些常见的源码免杀技巧及知识。
LCX介绍
在内网渗透中,我们经常会用到端口转发。而LCX就是一款经典的端口转发工具。这款工具面世已经很久了,从一些文章中追溯可以看到至少在2007年之前就已经有所应用了。而经过十多年依然时不时的活跃在各个攻防演练中,这足以证明这款工具的实用性及易用性。
命令使用及实战
命令
我们先来看下使用说明:
-listen <ConnectPort1> <TransmitPort2> 监听p1,接收由p2转发过来的数据
-tarn <ConnectPort> <TransmitHost> <TransmitPort> 端口转向功能,通过访问该端口可以直接与该主机或另一台主机的某一个端口进行通信
-slave <TransmitHostB> <PortB> <TransmitHostA> <PortA> 端口转发功能,将目标A机上的端口A,转发到外网B机的端口B上
实际使用
两台机器:
将内网机器 3389 端口流量转发到外网 VPS 机器 55 端口上:
lcx.exe -slave 外网VPS机器IP 55 内网设备IP 3389
在外网 VPS 机器 55 端口上进行监听,接收由外网 VPS 机器 3389转发过来的数据
lcx.exe -listen 55 3389
连接外网 VPS 机器 3389 端口即连接内网机器 3389 端口
多台机器:
多台机器中间的机器可能只有某台机器可以出外网,可进行转发具体命令如下:
机器1(不可出外网)-172.16.1.10:
lcx.exe -slave 172.16.1.20 55 172.16.1.10 3389
机器2(不可出外网)-172.16.1.20:
lcx.exe -tran 55 172.16.1.30 66
机器3(可出外网)-172.16.1.30:
lcx.exe -tran 66 17.18.19.20 77
机器4(外网VPS)-17.18.19.20:
lcx.exe -listen 77 3389
连接机器 4 外网 VPS 机器的 3389 端口即连接内网机器 1 的 3389 端口
源码分析
LCX因面世多年早已被各大AV和安全设备所查杀。
360查杀结果:
Virscan查杀结果:(24/49)
VT查杀结果:(17/56)
我们想要愉快的玩耍必须对其进行免杀处理,而幸运的是LCX的源码也已经开源多年,这极大地方便的我们通过修改源码的方式来达到免杀的目的。
首先我们需要源码进行分析,来了解各功能函数的作用:
bind2bind:-listen命令时专用函数,用于将本机的端口1和端口2进行绑定。
bind2conn:-tran命令时专用函数,用于将端口1和另一台主机的端口2进行绑定。
client_connect:主动建立socket链接。
closeallfd:关闭所有socket链接。
conn2conn:-slave命令时专用函数,用于将主机的端口1和另一台主机的端口2进行绑定。
create_server:建立监听。
create_socket:创建socket并返回其id。
getctrlc:Ctrl+C 中断。
main:入口函数,接受命令及根据命令进行下一步操作。
makelog:打印日志。
testifisvalue:检测输入参数是否合法。
tranmitdata:多个socket进行数据交互。
usage:打印LCX工具的用法。
这里只进行简单对主要函数进行概述,具体想了解详细过程可以自行查看源码。
源码免杀
首先我们通过重新在最新VS环境下编译源码生成exe,跟原版对比已经改变了编译环境,一定程度上已经进行免杀。我们先使用最简单的办法:增加花指令。
花指令
花指令是对抗反汇编的有效手段之一,正常代码添加了花指令之后,可以破坏静态反汇编的过程,使反汇编的结果出现错误。错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,也就很难破解程序,从而达到病毒或软件保护的目的。
在入口main函数最一开始增加花指令:
增加花指令之后在virscan上扫描结果:(5/50)
可以看到通过改变编译环境和增加花指令,已经成功免杀了大部分AV了。
特征码字符串
在静态查杀技术中会利用到一些样本中的字符串作为特征码来进行查杀,所以我们通过修改这些字符串来达到免杀的目的。
查看LCX中的可读字符串:
到源码中去看对应字符串:
发现很多都是一些打印,如果我们已经使用熟练基本可以把这些没有用的打印删掉。
删掉打印相关字符串后在VT上扫描结果:(2/69)
删掉打印相关字符串后在Virscan上扫描结果:(1/50)
竟然在Virscan上还有一个,让我们看看是哪个小可爱~
好吧,看了半天发现,小丑竟是我们自己。。。
我们尝试思考一下,除了打印中的可见字符串,在输入命令时也会有相关字符串特征:
这块我们可以通过对字符串进行变形,来将整个字符串隐藏起来:
修改前:
修改后:
字符串变形后在VT上扫描结果:(1/69)
VT:
字符串变形后在Virscan上扫描结果:(0/50)
数字签名
很多AV会对文件的数字签名进行检查,如果检查到是一些合法的数字签名,就不进行进一步查杀了。我们这里可以利用这一点,来完成最后的一步免杀。
通过工具加入数字签名:
加入数字签名后在Virscan上扫描结果:(0/50)
至此我们的LCX终于可以愉快的玩耍了~
关于加壳
免杀比较常见手段之一就是加壳,通过加壳将原始代码进行加密压缩,让其特征码变化隐藏,然后组装上解密器/解压器到文件中,运行是先运行解密/解压器,将加密压缩内容解密解压,然后继续运行原始代码。但是各大杀软对一些常见壳的特征侦测比较敏感,导致加了这些壳就报。
先看测试源码:
源码就一句打印HelloWord,生成后再加了UPX壳后,各种杀软都不淡定了:
结论:尽量加冷门壳,有能力自己写壳/改壳就自己动手。加常见壳还不如不加壳。
免杀时效
在上传VT以及一些在线查杀网站的时候,你的工具可能是完全免杀的。但是这个动作同时也意味着这个工具样本本身已经暴露于互联网上,这个已经无法完全处于暗处了。而跟这些在线查杀网站网站合作的安全公司很快就会拿到这个工具样本。经过他们深度分析后,很快就会把这个工具样本打上恶意标签,甚至相关特征码也已经更新到他们AV库里了。所以我们在实际应用时,尽量使用离线AV来进行免杀测试,来延长我们工具的免杀时效,保证我们实际应用时的致命一击成功率。
总结
杀毒和免杀一直都是动态对抗,正如在攻防演练中的红蓝对抗一样,需要两边都不断的升级,不断地提高。本次免杀也只能是保证在某一段时间内无法被AV查杀,随着时间的流逝,样本被捕获,终会被杀。我们能做的就是在这一波一波如浪潮般的动态对抗过程中,不断地磨砺自己,砥砺前行!
- 本文作者: Edwater
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/659
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!