校招|互联网安全岗5家offer面经

校招|互联网安全岗5家offer面经 #

序言 #

在毕业前夕,我向实验室的同学们分享了自己的求职经历,获得了学弟学妹们的较好反响。由于是演讲形式,当时只讲了一些时间节点、心态和技巧等方面的建议,并未具体讲面试细节。现应大家的后续要求,把我记录过的面试细节进行分享,希望能够对即将面对校招的安全方向的同学们有所裨益。

个人情况 #

首先介绍一下我自己的基本情况。我的本硕学校都是上海985,本科专业是计算机大类,硕士专业是系统安全,主研方向为二进制安全(具体见博客中的自我介绍);无实习经历;无企业项目合作经历;面试时尚无论文发表;浅搞过ACM和CTF竞赛,都没搞几年,没得过什么厉害的奖。
我的职业意向是上海的互联网大厂的安全岗,从研二下的春招就开始参与各种面试,有安全岗的互联网大厂基本都投过,早期也面过一些研发岗,直到研三下的春招结束一共拿到了5家公司(阿里,美团,华为,b站,大疆)安全岗的offer。最后入职美团。

求职思维 #

在讲面试经历之前,分享一些我认为帮到了自己的思维,希望大家带着这样的求职观去阅读后文的面试经历,也希望大家少走弯路。在实验室听过我分享的同学们可以直接跳过这一part。

  1. 明确目标
    越早明确目标越好,包括目标岗位、目标类型的公司、目标城市。在早期求职阶段,我由于对自身安全专业技能不够自信,出于一种兜底心态还同时面了研发岗,后来证实面研发岗完全是浪费时间和面试机会。平时的研究根本不搞开发,研发岗当然一个offer也拿不到,不仅打击自信,还浪费精力。所以建议校招求职者早些想清楚自己未来想做什么类型的工作再开始投递简历。一方面可以早早按图索骥,另一方面避免浪费时间。
  2. 多交流,多交流,多交流
    我从研一开始就经常旁听前辈们关于求职的讨论,也多次和他们直接交流;在自己求职过程中我也非常积极地和同级生互通有无。消除信息差对自己的战斗十分有益。
  3. 做好持久战准备
    一方面指早点开始面试(练手),面试经验越多越熟练,越不紧张,信息越充足;另一方面指心态要放平,此处不留人自有留人处,面的公司足够多一定能得到offer的。
  4. 掌握主动权
    面试实际上是面试者"出售"自己技能的一个过程,这个时候就应该"王婆卖瓜,自卖自夸"。面试中尽量多说话多表达,既可以展现自己的专业性,还可以在一定程度上套路面试官。面试官习惯顺着面试者的回答继续问更深入的问题。
  5. 制度是死的,人是活的

面试经历 #

接下来进入正题,以下是我经历过的安全岗的面试记录,同一公司的多次面试经历按时间排序。研发相关的面经以后有空再整理(全是凉经)。

腾讯 #

腾讯安全岗没有笔试。

后台策略安全实习岗(未通过,2020年春招) #

官网投递。一轮游,面试持续50分钟。自我介绍,之后做题,最后问答。

  • 第一题
    c语言各类变量类型size。代码如下。(自己面试时候不让编译。答错好几个)
    答案:
    int:4 long int:8 c:6 d:1 ll:8 foo1:1 foo1:1 foo2:4 foo:4
#include <stdio.h>

using namespace std;

void foo1(){}
int foo2(){}

int foo(){
	int a=0;
	long int b=1;
	char[] c="hello";
	char d='a';
	printf("int:%d\n",sizeof(a));
	printf("long int:%d\n", sizeof(b));
	printf("c:%d", sizeof(c));
	printf("d:%d",sizeof(d));
	printf("foo1:%d\n",sizeof(foo1));
	printf("foo1:%d\n",sizeof(foo1()));
	printf("foo2:%d\n",sizeof(foo2()));
	printf("foo:%d\n",sizeof(foo()));
}

int main()
{
   foo();
   return 0;
}
  • 第二题
    char*类型的IP地址转为unsigned int。剑指offer的原题。(我写的时候高低位写错了。。。)
  • 第三题
    找到链表倒数第K项。剑指offer原题。我做的时候遍历了两边表,复杂度O(2n),面试官认为我的算法不是最优,剑指offer的原题是遍历2K次,复杂度O(2K)。(我认为这差不多。。又不知道K和n多大。总之原题还是要刷)
  • 第四题
    概率论题,准确率和查准率的应用。
    城市里有两种车,绿车占85%,红车占15%。有一个车辆肇事了,目击者说看见肇事车辆是红车,经检验,他说到的话为正确的概率为90%。问肇事车辆为红车的概率。(不会)
  • 其它问题
    策略问题:一个城市车辆限牌限行,有什么策略,如何对比策略的效果。(瞎答一顿,可以看出对方不满意)
  • 反思
    这个岗位和我的目标偏差较大,在投递时没有理解清楚招聘需求,虽然岗位有安全二字,但实际上更像大数据分析+开发。我自己的知识面也不够广。

科恩移动安全实习岗(未通过,2020年春招) #

官网投递,方向不太匹配,一面之后转到别的部门了,电话面试持续50分钟。

  • 项目
    • 我第一个项目是符号化执行的,对着简历问项目细节,项目做了哪些优化,项目挖洞情况
    • 符号化执行怎么处理扁平数据流的代码(不会)
    • 我提到目前在做SE和fuzzing的结合,然后开始问fuzzing
    • Fuzzing概念,简述一下AFL,AFL反馈机制(coverage+interesting input),AFL怎么获得coverage(插桩细节),AFL怎么做和程序的交互(shared_memory和bitmap),符号化执行工具怎么和AFL做结合(一个卡住的时候换另一个)
    • 讲第二个项目,安卓fuzzing,讲细节(逆向静态分析fuzzing),静态分析部分提取的smali里的字符串是所有字符串吗,效率是不是比较低,怎么优化(优化后只提取了和条件语句相关的一些字符串)挖到什么洞(Dos)
    • 项目提到了安卓逆向,用什么逆的(JEB),JEB分析过商业软件吗(分析过京东),怎么快速定位到商业软件的一个功能,比如说京东的支付(我说看JEB的类列表,他说这个其实也挺低效的,有其他方法吗,我不会),如何找到一个抽象类的抽象方法(不会)
    • 有没有做过安卓动态调试(用过adb,但是没怎么用adb调试过,但是做过hook)
    • 项目里说只分析不加壳的安卓APP,那加壳有没有什么解决方法(运行之后把内存里的代码dump出来),这种方式对大多数加壳都有效,还有别的了解吗(不会)
    • 安卓hook用什么做的(frida),怎么hook一个动态加载的函数(用aslr绕过的方法胡说了一通),hook的是java代码还是native代码(java)
    • 有没有逆过java native代码比如各种.so(逆过,记不清了)
    • 有没有了解过安卓ARM指令什么的(只看过smali级别的东西,不懂ARM)
    • 公开的intent除了能找到DOS还能有什么问题(有隐私泄露),具体怎么泄露(我说收到intent会得到反馈,他说activity这种组件不会给反馈,我说我不记得是service还是broadcast会反馈了,没继续问)
  • 技能考察
    • 平时逆向都逆什么平台(linux),Linux二进制什么类型(ELF),讲一下ELF的文件结构(背过的,各段顺序可能有点不对)
    • linux的二进制有什么防护机制(从pwn的角度讲了NX,ASLR,危险函数等),NX怎么绕过(一开始说了一个栈不可执行就往bss段写shellcode,后来讲了一下ROP。面试官说NX绕过ROP说得对,shellcode说的不对)
    • 仔细讲讲ROP(讲ROP原理)
    • 怎么绕ASLR(先leak地址,找到对应libc版本,再通过偏移定位到具体想要执行的函数)
    • 危险函数有啥,怎么解决(printf,gets之类,解决办法是用他们的secure版)
    • GOT表相关的东西怎么防护(设置GOT表不可写),他说还有其他的吗(现在想起来还有GOT只能读到部分partial RELRO,但是当时没想到)
    • 防止栈溢出还有什么保护机制(canary,讲了一下canary保护原理),为什么canary被写了程序就可以立刻感知到(不会)
    • 会不会堆溢出(不会)(其实会一点但是忘光了而且也没复习所以直接说不会)
    • gdb调试linux程序时,怎么看libc里面一个函数的代码,调试+源码怎么做到(xjb讲了一下pwndbg,也不知道对不对)
    • IDA逆向时候有没有遇到过混淆代码,怎么解决(说了一个加壳破解的方法,混淆解决忘了)
  • 互动部分
    他说他们是主要做移动安全的,问我的倾向的方向(二进制),告诉我录取的话应该是做移动安全的二进制,即安卓native层面。

科恩软件分析实习岗(未通过,2020春招) #

科恩移动安全把我简历转到这个部门的,一轮游,电话面试60分钟。

  • 自我介绍(提到了ACM和CTF)

  • ACM:

    • 树和图的区别
    • 图,讲几种最短路算法,复杂度多少
    • 会不会树状数组(不会,我主要做数论和图论)
    • 数论问题:给一些数字,在其中找一个子集使子集里数字加和为0。(这题不会,想了半天,最后面试官说问下一个题吧)
  • CTF

    • 了解二进制混淆,做过类似题吗(讲了一个基础的混淆,他说这个混淆太弱了,有无其他混淆方式,然后提了花指令和控制流平坦化)
    • 控制流平坦化的怎么解混淆(讲了一下符号化执行的解混淆方法)
    • 自己讲讲CTF见过什么有趣的题(讲了一个游戏逆向题)
  • 项目

    • 讲讲研究生的项目,然后问了好多细节
    • 然后问了一下AFL,讲AFL流程细节,AFL优化思路(讲了选种策略和突变策略优化),对于token验证怎么绕过(讲了字典和LAF-INTEL的思路),对于只有二进制文件没有源码的token怎么绕过
    • 模拟执行的东西了解不(我说符号化执行的都是模拟执行),比如一个arm的二进制文件,要用x86的机器来测试怎么办(说用IR)
    • 有没有做过获取CFG或者在二进制里插入标志辅助AFL分析的工作(无)
    • 是否了解插桩,动态插桩和静态插桩啥区别(完全不会,xjb吹)
  • 反思
    可以看出科恩的bar是非常高的,需要对研究领域达到精通才能通过。面试中ACM部分答得非常不好,而且和安全关系不大,不如不说。CTF部分回答的太浅,让人感觉浅尝辄止。项目相关的技术底层问题也不了解。

科恩漏洞挖掘正式岗(未通过,2020秋招) #

学长内推,二面挂,两次都是电话面试60分钟左右。 具体细节没有记录,主要还是问CTF,项目细节,项目相关技能。问的问题都挺难的。
反思:感觉问题基本都答上了,不过内核相关的我都说不会。可能是排序靠后吧。

b站 #

b站安全岗没有笔试。

后台安全正式岗(通过,2020春招) #

学姐内推,两轮视频面试之后发offer。具体细节没有记录,基本全都在问项目,稍微问了一些其他面经中都能见到的简单技术问题。

阿里 #

阿里安全岗没有笔试。

蚂蚁金服安全团队实习岗(通过,2020春招) #

通过导师在实验室群里分享的招聘信息投递。三轮面试通过。

一面 #

电话面试60分钟。

  • 经历

    • 对安卓安全的基本认识(我从项目方面讲了讲)
    • 了不了解加壳,怎么脱壳(讲了安卓方面的加壳和二进制方面的混淆怎么解)
    • 逆向方面,讲讲windows PE和linux ELF的区别(我说不了解windows,我可以讲ELF)
    • ELF文件结构(链接视图,运行视图)
    • 逆向的时候用什么工具看ELF(readelf,objdump,IDA,gdb等)
    • 有没有见过readelf解不出文件头,但是可以正常运行的文件,原理是什么(不会)(后来上长亭的课的时候问了老师:readelf的解析逻辑和内核加载ELF的解析逻辑不同,攻击者可能研究过两者的差别精心设计了readelf解析不出来的ELF文件头)
    • ELF的结构对于二进制文件的执行有什么作用(从运行视图xjb讲了一下)
  • CTF

    • 做过什么有难度印象深刻的脱壳题(讲了个安卓的)
    • CTF的pwn学过什么(栈溢出)
    • 栈溢出和堆溢出的区别(我说堆溢出我不太懂,然后讲了栈溢出的一些原理和攻击方法)
    • 栈溢出怎么防护(NX,canary,ASLR等)
    • canary和ASLR怎么绕过
    • 做逆向的流程(讲了一下符号化执行辅助分析的时候怎么逆向的)
    • 认为逆向中比较难的点(讲了动态链接)
    • 讲讲怎么解决的(gdb+qemu)
  • 项目

    • 讲讲Fuzzing基本过程,怎么优化
    • 讲符号化执行的过程,优缺点
    • 路径爆炸问题怎么解决,其他学术界的工作都怎么解决
    • 使用过的其他工具有什么特点,讲一讲印象深的(angr)
    • 符号化执行怎么和fuzzing结合
    • 了解哪种符号化执行,是指令级别解析的还是有源代码做符号化执行的
    • 有源代码的符号化执行(比如我说的KLEE)怎么工作的(我感觉和angr没啥区别_(:з」∠)_讲的也没啥区别)(实际上一个是LLVM一个是basic block,插桩方式也不一样)
    • UAF了解吗,怎么利用
二面 #

电话面试20分钟。大概是个p8以上的人,很忙的样子,挂电话也很急。

  • 讲讲CTF比赛经历,做的什么类型的题,有什么印象比较深刻的有意思的题
  • 挖漏洞、漏洞分析方面讲一讲(我讲了符号化执行项目)
  • 有没有分析过一些真实的漏洞(没有)
  • 讲讲安卓项目,有啥亮点
  • NullPointerException怎么利用(讲了讲隐私泄露的问题,他问有没有控制流劫持的利用方式,我说不太会)(后来想到,这不就是栈溢出基本操作吗,ROP、GOT表劫持等等都算)
  • 自己还有什么补充(Fuzzing,讲了AFL策略和优化思路)
HR面 #

电话面试,30分钟。

  • 讲一下自己觉得在求学过程中成长最快的经历,为什么这个阶段成长快(竞赛)
  • 讲一下自己什么阶段能最能体现出来自己的不足,哪方面不足,如何成长(科研,沟通能力)
  • 你眼中安全行业的精英都有哪些品质,自己在所说的品质中自己缺乏哪些(钻研精神,善于表达)
  • 如何平衡竞赛、学业,时间如何安排(忙里偷闲,闲里偷忙)
  • 是否了解安全行业学术界和工业界的区别,自己认为工业界未来的发展会怎样,自己期望工业界会变成什么样
  • 在群体中自己一般扮演什么样的角色,为什么扮演这样的角色(当班长当书记,喜欢和人有连结)
  • 是否了解蚂蚁的业务,有没有其他在流程中的实习申请,如果发了offer能不能来
直通车 #

实习没有去,但是mentor联系说可以参加实习生的直通车,汇报自己学校的项目就可以了。直通车是视频面试,P9和HRG负责面试,自己先进行15分钟左右的陈述,然后面试官问问题,主要问项目创新点等。最后P9说我没有展示出我们项目的优点。

蚂蚁金服安全团队正式岗(其他同学提供,未通过,2020春招) #

安卓方向的同学的记录,电话面试30分钟。

  • 项目
    • 怎么逆向确定插桩位置(讲了ddms和打印调用堆栈)
    • Xposed怎么使用的(函数签名进行插桩)
    • Xposed原理清楚吗,有没有看源码(不会)
    • 用的是什么加密算法,加密密钥怎么保存的
    • 模块怎么更新的(从服务器下载动态更新)
    • 怎么解析Smali代码的(Python正则)
    • 怎么样进行方法匹配的(提取每个方法里面的常量特征形成特征字符串,在另一个版本中计算相似度)
    • 整个匹配的过程复杂度如何,有没有做优化(O(N),优化方法是提前计算所有的特征字符串)
  • 其他
    • 有没有其他的研究或者项目(没有)

美团 #

美团有算法题笔试,基本上只要做出ACM铜牌水平题就可以过了,难题可以水一些数据。

移动安全实习岗(通过,2020春招) #

官网投递,三轮面试通过。

一面 #

视频面试40分钟。

  • 自我介绍
  • 讲安卓项目,讲细节,怎么重现DOS bug,可重现率怎么样
  • 为什么从ACM转到CTF去搞安全,为什么从安卓转二进制
  • 讲了讲如何收集安卓崩溃信息
  • 安卓APP有哪些攻击面(讲了Intent相关的,讲了钓鱼,讲了底层源码)
  • 讲SE项目,讲讲优化方法
  • 讲讲AFL,有没有用AFL针对某些软件做专门的优化,讲讲策略
  • 了不了解linux内核
  • 了不了解docker,讲讲自己理解的docker机制,想一想如何挖docker漏洞(讲了一下沙箱逃逸)
  • 了不了解二进制的一些防护机制(讲了pwn方面的一些)
  • 了不了解glibc在堆分配方面的策略
  • 了不了解linux的内存管理机制,进程线程相关的内存管理讲一讲
  • 了不了解内存分配的伙伴算法
二面 #

视频面试30分钟。

  • 讲讲项目,主要的优化策略讲细节
  • 符号化执行和fuzzing的区别,优缺点
  • 用过什么自动化漏洞挖掘工具
  • 移动安全了解多少
  • CTF主要做什么方面。了解漏洞怎么利用吗
  • 栈溢出漏洞怎么利用,canary保护怎么绕过
  • 为什么不了解堆溢出漏洞
  • 有无其他实习申请,蚂蚁金服和美团更倾向去哪个
HR面 #

没有详细记录,具体内容也忘了,印象里HR问的问题不太好答,和阿里风格不一样,面完之后一身冷汗。

直通车 #

30分钟,基本上没问啥问题,和主管(二面面试官)聊天。

字节 #

字节好像没有笔试,有的话也是和华为一个类型的,详见华为。字节都是找同学内推的。字节的二面是交叉面,我都是在二面挂的,交叉面碰到自己弱项的面试官很容易挂。

安全与风控(未通过,2020秋招提前批) #

二面挂了。没有详细记录,印象中一面问了很多项目相关问题,二面讲项目时候没表达清楚,面试官理解歪了,一路在歪的问题上越问越深,越答越烂,最后挂了。

无恒实验室(未通过,2020秋招) #

一面 #

视频面试40分钟。

  • 自我介绍
  • 仔细讲fuzzing 工作
  • 仔细讲符号化执行工作,怎么做路径爆炸缓解
  • 污点分析的原理,为什么污点分析要用符号化执行(这个问题是他误解了,解释了一下)
  • 怎么逆向,安卓逆向做过没,混淆的程序有没有逆向过怎么做的,见过哪些混淆的程序,怎么逆向,安卓和linux的都可以说
  • 用过LLVM,知道怎么用ollvm做混淆吗(讲了控制流平坦化之类的)
  • 懂不懂安卓逆向,用没用过hook工具
  • x86的参数寄存器有哪些(这个当时答成x64的了。。。)
  • (还问了很多别的,不太记得了,没怎么问到我专精的东西)
  • 最后出了一个bfs算法题,顺利敲完
二面 #

视频面试,时长未记录。

  • 自我介绍,讲讲技术会什么
  • HTTPS链接输入到浏览器url框到最后看到页面的过程
  • TLS握手干嘛的,TLS握手之前干什么
  • so库文件结构,section表干什么的,PLT表干什么的
  • 符号化执行路径爆炸怎么解决的
  • 算法题敲代码。给定一系列字符串,识别是否有明文手机号或具有连续4位*号掩码的手机号
  • 反思:问的HTTPS、TLS的问题只能回答得比较浅,能够让面试官看出在WEB方面能力弱。算法题敲的也有问题。

安全与风控(未通过,2020秋招) #

视频面试,每次40分钟左右。二面挂的。没有做详细记录。后续的面试感觉得到方向非常不对口。

  • 自我介绍
  • 问安卓项目,有没有挖掘到高危漏洞
  • 有什么自己研究的比较深的方向(讲Fuzzing项目,创新点)Fuzzing的size的识别怎么做的
  • 还有别的安全方面经验吗(符号化执行)
  • 逆向大型软件怎么做,有混淆时怎么逆向
  • 了解WEB方面安全吗(不了解,只知道SQL注入、XSS、CSRF什么的)
  • SQL注入怎么做,怎么防御(通过字构造符串闭合执行想要的命令)
  • SQL注入的命令如果没有执行权限只能查询能干什么,有什么风险(信息泄露)
  • 解释XSS和CSRF,有什么区别(XSS是跨站脚本攻击,CSRF是通过cookie攻击,别的不知道)
  • 反思:WEB方面没答上来,不符合岗位要求。

华为 #

华为有笔试,题型是单选、多选、问答,问答有风险模型分析讨论、无编译器手敲代码、人眼审计漏洞等。题目范围涉及WEB、二进制、移动安全、密码学等等,知识面非常广,还挺难答的。

消费者BG安全攻防实验室(未通过,2020秋招find star) #

在find star的直面会上加到一个部门主管,在会场上先电话聊了聊,后来安排了电话面试,问了很多CTF的问题,问的很深很难,不太会,一轮挂。
反思:这个部门和科恩的bar应该差不多,研究领域内未能精通就过不了。

海思(未通过,2020秋招) #

视频面试,连续的两场面试,总时长2小时。 没有做详细记录,但记得问的问题非常非常难,是我印象中最难的一次面试。问了很多特别底层的二进制动态调试问题,我答不出来之后给了几百行的内核驱动代码,肉眼看有什么漏洞。

  • 自我介绍,问项目细节,问到底层逻辑,调试细节等,还问了很多常规二进制问题
  • 懂不懂动态调试,用过什么,gdb什么原理,qemu什么原理,硬件断点什么原理,有没有调试过内核
  • 有没有分析过CVE(DirtyCoW),讲原理,怎么防御,还知道什么race condition问题,一般是怎么造成的
  • 审计代码,内核代码几百行,看漏洞(印象是一个边界只做了上界检查没做下界,会导致堆栈溢出),看出来之后问会导致什么问题,怎么利用,怎么防御
  • 又一道审计代码,驱动代码几百行,看漏洞(我没看出来,面试官告诉我是全局变量未加锁的race condition问题,因为我之前提到了DirtyCoW他才出了这个题。)
  • 反思:知其然不知其所以然。自己提到DirtyCoW还没做出相关审计题,搬起石头砸自己的脚。

智能车BU(通过,21年春招find star) #

自己找的以前联系过的面试官投递。视频面试,连续两轮面试,总共2小时。 第一个面试官很感兴趣fuzzing,问了一堆项目细节,最后让写一下fuzzing伪代码(我写了AFL fuzz_one那部分核心代码)。
第二个面试官问了问SE和fuzzing工作,然后让人眼审计代码中的错误,包括语法错误(这也要考= =)、数组下标越界、野指针未free、指针星号使用错误,等等。最后做了个简单算法题。

大疆 #

系统安全工程师(通过,2020年秋招) #

大疆有笔试,全是二进制问题,我没遇到不会的题。最舒服的一次笔试。
通过学长内推。视频面试,一共三面,每次1小时左右。没有做详细记录,面试主要关注系统安全、IoT安全的理解,另外问价值观、性格方面比其他公司多很多。

  • 无人机有哪些风险面,如何防御(说了系统、通信协议、信息泄露等很多方面,面试官顺着每个方面继续深入问了很多。我当时各个方面刚好读过一些论文,就现学现卖,效果还不错)
  • 对于大疆公司有哪些了解,为什么选择投大疆
  • 性格问题,是否乐于合作,是否乐于突破自我,是否乐于尝试新领域

其他凉经 #

字节:第一次投字节提前批时候简历直接挂了,主要问题是写的都是本科项目,没有突出安全方面的项目。
拼多多:笔试全是Web题,笔试挂。

结语 #

以上就是我校招面试安全岗的全部经历,一总结吓一跳,其中居然有10次未通过的经历,连我自己都没想到居然参加了这么多次面试。说实话前期一直挂还是蛮打击自信的,但得到第一个offer之后便豁然开朗了。即使过程相当坎坷,我最后也拿到了自己满意的offer,目前的工作也很让我感到很充实。
这么长的面经分享,不知道有多少人读到最后,希望我的分享能对大家有帮助。如有疑问,欢迎联系我或直接在评论区留言。
最后祝大家都能拿到理想的offer。


本文章为原创,版权归原作者Dr-XX所有;未经原作者允许不得转载本文内容,否则将视为侵权;转载或者引用本文内容请注明来源及原作者;对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。