公司动态
奇安信校招笔试全解析:从TCP协议到应急响应的安全知识图谱
1. 笔试题全景拆解一场校招笔试到底在筛什么聊到奇安信2019年的校招笔试题很多准备安全方向的同学第一反应是“难”第二反应是“杂”。作为一个经历过那个时期、也帮公司看过不少校招笔试卷子的人我想说这两点其实都踩中了但都没踩到根子上——奇安信的笔试题从来不是为了考倒你而是在极短的时间内用一套标准化的题目组合去判断你脑子里有没有建立一套完整的安全知识坐标系。先说一个很多人不知道的背景。奇安信是从终端安全起家后来做政企安全、大数据安全、云安全到2019年前后已经形成了非常完整的业务矩阵。这意味着什么意味着它的校招题库覆盖面极其宽泛从最底层的协议栈、操作系统原理到上层的Web漏洞利用、密码学应用再到实战化场景的应急响应和日志分析全部都会出现在同一张卷子里。很多只刷过CTF、只懂某个单一方向的候选人在这套题目面前会非常难受因为你会做的题就那么几道剩下的全靠蒙。这套题我最想强调的一点是它考察的不是“你会不会做某道题”而是“你有没有应对真实安全工作所需的底层知识密度”。举个例子卷子里会同时出现“TCP三次握手的第三次握手失败会发生什么”和“SQL注入时如何通过报错信息判断数据库类型”这样的题目。前者考基础后者考实战但二者共享同一个底层逻辑——你必须理解数据在网络和系统中如何流转异常如何产生又如何在异常中提取有效信息。这就是安全工程师的基本功。再说说这套题的题型分布。从我收集到的信息看2019年的笔试通常分为客观题和主观题两大部分。客观题以单选、多选、判断为主覆盖计算机网络、操作系统、数据库、密码学、Web安全基础大概占六成比重。主观题则是案例分析题目会给一段日志、一段代码或者一个场景描述要求你分析攻击链、指出漏洞成因、写出修复建议这部分通常占四成。这个结构其实非常合理——客观题可以快速筛选出基础知识不过关的候选人而主观题则能看出你是否有真正的工程思维和防御视角。所以把这套题完整拆一遍其实是在帮你把安全从业者应该具备的知识地图重新梳理一遍。下面的内容我会把这套题里比较有代表性的几个核心考点逐一拆开逐个讲清楚题目考察什么、背后的原理是什么、做题时有哪些坑、以及你该如何举一反三。不管你是在准备安全方向的校招还是已经入行想补补基础这篇文章应该都能给你一些实在的东西。2. 计算机网络与操作系统基础题里的分水岭2.1 TCP协议族三次握手、四次挥手和那些边角料奇安信这套题里计算机网络部分占比不低而TCP协议又是绝对的主角。我记得有一套卷子里连出了四道题都是TCP的三次握手的状态变迁、SYN Flood攻击的原理、TIME_WAIT状态的作用、以及粘包和拆包的处理方式。这些题目单看都不算超纲但放在一起就很有杀伤力了——差一分基础不牢直接连错。先说三次握手。题目常见的考法是给你一个客户端和服务端的交互过程让你判断某个状态是否合法或者问“第三次握手失败会发生什么”。这里有个特别容易踩的坑很多人以为第三次握手失败后连接就建立不了但实际上如果ACK包丢了服务端会处于SYN_RECV状态并且会重传SYNACK重传次数达到上限后才会关闭这个半连接。更进一步的如果攻击者恶意不回应第三次握手大量半连接会耗尽服务端的SYN队列这就是经典SYN Flood攻击的原理。到了这个层次题目考察的就不再是单纯的协议流程而是你能不能把协议知识和安全攻防场景结合起来。再接下来是四次挥手。这里TIME_WAIT状态几乎是必考题。为什么主动关闭方要停留在TIME_WAIT状态等待2MSL直接原因是保证最后一个ACK能让对方收到如果ACK丢了对方会重发FIN这时候你还在TIME_WAIT状态里就能重发ACK深层原因则是让旧连接中的报文在网络中自然消亡避免干扰新连接。很多考生只背了“2MSL”这个数字但一到实际题目里问“为什么服务器上会有大量TIME_WAIT连接”就答不上来了。这事儿的答案其实很简单高并发短连接的服务器上主动关闭连接的一方会大量产生TIME_WAIT状态的连接这是正常现象但会在一定程度上占用端口和内存资源。优化手段一般就是调整内核参数或者复用连接但这又牵扯到端口范围和连接有效性真做起来学问很大。还有一类关于TCP的实操题我也见过给定一份抓包文件让你判断哪些包属于同一TCP流以及某个包的序列号和确认号怎么算。这类题目考的是你对协议头格式的理解和实际分析能力。我的建议是做题时先在草稿纸上把TCP头部结构画出来标注好源端口、目的端口、序列号、确认号、标志位这几个关键字段然后逐个包去推。只要逻辑清楚了这类题反而是整张卷子里最容易拿满分的。2.2 操作系统原理进程、线程与内存管理的隐蔽考点操作系统部分的题目表面上考的是概念实际上考的是你对系统运行机制的理解深度。奇安信2019年的卷子里有几道让我印象深刻的题比如“进程和线程的区别从开销角度来说线程切换和进程切换哪个更快为什么”还有“虚拟内存的意义是什么缺页中断如何处理”。先聊聊进程和线程的区别。多数人背得出“进程是资源分配的最小单位线程是CPU调度的最小单位”但一到实际题就会迷糊。比如题目给你一个多线程同时读写同一文件的应用场景问如何保证线程安全。这时候你光会背概念就废了你得知道锁机制、原子操作、内存屏障这些东西到底怎么用。这里我想分享一个经验在校招阶段遇到这类题时最好从“共享了什么”和“隔离了什么”两个角度看问题。进程之间是隔离的默认不共享内存通信得靠IPC线程天然共享进程的内存空间但因此也更容易踩到同步的坑。理解了这一点很多题目就能自然推导出来。内存管理这块虚拟内存是重点。为什么要有虚拟内存因为物理内存不够用而且不同进程如果直接操作物理地址不仅容易互相干扰安全性也没法保证。虚拟内存给每个进程一个独立的、连续的地址空间让进程觉得自己独占整台机器再由操作系统负责把虚拟地址翻译成物理地址。缺页中断的过程也很值得深挖进程访问的页面不在物理内存中时会触发缺页异常操作系统需要去磁盘的交换空间里把页面换入如果物理内存已满还要根据置换算法淘汰一个页面。经典的置换算法是LRU和LFU笔试很喜欢让你比较不同算法在特定访问序列下的缺页次数这个就真的得动手画一画了。我还想提一类关于系统调用和用户态/内核态的题目。安全方向的笔试特别爱考这点因为很多攻击手法都涉及到系统调用比如提权漏洞最终都要通过执行高权限的系统调用来落地。笔试会问你“发生系统调用时CPU如何从用户态切换到内核态参数怎么传递”。如果你能答出通过软中断或者syscall指令触发处理器切换到内核态并按照系统调用约定从特定寄存器拿参数那这题基本就是送分题。3. 密码学与Web安全安全笔试的核心腹地3.1 密码学基础对称加密、非对称加密与哈希函数的应用边界奇安信这套题里密码学相关题目出现频率相当高而且很少直接让你背算法名称基本都是给场景、让你选方案或者给一段密文让你判断可能使用了哪种算法。这种出题思路其实非常符合实际安全工作——你用密码学的目的是解决业务问题而不是表演背诵。对称加密与非对称加密的选择就是高频考点。题目会给一个场景比如“企业内部有数千台终端需要加密通信如何设计密钥分发方案”。如果你只会说“非对称加密更安全”那你已经掉坑里了。实际上实践中几乎总是用非对称加密来协商会话密钥然后使用对称加密来加密实际数据这就是混合加密体系的思路。原因很简单非对称加密虽然安全性好但性能比对称加密慢好几个数量级不适合加密大量数据而对称加密虽然快但密钥分发和管理是大问题。两者搭配使用既解决了性能问题又解决了密钥分发问题这也是HTTPS的核心机制。哈希函数这块喜欢围绕MD5、SHA系列做文章但问法很刁钻比如“MD5碰撞意味着什么这在什么场景下会产生实际威胁”。很多人知道MD5已经被碰撞攻破但不明白这对实际系统的危害。如果你在文件完整性校验这种场景里用了MD5攻击者构造一个具有相同MD5值的恶意程序就可能骗过校验。而如果只是用于密码存储的哈希威胁模型又不一样——彩虹表攻击、暴力破解、加盐、慢哈希这些知识点就会牵扯进来。这里有个实操建议面试也好、做方案也好碰到密码存储的题目时直接说“用bcrypt、scrypt或者Argon2这类专门为密码设计的慢哈希算法并且为每个用户生成独立的随机盐”这个回答基本可以直接封顶。奇安信的卷子里还有一类题是给你一段使用AES的代码让你指出问题。常见的坑包括使用ECB模式导致相同的明文块产生相同的密文块、使用固定或可预测的初始化向量IV、密钥硬编码在代码里。这些考点说到底就是一句话——密码算法本身很难被攻破系统性的漏洞往往出在工程实现上。建议复习的时候多积累一些真实CVE里关于密码学误用的案例做题的时候你能一眼看出出题人想考哪个点。3.2 Web安全核心从SQL注入到XSS的攻防逻辑Web安全部分通常占了主观题的大头因为这部分最能检验一个候选人的实战思维。2019年的卷子里SQL注入和XSS是绝对的主角CSRF和SSRF也时有出现文件上传相关的题目同样不少。SQL注入这道题多半给一小段PHP代码配合一个数据库操作的上下文。你要做的事情通常有三步第一指出哪里存在SQL注入漏洞也就是找出用户输入未经处理就拼接进SQL语句的位置第二说明如何利用这个漏洞比如如何通过报错信息判断数据库类型、如何用union查询去获取当前表的字段数第三给出修复方案核心就一条——使用参数化查询或预编译语句。这里几乎不允许说“对输入做过滤”这种泛泛而谈的答案因为过滤很容易被绕过而且正确做法根本不需要依赖过滤。XSS题的考法也很有意思有时会给你一个留言板功能让你分析存储型XSS的攻击路径与危害。很多答案会遗漏一个点XSS不仅能窃取Cookie还能在用户浏览器里执行任意JavaScript代码所以危害上升为“在用户浏览器上下文中执行的操作都可以被攻击者控制”。这包括但不限于窃取会话令牌、发起CSRF攻击、键盘记录、页面钓鱼、挖矿脚本植入等。修复方案一般分三块输出编码、输入校验、以及加上CSP响应头作为纵深防御。我在批改类似题目的答案时最怕看到候选人只写“用htmlspecialchars转义”而不解释在哪里转义、为什么转义能阻断XSS这种答案即便说对了方案分数也不会高。Web安全部分还有一个算特色考点的东西是文件上传漏洞。题目会给出一个比较典型的文件上传功能代码要求你找出其中的安全问题并提出加固方案。常见问题包括只校验了Content-Type但没有校验文件头、存储路径直接使用用户可控的文件名、上传目录缺少执行权限控制。升级一点的问法还会涉及图片马、条件竞争和解析绕过。遇到这类题我的建议是把攻击者的视角走一遍先想我要上传一个WebShell我会怎么做然后就能自然推断出服务端需要在哪些环节做防御——校验文件扩展名校验文件内容比如读取文件头魔数重命名存储文件把上传目录的脚本执行权限关掉。4. 实战题与综合能力从日志分析到应急响应的思维方式4.1 日志分析与攻击链还原如何从一行日志里看出问题奇安信笔试的主观题里几乎必有一道日志分析题。它可能给你一段Linux的auth日志、Nginx的access日志、Windows事件日志或者是几段串在一起的安全设备告警让你还原攻击者的完整攻击链。这种题分值很高也是区分度最大的一道题——因为光靠背题完全没有用考的是你的分析思路和工程经验。举个例子有一段Nginx访问日志里面有一条问你怎样判断这是一个恶意请求。这里有几个信息密度极高的信号第一URL里有../或者编码后的%2e%2e%2f大概率是目录穿越尝试第二请求参数里有SQL关键字如union select、sleep()、information_schema基本可以定为SQL注入探测第三请求的User-Agent很反常不是日常浏览器比如是python-requests/或curl/7.68.0说明攻击者可能使用脚本工具在跑自动化的漏洞扫描。拿到这些信号后你需要把它们串成一条可能的攻击链而不是一对一地判定。比如一段日志展示了某台业务服务器先有一个目录探测的请求紧跟着是POST到一个上传接口再过几分钟又出现了一个指向新文件的访问请求最后有一段异常的高权限系统命令执行的记录。那么合理的还原是攻击者先扫描系统敏感路径发现上传功能后构造一个恶意文件上传成功随后访问并执行了这块WebShell最后通过WebShell执行命令完成提权。这个链条的推理过程就是安全分析的核心能力。我得提醒一句做题时不要跳步把你推导的每一个环节都写清楚哪怕最终结论不完美得分也会比只写一个结论高不少。你平时就可以主动训练这种思维方式方法是找公开的攻防演练报告或者漏洞分析文章先不看结论只看攻击过程的日志片段尝试自己还原一遍再对照答案修正。这个过程很枯燥但只要坚持做过几次再遇到日志分析题你的反应速度和准确度会完全不同。4.2 应急响应场景题感染挖矿病毒后第一步该干什么应急响应场景题是奇安信笔试里最有“特色”的一类题目也给很多考生留下了心理阴影。常见的题目描述是“某台运行Linux的服务器CPU占用率持续走高top命令看到进程名为kdevtmpfsi请分析这是什么问题并给出处理思路。”这其实就是一个典型的挖矿病毒应急响应题目。处理这类题目很多人一上来就说“kill掉这个进程然后删除文件”这是大忌。你没有先分析进程的启动方式、父进程是谁、是否有定时任务在反复拉起它、攻击者是通过哪个漏洞进来的就贸然kill和删除进程会被马上拉起攻击路径也会被破坏掉后续的溯源工作会变得很难做。应急响应的正确顺序是先断网或者隔离这台服务器防止它继续向外部通信同时避免横向扩散到其他内网主机然后是取证保留内存、进程列表、网络连接、登录日志等现场信息再然后是分析入侵路径搞清楚攻击者到底是怎么进来的最后才是清除和后加固。如果题目问你如何溯源你得能说出几个常用的排查点查看/etc/crontab和cron.d目录下的定时任务、检查systemd服务中是否有新增unit、用netstat -antlp看异常的外联端口和IP、对比/etc/ld.so.preload和LD_PRELOAD环境变量有没有被篡改、以及检查/root/.ssh/authorized_keys中是否被植入了公钥。这一套下来才算是一个完整的排查动作。4.3 代码审计与安全开发从源码里发现问题的能力代码审计题在这套笔试里也占据重要位置。它不是让你用工具去跑而是直接给你一小段源码让你人工找出安全漏洞。出题的代码语言以PHP和Java为主这是当时后台开发的主流也比较容易在短题目里设置明显但又需要细心发现的问题。我印象比较深的一道题是Java里的一段登录接口代码里面有一个典型的逻辑错误直接使用SELECT * FROM user WHERE username username AND password password去数据库查询如果查询结果不为空就认定登录成功。漏洞很明显是SQL注入但更深一层的问题是密码在数据库里以明文存储而且即使不注入这个功能的设计本身就存在严重安全问题。这说明出题人想要的不是单一的知识点而是你能站在整个系统安全性的高度去审视代码。修复这道题至少要覆盖三点使用预编译PreparedStatement替代字符串拼接、密码存储改为加盐哈希而非明文、登录失败时返回统一的错误提示避免被枚举用户名。除此之外还有一类安全开发的题关注的是编码规范比如代码里硬编码了数据库连接密码、日志中打印了用户敏感信息、前端源码中暴露了内部API地址。这类题目虽然不算复杂但你在作答时如果能体现出“我习惯从数据流的角度审查代码”也就是追踪用户输入从哪里来、经过了哪些处理、最终去了哪里会让阅卷人觉得你确实有代码审计的思维。5. 答题策略与避坑指南如何在这套笔试题里拿到高分5.1 时间分配与答题顺序先拿确定的分再啃硬骨头奇安信这套笔试题的题量不小我记得正常情况下的考试时间是90到120分钟客观题和主观题都算上时间是很紧张的。如果按顺序硬做很可能前面的单选纠结太久后面的主观题只能匆匆写几句得不偿失。我的建议是按“客观题抢分、主观题保分”的顺序来。先快速过一遍所有客观题会做的题立刻做掉不太确定的题先标记不会的题凭直觉选一个就不要回头了。客观题时间控制在四成左右把大头留给主观题。主观题是主观判分哪怕你答得不完美只要写了解题思路、写了关键分析步骤通常都能拿到一半以上的分值。所以无论如何不能出现主观题几乎空白的情况。碰到不会的主观题也有技巧。比如遇到一段完全看不懂的日志不要放弃你可以分段描述你看到了什么、哪些地方可疑、如果进一步分析你会查看哪些信息。这样写出来的答案至少证明你是对着题目认真思考过的远比空着或者瞎编一个结论强得多。阅卷人在短时间内看大量卷子能看出哪些人是有分析素养的。5.2 高频失分点汇总阅卷人视角下的“减分行为”这些年我看了不少校招笔试卷子也留意过候选人在这类题目上的常见扣分点。第一个是术语不准、概念混淆比如把“对称加密”和“非对称加密”搞反或者把XSS和CSRF混为一谈。这种错误一旦出现阅卷人会立刻对你的基础功底打问号即使其他题目答得不错整体印象分也会打折扣。第二个是回答太泛缺少落地细节。问你如何修复SQL注入你写“对用户输入进行过滤”这句话本身没错但等于没说。更好的答案是“改造为使用PreparedStatement参数化查询如果必须使用字符串拼接则需要用白名单方式校验输入并且对输出做编码处理”这样才有实操价值。阅卷人见惯了“正确的废话”突然看到这种能落地的回答印象分会明显不同。第三个是完全没有安全意识。比如场景题问你如何快速恢复被入侵的服务你会不会只写“重装系统、恢复数据”而不提先备份现场证据、分析入侵途径这在小公司可能也算应急但奇安信这类企业级安全公司特别看重防御的体系化思维这种只治标不治本的答案拿不了高分。所以做题的时候时刻记住把自己定位成“安全工程师”而不是“运维工程师”。5.3 长期积累与笔试冲刺的建议以终为始地复习最后聊聊备考本身。如果你认真钻研过一套奇安信的笔试题你会发现光靠考前突击刷题是远远不够的。这套题目背后反映的是一个人在信息安全领域长期沉淀的产物——知识面广、底层扎实、有攻防思维。而这些能力没有几个月甚至一两年的刻意积累是练不出来的。我的建议是分两条线走。长期线是持续打磨基础网络协议、操作系统、密码学、Web安全这四门课是地基每个方向都要拿出啃硬骨头的精神去系统学习不要只看二手资料最好能自己动手做实验验证。短期线是考前冲刺搜集历年真题和行业内大厂的笔试题目反复刷特别是主观题每一道都要完整写一遍答案再对照参考答案找出自己的遗漏点。冲刺阶段不需要追求新的知识量重点是把你已有的知识转化成答题时能顺畅输出的表达。另外我很推荐一边复习一边动手实践。比如复习SQL注入时本地搭一个简单的靶场环境亲自注一遍复习XSS时写个小页面跑一遍。只有亲手操作过才能理解那些概念到底在讲什么笔试时再遇到类似题目你的答案会更接地气也更有说服力。我个人在实际操作中的体会是这套笔试的“题目”本身在今天的面试中已经很少原封不动地出现了但它的知识框架和出题思路依旧是安全行业标准的度量衡。把一套题彻底吃透、弄明白每个考点背后的原理你收获的不仅仅是应付一次笔试的能力更是一张网络安全基础能力的全景地图。以后无论去面试哪个安全岗位这些底层的东西都依然管用。