Ⅰ. 概述
我们将研究一些与 Android 安全相关的基本知识。我们将讨论静态分析和动态分析。静态分析是一种在应用程序未运行时分析源代码并查找漏洞的技术。动态分析是一种在应用程序运行时分析 Hooking 或 ELF 可执行文件结构并查找漏洞的技术。移动应用程序的主要检查项包括:第一项 OS 操作系统篡改检测功能是否已启用、第二项程序完整性验证是否已执行、重要信息是否暴露在内存中、重要信息是否存储在设备中以及是否通过强制运行屏幕来绕过身份验证步骤。
Ⅱ. 与 Android 安全相关的各种知识
主要内容包括 动态分析, 静态分析, MultiDex我很快就会这样做。在此之前,我想以回顾的形式记下一些与之前文章有关的内容。因此,请注意,开头部分可能会有些混乱。首先,就像在 iOS 上一样,在 Android 上,保护设备免受恶意代码应用程序的攻击非常重要。 开发者签名这是必需的。没有签名的应用程序无法安装或运行,而签名作为唯一的值很难被伪造。 Smishing(通过短信窃取个人信息和金钱)在进行同一攻击时,我们如何确定哪个设备基于网址,以及它是否实际上是被攻击者用来提取个人信息的设备?这在开发 Web 应用程序时需要考虑的问题,同时在设计操作系统时也需要考虑。 用户代理由于标识符值存在,因此可以识别目标设备,然后尝试进行攻击。因此,在运行 Web 服务时,可以通过用户代理来区分移动设备和 PC 设备,以响应性地显示 Web 页面,并部署针对操作系统的恶意软件。
※ 提示: 在识别 Nox Player 或 LD Player 等虚拟 Android 时,我们还会检查其他信息,如蓝牙、运营商和电话号码。
※ 从网络环境部署的角度来看,还可以使用网络分离来将内部网络和客户网络分离,以保持安全性。
在之前的文章中,我提到 iPhone 具有高度安全性,但实际上,无论是 iPhone 还是 Android,都容易受到安全漏洞的攻击,因为它们都包含 C 语言代码。特别是在开发游戏等应用程序时,要特别小心,因为常见的 C 语言代码可能会被用于开发 iPhone 和 Android 版本的开发公司。对于 Android 而言, C 语言代码在 Native Libraries 中执行。
我已经练习过解构和重新编译 Android APK 文件,分析和操作代码,我只会提供相应的解构和编译命令。我还附上了一个关于 smali(Android 汇编器)的参考 Google 文档。
java -jar apktool_2.5.0.jar(java의 디컴파일, 컴파일 도구) d(디컴파일 옵션) apk(디컴파일 할 apk명) path(저장경로 및 디렉토리명)
java -jar apktool_2.5.0.jar b(컴파일 옵션) directory(컴파일 할 소스 코드 담긴 디렉토리) -o(이 옵션 다음에 apk 저장할 디렉토리) apk(새로 만들 apk명)Dalvik 字节码 | Android 开源项目 | Android 开源项目
Dalvik 可执行文件格式 | Android 开源项目 | Android 开源项目
Ⅲ. 静态分析和动态分析
静态分析当应用程序未运行时 在源代码中它是一种用于查找缺陷的分析技术。 解压缩 您可以使用汇编器或各种工具(如 apktool、jadx 等)分析源代码。在 Android 上,您还可以查看 AndroidManifest.xml、签名值以及其他信息,以大致确定哪些权限正在使用,以及它们是否为恶意代码。在 DEX 结构中,您可以查看每个函数,以确定其用途。 classes.dex因为它是受限的

基于此结构,我们尝试分析源代码。
动态分析这是一种分析技术,用于查找应用程序运行环境中的漏洞。它会修改用户输入或执行流程,以查看如何创建漏洞。要在运行环境中修改数据或执行流程, 钩子这是非常必要的。通过 Frida,它以钩子功能而闻名,我们可以检查应用程序中存在的类和方法,了解这些方法如何工作,并对它们进行操作。 弗里达它有一些基于 JavaScript 的框架,但您需要自己构建代码逻辑。 JEB还有一种名为 ELF (可执行和可链接格式)的商业软件,因此 (共享对象) 扩展文件最初指的是 Unix 类型的可执行文件,通常会在 Android 上动态加载这些扩展文件。这些扩展文件是用 C/C++ 编写的,并将通过原生库运行,因为它们与 Linux 系统相链接,而 Linux 系统是 Android 的基础。
检查项目 | 描述 |
是否启用操作系统调制检测功能 | 由于在设备上修改操作系统(进行 root 或黑客攻击)时安全威胁会增加,因此在修改操作系统时需要检查服务是否可用。 |
程序完整性验证 | 如果修改后的程序正常运行,则存在安全威胁,例如恶意软件的再次分发,因此需要检查修改后的程序是否可以正常运行。 |
敏感信息是否暴露在内存中 | 检查用户敏感信息的明文是否暴露在用户终端内存区域中 |
是否将重要信息存储在设备上 | 检查是否在应用程序的用户文件夹和外部存储中存储了敏感信息 |
通过强制屏幕运行,绕过身份验证阶段 | 检查是否可以通过强制屏幕执行、操纵与身份验证相关的文件以及其他方法绕过身份验证阶段 |
如上表所示,在移动应用程序中需要检查五个关键项。首先, 操作系统调制检测这是一个检查操作系统是否具有管理员权限的检查,这允许完全控制设备。对于 Android 而言, 根目录, 适用于 iPhone 越狱如果普通用户进行了 root 或 jailbreak 操作,安全系统沙箱可能会失去功能,从而极易受到安全威胁。当然,如果管理员的权限因恶意软件而被入侵,设备上存储的所有数据都可能受到影响,导致严重的后果。
※ 当在 PC 上使用某些程序,而不仅仅是移动设备时,该程序有时可能在操作系统中获得高权限。这是因为该程序可以被黑客利用,从您的 PC 中提取信息,因此需要谨慎。例如,VMware、Nox Player 等程序很危险,因为它们可以作为虚拟机直接操作内核。
因此,要检测此操作系统修改,您可以使用特定的应用程序或 系统配置文件 (ro.debuggable、service.adb.root) 您可以检查此项,或者进入 Android 操作系统并检查 su 命令是否正在运行。 在进行 root 操作期间安装的文件 (/sbin/su、/system/su、/system/bin/su、/system/xbin/su、/system/app/Superuser.apk 等)你可以找出它们是否存在。
getprop | grep debug如果输入以下命令,

您会看到这样的结果: 如果 ro.debuggable 设置为 0,则设备未被 root;如果设置为 1,则设备已被 root。
程序完整性验证这是一个普通用户应该特别小心的领域,因为它似乎 即使它看起来是一个正常的应用程序,但实际上可能在其内部运行恶意代码。 需要提高警惕。从非官方 Google Play Store 等地方下载的应用程序,如 apk 市场,特别有风险。IOS 相对安全,因为只能从 App Store(Apple Store)下载。Windows 也可以轻松下载和使用在网络上流传的程序,因此也需要提高警惕。一旦执行,后果可能是不可逆的。
在内存中暴露敏感信息这是一个安全问题,因为所有设备都有可以被攻击的内存。几乎所有应用程序都分配了内存,并且数据被存储和删除。如果有人能够实时访问这些内存,他们就可以 转储内存信息如果我这样做,我的帐户、密码、卡号和帐户信息都可能被泄露。因此,我输入的重要信息可能会被记录下来。 如果它以纯文本形式存在,则是一个漏洞。而且 加密即使内存信息泄露了,也应该使其变得不可识别。这在 Web 上尤其重要,因为 JavaScript 在安全性方面存在漏洞。如果将其暴露在外,就会很危险。 在 DB 中存储个人信息时也会使用加密它必须复杂,不能轻易解码。
在设备上存储关键信息对于常见的情况,并不多。 敏感个人信息存储在公共目录或外部存储设备中如果是这样,一旦设备被黑客入侵,所有个人信息都会被盗取。对于游戏而言,如果用户数据仍然存在,可以通过操纵数据来享受游戏(???),但这种情况很少见。不仅是游戏,银行也如此。 由于我们在服务器上管理着重要信息,并高度重视服务器的安全性, 一般来说,可以认为它是安全的。除非用户单独在设备上存储敏感信息,否则风险相对较小。
通过强制屏幕运行来绕过身份验证步骤例如登录或输入密码 与身份验证过程相关的文件通过操纵音频,它可以绕过安全措施,访问用户应用程序,提取个人信息。 Androidmanifext.xml权限和组件设置已定义,如果导出的值为 true,则其他应用程序或系统可以直接访问该服务,如果为 false,则只能在应用程序内部访问。如果设置允许外部访问应用程序, 登录活动在登录活动中进行访问 调用另一个活动 它可以绕过身份验证步骤,从而允许其他恶意代码代替正常的登录相关功能运行。
Ⅳ. MultiDex
MultiDex简单地说,可以将 Dex 结构视为被复制。

如上图所示,此结构的背景为 方法限制 在创建简单应用程序时,这不是一个问题,但当应用程序提供大量功能或在开发过程中通过引用多个库使用许多方法时,它所能包含的 Dex 个数就受到限制。 64K 参考限值它被称为 64K 参考限制,因为它不能超过 65,536 个方法,而值的数量与 64 X 1,024 相同。因此,如上图所示, 主 Dex而且 子 Dex它通过动态将每个组件加载到内存中来运行应用程序。但是,由于限制,有时这种结构并不是因为其优势而使用。 对于 Sub Dex 来说,由于代码可以隐藏, 重要代码可以隐藏在 Sub Dex 中并执行,而普通代码可以在 Main Dex 中执行。当对具有这种结构的 apk 文件进行反编译时,可以看到 Main 和 Sub Dex 分布在不同的区域。
ELF (可执行和可链接格式)我们来快速看一下它在 Android 上的调用方式和工作原理。

通过引用 Android 结构中的本机库,执行以 C/C++ 编写的代码,如果在 DEX 结构中执行某个 CLASS 的 METHOD 时需要引用 ELF 方法, PLT(过程链表)PLT 是一个表,用于连接外部过程并存储这些过程的地址。 GOT (全局偏移表)GOT 是一个表,其中包含 PLT 所引用的程序的地址,并包含在 ELF 文件中,如图所示。也就是说,在 Android DEX 结构中,一个 CLASS 的 METHOD 具有其逻辑中需要执行的 ELF 方法,而 PLT 可以通过引用 GOT 来加载。

打开 apk 文件后,您会看到各种配置,但还有一个 lib 目录。在这个目录中,有 ELF 文件。如果您查看其中的内容,您会看到

它以 lib[name].so (共享对象)的形式包含在其中。'.so'扩展名指的是 Linux 中的可执行文件,而 ELF 指的是 Linux 中的可执行文件结构,类似于 Windows 中的 PE。
评论
其实,我是先写了评论再写这篇文章的。本周,文章数量明显减少了。我觉得我可能无法写任何东西,因为我正在学习黑客技术…… 😆 所以,我要用这篇文章来完成漏洞评估部分。感觉文章数量减少了一些,心里有点轻松。 😆
登录