麻省理工学院的课程“计算机系统安全”。 讲座4:“共享特权”,第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部分

今天,我们将讨论共享特权,因为我们最终在一定程度上导致了缓冲区溢出,但我们将继续讨论。 我们将不讨论有关如何使用缓冲区溢出的详细信息,但将转而减少这种问题,并讨论如何开发一个系统,其中像其他漏洞一样,缓冲区溢出对您来说不是大问题。



因此,今天,我们将讨论共享特权作为一种允许您创建更安全的系统的方法,并且在讲座材料中,我们提到了一个称为OKWS的Web服务器。 这不是权利分离的最有说服力的例子,但是在那里很好地描述了该系统,以了解其所有部分的工作方式。 但这并不意味着您应该立即下载OKWS并启动您的网站。

因此,在深入探讨OKWS和Unix权限的细节之前,让我们先看看什么是特权共享以及为什么它是一个好主意? 上周,James证明了,如果您使用C编写程序,则几乎不可避免地会有不好或错误的地方。 此外,问题在于,如果您有足够大的应用程序,并且其中存在某种漏洞,那么攻击者可以连接到程序,向该应用程序发送请求,欺骗并执行“不良”操作。

任何应用程序都具有访问权限。 这意味着它包含许多可以通过访问获得的数据。 您甚至可以删除这些文件,就像在实验室1中所做的一样。 问题在于,如果您不小心,此大型应用程序中的漏洞可能允许攻击者修改任何此类数据或获得足够的特权来管理程序。
在本讲座中,我们将探讨共享特权正在尝试做什么。 值得采用该程序,将其分为多个部分,并确保每个单独的元素仅具有必要的特权才能正确执行其工作。



左边是一个分为3部分的程序,右边是数据,它也由三部分组成。 正确分配的特权意味着应用程序的每个部分只能访问其数据部分。 而且,如果我们在程序X中存在漏洞,那么它将使我们只能控制一部分数据,而不会影响其他两部分中的数据。
因此,共享特权的想法非常强烈。 它不能专门影响缓冲区溢出或其他漏洞的问题;它们只是软件产品体系结构的一般要求,以确保系统某一位置的漏洞不会影响其其他部分。 特权分离被广泛使用。 因此,为了确保程序中组件的隔离,经常使用虚拟机。

您可以将大型系统划分为一堆VM,以隔离各个部分,但也可以使用Unix通过“切片”实际执行此隔离。 Unix提供了OKWS用来分隔特权的许多机制。

许多应用程序实际上使用特权共享做法。 你们可能经常使用SSH或“安全外壳”。 这是用于远程控制操作系统和传输文件的网络协议。 它在其许多组件中使用特权共享,以确保不会破解其加密密钥,并且不会损害服务器。 Chrome网络浏览器与您更相关,在其中特权共享也得到了广泛的实现。 因此,如果Chrome中存在某种“错误”,对手将无法完全控制您的计算机。

这是什么是特权共享以及OKWS为什么是一个有趣示例的非常简短的摘要。 但是,他比重要的软件更生动。

因此,正如我提到的, OKWS将使用Unix权限和某种Unix机制来分离各个组件。 对我们而言,重要的是要了解Unix安全机制是如何工作的。 Unix作为共享特权的工具,不仅对了解OKWS十分重要,而且它与任何其他隔离工具(例如UIDVM容器或任何类似技术)一样,都可以使您了解过程的细节。 因为获取访问权限的过程包含许多复杂的部分,所以您可以与利用这些部分中任何一个漏洞的攻击者打交道。 因此,我们将对Unix进行足够详细的介绍,以了解它是什么以及在特定安全机制中它应该如何显示。

Unix历来是如何建立安全机制的最好例子。 它的安全机制出现在满足在同一Unix系统上将用户彼此分离的需求的过程中。 同时,人们认为有很多用户使用同一台计算机,因此您需要使他们彼此分开。 因此,这不一定是通用的机制,而是最普遍和广泛使用的机制之一。 因此,Chrome正在尝试使用Unix中的许多特权共享机制。

考虑保护机制时,应考虑其原理,这意味着有人具有特权或权利,Unix会发起或支持这些权利。 因此,我认为Unix的主题是一个过程,因为支持了一个过程,因为我们从安全角度考虑的每个操作或请求都应该允许或拒绝某些东西。 这可能是进程通过调用syscall系统调用而调用的操作。 这里重要的是我们如何描述此过程具有哪些特权。

接下来,有一个对象,我们的过程将其作为主体。 他可以修改,阅读,观察对象。 操作系统中有许多对象需要保护。 您认为我们应该担心哪些对象?

观众:关于文件!

教授:对,关于文件和目录。 还有什么



受众:关于网络套接字!

教授:是的,关于网络套接字很棒。 系统中还有其他事情吗?

受众:其他过程。

教授:是的。 实际上,这类似于应用程序或用户应注意的事项,但是您还必须保护系统的各种内部组件。 因此,进程本身不是进行系统调用的主体,这也是另一个进程可以执行的操作。 他可以杀死他或创建一个新的。 因此,您必须找出将流程感知为可操纵对象的规则。 还有什么让我们担心的?

受众:环境变量。

教授:我认为在管理OC和拥有某种安全策略的意义上,它们可能不是您可以更改的主题。 我认为环境变量只是内存中进程的某种状态。 但是,我认为,更笼统地说,我们关心过程的这一部分,它包含在内存中-环境变量,堆栈,参数,这也很重要。 可能在过程的记忆中,有许多事情对外界干扰很敏感。 还有什么

受众:一般来说是文件描述符。

教授:还有另一种内部环境非常重要。 磁盘上的文件应该与我们有关。 但是,仍然存在像文件描述符这样的操作工具, OKWS会尝试广泛使用它,我们将看到它们的含义。 您还想在操作系统中保护什么?



受众:硬件或硬件。

教授:是的,硬件要求的保护至少要比操作系统提供给我们的抽象保护要高,因为我们不希望处理器出于某种原因而“冻结”。

观众:您还应该考虑保护外围设备!

教授:哦,是的! 因此,使用其他设备是正确的,尤其是在台式计算机上,有很多不必要的事情:USB驱动器,网络摄像头,可能还有显示器本身-您将要保护其中的一些内容,因为与它们相关的应用程序不应“散散步” »整个屏幕。

我认为,实际上,所有这些对象都不在服务器端,它们非常接近服务器端。 在您的手机上,麦克风可能也是一个非常重要的对象,您也想保护它。

但是我将保留该列表,因为在接下来的内容中,我们将主要讨论服务器应用程序,但是您绝对对对象列表是正确的。 我认为对于OKWS,这大概是我们可以保护的事情,或者至少是使用OKWS的事情的详尽列表。

因此,让我们讨论一下OS内核如何决定进程何时可以使用这些对象中的任何一个做某事。 因此,在较高的层次上,我们主要将进程视为具有该原理所授予的特权的实体,并且Unix系统中的原理是一件相当复杂的事情。

有一个称为User ID的东西,它是一个32位整数。 有一个Group ID ,它也是一个32位整数。 实际上,没有什么特殊的原因可以使它们有所不同。



如果它们仅由一组32位整数组成,那将是很好的选择,但是不幸的是,Unix将它们分为两类。 有用户ID整数和组ID整数。 当我们谈论具有某些特权的进程时,是指与某个uid值相关联的进程。 通常,一个进程具有一个uid ,以及该进程具有的一组组标识符的列表。 由于历史原因,碰巧将它们组合为一个gid ,然后组合为其他标识符的列表。 粗略地说,一个进程可以行使所有这些标识符所代表的特权。 因此,如果uid提供对某些内容的访问,则该进程可以使用它进行任何操作。

现在让我们谈谈文件,目录和其他类型的对象。 那么文件发生了什么,或者如何创建用于处理文件的Unix权限? 使用文件,一切都相对简单;您担心使用它们可以执行的操作:读取,写入,可能执行以及更改权限本身或其他安全属性的能力。

观众:打破关系!

教授:是的,断开链接, 取消链接 -您认为文件或目录本身的属性是什么? 实际上,这种区别还不清楚。 当Unix考虑删除文件时,它更多地是关于目录,因为在Unix上,文件实际上是inode或inode。 因此,在Unix上,您可以具有一些到inode的硬链接,并且当您使用unlink断开特定的Unix文件名时实际上您只破坏了其中一个文件名,但是它可能具有其他名称和其他链接。 实际上,很重要的一点是,是否允许您更改指向文件的目录,同时不要对文件本身的inode进行任何操作。 因此,通常unlinklinknamedcreate操作是与目录关联的操作,因此create同时影响目录和新文件。 因此,我们必须找出适用的规则。



为了确定某人可以读取或写入文件,我们将在inode文件中插入一些权限或位。 在Unix上,出于安全原因,每个最终是文件或目录的inode都有几个有趣的字段。 这是用户ID和组的标识符,正如我们所说的,它们拥有文件或目录。 因此,由于Unix具有您的uid ,因此您可以管理主目录中的所有文件。
Unix还具有一组允许位,可以将其视为矩阵的一部分,在基本设计中,它们看起来像r (读), w (写)和x (执行)。 我们可以为各种实体指定这些权限,在Unix上,它们是为所有者所有者 (即uid inode) ,给定文件所属的组 (即gid )以及所有其他对象( 其他)指定的

您可以用3填充此二进制矩阵3,其中1表示允许执行特定操作,而0则禁止执行该操作:



Unix就是这样存储权限的。 您会经常看到一种编码这些事物的传统方式,这可能值得一提。 在Unix中,此矩阵编码为八进制数,因此此处的每一行都应被视为8的基数,因此此编码中的矩阵如下所示: r是4位, w是2位, x是1位,owner-它是6位,而groupother分别包含4位。



您通常会在讲义材料中看到这样的名称,因此可以说此文件的分辨率为6、4、4,即所有者可以读写该文件,而组所有者和其他人只能读取该文件。

这些符号告诉我们何时读取,写入和执行文件。 如何更改此文件的权限? 这不是一个公平的问题,但是你们对此有何看法? 我们应该如何确定某人应该能够更改这些权限,因为可能也需要这样做? 有什么想法吗?

受众:此人是否有权访问文件?

教授:也许还取决于访问权限。 另一方面,您可以创建要与某人共享的可重写的可重写文件,以便该人可以读取,附加和修改您的文件,但这也意味着您可以突然更改权限以使该文件不可重写或分配只对我自己。

因此,Unix的创建者决定如果您有一个文件,即您的uid对应于在文件中输入的uid ,则默认情况下可以更改权限。 否则,您将无法。 因此,如果只有gid,并且该具有文件中的所有权限,则仍然无法更改该文件的权限。 您可以对其进行读取,重写或执行任何操作,但是如果没有uid ,就无法更改权限。

Unix目录遵循相同的规则。 因此,分离目录中的取消链接和链接链接条目意味着您有权写入该目录。 如果要重命名文件,则可能需要对从中获取文件的目录具有写访问权,并对对放置文件的目录具有写访问权。 在某些情况下,硬链接可能会引起问题,并且在讲义材料中会突出显示这些详细信息。

实际上,目录中还有另一个有趣的操作-搜索。 多亏了她,您可以在目录中找到该文件。 Unix将执行权限编码为实现搜索目录的能力,因此拥有目录的执行权限实际上意味着能够搜索特定的文件名。 可能是您不需要目录搜索文件名的权限,但是如果您没有读取权限,则将无法查看目录的内容,即找不到文件。 在某些情况下,这需要使用某些文件来限制操作或向用户隐藏它们,这很有用。

让我们来看一个例子。 如果输入打开命令(“ / etc / password”),在Unix上会发生什么? 当我命令进行系统调用时,代表我检查系统内核的是什么?

受众:它是否检查您是否具有执行权限等?

教授:是的,在某种程度上是这样。 我需要做某事,等等。

听众:然后执行指定的斜杠!

教授:是的,实际上我需要看看/ etc指向什么? 因此,如果我不知道根权限 -权限,则将无法使用。

听众:那么您需要阅读/ etc / password



教授:是的,这很有道理。 这是给您的一个小难题。 假设MIT为与6.858课程相关的所有人创建了一个组,并为MIT中所有TA的其他组创建了一个组,在Unix术语中,这些组被指定为gid ,但是出于某些愚蠢的原因,它们未包含在6.858 TA组中。 如何创建仅适用于6.858 TA组的文件?

假设我有6.858 gid和TAs gid,但是我只能在文件中插入一个gid

受众:您将无法执行此操作,因为在这里您可能拥有TA,而不是6.858 TA。

教授:是的,是的。 尽管6.858组中的学生是其他课程的助教,所以也许这并不是很好。 但是,尽管如此,让我们尝试以某种方式使这些组交叉。 为此,我们可以使用权限机制。
/foo/bar/grades , foo , gid 6.858 . , , /foo . /bar , gid TAs, . /foo/bar/ , grades . , .



: , , , , 6.858 gid, TA - - 6.858 ?

: , . , , , Unix , , , , , . , MACS — mandatory accesscontrol systems, . , , : , . . , - .

Unix , , , TA - , Unix . , - . - , Unix , , . , , . , , , . , . Unix.

, , , , - , . - , , , .

, , Unix.

, — . OKWS , Unix . Unix , . , «» , .

, : , . , . - , , Unix – , , , , .

– Unix - , .

OKWS , . , , , - , . , , , - . - , .

, . , , .

? ? ? Unix . , , – Unix , ptrace .



. , , , , , . , , web , gid TAs, .

, , . userid . ptraceuid uid .

ptrace Linux . , , , - , , , . - . , ID.

27:50

:

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


.

感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的资料吗? 通过下订单或将其推荐给您的朋友来支持我们,为我们为您开发的入门级​​服务器的独特模拟,为Habr用户提供30%的折扣: 关于VPS(KVM)E5-2650 v4(6核)的全部真相10GB DDR4 240GB SSD 1Gbps从$ 20还是如何划分服务器? (RAID1和RAID10提供选件,最多24个内核和最大40GB DDR4)。

戴尔R730xd便宜2倍?在荷兰和美国,我们有2台Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100电视(249美元起) 阅读有关如何构建基础架构大厦的信息。 使用价格为9000欧元的Dell R730xd E5-2650 v4服务器的上等课程?

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


All Articles