给信息安全入门者的一点建议

这是给学校里学弟学妹们写的,师傅们就别看了orz。。

首先要声明的是,我的水平也不高,如果非要说比你们有什么优势的话,也就是早学了一两年而已,说实话我也不知道自己现在有没有真正入门,因为每搞清楚一个方面后,又随即会发现还有很多新的方向需要学习。总之信息安全并不是一门容易学好的学科,从现状来看,可以说90%人一直到了大四毕业也没有真正的入门安全,50%的人荒废学业,一事无成,另40%的人按照学校的课程开设安排学习而没有自己的一点见解最后成为了一名程序员2333,所以在你们入门安全之前,有件事情一定要想好————你们是否真的未来打算从事安全行业?我身边有太多同学编的一手好程序,精通算法数据结构,他们的大学也很充实,但就专业来说,他们最后并没有选择信息安全方向.这并没有任何问题,只是个人的选择而已,所以同学们,如果你们并没有对安全多么感兴趣,按照你们自己的想法学就好,最后的信息安全方向并不是每个人都一定要走的,无论是什么方向,大学四年没有荒废,能学得一技之长就OK。

下面我会基于自己的学习经历,把我摸索出的路讲给你们,其中有一些很关键,还有一些只是个人的一点想法或者说面对岔路的选择,自取吧

作为之前没有任何安全知识与基础的大学生,编程是首先也是必须要学习的,这是立足之本,不仅要学,还要学好,学广,面对别人写的程序,如果你连代码都看不懂又谈何挖掘其中的漏洞呢?所以信息安全从业者必须能写得一首好代码,而且懂得多门编程语言,这点上学校只会教授C++与Java,其他的是你们要自己去学的

还有一点是这四年时间的安排问题,我们在大四的时候才会开设诸如计算机病毒学,网络攻防这些课程,很显然对于一个毕业后面向社会的大学生太晚了,所以就要提前自学,那么我们需要学习什么呢?首先如果没有基础的话肯定不能上来就搞安全,以我自身为例,我选择的网络安全方向,那么就需要学习计算机网络,网站相关的前端语言如JavaScript,学习HTML,学习至少一种服务端语言(我选择的PHP),然后至少要熟练的掌握一门脚本语言,这里大部分人都选择的Python,当然你也可以使用C++,Java这些作脚本语言用,但其实就算选择其他脚本语言的话,作为一名黑客,不懂Python总感觉还差那么一回事。以上就是在正式入门安全之前需要掌握的知识,上面提到的任何一方面如果没有接触过的话,做安全时都会感觉难以下手,就像你小学面对一篇高考英语阅读一样寸步难行。 是不是感觉要学很多东西?还差的远那,这些只是最基础的,安全人员在工作中会遇到各式各样的程序员写出来的产品,如果对方所用的知识你没有接触过或者短时间内学不懂的话,是根本无从下手的,所以对于新知识,安全从业人员需要具备快速学习掌握的能力,如果之前就接触过的话是最好的,所以平时也要接触各种新技术才行。
好像扯得有点远了,除了向你们展示要学习的基础知识,还有一点是希望大家考虑下:你学完这些的时候得大几了?反正我大概是大二上学期才学习完的这些知识,之后才正式接触了安全,虽然可能学长们会提前教你们一些安全知识,但不要忘了上面的基础知识是入门安全必要的,这一点在你们接触到安全知识时会有所体会
对了,有一点忘说了,怎么学习这些基础知识呢?计算机网络的话需要着重掌握HTTP协议,过于底层的通信方式放在大三的计算机网络课中正式学习也不迟。那些编程语言的话,简单了解变量定义,控制结构就可以了,剩下更多的放到安全知识中用到了什么再深究什么也是不错的选择

OK,到这里就可以正式开始介绍安全入门了,如果你是大牛的话,直接去各大漏洞提交平台给企业挖洞就行,不过我想大家和我一样都还没达到那种水平,那么怎么磨练自己的专业技能呢?这里就要介绍到一种名为CTF的比赛了,CTF也就是夺旗赛,比赛举办方提供服务器让参赛选手去攻击,选手组队参赛,每成功拿到“旗”,也就是比赛中所称的flag,提交给举办方通过后就会获得相应的分数,最后排名按照分数来计算,CTF是安全行业中很常见的赛事,不仅学生会参加,很多安全行业从业人员也会参与到其中,在这里你可以磨练自己的安全技能,从而得到提高,借用Ven牛的一句话说,CTF是信息安全最好的入门方式了,没有之一,其实这也是我们为大家举办培训的初衷,这些一会我会放在最后来说。

从我自身打CTF的经历来说,前期会感觉很困难,在做题目的时候四处碰壁,这是因为你还没有真正入门,但如果坚持不下来的话,你永远也入不了安全行业的大门,那么坚持做什么呢?CTF比赛在国内有一个XCTF联赛,自己google网址,国内大部分有影响力的CTF赛事都在其中,而我们要做的,就是坚持跟着把每场比赛做下来,赛后认真的吃透每一道题目,吃透每一道题目,吃透每一道题目,重要的话三遍!你可以不参加比赛,但结束后一定要在答案出来之后马不停蹄的分析题目,学习里面的知识,尤其是web题目,因为web环境很少能维护很长时间,一般三天内题目环境肯定会关闭(二进制题目就另说了),所以需要及时的照着答案吃透题目,否则之后就只能干看答案了。客观来说XCTF联赛里的题目不简单,我自己的话好的时候一场比赛下来能做出来一两道就不错了,但这不是关键,怕的不是做不出来,而是赛后没有回顾消化题目,让这场比赛白白浪费了。如果大家觉得一开始做XCTF联赛里的题目有些难的话,也可以从实验吧,i春秋等训练平台上吃透一些题,但个人觉得还是要做真正比赛中的题目才是最有效的,因为这种比赛中的题目质量更高,也更能学到东西。

就着上面对在比赛中学习的阐述,大家应该警醒一些,从前几次的培训结果来看,好像同学们就满足于听上我们一两个小时的讲解就算完了,课下不去练习,我可以很明确的告诉诸位,这样的学习效果近乎为零!不要指望着我们能教授给你们什么体系完善,逻辑上难度上都阶梯上升的知识,毕竟我们不是专业的老师,专业水平也没有那么强,拿我自己来说,你们觉得我近一年的专业学习,几十场比赛经验能在几次培训中讲出来?最多最多最多,我们也只能充当一个领路人的角色,告诉你们需要学什么,大致的框架是什么,去哪里学,难度有多少,剩下的是要你们自己走的,信息安全本来就是一个要求自学能力的科目,没听说过哪个大佬是在培训中学出来的,要知道优秀的程序员永远都是野生的,黑客更是这样。如果你觉得这些实现气起来很困难,或者说与自己的学习方式不符,那么只能说信息安全不太适合你,这并不是贬义,每个人都应该找到适合自己的学习方向嘛,既然这样了为什么要一头扎死在信息安全行业中呢,去寻找适合你自己的学习方式的方向吧。

其实说到课下的自主学习,也并不只是打比赛,赛后总结学习题目,还有很多,下面我会一一介绍

除了那种大型的CTF赛事外,还有很多小型的比赛以及国外的比赛,以及实验吧,i春秋,合天等一众信息安全教育平台上的题目,手痒时可以做做。。。

然后就是很重要的博!!客!!,在CTF你总会见到一些明星队伍,清华的,上海交通大学的,浙江大学的,北航的,北邮的等等等等,这些队伍里面都有一些很厉害的人,他们中很多人都在维护着自己的博客,博客中会有他们写的一些比赛答案的文章(这是我们赛后找答案的好地方),一些经典漏洞的分析,一些笔记总结,一些人生感悟(这个就算了)啥的,在没有比赛的时候,其实我更推荐你们去这里面学习,就算里面都是很久之前,已经没有题目环境的比赛答案,从中学习还是很有必要的,就我自己来说,所学习到的知识,从比赛中与从博客中是五五开的。另一个角度来说,看博客是了解CTF圈子最好的途径,没有之一,你可以了解到那些在比赛中把你虐的不要不要的真大佬们,如果能和他们联系上混好关系,对自己之后的发展是非常有帮助的。额,人际关系方面我们还是一会再说吧,那么从哪里找到这些博客呢?其实很简单,博客与博客之间会有友链,如果你有一个博客链接,就能找到很多大佬的博客,然后你就会发现整个圈子也就那么小,不同队伍的大佬之间都互相非常熟悉,就比如浙大的小m师傅和福州大学ROIS队伍的蓝猫师傅就是一对好基友2333。初始链接的话就从这个开始吧,http://bendawang.site/,这是一个给过我很多帮助的师傅,也非常羡慕他的水平。

再然后。。其实就和现在有些远了,在你的水平达到一定程度之后,可能就会关注更多的不仅限于CTF方面的安全知识(其实从ctf题目的趋势来看,高质量的CTF比赛赛题也会越来越多的涉及到这些),比如各种安全会议的PPT文稿,最新爆出的漏洞分析,360,阿里,腾讯这些安全大厂写的一些比较有深度的安全文章,如果英文过关的话,还有很多国外黑客的研究成果可以看,如果技术足够的话,还可以去漏洞提交平台提交漏洞等等。目前我自己也还没有到这种水平,正在朝这方面努力吧,看时间够不够了,大学四年真的很短,如果想学点什么东西的话。

嗯嗯,差不多了,然后我们可以聊一些不那么“切实际”的东西,但这些也很重要,希望大家能记住
最想说的还是信息安全这个圈子的人际关系,刚才也提到了,当你技术达到一定水平后,其实圈子也就那么小,大家在比赛中互相切磋,也都互相认识,每个人都有自己的称呼,大家在一个群里聊天的时候也总是师傅长师傅短的称呼(好像这个行业很流行说自己菜,然后膜拜各路大佬?),真的打到了一定水平其实根本就不用担心就业问题,因为你在圈子里都已经很熟了,会有很多在360,阿里的师傅直接把你内推了,当然这一切都要建立在你足够强的基础上。所以认识人,多交流是很重要的,也是必须的,自己闷头学不仅认识不了人,而且也不一定能学的好,你需要接触更多的人来扩宽你的眼界。容易一点的做法是加入各种CTF比赛的交流群,从日常聊天中就能知道那些是大佬,更有效的方式是直接去找这些人去聊天,和他们混好关系,但这种方式比较难,为什么呢?一方面式因为他们本身很厉害的话就会有很多人来找他们聊,就不一定能顾得上你,更重要的原因在于自己,谁让自己那么菜?交流是双向的,如果只是一方的单向付出的话就很难实现,尤其是和你完全不认识的陌生人,也就只有和你有些关系的人,和你们的学长会这样做了。。。因为学校里没有大佬所以我很早就和外面的人交流了,也认识了一个愿意带我的师傅,还是蛮幸运的,不过话说回来,真的学习还是得靠自己,我和我师傅的聊天也就只是比赛结束之后找他聊思路,没事聊些动漫啥的。。。

差不多可以收尾了,在最后是我想说的一件最重要的事情:为什么我们为大家会开办培训
其实讲真我们的学习也很忙,比赛,项目,考研等很多事要做,但我们不得不做这个培训,从之前对CTF比赛的介绍大家应该也能知道,有很多的明星队伍,他们都是一些很厉害的学校里的队伍,这些队伍每年都会纳入新的成员,然后老手带新手,这样一届届的延续下去,这对学校的安全氛围是一个很好的引导作用,所以他们慢慢的也会变得越来越强,在更多更大型的,甚至在世界性的舞台上展露头角,我们称这些学校是信息安全强校,清华,上交,浙大,北航,北邮,西电,武汉大学,杭电,福州大学都在此列,很显然我们学校不是,我们没有一个好的信息安全专业氛围,没有自己的队伍,没有一届带一届的模式来培养新人,甚至没有自己的信息安全协会,每一届的学生靠自己努力达到了一定程度,然后毕业后什么都没留下,下一届还是重复着上一届的样子,我们之前是有在全国信息安全比赛中获得一等奖的学长,也有在全国作品赛中获一等奖的学长,但对现在的我们有什么影响?只是几块宣传牌罢了,所以到了我们这一届则希望尽量改变这种状况,你们可以看到小路学长在这学期创办的信息安全部,我们为大家做培训,其实这些都是希望在我们自己的水平上帮助大家,能在你们接下来的几届中引燃一些安全氛围的火苗,虽然我们水平有限,放在一些强队里也都是给大佬端茶送水的角色,但这仍然是我们必须要做的,这就是我之前在培训中想说的情怀性的东西,但一直没有说出来,希望大家不要把这次培训只是看作知识的传授,在我们毕业的时候,希望你们都能学有所成,接下我们手中的火把,延续下去。