产业气象站|一个黑客组织的7年黑历史终因太嘚瑟被扒了出来( 三 )


【产业气象站|一个黑客组织的7年黑历史终因太嘚瑟被扒了出来】在失败的攻击中 , 攻击者发送的电子邮件将显示消息:“此消息无内容 。 ”崩溃取证分析 , 用户经历的部分崩溃(多次崩溃中的一部分)如下;崩溃的指令是stnpx8 , x9 , [x3] , 这意味着x8和x9的值已被写入x3并由于访问存储在x3中的无效地址0x000000013aa1c000而崩溃 。 为了找出导致进程崩溃的原因 , 我们需要看一下MFMutableData的实现 。 下面的调用树是从崩溃日志中提取的 , 只有选定的一些设备才会发生崩溃 。 通过分析MIME库 , -[MFMutableDataappendBytes:length:]的伪代码如下:在崩溃发生之前执行以下调用堆栈:如果数据大小达到阈值 , 则使用文件存储实际数据 , 当数据更改时 , 应相应更改映射文件的内容和大小 , 系统调用ftruncate()被inside-[MFMutableData_flushToDisk:capacity:]调用以调整映射文件的大小 。 ftruncate的帮助文档是这样说明的:如上所示 , 如果调用失败 , 则返回-1 , 并且全局变量errno指定漏洞 。 这意味着在某些情况下 , 此系统调用将无法截断文件并返回漏洞代码 。 但是 , 在ftruncate系统调用失败时 , _flushToDisk无论如何都会继续 , 这意味着映射的文件大小不会扩展 , 执行最终会到达appendBytes()函数中的memmove() , 从而导致mmap文件出现超出边界(OOB)的写入 。