文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
因此,文件上传导致的常见问题有:
Web
脚本语言,服务器的Web
容器解释并执行了用户上传的脚本,导致代码执行。Flash
的策略文件crossdo-main.xml
,黑客用以控制Flash
在该域下的行为(其他通过类似方式控制策略文件的情况类似)。认证的目的是为了认出用户是谁,而授权的目的是为了决定用户能够做什么。
形象地说,假设系统是一间屋子,持有钥匙的人可以开门进入屋子,那么屋子就是通过“锁和钥匙的匹配”来进行认证的,认证的过程就是开锁的过程。
钥匙在认证过程中,被称为“凭证”,开门的过程,在互联网里对应的是登录。
可是开门之后,什么事情能做,什么事情不能做,就是“授权”的管辖范围了。
那实际问题来了,拿着钥匙的人,就一定是屋子的主人吗?
密码是互联网作为最基础的认证手段。
密码的优点在于成本低,认证过程实现比较简单,缺点是容易被破解。
因为密码不太安全,因此大多数银行会增加手机动态口令、数字证书、宝令、支付盾、第三方证书等都可用于用户认证。这些不同的认证手段可以互相结合,使得认证的过程更加安全。
什么是Session Fixation
呢?举一个形象的例子:
假设A有一辆汽车,A把汽车卖给了B,但是A并没有把所有的车钥匙交给B,还自己藏下了一把。这时候如果B没有给车换锁的话,A仍然是可以用藏下的钥匙使用汽车的。
这个没有换锁而导致的安全问题,就是SessionFixation
问题。
在用户登录网站的过程中,如果登录前后用户的SessionID
没有发生变化,则会存在Session Fix-ation
问题。
具体攻击的过程:
X
(攻击者)先获取到一个未经认证的SessionID
;Ses-sionID
交给用户Y
去认证;Y
完成认证后,服务器并未更新此SessionID
的值(注意是未改变Ses-sionID
,而不是未改变Session
);X
可以直接凭借此SessionID
登录进Y
的账户。解决 Session Fixation 的正确做法是,在登录完成后,重写 SessionID。
在互联网安全领域,权限控制的问题都可以归结为访问控制的问题。
在设计方案时,要满足最小权限原则。
基于角色的访问控制,是目前较为广泛的方法。
事先在系统定义不同的角色,不同角色拥有不同的权限,因此角色是权限的集合,通过控制不同角色的权限高低,即可完成权限管理。
在 Web 安全中,更关心的是怎样用好加密算法,做好密钥管理,以及生成强壮的随机数。
在加密算法的选择和使用上,有以下建议:
ECB
模式;RC4
);HMAC-SHA1
代替MD5
(甚至是代替SHA1
);key
做不同的事情;salts
与IV
需要随机产生;当你不知道该如何选择时,有以下建议:
CBC
模式的AES256
用于加密;HMAC-SHA512
用于完整性检查;salt的SHA-256
或SHA-512
用于Hashing
。DDOS
又称为分布式拒绝服务,全称是Dis-tributed Denial of Service
。
DDOS
是利用合理的请求造成资源过载,导致服务不可用。分布式拒绝服务攻击,将正常请求放大了若干倍,通过若干个网络节点同时发起攻击,以达成规模效应。
简单理解,DD 攻击就是破坏应用的可用性。
比如一个停车场总共有100个车位,当100个车位都停满车后,再有车想要停进来,就必须等已有的车先出去才行。
如果已有的车一直不出去,那么停车场的入口就会排起长队,停车场的负荷过载,不能正常工作了,这种情况就是“拒绝服务”。
DDOS 攻击示意图
上面介绍的是网络层 DDOS,而应用层 DDOS 不用于网络层,因为是发生在三次握手后的事。
CC
攻击全称Challenge Collapsar
,中文意思是挑战黑洞,因为以前的抵抗DDoS
攻击的安全设备叫黑洞,顾名思义挑战黑洞就是说黑洞拿这种攻击没办法。
CC
攻击的原理是通过代理服务器或者大量肉鸡模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标 CPU 资源,造成拒绝服务。
DDoS
攻击的是网站的服务器,针对 IP 的攻击,而CC
攻击是针对网站的页面攻击,是攻击服务器资源。
用术语来说就是,一个是 WEB 网络层拒绝服务攻击(DDoS),一个是 WEB 应用层拒绝服务攻击(CC)。
网络层就是利用肉鸡的流量去攻击目标网站的服务器,针对比较本源的东西去攻击,服务器瘫痪了,那么运行在服务器上的网站肯定也不能正常访问了。
而应用层就是我们用户看得到的东西,就比如说网页,CC攻击就是针对网页来攻击的,CC攻击本身是正常请求,网站动态页面的正常请求也会和数据库进行交互的,当这种"正常请求"达到一种程度的时候,服务器就会响应不过来,从而崩溃。
当正则表达式写得不好时,就有可能被恶意输入利用,消耗大量资源,这种攻击被称为Re-DOS
。
应用层拒绝服务攻击的本也是对有限资源的无限制滥用所造成的,解决这个问题的核心思路就是限制每个不可信任的资源使用者的配额。
在解决应用层拒绝服务攻击时,可以采用验证码,提高一定的门槛。
优秀的安全方案必须具备的两个条件:
假设要设计一个安全方案,保护网站的 Web 登录入口,如何着手呢?
所以提高密码复杂度这个安全需求,其本质其实可以分解为:
比如检查一个账户在一段时间内的登录失败次数,或者检测某一个 IP 地址在一段时间内的登录行为次数。
在用户注册时,可以收集到用户填写的个人资料,如果发现用户使用了诸如:用户名、邮件地址、生日、电话号码之类的个人信息作为密码,则应当立即进行提示,防止密码中包含个人信息。
而这过程,也就是威胁分析过程,是设计安全方案的基础。
“某家在线购物网站为了对抗密码暴力破解,规定短时间内账户登录失败 5 次,就将锁定账户一个小时。
该网站的业务中,提供了一个在线竞拍的功能,用户可以给喜欢的商品出价,后来者必须给出一个更高的价格。在拍卖时间截止后,商品将为出价高者所得。
某黑客在给商品出价后,在网站上继续观察谁出了一个更高的价格,当他发现有人出价更高时,就去恶意登录这个用户的账户:当登录失败次数达到 5 次时,该账户就被系统锁定了。
订单系统和账户安全系统是相关联的,当订单系统发现账户被锁定后,该用户的出价也同时作废。这样就能以极低的价格,获取所想竞拍的物品。
某电视台的网站开发了一个新的功能:
允许网友们提供当地的天气信息,该信息将在电视新闻中滚动播出。为了防止垃圾信息,网友们提供的信息是经过人工审核后才播出的。
但是这套系统在设计时还允许网友们对信息进行编辑。
此处存在一个逻辑漏洞:
审核通过后的信息,如果被用户重新编辑了,不会再次进行审核,也会直接发送到电视新闻的滚动条中。
SDL 的全称是 Security Development Lifecy-cle
,即:安全开发生命周期。
SDL 的大致步骤如下:
SDL 过程大致可以分成 16 个阶段:
通过培训能贯彻安全策略和安全知识,并在之后的执行过程中提高执行效率,降低沟通成本。
培训对象包括开发人员、测试人员、项目经理、产品经理等。
培训内容会覆盖安全设计、威胁建模、安全编码、安全测试、隐私等方面知识。
在项目确立之前,需要提前与项目经理或者产品 owner 进行沟通,确定安全的要求和需要做的事情。
确认项目计划和里程碑,尽量避免因为安全问题而导致项目延期发布。
用于确定安全和隐私质量的最低可接受级别。
在项目开始时定义这些标准可加强对安全问题相关风险的理解,并有助于团队在开发过程中发现和修复安全 bug。
应用于整个软件开发项目的质量门,用于定义安全漏洞的严重性阈值。例如,应用程序在发布时不得包含具有关键
或重要
评级的已知漏洞。
用于确定软件中需要深入评析的功能环节,包括的信息如下:
在设计阶段应仔细考虑安全和隐私问题,在项目初期确定好安全需求,尽可能避免安全引起的需求变更。
减小攻击面通过减少攻击者利用潜在弱点或漏洞的机会来降低风险。减小攻击面包括关闭或限制对系统服务的访问,应用最小权限原则
,以及尽可能地进行分层防御。
为项目或产品面临的威胁建立模型,明确可能来自的攻击有哪些方面。
开发团队使用的编译器、链接器等相关工具,可能会涉及一些安全相关的环节,因此在使用工具的版本上,需要提前与安全团队进行沟通。
许多常用函数可能存在安全隐患,应该禁用不安全的函数或 API,使用安全团队推荐的函数。
代码静态分析可以由相关工具辅助完成,其结果与人工分析相结合。
动态分析是静态分析的补充,用于测试环节验证程序的安全性。
模糊测试是一种专门形式的动态分析,它通过故意向应用程序引入不良格式或随机数据诱发程序故障。
模糊测试策略的制定,以应用程序的预期用途,以及应用程序的功能和设计规范为基础。
项目经常会因为需求变更等因素导致最终的产出偏离原本设定的目标,因此在项目后期重新对威胁模型和攻击面进行评析是有必要的,能够及时发现问题并修正。
受 SDL 要求约束的每个软件在发布时都必须包含事件响应计划。
最终安全评析(FSR)是在发布之前仔细检查对软件执行的所有安全活动。通过 FSR 将得出以下三种不同结果:
在通过 FSR 或者虽有问题但达成一致后,可以完成产品的发布。但发布的同时仍需对各类问题和文档进行存档,为紧急响应和产品升级提供帮助。
bug
,激励程序员编写安全的代码。bug
上报。waf
。到这里,整本书已经看完了,很多内容都是选择性跳过,因为不太能理解,有较多提及到服务器、PC
安全等,以及部分源码讲解,因为水平有限,只能部分跳过。
但收获还是不少,比如常见的XSS
、sql
注入的方法,权限管理、互联网安全的的场景、安全开发流程等,尤其是互联网安全,与日常工作息息相关,直接通过例子来讲解,非常清晰。
下一篇会讲解个别常用的安全工具,加深对安全的印象。