前言
我们是喜欢打字的变形者集群,我们发现,写两个block竟然已经使用了超过一万五千字,实在是让我们对于自己的效率感到不满。不过,我们也从未向要过做“两小时通关”之类的视频,或者其它在速度上取得优势的方法,而是专注于用轻松和易懂的语言讲明白,本质上还是我们自己风格的笔记。
接着就是关于这四个block关系的一些想法,也是我们在总结的过程中发现的一些规律。Block1 概念最多最零碎,考的最少,但有非常重要的计算题;block2内容不多且泾渭分明,区块链这一个大概念把握住就够了,考察也就是盲人摸象,难度不高;block3内容少且简单,几个对比一懂就可以应付所有的考核;block 4内容最多最杂最难,还包含可能的代码考察,以及需要较好的变成应用基础才能接触到的一些概念,是重头戏中的重头戏。
Block3 如果要问我印象最深的是什么,那就是“如何破译密码”的几种方法和加密手段,还有老师在课上只能找固定的人互动,多次想说“快来上课吧,课上的ppt和发给你们的不一样,不要错过了内容”。但最终还是没忍心。实属可怜,我也会对照着我上课记录的笔记来阐释这些内容,这次尽量控制一下字数。
引言
在前两个block,我们系统的学习了信息的定义和data bias的相关概念,接着是如何保护和加密它们的信息系统,包括加密方法和它们的集大成者区块链。
接下来的B3B4,我们会看看这些系统在实际的、网络的应用当中遇到的问题和解决办法——它们都和web有关。在B3中,我们首先要了解的是“网络空间中的这些系统”面临着什么样的威胁,以及我们能做什么。
网络安全
Authenticating a user 用户身份识别
身份识别的方法
网络安全的第一件事就是如何识别用户是谁,以及识别“用户是不是她自己说的那个人”。这个层面最简单有效的就是用户名密码登录:网页显示两个框,输入,提交。这看起来还行。
但我们知道,http是一个stateless的协议,也就是说下一次登录不会依赖于上一次的内容,那么每一个网页都要重复请求密码吗?不可能,所以网页会以某种方式暂时存储住用户的登录信息,而这就给了黑客可乘之机。所以我们必须使用https,也就是讲用户名和密码加密。这里引出几个不同的类型和两个大类:
Web based:
- digest access authentication。这种方法是,在用户输入用户名密码后,生成一个随机数然后对这个随机数和用户密码一起进行哈希运算,这样黑客就无法知道原始的密码了。然而,这仍然不够:用户名和密码被以可逆的方式储存在服务器上。
- certificate based authentication、这样的方法是基于证书的。在用户的客户端上会有一个机构颁发的证书,登陆时和服务器进行双向检查。这样一来,黑客就必须要能生成这个证书才能登陆。这需要生成和分发证书的程序,而这在大多数环境都不适用。所以很少用 。
Non web based
- Form based :这是最常见的一种,也是我们在学习java 的web开发,制作第一个Login界面的时候生成的结果:你的网页会作为判断用户名密码的工具而非服务器,如果你登陆了一个未授权(unauthorized)的网页,你会被重定向会登陆界面。
这种是最需要掌握的,以下是它的流程:
- Oauth 也就是open authorization 指的是利用用户已经登陆的网站授权给其他网站登录。比如很多游戏的“微信授权登录“。这种方式更快,更安全,但是如果你失去了这个社交帐号,就会丢失更多平台的登陆权限了。
但这仍然不够安全,因为我们living in a dangerous world,所以我们还需要更多保护措施。
- Multiple factors authentication:使用多种方式验证:除了用户名密码,还有验证码、短信验证、邮箱等等。
- Hardware based authentication使用插入式设备进行登陆验证。这样黑客就必须窃取这个设备,而由于没有设备就无法登录,用户也很容易注意到它丢失。
Tracking user sessions 用户历史跟踪
虽然http是stateless的,但我们很多时候还是要追溯以往的状态:比如根据用户以往的购买记录做推荐,或者获取购物车信息等等,又不能存储在在服务器中。这时候就用到了cookie。
Cookie是通过浏览器将服务器返回的数据保存在本地的一小块数据(一般小于4kb),浏览器发送请求且浏览器存在cookie时,浏览器会在请求头上携带cookie数据。这样就保证了http的请求仍然是无状态的,但我们不需要一次次的输入。
以下是cookie的属性:period of validity:cookie的存在市场,可能是永久;作用域:被发到哪里,来自哪里。同时还有第三方cookie,也就是说如果bob的网页引用了其它网页的信息,其他网页的cookie也会被记录。服务器可以知道bob访问了其他人的网页。
想要实现安全的用户跟踪,有这几种选择:1.使用cookie;2.重写url(这是在说,把用户的操作和信息写在Url里),比如:http://localhost:8080/HelloWorld/SourceServlet?jSessionI。这样的方法如果用户退出了就会失效,而且很容易被黑客察觉到;3.使用hidden form隐藏表单字段,在表单中加入额外信息,但是会在用户reload的时候失效
Securing user passwords 密码的安全性
首先是一个概念,对于黑客来说,如果你的密码已经被破解,你的账户就pwned。这个词就专门指代那些已经攻破的密码。
接着是一些攻击密码的方法,这很关键,几个概念之间的比较经常成为考察重点。
brute-force attack
黑客想要用强大的算力通过尝试全部可能来试出你的密码,这就是brute force的原理。这样的攻击对于短密码极为有效,所以我们的密码应该有最小长度要求,也就是说长一些。
dictionary attack
黑客发现,大多数人设置密码都是一些词语,那么黑客将重点放在字典中存在的词语中进行遍历,相比于bruteforce能破解更长的密码,效率也更高。所以我们的密码应该避免出现常用词。
另外,我们可以使用哈希hash来强化我们的密码存储,让它们即使被在网站上攻破也很难被破译。不过存在一种现象hash collision,是在说有极小的可能,两个完全不同的字段的哈希值相同,所以也可能会被靠运气破解(概率非常低)。这个居然考过,放个图。
rainbow tables
这是一个预先计算过的密码和哈希的超级大的对照表,黑客可以用它来查找可能的密码值。那我们要怎么防御呢?我们的密码应该有add salt的过程。这是在说,在进行哈希计算之前把一段随机值混进密码,再和哈希一起储存。这样两个相同的密码也会得到不同的哈希值。哪怕黑客知道了我们加入的salt是什么,也无法简单的查找来得到答案了,难度大大增加。
我们还可以进行一点额外的保护措施:验证码。Captcha. 这样黑客就必须要得到你的设备才能破解密码了。
现在看看,这三种密码都容易被什么攻击破解呢?
自然是brute-force attack; dictionary attack; rainbow table解决(加固)的方法上文有说。
最后是关于密码部分的总结,关于“如何来让我们的密码更加安全“
Web attacks 网络攻击的类型
除了密码,网页也可能被黑客攻击,以下是黑客攻击网页,发动web attack的四种方式:Injection, Cross-site scripting ,Cross-site request forgery 和Distributed Denial of Service。我们一个一个看。
- Injection
An injection attack is where a user can send extra data that is interpreted as a command.
这是在说,用户把一些指令混进输入框来在系统执行收集信息的时候执行这些指令。比如有一个输入姓名的框子,系统会把输入的内容变成sql语句的一部分(比如搜索某个主演的电影),但如果用户输入的是Jackie Chan";
SELECT * FROM。这样一来系统就会执行额外的语句。
应对方法:专有名词:try to "sanitise" data input,也就是把用户的输入净化和过滤一遍。不过最好的办法还是不要使用简单的sql语句相加来处理用户输入,或者使用专门的web编程语言,这种语言一般都会有处理这类问题的方法。
- Cross-site scripting (XSS)
攻击者将恶意代码隐藏在正常的数据中,无辜的用户下载并显示数据的时候,就会在他们的计算机上执行。
这样的攻击还有两种分类:1,reflected, 也就是非永久性的。用户只要点进了恶意的连接,就会受到影响...;
2, persistent xss,也就是永久性的。这种恶意信息已经被永久的保存在某个网站上了,这样的情况更少,但是会造成更大的破坏。而这种情况下,如果有人把这个网页链接分享到社交软件上,这种病毒就会像虫一样传播,这就叫做xss worms。
- Cross-Site Request Forgery (CSRF)
这是在说,把某些执行的代码写在url上,比如这样:SillyShop.com is for sale | HugeDomains,用户如果已经登陆,就会在点进这个连接之后自动购买5个物品。当然,这种方法只有用户登陆上了之后才会产生危害。
攻击方法总结
以下是课件对于这三种(四种)攻击的特点对比,看看你是否跟上了节奏。
- Distributed Denial of Service (DDoS)
这种攻击是通过同时向服务器发送超大量的请求来导致服务器被占用,从而不断拒绝客户请求的攻击方式:数量就是他们的攻击方式。
那么总体说来,应该怎么面对这些攻击呢?我们有一个原则:Minimize the “attack surface”.这是在说,运行多服务器的计算机更容易受到攻击;有更多打开的端口的计算机更容易受到攻击;有更多用户账户的计算机更容易受到攻击。
那么我们该怎么做呢?remove software that seldom used; restrict access; close port;这是从minimize attack surface的角度出发的各一个解决办法。
我们还需要keep system patched,也就是不断保持软硬件更新到最新版本。我们在一个版本停留的越久,攻击者就有更多时间攻破这个版本。
接着,课件还仔细讲了讲restrict access的具体做法:减少知道这件事的人数;减少物理上接触到计算机的可能(黑客可能会用物理连接的道具来攻破)。