[TOC]

第一章.安全世界观

安全通用名称解析:

  • exploit:漏洞利用代码;
  • Script Kids:脚本小子对计算机原理以及各种漏洞了解粗浅,编译别人所写代码,自己动手开发能力较弱;
  • 黑帽子与白帽子:攻击利用黑客技术造成破坏和损失与防御反黑客攻击(维护网络安全),而根据实际环境确立其对象性质不同比如红蓝对抗。实际上在网络中破坏永远比建设更容易且成本更低,人才是最大的漏洞;
  • 挂马: 指在网页中插入一段恶意代码利用浏览器漏洞执行任意代码(shellcode)的攻击方式;
  • 钓鱼:通过模仿知名网站的相似页面来欺骗用户;

如果学习网络安全技术?

  • 首先您必须了解其安全本质才能在遇到各种任何复杂的情况都可以轻松应对;
  • 其次需要知识与实践的积累不断重复充实自己;

在道哥白帽子讲安全中对中国黑客发展分为三个时代

  • 1.启蒙:个人爱好,好奇心与求知欲,热衷于open Free Share;
  • 2.黄金:时间节点中美黑客大战, 普遍特征是年轻,有活力,充满激情,技术上参差不齐,黑客精神日益减少;
  • 3.黑暗时代:封闭功利性,最为纯粹的黑客精神实质上已经死亡;

黑客技术发展历程:

  • 早期攻击目标以系统软件居多目标是网络,操作系统以及软件等领域
  • 中期攻击目标以协议服务居多,由于防火墙以及ACL访问控制设备出现后原本裸露在互联网中的系统被保护起来,在此期间发生RPC蠕虫事件由于运营商对135与445端口的屏蔽。
  • 后期攻击目标以web 2.0/3.0为目标,其标志着Web网页应用的成熟,这一阶段标志着攻击目标逐渐移动到Web这块大蛋糕之中,同一时期具有代表性的客户端软件层面的安全攻击(缓冲区溢出漏洞,shellcode执行)。
  • 补充时期(2019-2020)年由于5G的发现嵌入式、PLC设备、物联网设备安全成为攻击目标同时APT攻击也层出不穷。

Web攻击技术发展阶段:

  • Web1.0 阶段:关注服务端动态脚本的安全问题。通过上传webshell获得网站权限,主要注入等新问题
  • Web2.0 阶段:XSS(蠕虫)、CSRF 以及SSRF 漏洞变得普及
  • Web3.0 阶段:涉及到了业务逻辑层面漏洞。

安全本质揭露:

  • 网络安全问题其本质就是人的信任问题(因为他是最错误又是最核心的一环)

Q:如何解决信任问题?

答:即首先从安全角度进行将不同重要程度的区域划分出来,设置两个不同信任域之间的边界(信任边界);
在实际设计中数据从高等级的信任域流向低等级的信任域,是不需要经过安全检查的;而数据从低等级的信任域流向高等级的信任域则需要经过信任边界的安全检查;


安全三要素

描述:如果要全面的了解认识安全问题就要了解其本质的组成属性,通过无数人的实践将安全属性总结为安全三要素(CIA),实际中可以将其扩展诸如可审计、不可抵赖性等;

  • 机密性(Confidentiality): 即保护数据内容不被泄露,常见的加密是实现机密性要求的常见手段;
  • 完整性(Integrity): 要求保护的数据不被篡改保证数据完整性;
  • 可用性(Availability): 要求保护资源是随需而得的,比如拒绝服务攻击破坏的就是安全的可用性;


安全评估实施

安全评估过程:资产等级划分-> 威胁分析-> 风险分析->确定解决方案。

  • 1.资产等级划分:数据驱动应用与安全,互联网安全的核心问题是数据安全的问题,逻辑网络上划分Internet -> WebApp -> DatsStore;
  • 2.威胁分析:确定威胁可能来源于那些地方但是常常个人是无法全面确定其攻击面需要内外结合(即威胁情报)尽可能地不遗漏威胁,而边界信任策略是基石,常用威胁(Threat)与风险(Risk)分值进行评判;

    WeiyiGeek.STRIDE由微软提出的威胁模型

    WeiyiGeek.STRIDE由微软提出的威胁模型

  • 3.风险分析:可能白帽子一定不会陌生把因为你提交漏洞的评判标准由此而来 RISK = Probability * Damage Potential

    WeiyiGeek.DREAM也是由微软提出的风险分析模型

    WeiyiGeek.DREAM也是由微软提出的风险分析模型

  • 4.安全设计方案,安全与产品的关系,安全应该是产品的一种属性,一个未考虑安全问题的产品是不完整的, 安全产品设计上应该做到高聚合,低耦合,易于扩展
    一个优秀的安全方案应该具有以下特点:能够有效解决问题,用户体验,高性能,低耦合,易于扩展和升级;


设计安全方案技巧

描述:他是安全评估实施后的产物即安全方案,以下即为其内容;

在设计时候最基本也是最重要的原则就是Secure By Default其囊括了以下几方面:

  • 1.黑白名单: 常用于制定防火墙策略(开发指定端口),服务器限制软件的安装(制定统一的软件版本规范),Web中限制用户提交的富文本内容(只允许输入指定标签),Flash跨域也设置那些站点允许发起跨域请求;
  • 2.最小权限原则: 最小权限原则要求系统只授予柱体必要的权限而不要过度授权,以减少系统/网络/应用/数据库出错的机会;

纵深防御原则(Defense in Depth)设计安全方案时的重要指导思想,对于一个复杂的系统他是必须的:

  • 首先在不同层面/不同方面实施安全方案,避免出现疏漏不同安全方案之间需要相互配合构成一个整体(木桶效应);
  • 其次需要在有问题的地方实施针对性的安全方案(XSS防御);

数据与代码分离原则:适用于各种注入引发的安全问题;

  • 防范各种注入问题:缓冲区溢出(将用户数据当作代码执行),由于混淆了代码与数据的边界导致的;

不可预测性原则(Unpredictable):从克服攻击方法的角度看问题;

  • 1.微软为了能让Windows更加安全增加了需要对抗缓冲区溢出等内存攻击功能,采用的解决方法一是使用DEP保证堆栈不可执行,二是使用ASLR让进程启动时的栈基址随机变化(其大大的提高了攻击难度),对于Attack来说就是不可预测性;
  • 2.不可预测性(Unpredictable),能有效地对抗基于篡改/伪造的攻击,例如特定索引遍历/CSRF的Token防御;其实现常常需要使用带加密算法/随机数算法/哈希算法


本章总结:

  • 1.如果新技术不在一开始就考虑安全设计的话,防御技术就必然落后于攻击技术,导致攻击与防御不断重复,并且设计安全方案需要根据实际情况(程标-经费)为前提进行设计、扩展,安全设计不要设想在非常极端的前提条件除非您有这方面的需求;
  • 2.安全是一个持续的过程,不要过度依赖相信安全设备(后门、0day就问您怕不怕)而忽略人带来的影响;
  • 3.实施的过程是层层递进的,前后之间有因果关系。
  • 4.任何时候都应该记住模型是死的而人是活的,再好的模型也是需要人来使用的。在确定攻击面,以及判断风险高低时,都需要有一定的经验这也是安全工程师的价值所在;
  • 5.安全是一门朴素的学问也是一种平衡的艺术(无论是传统安全还是互联网/物联网安全其实质是差不多的);

第二章.浏览器安全

描述:随着互联网和web2.0的发展浏览器成为了互联网最大的入口,同时其安全性也面临着挑战;

  • 2.1 同源策略(Same Origin Policy): 它是一种约定,也是浏览器最核心也是最基本的安全功能;而我们的Web是建立在同源策略基础之上的,而浏览器只是针对同源策略的一种实现;

Q: 同源策略的作用?

答: 首先肯定是为了安全,它限制了来自不同源的 document 或 脚本,对当前”document”读取或者设置某些属性;
影响源的因素: 主机,子域名,端口,协议
(1) 需要注意对于当前页面来说,页面内存放的js文件的域并不重要,重要的是加载js页面所在域是什么(例如:网站调用其它站点的js则它所在域就是当前网站)
(2) 在浏览器中 <script> <img> <iframe> <link> 等标签都进行跨域加载资源,而不受同源策略的限制;不同于XMLHTTPRquest的是通过src属性加载额资源时浏览器限制JS的权限使其域上不能读、写返回的内容;
(3) 而对于XMLHttpRequest来说它可以访问来自同源策略对象的内容,但其也受到同源策略的约束,可通过W3C指定的XMLHttpRequest跨站访问标准即通过目标域返回的HTTP头来授权是是否允许跨域访问(得以实现是因为HTTP头对于JavaScript来说一般是无法控制的);
(4) 除了DOM、Cookie、XMLHttpRequest会受到同源策略的限制外,浏览器第三方插件也有各自的同源策略比如Flash、Java Applet、Silverlight、Google Gears等都有自己的访问策略

  • 2.2 浏览器沙箱: 主要防止挂马的Attack方式
    在Windows中浏览器密切结合DEP、ASLR、SafeSEH等操作系统提供的保护技术对抗内存攻击,同时浏览器开发处理出了多进程架构(即进程之间相互独立运行且互不影响-google Chrome 第一个采用),从安全性上有非常大的提高;

多线程架构的好处就是当发送崩溃的时候,多线程浏览器只是崩溃当前的Tab页,而单进程浏览器则会崩溃整个浏览器进程;

例如:Google Chrome 插件进程Flash、Java、pdf等于浏览器进程严格的隔离,因此不会相互影响; 渲染引擎(Rendering Engine Process)由Sandbox进行隔离,网页标签代码需要与浏览器内核进行通信、与操作系统通信都需要通过IPC channel其中会进行一些安全检查;

WeiyiGeek.Google Chrome

WeiyiGeek.Google Chrome

Q: 说了这么多那么什么是沙箱?

答: Sandbox即沙箱泛指资源隔离类模块的代名词,其目的是让不可信的代码运行在一定的环境中限制不可信的代码访问隔离区以外的资源;
对于浏览器来说采用Sandbox技术无疑让不可受信任的网页代码、JavaScript代码云在一个受限的环境中,从而保护本地桌面的系统安全;
由于浏览器安全是一个整体而浏览器所加载的一些第三方插件不受Sandbox(现有改观)导致漏洞频发比如Flash、Java 、PDF、.NetFramework 成为攻击的热点;

  • 2.3 恶意网址拦截: 攻击者常常在正常的网页中采用scriptiframe标签加入恶意的网址,常见的恶意网址分为两种类型网站即挂马网站钓鱼网站;大量的钓鱼网站查看地址 https://data.phishtank.com/

Q: 如何防范钓鱼网站?
答: 需要从三方面着手提供者、访问者、浏览器;浏览器利用EV SSL 证书(Extended Validation SSL Certificate)增强对安全网站的识别,它是全球的数字证书颁发机构与浏览器厂商一起打造的增强型证书其特征就是浏览器会给予其EV SSL证书特殊待遇(会在浏览器地址栏中的绿色进行呈现以对抗钓鱼网站);

  • 2.4 浏览器对抗XSS 推出了XSS Filter功能:

    • 例如微软IE 8中捕获URL中的XSS攻击规则是值得学习的;
    • 例如火狐Firefox 提出的Content Security Policy(CSP)也是值得学习的,其做法是由服务器端返回一个HTTP头,并在其中描述页面应该遵守的安全策略;
      1
      2
      3
      4
      5
      # CSP 使用方法
      # 1.#浏览器将信任来自weiyigeek.top及其子域下面的内容;
      X-Content-Security-Policy: allow 'self' *.weiyigeek.top
      # 2.#浏览器除了信任自身的来源外还可以加载任意域的图片,来自media.com的媒体以及允许userscripts.example.com 的脚本(其余一览拒绝)
      X-Content-Security-Policy: allow 'self'; img-src *; media-src media.com; script-src userscripts.example.com
  • 2.5 浏览器的畸形URL处理由于浏览器厂商的不同则处理结果便不同,虽然这些功能比较友好但是有可能被黑客利用用于绕过一些安全软件或者安全模块;

    1
    2
    3
    4
    5
    # Chrome
    www.google.com\abc ==> www.google.com/abc

    # Firefox IE Chrome
    www.ex.com?abc ==> www.ex.com/?abc


本章总结:

  • 浏览器是互联网最重要的入口之一,在安全攻防中他是不可被忽略的特别是同源策略、以及浏览器插件、恶意网址检查等显示得越来越重要;

Web 跨域漏洞:
XSS 跨域常见的XSS Filter 一般是先对用户输入的HTML原文作HTML Parse解析成为标签对象后,再针对标签匹配XSS的规则;

1
2
3
4
- 1.过滤输入中的特殊符号
- 2.区分富文本和非富文本(进行编码)
- 3.对富文本进行语法树分析
- 4.设计综合方案

Flash 虽然已经在2020年被各大浏览器厂商所弃用(不安全诟病),但是互联网中任然存在一大部分的基于Flash的应用软件比如头像上传处理等等,所以在学习Web安全时了解它也是必不可少的;

Flash 跨域访问请求里通过目标服务器端例如WeiyiGeek.top/crossdomain.xml文件来验证是否允许当前客户端的发起跨域请求(实际上受到同源策略的影响):

1
2
3
4
5
6
7
<!-- # 其它域的Flash向weiyigeek.top发起访问请求,首先会检查目标站点是否存在crossdomain.xml,其次则验证发起请求的域是否在许可范围内 -->
<cross-domain-policy>
<!-- 白名单思想:只允许weiyigeek.top的子域访问 -->
<allow-access-from domain="*.weiyigeek.top"/>
<!-- 通配符*代表来自任意域的Flash都可以访问本域的数据-->
<allow-access-from domain="*"/>
</cross-domain-policy>

Tips:在Flash 9 及其之后的版本中实现了MIME检查确认crossdomain.xml是否合法以及检查该文件是否在根目录下,这样防止了攻击者通过上传Crossdomain.xml文件控制Flash的行为;

SQL Injection
CSRF
SSRF
CRLF Injection
X-Path Injection