LayerT 白皮书
共享访问权限,而不是密码

大多数公司都有几个人共用的登录信息:社交媒体账号、银行门户、薪资服务、某个没人为其设置单点登录的工具的管理控制台。它们的密码最终出现在电子表格或聊天记录里。每个曾经需要使用该账号的人都知道这些密码。有人离职时,按理应当有人把它们全部更改一遍。
LayerT 的答案是共享访问权限,而不是密码。本文说明这一机制如何运作、每一步为何这样构建,以及这种方法的边界在哪里。
模型
LayerT 中的共享账号由四部分组成。
- 密封的密钥。 密码,以及(如果供应商使用的话)验证器设置密钥和任何保密登录字段(例如 PIN),由 LayerT 加密并存储。
- 策略。 谁可以使用它、是否每次都需要审批人批准、是否同一时间只有一人持有,以及会话持续多久。
- 登录配方。 登录字段在供应商网站上的位置,由自动检测得出,或由账号负责人录制一次。它从不包含任何值。
- 记录。 每一次请求、批准、登录、延期和退出登录,都归属于具体的人。
人员从不会拿到账号本身。他们拿到的是一个会话:一种有时限、会被记录的登录许可,由 LayerT 替他们完成登录。
密封存储
密钥(secret)使用 AES-256-GCM 信封加密。每个共享账号都有自己的随机 256 位数据密钥。每个密钥(secret)都在该数据密钥下使用一个新的随机 nonce 加密,而数据密钥本身由密钥加密密钥进行加密(“封装”)。数据库只存储密文,保存在单独的表中,与账号设置分开。
更改密码会在一个全新的数据密钥下重新加密该账号的密钥(secret),并被记录。删除账号会同时删除其密钥(secret)。
在生产环境中,密钥加密密钥位于 Google Cloud 在欧盟的密钥服务中,在那里它可以被使用,但无法被提取,并且每次使用都会在 Google 一侧留下记录。此功能已构建,并将随 LayerT 的首次生产部署开启。开发环境中以本地密钥代替。
从请求到会话
- 浏览器申请或选择从登录字段中的 LayerT 图标或工具栏启动器发起。一键式账号无需审批。
- 控制台或弹出窗口批准适用于中、高敏感级别。任何人都不能审批自己的请求,批准时会重新检查申请人是否在职且有权使用。
- LayerT 云端会话开启绑定到该人员及其已注册的浏览器,并设有结束时间。如已设置,同一时间只有一人持有。
- 浏览器已登录LayerT 填写供应商的表单。会话标签显示这是一个 LayerT 会话以及剩余时间。
- 浏览器会话结束按时结束、由管理员结束,或在人员离职时结束。LayerT 使人员退出该网站的登录。
无人处理的请求会在 30 分钟后过期。如果两位审批人同时做出决定,只有一个决定有效。会话默认持续一小时,从批准起总计最多可延长至八小时。
授权
关键时刻是密码离开存储的那一刻。只有当以下条件全部满足时,LayerT 才会解密密钥(secret):
- 会话处于活动状态且尚未过期;
- 它属于提出请求的人以及其已注册的浏览器;
- 该人员在您的目录中仍然在职,并且仍然有权使用该账号;以及
- 该账号未被禁用。
只有这时,服务器才会在内存中解密密码,并通过 HTTPS 在针对该会话的授权中返回它。每一次授权都会连同人员、账号和设备一起被记录。密码和任何验证器代码都从不出现在日志中。
填写而不显示
授权会交给 LayerT 的 Service Worker,只有当页面正是该账号的确切网站时,它才会将授权交给页面:协议、主机和端口相同,通过 HTTPS,不允许通配符。这项检查使用的是 Chrome 为发起请求的框架报告的地址,而不是页面对自身的任何描述。
填写操作在 Chrome 的隔离环境(isolated world)中运行,这是扩展程序脚本与页面并行运行的独立空间。LayerT 拒绝填写隐藏、透明、位于屏幕外或只读的字段,以防范诱饵字段。密码只会填入密码字段。
为人员完成登录时从不显示密码:它不会出现在启动器、菜单、通知或审计日志中。查看它的唯一方式是提交一个由两人批准的密码请求(见紧急访问)。在为人员完成登录时,LayerT 不会将密码写入浏览器的存储。
为了防止 Chrome 本身提示将共享密码保存到某人的配置文件中,请通过策略关闭 Chrome 内置的密码管理器。LayerT 的部署模板包含这项设置。
谨慎地提交
填写并不等于提交。自动提交默认关闭,只有在账号通过测试登录之后,负责人才能开启它。即使开启,LayerT 也只在以下情况下提交:
- 人员明确选择了该账号;
- 页面是确切的网站和路径,并位于顶层框架中;
- LayerT 填写的每个字段都仍然可见;并且
- LayerT 无需猜测就找到了提交按钮。
它从不在页面加载时提交。遇到 CAPTCHA 时,LayerT 会暂停,并交由人员处理。
验证器代码
许多供应商账号使用验证器代码。LayerT 将设置密钥保存在其服务器上,并在服务器上生成代码(RFC 6238)。只有当前的六位代码会在需要时传送到浏览器,并像密码一样被填写。如果填写失败,持有会话的人可以在 LayerT 工具栏弹出窗口中查看并复制当前代码;每次查看都会被记录。泄露的代码几秒钟内就会失效。
设置密钥本身只能通过密码请求离开服务器,需经两人批准,并且只显示一次。
按时结束
不会结束的访问称不上治理。LayerT 通过三种方式结束会话:
- 按计划结束。 在结束前一分钟,人员可以延长或退出登录。到时后,LayerT 会清除该网站的 Cookie 和该标签页的网站存储。
- 由管理员结束。 所有者或 IT 管理员可以在控制台中结束正在进行的会话,并注明原因。服务器会立即停止认可该会话,浏览器会在大约一分钟内退出登录。
- 在人员离职时。 当您的目录停用某人或将其从某个组中移除时,LayerT 会在所有地方吊销其会话和请求。
紧急访问
有时,人员确实需要密码本身,例如要将其提供给供应商的支持团队。LayerT 有意让这件事变得不容易:
- 密码请求可以针对密码、验证器设置密钥或某一个保密字段。人员提出申请并说明原因:所有者和 IT 管理员可以针对任何账号提出申请,其他人只能针对自己可以使用或负责的账号提出申请。
- 由两个人批准,两人都不能是申请人,并且其中一人必须是所有者或合规官。它只能在控制台中做出决定,从不通过 Slack 或电子邮件链接做出。
- 申请人只能查看一次,须在批准后一小时内查看;如果其上次登录已超过 10 分钟,需要先重新登录。第二次查看会被拒绝。
- 随后它会被标记为已查看。 所有者、合规官和账号负责人会收到警报,账号负责人会被要求在供应商处更改它。每一步都会被记录;值本身从不记录。
- 用于灾难恢复的离线导出是加密的,并由两名保管人分别掌握,每人各有自己的密码短语。任何一人都无法单独打开它。生成导出会被记录。
对比
| 共享电子表格 | 通过密码管理器共享 | LayerT | |
|---|---|---|---|
| 人员能看到密码 | 是 | 通常是,并且可以复制 | 否。由 LayerT 填写。查看密码需要两人批准 |
| 使用前需审批 | 否 | 很少 | 可选,按账号设置 |
| 时间限制 | 否 | 否 | 每个会话都有 |
| 同一时间只有一人持有 | 否 | 否 | 可选 |
| 谁在何时使用过 | 否 | 部分 | 每一次请求、批准和会话 |
| 离职时终止访问 | 只有在更改每个密码后 | 只有在取消共享并更换密码后 | 根据您的目录自动终止 |
局限
- 如上所述,获得授权的人可以使用开发者工具读取已填写的密码。
- 位于该账号另一个网站所属框架内的登录表单不会显示页内菜单;请从工具栏启动器中选择账号,LayerT 会填写该框架,但不会自动提交。不支持绘制在 canvas 上的表单。
- 自动轮换密码尚未构建。
- 通过请求查看密码会立即发送警报。导出目前还不会发送警报 提议中;它们记录在审计日志中。
想在您自己的供应商门户上看看效果吗?请申请演示,并带上您最棘手的共享账号。