安全研究

安全研究
droplet's picture

CISSP知识点解析系列:qualitative vs quantitative

Qualitative (定性),Quantitative(定量)是风险分析的两种手段。两者的区别也很容易,就是定量需要用钱来做量的单位;而定性只是指出风险的等级。漏洞会被利用,利用之后就会威胁,有威胁就存在风险。但是风险对于不同的组织和人来说,衡量标准是不一样的。这里有一个例子展示了定性分析的方法,虽然方法很简单,但是背后所需的知识并不少。

Owasp

droplet's picture

kernelchina.org的安全实践(2)

对于服务器来说,安全加固有哪些必要的工作?

1)开始防火墙?开启防火墙,只允许访问启用的服务。但是这有几个不好的地方。一是开启防火墙肯定会影响服务器的性能,特别是在netfilter/iptables的实现里面,性能并不是首要的目标;而是服务和防火墙规则之间没有关联,需要分别设置,这会增加一定的难度。启用防火墙的好处是限制系统的访问点,或者是服务器有缺陷时,提供临时的防护手段(比如前段时间windows协议栈的一个问题)。

2)是否需要开始syncookie。开启syncookie可以一定程度上防止syn flood(看流量大小),但是对性能也有影响。

3)各种服务的日志。Fail2ban或者denyhost都是通过检查服务器的日志来确定攻击的。这种实现方式比较灵活(可以支持多种日志),但是性能较低(相对于集成在服务器里面的安全功能)。日志提供了安全里面可跟踪(trackable),可审计(auditable),是安全的基础之一。

4)定期检查。定期检查系统的安全状况,用nmap就可以实现。

droplet's picture

kernelchina.org的安全实践(1)

春节期间,把kernelchina.org从bluehost迁移到了linode,希望速度能快一点。bluehost提供的是虚拟主机(virtual host),是一个服务器支持多个用户,这种虚拟化是软件的虚拟化,虽然用户在使用上感觉是被隔离的,但实际上,完全隔离在这种模式下是做不到了,特别是在系统层面没有隔离,单靠服务器的虚拟化,很难模拟一个完全的隔离环境,所以很多其他用户的信息是可以看到的。虚拟主机很难提供SLA,所以有时性能是无法控制的(这个和服务器的位置也有关系,bluehost对中国用户的支持好像差一点)。linode提供的是虚拟服务器(virtual private server),是基于XEN的服务器,完全虚拟化,完全隔离,QoS也能保障,很多个人网站都推荐使用linode。为了提升kernelchina.org的用户体验,我也把服务器迁移到了linode,我的linode refer code是(点这个链接注册使用linode,可以给我20$的回扣~-~)

    http://www.linode.com/?r=ae1d176c39756bdf939b5110bf19612529216448

迁移的步骤如下:

1)在linode注册,并购买虚拟主机,我买的是512的plan,在网上看了其他人的评论,感觉512对于日访问量不到1000独立ip的网站应该是足够了。以后访问量上来了,可以换其他的plan。网站的访问速度,和网络的关系更大一点,和服务器的性能关系小一点。网络的访问速度当然是就近原则,hop越多,访问速度越慢。

2)安装服务器。linode大多数用户用的都是ubuntu server,我也选这个服务器。

3)设置密码,和ssh访问。好的密码相当于一把可靠的锁。linode提供两种访问方式,通过web管理虚拟主机,或者通过ssh登录虚拟主机。web管理,linode可以设置白名单(whitelist),只有白名单的ip可以管理你的虚拟主机。想想在防火墙设计里面,对于管理ip和管理端口,都是必选项。而且有些时候会限制只能从某个接口访问管理界面,或者只通过console管理。管理的流量和正常的流量分离,这样可以避免被窃听或者负载太大无法管理的情况。通过ssh登录虚拟主机,最好是配置只通过证书认证,而不是通过密码认证。使用证书的好处是密码不会在网络上传输,避免被窃听,而且应该禁止root访问ssh。对于密码尝试的次数也应该有限制,最大尝试次数5次,超过这个次数,应该禁止这个源地址访问一段时间。

   以前有一个server就是被破解了密码,服务器被入侵。后来重装,设置更复杂的密码,最重要的是安装了fail2ban (http://en.wikipedia.org/wiki/Fail2ban) 这个软件,对于密码扫描类的攻击,有很好的防护作用。

4)更新服务器。时刻保证服务器是最新的,安装了最新的安全补丁。ubuntu的安全更新服务,很好用。

5)安装服务器。apache, mysql以及php。这部分的优化和安全设置还没有做完,以后有时间再更新。

6)迁移数据。迁移数据分为两步,一是数据库和web文件;而是DNS。数据库和web文件迁移需要注意用户名和用户权限,web是一个入口,设置正确的权限才能避免服务器的信息泄露;而DNS迁移需要等待24小时,dns cache刷新之后,才能看到迁移的结果。

droplet's picture

CISSP知识点解析系列:Positive pressure

Positive pressure,意思是空气正压。通常在一个数据中心,为防止外面的空气进入数据中心,需要保持空气正压,也就是内部的大气压比外部的大。这样可以避免数据中心内部的空气污染而导致的设备损坏。同样的还有positive flow,也就是水应该向外流,也就是说设备所在的区域应该比四周要高(想想卫生间是怎么装修的)。空气正压在坦克的三防里面也有应用,前几天看一个坦克三防的介绍,要求坦克内部的气压比外面高,防止辐射,化学污染进入内部。

数据中心应该位于大楼的中间层,而且应该在本层区域的中心。这个也符合分层保护的原则,优先级最高,权限最高的要放在内层(想想操作系统的ring protection)。数据中心不能放在地下室(防止被水淹),不应有明显的标志(太明显了会吸引破坏者)。关于数据中心选址,建设有很多话题,以后会介绍。正规的数据中心规划应该遵循一些原则,这样可以避免灾难发生,或者是灾难发生后,对数据中心的破坏较小。

droplet's picture

CISSP知识点解析系列:数据分级

安全的第一步是识别资产,并把资产分级。对信息安全来说,信息就是资产,因此信息也需要分级。通常有两种分级方式,一种是商业用途的,一种是政府或者军事用途的,如下:

商业用途 政府或军事用途

Top Secret

Top Secret

Highly Confidential(confidential)

Secret

Proprietary(private)

Confidential

Internal Use only

Restricted

Public Documents

Unclassified

信息资产的等级从上而下,TOP secret是需要最高的保护,而Public或者unclassfied是对公众开放的信息。在看美国大片的时候,经常会看到标记TOP secret的纸袋,里面装着绝密的信息,里面的消息当然是知道的人越少越好。

对做信息安全的人来说,了解客户的业务,帮助客户识别资产并划分等级,并针对不同资产采取不同的保护方式,这样的安全方案才是有的放矢。

http://en.wikipedia.org/wiki/Top_secret

http://www.yourwindow.to/information-security/gl_dataclassification.htm

droplet's picture

CISSP知识点解析系列:CISSP简介

CISSP (Certified Information Systems Security Professional)是信息安全领域认可程度很高的一个认证。据说全球大概有6万左右持有CISSP证书的工程师。是CIO/CSO的入门证书。CISSP与厂商无关,所有不会考察某个具体产品的知识,而是倾向于概念性,通用的知识点。CISSP有十个知识领域(Common Body of Knowledge  or CBK),如下:

1)Access Control

2)Telecommunications and Network Security

3)Information Security Governance and Risk Management

4)Software Development Security

5)Cryptography

6)Security Architecture and Design

7)Operations Security

8)Business Continuity and Disaster Recovery Planning

9)Legal, Regulations, Investigations and Compliance

10)Physical (Environmental) Security

CISSP的特点是知识面广,但是考试本身并不会涉及太深入的知识,个人认为CISSP考试有以下几个难点:

1)知识面广。CISSP认证需要至少5年的相关领域的工作经验。但即使有5年的工作经验,也不可能对所有的知识领域有了解。安全本身又是一个交叉的行业,涉及软件,硬件,管理,站点设计,灾备等等。每个领域都有很复杂的知识体系,所以CISSP只是一个入门证书,需要持续不断的学习,并且在专门的领域深入去研究。CISSP让你对安全有一点感觉,至于做出一点事情,需要付出更大的努力。

2)英文考试。目前还没有中文版的考试,所以对中国人来说还是有一定的难度。由于涉及知识面广,所以专业术语特别多,词汇量有一定的要求。

3)毅力。准备考试,至少需要两到三个月的准备时间。每天至少要花两到三个小时。这对于已经工作的人来说,有一定的难度。如果不能坚持,很显然是没法通过考试的。

4)体力。CISSP考试时间需要六个小时,100多页的英文试卷,对人的精力和体力是一个考验。我的感觉是,考完了,饿坏了,准备的吃的没时间吃,也不太方便(准备了豆沙饼,放书包里面,不好拿出来,吃也麻烦,早知道带几个士力架或者巧克力,还好一点)。6个小时,答题,检查,上厕所,其实很紧张。

CISSP有三四百个知识点,需要理解,而不是死记硬背,所以对于知识积累还是有一定的好处的。这个系列就是对一些知识点的解析或者是解释。希望对想参加CISSP考试的朋友有帮助。学习CISSP,推荐几个站点

www.isc.org

http://en.wikipedia.org/wiki/Certified_Information_Systems_Security_Professional

www.chinacissp.org (对我帮助很大)

有疑问,也可以在这个网站上讨论。

droplet's picture

CISSP知识点解析系列:RAID

RAID (redundant array of independent disks; 或者redundant array of inexpensive disks),顾名思义,通过多个独立硬盘提供存储的高可靠性。RAID可以用软件实现,也可以用硬件实现,但是应该对应用软件透明。RAID实现里面,有三个基本概念:

1)Striping (条带)简单说就是把数据分散到多块硬盘上,其实就是一个cluster。它可以扩展逻辑硬盘的容量,并且由于是并行读写的,所以速度很快。

2)Mirroring (镜像)简单说就是把数据镜像到另外一块硬盘上,从而提供高可靠性。由于数据是冗余的,所以空间有浪费,而且速度较慢。

3)Parity (奇偶校验)附加额外的校验和,从而在硬盘损坏的情况下恢复数据,由于数据是冗余的,所以空间有浪费(但是比mirror好一点),而且速度也慢一点。

所有的RAID等级,基本上上面三个方面的组合,比如

RAID 0   Striping

RAID 1   Mirroring

RAID 2,3,4,  Striping and Parity, 2,3,4已经被淘汰了,不再使用

RAID 5 Striping and Parity 用的最多的RAID

RAID 6 Striping and Parity 是RAID 5的扩展

RAID 10 (1+0)或者RAID 01 (0+1) Mirroring and Striping提供高可靠性,同时扩展磁盘空间

还有很多其他的RAID 类型,基本上就是上面三个方面的组合,记住0,1,5就可以了。

最新的关于存储高可靠性的分类方式有变化,更简单一点:

1)Failure-resistant disk systems (FRDS)

2)Failure-tolerant disk systems (FTDS)

3) Disaster-tolerant disk systems (DTDS)

上面的分类,可靠等级依次递增,实现复杂度也依次递增。

RAID的概念可以用于存储的高可靠性,同样也适用于网络设备的高可靠性,比如网络设备里面的session备份。网络高可靠性的解决方案里面,也包括cluster和mirror两种方式。唯一不同的是parity不好实现。其实parity就是一个压缩存储的机制,对于网络设备这种要求低延时的设备,好像不太适用。

http://en.wikipedia.org/wiki/RAID

droplet's picture

hash攻击的几点想法

最近关于hash的攻击很火,这个问题存在的时间很久了。有几点想法,写出来和大家分享一下。

hash的好处是查找速度快,但是通过特殊的输入,会造成冲突链过长,查找会退化成一个链表遍历操作。对于hash来说,有几个重要的参数

1)hash table size,也就是hash的映射空间,很显然,hash表越大,映射的冲突几率就越小。

2)hash function,冲突取决于几个因素,一是输入源,二是hash function。好的hash function可以把非随机的输入源映射成随机的,比如MD5或者SHA这样的哈希函数,不同的输入,映射值肯定是不同的。但是MD5或者SHA的映射空间太大了,没法用做查找,而且映射速度也比较慢。所以一般用于校验而非查找。

3)冲突解决方法。链表法,相同哈希值的项,组成一个链表;开放地址法,有冲突,用另一个函数重新映射,这个方法对于冲突很多的情况是没办法解决的,只能覆盖或者丢弃冲突项。

对于完全随机的输入源,简单的哈希函数就可以保证映射也是随机的。好的哈希函数应该把输入的每个bit都考虑进来,并增加一个随机因子(系统初始化是设定,这样对相同的输入,每次系统重启后,映射值不同,对不同的系统,映射值也不同)。由于哈希表项是一个资源,每一个输入会占用一个资源,哈希表项并不是无限的,所以只要有足够多的无效输入就能耗尽哈希表项。所以这里的问题并不在于特殊构造的输入,而是如何能够识别哪些输入是无效的输入;再就是哈希表项的超时时间可以短一点。当冲突链退化到一定程度,应该启动攻击检测机制,限制来自同一源的输入。所以问题的核心是如何检测攻击,基于统计的方法应该是适用的。

在资源有限的情况下,对攻击源的识别就是重点,这也是DDoS检测和预防的重点。

http://en.wikipedia.org/wiki/Hash_table

droplet's picture

密码安全策略

最近一段时间,关于密码的安全问题暴露了很多,先是各大安全公司公布的常见密码,后来又是CSDN的密码泄露事件。按道理说,密码是第一道安全防线,应该引起足够的重视,但在实践过程中,问题依然不少。

首先是弱密码的问题。密码做为用户认证的一种方法(something you know),是最简单的,但也是最不安全的一种。密码的选择应人而异,选择密码首先要容易记,还有就是输入方便。其中最重要的就是容易记。这个和其他认证方式,比如something you have(比如token),something you are(比如指纹,虹膜等)相比,在于需要记。如果是随机选择的密码,显然是不容易记住,容易记住的,都是和个人习惯相关的一些密码。比如宠物名称,电话号码,键盘上相邻的字符等等。而且大多数人总是倾向于不同的网站用相同的密码,这样减小了记忆的负担(特别是一些不经常用到网站,时间长了,就都忘记了),但是一旦一个网站泄露了,其他网站也可能就没什么秘密可言了。

解决弱密码的问题,首先应该保证密码有足够的长度,通常会要求8个字符以上的密码;其次应该让可选的字符集足够大,包括数字,字母和一些特殊字符,如果能支持中文密码就更好了(输入比较困难,如果有,会有哪些常用密码?);还需要一个密码强度的检验功能,在用户密码强度不够的情况下能够提示(通常来说,包含数字,字母,大小写,以及特殊字符的密码应该会好一点,但是如果是一些常用的模式,强度也是不够。密码的强度取决于破解所需要的时间,但是abcd和abcd1234哪个强度更强一点哪?从破解角度来看,基本上是一样的)。有没有好用一点的密码管理工具哪?可以试一下。

解决了密码选择的问题,接下来就是密码传输的密码。在非安全通道上传输密码,至少应该把密码加密了。很多早期协议,用到都是明文传输密码,所以很容易被窃听。但是加密这个密码,用什么做密钥哪?也许做一个哈希是更好的选择,至少不用担心密钥的问题。

最后就是密码存储的问题。明文存储是不行的,所以要保存哈希值。通常是MD5或者SHA。为了避免字典攻击,还需要在这个哈希值外在加上一个Salt,也就是说,在生成密码是,在附加一个随机数,也就是说在用户密码上再附加一个系统的随机数。用户密码加这个随机数,然后算一个哈希值,增加攻击的难度。

有些人提出用openauth来解决密码保存的问题。openauth出来很多年了,也没见有多大的起色。一般都希望把用户抓在自己手里,谁愿意把用户数据托管在别人哪里。不过用openauth的好处是可以共享别人已积累的用户,现在最常见的用法,也仅仅是方便用户第一次使用而已,而且一旦auth服务出错,其他的服务都没法用了,还是谨慎一点好。

信息的重要性决定了密码的强度。对于一些更重要的信息,比如网上银行,网上购物等等,单是用密码已经无法保证安全,需要加入其他的手段,比如证书,token,one time password等等。密码泄露了,并不是每个人都着急,原因就在于信息对每个人的价值是不同的。

补充几点:

1)显示名和登录名分离,不要公开登录名。用户设置也应该设置不同的名称。

2)需要限制尝试登录的次数,帐号锁定后,需要验证才能解锁,当然,这个和需要保护信息的价值有关系。高价值的西信息,用户不会觉得麻烦,如果是不重要的信息,这样做,用户就会觉得麻烦。

3)动态密码有很大的应用空间,比如手机动态密码,或者软件动态密码(RSA token据说要几百美元,太贵了,部署成本有点高)

4)任何安全策略的制定,都是基于对资产的评估,比如信息资产的价值。太多或太少都是不合适的。

droplet's picture

Foundations of Security: What Every Programmer Needs to Know 读书笔记(六)

9 - Password Security

先跳到密码这一章,看看密码管理都需要注意哪些问题。密码是安全防护的第一道防线,是认证和访问控制的

重要手段。以电子商务为例,最终要的安全手段就是安全连接SSL和密码保护。用户名和密码可以验证用户

身份,安全合理的应用流程是电子商务的第一步。

密码如何存储?明文肯定是不能用了,所以有了密文存储(使用单向HASH),同时结合了SALT。在看SALT

这一段时没明白SALT有什么用,后来又在WIKI上查了一下,原来SALT可以预防预先生成密码本(也就是把

一些常见的密码用同样的HASH生成密码本,用的时候直接可以用密文去比较,当然前提是得到密码文件,用

了SALT以后,很难提前生成密码本,SALT相当于把密码加长了)。

9.1 - Password Security

为了保护密码,或者使用更安全的密码,有很多”best practice“,看看你见过几种?

1)strong passwords:这个不用说,基本上都有这个要求,在注册时还会提示你所使用密码的强度。密码

使用字符越宽,效果就越好。所以对哪些只能使用字母和数字做密码的网站,我基本持怀疑态度。但是字符集

放宽之后,被注入的风险会增加,也有不好的一面。

2)Limiting login:多次登录失败后,锁定密码。这里举的一个反例时使用错误密码做DoS攻击。想想还是

很有效,一个攻击,把正常用户的密码给锁定了,那网站的服务电话估计会被打爆。但是对于银行ATM机就

不怕这个问题,因为ATM还有卡片认证(something you have),这个要比用户名(something you know)

要健壮的多。所以互联网上一般不锁定帐号,只是会把帐号停用一段时间,而且不用人工解锁。

3) Honeypot用一些简单的用户名,密码来抓非法入侵。比如用guest/test等帐号。这个有点小儿科了,有用

吗?

4) Artifical delays:每次认证有时间间隔。这个用不好,可能会影响用户体验。

5) Filtering:强制用户使用健壮的密码,好像和1有重复。

6)Last login:上次登录的时间。这个用的很多,但是我一般都没注意看,呵呵

7) Aging:定期更换密码。建议淘宝也用一下这个策略,比较有效。我公司就是这样搞的。

8)Image authentication:图片认证。这个是放钓鱼的。用户注册时同时上传一个图片,并在登录时检查

一下这个图片。这个不错,先给用户名,然后出图片,然后输密码。不过用起来有点麻烦。

9)Pronounceable:声音密码,没搞清楚是怎么回事。

Syndicate content