iT邦幫忙

2023 iThome 鐵人賽

0

Yes

  • 這個主題就相對單純,主要是針對容器鏡像做安全檢測。那之前也提過容器鏡像實際上就是一個檔案系統,裡面由檔案所組成,而這些檔案包含了作業系統套件、應用程式及套件等等。這部分的檢測只需掃描檔案系統就足夠,因此不需要將它以容器方式啟動,故算是靜態掃描的方式。

  • 而這些檔案的安全性又分為兩類,一類是已知漏洞,這部分可以參考Day1 - 甚麼是漏洞? 談談我們與漏洞的距離吧。。可以把這些漏洞想成是因為開發者不小心做出可被利用的漏洞,常見的漏洞資料庫像是 CVE (Common Vulnerabilities and Exposures) 是一個公開的漏洞資料庫,該漏洞資料庫也會關聯到受影響的產品名稱與版本。也因此假如能夠取得容器鏡像內的軟體清單與版本,並與現有 CVE 漏洞資料庫做比對就可以得知目前容器鏡像整體的安全狀況。

  • 另一類檔案的安全性則是惡意程式,可以參考Wiki - Malware 的資訊。惡意程式就是駭客事先撰寫好具有惡意的程式並塞入容器鏡像內,那因為惡意程式的部分我沒甚麼研究,所以之前有提過可以參考 Dagda 這個開源專案,裡面有提到 "Dagda uses ClamAV as antivirus engine for detecting trojans, viruses, malware & other malicious threats included within the docker images/containers."。

  • 不過幾個值得注意的觀念提醒一下 :

    1. CVE的漏洞掃描軟體是無法檢測出惡意程式的,除非那個 CVE 漏洞跟被埋入後門有關,但是很少見。例如 : NVD CVE-2022-40428
    2. 同理,檢測惡意程式的掃描軟體無法掃描出 CVE漏洞,因為它是以病毒樣本的特徵作為檢查,兩者檢查的原理根本就不同。
    3. 因為容器鏡像檔案本身也包含作業系統的套件,因此檢測出來的內容會比單純掃描應用程式的項目來的多,屆時弱點的修復處理上會比較繁雜。
  • 這邊以掃描鏡像中的已知漏洞為主,這部分又分為兩種方式。第一個是產生所謂的軟體物料清單 SBOM (Software Bill of Materials),之後再對該份清單檔案進行掃描。SBOM 的相關資料可以參考鐵人賽文章 Day 29 - 軟體物料清單,交付的格式有Software package data exchange (SPDX)、CycloneDX (CDX)。第二個方式很單純則是透過軟體直接對鏡像檔案做掃描。

  • 這邊就以 Trivy 作為掃描工具,它可以支援的對象包含 Container Image、Kubernetes,並且可以找出的弱點包含 SBOM、CVE、錯誤設定。安裝 Trivy 步驟如官網所示 :

    sudo apt-get install wget apt-transport-https gnupg lsb-release ;
    wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null ;
    echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list ;
    sudo apt-get update ;
    sudo apt-get install -y trivy ;
    
    #試著掃描一下之前建立的 image 檔案
    trivy image aeifkz/ithome_ctf:v1.0 ; 
    
  • 很快地就會發現有個問題,就是顯示出來的結果不夠人性化。這部分可以參考 Scanning Docker Images for Vulnerabilities: Using Trivy for Effective Security Analysis 裡面提到透過他們制定好的樣板去輸出掃描結果。

    # 樣板的資料在 https://github.com/aquasecurity/trivy/blob/main/contrib/html.tpl
    
    trivy image aeifkz/ithome_ctf:v1.0 --format template --template "@html.tpl" -o ithome_ctf.html ;
    
    # 試著對 Distroless Container 掃描看看
    trivy image gcr.io/distroless/python3 --format template --template "@html.tpl" -o distroless.html ;
    
  • 雖然樣板輸出的結果是比較方便觀看,但對於管理起來並不方便。那些產品是相同的可以合併在同一格,以及最高要升版到多少等等,其實還是有很多改進的空間。

    https://ithelp.ithome.com.tw/upload/images/20231230/20148308sRmsgdpzeG.jpg

  • 也可以針對容器產生 SBOM 清單,並且針對 SBOM 清單進行掃描,相關使用參考如下。

    trivy image --format cyclonedx --output ithome_ctf.json aeifkz/ithome_ctf:v1.0 ;
    
    # 透過 trivy sbom 指令對 SBOM 檔案進行掃描
    trivy sbom ithome_ctf.json --format template --template "@html.tpl" -o ithome_ctf_sbom.html ;
    
  • 因為 trivy 是針對容器鏡像內的已知漏洞做掃描,所以主要是防禦容器開放出來的服務做安全強化,所以針對前面所介紹的攻擊沒一個防得住的,因為前面的攻擊主要是針對容器啟動設定不當所導致的。

攻擊手法 鏡像掃描能否阻擋?
privileged + host pid N
--cap-add=ALL + host pid N
privileged N
(CVE-2022-0492) unshare + cgroup 特權逃逸手法 N
安裝 linux_module N
docker.sock 掛載 N
  • 但話說回來究竟鏡像安全是否重要呢? 參考 Mitre ATT&CK Containers Matrix 的 Initial Access 階段的 Exploit Public-Facing Application 可以看出開放的應用程式會是一個需要進行防禦的點,而且它又位於整個攻擊行為的初期階段,所以有辦法進行防禦的話就能夠有效地阻斷攻擊鏈。但...畢竟也只是針對已知漏洞進行防禦,所以面對 0-day 的漏洞攻擊就沒有辦法了,也因此會需要後面其他的防禦機制進行資安強化。

  • 作業13 : 假如今天資安策略是我只想要掃描容器內部跟應用程式有關的部分,那以 trivy 目前支援的方式是沒有辦法達到的。請各位利用Anchore Open Source Tools 裡面的 Syft 工具去產生一個應用程式的 SBOM 檔案,然後再透過 trivy 去進行掃描。

  • 今日總結 :

    • 本日回顧 :

      • 主要介紹針對容器鏡像透過 Trivy 進行安全檢測,跟一般應用程式的函式庫檢測差別會多掃描到容器內作業系統的套件,那這部分修與不修就相對尷尬。另外 Trivy 產生出的報告仍略嫌簡陋,不利於做修復弱點的管理,這部分就看到時候使用 harbor 能否得到改善。
    • 次日預告 :

      • 雖然 Trivy 可以協助進行容器鏡像掃描,但是在跟開發流程的整合以及弱點報告的呈現上仍然有可以改進的空間。而 Harbor 是一款開源的鏡像倉庫,其中可以整合 trivy 進行鏡像掃描。明天就會試著建立一個 Harbor 並且對拉取的鏡像進行安全掃描判斷。

上一篇
Day 39 - 作業12解答 - 驗證 /proc/pid/root 特性
下一篇
Day 40 - 作業13解答 - 透過 syft 排除特定資料夾做 Image 安全掃描
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言