iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
自我挑戰組

馬克的 Kali Linux 與資安學習小筆記系列 第 28

30-28 OWASP Docker Security ( 2 )

  • 分享至 

  • xImage
  •  

https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html

RULE #6 - Use Linux Security Module ( seccomp, AppArmor, or SELinux )

security model 是指在通常是一組 config,用來限制系統或 application 的權限和行為,以增加安全系。

然後它文章中提到幾個常見的seccompAppArmor都是個適合設定的標配。

然後這個可以在 k8s security context 中設定如下,例如我們要設 seccomp,就很簡單如下 :

...
securityContext:
  seccompProfile:
    type: RuntimeDefault

至於 seccomp 的詳細內容可以參考以下的官方資料。

https://docs.docker.com/engine/security/seccomp/

RULE #7 - Limit resources ( memory, CPU, file descriptors, processes, restarts )

最好的避免 dos ( denial of service 單一來源攻擊 ) ,就是限制資源,例如 memory、cpu、file descriptors。

RULE #8 - Set filesystem and volumes to read-only

建議將檔案系統和卷(volumes)設定為唯讀。具體的實現方法是在執行容器時使用 --read-only 選項,這樣容器的檔案系統會以唯讀模式運行。

docker run --read-only alpine sh -c 'echo "whatever" > /tmp

為什麼呢 ? 因為它限制了 container 裡的 application 對 filesystem 的寫入權限,這樣可以防止惡意程式修改檔案。

但如果有時需要暫存個檔案怎麼辦法呢 ? 那就是用—tmpfs如下 :

docker run --read-only --tmpfs /tmp alpine sh -c 'echo "whatever" > /tmp/file'

然後在 k8s security context 中也可以設定 :

kind: ...
apiVersion: ...
metadata:
  name: ...
spec:
  ...
  containers:
  - name: ...
    image: ....
    securityContext:
          ...
          readOnlyRootFilesystem: true
          ...

RULE #9 - Use static analysis tools

就是用 static analysis 來看看你的 container 有沒有弱點,然後這東東我自已是認為也很適合放到 CI 中 ?

文章提供的工具就在連結裡面,自已去試和看 ~

https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html#rule-9-use-static-analysis-tools

RULE #10 - Set the logging level to at least INFO

除非一定需要,否則絕對不要開啟 docker daemon 的 debug log,如果要,也只能 debug 完馬上關掉,不然裡面有很多的敏感資料。

Rule #11 - Lint the Dockerfile at build time

我們平常開發時,會用 eslint 來檢查程式碼,然後這裡就是建議也要用 security linter 來在 CI 時檢查 dockerfile,然後一些值得的點如下 :

  • 確保用某個 user 來執行 docker run ,不要用 root 執行,這個好像,就是 rule #2 的建議。

  • 確保 base image 版本被固定,不是用 latest 之類的,因為這樣較穩定,但還是要固定的升級。

  • 確保 os 套件版本被固定,原因同上。

  • 避免使用 add,優先使用 copy。這兩個指令都是將檔地檔案 copy 到 image 中,但 copy 在簡單性、透明性、安全性考慮下,是較好的選擇。

  • 避免在 run 指令中使用 curl bash,因為有可能會受到中間人攻擊,而且依賴外部網路,這裡建議替代方法是用 apt-get。

這裡補充一下說明 docker 中的copyadd的上面提到的簡單性、透明性、安全性的差異。

主要的差別在於 copy 只是一個單純將 local 檔案或目錄複製到 image 中,但 add 除了複製,它還支援解壓縮與 url 複製等功能。

所以這裡代表 add 因為可以使用 url 複製功能,也代表可以支援下載,就可能會發生中間人攻擊的風險。


上一篇
30-27 OWASP Docker Security ( 1 )
下一篇
30-29 OWASP GraphQL Security
系列文
馬克的 Kali Linux 與資安學習小筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言