加载中...

深信服面经-安全攻防工程师

安全攻防工程师一面,大概率是寄了,此前也没有遇到过这种难度的面试,稍作记录吧。

  1. 恶意样本的静态分析?

    大致答了一些常见的,PE文件头的分析、文件哈希、符号表、反编译之后的控制流和数据流等。

  2. 如果针对内存驻留的恶意程序呢?

    显然就是上一个问题的Plus版本。没有思路。面试官提醒我可以考虑内存的R/W/X属性。我就说可以检测可执行的内存段,然后根据这些内存段的内容去生成可执行代码的特征,送入机器学习模型进行检测。扯就完事了……

  3. 一个进程中如果有多个线程(比如100个),CPU只有4个核,怎么分配?

    属于是多线程的一个小盲区,我知道Python由于GIL全局锁,多线程是假的多线程,不知道其他语言的情况。

  4. git熟悉吗?分支是干啥的?

    只在日常博客中用git,分支知道一点点,就是从主线上分出若干个分支,团队成员在上面开发,不影响主线版本,最后再合并起来。

  5. 多线程扫描的时候,流量可能很大,怎么进行控制,怎么能不把目标扫崩(扫描不能产生DoS的效果)?

    我把这个问题提炼成并发流量的控制,进一步就是并发线程的控制。只要控制活跃的线程数量,就能达到控制流量的作用。

    5.1. 那怎么控制线程的数量?

    可能可以先起一个线程,以这个线程的流量为标准,根据我们设定的阈值来得出线程的最大活跃数量。

    5.2. 但是在实际的环境中,你到达目标的流量可能跟你出口的流量相差很多,因为你的流量要到达目标,还要过公网环境?

    但是我们只能控制和计算出口流量,所以只能以出口流量为标准啊。考虑公网环境的损失的话,可能可以按照出口流量的计算值,再稍微上调一些,作为阈值。

    内心OS:瞎扯就完了。后来面试官建议可以去看看nmap的流量控制,这一点打算以后有空写个博客。

  6. 多个模块之间的解耦。举例如下:

    有四个模块分别是:【端口发现】、【服务识别】、【Web模糊测试】、【POC测试】,模块之间相互作用,主程序如何将他们联系起来?

    这题给我问懵了,开始瞎扯。

    首先分析,这四个模块应该是串联的关系,即服务识别模块依赖端口发现的输出,这样就可以用生产者消费者的模型来把他们组织起来。由于我们并不需要前一个模块的完整输出,只需要前一个模块产生部分输出,后一个模块就可以开始工作了,所以可以用流水线的思路来组织。

    进一步开始扯IOC,逆转控制,就是原本是一个模块来实例化另一个模块,但是这样他们就耦合在一起了,IOC就是引入一个第三方控制程序,由它来讲另一个模块的对象在合适的时机注入到模块中,各个模块就不需要在自己的代码中引用其他模块了。

    然后扯到消息队列,可能上一个模块产生输出之后,就可以挂到下一个模块的消息队列上,唤醒下一个模块来开始工作。

    然而消息队列的具体实现并不了解,就没有多讲。

  7. 聊了聊其他项目,还有啥问题没,over。

总体来说,整个面试的技术内容还是比较硬核,确实能够起到筛选人的作用。很多问题不一定要你会细节,脑洞够大就行;同时,你在安全领域的见识够不够丰富,也是能问出来的。

我个人的能力确实没有非常精的领域(毕竟本科是通识教育啊操),大概率是凉了。

但是相比之下,此前字节一面二面的问题全是八股,万年不变的那种,完事之后撕代码,筛人全靠算法,简直无语。被这种面试挂了,总比被算法挂了来得服气,整场体验能给个3.5分吧。

有朋自远方来,不亦说乎?
Built with Hugo
Theme Stack designed by Jimmy