在过去,网络安全技术相关的文章中,我写了很多故事,因此很多读者朋友都知道我是从事网络安全相关工作的。经常有人在微信上问我:

- 我刚入门网络安全,该怎么学?要学哪些东西?有哪些方向?怎么选?

不同于Java、C/C++等后端开发岗位有非常明晰的学习路线,网络安全更多是靠自己摸索,要学的东西又杂又多,难成体系。我的文章基本以故事为载体的技术输出为主,很少去谈到职场、面试这些方面的内容。主要是考虑到现在大家的压力已经很大,节奏很快,公众号上是让大家放松的地方,尽量写一些轻快的内容。不过随着越来越多的人问我上面这些问题,今天就专门写一篇来摆一摆这个龙门阵。

近几年,随着网络安全被列为国家安全战略的一部分,这个曾经细分的领域发展提速了不少,除了一些传统安全厂商以外,一些互联网大厂也都纷纷加码了在这一块的投入,随之而来的吸引了越来越多的新鲜血液不断涌入。

网络安全分支其实在网络安全这个概念之上,还有一个更大的概念:信息安全。本文不去探讨二者在学术划分上的区别,如无特殊说明,文中将其视为一个概念。我们来看下实际工作方向上,有哪些细分路线。在这个圈子技术门类中,工作岗位主要有以下三个方向:安全研发、安全研究:二进制方向、安全研究:网络渗透方向。下面逐一说明一下。

安全研发

安全行业的研发岗主要有两种分类:与安全业务关系不大的研发岗位、与安全业务紧密相关的研发岗位。你可以把网络安全理解成电商行业、教育行业等其他行业一样,每个行业都有自己的软件研发,网络安全作为一个行业也不例外,不同的是这个行业的研发就是开发与网络安全业务相关的软件。既然如此,那其他行业通用的岗位在安全行业也是存在的,前端、后端、大数据分析等等,也就是属于上面的第一个分类,与安全业务关系不大的类型。这里我们重点关注下第二种,与安全业务紧密相关的研发岗位。这个分类下面又可以分为两个子类型:做安全产品开发、做防御以及做安全工具开发、做攻击。

安全行业要研发的产品主要(但不限于)有下面这些:防火墙、IDS、IPS、WAF(Web网站应用防火墙)、数据库网关、NTA(网络流量分析)、SIEM(安全事件分析中心、态势感知)、大数据安全分析、EDR(终端设备上的安全软件)、DLP(数据泄漏防护)、杀毒软件、安全检测沙箱。

总结一下,安全研发的产品主要应用于检测发现和抵御安全攻击,包括终端设备(如PC电脑、手机、网络设备等)和网络侧。在开发这些产品时,主要采用C/C++、Java、Python等技术栈,同时也有一些使用GoLang和Rust的技术。相对于其他两个方向,安全研发岗位对网络安全技术的要求相对较低,甚至有些公司的研发人员对安全一无所知。然而,如果除了基本的开发技能之外,还能了解一些网络安全知识,这将是面试时的一个加分项。

在安全研发岗位上,除了通用开发技能的要求外,还可以重点关注以下技术:

1. 二进制安全:这是安全领域两大技术方向之一。二进制安全方向主要涉及软件漏洞挖掘、逆向工程、病毒木马分析等工作,以及操作系统内核分析、调试与反调试、反病毒等技术。由于需要与二进制数据打交道,因此称之为“二进制安全”。这个方向的特点是需要耐心和毅力,因为它不像安全研发那样有实际的产品输出,也不像网络渗透方向听起来那么炫酷。此外,这个方向更多的时间是在默默地分析和研究。例如,学习各种攻击手法可能需要花费数月甚至数年的时间。要在这个领域取得成功,不仅需要勤奋,还需要天赋。

2. 网络渗透:这个方向更符合大多数人对“黑客”的认知,他们可以入侵各种设备,如手机、电脑、网站、服务器和内网。与二进制安全相比,网络渗透初期更容易入门,只需掌握一些基本技术和使用现有工具即可。然而,要想从脚本小子变成黑客大神,随着技能的提高,需要学习和掌握的东西也将越来越多。网络渗透方向更偏向于实战应用,因此对技术的广度和深度要求较高。

总之,安全研发和技术运维这两个方向各有特点和优势。如果你对网络安全感兴趣,可以根据自己的兴趣和特长来选择合适的方向。同时,无论选择哪个方向,都需要不断学习和提高自己的技能,以适应不断变化的安全环境。

网络渗透工程师的工作要求较高,需要对网络硬件设备、网络通信协议、网络服务(如web、邮件、文件、数据库等)、操作系统以及攻击手法等方面都有深入了解。他们更像是全能型计算机专家,能够将各种技术融会贯通,并用于实际操作。

网络渗透方向的工作主要包括以下几个方面:

1. 安全服务:也称为乙方,主要为甲方公司提供安全能力支持,如渗透测试、产品安全检测等。

2. 安全能力建设:也称为甲方,即国内较大规模的公司通常都拥有自己的SRC(安全应急响应中心),也就是自己的安全团队。

3. 国家队:这部分内容不便详述。

学习路线如下:

在确定了这三个大的技术方向后,接下来讨论如何上路。首先,不要过于关注具体的方向,而是要先打好基础!

第一步:计算机基础

这一步与网络安全关系不大,而是进入IT领域的任何人都需要掌握的基础能力。以下五门课程是大学老师当年教给我们的,无论你选择哪个技术方向,都最好好好学习这些知识。如今看来,这些课程仍然具有很高的实用价值:

1. 计算机网络

2. 计算机组成原理

3. 操作系统

4. 算法与数据结构

5. 数据库

实际上,每一门课程内部都包含了很多知识,很难在一次学习中就能完全掌握。随着职业生涯的发展和不同的技术阶段,我们会对这些知识有新的认识和体会。建议采用敏捷开发的方法进行学习:有一个初步的认识→进一步的认识→彻底掌握→温故而知新。不必纠结于在一门课程全部学完并完全理解之后才进入下一门课程。

第二步:编程能力

在掌握了上述基本功后,接下来就需要动手实践,编写一些代码来锻炼编程能力。对于安全行业的从业者来说,以下三种编程语言都是必备技能:

1. Shell脚本

2. C语言(C++)(可选)

3. Python

Shell脚本可以帮助您熟练掌握常用的Linux命令,编写简单的Shell脚本以处理一些简单的事务。C语言没有复杂的特性,是现代编程语言的鼻祖,适合编写底层软件,还能帮助您理解内存、算法、操作系统等计算机知识。建议您学习一下。Python则可以帮助您编写涉及网络、爬虫、数据处理、图像处理等功能性的软件。它是程序员,尤其是黑客们非常喜爱的编程语言,不容错过。

第三步:安全初体验

在具备了前两步的基本功之后,现在是时候接触一些网络安全技术了。在这个阶段,建议不要把自己局限在某一个技术领域。我的建议是广泛涉猎各种知识,积累经验。

你好,网络安全学习路线图包括以下几个方面:基础知识学习、安全技术学习、网络安全实战、CTF比赛、资源推荐等。其中,基础知识主要包括:网络基础知识、操作系统基础知识、编程语言基础知识、密码学基础知识等。

这里有一份详细的网络安全学习路线图,可以帮助你更好地了解网络安全的学习路径和方向。