⽩帽⼦讲Web安全(第⼀章总结)
1.1实施安全评估的基本过程
安全问题的本质:信任问题
信任域,信任边界
安全三要素:机密性,完整性,可⽤性
如何实施安全评估?
资产等级划分------------------威胁分析------------风险分析---------------------确认解决⽅案
资产等级划分:明确⽬标是什么,要保护什么,互联⽹安全的核⼼问题,是数据安全的问题,对互联⽹公司拥有的资产进⾏等级划分,就是对数据做等级划分。例如有的公司最关⼼的是客户资料,有的公司最关注的员⼯资料信息,做等级划分的过程,需要同各个业务部门的负责⼈⼀⼀进⾏沟通,了解公司最重要的资产是什么。(公司拥有什么数据,数据的重要程度,为后续的安全评估过程指明⽅向),完成资产等级的划分,也就是对要保护的对象有个⼤致的了解,接下来就是划分信任域和信任边界。
威胁分析:如何确定威胁来⾃于哪⾥?在安全领域,所有能够造成危害的来源称为威胁,⽽把可能出现的损失成为风险,风险⼀定是和损失联系在⼀起的。
威胁分析就是将所有的威胁都出来,怎么?----------------威胁建模,在进⾏威胁分析的时候,要尽可能地不遗漏威胁。在维护系统安全的时候,有可能花费很多时间与精⼒实施安全⽅案,但是攻击者却利⽤了实现完全没有想到的漏洞,因此在确定攻击⾯的时候,应该尽可能的全⾯。
微软提出的STRIDE模型:分析威胁时,可以从以下6个⽅⾯去考虑。
威胁定义对应的安全属性
Spoofing(伪装)冒充他⼈⾝份认证
Tampering(篡改)修改数据或代码完整性
Repudiation(抵赖)否认做过的事情不可抵赖性
Information Dislosure(信息泄露)机密信息泄露机密性
Denial of Service(拒绝服务)拒绝服务攻击可⽤性
Elevation of Privilege(提升权限)未经授权获得许可授权
风险分析:Risk = Probability*Damage Potential
影响风险⾼低的因素,除了造成损失的⼤⼩外,还需要考虑到发⽣的可能性。
如何科学的衡量风险?微软提出的DREAD模型,指导我们应该从那些⽅⾯去判断⼀个威胁的风险程度。
等级⾼(3)中(2)低(1)
Damage Potential 获取完全验证权限;执⾏管理操作;⾮法上传⽂件泄露敏感信息泄露其他信
Reproducibility攻击者可以随意再次攻击攻击者可以重复攻击,但有时
间限制
攻击者很难
重复攻击过
程Exploitability初学者在短期内能掌握攻击⽅法熟练的攻击者才能完成这次攻漏洞利⽤条
击件⾮常苛刻
Affected users所有⽤户,默认配置,关键⽤户部分⽤户,⾮默认配置极少数⽤
户,匿名⽤
Discoverability漏洞很显眼,攻击条件很容易获得在私有区域,部分⼈能看到,
需要深⼊挖掘漏洞发现该漏洞及其困难
确认解决⽅案:设计安全⽅案,安全评估的产物就是安全解决⽅案,解决⽅案⼀定具备针对性,其针对性是由资产等级划分,威胁分析,风险分析等阶段的结果给出的。
观点:很多⼈认为安全和业务是冲突的,因为往往为了安全,要牺牲业务。
安全确切的说,应该属于产品的⼀种属性
⼀个好的安全⽅案应该对⽤户是透明的,尽可能的不要改变⽤户的使⽤习惯
⼀个优秀的安全⽅案具备哪些特点?
能够有效的解决问题
⽤户体验好
⾼性能
低耦合
潘霜霜 林峰易于扩展与升级
1.2 设计具体安全⽅案的准则和技巧
1.2.1 Secure By Default原则
A:⿊⽩名单原则
⿊⽩名单思想,尽可能的多使⽤⽩名单,不使⽤⿊名单
例1:在制定防⽕墙访问控制策略时,若⽹站只提供Web服务,那么正确的做法应该是只允许⽹站服务器的80端⼝和443端⼝对外提供服务,屏蔽除此之外的端⼝(⽩名单做法)。
若使⽤⿊名单就会出现问题,假设⿊名单的访问策略是:不允许SSH端⼝对Internet开放,那么就要审计SSH的默认端⼝:22端⼝是否开放了Internet。但在实际⼯作过程中,经常会发现有的⼯程师为了偷懒或图⽅便,私⾃改变了SSH的监听端⼝,⽐如把SSH的端⼝从22改到了2222,从⽽绕过了安全策略。
好看的古装武侠剧例2:在⽹站的⽣产环境服务器上,应该限制随意安装软件,需要制定统⼀的软件版本规范。这个规范的制定也可以选择⽩名单的思想来实现。按照⽩名单的思想,应该根据业务需求,列出⼀个允许使⽤的软件以及软件版本的清单,在此清单外的软件则禁⽌使⽤和安装。如果允许⼯程师在服务器上随意安装软件的话,则可能会因为安全部门不知道、不熟悉这些软件⽽导致⼀些漏洞,从⽽扩⼤攻击⾯。
注:在使⽤⽩名单时,应当注意避免出现类似通配符“*”
B:最⼩权限原则:
即是要注意系统只授予主体必须的权限,⽽不要过度授权。这样能有效减少系统,数据库,⽹络,应⽤等出错的机会。
很多时候,开发者不会意识到业务授予⽤户的权限过⾼,⼀定要反问,您确定您的程序⼀定需要访问Internet吗?
费翔资料纯⽂本,富⽂本
洛克王国超进化纯⽂本,只能有⽂字,基本的标点符号,富⽂本可以有图,可以有各种特殊的标点符号、分段等格式
1.2.2 纵深防御原则
两层含义:
A:在不同层⾯,不同⽅⾯实施安全⽅案。
例如:在设计安全⽅案时,尽可能考虑到web应⽤安全,os系统安全,数据库安全,⽹络环境安全等不同层⾯。不同安全⽅案之间需要互相配合,构成⼀个整体,共同组成防御体系。
常见的⼊侵案例中,⼤多数是利⽤Web应⽤的漏洞,攻击者先获得⼀个低权限的webshell,然后通过低权限的webshell上传更多的⽂件,并尝试在服务器上提升权限为root;接下来攻击者再进⼀步尝试渗透内⽹,例如数据库服务器所在的⽹段。此类⼊侵案例中,若在攻击过程中任何⼀个环节设置有效的防御措施,都可能导致⼊侵过程失败,没有哪种⽅案能够解决所有问题,因此⾮常有必要将风险分散到系统的各个层⾯。
B:在正确的地⽅做正确的事情,要求我们深⼊理解威胁的本质,从⽽做出应对措施。即要在解决根本问题的地⽅实施有效的针对性的⽅案。
例:XSS防御技术发展过程
UTM产品Unified Threat Management ⼏乎集成了所有主流安全产品的功能,例如防⽕墙。VPN,反垃圾邮件,IDS,反病毒等
张根硕女友
1.2.3数据与代码分离原则(适⽤于各种由于“注⼊”⽽引发安全问题的场景)
在Web安全中,由于“注⼊”引起额问题⽐⽐皆是,例如XSS,SQL Injection,CSRF Injection,X-Path Injection
1.2.4不可预测性原则
Secure by Default 是时刻要牢记的总则,纵深防御是要更全⾯、更准确的看待问题;数据与代码分离是从漏洞成因上看问题;不可预测性原则是从克服攻击⽅法的⾓度看待问题。
这是⼀种即使⽆法修复代码,但是让攻击变得⽆效的成功的防御。
⽐如:让程序的栈基址变得随机化,使攻击程序⽆法准确猜测到内存地址,⽽⼤⼤的提⾼攻击的门槛。再⽐如在⼀些应⽤系统中,使⽤随机的id。那么如果攻击者再
想使⽤类似于
for(int i=0;i<1000;i++){
赞美女人气质高雅漂亮的词句delete(url="xxx?id="+i);
}
这种⽅法的攻击将⽆效,起码是先爬取id的值,再进⾏delet操作。同样的,现在利⽤token,利⽤加密算法,随机算法,哈希算法等,其实都可以到这条原则的影⼦。