App安全测评问题处理
App安全测评问题分类
1.自身安全
- 权限信息-info.plist中权限字段访问
- 行为信息-访问相册、拨打电话
2.客户端数据存储安全
- ==动态调试攻击风险==
- 第三方SDK检测
- 敏感词
3.二进制代码保护
- 代码未混淆风险
- 输入监听风险
- 调试日志函数调用风险
- 配置文件信息明文存储风险
- 动态库信息泄露风险
- WebView组件跨域访问危险
- 数据库明文存储风险
- 越狱设备运行风险
4.数据传输安全
- HTTP数据传输安全
- HTTPS未校验服务器证书漏洞
- URL Schemes劫持漏洞
5.加密算法及数据安全
- AES/DES加密算法不安全使用漏洞
- 弱哈希算法使用漏洞
- 随机数不安全使用漏洞
6.iOS应用安全规范
- XcodeGhost感染漏洞
- 不安全的API函数引用风险
- 未使用自动管理内存技术风险
--
App安全测评问题处理
1.动态调试攻击风险(阻止 gdb/lldb 调试)
#import
#import "AppDelegate.h"
// 阻止 gdb/lldb 调试
// 调用 ptrace 设置参数 PT_DENY_ATTACH,如果有调试器依附,则会产生错误并退出
#import
#import
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
void anti_gdb_debug() {
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);
}
int main(int argc, char * argv[]) {
#ifndef DEBUG
// 非 DEBUG 模式下禁止调试
anti_gdb_debug();
#endif
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
2.输入监听风险
使用第三方的安全自绘随机键盘,防止输入内容被监听(自定义键盘⌨️)
3.调试日志函数调用风险
开发者检测在发布正式应用时,移除通过NSLog输出程序日志的代码信息。防止输出敏感日志信息暴露程序逻辑
#ifdef DEBUG
//调试状态
#define HKLog(fmt,...) NSLog((@"%s [Line %d] " fmt),__PRETTY_FUNCTION__,__LINE__,##__VA_ARGS__)
#else
//发布状态
#define HKLog(...)
#endif
4.HTTP数据传输安全
使用HTTPS协议对传输数据进行加密保护,尽可能去掉项目中的HTTP链接
5.弱哈希算法使用漏洞
开发者自查应用开发中勿使用CC_SHA1 的方式进行数据哈希,推荐使用 CC_SHA256 算法进行数据哈希操作
6.不安全的API函数引用风险
开发者移除应用程序中调用的系统风险函数和过期api,同时防止系统直接调用存在C缓冲区溢出的函数如 memcpy、scanf、sprintf、strcpy、vsprintf如:第三方API SSZip 和 GCDAasyncSocket, Lottie
7.代码混淆
- 定义:将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为
- 代码混淆的方式
为避免出现盗版,提高应用安全性,技术人员对项目源代码进行了代码混淆。即对源代码文件中的一些类名做了变换,改成了以英文字母命名的名称,这样破解者在阅读时就不容易理解其特指的含义。 - 代码混淆的利与弊
这种代码混淆方法简单、便于操作。但也因此会给开发者的调试工作带来困难,开发人员通常需要保留原始的未混淆的代码用于调试。由于混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失会使程序变得更加难以理解。
常见的安全测评公司
- 梆梆安全
- 绿盟科技(NSFOCUS)