传奇病毒劫持流量手法分析

技术点

通过TDI过滤、DNS劫持、HTTP(s)注入、HOSTS重定向等技术手法篡改用户系统网络数据包,将正常网页访问劫持引流至指定私服网站,并利用安全软件云查杀数据包屏蔽、关机回调重写等手段实现对抗查杀。

技术细节

  • A、注册TDI回调函数,过滤收发包

病毒驱动加载后,对TDI_SEND和TDI_SET_EVENT_HANDLER进行了处理,前者主要是负责网络数据的发包,后者则是负责对接收到网络数据进行处理,对这两个地方进行过滤处理之后,带来的效果就是访问A域名,实际打开的却是B网站。

在TDI_SEND中,通过检测360与其云端的通讯时的关键字段“x-360-ver:”,中断云查询,从而造成云查杀的失效。在TDI_SET_EVENT_HANDLER中,收到符合规则的请求响应数据后,病毒直接修改数据包,嵌入相应的HTML框架代码进行劫持

  • B、设置IE代理,劫持HTTP访问

设置IE代理的目的,猜测是为了在病毒驱动被杀软清理后,依旧能够长期劫持网站访问所用。IE的代理配置信息由云端实时下发。

549050-20190325000242773-349485849.png

  • C、创建关机回调,劫持DNS和自更新

下载劫持的DNS配置信息,然后在关机回调中设置电脑的DNS,从而完成DNS的修改劫持

549050-20190325000449243-428416096.png

  • D、 创建映像加载回调,拦截其它病毒运行

在映像加载回调中,为了确保被感染的电脑能够被自己成功劫持,当检测到当前加载的是驱动程序时,还会对比签名是否为黑名单中的签名(黑名单从106.14.47.210:11054/bctlist.dat下载而来),若符合拦截规则,则直接禁止加载。

  • E、 创建注册表回调,保护自身启动

在注册表回调中,若发现有对IE代理设置和驱动服务类注册表项的操作,则直接拒绝访问,防止相关注册表项被修改。

除此之外,病毒还会循环枚举注册表回调函数的地址,若检测到被删除,则会再次注册回调函数,这么做为了防止用户利用pchunter之类的ARK工具对回调函数进行删除操作,使病毒难以被手动清除。但如果是病毒程序自身升级需要修改相关的注册表项时,则会利用开关标记来暂停对相关注册表项的保护。

549050-20190325000626872-646599240.png

  • F、 下载配置信息,实时更新劫持信息

无需与3环进程交互,完全由0环的驱动实现,而相关的配置信息,也统一从远程服务器下载。

参考

私服暗藏杀机,亡灵病毒肆虐江湖
https://www.freebuf.com/articles/system/198869.html

转载于:https://www.cnblogs.com/17bdw/p/10591513.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于TDI 的 TCP数据传输 1.上位机 上位机包括tcp和tcp.cpp 1.1 对外函数说明 HANDLE TdiTcpOpen(); TdiTcpOpen用于打开设备,成功返回有效的句柄,失败返回INVALID_HANDLE_VALUE. BOOL TdiTcpClose(HANDLE hDevice); TdiTcpClose用于关闭设备,成功返回TRUE,失败返回FALSE; hDevice为TdiTcpOpen返回的句柄 BOOL TdiTcpConnect(HANDLE hDevice,const PCHAR pIpAddres,USHORT uPort); TdiTcpConnect用于与服务器建链,pIpAddres为服务器IP地址,uPort为服务器端口地址。 hDevice为TdiTcpOpen返回的句柄 pIpAddres为IP地址,如”10.0.0.20” uPort为端口地址 BOOL TdiTcpSend(HANDLE hDevice,PVOID pBuff,ULONG nLen,PULONG pRtn); TdiTcpSend用于给服务器发送数据. hDevice为TdiTcpOpen返回的句柄 pBuff接向发送数据的指针 nLen发送数据长度 pRtn发送成功长度 BOOL TdiTcpRcv(HANDLE hDevice,PVOID pBuff,ULONG nLen,PULONG pRtn); TdiTcpRcv用于从服务器接收数据 hDevice为TdiTcpOpen返回的句柄 pBuff接收数据缓冲区 nLen接收数据缓冲区长度 pRtn实际接收数据长度指针 BOOL TdiTcpSetRcvTimeOut(HANDLE hDevice,ULONG ulSecond); TdiTcpSetRcvTimeOut用于设置接收数据超时时间,默认为3秒。 hDevice为TdiTcpOpen返回的句柄 ulSecond为超时时间 2.下位机 下位机包括D1603.h D1603.cpp和Tdifun.cpp TdiFun.h 2.1 关键数据结构 驱动与应用连接服务器结构体 typedef struct _CONNECT_STRUCT { ULONG ip; //服务器IP地址 USHORT port; //服务器端口 }CONNECT_STRUCT,*PCONNECT_STRUCT; //设备展结构体 typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pDeviceObject; //设备指针 UNICODE_STRING wstrDeviceName ; //设备名 UNICODE_STRING wstrSymbolicLinkName;//设备链接名 }DEVICE_EXTENSION,*PDEVICE_EXTENSION; 读数据链接 typedef struct _RCV_IPR_LIST { PIRP pIrp; //指向读IPR LIST_ENTRY ListEntry; //链表 }RCV_IPR_LIST,*PRCV_IPR_LIST; 当前链接上下文 typedef struct _SOCKET_CONTEXT { HANDLE TransportAddressHandle; //传输地址句柄 FILE_OBJECT* pTrasnportAddressFile;//传输地址指针 HANDLE ConnectionHandle;//连接地址句柄 FILE_OBJECT* pConnectionFile;//连接地址指针 LIST_ENTRY RcvHead; //接收IRP链表头 KEVENT event; //接收数据同步事件 ULONG uTimeOut; // 接收数据超时 }SOCKET_CONTEXT,*PSOCKET_CONTEXT; 2.2 外函数说明 驱动装载主入口函数 NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath); 驱动卸载函数 VOID D1603Unload(PDRIVER_OBJECT DriverObject); 默认IRP回调函数 NTSTATUS D1603Dispatch(PDEVICE_OBJECT DeviceObject,PIRP Irp); TdiTcpOpen对应的IPR函数 NTSTATUS D1603Create(PDEVICE_OBJECT

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值