文章列表

EP22 - 該怎麼安全地維護自己的網站?

Podcast 連結


本集內容大綱

網站簡易架構

  • 硬體 Hardware

    • 包含主機、硬碟、記憶體、網路等等
  • 作業系統 Operating System

    • 為了架設網站這種非日常家用目的電腦通常會有專用的作業系統,我們會稱這種有專門用途的電腦為伺服器
  • 資料庫 Database

    • 像一個圖書館,裡面存放了網頁上大部分的內容
  • 網頁伺服器軟體 Server

    • 管理網頁和介接資料庫的中間者
    • 類似圖書館管理員的角色,接收來自使用者的連線請求並決定要顯示什麼內容給使用者
  • 內容管理系統 CMS (Content Management System)

    • 幫助我們發布和管理網站的文章內容的系統

服務種類

  • 自行架設 On-Premise

    • 以蓋房子來說,就會像是你買了一塊空地,打地基架鋼筋灌水泥、裝潢傢俱全部都自己來
    • 網站架構中所有元素都自己來,自由度高,可以隨自己的意思設計改變
  • 基礎設施即服務 Iaas (Infrastucture as a Service)

    • 一間灌好水泥的毛胚屋,雖然不能改變房子的結構,但還是可以很自由的裝潢和隔間
    • 使用別人所提供的硬體服務,其他的部分都自己來
  • 平台即服務 PaaS (Platform as a Service)

    • 一間隔好隔間接好水電的空房,只需要負責裝潢跟傢俱就可以了
    • 使用別人提供的作業系統、伺服器和資料庫,只有軟體自己安裝設置
  • 軟體即服務 SaaS (Software as a Service)

    • 有傢俱裝潢的房子,所有東西的是準備好隨時可以使用,只需要帶上自己的私人物品
    • 所有東西都交給別人,直接使用現成的服務,自由度低但方便

如何選擇服務種類

最安全的做法:自行架設

從硬體、系統到軟體全部自己來會是最安全的情況。
這種狀況下你才可以知道所有細節是不是都有被正確且安全的設置。
如果將任何一個部分委託給其他的服務供應商,就會較難掌握他們的是如何被設定的,且設定是否正確和安全。
全部都自己來,才能夠有完全的掌控。

問題
要這麼做有一個很重要的前提,那就是你需要知道怎麼做才是安全的。
聽起來很簡單,但實際上要做到很不容易,你會需要了解硬體、作業系統、網路、網頁、軟體等等的眾多領域中的資安相關知識,才能確保所有的細節都是安全的。

較實務的做法

思考自己會的東西和有的時間,評估自己的能力範圍,把自己能力所及以外的東西交給信任的服務商負責。這就是我們在EP1中跟大家討論過的,在安全性和可用性中找到一個屬於你的平衡。

如果是時間很寶貴想要簡單容易就可以分享自己寫的文章的聽眾的話可以選擇像是MediumBlogger這樣一家你信任的平台,這樣子你就可以專心的在內容產出上。

如果是時間比較充裕且有經驗或是願意嘗試學習的聽眾,可以試試WordPress這類型自由度比較高,變化比較多的平台,這類型的網站就會有比較多需要注意和管理的東西。

使用 SaaS 這類型的服務時,雖然說你管理的東西較少,所需要維護資安的東西也較少,但這不一定代表越安全,這只是將維護資安的責任轉移到服務供應商身上而已,服務供應商也是有安全跟不安全的,因此選擇一個好的服務供應商也是非常重要的。

服務供應商的選擇

  • 官方網站所提供的資訊:一個重視資安的公司往往會有一個頁面在說明他們提供的服務包含了哪些資安相關的保護,如果連官方都沒有提供這方面的資訊的話那麼他的安全性就會存疑
  • 比較不同服務供應商的內容:和其他競爭對手比較各個服務所提供的保護措施
  • 論壇/社群上相關的資訊:看看一些使用者的經驗分享和討論
  • 調查公司的背景資料:成立多久、公司大小、以前有沒有發生過資安事件等等的事情,這些都是可以幫我們判斷一個服務供應商是不是值得信任細節

網頁上常見漏洞和攻擊手法

內容來自OWASP Top 10(開放式網頁應用程式安全專案), 在 2017 年所整理出的十大常見的網站漏洞。

失效的身份認證和權限控管

使用平台或服務時會有權限可以登入系統來管理、修改和發表內容。
而這個在登入時所做的身份認證就很重要,如果沒辦法正確的驗證身份將他人拒於門外,就會讓駭客有辦法取得你的網站控制權,對你的網站進行修改。
確保我們有沒有使用足夠安全也沒有被重複使用的密碼,使用多因素認證來增加身份認證的安全性。

我們在EP14中和大家討論過的權限控管也是很重要的,當管理不是一個人而是由一個團隊進行的時候,適當的權限控管,確保每個人都只有自己需要的權限而不是每個人都有過多或最高的權限,可以避免很多傷害和攻擊能夠造成的影響。

敏感資料外洩

要注意不要在文章和網站上暴露了太多個資或是其他敏感資料。
這些資訊都有可能成為攻擊者對我們進行社交工程的資料來源,也有可能讓駭客可以用這些資訊冒充我們的身份。
除了不要主動將敏感資訊外洩之外,也要記得透過加密來確保網站上的資訊有被保護好。除了要加密資料庫以外,也要記得加密網站所使用的連線。我們在EP19和大家介紹的HTTPS就是加密連線一個很重要的方式,大家一定要確保自己的網站有適當的憑證以及使用加密的 HTTPS 連線,來保護用戶和網站本身。
還可以把所有非加密的連線都強制轉為加密的連線,來減少資料因為沒有被加密而被駭客攔截攻擊。

適當的記錄和監控

雖然不能幫助我們防止駭客入侵我們的系統,但可以幫助我們在攻擊發生時第一時間馬上處理應對,以及日後釐清駭客入侵的原因。
我們應該要確保所有登入記錄、驗證失敗的紀錄、文章內容修改都會被記錄下來並安全的保存著。
透過觀察這些日誌我們才能夠發現是不是有駭客正在試著暴力破解或是帳密填充等等的方式攻擊我們的網站,如果真的被入侵了也才能及時發現並阻止駭客能造成的傷害。

Wordpress 上的日誌外掛 圖片來源:WP Activity Log by WP White Security

根據以往的記錄,資料外洩事件平均要花 200 天才會被發現,而其中一個很大的因素就是因為沒有適當的保存和監控日誌記錄。
我們還可以透過一些圖表將整個記錄的趨勢用一個很簡單的方式呈現,讓我們可以簡單地就發現不正常的活動。再透過 Email 通知提醒,讓我們在異狀發生時及時做出回應。

使用安全的外掛或系統

我們會藉由網頁伺服器軟體來控制哪個使用者可以讀取資料庫中的哪些資料。
如果今天伺服器軟體本身或是我們使用的一些工具有漏洞,那麼駭客就可以繞過我們設下的防線,讀取、修改資料庫中的資料。
定期的安裝更新來修補已知的漏洞很重要。同樣的道理也適用在作業系統、和內容管理系統上。

除了系統以外,主題和外掛也是需要被維護和更新的,這些外掛和工具很常會成為駭客攻擊的目標和入侵系統的管道。
站在駭客的角度思考,網路上可能有數百數千個網站在使用這些外掛,如果能找到一個漏洞,就可以透過這個漏洞去攻擊數百數千個網站,成本效益上會比花時間去找每個網站上各自有的不同的漏洞來得高許多。

WordPress 外掛 資安漏洞相關新聞:

如何判斷外掛/工具是否安全:

  • 是否有定時提供更新

    • 如果看到一個工具已經很長一段時間沒有發表更新,可能代表著作者已經沒有在維護了,這表示很有可能這個工具已經有漏洞但是沒有被修補,這種情況的話就建議大家不要使用這些工具或外掛了。
  • 論壇或社群上的相關討論,參考使用者的經驗

  • 唐鳳提供的建議,符合以下條件會較值得信任

    • 由國人參與開發
    • 由國人進行稽核
    • 開放原始碼的,國內有很大的社群在檢視它

補充 - OWASP Top 10 2017

以下為完整的開放式網頁應用程式安全專案(OWASP), 在 2017 年所整理出的十大常見的網站漏洞。

資料來源:OWASP Top Ten

  1. 隱碼攻擊 Injection 隱碼攻擊,包含 SQL, NoSQL, OS 和 LDAP 隱碼攻擊。當有不被信任的資訊被當作指令或是查詢送到解析器時。攻擊者會可以欺騙解析器來讓攻擊者在沒有被授權的前提下執行這些查詢或是指令。
  2. 失效的身份驗證 Broken Authentication. 攻擊者可以透過沒有正確設定/安裝的身份驗證管理功能,來獲取密碼、金鑰、或是配合其他其他漏洞來暫時/永久的假冒其他使用者的身份。
  3. 敏感資訊外洩 Sensitive Data Exposure. 許多網頁應用程式和 API 沒有正確的保護敏感資訊,包含金融、醫療和個人資訊。攻擊者可以透過搜集這些沒有被正確保護的敏感資訊來進行信用卡詐騙、身份冒用、或其他犯罪。保護方法包含加密儲存和傳遞中的資訊,特殊處理和瀏覽器交換的資料等等的方式。
  4. XML 外部實體攻擊 XML External Entities (XXE). 許多較舊或是沒有正確設定的 XML 處理器在處理 XML 檔案包含的外部實體連結時,會可以被用來揭露內部不公開的檔案、檔案 URI 處理器、內部共享檔案、內部阜口掃描、執行遠端代碼、以及阻斷式攻擊。
  5. 失效的權限控管 Broken Access Control. 權限控管很常沒有被正確的設定,因此導致攻擊者可以取得不該有的權限來做事或是讀取資料,包含讀取別人的帳號、瀏覽敏感資訊、修改別人的資料以及更改使用者權限。
  6. 錯誤的安全設定 Security Misconfiguration. 錯誤的安全設定是最常見的議題。這通常是因為使用了不安全的原廠設定、不完整的臨時設定、開放的雲端、錯誤設定的 HTTP 頭欄位、包含敏感資訊的錯誤訊息。所有系統不僅需要被安全的設定,也需要被及時的更新/修補漏洞,這包含作業系統,軟體框架、函式庫、和軟體程式。
  7. 跨網站指令碼 Cross-Site Scripting XSS. 當一個新的網頁中包含了不被信任資訊。這源自於網頁沒有正確的驗證/轉譯的資訊、或是一個現有的網頁在使用使用者所提供的資料更新網頁時,允許使用者新增 HTML 或 JavaScript。跨網站指令碼會讓攻擊者可以在受害者的瀏覽器中執行腳本,導致受害者的 Session 被綁架、破壞網站、或是將受害者重新導向到有害的網站。
  8. 不安全的反序列化 Insecure Deserialization. 不安全的反序列化通常會導致遠端代碼執行。即便他沒有導致遠端代碼執行,也可以被用來攻擊,包含重送攻擊、隱碼攻擊、和權限提升。
  9. 使用有已知漏洞的元件 Using Components with Known Vulnerabilities. 元件,包含函式庫、軟體框架、和其他的軟體模組,通常會有著和應用程式一樣的權限。如果一個有漏洞的元件被利用來做攻擊,該攻擊可以等至嚴重的資料所失或是導致伺服器被攻擊者接管。有已知漏洞的程式和 API 會破壞應用程式本身的防禦,導致許多種的攻擊和影響。
  10. 不夠的日誌紀錄和監控 Insufficient Logging & Monitoring. 不夠的日誌紀錄和監控,伴隨著不存在或是無效的事故管理整合,會允許攻擊對系統進行進一步的攻擊、持續潛伏在系統中、轉向更多系統、和更改/匯出/摧毀資訊。許多資料外洩事件的調查顯示通常組織會花超過 200 天才會發現資料外洩,且大多數都是由第三方組織所發現的,不是由內部的流程和監控。

發佈於 2020年10月25日

資安解壓縮網站內容除特別註記外皆以CC BY-SA 4.0方式授權
對於這個節目有什麼想法,或想要聽什麼內容都歡迎到聯絡資訊告訴我們