早安,這是「第 55 屆全國技能競賽英雄榜暨第3屆亞洲技能競賽及第 48 屆國際技能競賽國手選拔賽青年組雲端運算職類」系列文章的第二篇,這次來分享科目二的題目和解題過程。
科目二: Secure Legends
AWS experience: AWS GameDay - Secure legends
共有四大題,考驗的是有沒有看懂既有架構與資源,並且能夠在不影響服務的情況下,修正架構中的安全性問題。
Gameday題目的命名都很ㄎㄧㄤ,後續命名都以我自己記得的名稱為主:
- CodePipeline 修正
- Auto Scaling Instance 隔離與替換版本
- Macie PII detection
- 超 級 資 安 大 雜 燴
CodePipeline 修正
這題給了一個 CodePipeline,結構如下:
中間 Build stage 中的三個 CodeBuild 都是爛的,這題目標就是把它修好。
在 config.zip 裡面有三個 CodeBuild 的 buildspec.yml 檔案,要做的事基本上只有看 error message 然後改它而已。
Code Lint
這步有點忘記,反正就是看 build log 然後看文件提供的 Github 把指令加上一個參數就好。
Git-secrets check
這步會用 git-secrets 檢查 Git commit 中是否有敏感資訊,題目中某個地方有一組 ID 會被當作敏感資訊檢查到,所以要把它加到白名單。
Grype CVE check
這步會用 Grype 檢查程式碼與 dependecies 是否有 CVE 漏洞,題目中的 flask 會因為版本過舊而報錯,需要把 requirements.txt 中的 flask 版本升級。
都改好之後重新打包 config.zip 並上傳到 S3,然後待 CodePipeline 順利執行完畢即可。
Auto Scaling Instance 隔離與替換版本
這題會給你一個 Auto Scaling Group,裡面有兩台被駭的 EC2 instance,目標是把這兩台 instance 隔離、修補漏洞並替換成新的。
找出為什麼被駭
該題沒有給程式碼,連進網頁後會看到亂碼(被駭入加密),只能直接 SSH 進機器去看 log。
透過 user data 我們可以得知網站程式碼來自 S3,拉取後放在 /website/
,裡面有個 flask server 跟他的 log 檔。
在程式碼中我們可以看到有一個 endpoint /backdoor
,可以透過它來執行任意指令,在 log 檔中也看到駭客透過 openssl 執行了 aes-256-cbc 加密指令。
修補漏洞
User data 中是從 S3 拉取程式碼,該 S3 bucket 我們沒權限動,因此只能複製一份到自己的 bucket 中並修改。
修補 /backdoor
有三種作法:
- 程式碼中直接刪除
/backdoor
endpoint (我的作法) - 用 WAF 規則封鎖
/backdoor
- ALB 的 listener 規則封鎖
/backdoor
(其他選手告知的騷操作)
隔離
一開始看到題目說 “isolate” 以為是把它 public IP 拔掉讓它不能被存取或是建 AMI 然後 stop instance,結果買 hint 後才知道是建一個空的 Security Group 並把它套用到這兩台 instance 上…
因為兩台機器在 Auto Scaling Group 裡面,套空的 Security Group 會導致 Health Check 失敗而被自動替換,所以需要先把它移出 Target Group。
替換
隔離後就可以直接在 Auto Scaling Group 中指定新的 Launch Template 讓它自動開新 instance 即可。
Macie PII detection
這題給一個 S3 bucket,你看不到內容,需要透過 Macie 來掃描是否有 PII 資訊。
在 Macie 中建立一個新的 PII 掃描任務,指定剛剛的 S3 bucket,並選擇掃描除了 Financial information 以外的 PII 資訊(題目要求)。
掃描完成後會有一個報告,裡面會列出所有 PII 資訊的檔案與位置。
還有一題是必須自訂 data identifier 來偵測某個特定的 ID 格式,regex 如下:
[pk]_\d{3}[A-Z]{3}e\d{8}
也是一樣建完 data identifier 後再建立一個新的 PII 掃描任務即可。
超 級 資 安 大 雜 燴
這題超雜,會用到 CloudTrail、AWS Config 跟 Lambda。
是誰改了 S3 設定
這題要求你找出哪個 IP 改了 S3 bucket 的 encryption 設定。 在 CloudTrail 中搜尋對應的 S3 bucket 事件,並查看 source IP 即可。
是誰改了 EC2 名稱
這題要求你找出誰用 access key 改了某個 EC2 instance 的名稱,並把它的 access key deactivate。 解法同上,搜尋 CloudTrail 中對應的 EC2 instance 事件,找出是誰改的並去 IAM 把他的 access key deactivate。
Continuously key & password rotation
這題要求持續輪替 IAM 使用者的 access key 與 password,並停用 unused password,間隔時間為 90 天。
在 AWS Config 中建立一個新的 rule,選擇兩個 managed rule 並設定 90 天即可。
改 lambda 網頁密碼
這題給了一個 lambda function URL,要求你改網頁中的管理員密碼。 在 Lambda function 的程式碼中找到明文的密碼變數,把它改成其他的即可。
科目心得
好懶得寫,總之就是題目說啥就幹啥,沒有什麼特別的。
沒記錯的話最後領先快一大題的分數守住了第一名🥵。