有关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 找我交流。

Tags:
recent-work

数字电路知识点记录

TL;DR 最近太无聊,重新拾起cs61c课程,开始有些痛苦的数字电路学习。 我的仓库 这个博客就用来记录一下各种硬件的引脚和电路设计等知识。 Warm up Bssic 在更高抽象的程序中,一般情况下都是串行的。 但是在硬件视角中,都是并行的。(电路很快,所以要有负反馈/回授等 …

Read more →

动态调试xv6内核,复习OS知识

TL;DR 很早之前,我就做完了xv6内核的实验,也算是入门了操作系统 xv6小而精的设计思路的确适合初学者入门这样一个复杂的计算机分支 今天经过一定时间的沉淀后,重新来看看当时没有被完全理解,还有一些被一笔带过的知识 固件代码 过去,我们只关注到了内核被加载之后的内容,每次调试 …

Read more →