Foundations of Security: What Every Programmer Needs To Know 读书小结

标签: 行业动感 | 发表时间:2011-08-05 22:05 | 作者:kernelchina joyoner
出处:http://www.tektalk.org

初略地看了一下这本书配套的PPT,有些想法想写下来和大家交流一下。我个人的背景是对网络,操作系统比较熟一点,但是对安全的理解顶多就是个初学者。虽然我在几个做网络安全设备的公司工作过,现在也还在从事建造网络安全设备的工作。但是,做网络设备盒子和安全还是有很大的不同。最近闲来下来,正好可以补充一下自己这方面的知识,也顺便和业界的同仁交流一下心得。

知识要形成体系才能在做系统的时候,把方方面面都考虑进来。虽然面面俱到是不可能的,但至少有一个坚实的基础,或这为未来预留一定的空间。这也是弯曲的陈首席经常强调的系统工程师,而不是网络工程师或者内核工程师的原因。做为一个系统工程师,当然需要考虑如何建造系统,让系统显得壮观,坚实,但是也不能忽略系统安全方面的需求。安全的重要性不用多说,但不是每个系统工程师都能意识到。

给大家推荐这本书《Foundations of Security: What Every Programmer Needs To Know》。理由是这本书的思路足够清晰,问题能讲清楚,而且页数也不多,英语足够简单易懂。最重要的,是有配套的PPT,这样没时间看书的人可以浏览一下PPT,抓住重点就可以了。当然,安全的实践是没有那么简单的,业界的牛人基本上都是在寻找漏洞,攻击系统,很少有人从设计,编码,测试,以及应用角度去解决安全的问题,这也是我努力的方向之一。

说到安全,首先要关注安全目标,书中列出了几个安全目标:

1) Authentication

2) Authorization

3) Confidentiality

4) Data / Message Integrity

5) Accountability

6) Availability

7) Non-Repudiation

具体的意思就不一一解释了,wiki或者是百度百科搜一下就都明白了,至于是不是真的明白了,要看实践的效果如何了。

为了达到这些安全目标,我们会采用不同的安全措施和产品。比如身份认证,加密,防篡改,入侵检测等等。不同的安全产品所达到的安全目标是不一样的,所以定位就很重要。懂产品的读者可以说说这方面的考虑。

我们来看看攻击是如何影响安全目标的:(攻击的类型也是引用这本书列出的攻击,更多的读者可以自己补充)

1)Defacement,书中的例子是网页被篡改,这个影响的是Data/Message integrity。

2)Infiltration(入侵),这个影响的是认证(authentication)和authorization(授权)。

3)Phishing,这个影响的是认证(authentication),用户需要检查相应网站是否是真实合法的网站。

4)Pharming,DNS被篡改,这个影响的是Data/Message integrity。

5)Insider Threats,这个影响的是认证和授权,也可以包括日志审计(Accountability)。

6) Click Fraud,这个影响的是认证。

7)Denial of Service (DoS),这个影响的是可用性(Availability)。

8)Data Theft and Data Loss,这个影响的是认证,授权和保密(Confidentiality)。

为什么这些攻击能够成功,可能有两个原因:一是没有防护措施,二是防护措施失效了(被绕过了,或者是检查不够严密)。防护措施失效可能有多种原因,但是没有防护措施是说不过去的。所以系统安全设计的目标是如何有效利用安全措施以保证系统安全。安全设计有一些很好的最佳实践(good practice)和原则(principle),下面是书中列出的实践和原则。

1)Principle of Least Privilege:最小权限。给予完成工作所需的最小权限,只做权限范围内的事。权限的范围与具  体的任务和角色相关。最直观的一个例子就是wordpress的权限管理。wordpress默认定义了如下几种角色:

“订阅者”,“投稿者”,“作者”,“编辑”,“管理员”,每个角色的权限范围不同。wordpress的权限是  包含的,比如“投稿者”就拥有“订阅者”的权限。有些时候可能需要完全隔离的角色,比如一些安全设备里面的“策略编辑”和“日志审计”就需要完全独立的权限。额外的权限意味着暴露更多系统的接口,就越容易被攻击。

2)Defense-in-Depth:深度防御。也可以解释为多层次防御。比如从L3到L7的的多层防御,或者是从操作系统层到应用程序层的多层防御。不同层次看到的东西是不一样的,所以深层防御并不是做重复的事。

3)Diversity-in-Defense:多种防御手段。不多说了。

4)Securing the Weakest Link:保护最薄弱环节。不多说了。

5)Fail-Safe Stance:安全地失败。最简单的一个例子就是口令认证。如果口令三次错误,需要锁定账号,而不是无限地尝试下去。

6)Secure By Default:缺省的安全。一个简单的例子,防火墙的缺省策略应该是禁止所有,这样才能起到访问控制的作用。如果是允许所有,那么在禁止策略失效的情况下,系统就成了不设防的堡垒。

7)Simplicity:简单。哪里都适用的原则,不管是做系统,还是设计安全功能。

8)Usability for Security:安全的可用性。可用性,易用性是和安全矛盾的目标吗?这个在弯曲评论上有很多争论,看结论是可用性,易用性和安全是可以统一的目标。并不是安全产品就很难用,就应该难用。但是,如何达到这样的统一?

9)Security Features Do Not Imply Security:使用了安全产品并不一定就意味着安全。这句话听起来有点矛盾。 但是另一句话可能更清楚一点“Security is a process, not a product”。有些安全目标是安全产品可以达到,但 有些不是。这里面最重要的是人的因素。产品需要人用,风险需要人去评估和克服。常说安全是“三分技术,七分管理”,这个当然是见仁见智。但是从更大的范围来说,某一个安全产品只能算是一道屏障,而不是全部。一个产品,不但是能用,好用,还要看怎么用。还有一句话是“Security is about risk management“,使用安全产品只能降低风险,而不能完全消除风险,所以,相应的风险管理措施也必须有。

现在做安全设备的厂商,出问题更多的是系统的稳定性,性能,网络功能的实现等等。很少有专门提到某个安全功能不好用,或者失效的情况。这也可能是不同的厂商有自己的强项和侧重点。从网络设备转过来的厂商,安全功能差一点;从一开始就做安全的厂商,网络功能差一点。两方面都强的,谁能举个例子?

说完原则和最佳实践之后,就是具体的技术,暂时还没有什么可以拿出来说的东西,等以后明白点了,再写出来和大家分享。重要的不是说,而是做,与读者共勉。

参考资料:

1)http://www.foundationsofsecurity.com

2)http://code.google.com/intl/zh-CN/edu/submissions/daswani/

3)https://www.owasp.org/index.php/Main_Page

4)http://www.webappsec.org/


相关 [foundations of security] 推荐:

Foundations of Security: What Every Programmer Needs To Know 读书小结

- joyoner - 弯曲评论
初略地看了一下这本书配套的PPT,有些想法想写下来和大家交流一下. 我个人的背景是对网络,操作系统比较熟一点,但是对安全的理解顶多就是个初学者. 虽然我在几个做网络安全设备的公司工作过,现在也还在从事建造网络安全设备的工作. 但是,做网络设备盒子和安全还是有很大的不同. 最近闲来下来,正好可以补充一下自己这方面的知识,也顺便和业界的同仁交流一下心得.

cxf + spring 的WS Security示例

- - RSS - IT博客云
WSPasswordCallback的 passwordType属性和 password属性都为null,你只能获得用户名(identifier),一般这里的逻辑是使用这个用户名到数据库中查询其密码,然后再设置到 password属性,WSS4J会自动比较客户端传来的值和你设置的这个值. 你可能会问为什么这里CXF不把客户端提交的密码传入让我们在 ServerPasswordCallbackHandler中比较呢.

诺顿发布 Mobile Security Lite 应用

- 乌鸦 - 谷安——谷奥Android专题站
Norton(诺顿)可是在为你的安全担心哟,它可是可以给你带来“安全感”的哟. Symantec(赛门铁克)研究发现“Android 仍比 PC 安全…”,不过安防是免不了得特别是这样一个开放的系统中,于是乎他们发布了这个 Norton Mobile Security Lite 应用,这是一个免费的应用,具备一些基本的功能,包括通过短信远程锁定你的手机,扫描恶意文件和应用并删除它们,它还可以自动下载最新的安全库文件.

RSA Security 被攻破的途徑

- MorrisC - Gea-Suan Lin's BLOG
今年三月的時候,RSA Security 被攻破,攻擊者順利取得 SecurID 的資料,這些資料很有可能降低 SecurID 的安全性. 也因此有了 Lockheed Martin 被攻擊的事情. 在官方的說明「Anatomy of an Attack」中,有提到「2011 Recruitment plan.xls」是使用 Excel 檔案,加上 Adobe Flash vulnerability (CVE-2011-0609) 攻入,而這是個 0-day attack (在當時).

什麼是 HSTS – HTTP Strict Transport Security

- - SSORC.twSSORC.tw
HSTS 是很久之前提出的技術,不過它現在也已成為國際標準了 ( RFC 6797). HSTS (強制安全傳輸) 是為加強瀏覽網站時多一層保護,它讓我們在無論瀏覽 HTTP 或 HTTPS 都是透過 SSL / TLS 協定溝通連線,其實 HSTS 跟數位憑證很相近,都是用來辨識我們瀏覽的網站是否安全.

Shiro security限制登录尝试次数

- - CSDN博客推荐文章
之前讲了Shiro Security如何结合验证码,这次讲讲如何限制用户登录尝试次数,防止多次尝试,暴力破解密码情况出现. 要限制用户登录尝试次数,必然要对用户名密码验证失败做记录,Shiro中用户名密码的验证交给了 CredentialsMatcher. 所以在CredentialsMatcher里面检查,记录登录次数是最简单的做法.

免費 Avira Internet Security 2012 小紅傘授權序號(180天)

- gbcwbz - 免費資源網路社群
Avira Internet Security 2012 將成為小紅傘公司下個階段的主力產品,這套防毒產品力求可用性、安全性與穩定性,Avira Internet Security 2012 主要是針對網際網路使用者所設計,除了更新原有的掃描引擎、核心保護技術,對於上網族群提供更多保護,例如遏止網路釣魚、垃圾郵件、防火牆,以及提昇網路購物的安全性.

奔的家园 | CAS 与 Spring Security 3.1整合配置详解

- - Delicious/searchfull
该方式通过获取CAS系统里的角色,来支持CAS与Spring Security的关联,注意该文章authorities部分. 一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分. 用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统.

spring security 3.1.0 控制用户重复登陆

- - CSDN博客架构设计推荐文章
通过配置我们可以实现两个需求 1、限制不允许第二个用户登录,2、第二个登陆用户踢掉前一个登陆用户 . 假设你的spring架构已经可以使用了(其他的主要功能完成),需要增加登录限制功能. 注:这里只写配置不写原理(不懂的就问度娘),其实个人认为先配置好跑起来再研究下原理最好了. 通过sessionRegistry可以获取系统当前在线人数和登录用户信息.

spring security 3中推荐使用BCrypt算法加密密码

- - jackyrong
spring security 3中推荐使用BCrypt算法加密密码了,以前使用的是md5,. Md5PasswordEncoder 和 ShaPasswordEncoder,现在不推荐了,推荐用bcrpt. Bcrpt中的salt可以是随机的,比如:.   其中strenth为长度. 已有 0 人发表留言,猛击->> 这里<<-参与讨论.