Security HubとDeep Securityを連携してみた #reinvent

re:Invent2018で発表された新サービスSecurity HubとDeepSecurityを連携してみました。現時点ではハマりどころがあるのは注意ですが、利用できるようになると問題があるインスタンスに対して統合的に管理ができて良いです。
2018.12.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

re:Intent2018で発表された新しいセキュリティサービスのSecurity HubをTrend MicroのDeep Securityと連携してみました。

Security Hubについては下記をご参照ください。

[速報]セキュリティ情報を一括で管理できるAWS Security Hubが発表されたので使ってみました! #reinvent

Security Hubのドキュメントは下記にあります。

What Is AWS Security Hub? - AWS Security Hub

AWS Security Hub | Amazon Web Services (AWS)

Deep Security連携概要

Security Hubは様々なパートナープロダクトと連携することが可能です。連携可能なパートナーリストはこちら

Deep Security側の設定方法やLambdaのコードがまとまったGithubはこちら

仕組みとしては下記のようにDeep Securityで検知した内容をSNSで通知し、Lambdaを介してSecurity HubにFindingsが入る形です。

設定

2018/12/05時点ではGithubにあるコードだけでは正常に動作させることができず、一部コードを修正しました。その部分については最後の方で触れます。

まずはSecurity HubのSettings -> ProvidersからDeep SecurityをSubscribeします。

次にLambdaを用意します。

現状ではGithubにかかれているようにCloudFormationでLambdaをデプロイできる仕組みが無いので、こちらのソースコードを手動でデプロイします。

ランタイムはPython3系で、アタッチするIAM RoleにSecurity Hubのsecurityhub:BatchImportFindingsを当てます。

続いてSNS Topicを作成して、先ほど作成したLambdaをサブスクリプションとして登録します。

そしてSNS Topicを実行するためのIAM UserをDeep Securityのヘルプページを参考に作成します。

Deep Security側では、AWSアカウント連携しておく必要があります。

これで準備完了です。

検知してみた

Deep Securityで監視しているEC2でeicarをダウンロードしてみます。

無事検知されました。

Security Hubでこの情報を扱うことができるメリットとしては、EC2のインスタンスIDを適切に収集してくれているため、他のFindingsと合わせてそのEC2が異常かどうか判断することが可能であるところだと思います。

上記のようなマルウェアであれば露骨ですが、IDS/IPSや変更監視など判断に迷う内容の場合、GuardDutyやInspector、さらに他のサードパーティ製品の情報と合わせてそのインスタンスが正常であるかどうかを判断することが可能です。

また、判断したあとのアクションもカスタムアクションで実行できるので、業務の効率化が捗りそうです。

まとめ

Security HubとDeep Securityを連携してみました。

連携のための設定はまだこれからというところもありますが、サードパーティとの連携はメリットがあるので積極的に活用していきたいですね。

現状の不具合への対処方法

最新版boto3の利用

現状のLambdaのboto3はこちらに書かれています。検証時点ではSDK for Python (Boto3) – 3-1.7.74 botocore-1.10.74となっていてsecurityhubに対応していませんでした。

検証時点では下記を参考にzipでアップロードしました。

[Lambda] 最新版のSDK(Boto3)をLambda関数で利用してみた

不足要素への対応

eicarのイベントの場合HostAssetValue要素が連携されず、ここでエラーになりました。下記のように修正しました。

'trend-micro:HostAssetValue': str(deep_security_event['HostAssetValue']) if 'HostAssetValue' in deep_security_event else 'None',

assume_roleのスキップ

おそらくマルチアカウント連携の際の権限の兼ね合いで、Github上ではLambda用のroleとSecurity HubへのImport用roleを分けていましたが、うまくassumeすることができなかったため、Lambda用のroleにSecurity Hubの権限を付与し、こちらの278-288をコメントアウトしました。