【论文精读】Understanding Open Ports in Android Applications

每周读一篇论文,对应PPT可以私聊我要

论文名称:Understanding Open Ports in Android Applications: Discovery, Diagnosis, and Security Assessment

目录

Overview

Professional term

Thesaurus

Overview

由于移动设备的地址不可路由,缺乏CPU和带宽资源,通常不适合提供网络服务,人们可能会认为移动应用程序不适合托管开放端口。 然而,事实情况并非如此,这些开放的端口容易受到各种攻击。本文针对安卓开放端口提出一套分析检测方法,第一次采用众包方法对开放端口进行连续的监测,之后采用静态分析的方法对发现的开放端口进行代码级的信息收集和漏洞挖掘,之后从三个方面做安全评估。

本文所说的open port开放端口是指被绑定到任何合法IP地址并配置为接受数据包的TCP或UDP端口。 合法IP地址包括公共、私有、本机所有ip地址(0.0.0.0),以及环回IP地址,本地开放端口则是指被绑定到本地回环地址的端口,这些地址只有在同设备上才可能被攻击。 文中所研究的端口是指用于TCP或UDP数据报传输的套接字端口,而不包含NFC、蓝牙、进程间通信套接字

文章考虑的威胁模型有三方面,本地的、远程的和web端。本地威胁指安卓有恶意app或使用了恶意SDK,他们通过开放端口进行恶意行为。远程威胁指在相同wifi环境或移动网络环境下,同一网络中的其他设备针对开放端口发起的攻击。Web端的攻击指通过恶意的js代码发起的恶意行为,但这种威胁只能针对特定的端口,因为JS只能发起http请求。

有了这些相关概念知识后,我们分模块一步一步来看下本文的相关工作和发现有哪些

首先是数据收集,本文采用了众包的方式,Crowdsourcing这是我第一次遇到这个词,刚开始并不理解是什么意思,继续阅读文章后知道了本文提到的众包的方式是指,作者开发出了一个小app,发布在谷歌商店,下载的用户可以参与到项目数据收集当中,app运行在手机上,定时获取开放端口信息,包括端口的ip、端口号、时间戳、协议以及被哪个程序包使用。使用众包的方式有四个优点,我的理解主要是因为众包方式每个用户都是真实环境下的真实操作数据,首先可以避免复杂的静态分析,其次也可以保证获取到的数据都是真实可靠的不会出现假阳性。但这里获取到的端口也不能直接和相应应用绑定,因为应用除了会使用固定端口号之外,也会有很多随机使用的端口号。

刚才讲到的是在用户手机上安装的数据收集模块,在服务端也有着对数据处理的部分,在服务器端主要是将获取到的数据通过聚类的方法,确定应用与端口号之间的关系。第一步首先根据IP、协议、端口号归类,第二步根据相应的事件进行聚类,将其中出现概率多于80%的端口定义为固定端口,50%~80%之间的端口号将会在第三步中通过启发式聚类方式进行划分, 这里的启发式方式我简单介绍一下:我们都知道在端口号中有部分是常识性的随机分配端口号范围(32,768到61,000),这之间的端口号称为随机端口号,其余的为“固定”端口号。 对于每一组划分出的数据,计算这两个范围内端口号的个数,并分别用NR和NF表示。有以下三个启发式:

  • 所有端口都在随机范围内(NR>0和NF=0)。 将它们标记为一个随机端口,基于保守原则,可以容忍将固定端口错误地分类为随机端口,但不能相反。
  • 端口位于两个范围内(NR>0和NF>0)。 首先将随机范围内的所有端口视为呈现一个随机端口。 如果NR明显大于NF(例如10倍),而NF相对较小(例如小于3),将固定范围内的端口标记为固定端口。
  • 所有端口都在固定范围内(NR=0,NF>0)。 如果nf不小(例如大于3),保守地只输出一个随机端口; 否则,将它们视为固定端口。

众包分析的结果可以主要概括为以下几点:首先,开放端口现象在app当中很常见,其次,可以通过静态分析得知很多的开放端口是无用的,第三点是除了安装的app外,系统应用也存在着很多的开放端口现象。

接下来是静态分析处理部分,文章想要使用静态分析处理,了解每个端口的使用情况,这里需要注意的是,和之前的工作不同本文的重点不是在发现端口调用,而是在分析其回调点及安全性。其目的主要有两方面:一,判断端口是否被使用;二,确定调用链上是否有第三方SDK,因为第三方SDK的使用常常会引入很多开放的端口,从而带来安全问题。OPTool基于反向切片图构建,能够从端口api初始化开始反向查找在哪里被调用,确定相应函数功能及参数后再进一步正向分析查找,最终确定并移除没有被使用的端口,在这一过程中也同时解决因代码混淆造成的第三方SDK不明确的问题。

第三块是对开放端口的安全分析,首先是脆弱性分析部分

文章针对脆弱性分析划分了五个模式,图中的五种漏洞模式, 前两个已经有所研究,第三个是传统安卓应用安全研究中提到的崩溃漏洞的新变种,最后两个是本文基于开放端口提出的。我对第一个模式的理解,有些端口对身份没有验证或验证措施有所不足,因为开放端口的主要目的也是为了传输数据,如果没有身份认证或采用弱身份认证就可能导致未经授权访问隐私信息。第二个模式可以理解为命令执行漏洞,有些开放端口允许客户端应用通过端口执行特定的系统命令,如关机命令,也有些端口作为调试端口供开发人员动态调试,这些端口都是危险的,可能会导致隐私信息泄露,在百度SDK中就出现有此类问题。第三个模式是服务崩溃模式,开放端口常常被用作不同应用或不同用户间通信的接口,通过构造非法数据便可以使用户正在使用的正常应用崩溃。第四个模式直译过来是隐形的数据膨胀,通过文章内容可以大概知道,指的是数据流量的恶意伪造,导致数据产生大量无用流量,比如在使用脸书的过程中,后台一个广告应用便可以通过端口发送超大文件,这一过程对用户来说是透明的看不到的,但却会严重影响用户利益。第五个模式是不安全的数据分析接口,有些接口会获取一些如位置信息、标识信息的数据进行分析,文中举出的一个例子便是:在浏览器访问一个web网站时,会由js代码访问本地app开放端口,app得到请求之后会执行相应的系统命令,并将信息返回。这样来看的话,本地的任何应用都可以构造相应的HTTP请求,访问对应端口,从而获取到隐私数据。

除了脆弱性分析,也有着针对端口的拒绝服务攻击,手机设备和服务器dos攻击的特点不同,服务器端dos攻击可能需要许多的主机,而手机由于性能局限性,可能仅需要一台电脑便可以发起攻击,而且手机dos攻击主要是在同一网络下进行的拒绝服务攻击,可以通过图示看到应用的正常服务功能随着dos攻击的时间而不断下降。文章发现在移动网络环境下,Dos攻击的效果较弱,这主要是因为移动网络的上行流量有限,但这一威胁可能会随着5G时代的到来而被加大。

因为很多攻击行为能够发起攻击的前提是可达性,所以文章在第三部分便衡量了相同网络环境下的设备间连接是否被允许,测试包括ping、tcp、udp,如果构造的tcp包得到相应端口的正常相应,则证明可以建立TCP或UDP连接。文章发现近50%的移动网络允许设备相互ping,WIFI网络环境下的结果更差,WiFi网络普遍支持互联,在公共wifi下的设备间连接将会助长远程开放端口攻击行为。初次之外,文章在23个网络环境中发现,他们提供公网地址,这将会导致其中的设备在网络上可被搜索,这一行为是十分危险的。

文章的最后针对app开发者、SDK开发者、系统厂商、网络运营商提出了一些建议,希望他们能够关闭不必要的端口,并限制设备间连接,以此提高安全性。

Professional term

Thesaurus

  • pervasiveness(无处不在的):With the help of NetMon, we manage to quantify the pervasiveness of open ports in a controlled set of the top 3,216 apps from Google Play
  • issue(发):JavaScript and WebSocket can issue only HTTP packets(发包)
  • Before moving to the technical details, it is worth highlighting the overall challenges in our crowdsourcing approach
  • The development of NetMon requires us to handle many product-level issues for a long-term and user-friendly deployment, let alone we are the first to explore on-device crowdsourcing for monitoring other open-port apps in real user devices.
  • pseudo(假的、伪的):Each file contains a list of current socket entries, including both client and server sockets.
  • heuristics(启发(法)):Clustering by three heuristics according to the port distribution 基于端口的启发式聚类
  • vendor(商贩、厂商)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Godams

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值