学习笔记
1、网络服务安全审计背景
在计算机网路中,网络服务是运行在应用层的应用软件,通过C/S或p2p架构来提供data storage、manipulation、presentation、communication、or other capability。例如:
- 移动设备的管理
- 从IoT设备接收控制命令
- P2P网络中的文件传输、通话等
- CDN网络中的文件、媒体共享等
- …….
这些网络服务,在wifi下可以访问,在蜂窝网络下也可以访问。调查发现在蜂窝网络下50%的运营商不阻止服务网络下面的设备互相ping。在这种情况下,如果这些网络存在漏洞,那么攻击者就可以扫描网络,使用端口、banner等内容对服务进行识别,进而对蜂窝网络下有漏洞的网络服务发起远程0点击攻击。
蜂窝网络下,有大量针对安卓移动应用网络服务的攻击,攻击者利用这些漏洞获取受害者的隐私数据,进而对受害者进行勒索。
2、网络服务测量方法
首先基于对调用栈的分析提取系统网络服务的特征和第三方网络服务的特征,进行大规模的查询进行测量系统网络服务和第三方网络服务在海量iOS移动应用中的现状。
iOS网络服务特征的提取是基于对调用栈的分析来完成的:
- 根据TCP/IP编程模型可知,构建一个网络服务需要三个步骤分别是生成Socket->绑定到端口->监听连接。通过对第二个步骤绑定到端口bind()这个函数进行拦截,获取移动应用构建网络服务时的调用栈。
- 接下来将调用栈映射到应用程序的代码,通过调用栈找到指向应用代码的指针,通过应用代码提取到这些系统网络服务API
很多情况下,应用开发者不知道自己在提供网络服务,主要是因为他们继承了许多第三方库提供了网络服务,因此还需要对第三方网络服务库进行测量,首先我们并不知道哪些第三方库提供了网络服务,因此首先要识别第三方网络服务库:
- 第三方网络服务库识别基于这样一个假设:如果两个应用的网络服务是由同样一个第三方库来实现的,那他们的调用栈是相似的。因此可以将这应用的调用栈提取出来,对调用栈对应代码里的字符串提取出来进行相似度分析。
- 由于调用栈中会混有第三方库代码和开发者代码,导致相似度不会很高。为了强调第三方库的比重,此时我们将调用栈栈顶的字符串给一个较高的权重,给栈底的字符串一个较低的权重。实际操作中,我们通过把字符串复制n份来体现权重大小,再进行字符串相似度比例的计算。加权的平均距离可以提高第三方库的相似度,而对不同的第三方库几乎没有影响。
3、网络服务安全审计
安全审计主要分为动态审计、静态审计、人工确认三个部分:
- 动态分析主要用来过滤出提供网络服务的应用
- 判断该网络服务是本机可访问的还是局域网可访问的,对于回环地址上的网络服务我们认为该网络服务是安全的,因为iOS后台工作时间很短,因此很难对这类网络服务进行攻击,这一点与安卓有很大不同。统计数据显示8.69%的网络服务在启动时就对局域网内提供网络服务。
- 然后对这些向局域网提供网络服务的应用使用开销较大的静态分析,对这些网络服务进行分析
- 通过迭代解码的方式,将机器指令转化为LLVM IR,并构建简单的控制流
- 在可执行程序中形参信息并不明显,这是由arm v8的特点导致的,因此需要对形参进行恢复。对于形参的恢复采用了启发式的方法,形参的恢复包括寄存器形参和栈形参两部分。对于寄存器形参的恢复方法是对于任意从位置L读取值这个语句,从入口到该语句的控制流图中不存在对该值的写入操作,该变量的地址被认为存在于寄存器中的形参。栈形参的恢复,使用了控制流图中的节点支配关系和别名关系等模型进行恢复。
- 解码过程实际上是对指令进行翻译的过程,它对存储空间的消耗与指令的数量成正比,一般应用的指令数量都达到千万级,降低需要翻译语句的数量则成为解码过程的关键。对指令进行分类,分为语义无关指令和语义相关指令。对指令采用指令存储按需分配等方式优化存储。
- 指针分析,使用了变量替换、强连通分量、按需进行的指向分析、局部离线指向分析等方法。
4、可能存在的App网络安全问题
- 允许IoT设备连接且缺乏访问控制
- 作为指令服务器,根据客户端的请求执行命令
- 作为文件服务器分享文件
- 作为CDN节点和其他设备分发视频
- ……