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

麻省理工学院。 讲座课程#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应用程序开发了全新的模块化设计? 有桌面应用程序,有Web应用程序,为什么他们需要发明一种全新的编写软件的方式? 实际上,从某种意义上说,这使开发人员感到困惑。 因为,比如说,我习惯于用C编写带有主要功能的小程序,现在我看着它说:“这到底是什么? 我将如何处理所有这些? 我必须定义四种组件并发送意图,而不是使用C结构并在常规行中编写代码?”



那么,现有应用程序模型的优缺点是什么? 我们有桌面和Internet应用程序,为什么我们需要第三种类型的应用程序?
学生:但是模式已经完全改变了,对吧? 我认为您不应该像移动应用程序开发人员那样信任桌面应用程序的开发人员。 此外,与计算机应用程序的有经验的用户数量相比,您拥有更多的有经验的用户,并且他们想使用一大堆彼此隔离的应用程序。

教授:很有可能。 那么,您是否认为对于桌面应用程序,我们不应该过分信任开发人员?

学生:当然,因为总会有经验丰富的儿子或堂兄帮您解决计算机程序问题,但是电话的情况有所不同。

教授:当然,手机不需要堂兄来照顾它们真是太酷了。 但是从安全角度来看,计算机程序具有一个特性-在计算机上安装新应用程序可能是一个非常耗时的过程。 也许这并非完全正确,因为您始终可以单击可执行文件并开始安装,但是我认为人们不会定期安装桌面应用程序。 毕竟,通常,您具有一组固定的软件来运行。

从这个意义上讲,Web应用程序的显着特征是易于启动。 您只需要转到该站点,就无需执行任何操作,只需单击链接即可。现在,您已经在某个新应用程序的控制下进入了一个新站点。 因此,这是Web应用程序的一个很好的属性。



计算机应用程序的一个坏功能是缺乏应用程序隔离。 也许这是由于以下事实:安装此类应用程序时,您完全信任计算机上的所有内容。 实际上,在笔记本电脑上安装的应用程序与已经存在的任何其他程序或数据之间没有隔离,而对于Web应用程序,则存在某种合理的隔离。 只要您信任“相同来源策略”,您就可以安全。 因此,可以安全地访问任意网站并开始使用其应用程序。 如果此应用程序没有利用您浏览器中的漏洞,那么它将不会干扰在其他浏览器选项卡中打开的网站的操作。



Web应用程序似乎易于使用和隔离,因此似乎仍然处于更好的位置。 这些人为什么不使用Android网络应用程序?

学生: Web应用程序似乎包含一个操作系统,例如,有一个Firefox OS,它实际上是一个移动Internet OS。

教授:当然可以。 您声称这些家伙实际上是错的。 他们不应该创建新的Android操作系统,而只是为手机构建一个大型的Web浏览器。

学生:至少Mozilla已经证明这是可能的。

教授:那很公平。 至少,至少在手机上,比台式机系统更明智地选择创建Web应用程序。

学生:由于您正在通过Web应用程序拨打电话,因此您需要创建一个全新的API才能将Web应用程序界面与电话进行通信。

教授:当然可以。 因此,Web应用程序具有一个可以解决的局限性:缺少某些移动设备的API。 但此类应用程序较少。 例如,对于照相机或GPS导航器,它们很慢,但是仍然向Web应用程序添加了适当的界面。 但是,在Web应用程序中,可能仍然没有用于拨打电话,发送SMS消息等的API。

Web应用程序的另一个缺点是无法建立对其他应用程序的有限访问权限。 我们讨论了Android中的隐式意图,您可以说:“我想看这张JPEG图像,但是谁知道哪个应用程序可以打开它? 我想查看此PDF文件,还是与我刚用相机拍摄的朋友分享这张照片,但我不知道将使用哪个电子邮件应用程序。” 因此,我们只要求链接监视器为我找到一些将发送此照片的电子邮件程序即可。 在Android设备上,这很容易做到,但是对于Web应用程序,这将造成很大的困难,因为每次交互都必须链接到特定的URL。



因此,如果您不知道某人正在使用哪个PDF查看器,那么您将不知道可以使用哪个URL查看文件。

学生:也许Web应用程序的一个缺点是JavaScript很难阅读?

教授:是的,另一个不便之处是它们都是用JavaScript编写的。 因此,就性能而言,这可能不是很好,可能难以理解程序在做什么,可能难以有效地进行编译等等。

让我们回到计算机程序。 桌面应用程序的一个有用功能是共享文件的能力。 您的所有文件在每个应用程序中都可用,因为您只是共享它们。 因此,您可以轻松访问计算机上可用的任何数据。



在Android中难以实现的事情很容易在计算机应用程序中完成。 对于台式机操作系统,如果我想编译一个软件,则将运行MAKE,GCC以及可能的其他程序,它们都将在同一目录中的相同C源代码上运行。 这在Android中很难做到,因为Android的数据与内容提供商提供的主应用程序相关联。 因此,您必须修改它,首先使用源代码存储库,然后安装C编译器,MAKE程序,汇编器等。 让他们一起工作要困难得多。

可以绕过Android的某些限制来完成此操作,但无论如何要比在台式机系统上更复杂。

学生:我认为优化Web应用程序非常困难,它们受RAM使用和处理能力的限制。

教授:是的,优化Web应用程序和桌面应用程序的原理是不同的。 我认为,至少在设计Android时,Web应用程序的缺点在于,离线启动Web应用程序非常困难。 如果您的电话捕获到微弱的网络信号,则某些应用程序将很难启动,特别是如果其中某些部分已从缓存中掉出来的话。 但是,正如您所注意到的,我认为,Web应用程序虽然消除了当前的限制,但却缓慢地“赶上”了Android。 因此,Web应用程序很有可能将成为启动新电话操作平台的合理模型。 但是五年前,他们还不够出色。

但是,即使存在现有的缺陷,现在将Web应用程序“推入” Android占据的利基位置要比从头开始开发新的移动操作系统要容易得多。 因此,我认为我们仍然可以谈论Android所做的成功,尽管也许今天您不愿意这样做。
我认为,就隔离度而言,Android系统的安全性要高得多。 如前所述,Android依靠Linux内核将应用程序彼此隔离。 Android平台实际上设置了用户ID,因此此App1将具有UID 1001,App 2将具有UID 1002,并且通常具有root特权的链接监视器将具有UID0。因此Linux内核在很大程度上负责应用程序彼此分离。



基本上,用户标识符之间的交互是通过意图意图发生的。 关于Linux内核如何使用UID控制应用程序还有更多细微差别,我们稍后再讨论。

一个有趣的问题:为什么这些人选择Java? Java在Android中的作用是什么? 为什么根本需要它? 如果我们用C而不是Java或例如Assembler编写所有应用程序,那么会发生问题吗?

学生:如果您有漏洞,那么使用这些语言可能会导致对系统重要的指标产生失真。

教授:是的,这可能发生,例如,应用程序中可能发生缓冲区溢出。 还有什么

学生:可能会与权限混淆。

教授:有什么权限?

学生:具有诸如潜伏期,潜伏期。

教授:让我们仔细看看。 因此,正如我们所说,链接监视器会为我们检查标签,并实际上将所有已安装应用程序的列表以及与所有这些应用程序相对应的标签存储在Android系统中。 因此,无论使用哪种语言,您都可能不希望链接监视器出错。 因此,以类型安全的语言编写链接监视器是一个很好的解决方案。 我喜欢Java,因为它是一种具有良好功能的类型安全语言。 但是,即使应用程序是用C编写的,并且其中发生了缓冲区溢出,它仍然不会损坏链接监视器中的标签。 因此,这不是一个大问题。

学生:也许有某种系统可以破坏用C编写的代码?

教授:是的,因此,原则上最好避免直接与Linux内核对话的应用程序。 在Android中并非如此。 Android应用程序可以根据需要进行任意系统调用。 实际上,出于性能原因,应用程序不能影响用C或汇编语言编写的任意组件,这就是为什么某些游戏用Java进行“讲”的原因。

学生:我认为这是以某种方式使用所有为Java编写的材料的机会,也就是说,Android的创建者希望简化开发人员的应用程序创建。 实现此目的的最简单方法之一就是可以利用大量的Java库。

教授:很有可能。 我认为使用Java的主要原因之一是可用性。 他们可能更关心编程和易于开发,因为Java与安全无关。

与iPnone不同,这是另一件事。 iPhone操作系统也易于开发,但是使用C,并且如果尝试使用C,则可能导致缓冲区溢出。 此外,特定设备具有特定性,因此所有设备可能都没有相同的库。 我认为Android开发人员选择Java的主要原因是因为他们最初不知道该OS可以在其上运行的设备的特性。 例如,iPhone的创建者肯定知道他们的手机中将装有ARM处理器,因此他们使用该特定模型预编译了该软件。 而且这种方法更有效,因为电池消耗对于手机非常重要。



来自Android的人使用Java的事实在节能或处理器性能方面可能效率较低,因为它与JRE等有关。 但是,这样做的好处是可以将操作系统移植到具有不同体系结构的设备上。 因此,如果您的电话带有MIPS,ARM或x86处理器,则Java应用程序可以在所有三个设备上运行。 Android开发人员希望其平台可在任何类型的设备或电话上使用。 因此,这可能是他们为使用Java而牺牲安全性的主要原因。

事实证明,Java运行时环境没有为应用程序提供任何特殊的安全好处,对于开发人员和用户来说只是方便的事情。 但是从隔离的角度来看,一切基本上都取决于内核和控制应用程序操作的链接监视器。

学生:难于开发不会导致某些应用程序安全性吗? 确实,在编写C引用监视器时,有很多其他方法可以出错。

教授:是的,您绝对正确! 实际上,我不应该说易于开发与安全无关。 这是完全愚蠢的,因为您想像编写正确的代码一样轻松地做到这一点。 因此,从某种意义上讲,您可以轻松地为其单独编写正确代码的系统提供了更高的安全性。 从某种意义上说,您认为Android开发人员希望避免在编写代码时犯错误是正确的,因此您不想使用复杂的C语言编写代码,而且我也不知道为什么Apple在开发OS时选择C作为编程语言。

因为这样的选择会在应用程序中造成缓冲区溢出问题,并且如果此应用程序非常重要,那么它可能很容易受到攻击。 与损害其他应用程序无关,但是您仍然不希望您的银行应用程序用C编写。



学生:用Java或C编写的Link Monitor?

教授:在Android中,链接监视器主要是用Java编写的。 但是,为了使用本机代码与外部接口和应用程序进行通信,其中有些“钩子”。 但是大多数逻辑是用Java编写的。 因此,这实际上是一个相当安全的计划。

现在,让我们尝试找出应用程序UID的用途,除了根据应用程序启动的过程将应用程序彼此分离。 使用UID的主要原因是要创建共享访问共享资源并在系统中交换数据的能力。

我们已经看到了一种实现此目的的机制-向链接监视器发送意图。 但是在Android上,通过链接监视器的意图无法完成许多工作。 出于性能原因,可能并非所有内容都通过Intent发送。 您不想为系统上执行的每个操作都调用链接监视器,首先,它涉及对Internet的访问。 如果要在运行Android的设备中访问Internet,则只需打开套接字即可,就像在任何标准Linux应用程序中一样。 一个应用程序可以简单地询问内核:“我需要一个套接字,因为我想连接到这台机器”,这就是访问Internet的方式。

接下来,应注意对可移动媒体的访问。 SD-, . , , , , , . , . , , Android . , , GPS-, .



«» Android, Linux, /dev/camera. Linux, , , . , - , , Java. C Assembler, Linux, . Java , Java-.

: , , - , ?

: , ! , . ? , №2, ID . Android UID GID , . , . , , , - «android.permission.internet», , .



, . , , , . — Linux Android. , - , - , , Linux. Android GID 3003, . , , . , - . Android - , . , GID UID .

SD-. GID, SD-, , . , . , SD- GID SD-.
, , Android.



, , , . , SQL -, , . — UID , , .

, , , GPS, . GID, . , , dev/camera - GID, , , GID .

, , №2, , UID GID , - .

, SD-? , SD-? , SD- , , . ?

: , , , , .

: . , Android , . , SD- . , , SD- . , Android , , , FAT, - . , , - .

: , ?

: , . , , . , , , , . , .



— , , ? , , DIALPERM, INTERNET, FRIENDVIEW?

: , , ?

: , , , . , , . , . Android , iOS, , iPhone , , , SMS-, JPEG . .

– , , . . , Android , , . , - «», , , , , OK. , , .

, , , Android , — , . , , , . Android, 4.3, , , . , . , , , , . , , API, , .

55:10

MIT « ». 20: « », 3


.

, . ? ? , 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-CN432618/


All Articles