网络安全总结

1

参考

《网络是怎样连接的》 《计算机网络》 http://www.cyc2018.xyz
https://bithachi.blog.csdn.net/article/details/104722679

网络安全概述

网络安全术语

  1. 被动攻击 攻击者从网络上窃听他人的通信内容
  2. 主动攻击 有如下几种
  • 篡改 篡改传送的报文
  • 恶意程序 比如病毒
  • 拒绝服务DoS 攻击者向互联网上的某个服务器不停发送大量分组,使该
    服务器无法提供正常服务,这种攻击称为拒绝服务。若从互联网上的成百
    上千个网站几种攻击一个网站,则称为分布式拒绝服务DDoS

计算机网络上的通信面临以下的四种威胁

  1. 截获 从网络上窃听他人的通信内容
  2. 中断 有意中断他人在网络上的通信
  3. 篡改 故意篡改网络上传送的报文
  4. 伪造 伪造信息在网络上传送

截获信息的攻击称为被动攻击,而更改信息和拒绝用户使用资源的攻击称
为主动攻击

对称加密算法和非对称加密算法

  1. 对称秘钥密码体制,即加密密钥与解密秘钥是使用相同的密码体制,
    典型的对称加密算法有DES、AES等。DES 的保密性仅取决于对密钥的保
    密,而算法是公开的。优点是加密解密快,缺点是无法安全将密钥传输
    给通信方,因为加密与解密秘钥是同一个,要么事先约定好要么用信
    使来传送
  2. 非对称密钥加密,又称公开密钥加密,加密和解密使用不同的密钥。
    加密算法和解密算法都是公开的,加密秘钥也是公开的,而解密秘钥需
    要保密。优点是可以更安全地将公开密钥传输给通信发送方,缺点是运
    算速度慢。算法有RSA、DSA
  3. 在通信方面有很大不同 使用对称秘钥时由于双方使用相同的秘钥因此
    在通信上可以进行一对一的双向保密通信,每一方即可发送密文也可解密
    密文
  4. 在使用公开秘钥时,在通信信道上是多对一的单向保密密文,很多人
    持有B的公钥,可以将自己的报文加密后发送给B,B能够用私钥进行解密
    ,当反过来不行。例如网购时很多顾客向同一个网站发送各自的信用卡信息
  5. 公钥密码体制产生的原因:一是由于对称秘钥体制的秘钥分配问题,
    二是由于对数字签名的需求

加密算法

  1. 对称加密算法 DES、3DES、AES
  2. 非对称算法 RSA、DSA
  3. 散列算法 不需要密钥 SHA-1、MD5
  4. MD5 用的是 哈希函数,它的典型应用是对一段信息产生信息摘要,以防
    止被篡改,无论是多长的输入,MD5都会输出长度为128bits 的一个串。(通
    常用16进制表示为32个字符),对于56位长度的密钥来说,如果用穷举法来
    进行搜索的话,其运算次数为 2 ^ 56 次
  5. SHA-1 消息摘要算法,比MD5的安全性更强,会产生一个160位的消息摘要
  6. DES 加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长
    度是56位,加密解密用同一算法

数字签名

通过提供可鉴别的数字信息验证自身身份的一种方式。一套数字签名通常
定义两种互补的运算,一个用于签名,另一个用于验证。分别由发送者持
有能够代表自己身份的私钥 (私钥不可泄露),由接受者持有与私钥对应
的公钥,能够在接受到来自发送者信息时用于验证其身份

  1. 接受者能够核实发送者对报文的签名,也就是说接受者能够确信该报
    文的确是发送者发送的,其他人无法伪造。这就是报文鉴别
  2. 接受者确信收到的数据和发送者发送的完全一样没有被修改,这就是
    报文的完整性
  3. 发送者事后不能抵赖对报文的签名,这就是不可否认

可以使用公钥算法或对称秘钥算法来实现,公钥算法更容易。为了进行签
名,A用私钥对报文进行解密运算,A 把经过解密运算得到的密文传送给
B,B为了核实签名就用A的公钥进行加密运算,还原明文。以上只是实现
数字签名,如果还要实现秘密通信,A可以用A的私钥解密运算,然后用
B的公钥进行加密运算,B用B的私钥进行解密运算,然后用A的公钥进行
加密运算核实签名

鉴别

鉴别是要验证通信的对方的确是自己要通信的对象,而不是其他的冒充
者,并且所传送的报文时完整的,没有被篡改过。可以分为报文鉴别和
端点鉴别

  1. 报文鉴别 密码散列函数,最重要的特点就是不同的报文一定有不同
    的输出,是一种单向函数。明文X进行散列得出H(X),H(X)用私钥加密
    得到报文鉴别码MAC,明文X拼接MAC发送给对象,对象用公钥解密MAC
    ,然后用X进行散列判断是否与H(X)相同
  2. 实体鉴别 仅仅鉴别发哦上报文的实体,在系统接入的全部持续时间
    内对自己和自己通信的对方实体只需验证一次

SSL和TLS

运输层安全协议

  1. 安全套接字层SSL 作用在应用层HTTP和运输层之间,在TCP之上建立
    一个安全通道
  2. 运输层安全TLS 为所有基于TCP的网络应用提供安全数据传输服务

SSL提供的服务

  1. SSL服务器鉴别,允许客户验证服务器身份,客户通过验证来自服务器
    的证书,鉴别服务器的身份并获得服务器的公钥
  2. SSL客户鉴别,允许服务器证实客户身份
  3. 加密的SSL会话,传送的报文进行加密并检测是否被篡改

TLS握手过程是怎样?

参考 https://zhuanlan.zhihu.com/p/37636276

  1. 协商加密算法 浏览器A向服务器B发送浏览器的SSL版本号和一些可选的
    加密和压缩算法。服务器B发送给浏览器A自己支持的算法(如RSA)
  2. 服务器鉴别 服务器B向浏览器A发送包含RSA公钥的数字证书,A使用该
    证书的认证机构CA公开发布的RSA公钥对该证书进行验证
  3. 会话秘钥计算 由A生成一个随机数,使用B的RSA公钥加密后发送给B。
    双方根据协商的算法产生共享的对称会话秘钥
  4. 安全数据传输 双方用会话秘钥加密和解密它们之间传送的数据并验证
    其完整性

HTTPS 是什么?

是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通
信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网
站服务器的身份认证,保护交换数据的隐私与完整性。S指的是SSL,即安全
套接字层

HTTPS采用的加密方式是怎样的?

上面提到对称密钥加密方式的传输效率更高,但是无法安全地将密钥Secret
Key 传输给通信方。而非对称密钥加密方式可以保证传输的安全性,因此我
们可以利用非对称密钥加密方式将 Secret Key 传输给通信方。HTTPS 采
用混合的加密机制,所有传输的内容都经过加密,加密采用对称加密,但
对称加密的密钥用服务器方的证书进行了非对称加密

  • 使用非对称密钥加密方式,传输对称密钥加密方式所需要的 Secret Key
    ,从而保证安全性
  • 获取到 Secret Key 后,再使用对称密钥加密方式进行通信,从而保证
    效率

运输层有两个广泛使用的安全协议

  • 安全套接字层SSL 作用在应用层的HTTP和运输层之间,在TCP之上建立一
    个安全通道。SSL从SSL套接字接收应用层的数据,对数据进行加密,然后把
    加密的数据送到TCP套接字,接收方从TCP套接字读取数据,解密后交给应
    用层
  • 运输层安全TLS SSL的升级版,为所有基于TCP的网络应用通过安全数据
    传输服务

HTTPS

参考 https://www.runoob.com/w3cnote/http-vs-https.html
是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,
但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器
的身份认证,保护交换数据的隐私与完整性。s指的是SSL,即安全套接层。HTTPS
默认工作在 TCP协议443端口,它的工作流程一般如以下方式:

  1. TCP 三次同步握手
  2. 客户端验证服务器数字证书
  3. DH 算法协商对称加密算法的密钥、hash 算法的密钥
  4. SSL 安全加密隧道协商完成
  5. 网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性
    ;用协商的hash算法进行数据完整性保护,保证数据不被篡改

混合加密如何实现?

HTTPS 采用的是对称加密和非对称加密结合的混合加密方式

  1. 在通信建立前采用非对称加密的方式交换会话秘钥,后续就不再使用
    非对称加密,非对称加密使用两个密钥:公钥和私钥,公钥可以任意分
    发而私钥保密,解决了密钥交换问题但速度慢
  2. 在通信过程中全部使用对称加密的会话秘钥的方式加密明文数据,
    只使用一个密钥,运算速度快,密钥必须保密

摘要算法是什么?

  1. 摘要算法用来实现完整性,能够为数据生成独一无二的指纹,用于校验
    数据的完整性,解决了篡改的风险
  2. 客户端在发送明文之前会通过摘要算法算出明文的指纹,发送的时候把指
    纹 + 明文一同加密成密文后,发送给服务器,服务器解密后,用相同的摘要
    算法算出发送过来的明文,通过比较客户端携带的指纹和当前算出的指纹做
    比较,若指纹相同,说明数据是完整的

HTTP和HTTPS的区别

  • HTTP明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP)数据传
    输过程是加密的,安全性较好
  • 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构)
    申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、
    Comodo、GoDaddy 和 GlobalSign等
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立
    连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加
    上 ssl 握手需要的 9 个包,所以一共是 12 个包
  • http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是80
    ,后者是443
  • HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS比
    HTTP要更耗费服务器资源

TLS握手过程

参考 https://zhuanlan.zhihu.com/p/37636276
TLS是一个信道建立和信道的表达方式,向下依托于TCP,向上对应用程序服务。随
着TLS的发展,DTLS也开始出现,就是同样的TLS逻辑被应用于UDP业务之上。由于
客户端的网络千奇百怪,TCP需要普遍长连接的时候几乎就是不靠谱的代名词,肯
定是要断线重连机制的。如果处理的不好,还很容易形成SYN攻击或者过多的耗费
服务器资源。因此固定长连接的客户端业务,例如游戏场景,大都倾向于使用UDP
作为连接承载,在这种情况下,DTLS就有了很大的用武之地。UDP是一种基础协议
,很多人选择了UDP通常也并没有明确原因,很多是基于不想去处理TCP那么多显
而易见的麻烦的事情。但是最后用了UDP之后,发现要做的事情甚至比TCP麻烦。
但是UDP相对于TCP的一个巨大的优势是UDP相当于四层的IP协议,在此之上可
以构造更复杂的取代TCP的协议,而不用改动内核代码。市场上确实是UDP也在
大量的使用。所以DTLS也仍然有市场

HTTP和HTTPS有什么区别?HTTPS的S是什么意思?

  1. 端口 HTTP的URL由“HTTP://”起始且默认使用端口80,而HTTPS的URL
    由“https://”起始且默认使用端口443
  2. 安全性和资源消耗 HTTP明文传输,数据都是未加密的,安全性较差,
    客户端和服务器端都无法验证对方的身份。HTTPS(SSL+HTTP)数据传输
    过程是加密的,安全性较好。HTTPS是运行在SSL/TLS之上的HTTP协议,
    SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称
    加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说
    ,HTTP 安全性没有HTTPS 高,但是 HTTPS 比HTTP耗费更多服务器
    资源
  3. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报
    文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手
    过程,才可进入加密报文传输
  4. https的s代表security,表明现在使用的是提供安全服务的HTTP协议

防火墙技术

  1. 分组过滤路由器 是一种具有过滤功能的路由器,根据过滤规则对进
    出内部网络的分组进行转发或丢弃。过滤规则基于:IP地址、端口、协议
  2. 应用网关(代理服务器) 一种网络应用需要一个应用网关,实现基
    于应用层数据的过滤和高层用户鉴别

证书是什么?有什么作用?

SSL 证书是一种能够在服务器和浏览器之间的信息交换过程中实现通信安全的
工具,对发送和接受的数据进行加密保护。通过使用证书来对通信方进行认证
数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方
都可信赖的第三方机构。服务器的运营人员向 CA 提出公开密钥的申请,CA
在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分
配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起
。进行 HTTPS 通信时,服务器会把证书发送给客户端。客户端取得其中的公
开密钥之后,先使用数字签名进行验证,如果验证通过,就可以开始通信了

  1. 提供身份验证
  2. 加密敏感信息
  3. 提高网站信任度
  4. 优化页面加载速度

对称加密算法

在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特
殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后
,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文
进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只
有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求
解密方事先必须知道加密密钥。
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足
之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每
次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得
发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担
。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理
困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有
DES、IDEA和AES。

非对称加密算法

不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。
在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能
完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用
私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(
解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如
果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道
收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密
文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收
发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发
信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适
用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算
法和美国国家标准局提出的DSA。以不对称加密算法为基础的加密技
术应用非常广泛。

常见攻击方式

参考 https://www.cnblogs.com/suihang/p/13288540.html
常见的浏览器攻击分为两种,一种为XSS(跨站脚本攻击),另一种则为
CSRF(跨站请求伪造)

XSS

XSS 全称是Cross Site Scripting,为了与“CSS”区分开来,故简称XSS
,翻译过来就是“跨站脚本”。XSS 攻击是指黑客往 HTML 文件中或者DOM中
注入恶意脚本,从而在用户浏览页面时利用注入的恶意脚本对用户实施攻击
的一种手段。
存在原因浏览器为了在安全和自由之间找到一个平衡点。支持了页面中的引
用第三方资源和 跨域资源共享(CORS),这样做带来了很多安全问题,其
中最典型的就是 XSS 攻击。

CSRF

CSRF 英文全称是 Cross-site request forgery,是指黑客引诱用户打
开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简
单来讲,CSRF 攻击就是利用了用户的登录状态,并通过第三方的站点来做
一些坏事。而且CSRF 攻击并不需要将恶意代码注入用户的页面,仅仅是利
用服务器的漏洞和用户的登录状态来实施攻击
存在原因利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证
请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的

混合加密如何实现?

HTTPS 采用的是对称加密和非对称加密结合的混合加密方式

  1. 在通信建立前采用非对称加密的方式交换会话秘钥,后续就不再使用
    非对称加密,非对称加密使用两个密钥:公钥和私钥,公钥可以任意分
    发而私钥保密,解决了密钥交换问题但速度慢
  2. 在通信过程中全部使用对称加密的会话秘钥的方式加密明文数据,
    只使用一个密钥,运算速度快,密钥必须保密

摘要算法是什么?

  1. 摘要算法用来实现完整性,能够为数据生成独一无二的指纹,用于校验
    数据的完整性,解决了篡改的风险
  2. 客户端在发送明文之前会通过摘要算法算出明文的指纹,发送的时候把指
    纹 + 明文一同加密成密文后,发送给服务器,服务器解密后,用相同的摘要
    算法算出发送过来的明文,通过比较客户端携带的指纹和当前算出的指纹做
    比较,若指纹相同,说明数据是完整的

常见的攻击手段(XSS、CSRF)有哪些?

参考 https://blog.csdn.net/sinat_17775997/article/details/83377359

  1. 拒绝服务Dos 攻击者向互联网上的某个服务器不停发送大量分组,使该
    服务器无法提供正常服务,这种攻击称为拒绝服务。若从互联网上的成百上
    千个网站几种攻击一个网站,则称为分布式拒绝服务DDos
  2. XSS 跨站脚本攻击
  3. CSRF 跨站请求伪造,攻击者盗用了你的身份,以你的名义发送恶意请求

XSS攻击过程?

  1. XSS 跨站脚本攻击,XSS 攻击是指攻击者在网站上注入恶意的客户端代码
    ,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览
    器进行控制或者获取用户隐私数据的一种攻击方式。攻击者对客户端网页注入
    的恶意脚本一般包括JavaScript,有时也会包含 HTML 和Flash 。有很多种
    方式进行XSS攻击,但它们的共同点为:将一些隐私数据像cookie、session
    发送给攻击者,将受害者重定向到一个由攻击者控制的网站,在受害者的机
    器上进行一些恶意操作
  2. XSS攻击可以分为3类:反射型(非持久型)、存储型(持久型)、基于DOM
  3. 反射型 XSS 只是简单地把用户输入的数据 “反射” 给浏览器,这种攻
    击方式往往需要攻击者诱使用户点击一个恶意链接,可以注入注入能获取
    用户隐私数据(如cookie)的脚本
  4. 存储型 XSS 会把用户输入的数据 “存储” 在服务器端,当浏览器请求数
    据时,脚本从服务器上传回并执行。这种 XSS 攻击具有很强的稳定性
  5. 基于 DOM 的 XSS 攻击是指通过恶意脚本修改页面的 DOM 结构,是纯粹
    发生在客户端的攻击

如何防范XSS攻击?

  1. 主流的浏览器内置了防范 XSS 的措施,例如CSP,是一个额外的安全层,
    用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻
    击等
  2. HttpOnly 防止劫取 Cookie 浏览器将禁止页面的Javascript 访问带有
    HttpOnly 属性的Cookie
  3. 对于用户的任何输入要进行检查、过滤和转义。建立可信任的字符和 HTML
    标签白名单,在 XSS 防御中,输入检查一般是检查用户输入的数据中是否包
    含 <,> 等特殊字符,如果存在,则对特殊字符进行过滤或编码,这种方式
    也称为 XSS Filter

CSRF攻击过程?

跨站请求伪造,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。
CSRF 攻击是攻击者借助受害者的 Cookie 骗取服务器的信任,可以在受害
者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并
未授权的情况下执行在权限保护之下的操作

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A
  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用
    户登录网站A成功,可以正常发送请求到网站A
  3. 用户未退出网站A之前,在同一浏览器中,被诱导访问网站B
  4. 危险网站B有一个<\img>标签,这个img标签的src不指向图片,而是一个
    http请求,这个请求让银行服务器从Alice转100到Bob账户上,由于Alice
    已经登录,浏览器发请求时候会带上cookie骗取服务器信任得到响应
    1
    <img src="http://www.examplebank.com/from=Alice&amount=100&to=Bob">
  5. 浏览器在接收到这些攻击性代码后,根据网站B 的请求,在用户不知情
    的情况下携带 Cookie 信息,向网站 A 发出请求。网站A 并不知道该请求
    其实是由 B 发起的,所以会根据用户 C 的 Cookie 信息以 C 的权限处
    理该请求,导致来自网站 B 的恶意代码被执行
  6. 还有一种post攻击,危险网站伪造一个隐藏的表单,在onload事件中,
    触发表单的提交事件

CSRF攻击如何防范?

  1. 禁止第三方网站带Cookies same-site属性:Strict,Lax
    1
    header('Set-Cookie: test=12345; SameSite=Lax')
  2. 验证码 CSRF攻击往往是在用户不知情的情况下构造了网络请求。而验证码
    会强制用户必须与应用进行交互,才能完成最终请求,加入随机验证码来识别
    请求是不是用户主动发起的
  3. referer Check 根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer
    ,它记录了该 HTTP 请求的来源地址。通过 Referer Check,可以检查请求
    是否来自合法的”源”,如果黑客要对银行网站实施 CSRF 攻击,他只能在他
    自己的网站构造请求
  4. 添加 token 验证 CSRF 攻击之所以能够成功,是因为攻击者可以完全伪
    造用户的请求,该请求中所有的用户验证信息都是存在于 Cookie中,因此攻
    击者可以在不知道这些验证信息的情况下直接利用用户自己的 Cookie 来通
    过安全验证。要抵御 CSRF,关键在于在请求中放入攻击者所不能伪造的信息
    ,并且该信息不存在于 Cookie 之中。可以在 HTTP 请求中以参数的形式加
    入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token。
  • 对于GET 请求,token 将附在请求地址之后,这样URL 就变成
    http://url?csrftoken=tokenvalue
  • 对于 POST 请求来说,要在 form 的最后加上
    1
    2
    <input type="hidden" name="csrftoken"value="tokenvalue"/>
    这样就把token以参数的形式加入请求

https是用了哪些加密协议?

  1. HTTPS采用的是TLS协议+SSL证书实现安全网站访问的
  2. TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密
    和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采
    用协商的密钥对数据加密,基于散列函数验证信息的完整性
Author: 高明
Link: https://skysea-gaoming.github.io/2021/05/08/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C4/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.