[白帽子将WEB安全笔记]我的安全世界观

不想拿到root的黑客不是好黑客

 

中国黑客发展阶段:启蒙时代、黄金时代、黑暗时代

 

早期,黑客攻击的目标以系统软件居多

 

防火墙、ACL(access control list)技术使得直接暴露在互联网上的系统得到了保护

 

在攻击系统软件到攻击web应用这个阶段,还有一个重要的分支:桌面软件安全,或者叫做客户端软件安全,其代表是浏览器攻击,典型场景:黑客构造恶意网页,诱使用户使用浏览器访问该网页,利用浏览器中存在的安全漏洞,比如一个缓冲区溢出漏洞,

 

执行shellcode,通常是下载一个木马并在用户机器里执行。常见的针对桌面软件的攻击目标,还包括微软的Office系列软件,Adobe Acrobat Reader、多媒体播放软件、压缩软件等装机量大的软件,都曾经成为黑客们的最爱。

 

web安全的兴起:

web1.0时代,更多的是关注服务器端动态脚本,比如将一个可执行脚本(俗称webshell)上传到服务器上,从而获得权限。<文件包含>

 

SQL注入的出现是WEB安全史上的一个里程碑

 

XSS的出现则是WEB安全史上的另一个里程碑

 

黑帽子组合安全问题,白帽子分解问题;白帽子所看所想要求更加全面、宏观,黑帽子只需以点破面,找到对他们最有用的点并以此渗透

 

No patch For Stupid             最大的漏洞就是人

 

安全问题的本质是信任的问题

 

数据从低等级信任域流向高等级信任域需要经过信任边界的安全检查,从高等级信任域流向低等级信任域则不需要

 

一旦我们作为决策依据的条件被打破、被绕过,那么就会导致安全假设的前提条件不再可靠,变成一个伪命题。因此,把握信任条件的度,使其恰到好处,正是设计安全方案的难点所在,也是安全这门学问的艺术魅力所在

 

破除迷信,没有银弹

 

安全是一个持续的过程

 

安全三要素:机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)

 

机密性:要求保护数据内容不能泄露,加密是实现机密性要求的常见手段

 

完整性:要求保护数据内容是完整、没有被篡改的,常见的保护一致性的手段是数字签名

 

可用性:要求保护资源是“随需而得” <DOS,Denial of Service>就是攻击可用性的典型方法

 

<后来有人加入了可审计性、不可抵赖性等,但最重要的还是前面三个>

 

如何实施安全评估(4个阶段):资产等级划分、威胁分析、风险分析、确认解决方案,在这几个阶段中,上一个阶段将决定下一个阶段的目标,需要实施到什么程度

 

资产等级划分:(明确目标是什么,要保护什么)互联网安全的核心问题,是数据安全的问题。对互联网公司拥有的资产进行等级划分,就是对数据做等级划分,然后划分信任域和信任边界

 

威胁分析:威胁(Threat)是可能造成危害的来源,风险(Risk)是可能会出现的损失。威胁分析就是把所有威胁都找出来(头脑风暴<可以确定攻击面、Attack Surface>、使用模型(较科学))

 

微软提出的一种威胁建模方法:STRIDE模型

 

 

漏洞:系统中可能被威胁利用以造成危害的地方

风险分析:风险组成:RSIK=Probability * Damage Potential 

微软DREAD模型

 

 

设计解决方案:安全评估的产出物,就是安全解决方案。解决方案一定要有针对性,这种针对性就是由资产等级划分、威胁分析、风险分析等阶段的结果给出的

 

有些人认为安全和业务是冲突的,因为往往为了安全,要牺牲业务的一些易用性或者性能。但是笔者认为安全也应是产品的一种属性,一个从未考虑过安全的产品,至少是不完整的

 

没有不安全的业务,只有不安全的实现方式

 

作为安全工程师,要想的就是如何通过简单而有效的方案,解决遇到的安全问题。安全方案必须能够有效抵抗威胁,但同时不能过多的干涉正常的业务流程,在性能上也不能拖后腿。好的解决方案对用户应该是透明的,尽可能地不要改变用户的使用习惯。

 

最终,一个优秀的解决方案应该具备一下特点:

能够有效解决问题;用户体验好;高性能;低耦合;易于扩展与升级

 

白帽子兵法:

 

1.Secure By Default原则

 

1.1 白名单、黑名单

 

1.2 最小权限原则:最小权限原则要求系统只授予主体必要的权限,而不是过度授权,这样能有效减少系统、网络、应用、数据库出错的机会

 

2.Defense in Depth(纵深防御原则):两层含义:首先,要在各个不同层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体;其次,要在正确的地方做正确的事情:即在解决根本问题的地方实施针对性的安全方案。纵深防御要从不同的层面、不同的角度对系统做出整体的解决方案。木桶原理,设计安全方案时最怕出现短板。...非常有必要将风险分散到系统的各个层面。就入侵的防御来说,我们需要考虑的可能有Web应用安全、OS系统安全、数据库安全、 网络环境安全等。

 

XSS防御技术发展过程:过滤输入中的特殊字符、区分富文本和非富文本,encode非富文本、对富文本开始做语法树分析、综合方案

 

UTM(Unified Threat Management),全称是“统一威胁管理”,几乎集合了所有主流安全产品的功能,比如防火墙、VPN、反垃圾邮件、IDS、反病毒等

 

3.数据与代码分离原则:该原则广泛适用于各种由于“注入”而引发安全问题的场景,缓冲区溢出也可以认为是违反了这一原则的后果。

 

在Web安全中,由“注入”引起的安全问题比比皆是,如XSS、SQL Injection、CRLF Injection、X-Path Injection

XSS产生的原因是HTML Injection或者JavaScript Injection

 

4.不可预测性原则:比如微软的ASLR,WEB中的数据id随机

不可预测性原则,可以巧妙的用在一些敏感数据上,比如CSRF的防御技术中,通常会适用一个token来进行有效性防御。这个token能成功防御CSRF,就是因为攻击者在实施CSRF攻击的过程中,是无法提前预知到这个token值的。因此要求token足够复杂时,不能被攻击者猜到。

不可预测性的实现往往需要用到加密算法、随机数算法、哈希算法等

 

安全是一门朴素的学问,也是一种平衡的艺术

所有的程序本来没有漏洞,只有功能,但当一些功能被用于破坏,造成损失时,也就成了漏洞。我们定义一个功能是否是漏洞,只看后果而不应该看过程。在我看来,漏洞只是对破坏性功能的一个统称而已

posted on 2016-05-17 20:04  C语言程序设计  阅读(545)  评论(0编辑  收藏  举报

导航