我们目前使用的MUI框架开发的app,IOS云打包后经过安全检测有以下3个中高级漏洞需要解决:
漏洞详细描述:
2.2.1.检测 iOS App 运行时是否存在可被动态调试的风险
危险等级
高
在未加入反调试术的 iOS App 中,攻击者使可用 GDB、IDA、Ptrace 等调
试器跟踪运行的目标程序,查看内存中运行的进程状态,获取内存进程中的
运行代码和实时数据,甚至分析篡改程序的业务逻辑,对客户关键数据或者
服务器进行恶意攻击,例如查看客户端业务操作的数据,比如登录账号、密
码等,窃取用户信息;或者通过分析程序运行逻辑,挖掘应用漏洞。
测评结果
存在风险(发现 1 处)
测评结果描述
该 App 存在可动态调试的风险
测评详细信息
解决方案
在项目 main.m 文件中添加如下内容:
1.引入 dlfcn.h 文件
import <dlfcn.h>
2.预定义
typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int
_data);
if !defined(PT_DENY_ATTACH)
define PT_DENY_ATTACH 31
endif
3.定义函数
void disable_gdb(){
void * handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");
ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
dlclose(handle);
}
4.调用函数
在 main.m 文件 main 方法中调用
disable_g
2.2.2. 代码未混淆风险
测评目的
检测 iOS App 程序的源代码是否已经经过混淆处理
危险等级
中
危害
针对 iOS 应用开发使用的 Object-c 及 C,C++代码目前较缺乏有效的防护手
段,苹果的 app 自身并没有比 android 更安全的防范措施,也无法通过常规
的二次加固保护应用不被反编译和篡改,应用代码编写过程中出现的安全漏
洞、编码隐患、甚至业务逻辑上的缺陷很容易被分析暴露,造成程序业务逻
辑泄露、加解密算法失效、通信加密失效,攻击者可以利用这些信息窃取客
户端的敏感数据,包括账号、密码;绕过业务安全认证流程,直接篡改用户
账号信息;对服务器接口发起攻击等。iOS 的代码混淆,是通过将 Object
C、C/C++代码中的方法名、变量名、类名、包名等这些元素名称改成毫无
关联且无意义的名字,对源代码实现逻辑分支混淆和控制流平坦化,隐藏关键
逻辑,提高黑客破解难度,增加破解时间成本。
测评结果
存在风险(发现 20 处)
测评结果描述
该 App 的源代码未做混淆处理
测评详细信息
-
[文件]:
BMKSDKKeychainItemWrapper
[方法]:
initWithIdentifier:accessGroup: -
[文件]:
BMKReachability
[方法]:
reachabilityWithHostName: -
8 / 23
HBuilder-iOS 应用安全报告
[文件]:
BMKReachability
[方法]:
reachabilityWithAddress: -
[文件]:
BMKAppTools
[方法]:
Md5AndBase64Encode:withOutPut: -
[文件]:
BMKStretchImageUtil
[方法]:
getStretchImageViewWithImageName:highlightedImageName:stretc
hByRect: -
[文件]:
BMKStretchImageUtil
[方法]:
getStretchButtonWithImageName:highlightedImageName:disabledIm
ageName:stretchByRect: -
[文件]:
BMKMapManager
[方法]:
connection:didReceiveAuthenticationChallenge: -
[文件]:
BMKMapManager
[方法]:
connection:didCancelAuthenticationChallenge: -
[文件]:
BMKMapManager
[方法]:
connection:didReceiveResponse: -
[文件]:
BMKMapManager
[方法]:
connection:didReceiveData: -
[文件]:
BMKMapManager
[方法]:
connectionDidFinishLoading: -
[文件]:
BMKMapManager
[方法]:
connection:didFailWithError: -
[文件]:
9 / 23
HBuilder-iOS 应用安全报告
BMKMapManager
[方法]:
allocWithZone: -
[文件]:
BMKVIDrawTextHelper
[方法]:
fontWithSize:style: -
[文件]:
BMKVIDrawTextHelper
[方法]:
colorWithRGB: -
[文件]:
BMKVIDrawTextHelper
[方法]:
sizeWithFont:strings: -
[文件]:
BMKImageHelper
[方法]:
convertBitmapRGBA8ToUIImage:withWidth:withHeight: -
[文件]:
BMKLogService
[方法]:
copyWithZone: -
[文件]:
BMKLogService
[方法]:
showLogView -
[文件]:
BMKLogService
[方法]:
logView
解决方案
开发者使用头文件映射的方式定义 pch 文件,并在定义的 pch 文件中引入头
文件,在头文件中定义方法混淆的隐射,防止代码语义化的定义暴露程序意
图,同时编译生成新的发布包
2.2.3. 不安全的 API 函数引用风险
测评目的
检测 iOS App 程序中是否引用了不安全的系统 API 函数
危险等级
中
危害
iOS 中提供的系统 API 函数中,包含一些存在安全隐患或者需配合指定方式
使用的系统 API,否则将会导致安全性问题。其中,比较明显的一种问题就
是缓冲区溢出攻击。此类 API 中无法自动对栈中的数组进行边界检查,而且
局部变量和状态信息,都存在栈中。这样,对越界的数组元素的写操可能会
破坏存储在栈中的状态信息。当程序使用这个被破坏的状态,试图重新加载
19 / 23
HBuilder-iOS 应用安全报告
寄存器或执行 ret 指令时,就会出现很严重的错误,可能导致程序运行失败、
系统关机、重新启动。更加致命的情况是让程序跳转去执行攻击者的恶意指
令,比如非法提升权限,执行恶意代码等。
测评结果
存在风险(发现 7 处)
测评结果描述
该 App 程序中引用了不安全的系统 API 函数
测评详细信息
124318 0x006237c8 0x006237c8 11 12 () ascii . !@_getenv
124455 0x006244e0 0x006244e0 12 13 () ascii 2 !@_sprintf
124474 0x006246a7 0x006246a7 11 12 () ascii 3 !@_strcat
124321 0x006237fd 0x006237fd 15 16 () ascii . !@_gets
124509 0x006249ab 0x006249ab 13 14 () ascii 4 !@_vsprintf
124471 0x00624673 0x00624673 11 12 () ascii 3 !@_sscanf
124477 0x006246d7 0x006246d7 11 12 () ascii 3 !@_strcpy
解决方案
开发者移除应用程序中调用的系统风险函数和过期 api,同时防止系统直接调
用存在 C 缓冲区溢出的函数如
memcpy、scanf、sprintf、strcpy、vsprintf
1***@163.com (作者)
感谢回答,后来我们采用离线打包的方式,转换成原生项目后进行加固,解决了问题一,和问题二
2020-09-03 13:48