AWS GuardDuty 智慧威脅偵測
前言
AWS GuardDuty 是一種智慧威脅偵測服務,可持續監控是否有惡意行為,協助保護您的帳戶和工作負載。這個服務會監控是否有不尋常的 api 呼叫或是未經授權的部署活動,指出可能的帳戶危害。
AWS GuardDuty 在 AWS 環境下,持續整合威脅情報和辨識可疑的攻擊者,從 VPC Flow Logs, DNS Logs 和 CloudTrail Logs 所蒐集資料按風險等級劃分並產生通知彙整成風險清單。如果偵測到潛在的威脅,服務會將詳細的安全提醒傳送到 GuardDuty 和 CloudWatch events 再經過 SNS 傳送給使用者。
使用此服務可以讓使用者在 AWS 雲端取得更聰明、更符合成本效益的威脅偵測服務。
情境架構
在這篇範例中,你會把自己的 ip 位址加入 GuardDuty 的危險清單中,並嘗試一些會被偵測的可疑行為,讓架好的 AWS GuardDuty 進行偵測和紀錄。
步驟
一、建立 S3 Bucket 把清單存入 S3
首先建立一個 S3 Bucket,把危險清單存入,以便後續步驟可以讓 GuardDuty 可以順利找到危險清單。
-
在本機建立一個 txt 檔作為威脅清單,存放自己的 public ip。
-
將欲被偵測的 ip 貼到 txt 檔內。(若有兩個以上,則需換行,範例如下。)
X.X.175.217 X.X.12.210
-
-
進入 AWS 主控台,進入 S3,選擇 Create bucket,輸入 bucket name,然後 Create。
-
進入剛建立好的 bucket,選擇 Upload。
-
選擇建立好的 txt 檔,點選左下角 Upload。
-
點入剛上傳的 txt 檔,並 Copy path,在下一個步驟,我們將利用此路徑讓 GuardDuty 可以找到危險清單。
二、啟動 AWS GuardDuty (智慧偵測威脅)
我們將新增一個新的威脅清單並和剛剛上傳的 txt 檔做連結,讓 GuardDuty 開始偵測你的帳號是否有危險,GuardDuty 會搜集所有的疑慮製作成問題清單,並標示危險等級(詳細資訊參考補充)。
-
回到 AWS 服務選單,選擇 GuardDuty。
-
Get started,然後點選 Enable GuardDuty。
-
在左邊選單,選擇 Lists。
-
選擇 Add a threat list,把存在 S3 bucket 上的威脅清單和 GuardDuty 做連結。
-
在你的threat-list中
-
List name : 輸入
threatlist_yourname
-
Location : 貼上你剛剛複製的檔案路徑
-
Format : 選擇 Plaintext
-
勾選 I agree,點選 Add list,威脅清單建置完成。
-
-
勾選 Active 並且等待大約五分鐘。
-
若你使用 macOS,使用 ssh 連線登入你的 ec2 主機。
若你使用 Windows,使用 putty 連線 登入你的 ec2 主機。 -
等待一段時間,選擇 Findings,你會看到許多的通知如圖。
點開通知後會看到更詳細的資訊,例如是哪種危險,來自哪個清單等等。
三、開啟訂閱通知服務
我們將透過 AWS SNS 的服務,將 GuardDuty 所蒐集到的資訊,透過訂閱通知將資訊主動寄送到你的信箱。
-
在 AWS 服務選單,選擇 SNS。
-
Create Topic, 輸入你的 Topic Name 和 Display Name 皆為
SNS-FromGuardDuty
,點選 Create topic。 -
選擇你建立的 Topic 接著開啟 Actions 的選單並選擇 Subscribe to topic。
-
Protocol :選擇
Email
-
在 Endpoint 中輸入你的信箱,點選 Create Subscription
-
-
你會在你的信箱中收到驗證信,點選 Confirm Subscription。
四、建立一個 IAM Role
IAM Role 會連結 Lambda 跟 GuardDuty,讓 GuardDuty 辨別來自外部的危險是否在清單內。
-
在服務選單中,點選 IAM,左側選單選擇 Roles,點選 Create role。
-
選擇 AWS Service,在下面選單中選擇 Lambda,在右下角選擇 Next:Permission。
-
搜尋
AWSLambdaBasicExecutionRole
並選擇該許可政策。 -
點選 NEXT:Tags,點選 Next:Review,角色名稱:
GuardDuty-Finding-ToSNS-yourname
,選擇建立。 -
選擇剛剛創立好的 Role,點選 Add Inline policy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sns:Publish", "Resource": "<ARN-OF-YOUR-SNS-TOPIC>" } ] }
Note :
為你剛剛建立的 Topic ARN。 -
點選 Review policy,然後 Create
- Name: GuardDuty-Finding-ToSNS-Policy
五、Lambda Function 觸發 SNS 傳送通知
此步驟,我們會建立一個 Lambda Function,當 GuardDuty 找到疑慮時,用以觸發 AWS SNS 傳送信息到信箱當中。
-
在服務選單,選擇 Lambda。
-
左側選單中選擇 Functions,點選主頁右邊的 Create Function。
-
選擇 Author from scratch
-
Name :
GuardDuty-To-SNS-yourname
-
Run time : 選擇 python 3.6
-
Role : 選擇 Choose an existing role
-
Existing role : 選擇 GuardDuty-finding-SNS-yourname(你剛剛建立的 Role)
-
-
輸入 code
參考自:https://github.com/miztiik/Serverless-GuardDuty-Findings-to-SNS
-
在 Environment variables
- Key 值 :
SNSTopicArn
- Value :
arn:aws:iam::XXX19643XXXX:role/GuardDuty-finding-SNS
(你的 Topic ARN)
- Key 值 :
-
頁面右上角,選擇 Save。
六、GuardDuty 跟 Lambda 做連結
把剛剛建立好的 Lambda Function,利用 CloudWatch 將 GuardDuty 跟 Lambda 做連結,如此一來便可在信箱中收到你訂閱危險清單的通知。
-
在服務選單選擇 CloudWatch。
-
左邊選單選擇 Rule,點選 Create rule。
-
選擇 Event Pattern
- Service Name : 選擇 GuardDuty
- Event Type : 選擇 GuardDuty Finding
- 右邊選擇 Add Target
- Function : 選擇 GuardDuty-To-SNS-yourname
-
點選右下角 Configure details。
-
Configure rule details:
- Name :
GuardDuty-to-SNS-Rule
- State : 勾選 Enabled
- 點選 Create rule
- Name :
-
登入 email,會開始收到 ip 各種危險活動的通知。
點開信件後,可以看到更詳細的中如下圖。
補充資料
Finding Type :Threat purpose 常見的簡單舉例如下
-
UnauthorizedAccess (未授權的存取) – GuardDuty 偵測到非授權人員的可疑活動或可疑活動模式。
-
Recon (偵察) – 偵察攻擊正在進行,透過探測連接埠、監聽使用者、資料庫表格等方式來確定您 AWS 環境的漏洞。
問題清單中的嚴重等級:嚴重性的值可能落於 0.1 到 8.9 內的任何位置。
-
低:值落於 0.1 到 3.9 的範圍,侵入您的資源之前便已被封鎖的可疑或惡意活動。
-
中:值落於 4.0 到 6.9 的範圍,可疑活動(如大量流量傳回到隱藏在 Tor 網路後面的遠端主機,或者與正常觀察到的行為不同的活動)。
-
高:值落於 7.0 到 8.9 的範圍,相關資源(如EC2 執行個體或一組 IAM 使用者登入資料)遭到破解,且正用於未經授權的用途。
總結
恭喜你學會了使用 AWS GuardDuty 偵測惡意行為,你現在可以建立自己的威脅清單去觀察、測試,也學會如何使用 GaurdDuty 來結合其他服務檢測自己的帳戶安全,並且可以透過 AWS SNS 來傳送通知。
AWS GuardDuty 是一個管理服務藉由智慧威脅偵測和搜集來自不同的服務所發現的威脅資訊和反饋給使用者。現代資訊蓬勃發展,惡行攻擊的行為越來越多,資訊安全已經成為資訊產業當中相當重要的一環,因此相當推薦 GaurdDuty 作為偵測潛在威脅的工具。
參考資料
-
Amazon GuardDuty: https://aws.amazon.com/tw/guardduty/
-
Amazon GuardDuty Document: https://docs.aws.amazon.com/zh_tw/guardduty/latest/ug/what-is-guardduty.html
-
GuardDuty Finding to SNS : https://github.com/miztiik/Serverless-GuardDuty-Findings-to-SNS