作者MIM23 (HAWK)
看板AndroidDev
標題Re: [問題] 跟Web Server之傳遞資料的方式
時間Tue Jan 19 15:07:46 2016
※ 引述《flyroy (伕萊羅伊)》之銘言:
: 請問大家在寫Android時,遇到需傳遞密碼之類的資料是怎麼傳遞
: 目前想法是先用AES加密後在用BASE64加密成字串傳到WEB SERVER
: SERVER接到在轉回來,有更好的方式可推薦嗎?
: 如果與Server連結改用SSL方式傳遞
: 是不是就可以不用像上面方法這麼麻煩?
在internet上傳輸資料就會有被竊聽、竊取的風險
這樣的攻擊行為通常被稱為 中間人攻擊 MITM(Man in the middle)
所以為了確保資料安全,通常會使用SSL/TLS協議來做基本的保護
(其實不太想寫SSL,因為SSL 3.0也是不安全的,漏洞為Poodle)
使用了TLS協議做傳輸也不代表資料就是安全的,其實還是會有MITM的問題
只要中間人使用自己的憑證做攻擊照樣能看到傳輸的資料
現今的瀏覽器通常遇到自簽的憑證或是不合法的憑證都會跳一個訊息
"此網站的安全性憑證有問題",不過使用者大多還是會按"繼續瀏覽此網站"
所以在Client端的應用程式上我們可以這樣做:
1.Https握手時檢查Server端給的x509憑證上的公鑰是否正確
2.資料本身做加密(對稱或非對稱加密)
不過之前自己分析了台灣許多的APP(行動銀行、行動支付)
行動銀行APP也都只有使用SSL/TLS協議而已,而且敏感資料也不加密
只有少數的行動支付APP才有做上面講的那二種做法
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.31.21
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1453187269.A.E7B.html
※ 編輯: MIM23 (220.135.31.21), 01/19/2016 15:12:39
→ ssccg: 內建的sslsocket連線時會驗證憑證是否為OS信任的root CA所 01/19 15:20
→ ssccg: 簽發、憑證中列的domain與要連線的domain是否相符 01/19 15:21
→ ssccg: 跟瀏覽器的檢查是一樣的,通常中間人用自己的憑證是無法成 01/19 15:22
→ ssccg: 功建立連線的(Android/Java會丟出SSLHandshakeException) 01/19 15:23
→ ssccg: 只是有些人懶得申請憑證用自簽的,然後就照網路上的教學用 01/19 15:24
→ ssccg: 改寫TrustManager和HostnameVerifier才會被攻擊 01/19 15:26
→ ssccg: 這種正確作法是用你說的1把自簽的公鑰寫死在client檢查 01/19 15:26
→ ssccg: 如果用public trust的憑證,通常是沒有MITM的問題的 01/19 15:28
原來如此,感謝高手補充
我的做法是強制讓Android信任不合法的憑證方式去監看封包
這種方式不會跳SSLHandshakeException,當然不可否認這種是比較特殊的做法
但有些程式是檢查公鑰不同就中斷了,就無法偷看程式送了什麼
OWASP
http://tinyurl.com/kz8jovw
※ 編輯: MIM23 (220.135.31.21), 01/19/2016 16:05:23
推 KeySabre: 推一下重要的文 01/20 12:56
推 flyroy: 很重要,但我聽的霧沙沙... 01/21 22:41