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

麻省理工学院。 讲座课程#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安全性。 您可以将其视为主要设计时考虑安全性的系统的有趣示例。 与到目前为止我们检查过的许多系统(例如Unix或Web浏览器)不同,在大多数情况下,安全性是在系统创建后“拧紧”并且其设计没有针对这些问题的,这很可能与Android开发人员最初不同。担心特定的攻击类别和应用程序构造。



他们提出了一种更好的方式来构建Android应用程序,这将使我们能够更好地实施安全策略。 最酷的是,这是一个使用相当广泛的系统,不同于一些只能提供新架构的研究论文,该系统实际上是在实践中使用的,并且越来越多的设备使用Android OS。

今天我们将讨论一些事情是如何解决或失败的。 我们将考虑他们认为设计的哪些部分很重要,错过了哪些部分以及在实践中会得到什么结果。 这很有趣。 从某种意义上说,开发人员使用了我们所讨论的现有系统,因此Android是基于UNIX构建的,实际上,只有Linux内核才能在整个手机上运行。

因此,它们以许多方式使用您在实验2中记得的一些熟悉的机制,其中使用了用户标识符和Unix组以及其他东西来将应用程序彼此分离。 但是对于Android,与典型的Linux系统相比,它们具有完全不同的设置用户ID和文件权限的方式。

让我们开始讨论这里的威胁级别是什么? 这些家伙在电话上打扰了什么? 这是怎么回事 他们正试图保护自己免受什么伤害? 移动设备中的威胁模型是什么?



学生:可能有害的应用程序?

教授:是的,他们担心可以在手机上安装的应用程序可能是恶意的。 我认为,坦率地说,有一些恶意应用程序旨在控制您或窃取您的个人数据。 因此,您应该担心自己的数据以及那些花钱的事情-SMS消息,电话,Internet连接等等。

因此,在右边是您要在手机上保护的东西,在左边是可以使它们以不同方式工作的东西。 由于存在恶意应用程序,因此Android家伙不希望用户能够安装Google从未听说过的开发人员编写的应用程序。 另外,这样的应用程序可能是有害的,不是因为开发人员如此想要,而是因为他只是忘记做某事。 最好是帮助这些人创建安全的应用程序,因为应用程序开发人员通常不是漏洞领域的专家,攻击者随后可以在其应用程序中使用这些漏洞。



由于Android普及,因此我们可以查看漏洞报告。 有一个CVE数据库可以对操作系统中的许多漏洞进行分类,这实际上很有趣。 当然,那里有Android错误消息,您在讲座中遇到了许多错误消息。 在Android的某些部分中仍然可能发生缓冲区溢出,默认密码系统的选择不多,人们忘记了初始化随机数生成器并创建可预测的密钥。 这一切仍在发生,因为该软件对于任何已知问题都不安全。

有趣的是,这些问题似乎是孤立的,并且不时出现。 基本上,可以消除它们,并且在纠正这些错误之后,系统仍然非常安全。 因此,在许多方面,Android设计都可以很好地运行。 因此,稍后我们将更详细地研究设计的哪些部分效果更好,哪些部分效果更差。 但是总的来说,这是一个经过深思熟虑的软件解决方案,或者至少比您到目前为止所看到的桌面Unix应用程序要深思熟虑。

因此,找出如何保护数据和各种服务(可能使您从恶意应用程序中赚钱)的一种方法是,首先了解Android系统的应用程序的外观。 然后,我们将讨论如何在此应用程序中配置和应用各种权限。 Android应用程序与迄今为止在台式机应用程序或Internet应用程序中所看到的完全不同。

Android应用程序不是将代码的不可分割部分与开始执行的主要功能组成,而是更具模块化。 在使用Android的情况下,您可以将一个应用程序显示为一组组件。 讲座文章描述了Android框架提供给开发人员的4种类型的组件。 第一个组件是活动或活动。 这是代表用户界面的东西,它允许用户与应用程序进行交互,向他显示信息并从他那里接收击键等等。

从安全的角度来看,活动具有有趣的属性-用户输入一次只能减少一个动作。 Android框架实际上保证一次只能进行一种类型的活动,也就是说,如果您运行银行应用程序,则没有应用程序会在后台工作以通过触摸点击来拦截银行应用程序的PIN码。 因此,该框架提供了有关用户输入的某些安全功能的使用。 因此,活动是用户界面的组成部分。

其他三种类型的组件可帮助应用程序逻辑与其他组件进行交互。 因此,第二个组件称为服务或服务。 这些事情在后台运行。 例如,您可能具有跟踪您的位置的服务,就像这些人在文章中描述的应用程序一样。 您可能具有在后台从网络检索信息的服务,依此类推。
第三个组件是内容提供者的内容提供者。 它可以表示为一个SQL数据库,您可以在其中定义带有模式的多个表,依此类推。 您可以使用此应用程序中存储的所有数据访问SQL查询。 该组件使您可以控制对数据库的访问,说明允许谁访问数据库。
在“ Android”中,存在其他系统中没有的其他异常。 这是第四部分-广播接收器或广播接收器。 它用于接收来自系统其他部分的消息。 因此,我们将讨论应用程序如何根据消息进行交互。



因此,这是关于什么是Android应用程序的非常合乎逻辑的想法。 但实际上,所有这些仅仅是开发人员编写的Java类或Java代码。

您仅为活动,服务,广播接收者和内容提供者实现了一个特定的标准接口,很明显,这只是Java代码。 而且放置在矩形中的所有组件都只是在您的手机上运行的Java运行时,而只是在手机上运行的单个Linux内核进程。 所有这些组件都是在Java运行时过程中运行的不同类或代码段。 这是如何将其简化为传统的过程,您可以更容易地理解的过程。

与应用程序交互的另一件事称为清单。 所有组件的代码都是由应用程序开发人员编写或编译的,但是除此之外,系统中的清单也位于应用程序组件之外。 它是描述所有这些组件以及系统其他部分应如何与该应用程序的组件交互的文本或XML文件。



特别是,此宣言谈到了所谓的Lables标签,我们将在第二部分中讨论这些标签,这些标签根据允许的用途确定该应用程序的特权,并确定其他人可以与该应用程序的各个组件进行交互的限制应用程序。 您想问一下它是如何工作的吗?

学生:标签上是否定义了“此应用程序无法拨打电话”或“此应用程序可以发送消息”的标签?

教授:是的,这些标记确定该应用程序是否可以拨打电话,发送短信或使用Internet。 标签有两种,我将在这里绘制它们。 每个应用程序都有一个标签列表,描述应用程序具有的权限。 这类似于拨打电话号码,启用Internet连接等权限。 稍后我将告诉您它们如何工作。

因此,这些是应用程序所具有的特权。 此外,您还可以将标签附加到各个组件上,它们具有不同的含义-这些是特定应用程序的特权。 如果您的组件带有标签,则要与之交互,任何其他组件也必须具有相应的标签。
例如,您可能具有一个具有“查看朋友”特权的标签,可用于查看朋友的位置。 这是应用程序可能具有的特权。 但是要确保获得此特权,您必须将此标签附加到特定的组件,在这种情况下,附加到Content Provider组件,并附加到其数据库,该数据库中包含有关您朋友位置的信息。 现在,任何想要访问此数据库的人都必须在其特权中具有相同的标签。



这是设置权限的方式。 您可以将其视为Unix上的用户ID或组ID,但可以使它们更加灵活的任意字符串除外。 也就是说,您永远不会用完这些ID,也不必担心有人会丢失它们。

事实证明,Android开发人员在确定这些标签的范围时并不特别小心。 您可以有两个选择为它们加上标签的应用程序。 因此,这些标签由应用程序部分定义。 假设您的手机上有两个应用程序-Facebook和Google+,并且它们都声明他们想要社交网络上“查看朋友”功能的新权限行。 您说:“没问题,这是同一行。”

当然,实际上,“标签”列表的这一行比我绘制的要长得多。 有一个Java应用程序样式的域,它定义标签的小写字母。 例如,我绘制的DIALPERM呼叫权限类似于com.google.android.dialperm。 但粗略地说,这些是权限中显示的行。 因此,如果您的应用程序意图良好,它们将不会与这些权限行冲突。

但是事实证明,不幸的是,在Android操作系统中,没有任何东西会迫使应用程序出现这种行为,这会带来潜在的问题。 我不知道为什么他们不固定。 如果我们有两个与标签名称冲突的应用程序,将会看到会发生什么。

因此,这是应用程序的外观:它是构成组件的Java程序集,描述应用程序权限的清单以及对所有组件的必要限制。 应用程序之间的交互是使用Android开发人员发明的东西进行的,称为Intent-Intention。 意图是一种结构化的消息,稍后我们将看到它的用法。 现在,我要说的是Intent有三个关键要素。 当然,该意图包含其他字段,但是最重要的是要向其发送消息的Component组件的名称。 接下来是组件需要执行的Action操作以及要发送给其他组件的MIME类型的数据数据。



作为一个抽象示例,您可以想象该组件是com.android.dialer / Dial-这是在Android中指示组件名称的方式,这是一种Java域名。 因此,com.android.dialer是您要向其发送意图的应用程序整体的名称,并通过斜线写出向其发送此消息的目标应用程序组件的名称-/ Dial。 这样,您可以命名消息所针对的特定组件。 动作代表一组特定的动作,看起来像android.intend.Dial。

如果应用程序希望电话拨号程序拨打特定号码,则此字符串为应用程序放入“操作”操作字段中的预定义字符串。 例如,如果要在电话上查看某种文档,则在“操作”字段中插入一个操作行,如android.intend.ViewDoc。 这告诉接收组件您只想在拨打被叫联系人之前先查看其电话号码。
最后,数据数据基本上是一个任意URL或您要随此消息发送的数据的URL。 它可以是您要查看或打开的电话号码或HTTP URL,也可以是系统中URL指示的任何其他应用程序。



这是您使用所有这些应用程序下方的Android运行时本身发送通过系统发送的消息的方式。 因此,Android运行时可以看作是应用程序和内核之间的交叉。 这并非完全正确,但是我们将尝试绘制某种图片以阐明此事物的架构。

假设我们有一个可以在Android上运行的应用程序,另一个可以运行。 这些矩形分别是App1和App 2,每个矩形代表顶部图片中显示的内容-组件,清单,标签。



这些都是在Linux内核之上运行的进程,这在应用程序之间提供了一定程度的隔离。 讲座文章中也有所谓的“参考监视器”。 他将调解不同应用程序之间的所有故意交互。 因此,如果附录1要向附录2发送消息,它将首先向链接监视器发送消息。
因此,将所有意图意图发送到Android的方式是创建这些意图消息之一,并将其​​通过某个通道路由到此引用监视器。



Android系统拥有自己的用于发送此类意图的渠道,称为Binder或Bundle。 根据协议,每个Android应用程序都将打开Binder-连接到链接监视器,以便它可以接收来自此应用程序的意图以及向该应用程序发送消息。

在我们的情况下,如果附录1将意图2的意图写到链接监视器,则链接监视器将首先找出意图的去向,然后将其传送给附录2。然后,附录2可能触发某些操作,接收消息或执行请求。适用于应用程序的SQL 1。



: – Reference Monitor?

: , — , . , , , RM, ? ? , 1. ?

: , - , , .

: , . , , , . , , . . , 2?

: , PKI. .

: , , . , , , , RM , App 1. PKI . . , , , . , , . , ?

: , , .

: . , «» , . , , , . , Labels. ?

: , , . , , , , « ».

: , , . , RM , . , - . .

, 2 , . – , . , , , . .

, . , . — , , . , , , . , , - .

Android , , , , . , , , «» . , Google Voice, VoIP, Skype , . : « , - ». , , — , PDF JPEG .



. , PDF , , . RM .

: « , , , , ». , , .

: ?

: . , , . , , . , , .

Android RPC. , , Bind intent, , : « ». , , .



, - , , Bind intent.

: , ?

: , 2. , , 2. , - .

, 2 bind, - , . , , .



, , , , Service, . , , .
: , , . , .

: , , , . . , bind. RPC , .

, . , , RM . , RPC , , , , , RPC .

, , RPC, RPC, RPC .

27:40

麻省理工学院的课程“计算机系统安全”。 20: « », 2


.

, . ? ? , 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 Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 $249 ! . c Dell R730xd 5-2650 v4 9000 ?

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


All Articles