公司希望弄一套双授权的安全系统,老大提供了一套算法,求大家review。如果这个方案确实可行,那么我们会做完然后开源出来给大家用。

Author and License

Author: 韩拓 保留所有权利 All Rights Reserved

以下内容不以cc-by-sa3.0发布。(因为根本不是我的创作)

场景

  1. Alice希望登录到Bob上执行操作。
  2. 两者的基本控制协议为ssh。

假定

  1. 攻击者名叫Mallory。
  2. 如果Alice的私钥泄漏,管理者必须有权停止Alice到Bob的访问而不需要更换所有Bob的公钥。
  3. 除去Alice和Bob外,参与通讯过程的所有机器(即下文中的Charlie和Dave)中可能随机被攻破一台。
  4. 服务都在内网,但是如果网关和被攻破的机器是同类系统,Mallory即可具有内网监听和伪造数据报文的权限。
  5. Alice不会利用获得的Bob的权限故意执行危害性指令(但是可能被诱骗)。
  6. Alice和Bob不会被攻破。

方案

假定有两台机器,Charlie和Dave,Dave和网关不得是同类系统。根据假定4,两台机器不会同时被攻破。

  1. Alice通过SSL和Dave建立连接,上报自己的用户名,需要访问的设备和帐号,并提交一个临时生成的ssh pubkey(username, account, host, pubkey)。
  2. Dave根据预先设的IP-username-sslkey验证用户身份为Alice,并且根据ACL确认其具有访问权限。
  3. 如果通过验证,那么Dave用自己的key,通过SSL联系Bob上的某个程序,将Alice的pubkey提交到Bob的合适帐号上(account, pubkey)。
  4. Bob通过sslkey验证提交者确系Dave,将pubkey临时加入account中。
  5. Bob完成此事后,通过Dave向Alice返回成功。
  6. Alice通过SSL和Charlie联系,上报自己的(username, account, host)。
  7. Charlie根据预设的IP-username-sslkey验证用户身份为Alice,并且根据ACL确认其具有访问权限。
  8. 如果通过验证,那么Charlie用自己的key,通过SSL联系Bob上某个程序,为Alice开通到Bob的22端口的tcp盲转发。
  9. Alice利用开启的tcp通道,和自己的临时ssh private key验证登录Bob。
  10. 在Alice连接Bob上的程序后,删除alice留在Bob上的临时pubkey。

验证

假定Charlie被攻破。

  1. 方案1-5没有影响。
  2. Charlie拥有能够在任意一台机器上开启盲转发的权限。
  3. 但是Charlie并不能影响Dave去添加pubkey。

假定Dave被攻破。

  1. Dave拥有在任意一台机器上添加pubkey的权限。
  2. 但是Dave并不具有打开到任意一台机器ssh端口的权限。