检测目的:检测 App 程序中是否存在未使用编译器堆栈保护技术风险。
风险描述:缓冲区溢出攻击是指当程序向内存缓冲区内填充数据位数时超过了缓冲区本 身的容量,导致溢出的数据覆盖在合法数据上,从而修改内存中将执行的程 序地址。这种攻击通常发生在堆栈中,攻击者需要事先分析被攻击进程的虚 拟地址空间布局,然后采用硬编码方式向堆栈缓冲区填充恶意代码。如果系 统每次加载应用进程和动态链接库时,基地址都加载到固定虚拟内存地址处, 攻击者可得出应用程序的地址空间布局,便可以通过构造恶意的缓冲区数据, 使该函数返回时跳转至攻击者注入的恶意代码或 shellcode 处执行。缓冲区 溢出攻击,可能导致程序执行失败、系统宕机或者恶意程序执行等后果,造 成用户数据泄露或者对手机系统实现恶意操作。攻击者利用堆栈溢出漏洞时, 通常会破坏当前的函数栈。Stack Canaries 漏洞探测技术,可以对缓冲区溢 出进行预警。在所有函数调用发生时,向栈帧内压入一个被称作 canary 的随 机数,当栈中发生溢出时,canary 将被首先覆盖,之后才是 EBP 和返回地址。 在函数返回之前,系统通过检测栈帧中的 canary 数值是否发生变化来判断是 否发生了栈溢出漏洞,此时程序将跳转到 stack_chk_fail 输出错误消息并终止 执行。
检测步骤:1、反编译应用获取应用所有 so 文件。 2、对每个 so 文件进行命令搜索判断是否含有堆栈保护关键字符信息,有的 话则表示安全。
检测结果:存在风险(发现 63 处)
解决方案:在生成 so 文件库时,使用以下参数: gcc -o DemoCanary DemoCanary.c -fstack-protector-all
其中libweexjsb.so、libweexjst.so等so是在uniapp-v8-realease.aar中的,请问能提供源码吗?需要添加参数重新编译
0 个回复