Charlie and Dave
公司希望弄一套双授权的安全系统,老大提供了一套算法,求大家review。如果这个方案确实可行,那么我们会做完然后开源出来给大家用。
Author and License
Author: 韩拓 保留所有权利 All Rights Reserved
以下内容不以cc-by-sa3.0发布。(因为根本不是我的创作)
场景
- Alice希望登录到Bob上执行操作。
- 两者的基本控制协议为ssh。
假定
- 攻击者名叫Mallory。
- 如果Alice的私钥泄漏,管理者必须有权停止Alice到Bob的访问而不需要更换所有Bob的公钥。
- 除去Alice和Bob外,参与通讯过程的所有机器(即下文中的Charlie和Dave)中可能随机被攻破一台。
- 服务都在内网,但是如果网关和被攻破的机器是同类系统,Mallory即可具有内网监听和伪造数据报文的权限。
- Alice不会利用获得的Bob的权限故意执行危害性指令(但是可能被诱骗)。
- Alice和Bob不会被攻破。
方案
假定有两台机器,Charlie和Dave,Dave和网关不得是同类系统。根据假定4,两台机器不会同时被攻破。
- Alice通过SSL和Dave建立连接,上报自己的用户名,需要访问的设备和帐号,并提交一个临时生成的ssh pubkey(username, account, host, pubkey)。
- Dave根据预先设的IP-username-sslkey验证用户身份为Alice,并且根据ACL确认其具有访问权限。
- 如果通过验证,那么Dave用自己的key,通过SSL联系Bob上的某个程序,将Alice的pubkey提交到Bob的合适帐号上(account, pubkey)。
- Bob通过sslkey验证提交者确系Dave,将pubkey临时加入account中。
- Bob完成此事后,通过Dave向Alice返回成功。
- Alice通过SSL和Charlie联系,上报自己的(username, account, host)。
- Charlie根据预设的IP-username-sslkey验证用户身份为Alice,并且根据ACL确认其具有访问权限。
- 如果通过验证,那么Charlie用自己的key,通过SSL联系Bob上某个程序,为Alice开通到Bob的22端口的tcp盲转发。
- Alice利用开启的tcp通道,和自己的临时ssh private key验证登录Bob。
- 在Alice连接Bob上的程序后,删除alice留在Bob上的临时pubkey。
验证
假定Charlie被攻破。
- 方案1-5没有影响。
- Charlie拥有能够在任意一台机器上开启盲转发的权限。
- 但是Charlie并不能影响Dave去添加pubkey。
假定Dave被攻破。
- Dave拥有在任意一台机器上添加pubkey的权限。
- 但是Dave并不具有打开到任意一台机器ssh端口的权限。