ptmalloc cheatsheet
最近公司被要求参加某网络安全比赛,所以借此机会又重新阅读了 glibc malloc 的最新代码,发现了许多之前未曾深究的细节。故整理成此文,也算是对从前文章的补充了。
最近公司被要求参加某网络安全比赛,所以借此机会又重新阅读了 glibc malloc 的最新代码,发现了许多之前未曾深究的细节。故整理成此文,也算是对从前文章的补充了。
在日常对客户端应用进行安全审计或者漏洞挖掘的时候,或多或少都会涉及到网络协议的分析。而对于业务风控安全而言,APP 的网络请求往往也代表着终端安全防御水平的上限,因为客户端是掌控在攻击者手中的,服务端的业务逻辑才是安全的核心兜底保障。
本文是笔者在分析众多 Android 应用协议的过程中所尝试总结的一些经验,大部分情况下也可以适用于其他平台的终端应用,如 iOS、macOS、Windows 等,尽管各个操作系统中会存在一些特有的小技巧。
有没有那么一个人,几乎每天都在你身边,但某天发生一些事情后你会突然发现,自己完全不了解对方。对于笔者而言,这个人就是 TLS,虽然每天都会用到,却并不十分清楚其中的猫腻。因此在碰壁多次后,终于决定认真学习一下 TLS,同时还是奉行 Learning by Teaching 的原则,因此也就有了这篇稍显啰嗦的文章。
笔者几年前曾就职于阿里,虽然现在已经不在,但仍对其中的一些企业文化印象深刻。“阿里味儿” 是对于阿里企业文化的统称,其中最有味儿的话之一是 点线面体局势
,大致是对应不同层级的员工要求。比如 P6 是点,在某些技能上实现专精;P7 是线,会懂得横向规划和发展,……诸如此类。
但是本文不谈阿里,也不谈企业文化,只是借此为引申谈谈最近在代码审计过程中的一些额外感想。
前面的文章中介绍了 frida 的基础组件 frida-core
,用于实现进程注入、通信和管理等功能。加上 frida-gum 和 gum-js 的核心能力,我们已经可以很方便地使用 JavaScript 脚本来进行代码劫持、动态跟踪等进程分析操作。
不过 frida 并不满足于此,而是又实现了针对高级语言的支持,比如 Java
、Objective-C
、Swift
等。这些额外支持实际上是在 gum-js
的基础上针对对应高级语言的 Runtime 进行 hack 而实现的,统一称为对应语言的 bridge。例如,针对 Java 语言的封装称为 frida-java-bridge
,不仅实现了 Oracle JVM 的封装、还支持 Android 中的 Dalvik 虚拟机和 ART 虚拟机。本文就以 ART 为例来看看 frida 中的具体实现。
前文已经介绍了 frida 中的核心组件 frida-gum
以及对应的 js 接口 gum-js
,但仅有这些基础功能并不能让 frida 成为如此受欢迎的 Instrumentation (hook) 框架。为了实现一个完善框架或者说工具,需要实现许多系统层的功能。比如进程注入、进程间通信、会话管理、脚本生命周期管理等功能,屏蔽部分底层的实现细节并给最终用户提供开箱即用的操作接口。而这一切的实现都在 frida-core
之中,正如名字所言,这其中包含了 frida 相关的大部分关键模块和组件,比如 frida-server、frida-gadget、frida-agent、frida-helper、frida-inject 以及之间的互相通信底座。本文主要节选其中关键的部分进行分析和介绍。
frida 是一个非常优秀的开源项目,因为项目活跃,代码整洁,接口清晰,加上用灵活的脚本语言(JS)来实现指令级代码追踪的能力,为广大的安全研究人员所喜爱。虽然使用人群广泛,但对其内部实现的介绍却相对较少,因此笔者就越俎代庖,替作者写写 frida 内部实现介绍,同时也作为自己的阅读理解记录。
代码审计是每个安全研究员都应该掌握的技能。但是网上对于代码审计的介绍文章却比较匮乏。因此本文一方面作为 The Art of Software Security Assessment 一书的阅读笔记,另一方面也结合自己日常工作的经验总结,希望能对国内的安全研究员有个抛砖引玉的帮助。
在日常分析外部软件时,遇到的反调试/反注入防护已经越来越多,之前使用的基于 frida 的轻量级沙盒已经无法满足这类攻防水位的需要,因此需要有一种更加深入且通用的方式来对 APP 进行全面的监测和绕过。本文即为对这类方案的一些探索和实践。
在日常的 Android 应用安全分析中,经常会遇到一些对抗,比如目标应用加壳、混淆、加固,需要进行脱壳还原;又或者会有针对常用注入工具的检测,比如 frida、Xposed 等,这时候也会想知道这些工具的核心原理以及是否自己可以实现。
其实这些问题的答案就在 Android 的 Java 虚拟机实现中。可以是早期的 Dalvik 虚拟机,也可以是最新的 ART 虚拟机。从时代潮流来看,本文主要专注于 ART。不过,为了铭记历史,也会对 Dalvik 虚拟机做一个简单的介绍。最后会从 ART 的实现出发j对一些实际的应用场景进行讨论。