fuqiuluo’s blog

记录美好生活

技术分享

安卓的一些环境的安全检查

#安卓#系统调用#Linux#安全
type
Post
status
Published
date
May 22, 2023
slug
summary
一些简单的普通的已收集的检测环境是否安全的代码技术分享!
tags
安卓
系统调用
Linux
安全
category
技术分享
icon
password
🔥
很经典,很简单,很无聊!

ADB检测

系统设置

USB 调试状态采集,通过读取 Settings.Global.ADB_ENABLED / Settings.Global.ADB_WIFI_ENABLED 判断设备是否开启 ADB,作为设备风险指纹之一
读取 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED ,开发者选项是否启用,ADB 的前置条件

文件系统

ADB 守护进程残留检测,通过校验 /dev/socket/adbd 是否存在判断设备是否运行 ADB 守护进程,命中即视为高危并标记 ADB 环境异常,作为设备运行时调试风险指纹之一。

属性

读取 init.svc.adbd(running/stopped)、sys.usb.statesys.usb.config(是否含 adb)、persist.sys.usb.configro.adb.secure —— 通过 __system_property_get 或反射 SystemProperties.get 获取。

充电状态

调试器检测

系统属性

调试系统属性采集,通过查询 debug.checkjni / vendor.migl.debug 判断设备是否启用 JNI 检查或厂商调试开关,作为进程调试态识别的关键信号。

进程线程

调试线程枚举检测,通过遍历 /proc/self/task/ 下所有线程的 comm 文件,对线程名进行大小写不敏感匹配,识别 JDWP / LLDB / GDB 等调试器注入的工作线程,作为运行时调试附加风险指纹。

Java 层调试器连接检测

JDWP 调试器挂载检测,通过 JNI 跨语言调用 android.os.Debug.isDebuggerConnected() 判断当前进程是否有 Java 调试器(JDWP)已连接,作为运行时调试态的直接判定信号。
android.os.Debug.isDebuggerConnected() 直接查询 ART 运行时内部的 JDWP 连接状态,无需解析 /proc 或系统属性,命中即代表调试器已实际挂载(而非仅开启了调试开关),为高置信度信号。

APK 可调试标志检测

应用可调试性采集,通过 JNI 读取 ApplicationInfo.flags 字段中的 FLAG_DEBUGGABLE 位,判断当前 APK 是否以可调试模式打包,作为应用发布态合规性验证的核心指纹。
FLAG_DEBUGGABLE 由 APK 打包时的 AndroidManifest.xmlandroid:debuggable="true" 决定,正式发布包该位必须为 0。命中代表当前运行的是调试版本或被篡改重打包的 APK,与 isDebuggerConnected() 区别在于:前者检测 APK 是否允许调试,后者检测是否已被调试,两者构成互补的双重验证。

应用数据目录权限检测

数据目录安全性采集,通过读取 /proc/self/cmdline 获取当前包名,构造 /data/data/{package} 路径后检查其 Unix 权限位,判断应用私有数据目录是否对其他用户可写,作为文件系统层数据泄露风险的识别信号。
正常情况下应用数据目录权限应为 0700(仅应用自身 UID 可读写),other-writeo+w)位被置位通常意味着设备已 Root 后权限被误改、或存在提权攻击导致目录被篡改,可能使第三方应用直接读写该应用私有数据。

Seccomp 沙箱状态检测

系统调用过滤机制采集,通过读取 /proc/self/status 中的 Seccomp 字段,判断当前进程是否启用了 seccomp 沙箱,未启用时意味着进程可执行任意系统调用,作为内核层攻击面评估的辅助信号。
含义
安全性
0
未启用 seccomp
进程可调用任意 syscall,无内核级防护
1
strict 模式
仅允许 read / write / exit / sigreturn
2
filter 模式(BPF)
按自定义 BPF 规则过滤,Android 默认模式
正常 Android 应用进程(API 21+)均应运行在 seccomp-bpf 沙箱中(值为 2),值为 0 通常出现在 Root 环境、定制内核或被强制 ptrace 注入后沙箱被绕过的场景。

调试器内存映射与文件描述符检测

调试器运行痕迹采集,通过扫描 /proc/self/maps 内存映射段与 /proc/self/fd 已打开文件描述符,识别 gdb / lldb 系列调试器及其 server 端的注入痕迹,命中即视为致命风险,作为调试器实际附加运行的强证据指纹。

模拟器检测

Build 属性特征

各字段命中规则

检测项
字段
关键词样本
对应模拟器
emu.hardware_pattern
HARDWARE
vbox86noxttVM_x86
VirtualBox 系、夜神、天天
emu.fingerprint_pattern
FINGERPRINT
generic/sdk/genericAndyttVM_Hdragonvbox86p
AOSP 模拟器、Andy、天天、VirtualBox
emu.model_pattern
MODEL
google_sdkEmulatorDroid4XAndroid SDK built for x86
Android Studio 模拟器、Droid4X
emu.manufacturer_pattern
MANUFACTURER
GenymotionAndynoxTiantianVM
Genymotion、Andy、夜神、天天
emu.product_pattern
PRODUCT
sdkAndyDroid4Xnoxvbox86p
通用 SDK、各类模拟器
emu.brand_device_pattern
BRAND/DEVICE
genericAndyDroid4Xnoxvbox86p;以及 BRANDDEVICE 同时为 generic 的组合判定
通用模拟器双字段交叉验证
emu.tags_pattern
TAGS
test-keys
工程版 / 自编译 ROM 签名
 
Loading...