0xB1 微观安全——一台服务器做安全
从这一部分开始,我们就要进入一个安全建设者的角色了。一个创业公司一开始可能IT资产有的并不多,几台甚至十几台也是有可能的。我们假设现在进了一家非常穷的公司,只在x云上面有一台云服务器,我们如何把这一台云服务器的安全做好就是今天要讨论的。
首先我们从攻击者的角度上来看,我们如果要对这台服务器下手,一定要经过以下的阶段。
Reconnaissance(侦查阶段)->Weaponization(武器准备阶段)->Delivery(部署武器阶段)->Exploitation(攻击阶段)->Installation(植入后门)->Command & Control(远控)->Actions on Objectives(对目标采取行动)
这个流程就是我们说的攻击链(也就是Kill-Chain),通过攻击链,我们可以获得以下的几个信息:
- 目标需要存在漏洞
- 需要让目标远程执行程序
- 控制目标
也就是说我们现在站在防守方得角度上看的话,我们需要做到的理想情况就是:没有蛀牙!(不对,不是这一句)
理想情况就是:让每一个bit该是0就是0,该是1就是1。
当然理想情况肯定只停留在理想的情况,事实的情况是:连int a=2;print("%d, %d", a++, ++a);这个语句在macOS和Ubuntu下面编译运算的结果都是两个,所以我们没有必要强求每一个比特位必须跟我们预想的一样。
我们把目标具体化一些就是:只执行我希望执行的指令,我让你jmp esp,你就不能call ebp。那么怎么样去做呢?
针对一台服务器,服务器有的东西无非就是硬件、软件和通信,我们只要把握住这三个维度就可以。
针对硬件方面,其实就是所谓的物理安全,也就是要保证服务器运行状态的可靠性。
针对软件层面,这个就有点复杂了,需要来一张图说明。
其实针对软件层面上来讲,功能还是挺多的,但是根据我们之前的安全原则,我们大概可以确定的方面是:
- 操作系统的状态要被监控,保证不能有已知漏洞和不合法的操作(例如开启恶意进程)
- 服务器程序的状态要被监控,保证不能崩溃并且不能存在已知漏洞并且有不合法的操作(例如用存在已知critical漏洞的旧版本tomcat)
- 应用程序状态要被监控,保证程序不能存在已知高危漏洞和不正常的运行状态(比如被篡改)
其实最后说白了就是三件事儿:监控、补丁集管理和漏洞扫描(这三个在以后的文章中会有介绍)
针对网络而言,其实网络的状态也是需要被监控的,这里的网络监控其实就是去监控网络流量的状态,比如说正常还是不正常、是不是存在攻击的Payload等。
说了这么多其实想引出来的就是下面的这张图。
以后这些平台的详细设计和架构我们会很详细的去讲。
p.s.由于没时间更新的缓慢,还请见谅