【网安入门】学习笔记(十)

题外话

  至此,我发现我学习看的视频还是有一些基础知识上面的疏漏,所以要先看一下理论知识,再继续学习。那么就从之前看了一点的,并且也被称为网安入门书的《白帽子讲WEB安全》开始看好了。


WEB安全世界观

1 浅谈黑客

  黑客一词最早仅是hacker一词的音译,表示研究并深入理解计算机系统和网络的人,但是伴随着黑客群体的良莠不齐,开始出现了以营利为目的的攻击行为,黑色产业链形成,原来黑客精神所代表的的Open、Free、Share也消失殆尽。

2 谁在搞破坏

  区别于精通计算机技术,能够自己挖掘漏洞,并编写exploit的一部分黑客,主要在计算机犯罪、网络犯罪中造成主要破坏的就是“脚本小子”,他们对计算机原理和各种编程技术了解比较粗浅,只能靠编译别人的代码来进行攻击。

  【exploit】
  Exploit 的英文意思就是利用,它在黑客眼里就是漏洞利用。有漏洞不一定就有Exploit(利用),有Exploit就肯定有漏洞。

3 黑客技术发展

  早期由于WEB技术发展不成熟,主要攻击目标以系统软件居多,并且由于通过攻击系统软件,黑客们往往能够直接获取root权限。此时出现了很多经典漏洞和“exploit”,例如由著名黑客组织TESO编写过一个攻击SSH(安全外壳协议)的exploit(出现在黑客帝国中),并在exploit的banner中宣称利用它入侵过 cia.gov(美国中央情报局)。
  在早期WEB非主流的互联网中,基于SMTP、POP3、FTP、IRC等协议的服务拥有着绝大多数的用户,黑客攻击WEB只能获得一个较低权限的账户,吸引力较低。

  【SMTP——Simple Mail Transfer Protocol, SMTP】
  简单邮件传输协议是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange) DNS。
  【POP3——Post Office Protocol - Version 3】
  “邮局协议版本3”是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。
  【FTP——File Transfer Protocol】
  文件传输协议,FTP支持两种模式:Standard (PORT方式,主动方式,端口号20,21),Passive (PASV,被动方式,临时端口,端口号大于1023小于655 35)。
  【IRC——Internet Relay Chat】
  “因特网中继聊天”是一种透过网络的即时聊天方式。其主要用于群体聊天,但同样也可以用于个人对个人的聊天。IRC使用的服务器端口有6667(明文传输,如irc://irc.freenode.net)、6697(SSL加密传输,如ircs://irc.freenode.net:6697)等。

  随着防火墙、ACL技术的兴起,使得直接暴露在互联网上的系统得到了保护。

  【ACL——Access Control Lists】
  访问控制列表(ACL)是一种基于包过滤的访问控制技术,它可以根据设定的条件对接口上的数据包进行过滤,允许其通过或丢弃。访问控制列表被广泛地应用于路由器和三层交换机。借助于访问控制列表,可以有效地控制用户对网络的访问,从而最大程度地保障网络安全。

  在03年的冲击波蠕虫(针对windows操作系统RPC服务,445端口)造成数百万台机器被感染,难以估量的损失后,网络运营商坚决地在骨干网络上屏蔽了135、445等端口连接。网络安全重视程度达到空前高度。
  由于运营商、防火墙对于网络的封锁,使得暴露在互联万上的非WEB服务越来越少,并且WEB逐渐成为互联网的主流,黑客们便将目光转移到WEB上了。
  在互联网安全领域所经历的这个阶段,还有另外一个重要的分支——桌面软件安全(客户端软件安全),代表为浏览器攻击。

4 WEB安全兴起

  在WEB1.0时代,人们更关注服务器端动态脚本的安全问题,例如将webshell(可执行脚本)上传到服务器上以获得权限。PHP语言至今仍然只能靠较好的代码规范来保证没有文件包含漏洞,而不能从语言本身杜绝安全问题,由WEB安全初期认知的不足造成。
  SQL注入的出现是WEB安全史上的一个里程碑,SQL注入攻击可以获取很多重要、敏感数据,甚至是获取系统的访问权限。至今仍是WEB安全领域中的一个重要组成部分。
  XSS(跨站脚本攻击)是另一个里程碑,在MySpace的XSS蠕虫事件后才开始对XSS重视。
  伴随WEB2.0兴起,XSS、CSRF等攻击更为强大。WEB攻击的思路也从服务器端转向客户端,转向浏览器和用户。

  【CSRF——Cross-site request forgery】
  跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

5 安全是一个持续的过程

  安全方案的设计和实施过程中没有一劳永逸,攻击和防御技术就是在不断的碰撞和对抗的过程中发展的。相较于搞破坏的“黑帽”,处于建设方的“白帽”需要建立完善的毫无漏洞的防线,才能保证系统的安全,此时就要求白帽们坚持不懈的守在各种技术的发展前线。

6 安全三要素

  安全本质上就是检查和过滤,在流向高等级信任区时将危险的东西检查出来并过滤掉,此时就有一个问题,哪些是信任的哪些又是应该被过滤的,即信任域的划分,信任边界的确定。
  在设计安全方案之前,需要正确、全面地看待安全问题。全面看待安全问题,首先要理解安全问题的组成属性,即三要素CIA。
  C(Confidentiality):机密性,要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。
  I(Integrity):完整性,要求保护数据内容是完整、没有被篡改的,常见的技术手段是数字签名。

  【数字签名】
  就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
  数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
  数字签名是个加密的过程,数字签名验证是个解密的过程。

  A(Availability):可用性,要求保护资源是“随需而得”,拒绝服务攻击破坏的是安全的可用性。

  【DoS——Denial of Service】
  拒绝服务攻击即是攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之一。其实对网络带宽进行的消耗性攻击只是拒绝服务攻击的一小部分,只要能够对目标造成麻烦,使某些服务被暂停甚至主机死机,都属于拒绝服务攻击。拒绝服务攻击问题也一直得不到合理的解决,究其原因是因为网络协议本身的安全缺陷,从而拒绝服务攻击也成为了攻击者的终极手法。攻击者进行拒绝服务攻击,实际上让服务器实现两种效果:一是迫使服务器的缓冲区满,不接收新的请求;二是使用IP欺骗,迫使服务器把非法用户的连接复位,影响合法用户的连接。

  在这三个最基本的要素上,后来还增加了可审计性和不可抵赖性等。

7 实施安全评估

  一个简单的安全评估过程,可以简单地份分为4个阶段:
  资产等级评估–》威胁分析–》风险分析–》确认解决方案

8 资产等级划分

  资产等级划分是所有工作的基础,帮助我们明确目标是什么,要保护什么。
  在互联网基础设施已经比较完善的今天,互联网的核心其实是由用户数据驱动的,所以互联网安全的核心问题,是数据安全的问题。
  对互联网公司拥有的资产进行等级划分,就是对数做等级划分。由于不同公司的侧重点不同,在做资产等级划分的过程,需要与各个业务部门的负责人一一沟通,来为后续的安全评估过程指明方向。
  完成资产登记划分后,就要发奋信任域和信任边界,通常从网络逻辑上来划分,最重要的数据放在数据库,WEB应用从数据库中读/写数据,并对外提供服务,最外层是不可信任的Internet。
在这里插入图片描述
  这是一个最简单的例子,实际会遇到复杂的多的情况。

9 威胁分析

  划分好信任域后,再来确定危险的来源。在安全领域里,把可能造危害的来源称为威胁(Threat),而把可能会出现的损失称为风险(Risk),风险一定是和损失联系在一起的,注意区分。
  威胁分析即找出所有威胁,一般是采用头脑风暴法,还有利用威胁建模的方式来寻找威胁。
  微软提出的威胁建模——STRIDE模型

威胁 定义 对应的安全属性
Spoofing(伪装) 冒充他人身份 认证
Tampering(篡改) 修改数据或代码 完整性
Repudiation(抵赖) 否认做过的事情 不可抵赖性
InformationDisclosure(信息泄露) 机密信息泄露 机密性
Denial of Service(拒绝服务) 拒绝服务 可用性
Elevation of Privilege(提升权限) 未经授权获得许可 授权

  头脑风暴的过程可以确定攻击面(Attack Surface)。
  然而在花费大量时间与精力实施的安全方案上,还是有完全没有想到的漏洞(漏洞:系统中可能被威胁利用以造成危害的地方)被攻击者利用完成入侵,往往是由于攻击面考虑不够全面。
  在很多时候需要经常回顾和更新现有的模型,可能存在很多威胁,但并非每个威胁都造成难以承受的损失和危害,那么如何衡量它呢,这里就要判断风险的高低。

10 风险分析

  风险组成因素:
  Risk = Probability * Damage Potential
  科学地衡量风险,利用由微软提出的DREAD模型。

等级 高(3) 中(2) 低(1)
Damage Potential 获取完全验证权限;执行管理员操作;非法上传文件 泄露敏感信息 泄露其他信息
Reproducibility 攻击者可以随意再次攻击 攻击者可以重复攻击,但有时间限制 攻击者很难重复攻击
Exploitability 初学着在短期内能掌握攻击方法 熟练的攻击者才能完成这次攻击 漏洞利用条件非常苛刻
Affected users 所有用户,默认配置,关键用户 部分用户,非默认配置 极少用户,匿名用户
Discoverability 漏洞很显眼,攻击条件很容易获得 在私有区域,部分人能看到,需要深入挖掘漏洞 发现该漏洞及其困难

  表中,高、中、低三个等级分别以3、2、1的分数代表其权重值。
  计算某一个威胁的风险值:
  Risk = D(3) + R(3) + E(3) + A(3) + D(3) = 3 + 3 + 3 + 3 + 3 = 15
  判断风险高低:
  高危:12~15分
  中危:8~11分
  低危:0~7分
  虽然科学的模型可以帮助我们,但是模型只能起到一个辅助作用,最终做出决策的还是人。

10 设计安全方案

  安全评估的产出物,就是安全解决方案,解决方案的针对性由资产等级划分、威胁分析、风险分析等阶段的结果给出的。
  在设计安全方案时应该尽可能地不要改变商业需求的初衷。好的安全方案对用户应该是透明的。
  一个优秀的安全方案应该具备:
  (1)能够有效解决问题;
  (2)用户体验好;
  (3)高性能;
  (4)低耦合;
  (5)易于扩展与升级。

11 安全方案设计技巧

  Secure By Default 原则
  是最基本,最重要的原则,一个方案设计得是否足够安全,与有没有应用这个原则有很大的关系,可以归纳为白名单、黑名单的思想。
  “白名单”做法:
  在制定防火墙的网络访问控制策略时,如果网站只提供Web服务,那么就应该只允许网站服务器的80和443端口对外提供服务,屏蔽除此之外的其他端口。
  “黑名单”做法:
  不允许SSH端口对Internet开放,那么就要审计SSH的默认端口:22端口是否开放了Internet。在实际工作过程中,常有工程师为了偷懒或图方便,将SSH端口进行修改,例如改成2222,从而绕过安全策略。
  安装软件亦是如此。
  在WEB安全中,在处理用户提交的富文本时,考虑到XSS的问题,进行的安全检查,对标签使用白名单规则要比黑名单更能避免疏漏。
  虽然使用白名单会让系统变得更安全,但并不是用了白名单就一定安全,白名单是建立在信任的基础上的,一旦信任基础不存在,那么安全也就荡然无存。

  【XSS——Cross Site Scripting】
  跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意的Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

  在Flash跨域访问请求里,是通过检查目标资源服务器端的crossdomain.xml文件来验证是否允许客户端的Flash跨域请求的,使用的是白名单思想,例如:

<cross-domain-policy>
<allow-access-from domain="*.taobao.com"/>
<allow-access-from domain="*.taobao.net"?>
<allow-access-from domain="*.tbcdn.cn"/>
</cross-domain-policy>

  指定只允许特定域的Flash对本域发起请求,可是当这个信任列表中的域名变得不可信,例如:

<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>

  表示任意域的Flash都能访问本域的数据,就会造成安全隐患,所以在选择使用白名单的时候,要避免出现类似通配符“*”的问题。

12 最小权限原则

  Secure By Default 的另一层含义就是“最小权限原则”,是安全设计的基本原则之一。要求系统只授予主题必要的权限,不过度授权。

13 纵深防御原则

  Defense in Depth也是设计安全方案时的重要指导思想。
  纵深防御需要在不同层面、不同方面实施安全方案,相互配合,构成整体;还要在解决根本问题的地方实施针对性的安全方案。
  设计安全方案时最怕出现短板,在入侵案例中,往往是利用WEB应用的漏洞,先获得一个低权限的webshell,然后通过低权限的webshell上传更多的文件,来进行进一步的攻击。
  为了尽可能地设置有效的防御措施,需要将分先分散到系统的各个层面,如WEB应用安全、OS系统安全、数据库安全、网络环境安全等,来组成整个防御体系。
  纵深防御要求我们深入理解威胁的本质,从而作出正确的应对措施。
  XXS防御技术的发展
在这里插入图片描述
  过滤特殊字符容易存在误杀,例如
  1<2 可能变成 1 2
  对于XSS防御,对系统取得的用户输入进行过滤其实不太合适,XSS真正产生危害的场景是在用户的浏览器上,或者说服务器端输出的HTML页面,被注入了恶意代码。只有在拼装HTML时输出,系统才能获得HTML上下文的语义,才能判断出是否存在误杀等情况。
  为了迎合市场的需要,安全厂商推出了一种产品UTM(Unified Threat Management统一威胁管理),集成了如防火墙、VPN、反垃圾邮件、IDS、反病毒等。UTM的定位为没有精力自己做安全方案的中小企业服务,但实际使用效果未必好。

14 数据与代码分离原则

  这一原则广泛使用于各种由于“注入”而引发安全问题的场景。
  缓存区溢出,也可以认为是程序违背了这一原则的后果——程序在栈或者堆中,将用户数据当做代码执行,混淆了代码与数据的边界,从而导致安全问题的发生。
  在WEB安全中,由“注入”引起的问题:XSS、SQL Injection、CRLF Injection、X-Path Injection等。

  【缓存区溢出】
  缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。
  在计算机程序中,就是数据使用到了被分配内存空间之外的内存空间。而缓冲区溢出,简单的说就是计算机对接收的输入数据没有进行有效的检测(理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。
  【SQL Injection】
  SQL注入即恶意或者是出于某些意图而更改用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据。
  SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。
  【CRLF Injection】
  CRLF是Carriage-Return Line-Feed的缩写,意思是回车换行。黑客能够将CRLF命令注入到系统中。它不是系统或服务器软件的漏洞,而是网站应用开发时,有些开发者没有意识到此类攻击存在的可能而造成的。
  许多网络协议,包括HTTP也使用CRLF来表示每一行的结束。这就意味着用户可以通过CRLF注入自定义HTTP header,导致用户可以不经过应用层直接与Server对话。
  【X-Path】
  XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
  【X-Path Injection】
  与SQL注入类似,当网站使用用户提供的信息构建XML数据的XPath查询时,就会发生XPath注入攻击。通过将故意格式错误的信息发送到网站,攻击者可以了解XML数据的结构,或访问他通常无法访问的数据。如果XML数据用于身份验证(例如基于XML的用户文件),他甚至可以提升他在网站上的权限。

  以XSS为例,它产生的原始是 HTML Injection 或 JavaScript Injection,如页面代码如下:

<html>
<head>test</head>
<body>
$var
</body>
</html>

  其中 $var 是用户能够控制的变量,那么对于这段代码来说:

<html>
<head>test</head>
<body>

</body>
</html>

就是程序的代码执行段。
  而

$var

就是程序的用户数据片段。
  如果把用户数据片段 $var 当成代码片段来解释、执行,就会引发安全问题。
  比如,当 $var 的值是:

<script src=http://evil></script>

时,用户数据就被注入到代码片段中。解释这段脚本并执行的过程,是由浏览器来完成的——浏览器将用户数据里的<script>标签当做代码来解释——这显然不是程序开发者的本意。
  根据数据与代码分离原则,在这里应该对数据片段 $var 进行安全处理。
  如果这里就是要执行一个<script>标签弹出一段文字,那么就应该重写代码片段:

<html>
<head>test</head>
<body>
<script>
alert("$var1");
</script>
</html>

  在这种情况下,<script>标签也变成了代码片段的一部分,用户数据只有 $var1 能够控制,从而杜绝了安全问题的发生。

15 不可预测性原则

  不同于之前的原则,不可预测性原则是从克服攻击方法的角度看问题。
  Windows系统用户深受缓冲区溢出之苦,微软无法要求运行在系统中的软件没有漏洞,因此它采取使漏洞的攻击方法失效。例如,使用DEP来保证堆栈不可执行,使用ASLR让进程的栈基址随机变化,从而使攻击程序无法准确的猜测到内存地址。也算是一次成功的防御。

  【DEP】
  DEP是数据执行保护的英文缩写,全称为Data Execution Prevention。数据执行保护(DEP) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。
  【ASLR】
  aslr是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。

  不可预测性(Unpredictable),能有效的对抗基于篡改、伪造的攻击,例如
  一个内容管理系统中的文章序号是按照数字升序排列的,id=1000,id=1002,id=1003…
  如果攻击者想要批量删除这些文章,只需写个简单的脚本:

for (i=0; i<100000; i++){
	Delete (url + "?id=" + i);
}

  如果id的值变得不可预测:
  id=dnsinfdjios, id=sniufndkfb, id=aoiioncndf…
  此时攻击者再想批量删除文章,只能通过爬虫来把所有的页面id全部抓取下来,再一一进行分析,提高了攻击的门槛。
  不可预测性原则,可以用在一些敏感数据上。比如CSRF的防御术中,通常会使用一个token来进行有效防御。

  【token】
  在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。,token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。

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

(附)

  良好的代码规范对网络安全人员尤为重要,由于代码不规范造成的漏洞比比皆是,比如0字节截断和cgi.fix_pathinfo。

  【0字节截断】
  0x00,%00,/00 之类的截断,本质都是一样的,只是不同表现方式而已。
  截断漏洞出现的核心就是chr(0),这个字符不为空 (Null),也不是空字符 (“”),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。
  例如上传文件 filename=test.asp%00.txt 获得参数值是test.asp,而不是txt文件。
  【cgi.fix_path】
  nginx文件类型错误解析漏洞,这个“漏洞”是这样的:
  假设有如下的 URL:http://phpvim.net/foo.jpg ,当访问 http://phpvim.net/foo.jpg/a.php 时,foo.jpg 将会被执行,如果 foo.jpg 是一个普通文件,那么 foo.jpg 的内容会被直接显示出来,但是如果把一段 php 代码保存为 foo.jpg,那么问题就来了,这段代码就会被直接执行。这对一个 Web 应用来说,所造成的后果无疑是毁灭性的。

发布了32 篇原创文章 · 获赞 7 · 访问量 2707

猜你喜欢

转载自blog.csdn.net/qq_36756476/article/details/98087916
今日推荐