有关CTF的思考
前言
首先非常高兴各位可以点开这个博客,无论你是否打算走 网络安全/信息安全 这个方向,我有一些小小的感悟在这里分享。
这篇文章我决定放在这里,也是想和其他一起学习网络安全的师傅们共勉。
写下这篇博客的时候,我也只是一个马上进入大二的计算机专业学生,对这些事物有理解偏差,还望谅解。
CTF 或许不适合初学
提起网络安全就会提到 CTF。但是令人感到沮丧的是,在当前的情况中,貌似 CTF 和网络安全已经混为一谈。CTF 就是网安,网安就代表着 CTF。
但经过一段时间的学习,突然发现,很多基础问题似乎无法通过单纯的 CTF 来学习,似乎更需要从零开始学习计算机本身。
被忽视的底层
不得不承认,安全领域的研究要比传统的软件开发更加复杂和困难。
在过去的移动互联网发展浪潮中,国内大部分的 IT 产品都是应用驱动的,以至于能够"增删改查"的"打字员"都可以被归类为程序员。但是"引擎盖下究竟是什么"(来自 CS50 哈佛计算机导论主讲老师的口头禅),似乎更为重要。
作为一个正在计算机专业学习的学生,愈发感受到计算机底层知识的重要性。
它不止让我们更加全面地认识计算机,也是塑造工程思维的绝佳场所。无论是 libc 的设计还是操作系统内核的实现,都是我们学习的绝佳材料。
在这里就不得不赞扬各个计算机强校的实验课,是真的通过一个可以运行的项目来让学生在痛苦中切实地提高 代码能力 和 工程实践能力。
底层是通往高级研究的必经之路
CTF 做多了你会发现一个现象:前期靠套路可以拿到不少分,但到了瓶颈期就再也上不去了。很多题目看起来无从下手,不是因为你不聪明,而是因为你的知识储备不够支撑你去理解题目背后的机制。
这时候就会意识到,真正的安全研究——不管是漏洞挖掘、漏洞利用还是安全架构设计——靠的不是背 payload,而是对计算机系统的深入理解。
举几个例子:想做操作系统层面的安全研究,你得理解进程调度、内存管理、系统调用机制;想做编译器和语言层面的安全分析,你得知道词法分析、语法树、类型系统;想做网络协议的安全审计,你得从 TCP/IP 协议栈一路追到应用层的解析逻辑。
这些都不是 CTF 能教给你的,它们需要你老老实实地去啃那些"看起来和安全无关"的课程。
更重要的是,底层知识决定了你的上限。做安全做到最后,拼的不是谁会的攻击手法多,而是谁对系统的理解更深。那些真正推动安全领域进步的研究者——发现 Heartbleed 的、找到 Spectre/Meltdown 的——无一不是对底层有着极深的造诣。他们看到的不是一道题,而是整个系统的信任边界在哪里。
所以,如果你真的想在安全这条路上走远,底层知识不是"加分项",而是"入场券"。
方向的选择?
在学习的过程中,早已察觉到,学习网络安全,分不同的方向也只是比赛的需求罢了。实际上,所有方向归到一起,其实就是计算机本身。Reverse 和 Pwn 看起来是两个方向,其实要掌握的基础知识大差不差。虽然我是学习 Web 方向,但是在学习 CSAPP 的时候也掌握了汇编和 call stack,以至于顺便入门了 PWN,都是你中有我,我中有你的关系。
所以我的建议是,不要一开始就把自己的路走窄了。先把计算机的基础打好,后面不管是转方向还是深入研究,都会轻松很多。那些所谓的"方向壁垒",很多时候只是因为你还没有学到那个深度而已。
那 CTF 到底有什么用
说了这么多,CTF 就是一无是处吗?当然不是。
CTF 最大的价值在于提供了一个明确的目标。你不用纠结"我今天该学什么",打开一道题,目标就是拿到 flag。这种即时反馈对于初学者来说非常重要。
但问题是,很多人把 CTF 当成了终点,而不是手段。
拿到 flag 了,开心一下,然后呢?这道题考的知识点你真的理解了吗?换一个场景你还能做出来吗?如果答案是否定的,那这道题对你来说只是一次性的消遣。
不要被"速成"绑架
网上有太多"30 天速成 CTF"、“一周搞定 Web 安全"的内容。说实话,我一开始也被这些标题吸引过。
但后来发现,那些真正厉害的师傅,没有一个是速成的。他们要么是科班出身,要么是自学多年,要么是两者兼有。
安全这条路,没有捷径。你可以走快一点,但不可能跳过该走的路。
我的一点建议
如果你是刚入门的新生,我的建议是:
先把计算机基础打牢。操作系统、计算机网络、数据结构与算法、编译原理——这些课程不是"选修”,而是"必修"。不管以后做安全还是做开发,这些知识都是地基。
CTF 当作兴趣,不要当作全部。每周花一点时间做几道题保持手感就好,不要为了刷题熬夜到凌晨三点。那样除了感动自己,没有太大意义。
多读源码。不管是开源项目还是 CTF 题目的源码,读代码永远比写代码重要。很多漏洞的发现,靠的就是对代码的深入理解。
写在最后
我知道写这些可能不太讨喜。毕竟大家都想听"怎么快速拿奖"、“哪个方向最好就业”。
但我觉得,有些话总要有人说出来。与其让大家在错误的道路上越走越远,不如一开始就告诉他们真相。
当然,这只是我个人的感悟,不一定对。如果你有不同的看法,欢迎交流。
最后,祝大家在 CTF 的路上越走越远,但别忘了,CTF 只是起点,不是终点。
如果有任何想法,欢迎来 GitHub 找我交流。
