在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Check Point 检查点模式 王翔 (Vision Wang) 2009-02-13 分类信息安全行为型模式 动机、问题、影响因素不知道您是否和我一样,每天上班要打卡。 因为对人员进出管的比较严,如果不出示工作证并打卡,我进入不了办公区,更出不来。以进门为例,过程如下: 图 03-01:进门的流程 从上面的过程看,上述“门卫”、“门禁系统”的目标都是防止非法用户进入敏感区域,有效保护其中的敏感信息系统和数据。上章我们介绍了单一访问点模式(Single Access Point Pattern),它的主要任务是尽量缩小访问接触面,但并不能对用户“尝试进入”的行为进行控制。 例如:上面的示例,门卫总会下班、换岗,门禁系统也会因为一些原因被暂时关闭,相信您看过很多大片也知道,如果火警报警器被击碎会出现什么情况,因此即便如上面“层层设防”,但如果不能尽早 “切断”这些“尝试进入”进行清理,非法用户或程序只要有“恒心”突破只是早晚的事情。 一个更直观的例子就是我们的windows登录密码,“1qaz2wsx”?——不对,“123456”——还不对?不过没关系,我遍历就结了,磨杵成针么。 总结一下,我们的目标是阻断重复出现的Break in 行为,并采取适当的行为“惩罚”发起Break in行为的主体。这些内容对于大部分企业而言,本身就属于各种安全策略、安全使用规范要求内的。从设计上本着“组合优于继承”的原则,我们沿用《设计模式——基于C#的工程化实现及扩展》的方法,把它设计为一个独立的机制。 现实中,实施这种控制有一些限制: l 这个控制要求最常见的集中在认证、授权,如果“惩罚”措施不当,会招致用户反感; l 这些行为都是非法的么?想想您是否记得自己父母的生日,尽管只是两个Date数据。同样,我们的很多用户记忆这么多密码确实也不容易,如何认定是Break in还是无意的对于复杂的系统而言也是必要的; l 不同的“尝试”行为可能要进行不同的反馈,比如:上班的那个例子,用斧子砍门和一遍遍刷卡可能就要用不同的手段处置; 解决方案综上分析,我们对于这些行为可能有很多要求,但抽象而言,表示为: “用一个对象/子系统封装对于上述‘尝试’的安全策略”。 回想现实中的项目如何做的呢?以认证为例,我们经常看到一个登录界面,让用户输入UserName和Password,如果错误超过3、5次就要暂时请您歇会;而授权也是,如果您总是在浏览器输入本不该执行功能的地址,可能就看到一个很不友好的界面,告诉您“您的IP/账号已经被锁定,请联系管理员为您解锁”。 现实中项目对于“尝试”的定义不同,而且如何定义“尝试”失败也不同,例如: l 用户名/口令不匹配 l 认证过程超时 l 同一账号已经在其他地方登录,而且并没有退出 l 越权访问 l 在不恰当的时间登录企业的信息系统 l … … 考虑到这部分变化很大,所以因此按照GOF23部分的处理方式,我们把它“切开”,专门为管理“尝试”的对象/子系统提供判断算法,也就是说用策略模式把判断“尝试”是否成功以及多少次“尝试”失败就采取行动统一抽象为一个个独立的策略,允许以插件方式动态配置。 这样,我们抽象出检查点模式的静态结构: 图 03-02:检查点模式的静态结构 说明: l IHandler:借鉴命令模式的方式,定义多次“非法尝试”后应该执行的惩罚性措施; l IStrategy:借鉴策略模式,定义判断尝试后的执行是否成功的判断算法; l IDirectorStrategy:是企业安全策略的主要体现,他表示最终实施惩罚性措施的算法; l Context:用于表示判断算法所以来的全部环境及用户参数; l CheckPoint:用来管理众多“尝试“控制的调度、响应机制的入口; 上面的Director Strategy虽然大部分情况下是唯一的,但对于大型企业而言,信息安全策略往往来自于不同部门,针对该情况参考我们在《设计模式——基于C#的工程化实现及扩展》GOF23部分的介绍,您可以借助组合模式组织相关的策略为一个统一的Director Strategy。 检查点模式的执行时序如下: 图 03-03:检查点模式的执行时序 其中,决定性作用的是CheckPoint与IDirectorStrategy,至于IHandler执行的措施是需要反馈回界面告知用户,还是直接在后台拿个小账本记小账,或者是拉响警报之类的,这就已经与CheckPoint系统无关了,因为检查点的关键目标是这个前期的决策过程,至于后续的措施则完全依赖抽象的IHandler定义完成。 示例下面我们举一个最常见的例子,就是做网站登录次数的检查。假设企业安全策略非常宽松: l 密码错误5次,则暂时挂起登录请求20s; l 同一账号严禁同时在线; 分析这里,我们先将各项职责进行分解: l 为Director Strategy增加记录活动会话中每个账号登录的计数器; l 增加一个挂起请求20s的管控机制; 设计根据细化后的分工,结合前面检查点模式的静态结构,我们设计了一个TimesDirectorStrategy: 图 03-04:示例要求的Director Strategy结构 具体执行时序与一般的处理类似,只不过需要TimesDirectorStrategy根据调用请求的来源,确定其“尝试”次数。 相关模式从设计看,由于不同企业对于“非法尝试”的认定策略不同,因此策略模式成为封装相关算法的首选。 为了建立一个面向企业的全面系统,我们需要把相关“尝试”错误的检查工作交给一个认证逻辑之外的第三方机制完成。因此有必要采用观察者模式,借助不同开发平台的特征从旁边“瞅着”不同的“尝试”行为。 行业案例大家最熟悉的Windows XP、Vista之类都又类似的检查点措施,每当我们连续数次输入错误的口令后,就会暂时挂起登陆界面。 众多网站的的“忘记密码”也是在对多次失败后,响应的自然提示。 其他如上示例,对于检查点模式的典型应用——授权和认证而言,如何抽象请求主体(对于很多情况,还需要区分同一主体的不同行为,甚至于同一行为的行为特征模式),这些内容并非检查点模式的操作内容,相关讨论需要在认证器模式(Authenticator Pattern,也称作“认证子”等名称)和授权器模式(Authorizator Pattern, 也称作“授权子”等名称)部分介绍。
更多关注: 《设计模式——基于C#的工程化实现及扩展》 Security Design Pattern 系列 1 公钥体系与分布式环境要求
关于《设计模式——基于C#的工程化实现与扩展》电子书、示例代码发布,互动网预订开始
围炉取暖话“创业&升职”,请看《走出软件作坊》; 围炉取暖话“求职&面试”,请看《编程之美——微软技术面试心得》 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论