麻省理工学院的课程“计算机系统安全”。 讲座20:移动电话安全性,第3部分

麻省理工学院。 讲座课程#6.858。 “计算机系统的安全性。” Nikolai Zeldovich,James Mickens。 2014年


计算机系统安全是一门有关开发和实施安全计算机系统的课程。 讲座涵盖了威胁模型,危害安全性的攻击以及基于最新科学研究的安全技术。 主题包括操作系统(OS)安全性,功能,信息流管理,语言安全性,网络协议,硬件安全性和Web应用程序安全性。

第1课:“简介:威胁模型” 第1 部分 / 第2 部分 / 第3部分
第2课:“控制黑客攻击”, 第1 部分 / 第2 部分 / 第3部分
第3讲:“缓冲区溢出:漏洞利用和保护” 第1 部分 / 第2 部分 / 第3部分
讲座4:“特权分离”, 第1 部分 / 第2 部分 / 第3部分
讲座5:“安全系统从何而来?” 第1 部分 / 第2部分
讲座6:“机会” 第1 部分 / 第2 部分 / 第3部分
讲座7:“本地客户端沙箱” 第1 部分 / 第2 部分 / 第3部分
讲座8:“网络安全模型” 第1 部分 / 第2 部分 / 第3部分
讲座9:“ Web应用程序安全性” 第1 部分 / 第2 部分 / 第3部分
讲座10:“符号执行” 第1 部分 / 第2 部分 / 第3部分
第11课:“ Ur / Web编程语言” 第1 部分 / 第2 部分 / 第3部分
讲座12:网络安全性第1 部分 / 第2 部分 / 第3部分
讲座13:“网络协议” 第1 部分 / 第2 部分 / 第3部分
第14课:“ SSL和HTTPS” 第1 部分 / 第2 部分 / 第3部分
第15课:“医疗软件” 第1 部分 / 第2 部分 / 第3部分
第16课:“侧面通道攻击” 第1 部分 / 第2 部分 / 第3部分
讲座17:“用户身份验证” 第1 部分 / 第2 部分 / 第3部分
第18课:“私人浏览Internet” 第1 部分 / 第2 部分 / 第3部分
讲座19:“匿名网络” 第1 部分 / 第2 部分 / 第3部分
讲座20:“手机安全性” 第1 部分 / 第2 部分 / 第3部分

学生:现在,在许多应用程序中,无法删除权限。

教授:是的,在新版本的Android中不是,只有权限描述。 但是您可以使用Android权限管理器或Android权限管理器,它允许您查看每个应用程序的所有权限列表,并专门删除那些您认为不必要的权限。 但是我不知道这个东西在用户中是如何流行的。

学生:如果标签与应用程序所需的权限不匹配,这是否会导致严重的错误,还是一切都可以正常工作?

教授:我认为这取决于应用程序要做什么以及标签允许的内容。 例如,如果某个应用程序要发送Intent,而发送此Intent需要DIALPERM类型的某个标签,则它首先转到链接监视器,该监视器显示:“很遗憾,系统没有准备好接收消息的应用程序。” 为了响应此应用程序,它正在采取一些合理的步骤。



否则,例如在访问网络时。 如果您无权访问网络,并且打算打开套接字或发出命令以连接到IP地址,则内核将以EPERM消息(“不允许操作”)答复您,也就是说,您不能这样做。 谁知道在这种情况下应用程序将要做什么? 可能会以某种方式抛出空指针异常或执行类似操作。

一个反对这一观点的理由是,至少在最初,Android应用程序并不希望它们的某些调用失败,因为他们被告知清单是全部还是全部,即用户批准了清单。是否安装应用程序。 因此,应用程序开发人员可以正确地编写代码,如果拒绝访问,则会崩溃或发生意外情况。 也许通过剥夺应用程序所需的访问权限,您会因此引发操作失败。

假设您有一个需要访问摄像机的应用程序。 而且,如果您剥夺了他的访问权限,则图片模板将仅出现在智能手机屏幕上,否则应用程序将崩溃。 这不是很好。 可能有可能创建一个更复杂的系统,如果该系统被剥夺了使用相机的权限,那么该系统只会一直显示黑屏。 Android不会这样做,但是您可以想象可能发生这种情况的其他情况。

因此,我们检查了这些行在Android应用程序标签中的位置。 但是谁定义了这些线,它们从何处得到含义呢? 您可以在清单文件中列出所有类型的行,但是如何确定哪些行很重要,INTERNET或FRIENDVIEW行来自何处​​? 谁赋予他们系统中的意义?



我看你没主意。 我认为这些线都不应该是不可思议的或预先确定的。 几乎所有这些行基本上都是两个应用程序之间的协议,其中一个应用程序准备在某些Label行的保护下提供某些内容,而另一个应用程序则希望请求与该组件提供的应用程序进行通话的权限。

因此,这些标签通常由提供某些服务的应用程序定义。 如果您具有DIALPERM权限,则必须在应用程序中定义该权限,该应用程序定义了拨打电话号码的含义。 显然,在您的电话上拨打电话的应用程序定义了这条线路,并说,是的,此DIALPERM事物存在,并且我的组件将受到此保护。 然后,其他想要与调用应用程序进行交互的应用程序将能够为其自身请求此DIALPERM权限。

当然,有一些内置的东西,例如使用Internet的权限,摄像头等等。 但是您可以将它们视为Android运行时的源应用程序,后者负责提供对此资源的访问并定义了保护该资源的行。

这是什么意思? 除了在应用程序需要请求许可时由应用程序使用标签的事实之外,Android中的标签还有什么其他意义? 事实证明,有一些与标签相关联的东西。 除了字符串,标签还具有一些有趣的属性。 特别是在Android中,标签有3种类型。 第一个是常规权限,第二个是不安全权限,第三个是签名权限。



首先确定此许可权的应用程序将有机会选择标签的类型和所有其他字段,我们将在稍后讨论。 那么这些标签类型是什么呢? 为什么Android标签需要类型?

学生:它们是否向用户发出警告?

教授:完全正确。 那为什么不把所有标签都设为不安全类型呢? 这些类型的语义是什么? 简而言之,“危险”标签用于允许可能破坏某些内容的应用程序。 当应用程序请求访问不安全权限时,它会在安装应用程序时警告用户。 同时,用户应查看此消息并说:“是的,我准备对该新应用程序授予不安全的权限。” 如果应用程序请求通常类型的标签,则用户不会收到有关需要为此操作授予权限的消息。 如果所有应用程序都收到普通权限,这意味着什么? 为什么要使用常规类型标签?

Android中典型分辨率的一个示例是设置屏幕壁纸。 如果您有要安装墙纸的应用程序,作为应用程序开发人员,我可以在清单中指出我只想为您安装墙纸。 而且,如果单击安装,则不会发生任何有趣的事情,因为您无需授予此应用程序任何权限。

学生:但是这些权限通常需要您的确认,对吗? 如果应用程序要更改桌面墙纸,系统将询问您是否要更改墙纸。

教授:不。

学生:不?

教授:不,它只是更改墙纸,因为它只是对API调用的访问。 如果拥有此权限,则只需进行API调用即可。

学生:也许应用程序开发人员想确保用户不会意外地这样做?

教授:是的,我认为这是您可能需要这些权限的原因之一,是希望帮助开发人员避免错误。 如果您担心应用程序可能会意外地做错了某些事情,或者其中可能存在错误,那么您可能会或可能不会收到的一组权限的存在将减少滥用您的应用程序的可能性。 因此,如果您有不需要安装任何墙纸的无害应用程序,则无需征求任何许可,因为这对于安装了手机的用户来说是更好的选择。 在某种程度上,这是一种特权。

另一件事是,常规类型标签的存在使您可以从开发人员方面和用户方面执行某种审核。 如果您的手机每秒更改屏幕上的墙纸,那么您可以进入并查看哪个应用程序对此具有许可。 即使您不同意授予此类权限,您仍然可以去检查当前正在使用哪个应用程序来更改墙纸。

因此,这些通用权限似乎是一种很好的安全措施,或者在更大程度上是审核应用程序活动的好机会。 通常,此类标签不用于真正重要的事情,例如处理数据或访问耗资的服务。

标签的第三种类型是签名权限。 Android的一个有趣特性是,仅提供对使用与声明访问权限的应用程序具有相同数字签名的应用程序进行访问的功能。 演讲文章介绍了FRIENDVIEW的示例。 如果查看的朋友已经使用这种类型的标签定义了权限,则使用相同开发者密钥签名的应用程序将能够获得相同的权限。 这东西有什么意义? 为什么不只是将它们标记为不安全? 为什么我们需要第三种标签?

学生:开发人员可以更轻松地管理他们的应用程序吗?

教授:是的。 可能是该开发人员希望将其内部API与第三方程序隔离开来,但同时又希望将其自己的应用程序捆绑在一起以进行有效的交互。 假设地,Facebook的创建者可以编写多个应用程序。 他们可能有一个应用程序从Facebook服务器预加载内容,另一个应用程序混合了该内容,第三个应用程序跟踪您的位置,所有这些组件相互交互。 在这种情况下,他们可以使用签署的许可证。

以下是您不希望将此应用程序指定为不安全的原因之一。 如果您真的知道谁可以获得此许可,则您不希望用户干预。 由于总是可以通过强迫授予恶意应用程序来欺骗用户,因此最好完全不干扰为某些应用程序提供内部特权。 因此从这种意义上讲,最好使用签名权限。

标签还具有用户权限的描述。 这是此权限要求的描述。 当提示您安装新的应用程序时,将出现此描述。



因此,Android运行时将查看将要安装的应用程序清单中的所有标签行,并向用户显示所有这些标记行的描述,例如:“您将为该应用程序提供拨号特权,或者允许您代表发送短信”以此类推。

一个有趣的问题:如果恶意应用程序更改某些其他应用程序的标签会发生什么? 毕竟,这些标记只是自由格式的字符串。 因此,如果您是一个恶意应用程序,会说:“哦,我有这个新的大分辨率! 它叫做DIALPERM。 它没有不安全的标签,其描述也没有任何内容。 这很危险吗?

学生:它可能不会影响应用程序域名的结构。

教授:是的,可以希望这样做,但是不幸的是,这不是强制性的。 通常,所有权限字符串都应具有Java样式的域名,但是应用程序定义的标签与Java样式的应用程序自己的名称之间没有严格的关系。 没有强制性将Java样式的应用程序名称绑定到某些内容,因此我们没有机会确定在特定应用程序上签名的开发人员公钥是否与com.google.something或edu上的内容匹配。手套

Android有一个缺点,或者至少在我最近研究这个问题时存在。 因此,在定义标签时,原则是“谁先来”。 也就是说,在安装应用程序时,它定义了一个特定的标签,并且您可以决定标签的类型及其描述。 对于系统权限,这可能不是一个大问题,因为系统权限或嵌入式应用程序(例如拨号程序)是在最开始就定义的。 但是稍后安装的应用程序无法覆盖权限,因为这是由于框架所致。

问题是,如果先安装恶意应用程序,然后再安装一些重要的应用程序,则恶意应用程序可能会扭曲意图良好的应用程序以后使用的标签。 该演讲文章介绍了一种情况,攻击者迫使用户安装恶意应用程序,该应用程序将FRIENDVIEW应用程序的标签类型更改为普通类型,并带有诸如“根本没有任何趣味”的描述行。 稍后,当您安装FRIENDVIEW小程序时,它不再可以覆盖此标签,因为已经定义了该标签,现在用户将无法阻止其他应用程序使用好友查看权限。

学生:也许系统可以警告尝试更改分辨率?

教授:原则上说,框架可以做到这一点,但是当我尝试这样做时,没有发出任何消息。 如果安装的应用程序定义了已经定义的标签,则系统不执行任何操作,它只会忽略新的标签定义并使用旧的标签定义。 也许这就是问题所在,因此一切都可能出错。 至少,系统必须说:“我拒绝安装此应用程序,因为它具有已经存在的标签定义。”

学生: ...,并且属于另一个应用程序。

教授:是的,甚至可能属于另一个关键。 然后至少有可能修复所有问题。 我没有跟踪此问题,也许已经解决了。 无论如何,这都是一个有趣的问题,当您真的必须跟踪这些名称并找出谁拥有该名称并获得执行此类操作的权利时,这确实非常重要。

另一个有趣的Android问题与广播接收器或广播消息的接收器有关。 它创建了接收和响应来自其他应用程序的消息的功能,从而实现了在应用程序之间发送消息之类的功能。 首先,我必须描述这些消息如何与接收者交互。 广播接收器用于一个应用程序,它可以宣布系统中任何其他应用程序的一些事件。



众所周知,意图通常针对特定的组件,例如JPEG图像查看器。 但是,对于诸如系统加载或“附近的我的朋友”之类的事件,您可以向与其有关的每个应用程序进行公告。 这就是广播接收器的作用。

有两件事与您有关。 首先,对消息源进行身份验证,即,您想知道谁发送了此消息,以及是否可以信任它。 其次,您想控制此消息的发件人和收件人。

在我看来,Android开发人员没有正确实现这些功能。 无论如何,在Android的初始版本中,当您向系统的所有其他组件发送广播消息时,这些应用程序可能会或可能不支持此消息。 因此,如果您拥有Friends Viewer应用程序,它将在其Intent目的过滤器中使用适当的组件(例如Action或Date / MIME)来支持这些消息。 但是大多数应用程序始终可以支持系统中的所有广播事件,并且您可以看到电话上发生的一切或广播的一切。

因此,Android框架为应用程序添加了一个附加参数,以指示谁可以看到广播消息。



, , – , , . , , , , .

, , , , , , . Android, , , , .

, ? , « » , . , ? ?

: ? ?

: , . App 1 RM, , , App 2, , . , App 1 , ? Android ?

, . , , . , . ? , « »?

: , , ?
: . , — . , , « ».



Broadcast receiver, , , . , , , Label.

. Android , . « », . , . , , , .

RPC , RPC-, , . , .

: ?

: , , .

: , …

: , . – . . : « ».

: ?

: .

: , ?

: , , . . , , , . , — . , : « , », , , Dangerous Description.



, : „ , ». , , , , . , Android , .

, , Android. , , . , «», « ». , , .



, , . , , , , , . , Java. , , , , .

Android . - , , , , . «» , RPC . , .

, , . , Android , 5 6 . , , , - «». , , .

, Android , , Apple . , Apple iPhone , .

«», «», , , , , , , . , . , , Android, . , - .

, Android .


.

, . ? ? , 30% entry-level , : VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps $20 ? ( RAID1 RAID10, 24 40GB DDR4).

VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps , .

Dell R730xd 2 ? 2 x英特尔Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100电视,分别在荷兰和美国售价249美元阅读有关如何构建基础架构大厦的信息。使用Dell R730xd E5-2650 v4服务器的价格为9000欧元的精简课程

Source: https://habr.com/ru/post/zh-CN432620/


All Articles