TT Lab
开始
学习 学习路径 课程

闭网现场 — 国防领域

权限不会自己变少 — 缩减是一项独立的工作

在 TT Lab 中继续学习

一句话总结

权限在每次需要时被添加,需求结束后依然保留。所以“谁能做什么”不是靠人的记忆,而是必须从账户、角色、权限数据中计算出来的值,而精简权限,则是必须有人排好日程、专门去做的一项工作。

为什么需要它

刚交付之后的权限,通常是正确的。那时每个人都知道谁在做什么,角色也只有几个。问题出在之后。为夜间作业临时授予的权限留了下来,人调换部门后新角色加上了,旧角色却没有去掉,离职处理只发生在人事系统里,而账户依然存活。一年过去,就没有人能说清全貌了。

在隔离网络中,这不只是简单的卫生问题。在本来就没有通向网外的路的地方,把数据搬到外部的唯一通道,就是拥有这种权限的账户。所以监理方对交付物提出的第一批问题之一就是账户清单和权限清单,第二个问题则是“为什么需要这个权限”。回答不了第二个问题的权限,就是不该存在的权限。

公开标准也指出了同一个位置。NIST SP 800-53 Rev 5 的访问控制系列,把账户管理、最小权限、职责分离分别拆成不同的控制项,国防合作方经常对照的 NIST SP 800-171 Rev 3 也把访问控制放在第一个要求系列。三者各自独立的原因,是三者无法互相替代。账户建得再好,权限很宽也没用;权限收窄了,如果同一个人既负责批准又负责执行,批准就成了形式。

工作原理

计算的顺序始终一样。

第一,展开有效权限。账户上附有角色,角色继承其他角色。界面上看到的是“两个角色”,但实际握有的是把继承全部展开之后权限的并集。这里最先遇到的是循环继承。角色 A 继承 B,B 又继承 A,写得朴素的递归就永远不会结束。必须一边记住访问过的角色,一边向下走,这样展开之后,就会发现两个角色实际上拥有同一个权限集合。这个事实本身就是发现。

第二,区分未被使用的权限。把已拥有的权限与观测期间实际用过的权限比较,就会剩下一次也没有被使用的权限。这与“可以删除的权限”并不是一回事。每个季度只用一次的恢复权限,在观测期间可能看不到。所以这份清单要作为问卷来用,而不是作为判定。

第三,查看账户这边。最后一次登录距基准日很久的账户,以及人事记录中标为离职的账户。这里有一点必须遵守:如果把基准日定为“今天”,同样的数据,昨天和今天的答案就不同了。这在应对审计的材料中是致命的。基准日要写在数据中,并使用那个值。

第四,查看组合。职责分离不是针对单个权限,而是针对成对的权限的规则。把批准与执行、读取与删除审计记录这类一起掌握就会使控制失效的成对权限,做成清单,然后在有效权限中查找这些配对。

第五,查看能够到达的范围。持有可以授予权限的权限的账户,能做的事比现在拥有的更多。因为只要给自己再附上一个角色就行了。如果这样附上的角色又能授予其他角色,就再往前走一步。只看一步就结束,会漏掉最危险的账户。这是一个要沿着图一直追到底的问题。

在现场相遇的样子

我在一个交付现场做过账户精简。引人注目的不是管理员账户,而是名为“迁移账户”的账户。迁移早已结束,没有人使用它,最后一次登录是八个月之前。然而,附在这个账户上的角色可以授予其他角色,而该角色能授予的角色之一,可以删除审计记录。没有人使用的账户,实际上成了最强的账户。在精简工作中真正降低风险的,不是整理管理员权限,而是去掉了这一个账户。

另一个常见的是重复分配。已经拥有上级角色的人,又被另外附上了下级角色。权限一点都没有增加,所以风险相同,但对阅读清单的人来说,一直是噪音。如果能通过计算证明撤销之后有效权限依然不变,这项整理就能毫无争论地完成。

第三种常见的是以为精简工作一次就能结束。精简权限不是打扫卫生,而是周期性的工作。即使精简一次,半年之后同样的清单又会重新膨胀。所以精简的成果中最有价值的,不是撤销的权限数量,而是可以重新运行那个判定的脚本和基准日数据。下一次运行同一个脚本并比较数字,这期间增加了什么,就会以表格形式给出。如果交付文档中只写精简的结果而不留下那个计算,半年后的经办人就要从头开始。

下一项实验要做什么

你将用 18 个账户、9 个角色以及三个月的使用记录来展开有效权限,依次找出未被使用的权限、休眠账户、职责分离违规和权限提升路径。接着,为每一项分配确定撤销或保留,制定精简方案,再在应用该方案的状态下重新运行同样的判定,用数字确认违规是否真的减少了。其中混有循环继承和多步的提升路径,所以只看一步的实现,会在中途被卡住。