你在明,駭客在暗,防駭時代先行自保,刻不容緩!
2017年是電子支付元年,行動支付快速發展與普及,如何在享受便利快速的同時,能兼顧安全交易,避免使用者資料外洩或財務損失之風險,是所有開發商要面對的資安挑戰,但有時礙於開發時間緊迫,加上平台的漏洞,很容易讓駭客乘虛而入,要如何確保上架的APP是被保護的? 且能符合各項法規及實驗室針對平台上漏洞之規定,以下幾點是需要注意的:
1. 防止逆向工程
原始碼是否可以反編譯? 駭客透過程式碼的解讀可以發覺漏洞並展開攻擊,一般開發者會使用程式碼混淆技術,但程式碼混淆並不能真正阻止逆向工程。因此,對於對安全性要求很高的場合,僅僅使用程式碼混淆並不能保證原始碼的安全,而混淆太過也會造成開發人員無法偵錯。最好的方式是把程式碼挖空處理,無法查看完整原始碼,也無法加入或移除程式碼,也不會對開發人員造成無法辨識的問題。
2. 偵錯日誌函數呼叫風險
開發者在除錯時常常會使用偵錯日誌函數,藉由輸出偵錯訊息來幫助程式設計師排除Bug,但偵錯日誌函數的呼叫應保證輸出的資訊是無資安風險的,涉及敏感資訊的輸出在正式或發佈版本中應該被關閉。
3. 資料儲存加密
使用者在使用APP時常常會輸入個資或其他敏感資料,這些資料通常會儲存在手機端,如果沒有針對儲存資料做加密的動作,可能會被惡意程式所竊取,造成機敏資料外洩。除了加密之外,還可以進行綁定裝置的動作,使儲存在手機端的資料僅限制在特定裝置上使用,無法被複製到其他裝置上使用,將資料外洩的風險降到最低。
4. 憑證綁定
APP在對伺服器使用HTTPS加密連線時,應該對伺服器憑證進行檢查,並且使用STRICT_HOSTNAME_VERIFIER嚴格校驗主機名稱,確保連線的伺服器是正確合法的目標伺服器,防止APP連線到駭客假冒的伺服器,進而導致連線時送出的帳號密碼等機敏資料遭到監聽。
5. 防止動態程式碼植入
程式碼動態植入為通過 OS 特定機制,利用系統 API 將程式碼寫入到目標程式並讓其執行的行為。利用程式碼動態植入,攻擊者可以將一段惡意的程式碼寫入到目標程式的記憶體中,進而攔截(Hook)重要函數,竄改程式執行邏輯、竊取敏感資訊等。常見的動態植入可以用來竊取使用者輸入的帳號密碼,竄改行動支付的交易對象及金額,監聽網路傳輸資料等等。開發者應對記憶體修改的行為進行偵測與阻擋,可採取的方式為偵測Ptrace、GDB等記憶體修改工具是否正附加(attach)在APP上,監控 APP的所有行為。如此才能確保APP執行時,存在記憶體中的程式碼及資料不會遭到惡意竄改。
6. 防止Apk修改/重新打包
Apk修改/重新打包為Android上常見的攻擊手法,攻擊者將正版APP下載後進行逆向工程,將原始碼還原,然後從中找出可以修改或加入惡意程式碼的地方,修改後重新封裝成新的APP發佈。由於重新封裝後的APP與正版APP在使用上幾乎是無差別的,所以常導致使用者下載到偽冒APP造成重大損失。2013年中國大陸駭客集團「延邊幫」即利用偽冒行動網銀的惡意APP,偷走南韓網銀用戶數百萬美元存款。開發者應對APP加入完整性驗證機制,針對APP的程式碼及資源檔計算Hash值,然後執行時進行比對,若比對結果不符即拒絕執行,讓攻擊者無法進行二次打包的行為,確保使用者下載的APP是可信任的。
面對行動支付的時代,對企業來說,在提供便利交易環境的同時,更應該準備好面對凶猛的資安挑戰,並建立完整的風險管理機制,確保提供使用者安全防護的服務,避免發生詐騙交易、個資外洩等問題,導致企業形象受損。