安全场景-客户端安全
AI安全实习生(日常/寒假实习)
岗位职责:
- AI与软件安全相结合的前沿研究;
岗位需求(满足其一即可):
- 对机器学习、深度学习等有较好的理解和掌握。在自然语言处理、大数据分析等人工智能领域有较丰富的项目或科研经验。能独立开展研究工作;
- 有扎实的计算机学科基础知识储备,有程序语言分析,逆向分析等软件安全相关技术知识或项目经验。同时了解机器学习等相关知识,对算法研究感兴趣;
4月15日
【岗位职责】 负责腾讯安全产品的研发工作,负责云主机安全的研究工作,负责数据分析及后台研发工作,对实验室海量的复杂恶意样本进行分析,提取恶意样本特征,设计恶意样本查杀方法,研发恶意代码分析领域的自动化工具,利用数据分析算法进行样本行为分析自动化以及特征提取自动化,研究前沿的程序安全和代码安全技术。
【岗位要求】
- 掌握C/C++/Go中至少一门开发语言
- 掌握Python脚本开发
- 拥有安全研究/安全开发/攻防经验者优先
- 了解PE/Webshell等常见恶意程序的基本结构优先
客户端安全Q&A
1、PE文件结构?
https://bbs.pediy.com/user-home-825190.htm
PE文件被称之为:“可执行文件,可以在Windows操作系统中进行加载和执行的文件”
- Windows平台:PE(Portable Executable)文件结构,其中Portable也就是Windows系统中能够跨平台运行
- Linux平台:ELF(Executable and Linking Format)文件结构
PE文件结构:
Dos部分
Dos分为两个部分,一个是DOS MZ文件头和DOS块
MZ文件头
IMAGE_DOS_HEADER结构体:其大小占64个字节「重点」,并且该结构中的最后一个LONG类型e_lfanew成员指向PE文件头的位置为中的PE文件头标志的地址
Dos Stub
属于链接器进行填充的,大小不一定,属于DOS部分的DOS块,无实际作用,但是可以作为注入手段进行利用!
PE文件头
##### PE文件头标志(PE标识)z [4 字节] + PE文件表头(标准PE头)[20 字节] + 扩展文件表头(扩展PE头)
节表
IMAGE_SECTION_HEADER结构体(40字节) * 节的数量(大小取决于节的数量)
1 | typedef struct _IMAGE_SECTION_HEADER { |
pc客户端安全业务有什么了解?
对windows汇编有什么了解?
ollydbg调试原理?
2、用过什么样的OllyDBG的断点?
- 寻常断点
- API断点
- 内存断点
- 硬件断点
3、win下进程间通信?
- 文件映射
- 共享内纯
- 匿名管道
- 命名管道
3、call 和 jump指令的区别和相同?
https://www.nhooo.com/note/qa0ucr.html
传送指令(4个):mov、push、pop、lea。
转移指令(8个):call、jmp、je、jne、jb、jnb、ja、jna。
运算指令(7个):add、sub、mul、div、adc、sbb、cmp。
处理机控制指令(1个):nop。
CALL指令用于调用子例程(不是主程序的一部分),但是JUMP指令更新程序计数器值并指向程序内部的另一个位置。
4、Cuckoo inline hook ?
Cuckoo对ntdll.dll, kernel32.dll, advapi32.dll,shell32.dll,msvcrt.dll,user32.dll,wininet.dll,ws2_32.dll,mswsock.dll中的170+API进行hook
Cuckoo对样本行为的捕获依靠API Inline Hook,被测样本会被注入加载一个监控模块,当样本调用某个API函数时会被劫持到Cuckoo的模块内,这个模块除了常规的做log操作然后返回原函数外还会对某些API的上下文进行篡改,目的在于劫持某些API的执行逻辑。
inline hook是一种通过修改机器码的方式来实现hook的技术。
对于正常执行的程序,它的函数调用流程大概是这样的:
0x1000地址的call指令执行后跳转到0x3000地址处执行,执行完毕后再返回执行call指令的下一条指令。
我们在hook的时候,可能会读取或者修改call指令执行之前所压入栈的内容。那么,我们可以将call指令替换成jmp指令,jmp到我们自己编写的函数,在函数里call原来的函数,函数结束后再jmp回到原先call指令的下一条指令。如图:
通过修改机器码实现的inline hook,不仅不会破坏原本的程序逻辑,而且还能执行我们的代码,读写被hook的函数的数据。
5、cuckoo windows DLL 注入
Cuckoo sandbox在样本启动的时候,注入了相关的监控代码。在process.py文件中,通过Process调用,调用inject-x86.exe或inject-x64.exe完成注入。
https://www.cnblogs.com/luoyesiqiu/p/12173609.html
DLL注入(英语:DLL injection)是一种计算机编程技术,它可以强行使另一个进程加载一个动态链接库以在其地址空间内运行指定代码[1]。在Windows操作系统上,每个进程都有独立的进程空间,即一个进程是无法直接操作另一个进程的数据的(事实上,不仅Windows,许多操作系统也是如此)。但是DLL注入是用一种不直接的方式,来实现操作其他进程的数据。假设我们有一个DLL文件,里面有操作目标进程数据的程序代码逻辑,DLL注入就是使目标进程加载这个DLL,加载后,这个DLL就成为目标进程的一部分,目标进程的数据也就可以直接操作了。
5.1 APC注入
APC 队列(Asynchronous Procedure Call 异步过程调用)是一种可以在 Windows 中使用的机制,用于将要在特定线程上下文中完成的作业排队。
APC注入,通过write_data向远程进程中写入DLL路径、Loadlibrary()执行函数指针、执行加载函数的指针,然后利用QueueUserAPC()在软中断时向线程的APC队列插入Loadlibrary()执行函数指针,达到注入DLL的目的。当线程再次被唤醒时,此线程会首先执行APC队列中被注册的函数。
5.2 CRT注入
同样通过write_data向远程进程中写入DLL路径、Loadlibrary()执行函数指针、执行加载函数的指针,之后在create_thread_and_wait中调用CreateRemoteThrea。当目标进程中执行load_library_woker(已事先写入进程空间)加载DLL,之后调用free_data清理现场,释放空间。
6、脱壳,缓冲区溢出有什么经验?
7、沙箱如何获得动态样本信息?
8、沙箱反调试?
==样本对抗沙箱?IRC Bot==
https://www.anquanke.com/post/id/152631:当通过
CreateProcess
创建进程时,命令行中的路径的大小写会被沙箱的hook替换掉。
因为反病毒沙箱大多都是基于虚拟机的,所以如果能保证样本在虚拟机环境中不执行那么就能大概率保证其在沙箱中不执行,针对沙箱的检测主要有如下几类:
针对虚拟机
- 虚拟机的特殊进程/注册表信息,比如像VBoxTray.exe、VMwareTray.exe等;
- 特殊的驱动程序,比如Virtualbox或VMware在Guest机器里面安装的驱动;
- 硬件信息,比如网卡的mac地址,特定品牌虚拟机的网卡mac地址默认情况下大多都在一个特定范围内;
- 指令执行环境,比如像LDT、GDT的地址范围等等;
针对检测时间
沙箱每一轮分析一个样本的时间是有限的,通常就3分钟(默认),所以如果能让样本在这几分钟内不进入任何核心逻辑那么就可以避免被检测到。通常采取的做法有:
- 利用Sleep函数,或和Sleep同等功能的延时函数;
- 检测系统时间,通过系统的时间来延时;
- 运行一些非常耗时的操作,比如一些特殊的数学算法以达到消耗时间的目的。
针对交互
这种做法是为了确保样本是在有人操作的计算机中启动的,比如可以检测鼠标的移动、故意弹窗让用户点击等等。
Ember 用了哪些特征?
https://www.jianshu.com/p/cf96a701e899
头信息。从COFF报头中,我们报告报头中的时间戳、目标机器(字符串)和图像特征列表(字符串列表)。从可选的头文件中,我们提供了目标子系统(字符串)、DLL特征(字符串列表)、文件魔法作为字符串(例如“PE32”)、主映像版本和副映像版本、链接器版本、系统版本和子系统版本,以及代码、头文件和提交大小。在训练一个模型之前,使用特征哈希技巧总结模型特征、字符串描述符(如DLL特征、目标机器、子系统等),每个带噪声的指标向量分配10个bin。