【新サービス】機械学習を使って不正なアクセスパターンを検出、対応するAmazon MacieがLaunch。
2017/08/15 23:30 S3バケット内オブジェクトの分析が完了したので追記しました。
新緑の候, 立秋とは名ばかりの暑い日がつづいておりますが、お元気でいらっしゃいますか、せーのです。
今日は突然やってきた新サービスをご紹介します。名前は「Amazon Macie」と言います。
Amazon Macie概要
とりあえず読み方から。「アマゾン メイシー」と読みます。私は一瞬サングラス的なあの人を思い浮かべましたが違うようです。Macieは女の子の名前で「武器」「活発でスポーティで魅力的な人の代表名」という意味があります。
Amazon Macieは機械学習を使ってAWSに保存されている機密データを自動的に発見、分類、保護することにより、データ損失を防止するためのAI機能のセキュリティサービスです。人工知能を使ったサービス(AI-powered security service)となっているのですが「Amazon AI」シリーズには入っていないようです。
Amazon Macieは特定のS3バケットの中に入っているデータを自然言語処理(NLP)を使用して検出、分類し、そのデータに対してどこから、誰が、どれくらいアクセスしたのかを監視します。監視にはCloudTrailを使います。その後回帰的にアクセスパターンをDeep Learningによって分析し、不正なアクセスがあった場合は警告を発生させるよう設定できます。その警告はCloudwatch Eventsで拾えるのでLambdaにつなげば一次対応まで自動的に行うことができます。そう、Amazon Macieはセキュリティや監査を手助けするサービスなんですね。
仕組み
Amazon Macieの仕組みをざっと書くとこうなります。Macieが監視出来るのは「特定のバケット内にあるS3オブジェクト」と「特定のアカウントのCloudTrail API」です。
まずS3オブジェクトです。Macieにて特定のS3バケットを指定し、監視を開始します。ユーザは通常業務として色々なファイルをS3にアップロードします。それは何かの書類だったり、ソースコードだったり、バイナリだったりと色々です。Macieはそのファイルの中身を読み、データとしてのリスクを判別、分類していきます。
次にCloudTrail APIです。CloudTrailをONにしておくとそのアカウント内でいつ、誰が、どのファイルに対して、何の処理をしたかまで記録されます。Macieはそのアクセスパターンを分析します。規定されたリスクレベルに合わせてそれらのAPIを分類します。例えばパスワードを取得するAPI(GetPasswordData)や証明書を作成するAPI(UploadSigningCertificate)あたりはリスクレベルが高いです。
この2つを組み合わせて判断もできます。例えば普段アクセスする事が無かったユーザアカウントが大量にソースコードをダウンロードしていたりすると、Macieはそれを検知します。この前提としてMacieは「このファイルはソースコードである」という認識と「このユーザは普段このバケットにアクセスしない」という認識が学習できている、ということですね。
Macieが異常を検知すると警告を出せます。警告はCloudwatch Eventsに関連づけでき、そこからアラートを出すように設定しておけば、あとは通常のAWSリソースの監視と変わりません。メールを投げて管理者に知らせるもよし、LambdaにつなげてS3のポリシーを一時的に変えるもよし、です。
ファイルの分類タイプ
Macieは「コンテンツタイプ」「拡張子」「テーマ」「正規表現」「個人識別情報(PII)」といった切り口に加えてSVM(Support Vector Machine)によるnグラム分析が行われ、独自にファイルを分類していきます。ひとつずつ見ていきましょう。
コンテンツタイプ
ファイルのヘッダに埋め込まれている識別子によってリスクレベルを1-10に振り分けます。コンテンツタイプの追加や修正はできません。
拡張子
拡張子を確認してオブジェクト分類を行います。拡張子の追加や修正はできません。
テーマ
Macieにて予めいくつかのテーマが用意されています。「テーマ」というのはコンテンツ内にて比較的頻繁に使われている言葉のことで、つい先日Amazonのショッピングサイトにて同じ「Themes」という機能がレビューに加わっていたので、同じ機能かと思います。そのキーワードを元にファイルを検索してテーマごとに1-10のリスクレベルを設定します。テーマの追加や修正はできません。
正規表現
Macieが正規表現を用いて特定のデータパターンを検出してリスクレベルを振り分けます。正規表現の追加や修正はできません。
PII
NIST-80-122やFIPS 199などに基づいた個人識別が可能な成果物を認識します。Macieが認識できるのは
- 氏名
- 郵送先住所
- メールアドレス
- クレジットカード番号
- IPアドレス(IPv4およびIPv6)
- 運転免許証ID(米国)
- 国識別番号(米国)
- 生年月日
になります。これらをMacieはhigh / middle / lowのリスクに振り分けます。
- high
- 1つ以上のフルネームとクレジットカード番号
- 50以上の名前またはメールアドレス、他の任意の組み合わせ
- middle
- 5つ以上の名前またはメールアドレス、他の任意の組み合わせ
- 低い
- 1つ以上5つ未満の名前またはメールアドレス、他の任意の組み合わせ
- 名前やメールアドレス以外の情報が入っている
SVM分類
ファイルのメタデータ(ドキュメント長やエンコーディング、ヘッダなど)とその中身ををnグラム分析した結果を元にファイルを分類します。SVMが認識できるコンテンツは
- 電子書籍
- 暗号化キー
- 財務
- SEC フォーム
- JSON
- AWS CloudTrailログ
- Jupyter notebooks
- アプリケーションログ
- Apache
- AWS S3 サーバログ
- Linux syslog
- DB
- MongoDB backup
- MySQLbackup
- MySQL script
- ソースコード
- F#
- VimL
- ActionScript
- Assembly
- Bash
- Batchfile
- C
- Clojure
- Cobol
- CoffeeScript
- CUDA
- Erlang
- Fortran
- Go
- Haskell
- Java
- JavaScript
- LISP
- Lua
- Matlab
- ObjectiveC
- Perl
- PHP
- PowerShell
- Processing
- Python
- R
- Ruby
- Scala
- Swift
- VHDL
- Web
- CSS
- HTML
- XML
となります。
これらの分類を元に最終的にMacieはリスクレベルを判断し、一番高いリスクレベルが設定されます。これらのメタデータはデフォルト1ヶ月保存され、最大12ヶ月まで延長できます。このメタデータに対してクエリを実行でき、カスタムでアラートを作成することができます。
価格
Macieは「コンテンツの分類」「CloudTrailイベント処理」「データ保持」に対して課金されます。
コンテンツの分類
- 最初の1GB: 無料
- それ以降: $5/GB
CloudTrailイベント処理
- 最初の100,000件: 無料
- それ以降: $4/1,000,000件
データ保持
- 最初の30日間: 無料
- それ以降: $0.05/処理GB
対象リージョン
2017年8月現在、Macieが使えるリージョンはバージニアとオレゴンです。
対象言語
Macieが分析できる言語は現在は英語のみとなっています。
対象データソース
現在Maiceが監視できるデータソースはS3バケットとCloudTrailのみとなります。将来的にはこれに加えてEC2, DynamoDB, RDS, EFS, Glueが監視できるようになるそうです。
やってみる
それではとりあえず動かしてみましょう。マネージメントコンソールからAmazon Macieを開きます。
何も考えずにとりあえず「Get Start」を押してみます。
リージョン、必要な権限、パーミッションが設定されることへの許可チェックが入っています。何も設定していないのでIAM RoleもCloudTrailのONも入っていません。それぞれ作ってあげればいいのですが、AWSにてこれらの設定を有効化するCloudFormationテンプレートが提供されているので、そちらを使いましょう。
テンプレートを流したことをCloudFormationで確認します。
Macieに戻ってみると先程Xだったところがパスされています。あとはパーミッションにチェックをいれて「ENABLE MACIE」ボタンを押せばセットアップは完了です。
しばらく待ちます。
待っている間に分析用にS3バケットを作っておきます。適当にクラメソのGithubからRubyとGoのソースコードをアップロードしておきます。
分析結果をテストするためにネットからサービス使用契約書のサンプルと名簿のサンプルを拾ってきて入れてみます。
Macieに戻ると、コンソール画面が出てきました。作ったS3バケットを追加していきましょう。
[INTEGRATIONS]を開きます。ACCOUNTSとSERVICESというナビがみえますね。ACCOUNTSは自アカウント以外に監視したいアカウントがある場合に使います。
上はS3のメタデータを保存する期間を選択します。デフォルトは1ヶ月です。
SERVICESに移ってみましょう。まずはアカウントを選択します。メンバーアカウントを入れていないので自分のアカウントだけでてきます。
S3を選んで
監視したいバケットを選びます。
最初の分析には数時間かかるようです。半日〜1日放置しておけば気がついたら分析が完了しています。 DASHBOARDを選んでみましょう。
S3に入れたファイルが分析されています。rubyのソースコードをダブルクリックしてみます。
zipファイルの中身が分析されているようです。CloudTrail APIの分析結果も見てみましょう。
これはCloudTrailで過去30日のCloudTrail APIの中でリスクレベルの高いものから順に並んでいます。バケットポリシーの変更やオブジェクトの参照など、直接的な操作はリスクレベルがやや高め(Level 6)になってますね。
こちらはそれらのイベントをユーザごとに分けたものです。私の場合IAMロールからが多めですね。
アクセスしたISPも記録されていました。「Wire and Wireless Co,Ltd.」というのは公衆無線LANなので赤く表示されているんですね。
こちらはそれぞれ監視しているバケットのプロパティです。それぞれクリックすると内容がポップアップで出てきます。
最後にRESERCHでS3オブジェクトを検索してみましょう。
バケットの中身が分析されています。ここでいくつかmacieがリスクがある、としたファイルを見ていきます。
これはサンプルの名簿ファイルですね。電話番号が1000件程度載っている、ということでリスクがあると判断されたようです。
こちらは契約書のサンプルファイルです。サービス条項が載っていたのですがキチンとPropietary、所有権について書かれている書類と認識しています。また契約元の住所が載っていることもリスクとして認識されているようです。重要なキーワードとして「sensitive」「confidential」という言葉もピックアップされており、これらがリスクがあるとして判断された根拠のようです。
これはGoのソースコードです。どうしてこのソースがリスクあり、と認識されたのかを見てみると、どうやらメールアドレスが含まれている、とのこと。対象のソースを見てみると確かにAuthorとしてCM社員のメールアドレスが記述されていました。aurlの作者の方、再度検討をお願いします。
まとめ
とりあえずざっと触ってみたところ、CloudTrailのAPIに関してはすぐに表示されましたが、S3バケット内のファイルについては最初の分析に時間がかかるのか、なかなか表示されませんでした。
半日ほど放置した所分析が終わっていたようなのでこの記事も追記しております。分析的には結構優秀ではないかと思います。それだけに分析対象の言語に日本語が入ることが待ち遠しいですね。また、何を持ってリスクとするか、はそれぞれ考え方が違うところなので、分析後に一度SETTINGSから不要なThemeや正規表現、コンテンツ等はdisabledしておくのが賢い使い方のようです。
皆さんも一度触ってみて、手元にある色々なファイルを分析してみてはいかがでしょうか。