帝游网提供最新手游APP下载和游戏攻略!

局域网聊天软件攻防大战局域网聊天的软件

发布时间:2024-07-10浏览:8

0×00 前言

笔者发现很多甲方公司的办公网络依赖多种局域网聊天软件进行办公通讯,而这些软件也存在着各种安全隐患。本文将向大家介绍如何利用协议分析技术还原某局域网聊天软件的通讯协议并对其进行简单攻击。

0×01 协议分析

网络协议是指计算机网络中通信双方必须遵守的一组约定,这些约定包括数据传输格式、顺序等,最终体现在网络上传输的数据包格式上,只有双方都遵守相关约定,才能保证通信的正常进行。

人类社会使用自然语言进行交流,而计算机使用网络协议进行交流。只有使用相同的语言或协议才能进行有效的沟通。两者有很多相似之处,包括语法、语义、时序三大要素。

1.语法:数据或命令控制信息在传输过程中的结构或格式;

2、语义:约定的格式中每一段数据的具体含义,比如在信息中标明是什么类型的控制信息,需要完成什么任务,需要做出什么样的响应等等。

3.时间序列:Time series。在约定的语法和语义框架下,相关数据需要按照一定的时间顺序,才能形成连贯完整的沟通数据。

协议也可以说是计算机接入网络所遵循的一定的技术规范,包括硬件、软件、端口等技术规范,除此之外,协议还要遵守以下几点:

1. 协议中的每个人都充分了解该协议,并知道需要完成的所有步骤;

2.协议中所有各方必须同意并遵守;

3. 协议的每个步骤必须定义清晰、无歧义且不会引起误解。

为了增强兼容性和迭代性能,协议采用分层定义的方式进行管理。设计者将网络通讯过程分为多个层次,每个层次都有自己的协议,某一层协议的改变不会影响其他层的协议。国际标准化组织(ISO)制定了ISO/OSI参考模型,对协议层的划分进行了规范。该模型根据网络功能制定了7层网络协议结构,即物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。在日常生活中,人们更喜欢使用TCP/IP五层网络模型,它更符合网络数据包的思想,也更容易理解。

协议分析是通过解释、比较、判断通信数据包来确定网络协议格式和含义的过程,是网络分析的一部分。协议分析多用于黑盒场景,在源代码或工作机制未知的情况下,可以通过抓取数据包的方式进行协议分析,确定通信双方的具体协议。例如木马分析、流量检测等都需要进行协议分析。

书本上的知识总是浅薄的,必须实践才能深谙其道。接下来我们就用“信鸽”来实践一下,看看如何对一个软件进行协议分析。

0×02 环境准备

Q:为什么要搭建实验环境?

A:在生产环境中进行各种测试实验是大忌。一是不可预知的风险可能威胁生产环境的稳定运行;二是生产环境的背景流量比较嘈杂,不利于我们快速定位流量进行协议分析。在相对“纯净”的实验环境中进行协议分析,可以大大提高分析效率。

Q:如何搭建“纯净”的实验环境?

A:在真实的生产环境中,运行的软件种类繁多,各种通信流量很快就会让你不堪重负。为了尽可能避免干扰,我们需要搭建一个实验环境,而这个环境最理想的情况是只产生我们需要的流量,也就是被分析目标产生的流量。但这显然是不可能的,毕竟操作系统本身所包含的服务程序都会产生后台流量。

第一步:搭建基础网络环境。

使用VM虚拟机搭建虚拟网络环境,网络中机器配置如下

ps:在分析协议的时候,为了让信息更有可比性,更容易匹配到机器,配置信息的时候最好有规律。

第二步:下载目标软件,安装后配置相关信息。

步骤3:检查网络连通性,查看目标软件是否可以正常使用。

0×03 语法分析

学习一门语言之前,首先要了解和掌握基本的语法。协议分析还需要判断数据包的基本格式,如果有源码或者帮助文档,比较容易获得相关格式信息,如果没有这些辅助信息,分析人员就需要根据经验和数据来进行对比和判断。

经过抓取数据包并对比数据发现,飞歌的基本通信协议为UDP,端口2425,经过多次对比分析,其格式信息如下图所示。

从数据包中可以看出,飞哥的通讯协议由6部分组成,以冒号(:)分隔,附加信息以空格作为分隔符。内容是对应命令的各种参数。例如上图中的附加信息显示了发送方的基本信息(MAC地址、IP地址、用户名、邮箱地址、群组等)。

0×04 语义与时序分析

了解了协议的基本格式之后,我们就可以进行语义和时序的分析了。我们同时分析语义和时序,因为时序可以帮助分析人员确定语义。就像自然语言一样,不同的句子序列会产生不同的场景。我们根据飞歌程序的启动顺序进行操作,生成每个功能对应的数据包,并进行语义分析。

1. 程序启动

打开Wireshark,选择对应网卡拦截数据包,双击运行“飞鸽快门”。

程序运行时会以广播的形式向网段内发送两个消息,内容如下。

这两条消息的命令号均为1025(0x401),区别在于描述版本号的字段,前者为1.feige.1,后者为5.1.161212。​​初步判断,两种形式的描述都是为了兼容性而采用的。

2. 主机检测

程序在发送广播报文后,对该网段进行ARP扫描,确定该网段内在线的主机。

3. 网上举报

当使用ARP探测全网时,在线的主机会用ARP进行响应,如下图,192.168.1.100主机响应。然后飞歌会给在线的主机发送一个在线信息,如下图所示。

该上线消息命令号为3073(0xC01),内容主要包括本机的机器信息和飞鸽账号的基本信息。

4. 心跳包

通讯软件为了保持在线状态,并及时上报在线信息,通常会使用心跳包来上报状态。如下图所示,两台主机192.168.1.100和192.168.1.200之间会互相发送心跳包,中间还会有ARP探测包。

发送心跳包后,对方会回复,也会上报自己的在线信息,心跳包命令号为1025(0x401),回复包命令号为3。

进一步观察心跳包周期,输入下图所示的过滤参数,可以清楚的看到周期为60秒(一分钟)。

经过比对,飞哥的在线状态数字位置如下图所示,其含义分别为:10000001(在线)、10000002(忙碌)、10000003(左)。

5. 离线

当用户关闭 Feige 时,Feige 会通知其他在线用户其将下线。命令编号为 2。

6. 抖动窗口

为了提醒对方查看消息,聊天软件通常都有窗口摇动功能,协议如下图所示,命令号229(0xE5)。

7. 发送消息

当进行文本传输时,接收方会反馈回执,如下图所示。192.168.1.200发送一条文本消息“你好,我是user200”,命令号为288(0x120),此消息的数据包号为163932。192.168.1.100机器收到该消息后,反馈回执,命令号为33(0x21),回执的附加信息中包含了收到信息的数据包号,也就是163932。

8.数据包号认证

从飞歌的协议来看,没有严格的认证过程,所有信息都是明文的。但为了对传输的信息进行基本的管理,飞歌程序启动后会初始化一个数据包编号,每发送一条消息,该编号加1。而当收到有重复编号的消息时,就会自动忽略,不做任何回应。

0×05 伪造与篡改

在基本确认了协议之后,我们可以发现Feige协议存在很多弱点,很容易受到攻击。本节将简单演示几种攻击场景。

攻击一:伪造

Python语法简单,功能强大,深受大家喜爱。本次攻击场景我们选择了Python语言。为了保证消息数据包编号的唯一性,我们使用时间戳进行编号。

1. 假发射

关闭192.168.1.200机器上的FeiGe程序,使用下面的py脚本构造user200的上网数据包,发送给192.168.1.100(该机器运行的是FeiGe,用户名为user100)。

导入套接字导入时间port = 2425host = "192.168.1.100"s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(('', 2425))index = str(int(time.time()))

strCheatOnline = "5.1.161212:"+index+":管理员:PC200:1025:用户200\x00WorkGroup200\x0000-01-00-00-00-02\x00\x0020000\\x00\x0046\x00192.168.1.200\x00\x0031\x0010000001\x00\x00PC200"s.sendto(strCheatOnline,(host,port))

注意:附加消息中的分隔符不是空格,而是空字符(值0),因此用“\0×00”填充。

发送之后就可以看到user100的飞歌账号有在线提示了。

user200上线之后,user100会周期性的发送心跳包,从下图我们可以看到心跳包周期是60s(和上一节分析的心跳包一致),但是因为我们的上线包是伪造的,192.168.1.200机器上并没有运行飞鸽程序,所以无法接收并回复心跳包,所以会看到这台机器会自动反馈ICMP不可达消息。10分钟后,也就是发送了10个心跳包仍不可达时,user100就会将user200从在线列表中移除。

2. 假下线

首先正常启动双方的飞歌程序,双方会定期发送心跳包,我们使用py脚本将user200的离线包发送给user100,包内容如下:

strOffline = "5.1.161212:145692:Administrator:PC200:2:user200"

发送之后可以观察到user100的好友列表中的user200会下线,user100停止向user200发送心跳包;但是user200的飞哥还在运行,周期性的发送心跳包。等下一次心跳包发送之后,user200会重新出现在user100的好友列表中。如何彻底下线呢?我们可以模拟双方的下线包,互相发送,这样既可以将对方从双方的好友列表中移除,又可以避免心跳包重新上线。

3. 伪造电子邮件

根据协议格式,我们可以构造任意消息包发送,数据包内容如下:

strHello = "5.1.161212:145690:Administrator:PC200:288:hello"

消息发送之后,对方会收到一条内容为“hello”的消息。

攻击二:MITM(中间人攻击)

这里我们使用我之前一篇文章《WinPcap开发(三):欺骗与攻击》中提到的arpspoof进行中间人劫持,并在实验网络中添加一台中间人机器(192.168.1.150)。(ps:arpspoof只能替换TCP协议的内容,所以实验前要修改程序,使其适应所有协议)

1. 消息篡改

设置arpspoof的内容替换规则如下:

使用以下命令启动 arpspoof 程序:

arpspoof.exe 192.168.1.100 192.168.1.200 2425 0 1 /r 作业.txt

此时我们使用user200向user100发送一条消息:

user100端看到的内容如下:

2. 文件传输篡改

在user200上设置共享文件如下:

重置arpspoof的替换规则:

启动程序,在user100端下载共享文件,下载的内容如下:

0×06 安全建议

通过上面的实验我们可以看出,类似飞歌这样的协议存在很多漏洞,很容易受到攻击,这也给我们使用此类软件敲响了警钟。

1.加密

协议未加密,导致数据以明文形式传输。中间人获取足够多的数据后,通过对比明文就能很快还原出协议格式。如果采用加密协议,协议解析的成本会在一定程度上增加。

2. 身份验证

整个通讯网络是一个分布式网络,没有中心服务器节点,具有很强的健壮性,即整个网络不会因为服务器的瘫痪而中断。但是这种去中心化的网络存在身份认证的问题,即两个节点之间互相证明对方身份的合法性。这也导致消息的合法性难以验证,更容易受到劫持、篡改或伪造。

0×07 最后的话

本文简单介绍了网络协议分析的基础知识,以飞歌聊天软件为例,进一步分析其通信协议,并进行针对性攻击。实际网络应用中,大部分应用程序使用的协议都比较复杂,有加密解密、消息认证等安全机制,如果想进一步学习相关分析知识,可以结合资料对复杂的商用产品进行协议分析。

热点资讯