iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
Security

從以卵擊石到堅若磐石之 Web API 安全性全攻略系列 第 28

Day28-保護鯨魚人人有責(三)

小結

前兩天講了幾個比較重要的 Dockerfile best practice 之後,今天要來說一說怎麼用工具做弱點掃描。因為對 Dockerfile/image 做弱描的工具還滿多的,這邊就介紹已經被 Docker 加進 CLI 的 Snyk,他可以把你的環境、安裝的套件丟到他們資料庫去做搜尋,看有哪些潛在的危險

掃描已知漏洞

譬如說我手邊有幾個多年前用 Node.js 寫的 express server,Dockerfile 長這樣,看到開頭的 node:9.2.0 就知道真的是多年前XD,現在都已經快要 Node 16 了(是說我第一次寫 Node.js 時還在 0.12.x,當時聽過他的人還不多,只能說時間過得真快啊)

FROM node:9.2.0

COPY index.js package.json /app/
WORKDIR /app
RUN npm install && npm cache clean --force

CMD node index.js

先用 docker build . -t app 把 image 建出來後,接著就可以下 docker scan app 對他做掃描。因為我用的是古早古早以前的 node:9.2.0,所以光 Base Image 的部分掃出來就有 1039 個漏洞,而且其中 99 是屬於 critical 等級的,嚇都嚇死

漏洞報告

除了告訴你有多少漏洞之外,他還會把每個漏洞給列出來,並且告訴你那些漏洞分別在哪些版本修掉了,有空也可以點網址進去看那些漏洞的報告,其實都不長

譬如說我們來看看下面 SNYK-UPSTREAM-NODE-72326 這個漏洞的說明,他在 Overview 裡面就有提到在 Node 9.2.0 中,如果攻擊者在 TLS handshake 期間發送一些重複或預期外的訊息,那就會導致你的 HTTPS server 直接炸掉,因此只要有心很輕易就可以讓你的服務掛掉,所以才被歸類為 critical 等級的漏洞

而且因為攻擊者也會去看這些漏洞報告,所以像這種 critical 等級的大漏洞一但被回報出來了,而你的 server 又遲遲不更新,那下一個遭殃的可能就是你

更新建議

雖然知道要更新,但我怎麼知道哪些 image 比較安全呢?這點 Snyk 也幫你做好了,就算你懶得去細看那些漏洞,也可以直接滑到最底下看他給你的建議

譬如這邊他就建議把 base image 升級到 node:16.7.0,若是不一定要 full image ,那 node:16-bullseye-slim 也是不錯的選項,因為安裝的東西更少,所以漏洞自然也更少(Debian bullseye 是今年八月剛發佈的版本,可能比較不穩定)

所以平常沒事就可以掃一下自己的 image 有沒有什麼比較大的漏洞,可以的話直接在 CI 裡面做掃描更好,這樣就能讓自己的服務維持在一個最安全的狀態

小結

今天介紹了怎麼用 Docker 的內建工具來做弱點掃描,這部分是很多人都會忽略的,而且服務跑了好幾年都好好的沒事也不會想去掃描XD。但安全性這種事等到出事就已經太晚了,所以建議還是每個月或每半年定期掃描一下,真的懶的話就丟 CI(反正掃描很快),然後定期上去看一下漏洞數有沒有增加就好了~

另外,關於今天的內容有什麼問題歡迎在下方留言,沒有的話鐵人賽終於到了最後幾天了,大家一起衝啊~


上一篇
Day27-保護鯨魚人人有責(二)
下一篇
Day29-保護鯨魚人人有責(四)
系列文
從以卵擊石到堅若磐石之 Web API 安全性全攻略30

尚未有邦友留言

立即登入留言