网络安全这几年改成了网络空间安全,因为网络空间也是国家主权之一,网络空间不安全,你就要在别人眼皮子底下裸奔,当然,非洲的小伙伴就不用担心受到威胁,毕竟他们连网都没有。
网络安全学习路线
- 1、网络协议安全
- 1.1、OSI七层模型
- 1.2、TCP/IP协议栈
- 1.3、Wireshark使用
- 1.4、802.1x协议
- 1.5、ARP协议
- 1.6、ARP欺骗
- 1.7、IP协议
- 1.8、ICMP协议
- 1.9、TCP协议
- 1.10、SYN Flood
- 1.11、SSL协议
- 1.12、HTTP协议
- 1.13、DHCP协议
- 2、操作系统安全
- 2.1、计算机原理
- 2.2、Windows命令
- 2.3、Windows运维操作
- 2.4、Windows安全机制
- 2.5、Windows日志
- 2.6、Windows隐藏用户
- 2.7、Linux命令
- 2.8、Linux防火墙
- 2.9、Linux计划任务
- 2.10、Linux安全机制
- 2.11、Linux日志
- 3、Web安全
- 3.1、Web体系架构
- 3.2、HTML
- 3.3、Python
- 3.4、MySQL
- 3.5、软件开发安全
- 3.6、SQL注入漏洞
- 3.7、文件上传漏洞
- 3.8、文件包含漏洞
- 3.9、 XSS漏洞
- 3.10、Redis
- 4、信息收集
- 4.1、IP、旁站、C段
- 4.2、子域名
- 4.3、端口、操作系统
- 4.4、Google Hacking
- 5、密码学
- 5.1、对称/非对称加密、哈希、国密
- 5.2、MD5加密漏洞
- 6、恶意代码防护
- 7、风险评估
- 7.1、Windows基线检查
- 7.2、Tomcat基线检查
- 7.3、IIS基线检查
- 7.4、MySQL基线检查
- 8、应急响应
- 8.1、Windows应急响应排查思路
- 8.2、Linux应急响应排查思路
- 8.3、挖矿病毒应急响应排查思路
1、网络协议安全
先有「网络」,再有网络安全,想要解决网络的安全问题,我们必须先学会「网络」。这一阶段以了解为主,不建议按照网工的路线全面学习,那样时间成本太高了,很容易学半个月或一个月,安全的门还没摸到,就被网络劝退了。
网络的学习目标是了解,我们了解一下协议的工作流程和存在的安全隐患就可以了,有暂时无法理解的可以直接跳过,后面需要相关知识了再回头学也不迟。
1.1、OSI七层模型
OSI将网络协议按照功能分为7层,我们需要「了解」为什么要分层?分成了哪7层?每层实现了什么功能?数据在这7层之间是怎么传输的?尤其是数据封装和解封的过程!
1.2、TCP/IP协议栈
OSI七层模型侧重于教学,而TCP/IP四层模型侧重于实际应用,我们需要「了解」TCP/IP协议栈每层都有哪些协议?面临的安全问题是什么?如何解决这些安全问题?
1.3、Wireshark使用
了解网络协议的安全问题后,我们需要「掌握」一些核心协议,学习一个协议的时候,要思考这个协议是用来解决什么问题的?它实现了什么功能?怎么实现的?数据包是什么样的?有哪些字段?保证设备告警时能看懂,导出的流量数据包能看出来它做了什么。学习协议需要使用工具抓包分析,我们需要知道wireshark抓包工具的基本使用方式。当然,如果你会其他抓包工具也可以替换。
1.4、802.1x协议
从最下层开始,首先是数据链路层的 802.1x协议,很多安全安全厂商的准入设备,在做有线准入时,都是用 802.1x。我们需要「掌握」 802.1x 协议的认证流程?安全产品的有线准入逻辑是如何实现的?准入认证失败时排查问题的思路是什么?
1.5、ARP协议
同样在数据链路层的还有解析地址的ARP协议,我们需要「掌握」ARP协议是如何执行的?同网段和不同网段分别怎么执行?报文中有哪些字段?每个字段的作用是什么?ARP是如何主动学习的?
1.6、ARP欺骗
学完ARP协议,趁热学一下ARP欺骗,我们需要「掌握」ARP欺骗是利用了ARP协议的什么缺陷?使用arpspoof工具复现ARP欺骗并抓包分析攻击过程,根据攻击原理思考如何防御?
1.7、IP协议
再往上是网络层的IP协议,我们需要「掌握」IP地址的划分标准,报文中有哪些字段?每个字段的作用是什么?数据为什么要分片传输?怎么分片?
1.8、ICMP协议
IP协议还有一个子协议ICMP,我们需要「掌握」ICMP是如何检错的?报文中有哪些字段?每个字段的作用是什么?常见的报文类型是什么?
1.9、TCP协议
再往上是传输层的TCP协议,我们需要「掌握」TCP是如何传输数据的?TCP跟UDP的区别是什么?TCP如何通过三次握手建立连接?如何通过四次挥手断开连接?TCP链接的中的状态有哪些?应急响应时如何根据TCP连接状态分析异常网络行为?同时也可以「了解」一下TCP如何保证数据传输的可靠性,以及UCP的检错原理。
1.10、SYN Flood
TCP协议的第一次握手可以被利用,导致SYN Flood攻击,我们需要「掌握」SYN Flood 是如何导致的?如何使用 hping3 执行SYN Flood?如何防御 SYN Flood?
1.11、SSL协议
TCP用三次握手建立连接,保证了数据传输的可靠性,但数据是以明文传输的,容易被嗅探和篡改,因此需要SSL协议将数据加密后传输。我们需要「了解」SSL协议如何加密数据?SSL握手分为哪些阶段?每个阶段有哪些字段?每个字段的作用是什么?
1.12、HTTP协议
再往上是应用层的HTTP协议,我们需要「掌握」HTTP是如何工作的?HTTP的请求报文、响应报文分别有哪些字段?每个字段的作用是什么?HTTP请求方法有哪些?响应状态码有哪些?常见的请求头是哪些?
1.13、DHCP协议
应用层还有一个常用的DHCP协议,我们需要「掌握」DHCP是如何工作的?分配IP的方式有哪些?租约的逻辑是什么?
2、操作系统安全
操作系统的学习目标是会用,知道常用命令和一些基础操作。学习阶段跟着我的文章实操一遍,不用全部记住,混个眼熟,工作时候遇到了再回来看。
操作系统学Windows和Linux就可以,国产化操作系统是在Linux基础上改的,当成图形化界面的Linux用就行。
2.1、计算机原理
先「了解」一些简单的计算机原理,由哪些部分构成的?如何识别二进制?
2.2、Windows命令
接下来需要「了解」Windows 常用的DOS命令,后门工具连接后能用命令操作,虽然Windows大部分操作都可以用图形化界面完成,但用户看到你在黑窗口里一顿敲,会更有安全感。
2.3、Windows运维操作
很多公司都是安全兼运维,比如你们软件版的产品装在了用户的服务器上,那这个服务器的运维操作也要你来负责,我们需要「掌握」Windows如何配置防火墙、文件共享、NTP、注册表等。
2.4、Windows安全机制
Windows使用SID标识符、SAM身份管理、访问令牌、日志审计等安全机制保证操作系统的安全,我们需要「掌握」这些安全机制是如何实现的?
2.5、Windows日志
Windows使用日志审计机制保证操作系统的安全,我们需要「了解」日志怎么看?常见的事件ID是什么?这在应急溯源时很有帮助。
2.6、Windows隐藏用户
Windows隐藏用户常被用做后门账户,我们需要「掌握」隐藏用户如何创建?如何清除?
2.7、Linux命令
Linux几乎都是无界面的,只能在命令行操作,我们需要「掌握」常用的命令。
2.8、Linux防火墙
安全设备在加固时,通常会按照攻击面最小化原则配置防火墙策略,我们需要「掌握」firewlld配置命令,「了解」iptables配置命令。
2.9、Linux计划任务
计划任务常被用作后门留存,我们需要「了解」计划任务文件位置、语法格式,排查时能看懂,知道怎么删除任务。
2.10、Linux安全机制
Linux使用UID、身份鉴别、UGO管理机制、日志审计等安全机制保证操作系统的安全,我们需要「掌握」这些安全机制是如何实现的?
2.11、Linux日志
Linux使用日志审计机制保证操作系统的安全,我们需要「了解」日志文件位置和字段格式,这在应急溯源时很有帮助。
3、Web安全
Web安全的学习目标是会用漏洞,编程基础很重要,会编程,尤其是做过项目开发的人,对于整个业务流程都会有一个全面的理解。不同语言之间其实没有太大区别,只是语法不同,学会一种语言,就能快速掌握其他语言(除了HTML)。
但对于初学者,不建议在编程上投入太多时间,跟着我的文章搭个环境,敲一遍代码就可以了,重点放在漏洞的原理上,不要让枯燥的编程,消耗掉太多的意志力。
我真的见过好多小伙伴一个星期连环境都搭不出来的,或者遇到某个Bug半个月都没法解决,我不止一次说过,遇到困难该放弃就果断放弃,我们的目标是快速入门,是构造属于自己的网络安全知识架构,等你系统性的学完一遍,再回头解决这些遗留问题。
3.1、Web体系架构
首先我们需要「了解」Web是什么?Web的体系架构是如何构成的?这个体系架构存在哪些安全问题?Web安全这一章节就是围绕着这些安全问题来学习的。解决问题之前,我们还得先「了解」Web开发中用到的技术,也就是编程语言。
3.2、HTML
HTML算不上编程语言,准确来说是标签语言,相对简单,从它开始入手,为后面的编程打下基础。我们需要「了解」基本语法,简单敲几个网页,学习目标是能看懂代码。
3.3、Python
主流编程语言中,Python是上手最快的,我们需要「掌握」Python的基础语法,能看懂代码,编写简单的脚本。
3.4、MySQL
数据库最常用的是MySQL,我们需要「掌握」基本的SQL语法结构,能在告警中看懂SQL,能在SQL注入时编写payload。
3.5、软件开发安全
安全人员不是必须具备开发能力,但需要「了解」软件开发的过程,这个过程中存在哪些安全问题?如何解决这些安全问题?尤其是里面的安全设计原则,对于提高安全能力很有帮助。
3.6、SQL注入漏洞
SQL注入是最常见的漏洞之一,我们需要「掌握」SQL注入的原理、注入点、注入方式和防御措施。
3.7、文件上传漏洞
文件上传漏洞很容易被上传后门,获取权限,我们需要「掌握」文件上传漏洞的绕过方式和防御措施。
3.8、文件包含漏洞
文件包含漏洞常用来远程代码执行或读取本地文件,我们需要「掌握」文件包含漏洞的利用方式。
3.9、 XSS漏洞
XSS漏洞主要作用在前端用户,我们需要「掌握」XSS漏洞的利用方式和防御措施。
3.10、Redis
4、信息收集
信息收集是渗透的第一步,也是最关键的一步,前期收集的信息越多,后期成功的概率就越大。
这个阶段的学习目标是了解,知道信息收集有哪些方式以及扫描原理就行了,后面要通过大量实战来积累信息收集的思路。
4.1、IP、旁站、C段
4.2、子域名
4.3、端口、操作系统
4.4、Google Hacking
5、密码学
密码学是网络安全的核心,没有密码学就没有网络安全。
但初学时了解即可,后续根据实际工作情况决定是否深入学习。
5.1、对称/非对称加密、哈希、国密
「了解」密码的安全标准和密码体系的基础概念,「了解」算法分为哪些种类,每种有哪些常见算法。
5.2、MD5加密漏洞
MD5是最常见的加密算法之一,我们需要「了解」MD5算法存在的几个漏洞。
6、恶意代码防护
工作涉及到终端侧的产品时,恶意代码的知识会很有帮助,初学时了解概念即可,后续根据实际工作情况决定是否深入学习。
7、风险评估
初学时了解检查项,实际工作用到时按照步骤检查接。
7.1、Windows基线检查
7.2、Tomcat基线检查
7.3、IIS基线检查
7.4、MySQL基线检查
8、应急响应
大多数单位,应急响应的组织架构都是其他安全人员兼任的,这意味着,无论你做什么安全岗位,都需要有一定的应急能力。
这个阶段的学习目标是「掌握」应急响应流程和操作步骤,在发生安全事件时能够分析恶意行为并阻断。
8.1、Windows应急响应排查思路
Windows应急响应从网络、进程、用户、启动项、计划任务、日志六个方面入手,我们需要「掌握」排查用到的操作和命令。
8.2、Linux应急响应排查思路
Linux应急响应的排查思路和Windows大致相同,但操作命令有很大区别,我们需要「掌握」排查用到的文件位置和操作命令。
8.3、挖矿病毒应急响应排查思路
挖矿病毒是常见的应急事件之一,我们需要「掌握」挖矿病毒的排查思路及相关命令操作。