Blog
AWS Guard Dutyをさっそく活用
はじめに
こんにちは、アドテクスタジオでセキュリティエンジニアをしている岡崎です。
先日、「AWS re:Invent」が開催されましたね。AWSの機能がどんどん増えていきますね。
*参考: https://reinvent.awsevents.com/
その中で、セキュリティ関連で大きな機能追加がされました。
「re:InventのTuesday Night Live」というセッションで、「Amazon GuardDuty」が公開されました。
*参考: https://aws.amazon.com/jp/blogs/news/amazon-guarduty-continuous-security-monitoring-threat-detection/
Amazon GuardDutyとは
Amazon GuardDuty は、VPC フローログおよび AWS CloudTrail イベントログを分析および処理する継続的なセキュリティモニタリングサービスです。GuardDuty は、セキュリティロジックと AWS の使用統計を使用して、AWS 環境内の予期しない、未承認および悪意のあるアクティビティの可能性を特定します。
参考: http://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/what-is-guardduty.html
簡単に言うと、AWS内のセキュリティ問題点をピックアップしてくれるようです。
「これは、便利!!!」と、思ったので早速、利用してみたいと思います。
と、その前に、、、料金表のチェックを忘れずに!!
[利用料金]
Amazon GuardDuty is priced along two dimensions. The dimensions are based on the quantity of AWS CloudTrail Events analyzed (per 1,000,000 events) and the volume of Amazon VPC Flow Log and DNS Log data analyzed (per GB).
イベント件数とデータ量により、費用が変わるようですね。
*30日間は無料のようです。
参考: https://aws.amazon.com/jp/guardduty/pricing/
無料期間もあるということで、早速利用してみました。
[Amazon GuardDutyの有効の仕方]
AWSマネジメントコンソールにログインし、「セキュリティ、 アイデンティティ、 コンプライアンス 」>「GuardDuty」を選択します。
あとは、「GuardDutyの有効化」をクリックするだけです。
*「GuardDutyの有効化」しますと、「AWSServiceRoleForAmazonGuardDuty」というロールが自動で作成されます。
「AWSServiceRoleForAmazonGuardDuty」にアタッチされたポリシー
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages" ], "Resource": "*" } ] } |
有効にし、数分すると、、、早速、予め仕込んでおいたEC2の問題点が表示されました。
1 2 3 4 5 |
* 例: Unprotected port on EC2 instance i-0xxxxxx is being probed. Unprotected port on EC2 instance i-0yyyyyy is being probed. Unprotected port on EC2 instance i-0zzzzzz is being probed. Unprotected port on EC2 instance i-0aaaaaa is being probed. |
「ポート22がインターネットに公開されている」と指摘を受けました。
結果を活用
結果は、AWS CLIでも取得できるので、JSON形式で取得したデータを分析・加工して表示が簡単に行なえます。
結果取得のために必要なコマンドをいくつか紹介します。
1,AWSアクセスキーを発行し、「AmazonGuardDutyReadOnlyAccess 」を付与します。
「AmazonGuardDutyReadOnlyAccess 」のポリシー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAllUsersToViewAndManageThisGroup", "Effect": "Allow", "Action": [ "guardduty:GetDetector", "guardduty:ListDetectors", "guardduty:GetIPSet", "guardduty:ListIPSets", "guardduty:GetThreatIntelSet", "guardduty:ListThreatIntelSets", "guardduty:GetFindings", "guardduty:GetFindingsStatistics", "guardduty:ListFindings", "guardduty:GetMembers", "guardduty:ListMembers", "guardduty:GetMasterAccount", "guardduty:ListInvitations", "guardduty:GetInvitationsCount" ], "Resource": "*" } ] } |
2,「aws guardduty」コマンドを利用するためにawscliのアップデート
1 2 3 4 |
pip install awscli --upgrade --user aws --version aws-cli/1.14.2 Python/2.7.10 Darwin/17.2.0 botocore/1.8.6 |
3,「aws guardduty」の確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
aws guardduty help (省略) AVAILABLE COMMANDS (省略) o get-detector o get-findings o get-findings-statistics o get-invitations-count o get-ip-set o get-master-account o get-members o get-threat-intel-set o help o invite-members o list-detectors o list-findings o list-invitations o list-ip-sets o list-members o list-threat-intel-sets (省略) |
参考: http://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/guardduty_api_ref.html
4,詳細を取得する
[aws guardduty list-detectors]
Detector IDを取得します。
1 2 3 4 5 6 7 |
aws --profile projectA guardduty list-detectors { "DetectorIds": [ "deb0012345678901234567890" ] } |
[aws guardduty list-findings]
上記のDetector IDを利用し、Finding IDを取得します。
*Finding IDが「GuardDuty」の結果で表示された項目になります。
1 2 3 4 5 6 7 8 9 10 |
aws --profile projectA guardduty list-findings --detector-id deb0012345678901234567890 { "FindingIds": [ "11111111111111111111111111111111", "22222222222222222222222222222222", "33333333333333333333333333333333", "44444444444444444444444444444444" ] } |
[aws guardduty get-findings]
Findingの詳細を取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
aws --profile projectA guardduty get-findings --detector-id deb0012345678901234567890 --finding-id 11111111111111111111111111111 { "Findings": [ { "Resource": { "ResourceType": "Instance", "InstanceDetails": { "ProductCodes": [], "AvailabilityZone": "ap-northeast-1a", "Tags": [ { (省略) }, { (省略) } ], "InstanceId": "i-bbbb", "InstanceState": "running", "ImageId": "ami-bbbb", "LaunchTime": 17000, "InstanceType": "m4.xlarge", "NetworkInterfaces": [ { "VpcId": "vpc-1111", "PrivateIpAddresses": [ { "PrivateDnsName": "ip-xxxxxx.ap-northeast-1.compute.internal", "PrivateIpAddress": "x.x.x.x" } ], "PublicDnsName": "ec2-xxxx.ap-northeast-1.compute.amazonaws.com", "PublicIp": "y.y.y.y", "PrivateDnsName": "ip-yyyy.ap-northeast-1.compute.internal", "SecurityGroups": [ { (省略) }, { (省略) } ], "Ipv6Addresses": [], "SubnetId": "subnet-eaaa", "PrivateIpAddress": "c.c.c.c" } ] } }, "Description": "EC2 instance has an unprotected port which is being probed by a known malicious host.", "Service": { "Count": 10, "Archived": false, "ServiceName": "guardduty", "EventFirstSeen": "2017-12-04T02:21:31Z", "ResourceRole": "TARGET", "EventLastSeen": "2017-12-04T03:53:29Z", "DetectorId": "deb0012345678901234567890", "Action": { "ActionType": "PORT_PROBE" } }, "Title": "Unprotected port on EC2 instance i-xxxxxx is being probed.", "Type": "Recon:EC2/PortProbeUnprotectedPort", "Region": "ap-northeast-1", "Partition": "aws", "Arn": "arn:aws:guardduty:ap-northeast-1:12345:detector/deb0012345678901234567890/finding/111111111111111111111111", "UpdatedAt": "2017-12-04T04:03:02.890Z", "SchemaVersion": "2.0", "Severity": 2.0, "Id": "c1111111111111111", "CreatedAt": "2017-12-04T02:33:02.886Z", "AccountId": "1111111" } ] } |
[aws guardduty get-findings-statistics]
重大度の取得
1 2 3 4 5 6 7 8 9 |
aws --profile projectA guardduty get-findings-statistics --detector-id deb0012345678901234567890 --finding-statistic-type COUNT_BY_SEVERITY { "FindingStatistics": { "CountBySeverity": { "2.0": 4 } } } |
上記の場合は、「2.0(低)が4件」存在することがわかります。
おわりに
今まで、さまざまなツールを利用し、AWSのセキュリティ情報を収集してきましたが、「AWS GuardDuty」を利用することにより、さらにAWSのセキュリティ強化ができそうです。
CloudWatchとも連携できるので、今後はそちらも試していこうと思ってます。
今後もAWSの追加機能が楽しみですね。
Author