隨著雲端運算的普及,網路安全防護也面臨新的挑戰。傳統的網路邊界概念在雲端環境中逐漸模糊,需要新的安全模型和策略來應對。本文探討了雲端環境下的網路安全議題,涵蓋了虛擬私有雲(VPC)、網路位址轉譯(NAT)、IPv6、軟體定義網路(SDN)和網路功能虛擬化(NFV)等關鍵技術,並提供實務上的安全防護策略和最佳實踐建議。從傳統的防火牆和 DMZ 區域到現代的 SDN 和 NFV 技術,文章分析了不同網路控制措施在雲端環境中的應用和侷限性,強調了多層次安全防禦的重要性。文章還以一個範例網頁應用程式為例,說明如何結合 TLS 加密、負載平衡器、VPC 和資料函式庫加密等技術,構建一個安全的網路架構,並有效抵禦潛在的威脅。

滲透測試與紅藍隊演練

滲透測試通常針對特定的目標,如新的應用程式或服務,並在特定的時間執行,如生產環境佈署之前。滲透測試人員通常會先使用各種掃描工具發現潛在漏洞,然後嘗試利用這些漏洞。

重點提示

  • 弱點管理需要多個角色的協同工作,包括滲透測試人員、使用者、管理員/開發者和程式碼審查者。
  • 自動化佈署流程是弱點管理的關鍵組成部分,包括靜態程式碼掃描、軟體成分分析和動態應用程式測試。
  • 定期掃描工具(如網路漏洞掃描器、容器掃描器和 IAST/RASP 代理程式)對於持續監控和發現新漏洞至關重要。
  • 重點應放在建立良好的反饋迴圈和有用的指標上,而非僅僅安裝工具。

網路安全:雲端環境的核心防護

在傳統與雲端環境中,網路控制都是整體安全性的重要組成部分,因為它們能夠排除整個主機或網路作為進入系統的切入點。如果無法與某個元件進行通訊,那麼要破壞它就變得十分困難。有時,網路控制就像軍事基地周圍的圍欄,使攻擊者在未被偵測到的情況下難以入侵。而在其他時候,它們就像守門員,在所有其他防禦都失敗後攔阻攻擊。

與傳統IT的不同之處

儘管多年來一直有人宣稱「邊界已死」,但管理員仍然非常依賴網路邊界來進行安全防護。在某些情況下,網路安全甚至是系統管理員賴以為生的唯一安全保障。然而,這並不是一個適用於任何環境(無論是傳統還是雲端)的良好模型。

在本地佈署的環境中,邊界通常很容易定義。在最簡單的情況下,你可以在非軍事區周圍繪製一條虛線(信任區域)。然而,在雲端環境中,由於資源的動態性和分散性,定義和管理這些邊界變得更加複雜和困難。

網路控制的重要性

在現代,大多數公司無法選擇與網際網路完全斷開連線。網路對於現代應用程式來說是如此基礎,以至於要嚴格控制每一次通訊幾乎是不可能的。這意味著網路控制在很多情況下是次要的控制措施,用於幫助減輕其他問題的影響。如果所有其他方面都組態得絕對完美——也就是說,如果所有的系統都針對漏洞進行了完美的修補,所有不必要的服務都已關閉,並且所有服務都對任何使用者或其他服務進行了完美的身份驗證和授權——那麼就可以安全地沒有任何網路控制!然而,我們並不是生活在一個完美的世界裡,因此我們需要運用縱深防禦原則,在我們已經討論過的控制措施之外再增加一層網路控制。

雲端環境下的網路安全挑戰

在雲端環境中,業務對快速佈署新功能的關注度提高,這導致了對能夠跟上快速變化的基礎設施的漏洞管理流程的需求。此外,不可變基礎設施和持續交付的理念經常與雲端一起被採用,這些可以大大降低因變更而導致的中斷風險。這改變了營運風險和安全風險之間的平衡。由於應用安全修復是一種變更,而你可以更安全地進行變更,因此你可以更積極地推出安全修復,而不會冒著使系統宕機的風險。

內容解密:

此段落強調了在雲端環境中,由於業務需求和技術特點(如不可變基礎設施和持續交付),漏洞管理和變更管理的流程需要相應調整。這要求安全團隊能夠靈活應對,並採用適當的工具和流程來管理風險。

網路安全管理策略

為了有效地管理網路安全風險,需要採取多層次的方法。首先,需要了解不同型別的網路控制措施,包括防火牆、入侵檢測和防禦系統等。其次,需要根據業務需求和風險評估結果,選擇合適的網路控制措施。最後,需要持續監控和評估網路安全狀況,並根據需要調整和改進安全策略。

程式碼範例:使用防火牆規則控制網路流量

# 定義防火牆規則
def define_firewall_rule(source_ip, destination_ip, protocol, action):
    rule = {
        'source_ip': source_ip,
        'destination_ip': destination_ip,
        'protocol': protocol,
        'action': action
    }
    return rule

# 建立防火牆規則例項
rule_example = define_firewall_rule('192.168.1.1', '8.8.8.8', 'TCP', 'ALLOW')
print(rule_example)

內容解密:

此程式碼範例展示瞭如何定義一個簡單的防火牆規則。在實際應用中,防火牆規則的定義和管理會更加複雜,涉及到更多的引數和條件。此範例僅用於演示基本概念。

網路安全在雲端環境中的挑戰與對策

雲端運算環境下的網路安全模型與傳統的本地環境有顯著的不同。由於雲端環境的動態性和多樣性,傳統的網路邊界變得模糊,使得網路控制和安全防護面臨新的挑戰。

雲端環境下的網路邊界

在傳統的本地環境中,網路邊界通常由防火牆和DMZ(Demilitarized Zone)等設施來定義和保護。然而,在雲端環境中,由於資源的動態分配和全球佈署,網路邊界的定義和實施變得更加複雜。例如,使用資料函式庫即服務(Database as a Service)時,很難明確判定其是否在網路邊界之內或之外。

雲端環境下的網路安全模型

雲端環境提供了多種服務模式,包括IaaS(基礎設施即服務)、PaaS(平台即服務)、SaaS(軟體即服務)和Serverless(無伺服器架構)等。每種模式都有其特定的網路安全需求和挑戰。

IaaS環境

IaaS環境與傳統的本地環境最為接近,但仍然可以從應用層級的細分中受益。這種細分在傳統環境中往往不可行,但在雲端環境中則成為可能。

容器化環境

容器化環境(如Docker和Kubernetes)允許更細粒度的網路控制,特別是在微服務架構中。這種控制可以實作更精確的安全策略。

PaaS環境

PaaS環境(如Cloud Foundry、Elastic Beanstalk和Heroku)提供了不同程度的網路控制。有些允許元件級別的隔離,有些則不提供可組態的防火牆功能。

Serverless環境

Serverless環境(如AWS Lambda、OpenWhisk、Azure Functions和Google Cloud Functions)執行在分享環境中,可能不提供網路控制,或者只在前端提供有限的控制。

SaaS環境

SaaS環境通常提供有限的網路控制,例如僅允許透過VPN或白名單IP位址存取。許多SaaS服務不提供額外的網路控制。

白名單與黑名單

白名單是一種只允許特定實體存取的清單,而黑名單則是明確拒絕特定實體存取的清單。在網路安全中,白名單通常被視為更為安全的選擇,因為它預設拒絕所有未被明確允許的存取。

IP白名單

IP白名單是一種傳統的防火牆規則,用於指定允許存取的來源和目的IP位址及埠。然而,由於IP位址容易被偽造,因此不應僅憑IP白名單進行身份驗證或授權。TLS憑證等技術應該用於身份驗證,而IP白名單則扮演輔助角色。

網路控制的新挑戰

雲端環境中的動態資源分配和內容傳遞網路(CDN)的廣泛使用,使得IP白名單等傳統網路控制措施變得不再那麼有效。為了應對這些挑戰,需要結合多種安全控制措施,並根據具體的服務模式和應用架構進行調整。

網路安全防護策略

在雲端運算環境中,網路安全是至關重要的議題。雖然 IP 白名單(IP Whitelisting)有其限制,但仍是限制網路存取的重要工具,只要不將其作為主要防禦手段或唯一驗證方法即可。

DMZ(Demilitarized Zone)區域

DMZ 是傳統網路控制的概念,適用於許多雲端環境。它是一個位於應用程式前端的區域,用於接收不受信任的流量,例如訪客流量。通常會將較簡單、較不受信任的元件(如代理伺服器、負載平衡器或靜態內容網頁伺服器)放置在 DMZ 中,以降低被攻擊的風險。

代理伺服器(Proxies)

代理伺服器是一種接收請求、將請求轉送至其他元件並將回應傳回給原始請求者的元件。在雲端和傳統環境中,代理伺服器通常用於兩種模式:

  • 正向代理(Forward Proxies):請求者是內部元件,代理伺服器代表內部元件發出請求。
  • 反向代理(Reverse Proxies):代理伺服器代表使用者發出請求,並將請求轉送至後端伺服器。

反向代理的程式碼範例

from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.request import Request, urlopen

class ReverseProxyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 將請求轉送至後端伺服器
        req = Request('http://backend-server:8080' + self.path)
        req.add_header('Host', 'backend-server:8080')
        response = urlopen(req)
        
        # 將後端伺服器的回應傳回給客戶端
        self.send_response(response.getcode())
        for header in response.info().headers:
            self.send_header(header.split(':')[0], header.split(':')[1].strip())
        self.end_headers()
        self.wfile.write(response.read())

# 建立反向代理伺服器
server_address = ('', 80)
httpd = HTTPServer(server_address, ReverseProxyHandler)
httpd.serve_forever()

內容解密:

  • 上述 Python 程式碼範例展示了一個簡單的反向代理伺服器實作。
  • ReverseProxyHandler 類別繼承自 BaseHTTPRequestHandler,並覆寫了 do_GET 方法以處理 GET 請求。
  • do_GET 方法中,將客戶端的請求轉送至後端伺服器,並將後端伺服器的回應傳回給客戶端。
  • 這種實作方式可以隱藏後端伺服器的真實 IP 位址,並提供額外的安全層。

軟體定義網路(Software-Defined Networking, SDN)

SDN 是一種虛擬化的網路技術,用於實作虛擬網路的管理和控制。在雲端環境中,SDN 可用於實作虛擬網路的隔離和管理。

網路功能虛擬化(Network Functions Virtualization, NFV)

NFV 是一種將網路功能虛擬化的技術,允許在虛擬環境中實作網路功能,如防火牆、路由和入侵偵測系統。

覆寫網路(Overlay Networks)和封裝(Encapsulation)

覆寫網路是一種虛擬網路,建立在底層網路之上,用於實作虛擬機器之間的通訊。封裝是指將虛擬機器之間的封包封裝在另一個封包中,以便在底層網路中傳輸。

虛擬私有雲(Virtual Private Cloud, VPC)

VPC 是一種雲端服務,允許使用者建立虛擬私有網路,以實作資源的隔離和管理。VPC 可以提供更高的安全性和彈性,同時降低成本。

網路安全防護:虛擬私有雲與網路位址轉譯

在雲端運算環境中,虛擬私有雲(VPC)提供了一個隔離且安全的網路環境,能夠讓企業在雲端建構自己的私有網路。VPC允許企業控制其網路架構,包括選擇自己的IP位址範圍、設定子網路以及組態網路閘道。更重要的是,VPC提供了額外的安全層,使得企業能夠將其整個應用程式保持私有,只允許透過VPN或其他私有鏈路進行存取。

網路位址轉譯(NAT)

網路位址轉譯最初被設計用來解決IP位址短缺的問題,透過在多個部分使用相同的IP位址,並在將它們傳送到網際網路之前將其轉譯為公共路由位址。雖然IPv6最終將解決NAT的問題,但在可預見的未來,我們仍將繼續使用NAT。

NAT在雲端環境中的應用

在雲端環境中,特別是在VPC環境中,NAT被廣泛使用。私有範圍位址(定義在RFC 1918中)用於VPC內部的系統。這些位址很容易被識別,它們以「10.」、「192.168.」或「172.16.」至「172.31.」開頭。在雲端環境中,不同之處在於通常不需要手動組態防火牆中的NAT規則。在大多數情況下,可以簡單地透過入口網站或API定義規則,NAT功能將自動執行。

  • 來源NAT(SNAT,或偽裝):當封包離開VPC區域時,更改其來源位址。
  • 目的地NAT(DNAT):當來自外部的封包進入VPC區域時,更改其目的地位址,以便將其傳送到VPC內部的特定系統。

如果不對VPC內部的系統執行DNAT,那麼外部系統就無法存取內部系統。

NAT與安全性的關係

經常被重複的一句話是「NAT不是安全性」。這是100%正確的,但實際上並不相關。執行NAT本身並不提供任何安全性;你只是對路由IP封包進行了一些更改。然而,NAT的存在意味著存在一個能夠執行NAT的防火牆,該防火牆也正在白名單DNAT流量,並且組態為丟棄不符合DNAT規則的所有封包(或在本地處理它們)。提供安全性的是防火牆,而不是NAT。然而,在幾乎所有情況下,NAT的存在意味著透過白名單獲得的安全性,有些人將NAT用作翻譯加上這些防火牆功能的簡寫。

IPv6

IPv6是一種使機器定址的系統,它提供了比傳統IPv4更多的位址。從安全形度來看,IPv6具有多項改進,例如強制支援IPsec傳輸安全性、密碼學生成的位址以及更大的位址空間,使得掃描一系列位址變得更加耗時。

IPv6的實務考量

從實務角度來看,IPv6最重要的事情是確保維護IPv6白名單,如果你的系統具有IPv6位址。即使許多終端使用者不知道IPv6,攻擊者也可以使用它來繞過你的IPv4控制。

結合範例應用程式的安全措施

在本章的其餘部分,我們將根據一個簡單的雲端網頁應用程式,該應用程式從網際網路存取並使用後端資料函式庫。我們將保護該應用程式免受一名名為Molly的威脅行為者的侵害,她的主要動機是從資料函式庫中竊取我們的客戶個人資訊並在暗網上出售。

網路控制的優先順序

建議按照以下小節中列出的順序優先考慮網路控制。在實施後續控制之前,請先實施前面的控制並驗證其有效性。確保TLS和簡單的防火牆組態正確並受到監控,比擁有五個不同的網路控制但組態不良且被忽略要好得多。

如同類別比,確保在安裝二樓窗戶的欄杆之前,門已經鎖好!

圖表說明:範例應用程式的網路控制

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title 雲端環境網路安全防護策略

package "安全架構" {
    package "網路安全" {
        component [防火牆] as firewall
        component [WAF] as waf
        component [DDoS 防護] as ddos
    }

    package "身份認證" {
        component [OAuth 2.0] as oauth
        component [JWT Token] as jwt
        component [MFA] as mfa
    }

    package "資料安全" {
        component [加密傳輸 TLS] as tls
        component [資料加密] as encrypt
        component [金鑰管理] as kms
    }

    package "監控審計" {
        component [日誌收集] as log
        component [威脅偵測] as threat
        component [合規審計] as audit
    }
}

firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成

@enduml

此圖示展示了範例應用程式的網路控制,包括使用TLS加密、負載平衡器、網頁伺服器和資料函式庫,所有這些都位於VPC內。

內容解密:

  1. 圖表展示了一個範例應用程式的網路架構,使用Plantuml語法繪製。
  2. 網際網路透過TLS連線到負載平衡器,確保資料傳輸的安全性。
  3. 負載平衡器將流量分配到網頁伺服器,提高了應用程式的可擴充套件性和可用性。
  4. 網頁伺服器與資料函式庫之間的通訊也是加密的,保護了敏感資料。
  5. 整個架構位於VPC內,提供了一個隔離且安全的工作環境。

網路安全的最佳實踐

  1. 優先實施基本的安全控制:確保基本的安全措施(如TLS和簡單的防火牆規則)正確實施並受到監控。
  2. 使用VPC隔離環境:利用VPC建立隔離的網路環境,提高安全性。
  3. 正確組態NAT和防火牆規則:確保NAT和防火牆規則正確組態,以控制進出流量的安全。
  4. 維護IPv6白名單:如果使用IPv6,請確保維護IPv6白名單,以防止未經授權的存取。
  5. 持續監控和更新安全措施:隨著威脅的不斷演變,持續監控和更新安全措施是非常重要的。

透過遵循這些最佳實踐,可以顯著提高雲端應用程式的安全性,保護敏感資料免受潛在威脅。