Cyrus Blog

FLAG{S0_H4PPY_C_U_H3R3} (>.<)

甲方信息安全研发技能树

本文共 3.1k 字,预计阅读时间 10 分钟。

这是一个给信息安全专业同学、并致力于向甲方安全发展的技能清单。从甲方从业经验,以及最近面试一些同学的体验出发,我梳理了一些内容。这些内容可以在约两年时间内,让一个会编程但是不懂安全的小白完成不错的发展。

甲方信息安全 vs 漏洞挖掘 vs 研发

甲方信息安全 = 40% 安全 + 30% 研发 + 20% 架构 + 10% 管理沟通。

首先我们明确,乙方也是有信息安全研发的。但是乙方信息安全研发人员中,很大一部分会在 1 到 2 个工作经历后进入甲方,他们会将乙方的研发经验(甚至完整的工具和结构)带去甲方。因此我们这里对比的是工作是漏洞挖掘,即以挖掘外部或内部漏洞、安全服务为主的乙方工作。

和漏洞挖掘相比,漏洞挖掘对安全的要求是远远高于甲方的。但是通常来说,精通 Web / 二进制 / 区块链 等任何一个部分即可成为合格的漏洞挖掘工程师,他们也会被称为信息安全研究员。他们会了解一些常见框架的搭建、运维但是不一定需要很高的二次开发和架构经验。

和研发相比,甲方信息安全有了安全这一加成,在某些一线大厂的面试中,会大幅降低对研发技能的要求。比如头条系算法题相对简单,阿里系系统题相对浅显。但是研发技能其实是非常重要的一部分。并且在安全达到一定水平后,快速构建一些服务和系统是工作中非常令人愉快的事情。

技能前置

技能树是有一定前置的:

  • 基本数据结构和算法。想一想数组、结构体都会用吗?二叉树会不会构建?不熟悉不要紧,给一个 Google 能很快写出来就好了。
  • 会写代码。语言最好是 Python 或 C/C++,虽然我大一的时候只会 Pascal。选这些语言的好处是:不关注底层而关注代码逻辑,资料多,容易有成就感。这或许是持续学习的好帮手。
  • 知道安全是什么。只要知道安全不是盗一个 QQ / 支付宝 / Steam / 银行卡或者删库跑路就行。
  • 有基本计算机科学素养。会装虚拟机 / 开启命令行 / 不要在 helloworld 里写中文标点等等。

此外:

  • 甲方安全通常以 Web 为主,二进制有很强基础并且对 Web 不太感兴趣的同学建议移步漏洞挖掘工程师。当然,APP 防护方面和最近的 IOT 安全热潮对二进制安全人才需求还是很大的。
  • 二进制要不要学?当然要,但是这只是加分项。

技能规划

我们分为四个半年,并且在之后做出一定的规划。规划以技能点给出,具体学习资源可以自己寻找或交流。

值得注意的是,这个技能规划可能是偏高要求的,在两至三年内完成都是正常的,注意劳逸结合(避免头秃猝死)。规划前紧后松,是为了不慌不忙。两年内就完成可以说是天赋异禀的大佬啦!

初次工作前目标简历

  • 熟悉 Python(脚本语言很重要),会使用 C/C++/Golang/Rust (其中任意一种,只会 Python 给人一种脚本小子的感觉)
  • 熟悉 Web 安全,有一定的实战经验(这里可以说一些工具)
  • 可以较熟练的开发简单的安全工具,实现指定的安全功能
  • 参与过网站开发,有一定前后端经验
  • 了解分布式平台
  • 会使用 Git 管理版本

初次工作后目标简历

  • 熟悉 Python,会使用 C/C++/Golang/Rust 进行项目开发(选两个吧),选用适当的数据交互方式黏合不同语言开发的组件
  • 熟悉 Web 安全,有中小型安全产品开发经验
  • 可以快速开发安全工具,投入简单测试和迭代
  • 在分布式平台和集群上有过开发经验
  • 有一定的项目架构经验

1-A

主线:Web 安全

支线:如何 Google / 运维 / 英语

技能点:

  • Web 安全

    • 了解各种基本漏洞。我想安全知识是安全专业最好找的内容了
    • 根据已有靶场如 VulHub 完成复现并了解原理
    • 多用 Python 写写脚本,找轮子和调库也是有技巧的
    • 尝试自建靶场
  • 如何 Google

    • 习惯土啬外生活
    • 多和学长学姐交流安全经验啦
    • 安全行业相关的也可以开始了解,早点知道未来的 JD(Job description)就很棒
  • 运维

    • Linux 命令使用技巧(但是不需要 Bash 编程)
    • 一个网站应该如何部署。推荐买一个域名,买一个 VPS,全自动脚本建一个静态 Blog
    • 如果网站被攻击了,怎么修复?
  • 英语

    • 建议过一下四级
    • 习惯土啬外生活

1-B

主线:前后端开发(后端为主)

支线:安全 / 算法 / 运维 / 享受生活

技能点:

  • 前后端开发(后端为主)

    • 了解一个网站的后端是怎样的。推荐从 Django 等 MVC 体系框架开始,这样包括数据库和一些模板渲染都学会了
    • 知道什么是并发,什么事异步
    • 学习 Nginx 和 Apache 配置技巧,包括反向代理 Python 或 JS 起的后端,和 PHP 的对接,静态资源调配
    • 学习一下热更新技巧,有助于后期更好的优化架构(最好给大家用一用,就会有人提需求了)
    • 加一点前端开发,Bootstrap 就好,Vue / React 更佳
  • 安全

    • 安全技能进阶,最好实战一下(注意安全.jpg)
    • 试试看自己写的网站有没有逻辑漏洞?(最好给大家用一用,而不只是 demo)
    • 二进制基础入门:什么是指针?什么是堆和栈?
  • 算法

    • 不一定要做到默写(实际上默写毫无用途),但是需要真正理解
    • 图论学一些,可以适可而止(除非立志参加 ACM)
    • 虽然以后不一定用到,但是多多益善
    • 量力而行,有 ACM 奖项更佳
  • 运维

    • 学习一下优雅的自动部署
    • 学习一下优雅的看 Log
    • 网站里加一下其他功能,学习如何通过 JSON / Ajax / Thrift / Protobuf 等完成跨语言数据交互
    • 了解一下集群架构
  • 享受生活

    • 总要有点爱好嘛,压力太大不适合长期学习(即便很喜欢学的内容)
    • 毕竟学了一点东西了,不会因为无知而飘飘然,所以不要担心太颓,到这里已经很棒了

2-A

主线:安全开发

支线:安全 / 分布式 / 了解企业

技能点:

  • 安全开发

    • 安全开发和安全不一样
    • 比如写一个爬虫,自动扫 XSS 或者写一个大马,不仅有很多新姿势,或许还真有用途(继续注意安全.jpg)
    • 最好写一写目前不太多的工具,不一定多完善,但是很用心的那种
    • 如果有机会,学一点基本的机器学习(请不要沉迷炼丹)
    • 这一部分开发经历是初次工作前简历的一个亮点
  • 安全

    • 安全当然继续要学
    • 认识一些安全圈大佬,不是吹逼套近乎,而是扩展一些信息面
    • 如果有可能,多去一些竞赛,做一些培训,至于会议什么的其实没什么用
    • 了解一下黑灰产?毕竟这才是甲方的敌人
    • 有机会还是多实践(千万注意安全.jpg)
  • 分布式

    • 是时候做一个大数据工程师了
    • Spark(可以选用 PySpark)等计算平台先用一用
    • 尝试构建一个本地的 K8S 集群
    • CAP 学一学,模型学一学
    • 这也是初次工作前简历的一个加分项
  • 了解企业

    • 有哪些企业,想去哪些企业
    • 想去的企业需要什么技能(这种在最初也提到过,但是最新的信息更加准确一些)
    • 如果初次想去初创型小企业,请继续强化开发技能,包括一些开发流程如 Git / CI / CD
    • 如果初次就想去大企业,准备刷刷题

2-B

主线:准备第一份工作

支线:基础知识 / 开发 / 客制化需求

技能点:

  • 准备第一份工作

    • 现在已有的技能已经可以达到初次工作前的目标简历了
    • 但是不要写太满,**“这人居然还会这个” **比 “这人原来只会这些” 的评价要好很多
    • 不一定要投大公司,小公司可能会有更加独立的开发经验,在第二份工作前,大公司的螺丝钉和小公司的独立开发者区别不大,甚至小公司的独立开发者更吃香
  • 基础知识

    • 或许你大学因为沉迷安全和一些技术没有好好学习,请尽快补一下
    • 面试毕竟很多东西考不出来,在校生还是会以基础知识为主。如果不是经历非常牛逼,还是乖乖地看一看书
  • 开发

    • 随便看一看,补缺补差
    • 最好做点记录,至少告诉面试官:我在学习
  • 客制化需求

    • 如果拿到 Offer 了,了解一下公司的技术栈
    • 更快上手会让大家对你更加赞赏

第一份工作后

主线:架构

支线:开发流程 / 管理 / 生活和行业情况

技能点:

  • 架构

    • 我需要做什么
    • 别人希望我做什么
    • 如何接受或拒绝需求,为什么要这样做
    • 可配置化、未来扩展、部署方式怎么确定
    • 如果是分布式平台,下发、热更新都会是很棒的挑战
  • 开发流程

    • 这是一个工作和独立开发的巨大区别
    • 开发流程、开发规范看上去繁琐冗长,但是是有效的
    • 以后的工作中可能会学着接入底层流程,或者指定流程,所以好好学习借鉴
  • 管理

    • 如何管理自己的排期
    • 如何快速告诉别人自己在做什么,已经做好了哪些
    • 如果可能,如何安排适量工作给另一个人
  • 生活和行业情况

    • 如何实现财富自由(笑)
    • 实际上是,考虑哪些经验是不依赖于公司的,而是自己真正可以带走的
    • 以及那些经验可能更加拥有含金量
    • 行业发展如何?会不会考虑转行?

结尾

我想现在已经可以更新第二份简历了。此时根据自己规划,更新完简历后选择下一家公司或者继续做下去,随后的发展只有自己独特的道路了。

目前我没有跳槽的打算,不过实际上我刚刚更新自己的第三份简历,这一份可能勉强达到了文中【初次工作后目标简历】也就是第二份简历的水平。当然我也不是在这个领域发展最快或者最好的那一位,因此我不打算写出任何一本推荐的书、资料或者推荐的公司之类,如果想要了解可以从别的方面广泛的收集这些信息。我只是在想,如果在我大一开始时,有人给出这样一份简单明了的规划案例,我或许会有着更好的目的性去学习知识和技能。所以我在此时此刻写了这份文档。

不过,我很享受我的大学生活(大雾x(或许是因为日常都在浪和划水,以及低分飘过一些课程)。

希望大家可以在甲方信息安全研发的道路上一帆风顺。