iT邦幫忙

2

表單傳送的安全性

php
  • 分享至 

  • xImage

各位大大好
主管要求小弟要確保表單傳送的資料不會被截取
我們的主機是https的
基本上也都有防sql injection
我原本是想說一般的post應該就可以了
流程就是:
A.php --POST--> B.php
但主管覺得要用ajax的方式去做資料庫的搜尋再加密比較安全
A.php --POST--> Ajax.php --轉址--> B.php?加密(XXX)
我不確定這樣做是不是比較好
或是兩個都不好
所以想上來問各位大大的意見

看更多先前的討論...收起先前的討論...
wrxue iT邦好手 1 級 ‧ 2020-12-07 12:31:16 檢舉
請先定義「被截取」一詞? 是要防 MITM 攻擊還是 防止使用者自己用proxy篡改或者其他意思?
淺水員 iT邦大師 6 級 ‧ 2020-12-07 12:34:59 檢舉
這個有先防嗎?
https://zh.wikipedia.org/wiki/跨站请求伪造
st474ddr iT邦新手 2 級 ‧ 2020-12-07 13:12:53 檢舉
@wrxue大
其實因為最近我司有傳出個資外洩的風聲
但具體也不知道對方是怎麼拿到的
只知道客人接到詐騙電話
主管也只有知道這些

@淺水員 大大
XSS和CSRF都有防範了
混水摸魚 iT邦研究生 2 級 ‧ 2020-12-07 13:21:18 檢舉
你們的資料是不是有介接第三方,或是內部資料文件外流,有時候不是在傳輸的過程中外洩的哦…
wrxue iT邦好手 1 級 ‧ 2020-12-07 13:25:53 檢舉
通常用HTTPS + HSTS就不用擔心除使用者外的第三人監聽或截取,確定有HTTPS +HSTS後,再找找看有沒有其他漏洞,沒辦法的話就請滲透測試團隊,這樣三兩句是找不到原因的
st474ddr iT邦新手 2 級 ‧ 2020-12-07 13:42:15 檢舉
@混水摸魚 大大
的確是發生在跟第三方合作的過程中出現的問題
我們之間有互相call對方的API
但對方說是我們這邊洩漏出去的(他們有做假測資)
所以現在我司就開始都要全面戒備這些問題
但其實之前大家都沒有處理過這方面

@wrxue 大大
感謝您的回覆
HSTS+HTTPS目前都有
我也覺得應該很難找問題
只是想問問看傳表單方法有沒有安全性的差異哈哈
wrxue iT邦好手 1 級 ‧ 2020-12-07 13:55:13 檢舉
A.php --POST--> (B.php)
A.php --POST--> (Ajax.php --轉址--> B.php?加密(XXX))
以上兩個情況對攻擊者來說都是下面這樣
A.php --POST--> (黑盒子)
要說有甚麼差異?我覺得沒差,就算轉址100次、加密100次,脆弱的網站還是一樣脆弱。必須先找出有甚麼地方可能漏洞。
對方說是你們的問題,就必須請對方提供證據,一方面是釐清責任,一方面也可以提供你們修改的方向,並不是說對方有做甚麼測試且都通過,就絕對不會是他們的問題。
淺水員 iT邦大師 6 級 ‧ 2020-12-07 15:08:00 檢舉
不知道是個案還是很多客戶都有這樣的狀況?
有時候其實是使用者自己的電腦有問題。
st474ddr iT邦新手 2 級 ‧ 2020-12-07 16:00:27 檢舉
@wrxue 大大
他們給出的證據是這樣的
顧客資料是從他們那邊登錄
所以他們拿到第一手資料
然後他們塞了幾筆假資料(都他們員工)
假設姓名 電話(用兩筆舉例)
A 0912345678
B 0987654321
然後我們用API呼叫 抓取他們丟過來的資料
他們會把這兩筆資料電話對調
也就是
A 0987654321
B 0912345678
而A員工接到詐騙問說請問你是B嗎
用此實驗來說是我們這邊外洩的
我也不知道合不合理 分享來給大大

@淺水員 大大
目前所知大概不到10件
算佔比很小
mytiny iT邦超人 1 級 ‧ 2020-12-08 11:26:36 檢舉
其實樓主跟貴主管思考的方向可以朝網路資安規劃
基礎網路架構安全了,會大大降低資安風險性
正如raytracy大所言,漏洞風險未必在程式
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

21
Ray
iT邦大神 1 級 ‧ 2020-12-07 15:52:20
最佳解答

很抱歉我無法回答樓主的問題....
因為這個問題無論怎麼解, 都無法保證解掉公司面臨的最大問題...

小弟曾幫電商客戶處理過四~五件資料外洩事件, 也曾幫客戶在商業司的行政檢查過程中, 與主辦會議的資策會資安所, 和刑事局鑑識課, 共同協助鑑識入侵證據, 並提供客戶事件分析和解決方案....

台灣近五年最常見的電商機敏資料外洩, 通常是:

  1. 被植入 Webshell, 遙控 dump DB 後, 整包傳到外面去
  2. 後台作業電腦被植入木馬, 側錄操作畫面後傳出去
  3. 後台作業電腦被植入木馬, 側錄到下載檔案後傳出去
  4. 合作廠商安全性不足, 資料傳過去之後外洩 (通常是物流)
  5. 網頁前端 SQL injection 直接 dump DB 出來
  6. 後台管理者帳密被釣魚信盜走, 合法登入主機或後台取資料
  7. 內部員工勾結, 盜資料賣錢

會集中在上面幾種, 是因為這些手法的效率最高, 一次攻擊幾乎可以取得 DB 裡面的所有資料, 不需要反覆長時間的來回刺探, 所以暴露時間短, 入侵被逮到的風險極小.....

在我們看過的案例中, 都上了 HTTPS 還被竊聽到資訊的, 幾乎沒有...

試想, 就算被 MITM 好了, 他能聽多久? 被洩的範圍有多大?
他要從哪裡聽, 才能聽到全部的資料範圍?
他要把竊聽程式塞到哪一個端點才能聽到?
他塞成功的機率有多高? 塞的過程不被發現的機率有多低?
過去有沒有案例證明被 MITM 工具塞成功過?
如果他有能力把程式塞進那個地方, 為何不用提權指令, 做更快速有效的短時間大量資料抽取, 卻要冒著被掃毒發現的風險, 長時間蹲點慢慢竊聽?

你們現在最大的風險, 不是資料外洩, 而是不知道資料從哪裡外洩?
認清楚風險之後, 才能對症下藥:

資料外洩+知道外洩點, 對策: 補強外洩點
資料外洩+不知道外洩點, 對策: 先找出外洩點/補強稽核工具

沒有找到外洩點, 盲目的猜測去補, 充其量只是補到一些小洞, 你仍沒有把握, 可以保證下一次不再發生....這次運氣好, 剛好讓你補到了; 如果運氣不好呢? 下次再來你還想得出該補哪裡嗎?

如果外洩點是在後台作業的電腦, 你拼命補網站程式有甚麼用?
如果外洩點是因為員工監守自盜, 你拼命補網站程式有甚麼用?

資安有三大樣態需要被檢討: 1.人員, 2.流程, 3.科技
你們只拼命檢討科技, 結果卻沒發現洞都出在前面兩個?
電商平台有四個外洩場域, 結果你們都只檢討一個場域?

找外洩點: 寫程式的人自己來找, 一定有盲點 (除非公司內部自己養了紅隊-Red Team), 你只有兩種方法可以避開盲點:

  1. 技術比你們還強大的人來做架構 Review 和 Code Review
  2. 技術比你們還強大的人來做滲透測試 (PT)

以上兩者費用都不少, 台灣業者至少 NT$30~100萬左右. 滲透請不要只找便宜的, 那種只用自動化工具掃一掃就出報告給你的不能叫滲透, 只能叫弱掃; 滲透至少要有 CEH 執照認證的人來操作, 而且最好是打過 CTF Pwn2Own 比賽, 或拿過國際知名公司漏洞賞金 (例如: FAANG 的 Bug Bounty Program) 的人....

(最低限度, 也要能在 HITCON ZeroDay 網站上留名的...)

滲透也有等級的差別, 你們必須要求他做到:

  • 取得 PII 資料, 或
  • 取得橫向移動權限

才會有真正的查漏效果...

我有客戶信誓旦旦, 在事前的會議上, 講述她如何如何加密資料, 如何鎖 API, 如何防範 Injection..等等, 狂言沒有人可以穿透他的系統 (顯然他自己先拿工具掃過才敢這樣嗆)....

結果我們送滲透, 不到兩星期查出 7 個漏洞, 其中 1 個可以用來把價格改成 $0 元後結帳, 另外一個可以讓我們繞過身分驗證, 不用密碼就登入後台....(發布報告的會議上, 所有部門的 RD 主管都是嘴巴張得快掉下來, 不相信自己的系統如此脆弱...)

此事證明: 沒有人可以自己評斷自己, 就算你是真的拿冠軍, 那個冠軍盃也該由第三方公證的評斷之後再頒給你, 而不是由你宣稱自己是冠軍...

部署稽核工具: 基本的稽核工具都要預先佈齊, 事後再佈已經抓不到嫌犯了, 現在有能力入侵的都很聰明, 懂得抹除數位足跡, 讓你不知道它的存在, 所以跡證留在本機內一下就消失了; 但是跡證對漏洞的追查很重要, 不只是了解對方從哪裡突破進來, 還能用來了解他所使用的手法, 進而反制.....而且不是只有機房, 辦公室內網也需要:

  • 集中式 Log Server
  • Host based IDS
  • Network based IDS
  • 網路行為分析工具
  • 網路活動側錄工具
  • OS 弱點監測告警
  • Root Kit 監測
  • 異常行為告警工具
  • 檔案異動告警工具
  • 情資收集評估工具

這部分有很多開源免費工具, 但是你們要有足夠的專業知識去設定, 和足夠的人力去操作他 (問問公司裡面, 誰可以每天負責看 100GB 的 Log?); 我見過有人架好知名的 IDS 系統, 卻沒有匯入 Rule 和 Pattern, 每天在空轉自己不知道, 還抱怨說甚麼都攔不到...

例如: 在我維運的系統內, 只要有人用最高權限登入, 系統馬上會發一封 Email 通知我 (也可把 Email 轉成即時訊息), 且所有人登入之後, 所下的指令, 都會被傳送到 Log Server 集中封存等待稽核, 每一個指令輸出的畫面, 會有影片錄影存檔. 如果他登入後下了敏感指令, 系統會立刻封鎖他的 IP...這些功能, 通常都不是系統內建的, 需要有專業的人, 根據公司的稽核需求, 自行開發出: 符合公司情境, 又不會干擾正常作業的監視和告警機制....

如果要: 不花大錢+不知道外洩點+蒙著眼做的前提下來防守, 確實也有一些快速解, 可以防止八到九成的外洩事件, 但牽動的是: 人員+流程, 檢視過這兩者沒有問題之後, 再去部署科技的方法來預防.....

舉些防禦縱深的例子來讓大家思考看看:

  • 你們家的用戶前台, 和管理後台, 都在同一台主機上嗎?
  • 你們家的網站和DB, 都在同一台主機上嗎?
  • 你們家每一項機敏資料, 只用一個欄位就能儲存嗎?
  • 你們的 DB Query 指令, 都有即時過濾攔阻, 或事後稽核嗎?
  • 你們有紀錄每一位登入主機者, 他下的每條指令, 和結果嗎?
看更多先前的回應...收起先前的回應...
st474ddr iT邦新手 2 級 ‧ 2020-12-07 16:10:35 檢舉

很感謝大大那麼用心的分享自己的經驗
我看到非常多值得學習的
確實不知道外洩點是我們目前碰到的問題
導致主管都會要求我們一直不斷地加密自己的程式(主管也非資安專長)
比較像是求個心安而已
  
回答一下大大的例子
1.管理後台一台主機(有內網以及ip控管) 前台一台主機
2.DB和管理後台是同一台主機 前台基本上都是來撈後台DB的
3.有些是有些不是
4.初步都會用前端過濾 然後後端配上prepare 來做sql injection的防範 事後稽核我就不確定是什麼意思了
5.這個就沒有了

wrxue iT邦好手 1 級 ‧ 2020-12-07 17:06:55 檢舉

好文共享/images/emoticon/emoticon12.gif

好詳細,學到好多/images/emoticon/emoticon41.gif

Ray iT邦大神 1 級 ‧ 2020-12-08 14:13:46 檢舉

雖然樓主已經標示成解答,
不過我還是應該負責任的將最後那幾個故事說完:

你們家的用戶前台, 和管理後台, 都在同一台主機上嗎?

前後台分離主機, 是為了隱匿後台入口. 很多網站直接把後台放在 https://contoso.com/admin 底下, 隨便用工具去找 /admin 就可以找出來, 然後開始猛攻...

聰明一點的, 或許知道要把 /admin 改成如: /ej03xu3 這樣的亂碼, 不過, 如果你不小心在其他地方洩露這個資訊, 也有可能會被事前的情蒐給找到 (請不要輕忽 Google 的強大搜尋力)....

更進一步, 可能有人知道要用不同的域名, 例如前台用: www.contoso.com, 後台用: ej03xu3.contoso.com 讓人家很難猜; 不過, 如果你的 DNS Server 不夠強大或設定錯誤的話, 用 DNS 列舉的方式也很容易找到; 還有, 現在有 DNS History 網站專門在收集域名變化, 隨便查都有, 即使你躲在 CDN 後面也可以被挖出來....

喔對了, 你的後台入口也要申請 SSL 憑證對吧? 只要你請了 SSL, 就會出現在 crt.sh 這個網站上, 人家就知道這個域名的存在了....

所以, 雖然你可以有很多種方法, 去隱匿你的入口, 但只要人家發現他是指向跟前台同一台主機, 她其實不需要去破你的後台程式, 直接從前台攻入, 就可以奪下整台主機的控制權, 管你裡面是甚麼台, 他通通都可以得手....

但是如果你拆開來變成兩台各自獨立的主機, 他即使攻入前台, 也需要做到橫向移動才能摸到後台 (我如果做實體隔離的話, 他連後台主機都摸不到了), 而後台可以使用跟前台很不相同的防禦策略, 他用來攻進前台的技術, 不見得同樣能攻入後台; 最後, 後台入口可以有效地躲在 VPN 後面, 完全不需要暴露在網路上, 這樣他的前期情蒐就沒有用武之地....

Ray iT邦大神 1 級 ‧ 2020-12-08 14:24:21 檢舉
你們家的網站和DB, 都在同一台主機上嗎?

狀況跟前一題類似, 增加他的關卡, 只破一關還摸不到 DB, 至少需要破兩關以上...

在一般的 LAMP 架構下, 如果 DB 跟網站放在同一台主機上, 我只要能攻入網站提權, 拿到 systemctl 控制權, 接下來我只需要三個指令, 就可以在完全不知道 MySQL 帳密的前提下, 把整個 DB Dump 出來拿走...

但若 DB 放在另外一台主機上, 上面那個方法就失效, 我至少需要再做一次橫向移動, 攻入 DB 主機才有機會.

當然, 這裡會有個漏洞:
如果你的 DB 帳密是用明碼寫在 PHP 程式裡面的話, 人家攻入網站主機, 也是同樣可以透過 PHP 直接去 dump DB....

遇到這個弱點, 其實可以透過 SQL Proxy 來防止人家大量抽取 DB, 此外, DB 欄位分離或做成 write only, 也可以防止 PII 資料遺失...

Ray iT邦大神 1 級 ‧ 2020-12-08 14:55:04 檢舉
你們家每一項機敏資料, 只用一個欄位就能儲存嗎?

例如:
電話就存在 Phone 這個欄位, 身分證就存在 id 這個欄位...

這樣做當然寫程式很方便啦, 一個 select 就拿到全部的資訊; 但駭客也同樣的便利啊, 他也是一個 select 就拿到全部資訊....

大家可以去看一下 PCHOME24 的會員中心, 當你要改個人資料時, 他會顯示部分資訊, 部分用 **** 去遮蔽.....

請不要小看這個動作, 他可不是先在後端 select 出全部的資訊, 然後丟到前端的時候, 再用 CSS 去幫你加上 **** 號喔!! 他是在: 後端程式要 select 這些欄位的時候, 就只能得到這些片段的資料 ...

是的, 他的網站後端程式, 即便下的是 select * from * , 也只能拿到部分的欄位內容, 拿不到全部完整的資訊!!

為什麼?
因為她把欄位資料拆成幾個不同的資料庫存放.

當用戶要變更資料時, 新資料從前端往後端送, 網站後端並不是直接去 update/insert 欄位, 而是將這個更新需求, 送給某個中介的 API 伺服器. 而這個伺服器只能寫入, 不能讀取欄位.

接下來, API 伺服器開始拆解機敏欄位, 把它分散成幾組. 例如: 電話號碼 0912345678, 拆成 0_1_3_5_7_, 和 _9_2_4_6_8 兩組, 分別 update 到兩台不同的 DB 主機去. 而前端網站, 只能讀取其中一台 DB 主機的內容, 另外一台 DB 則完全讀不到.

所以, 當網站撈取機敏資訊時, 他就真的只能撈到一部分的資訊, 而不是以前那種: 先撈出完整資料, 再來遮蓋的作法. 這個方法的好處, 是當網站前台被攻破時, 即使她知道 DB 帳密, 也無法撈走全部的資訊.

那後台客服要查怎麼辦?
還記得前面要求前後台分離主機嗎? 此時我們就可以將全部的 DB 主機, 都開放給後台主機使用, 所以後台可以撈到全部的資訊, 不會有遺漏; 但也不用擔心會被前台撈走.

Ray iT邦大神 1 級 ‧ 2020-12-08 15:05:40 檢舉
你們的 DB Query 指令, 都有即時過濾攔阻, 或事後稽核嗎?

過濾的作法應該很多人知道; 攔阻的話, 可以用 Proxy SQL 或者 SQL Firewall 來攔掉不合理的大規模 select 指令, 阻止短時間內被 dump 全部的 DB....

但這樣還不夠.
永遠要認清: 能進得來的黑客, 腦袋一定比你聰明!!
你想得到的方法, 它們也想得到.

如果你會用 Proxy SQL 去攔不合理的 Query, 黑客也會在它們的實驗室裡, 建立類似的環境, 然後逐一測試, 看看哪一種 query 可以穿透你的攔阻.....慢慢組合出可以繞過你的攔阻, 卻又能拿到資料的方法....

由於是在它們家自己的實驗室裡做的, 所以可以花很多時間去測試, 不會觸動你的警報系統. 先前有黑客專門針對使用某牌防毒的企業, 進行攻擊, 就是它們已經在自家實驗室研發出, 可以繞過該防毒軟體的方法, 所以只選擇這個品牌來攻擊....

如果被他成功繞過去了呢?
我們就只剩下稽核一個手段, 可以用來記錄他的足跡了. 前面說過, 即使這次戰役我們打敗, 也必須要留下他的跡證, 才能從中學習到他的手法, 做為下一次的預防措施.

所以, 不論 query 是否合理合法? 每一條進入 DB 的 query, 都必須記錄並封存, 必要時, 可以定期用 AI 工具去分析這些 query, 看看是否有異常之處? 萬一發生資安事件, 我們可以反推時間軸, 去找出他可能使用的 query 語法, 知道漏洞在何處...

Ray iT邦大神 1 級 ‧ 2020-12-08 15:08:31 檢舉
你們有紀錄每一位登入主機者, 他下的每條指令, 和結果嗎?

同樣的, 這也是稽核的需求.
如果足跡都被他抹除掉了, 我們就沒有資料可以得知, 他是用了甚麼指令或方法, 來繞過我們的防禦系統? 唯有記錄下他的指令, 同時也記錄到輸出的畫面, 我們才能得知當時發生甚麼事? 以後要如何預防?

這點也可做為內部監守自盜的有力證據, 萬一發生內賊問題, 他很可能有高度的能力, 可以抹除各種證據; 此時具有抗刪除能力的錄影機制, 就可以保存足夠的證據來提告...

st474ddr iT邦新手 2 級 ‧ 2020-12-08 16:37:03 檢舉

對大大的用心至上12萬分的謝意
幾個問題當中沒想到還有那麼多該考慮的地方
看了這些真的是受益良多

感謝Ray大大的長文!受益良多!!

4

表單發送安全性的部份,大約有以下幾種方式

1.基本首推csrf的機制:

可以在表單先生成好對應的安全碼。現在一些框架本身都已經有支援。
這無法防止看到資料。但可以阻擋資料被隨意發送進去。
借此達到不被修改資料的情況。
csrf的生成方式非常多種,其一是隨機碼生成。這種的比較沒意義。
另一種是對應資料生成。其是在生成表單頁的情況下,依據表單的固定參數來生成csrf。
這一種會比較安全點。不過重要的東西還是防不了就是了。
一般來說還會搭配一下域名認証請求。

2.加密方式處理(雙發送機制):

一般這種大多會分成二次發送。
先將資料發送一個驗証的控制。再將其加密出來後。用其加密碼做正式的請發送。
這在設計起來會比較麻煩。且也容易超主機效能。
也非常看開發人員的安全技術。如果在第一層的規劃沒規劃好。
那將其加密起來的東西也不會有很大的安全意義存在。
但好處是可以將資料先做驗証處理。可以連同配第一種的方式來一起處理。
這樣可以做到資料庫的安全。畢竟你會先做好過濾。才會拿其資料放入資料庫內。
會在安全性上大出許多。

其它安全搭配的機制

1.欄位類型宣告定義:

確定好該控制需要哪些欄位key,並定義其類似是字串還是數字。
這樣可以防止沒必要的值被拿來攻擊處理。或是資料修改處理。

2.ip或是域名的白名單限制:

這個並非是必要的,但可以用在非常重要的請求中做該限制。

st474ddr iT邦新手 2 級 ‧ 2020-12-07 13:50:38 檢舉

感謝大大如此用心地回覆

這樣看起來我那兩種方法對安全性反而沒什麼差別
而是要針對其他部分的問題去處理

除了雙發送機制以外大大其他提到的都有做對應的處理
白名單因為官網的關係不能限制
雙發送機制看起來是在過濾使用者輸入的資料
本身我是用prepare做處理的 不知道是不是足夠

其實怎麼樣都好。
這其實就像是多道鎖的意思一樣。

只是增加麻煩性跟複雜度。
多一層檢查就是多一道安全。
(當然,這得看開發人員的功力而定,並不是絕對性)

我一般只會在非常重要的地方才會去做這些。
而一般單純的東西。就只會用其基本的請求就行了。
這沒有絕對性說什麼比較好,什麼比較不好。

總之,你認為這樣足夠了。你就得替未來擔起這個責任。
但就算照你的主管做了。
你也沒辦法要求主管來擔這個責任。還是你得擔。

但不同的是,你照主管的話做出事了。
不會太過責怪你(可能啦,很難說,但至少有可能)
不造主管的做,出事了。你就一定會罵到狗血淋頭。

看自已的決定吧。

st474ddr iT邦新手 2 級 ‧ 2020-12-07 16:01:33 檢舉

說的也是
主要就是這個責任問題
感謝大大的提點

我要發表回答

立即登入回答