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)