「网络」是网络安全的前置知识,想要解决网络的安全问题,我们必须先学会「网络」。
OSI将网络协议按照功能分为7层,我们需要「了解」为什么要分层?分成了哪7层?每层实现了什么功能?数据在这7层之间是怎么传输的?尤其是数据封装和解封的过程!
OSI七层模型侧重于教学,而TCP/IP四层模型侧重于实际应用,我们需要「了解」TCP/IP协议栈每层都有哪些协议?面临的安全问题是什么?如何解决这些安全问题?
了解网络协议的安全问题后,我们需要「掌握」一些核心协议,学习一个协议的时候,要思考这个协议是用来解决什么问题的?它实现了什么功能?怎么实现的?数据包是什么样的?有哪些字段?保证设备告警时能看懂,导出的流量数据包能看出来它做了什么。学习协议需要使用工具抓包分析,我们需要知道wireshark抓包工具的基本使用方式。当然,如果你会其他抓包工具也可以替换。
从最下层开始,首先是数据链路层的 802.1x协议,很多安全安全厂商的准入设备,在做有线准入时,都是用 802.1x。我们需要「掌握」 802.1x 协议的认证流程?安全产品的有线准入逻辑是如何实现的?准入认证失败时排查问题的思路是什么?
同样在数据链路层的还有解析地址的ARP协议,我们需要「掌握」ARP协议是如何执行的?同网段和不同网段分别怎么执行?报文中有哪些字段?每个字段的作用是什么?ARP是如何主动学习的?
学完ARP协议,趁热学一下ARP欺骗,我们需要「掌握」ARP欺骗是利用了ARP协议的什么缺陷?使用arpspoof工具复现ARP欺骗并抓包分析攻击过程,根据攻击原理思考如何防御?
再往上是网络层的IP协议,我们需要「掌握」IP地址的划分标准,报文中有哪些字段?每个字段的作用是什么?数据为什么要分片传输?怎么分片?
IP协议还有一个子协议ICMP,我们需要「掌握」ICMP是如何检错的?报文中有哪些字段?每个字段的作用是什么?常见的报文类型是什么?
再往上是传输层的TCP协议,我们需要「掌握」TCP是如何传输数据的?TCP跟UDP的区别是什么?TCP如何通过三次握手建立连接?如何通过四次挥手断开连接?TCP链接的中的状态有哪些?应急响应时如何根据TCP连接状态分析异常网络行为?同时也可以「了解」一下TCP如何保证数据传输的可靠性,以及UCP的检错原理。
TCP协议的第一次握手可以被利用,导致SYN Flood攻击,我们需要「掌握」SYN Flood 是如何导致的?如何使用 hping3 执行SYN Flood?如何防御 SYN Flood?
TCP用三次握手建立连接,保证了数据传输的可靠性,但数据是以明文传输的,容易被嗅探和篡改,因此需要SSL协议将数据加密后传输。我们需要「了解」SSL协议如何加密数据?SSL握手分为哪些阶段?每个阶段有哪些字段?每个字段的作用是什么?
再往上是应用层的HTTP协议,我们需要「掌握」HTTP是如何工作的?HTTP的请求报文、响应报文分别有哪些字段?每个字段的作用是什么?HTTP请求方法有哪些?响应状态码有哪些?常见的请求头是哪些?
应用层还有一个常用的DHCP协议,我们需要「掌握」DHCP是如何工作的?分配IP的方式有哪些?租约的逻辑是什么?
操作系统学Windows和Linux就可以,国产化操作系统是在Linux基础上改的,当成图形化界面的Linux用就行。
先「了解」一些简单的计算机原理,由哪些部分构成的?如何识别二进制?
接下来需要「了解」Windows 常用的DOS命令,后门工具连接后能用命令操作,虽然Windows大部分操作都可以用图形化界面完成,但用户看到你在黑窗口里一顿敲,会更有安全感。
很多公司都是安全兼运维,比如你们软件版的产品装在了用户的服务器上,那这个服务器的运维操作也要你来负责,我们需要「掌握」Windows如何配置防火墙、文件共享、NTP、注册表等。
Windows使用SID标识符、SAM身份管理、访问令牌、日志审计等安全机制保证操作系统的安全,我们需要「掌握」这些安全机制是如何实现的?
Windows使用日志审计机制保证操作系统的安全,我们需要「了解」日志怎么看?常见的事件ID是什么?这在应急溯源时很有帮助。
Windows隐藏用户常被用做后门账户,我们需要「掌握」隐藏用户如何创建?如何清除?
Linux几乎都是无界面的,只能在命令行操作,我们需要「掌握」常用的命令。
安全设备在加固时,通常会按照攻击面最小化原则配置防火墙策略,我们需要「掌握」firewlld配置命令,「了解」iptables配置命令。
计划任务常被用作后门留存,我们需要「了解」计划任务文件位置、语法格式,排查时能看懂,知道怎么删除任务。
Linux使用UID、身份鉴别、UGO管理机制、日志审计等安全机制保证操作系统的安全,我们需要「掌握」这些安全机制是如何实现的?
Linux使用日志审计机制保证操作系统的安全,我们需要「了解」日志文件位置和字段格式,这在应急溯源时很有帮助。
学习Web安全需要先有一定的编程基础,能看懂代码,用Python或其他语言写一些简单的脚本。实际上有很多初学者只学会语法还是看不懂代码,这种情况就得多上手敲代码,不同语言之间其实没有太大区别,只是语法不同,学会一种语言,就能快速掌握其他语言(除了HTML)。
首先我们需要「了解」Web是什么?Web的体系架构是如何构成的?这个体系架构存在哪些安全问题?Web安全这一章节就是围绕着这些安全问题来学习的。解决问题之前,我们还得先「了解」Web开发中用到的技术,也就是编程语言。
HTML算不上编程语言,准确来说是标签语言,相对简单,从它开始入手,为后面的编程打下基础。我们需要「了解」基本语法,简单敲几个网页,学习目标是能看懂代码。
主流编程语言中,Python是上手最快的,我们需要「掌握」Python的基础语法,能看懂代码,编写简单的脚本。
数据库最常用的是MySQL,我们需要「掌握」基本的SQL语法结构,能在告警中看懂SQL,能在SQL注入时编写payload。
安全人员不是必须具备开发能力,但需要「了解」软件开发的过程,这个过程中存在哪些安全问题?如何解决这些安全问题?尤其是里面的安全设计原则,对于提高安全能力很有帮助。
SQL注入是最常见的漏洞之一,我们需要「掌握」SQL注入的原理、注入点、注入方式和防御措施。
文件上传漏洞很容易被上传后门,获取权限,我们需要「掌握」文件上传漏洞的绕过方式和防御措施。
文件包含漏洞常用来远程代码执行或读取本地文件,我们需要「掌握」文件包含漏洞的利用方式。
XSS漏洞主要作用在前端用户,我们需要「掌握」XSS漏洞的利用方式和防御措施。
信息收集是渗透的第一步,也是最关键的一步,前期收集的信息越多,后期成功的概率就越大。
密码学是网络安全的核心,但初学时了解即可,后续根据实际工作情况决定是否深入学习。
「了解」密码的安全标准和密码体系的基础概念,「了解」算法分为哪些种类,每种有哪些常见算法。
MD5是最常见的加密算法之一,我们需要「了解」MD5算法存在的几个漏洞。
工作涉及到终端侧的产品时,恶意代码的知识会很有帮助,初学时了解概念即可,后续根据实际工作情况决定是否深入学习。
初学时了解检查项,实际工作用到时按照步骤检查接。
「掌握」应急响应流程及操作步骤,在发生安全事件时能够分析恶意行为并阻断。
Windows应急响应从网络、进程、用户、启动项、计划任务、日志六个方面入手,我们需要「掌握」排查用到的操作和命令。
Linux应急响应的排查思路和Windows大致相同,但操作命令有很大区别,我们需要「掌握」排查用到的文件位置和操作命令。
挖矿病毒是常见的应急事件之一,我们需要「掌握」挖矿病毒的排查思路及相关命令操作。