作者:FEEI(止介),蚂蚁金服高级安全专家、网商银行安全架构师
“ 人是一切的开始,也是一切的基础。”
我将以互联网公司的从业和招聘经验结合对网络信息安全行业和从业人员的观察,讲讲我对于如何招聘网络安全工程师的一些看法。虽是以招聘方的角度来叙述,但对于安全工程师来说,懂得“防”就很容易“攻”了,所以无论是即将要参加工作的同学,还是已经踏入职场希望更上一层楼的同学,都能拿遍所有公司Offer。
1、理解行业现状
既然从事这个行业,必然需要去理解这个行业历史和现状,在招聘的时候能够更加有底。
薪酬最高+上升无限可能
互联网是计算机行业中薪酬最高的,工程师是互联网中薪酬最高的,而安全工程师又是工程师中最高之一。安全行业井喷式的爆发,使得每家互联网企业的安全部门成为标配,高校的安全专业普及开来,作为一个“新型行业”,安全从业人员紧缺且入门门槛较高从而导致了薪酬水涨船高。
我们应该经常自省下,客观的看待下自己的日常工作是否对得起这份薪资。行业中不乏大量因选对行业而在吃这个行业红利的人,当然也有很多热爱这个行业实实在在的为公司甚至行业做出提升甚至改变的人。在这个行业里有曾经做工地工人到现在年薪数十万的白帽子,也有毕业没两年业余时间挖漏洞一年收入百万的白帽子,还有那些薪资高达千万的安全研究员。
只要你热爱,在这里存在无限的可能。这个行业很多人的背景极其相似,他们不是从大学才学习专业知识,工作经验可能也不长,但他们可能从初中甚至小学就开始接触专业安全技术。你会发现行业里面的牛人无不是因为热爱而成功的,热爱源源不断的驱使他前进的,当热爱和工作是一件事时,碰触的火花产生的工作效率是不可想像的。
良莠不齐
薪资高的好处是会有更多的人投身于安全,当然坏处也很明显,着急的岗位和紧缺人员导致存在大量良莠不齐的人在其中浑水摸鱼,明显的特征是你跟他聊技术细节他跟你聊推进落地,你跟他聊推进落地他跟你聊方向把控,你跟他聊方向把控他跟你聊团队管理,你跟他聊团队管理他跟你聊行业空间,又或者是今天这里听到一个理论还没弄明白明天就来跟你讲个概念,如果这些方面都能聊一点那也行,更多的是答非所问又或者句句有理但都不深入没有细节没有重点,虽然这么说会得罪一部分人。
安全行业可怕的一点在于,你做的好不好不是那么好衡量的尤其是行业外的人。而这还不像技术风险那样有发生概率,安全是短板效应,该出事一定能出事,所以行业内常说只有三种公司,一种知道自己被黑了,一种不知道自己被黑了,一种在被黑的路上,所以在前两年你会看到一些白帽子能随便入侵到各大公司内部。这样就导致如何甄别这一类人需要在最招聘开始把控住,否则后患无穷。
圈子文化
安全是一个小圈子,圈内的事情传播的非常快,比如谁家数据库泄露了、谁家被薅羊毛了、谁被抓了、谁被处罚了,这也是小圈子最大的好处,圈内的人很快能知道这个行业的新技术、新方向、新政策。你也可以很容易的知道每家公司的安全建设情况,比如你可以和阿里的人聊他们的线下配合公安的手段有多强,也可以和腾讯的人聊他们的SRC如何运营的这么好,也可以和百度的安全人聊如何让机器学习赋能安全产品的,这一切在安全圈内非常的容易。也有很多的安全会议可以学习到每家公司的经验,不用所有的事情都自己摸索也用闭门造车。
弊端也很明显,搞所谓的”圈子文化“,混迹于各种会议去主动认识各种圈内的人(当然这里不是指各家SRC运营的同学,这些是运营同学的工作一部分),认识的各种人如果是交流技术那也行,加了微信除了打招呼的自我介绍那句话就再也没说过有意义的东西,如何用好圈子文化是两种截然不同的结果。
2、安全从业者必备素质
当对行业情况有一定了解后,就需要去招人了,招人前我们得先弄明白一个优秀的安全从业者必须具备什么样的素质,当我们有了这个基线后就很容易发现候选人是否合适。
攻防渗透和软件开发
首先要明确一个概念,术业有专攻在安全行业不是常态。安全本身就是一个覆盖了客户端、前端、网络、后端、服务器等涉及软件开发(JavaScript、Python、PHP、Java等各语言)、算法学(密码学、机器学习等)甚至社会工程学的工作,如果非要讲究术业有专攻就没法做了,当你可以有擅长的方向,但前提是你都懂,这个懂不应该停留在了解的层面,如果你是安全开发工程师除了研发技能外还必须知道常见漏洞的形成原因、利用方式和修复方案,如果你是渗透工程师除了理解各种漏洞的攻击细节外,还必须有基本的开发能力。同时拥有攻防渗透和软件开发的人,在后面做事的方方面面会体现出极大的优势。
我们有过很资深研发工程师,但安全产品不同于用户产品,往往是都没有经验也没有参照物的,摸黑前行最好的情况是你曾住过这个房子,所以往往需要有很强的安全背景/不断的试错调整才能开发最好的产品。甚至在很多时候,沟通交流/思维上都需要进行转变才能更好的协作,减少代沟和沟通成本。这个要求并不是非要精通各种。
现状是安全行业更多的人是偏向于攻防渗透,而如果同时拥有很强的开发技能,优势将非常明显。在安全产品开发/漏洞挖掘/代码审计上。不同岗位间的互补显得非常重要,做漏洞扫描器的如果在SRC挖过漏洞、做代码审计如果会软件开发、做合规审计的如果有CISP证书就会得心应手。
自我驱动(兴趣/金钱/上进心/不服输)
像安全产品开发一样,渗透测试也需要不断的试错,不断的将各种可能存在漏洞的地方一一测试,往往测试数百个请求才有所收获,这需要很好的坚持,但坚持这种品质无法立刻学会,但往往有很多东西能促使我们坚持,比如兴趣、金钱、上进心、不服输精神等。我对于安全的坚持就是兴趣所驱动的,我会遇到一个线索从早上折腾到凌晨,会因为一个突破点从晚上摸索到下午。我见过太多优秀的白帽子都是因为热爱,他们能跨行业的热爱。仅仅能驱动自己不断前行远远不够,前行对路太长了你对驱动能量是有枯竭的一天,学会自我激励是一项必备素质,在关键时刻为自己加油。
自主学习
软件工程师是三年换一轮新技术,而安全工程师则是每年都有新的方向。每天都会有新的漏洞/新的攻击方式/新的语言漏洞,每年也会有新的安全技术、安全防御手段、安全方向,而应对别无他法唯学习,良好的自驱自学能力是一切的基础。
除此之外的进阶素质也很重要,基础的情商和智商,你跟别人聊天能快速接收信息,能跟上别人的频道,快速理解别人意图,能和各个团队合作方打好交道。但聪明有才华还不够,如果遇到问题就抱怨也难成事。前行的路上如果一直一帆风顺的话,当遇到一个大浪可能再也起不来了。我们前行的路上会遇到各种坎坷,也许能绕过并忽略这些坎坷,但你也同时丢了这些铲平坎坷的经验。不为任何理由找借口,有条件上,没有条件创造条件上。又聪明又乐观但是油盐不进,看不到自己的问题,也不能妄自菲薄,吸纳各方面的信息让自己的认知更完整。
3、如何慧眼识人?
招聘和找女朋友一样,朋友同事推荐(内推)的比媒婆(猎头)质量高,媒婆(猎头)推荐的比相亲网站(招聘网站)质量高。我们在招聘是需要遵守一些基本的招聘原则,应该招最适合这个岗位的而非最优秀的人,而优秀的人是值得等的,因此我们不能因为着急而把一些不合适的人招进来,包括招聘的事情一定得自己深度参与而不能把希望寄托于人事,否则现在偷的懒后面会花更多时间精力来填补。
当有大量简历进来后,我们需要快速甄别那些不合格的人。因此一份好的简历确实能提升面试官的好感,讲下我认为的好的简历是什么样的,当然前提是有真才实干。
整体要简洁明了,逻辑结构清晰。要能体现出知识、技能、经历、天赋、人脉。
基本信息清晰:姓名、ID、性别、年龄、毕业院校·专业、电话、邮箱、居住地
工作&项目经验:注意空档期、担任的角色与分工、公司行业知名度
体现技术能力:主要的技术栈以及能佐证的事情
其它优势:职业证书、奖项、会议分享、开源项目等
工作期望和方向:希望得到一个什么样的工作或自己专注的方向
个人评价:全方位的总结,展示出自己的专业技能掌握程度、亮点、优势等等。
加分项
使用PDF格式,简洁不花哨
有GitHub并参与过开源项目,可以写一些自己做过的小项目放上去
有个人博客,会写一些经验和问题的解决思路
邮箱使用gmail、foxmail或技术类邮箱(php.net)、私人域名邮箱等
4、完美的面试流程
面试注意项
- 提前约好面试时间和面试方式(电话/现场)
做好面试准备:对岗位要求、职责有清晰认识?是否阅读了候选人简历,知晓之前面试评价?本轮面试主要考核点?对候选人的疑惑是什么,感兴趣的是什么?预留足够时间调整好状态?
参与每一轮面试考察的重点不相同,了解之前几面的面试评价,从前到后以此考察知识和经验、能力、意愿、动机、个性特质、价值观。
准时参与面试,有事情应提前电话沟通到位
面试时把握好节奏,及时阻止话多的,多留停顿给话少的
面试时不问/不透露公司敏感信息
即使只聊一分钟就觉得面试者不合适,也不应该立即挂断,面试应不少于20分钟;时常控制在1个小时以内;
及时反馈面试信息,层级、录用意见、不足之处、待下轮考察内容
面试流程
自我介绍下个人情况、做过的项目和技能
观察谈吐,看思维逻辑是否有条理,沟通交流是否顺畅
性格类型是否合适
围绕做过的项目进行细节提问,根据岗位不同来提自己关心的问题(重点)
考察项目真实性、项目角色及分工
对项目的理解程度、掌握程度、思考等
遇到解决不了的问题怎么做?
考察学习能力和动手解决能力
CTF、乌云、翻墙、写技术博客、技术书籍、参与GitHub开源项目、常浏览的网站、游戏、电视剧、业余时间干嘛、业内牛人
综合体现出其技术热度
算法、前端、服务器的掌握程度
一些基础算法,比如快速排序、冒泡排序、选择排序、插入排序
一些机器学习算法,CNN、RNN、Tensorflow、验证码识别等等
前端JavaScript、HTML、CSS掌握程度,调试工具,编码等
服务器常用命令、配置、文件权限、进程栈、端口占用、异常日志等
自认为自己比身边人的优势
挖掘亮点,如何客观看待自己
自认为的缺点
客观的自我评价,讲自己没有缺点的基本可以不要了
最有成就感的事情
考察价值观,尤其对于一些未授权渗透甚至黑灰产事情的态度
未来职业规划?
是否有清晰的职业规划,对自己未来有长远思考
和当前岗位对匹配度
还有什么要问我的吗?
了解面试者所关心的侧重点
5、问问题的艺术
面试中大部分时间都是在倾听和问问题,如何发现其中的问题点、如何避免毫无连贯性的一问一答、如何问到关键问题点、如何辨别经过修饰的回答等等。如何有效的甄别一些滥竽充数的人,最重要的肯定是面试这道坎。安全圈的东西行业内的人谁都能聊一点,所以一轮面试一定得安全技术负责人亲自把关,深入的倾听和问问题来判断。
避免直接问问题
避免一上来就开始查户口式的询问方式,有点前戏先热热场,让他先从自己的项目开始介绍,围绕着面试者的项目经历为主线,结合实际项目信息把想知道的问题都融入进去。
- 反面例子:你之前项目过程中有什么难点?难点怎么解决的?为什么选这个方案?
正面例子:结合他讲到的项目信息,对他提到的问题进行询问,为什么
问问题方法:行为连贯性问法>假设法>引导法
比如之前没有上台演讲过那么去演讲会紧张,相反如果之前有很多演讲经验那么就不会紧张。每个人做当前事情时都会受之前行为影响,那怎么询问能够知道他演讲时是否会紧张呢?
问法1:假设你去上台演讲是不是会紧张?
问法2:演讲时是不是会紧张?
问法3:你上次上台演讲的时候是什么时候?当时演讲主题是什么?当时状态怎么样?
问题要有连贯性,不是直冲主题问演讲是否紧张,而是循序渐进先问一些能让他思考当时实际情况的事情,再转而问主题,没有留下思考的时间。当然反应快的人也能马上转过来隐藏或美化一些信息,这时候就可以询问一些不同角度的数据来结合着判断。
上面三类问题分别对应着三种提问方式:假设性问题、引导性问题、行为连贯性问题。
行为连贯性问题:基于行为的连贯性进行提问,一个人过去的行为能预示他未来的行为,比如一个经常迟到的人下次还会迟到。优先使用行为连贯性问题。
假设性问题:通过假设某个场景让面试者去应对。除非他讲的内容或历史经验没有能让你切入到行为连贯性问题上,否则就不要用假设性问题。
引导性问题:通过给出一个可能的结果来引导面试者回答,对于面试者来说相当于告诉他一个答案了,同时也会影响局限他的思路。大部分情况下都不建议使用引导性问题。
深究每个问题
任何一个问题都可以拆分成多个问题,问清楚事情每个模糊点和逻辑分支才能得到最真实的结果。
例子:面试者讲了之前做了一个针对研发同学将代码上传至GitHub上的监控工具历程。
常规面试官:架构是怎么样设计的?规则怎么选?频率限制怎么做的?告警怎么处理的?误报怎么处理的?
深究面试官:项目最最重要的点是什么?如何最优解决效率问题?如何突破频率限制?如何最方便的处理告警?如何对告警进行持续优化?告警可以分为几类?历史commit中泄漏信息怎么发现?
问问题实在发掘候选人的优劣势,但我们的问题会存在片面性。有时候需要一些灵活的问题来帮助候选人自我发挥讲讲自己的优劣势,对我们前面的面试作为一个补充。被问问题一方面我们能看出来面试者所关心的内容,另一方面也能看出对岗位的兴趣程度。
6、安全面试题目
以下节选部分安全面试题目仅供参考,可融合在面试过程中进行提问。
渗透测试(WEB方向)
挑选两到四个不同方向常见和不常见的漏洞,就漏洞原理、利用方式和修复方案进行提问,然后根据回答的情况进行详细深入的二次提问
Redis未授权访问漏洞如何入侵利用?
SSRF漏洞原理、利用方式及修复方案?Java和PHP的SSRF区别?
宽字节注入漏洞原理、利用方式及修复方案?
简述JSONP的业务意义,JSONP劫持利用方式及修复方案?
CRLF注入原理?
URL白名单绕过?
XSS持久化?
渗透全流程
就漏洞的检测发现进行提问
越权问题如何检测?
黑盒如何检测XSS漏洞?
如果爬取更多的请求?
应急思考
有哪几种后门实现方式?
webshell检测有什么方法思路?
Linux服务器中了木马后,请简述应急思路?
遇到新0day(比如Struts2)后,应该如何进行应急响应?
新业务上线前可以从哪些方向进行安全评估?
现有系统可以从哪些方向进行审计发现其中的安全风险?
基础开发
简述Python装饰器、迭代器、生成器原理及应用场景?
简述Python进程、线程和协程的区别及应用场景?
安全开发(JAVA方向)
Java基础
Java虚拟机区域如何划分?
HashMap和HashTable、ConcurrentHashMap的区别?
进程和线程区别,进程间、线程间通信有哪几种方式?
Java BIO/NIO/AIO是什么?适用哪些场景?
算法基础
快速排序的过程和复杂度?
冒泡排序的过程和复杂度?
CNN对比RNN区别?
业务基础
调试工具及异常排查流程?
数据库索引结构,什么情况下应该建唯一索引?
数据库分页语句如何写?
业务安全
HTTPS交互过程
OAuth2.0交互过程及其中可能存在的配置不当安全风险
对称加密和非对称加密的区别及优缺点
获取一个入参url,请求url地址的内容时应注意什么?
参数入库前应该如何过滤?
过滤器和拦截器原理和应用场景?
SESSION ID如何不被Javascript读取?
CSRF的Token如何设计?
同源策略?如何实现跨域请求?
安全运营(合规审计方向)
对于内控、合规、审计的理解
考察其对于要做的事情和岗位要求、公司环境是否匹配
考察其大局上考虑是否周全或是片面
传统行业和互联网行业的安全建设的区别及各自的优劣势
是否能准确的抓住核心原因
信息安全等级保护、网络安全法、GDPR
挑选一到两个问其对其的来源理解以及落地程度取舍
数据安全治理可以用什么思路做?
如何通过技术手段实现对异常操作的自动化监控?
如何对一个应用进行安全评估?
如何对一个应用进行安全审计?
如何理解权限分离、最小化权限?
考察一些CISP、CISSP的知识点
流程的设计
挑选一些较为复杂的流程,比如转岗、离职等,如何设计考虑其中的细节
安全架构(安全管理方向)
渗透测试、安全研发、安全运营的问题可以挑选的问一些,以确保在各个方向上比较均衡
对于企业不同时期、不同阶段、不同体量的安全建设的方法、区别以及侧重
你所做过的安全架构图和所期望的安全架构
安全与其他团队(运维、研发、测试、GR/PR、内控、高管及三方安全公司)的关系
安全建设的理念/方法论理解
纵深防御
木桶原理
由外而内
先低后上
能口不点
最小权限
权限分离
白名单和黑名单
漏洞和误报
规则经验和机器学习
漏洞危害证明
技术管控与意识提升的关系
安全推进方法
自研OR外采?
找到总的核心目标和各个项目的主要目标
创新和极致
责任分担
黑天鹅和灰犀牛
衡量企业安全建设的水平
不同公司间的安全区别或差别是什么?比如腾讯和阿里,百度和京东
如何制定公司安全建设的三年甚至五年计划
未来安全行业的发展方向?
安全笔试题目
面试题目往往大同小异,而由于圈子小的原因很容易传播出去,如果做过准备哪怕深入的问也可能有漏网之鱼。而笔试往往能很好的看出来其动手能力,所以应尽可能的出一些无法提前预知、无法网上查询的独有题目。
给定一个漏洞靶场,在一定时间内找出最多漏洞数
给定一台服务器,在一定时间内找出隐藏的所有后门
给一个项目场景进行安全评估(e.g.与三方厂商进行API交互)
修复一个参数可控的SSRF漏洞
读取一个文件第100-200行并发送到一个指定的API接口(着重考察对于各种异常情况的考虑)
最快的方式获取100万个子域名请求的响应内容并找出其中真实存在的子域名
受篇幅限制一些问题和做法无法展开来细讲,但万变不离其宗。招聘是工作中最值得投入时间去干的事情,人对了一切问题都不怕。
声明:本文来自FEEI,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。