网络安全那些事
2020/01/04科普#计算机科学#密码学#网络安全
前段时间做了一个用于管理密码的小网站,深感网络安全领域博大精深。遥想上古时期,绝大多数网站还采用HTTP(超文本传输协议)传输数据,大部分密码明文直接从客户端传到服务器,个别不良份子甚至将明文存储在自家数据库。以现在的眼光看来,当时的人们无异于在互联网裸奔。
网络安全包括三大环节:服务器安全、通信安全、客户端安全。由于防火墙、访问策略、监控体系、专业维护等多方面保障,服务器的安全性是相对较高的,或者说攻破服务器的难度比攻破其他环节更高。
而通信安全没那么单纯。数据传输链路庞杂漫长,妖孽丛生,无数双眼睛在窥探路上来往的信息,随时准备拦截、伪装、发起攻击。为保证网络通信安全,早在1994年,网景公司就推出HTTPS(超文本传输安全协议),但很长时间内并未受到关注,好在如今已成为网络安全领域的工业标准乃至强制标准。HTTPS依然由HTTP通信,但利用SSL(安全套接层)/TLS(传输层安全性协议)对数据进行加密传输。
加密方式主要有两种:对称加密和非对称加密。前者指加密和解密使用同一个密钥,虽然破解难度很大,但需要在网络上同时传输密文和密钥,一旦被拦截就前功尽弃;后者则使用不同密钥,分别称为公钥和私钥,公钥加密的数据必须由私钥解密,反之亦然。非对称加密消耗CPU资源非常大,效率很低,严重影响HTTPS的性能。
为兼顾安全和效率,HTTPS结合了对称和非对称两种加密方式。客户端使用对称密钥(key)对数据进行加密传输,然后使用非对称加密的公钥再对key进行加密,网路上传输的完整数据是被key加密的密文和用公钥加密后的key的密文。即使被黑客截获,由于没有私钥、无法破解出key的明文,便无法获取到数据的明文。
具体来说,当我们访问一个网站时,客户端(通常是浏览器)和服务器会进行如下几次握手:
- 客户端发送“ClientHello”消息,内容包括:支持的TLS版本、支持的加密算法和压缩算法、随机数Rn1;
- 服务器回复“ServerHello”消息,内容包括:确认使用的TLS版本,确认使用的加密算法和压缩算法、服务器证书、随机数Rn2;在安全性要求更高的的场景(如金融系统),服务器还会请求客户端出示证书(即双向身份认证,非必要步骤);
- 客户端收到服务器证书后到CA(证书颁发机构)验明合法性(未通过验证会显示警告),然后取出证书中的公钥,再生成随机数Rn3,用公钥加密Rn3生成PreMasterKey发给服务器,通知握手结束;
- 服务器用证书私钥解密PreMasterKey得到Rn3,通知握手结束。
- TLS连接建立完成。此时客户端、服务器均拥有Rn1、Rn2和Rn3,双方以相同算法生成对称密钥(也称“会话密钥”),用于内容传输加密。
SSL/TLS协议通过加密算法、校验机制、安全证书等方式,有效防止了网络窃听风险、数据篡改风险和身份冒充风险,是当今网络安全的最佳实践,甚至可以说:所有不以HTTPS开头的网站都是耍流氓。
客户端是网络安全的重要战场。安全领域有句名言:“永远不要相信客户端”,即永远对客户端发送的请求保持警惕。例如,早期常见的XSS(跨站脚本)攻击、SQL注入,就是通过在客户端植入恶意代码来获取敏感信息,解决办法是对任何请求的数据都加以校验、过滤或转义。如果说XSS是利用了对用户的信任,那么CSRF/XSRF(跨站请求伪造)则利用了对浏览器的信任,其原理是当成功登录一个受信任的网站后,浏览器会缓存Cookie(登录凭证)以便后续使用,如果在未退出登录的情况下不小心访问了一个恶意网站,该网站可以以你的身份向原本信任的网站发送非法请求。CSRF的防范措施有同源检测(Origin、Referer)、同步令牌(Token)等。
“重放攻击”则是更隐蔽也更无耻的黑客手法。虽然网络上传输的数据是加密的,攻击者无法得到数据的准确意义,但他不管这些,直接把窃听到的数据原封不动地重新发送给接收方,相当于之前的操作又重新执行了一遍,你就得祈祷之前到底干了什么。常见的防御办法是在请求接口中增加时间戳、随机数等。
然而,再高明的手段都敌不过猪一样的队友,就是那些直接保存明文密码的开发者,如几年前泄露百万账号的CSDN,所以安全领域还有一句名言:永远不要、在任何地方、传输和储存明文密码,除了你的大脑。保存明文密码的危害不言而喻,使用简单密码的风险同样不可小觑,目前大部分系统仍采用md5算法对密码散列(安全意识较高的大厂已采用sha1、sha2、加盐等),随着黑客技术的发展和计算机运算能力的提高,md5对于简单密码的安全性日益降低,破解以人名、地名、词汇、数字、生日、特定模式为主的密码往往只需数秒。
时至今日,互联网早已像水、电、天然气一样成为生活必需品。一方面,网络存储着我们的文字、照片、视频、财富、青春、隐私,其重要程度不亚于水电气;另一方面,黑客们从未停止与网络安全的博弈,SSL/TLS协议每一次小小的版本升级都多少与之相关,这是他们的乐趣所在,也是他们的生存之法。路漫漫,其修远,我们只希望魔高一尺,道高一丈。