zoukankan      html  css  js  c++  java
  • App安全测评问题处理

    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 <UIKit/UIKit.h>
    #import "AppDelegate.h"
    // 阻止 gdb/lldb 调试
    // 调用 ptrace 设置参数 PT_DENY_ATTACH,如果有调试器依附,则会产生错误并退出
    #import <dlfcn.h>
    #import <sys/types.h>
    
    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)
  • 相关阅读:
    使用.Net Core 2.2创建windows服务
    Ubuntu 18.04 安装部署Net Core、Nginx全过程
    Task的在主线程处理异常信息的Helper类
    行转列的处理。
    netcore 下加密遇到的问题
    关于安装angular-cli环境报错的问题
    64位的windows服务安装问题
    EF.Mysql在codefirst模式下调用存储过程,和再DbFirst模式下的调用
    阿里云消息队列的C#使用http接口发送消息实例
    [转载]EF或LINQ 查询时使用IN并且根据列表自定义排序方法
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/AppSecurity.html
Copyright © 2011-2022 走看看