1***@163.com
1***@163.com
  • 发布:2020-08-12 15:06
  • 更新:2022-05-18 15:36
  • 阅读:3454

IOS云打包后应用安全检测漏洞,动态调试攻击风险,不安全的 API 函数引用风险等漏洞

分类:HBuilderX

我们目前使用的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 的源代码未做混淆处理
测评详细信息

  1. [文件]:
    BMKSDKKeychainItemWrapper
    [方法]:
    initWithIdentifier:accessGroup:

  2. [文件]:
    BMKReachability
    [方法]:
    reachabilityWithHostName:

  3. 8 / 23
    HBuilder-iOS 应用安全报告
    [文件]:
    BMKReachability
    [方法]:
    reachabilityWithAddress:

  4. [文件]:
    BMKAppTools
    [方法]:
    Md5AndBase64Encode:withOutPut:

  5. [文件]:
    BMKStretchImageUtil
    [方法]:
    getStretchImageViewWithImageName:highlightedImageName:stretc
    hByRect:

  6. [文件]:
    BMKStretchImageUtil
    [方法]:
    getStretchButtonWithImageName:highlightedImageName:disabledIm
    ageName:stretchByRect:

  7. [文件]:
    BMKMapManager
    [方法]:
    connection:didReceiveAuthenticationChallenge:

  8. [文件]:
    BMKMapManager
    [方法]:
    connection:didCancelAuthenticationChallenge:

  9. [文件]:
    BMKMapManager
    [方法]:
    connection:didReceiveResponse:

  10. [文件]:
    BMKMapManager
    [方法]:
    connection:didReceiveData:

  11. [文件]:
    BMKMapManager
    [方法]:
    connectionDidFinishLoading:

  12. [文件]:
    BMKMapManager
    [方法]:
    connection:didFailWithError:

  13. [文件]:
    9 / 23
    HBuilder-iOS 应用安全报告
    BMKMapManager
    [方法]:
    allocWithZone:

  14. [文件]:
    BMKVIDrawTextHelper
    [方法]:
    fontWithSize:style:

  15. [文件]:
    BMKVIDrawTextHelper
    [方法]:
    colorWithRGB:

  16. [文件]:
    BMKVIDrawTextHelper
    [方法]:
    sizeWithFont:strings:

  17. [文件]:
    BMKImageHelper
    [方法]:
    convertBitmapRGBA8ToUIImage:withWidth:withHeight:

  18. [文件]:
    BMKLogService
    [方法]:
    copyWithZone:

  19. [文件]:
    BMKLogService
    [方法]:
    showLogView

  20. [文件]:
    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

2020-08-12 15:06 负责人:无 分享
已邀请:
DCloud_iOS_XHY

DCloud_iOS_XHY

问题一:所说的动态调试iOS应用默认就是这样,并且提供的防止动态调试的代码中涉及的 dlopen() dlsym() 方法也是苹果不允许调用的,可能会影响审核或其他未知的问题;
问题二:所罗列的方法都是百度地图SDK中的,无法修改,并且iOS代码混淆也是影响审核的;
问题三:一些基础功能需要使用这些比较底层c 的 api,iOS 端很多知名的sdk都有使用;

  • 1***@163.com (作者)

    感谢回答,后来我们采用离线打包的方式,转换成原生项目后进行加固,解决了问题一,和问题二

    2020-09-03 13:48

疯菜莱莱

疯菜莱莱

但是 上面大佬死转着要求改,一筹莫展,哪位大佬指点下方法呢?

  • 1***@163.com (作者)

    我们采用离线打包的方式,转换成原生项目后进行加固,解决了问题一,和问题二,问题三我们后来没改,跟客户说明了一下

    2020-09-03 13:49

炒饭包子

炒饭包子

问下第三个问题解决了吗

1***@qq.com

1***@qq.com

同求问题3解决方案

lcq

lcq

同求问题3解决方案

该问题目前已经被锁定, 无法添加新回复