Amazon Web Services ブログ

Amazon SageMaker IP Insights アルゴリズムを使用して、不審な IP アドレスを検出する

本日、Amazon SageMaker の新しい IP Insights アルゴリズムが公開されました。IP Insights は、IP アドレスの異常な動作や使用パターンを検出する教師なし学習アルゴリズムです。このブログ記事では、IP アドレスを使用した不正行為の特定、Amazon SageMaker IP Insights アルゴリズムの説明、実際のアプリケーションでの使用方法のデモンストレーション、およびその結果を社内で共有する方法について解説します。

悪意ある行為と戦う

悪意のある行為には、たいていの場合、オンラインバンキングアカウント、管理コンソール、ソーシャルネットワーキングまたはウェブメールアカウントへのアクセスなどのオンラインリソースへの不正なアクセス、いわゆるアカウントの乗っ取りが含まれます。乗っ取りは通常、盗まれたり、紛失またはリークされた認証情報を使用して行われ、不正なアクセスが、アカウントのいつもとは異なる IP アドレス (例えば、ユーザーからではなくハッカーのコンピュータ) から発信されることがほとんどです。

アカウントの乗っ取りを防ぐための一般的な防御策は、オンラインリソースに以前にはなかった IP アドレスでアクセスする際にフラグを立てることです。フラグ設定された対話はブロックすることができます。もしくは、ユーザーが追加の認証形式 (SMS への応答など) を利用して、乗っ取りに挑むこともできます。しかし、ほとんどのユーザーは、これまで使用していなかった IP アドレスから定期的にオンラインリソースにアクセスします。したがって、「新しい IP をフラグする」方法は、不適当に高い偽陽性率を生み、残念な顧客エクスペリエンスをもたらします。

ユーザーは定期的に新しい IP アドレスからオンラインリソースにアクセスしますが、新しい IP アドレスは完全な無作為での選択ではありません。ユーザーの移動習慣やインターネットサービスプロバイダーの IP 割り当て戦略など、いくつかの潜在的な要因が割り当てに影響します。これらの潜在的な要因すべてを明確に列挙することは、普通では困難です。しかし、オンラインリソースのアクセスパターンを見ることで、新しい IP アドレスが予期されたイベントなのか異常なのかを予測することは可能です。Amazon SageMaker IP Insights アルゴリズムは、これを行うために厳密に設計されています。

Amazon SageMaker IP Insights アルゴリズム

Amazon SageMaker IP Insights アルゴリズムは、統計的モデリングとニューラルネットワークを使用して、オンラインリソース (オンライン銀行口座など) と IPv4 アドレスとの関連性を取得します。このアルゴリズムは、オンラインリソースと IP アドレスのベクトル表現を詳しく検証し学習します。その際、オンラインリソースと IP アドレスが一緒に使用した場合には、お互いのポイントは近くになります。アルゴリズム自体は、それらを明確にモデル化する必要なく、潜在的要因の多くを学習し、組み入れることができます。

トレーニングの手順として、ランダムなポイントに、可能性のある各 IP アドレスとリソースを無作為に割り当てることから始まります。オンラインリソースは、不透明な文字列識別子 (ユーザー ID、UUID など) です。その中核部分で、アルゴリズムは、トレーニングデータ内で互いに関連付けられている場合、IP アドレスおよびリソースを表すポイントを反復的に一緒にプッシュし、関連付けられていない場合、それらの関係を引き離します。

IPv4 アドレスの構造を使った特殊なニューラルネットワークアーキテクチャにより、アルゴリズムは IP アドレスの動作をモデル化します。このアルゴリズムで、以前にトレーニングデータで見られなかった場合でも、正確なベクトル表現を計算できます。

Amazon SageMaker IP Insights アルゴリズムを使用してアクセスログを分析し、IP アドレスとユーザーのアクセス履歴に基づいてアクセス試行 (ログインイベントやオンライントランザクションなど) が疑わしいかどうかを予測します。以前に見られなかった IP アドレスの場合でも、予測を行なうことができます。

実例 : ウェブアプリケーションへの不審なログイン試行を検出する

このセクションでは、Amazon SageMaker IP Insights アルゴリズムを使用して、ウェブアプリケーションへの疑わしいログインイベントを識別する方法を説明します。詳細な情報、および自分で試してみるには、このサンプルノートブックを参照してください。

盗まれた認証情報を持つユーザーのアカウントに攻撃者がログインしようとするという、アカウント乗っ取りのシナリオを取り上げます。このような悪意のあるログイン試行は、通常、いつもとは異なる IP アドレスから発信されます。したがって、Amazon SageMaker IP Insights アルゴリズムを使用して、それらを識別します。まず、データセットを準備してモデルをトレーニングする方法を説明します。次に、トレーニングしたモデルをアプリケーションから呼び出して、正しい情報に基づいて対応する方法を解説します。

データセットを準備する

Amazon SageMaker IP Insights アルゴリズムは、リソース (ユーザーアカウントなど) と IP アドレスをリンクするデータを持つあらゆる状況に適用できます。多くの場合、これはアプリケーションまたはウェブサーバーのログ、アプリケーションデータベース、またはデータウェアハウスから直接送信される可能性があります。最初のステップは、2 つのフィールド (EntityIdIpAddress) を含むヘッダーレス CSV ファイルにある Amazon S3 にデータをエクスポートすることです。<EntityID> はリソースの任意の文字列識別子で、<IpAddress> は IPv4 ドット表記でなければなりません。例えば、データセットは次のようになります。

Entity1,10.0.0.1
Entity2,192.168.0.100
.
.
.
Entity2,10.0.0.1

モデルのパフォーマンスを確認するために、データセットをトレーニングセットとテストセットに分割しました。このアルゴリズムは、テストセットを使用して予測を行い、有効なアクセス試行と無効なアクセス試行をどれくらい正確に識別できるか評価します。通常は、トレーニングのためのデータセットの連続する数日間を使用し、次にテストセット後の数日を使用します。

長期間 (少なくとも数日から数週間) にわたるデータを使用し、新しいデータを再学習して定期的にモデルをリフレッシュするのがベストプラクティスです。同様に、トレーニングデータセットを作成する際にシャッフルすると、アルゴリズムのパフォーマンスが向上します。

モデルのトレーニング

IP Insights アルゴリズムを使用して、Amazon SageMaker でモデルをトレーニングします。パフォーマンスを改善するために微調整できるいくつかのハイパーパラメータ (アルゴリズムの設定) があります。vector_dim は、IP アドレスとアカウントの両方を表現する潜在空間のディメンションです。num_entity_vectors は、アルゴリズムがアカウント用に保持する別個のベクトル表現の数です。アカウントからベクトルへのマッピングはハッシュ関数によって決定されるため、num_entity_vectors は、ハッシュ衝突の悪影響を最小限に抑えるためにユニークアカウントの総数より大きく設定する必要があります。最後に、shuffled_negative_sampling_rate および random_negative_sampling_rate は、それぞれ、現在のミニバッチから IP アドレスをランダムに選択し、IP アドレスをランダムに生成することによって、トレーニングデータの各レコードに対して生成される負のサンプルの数を指定します。モデルのハイパーパラメータの詳細な説明は、こちらにあります。

トレーニングジョブのパラメータとモデルのハイパーパラメータを設定したら、Amazon SageMaker IP Insights モデルを次のようにトレーニングします。

role = get_execution_role()
sess = sage.Session()
image = 'xxxxxxx.dkr.ecr.yyyy.amazonaws.com/ipinsights:latest'

input_data = {
    'train': sage.session.s3_input('s3://my_train_data', content_type='text/csv'),
}

model = sage.estimator.Estimator(image,
                                 role,
                                 train_instance_count=1,
                                 train_instance_type='ml.p3.2xlarge',
                                 output_path='s3://{}/output'.format(sess.default_bucket()),
                                 sagemaker_session=sess)
                                 
model.set_hyperparameters(epochs='25',
                          mini_batch_size='1000',
                          learning_rate='0.001',
                          vector_dim='128',
                          num_entity_vectors='1000000',
                          shuffled_negative_sampling_rate='2',
                          random_negative_sampling_rate='1',
                          num_ip_encoder_layers='1')
model.fit(input_data)          

不審なログインを特定する

トレーニングが完了したら、モデルをオンライン推論のエンドポイントにデプロイします。

from sagemaker.predictor import csv_serializer, json_deserializer

predictor = model.deploy(
    initial_instance_count=1,
    instance_type='ml.m4.xlarge'
)

アプリケーションコードから、モデルを呼び出すことができます。Amazon SageMaker はマネージド型サービスのため、Java、Python などさまざまな言語で実行できます。

Python

predictor.serializer = csv_serializer
predictor.accept = 'application/json'
predictor.deserializer = json_deserializer

predictor.predict(dataset)

Java 8

String dataCSV = String.join(",", entityId, ipv4Address);
ByteBuffer buf = ByteBuffer.wrap(dataCSV.getBytes());

InvokeEndpointRequest invokeEndpointRequest = new InvokeEndpointRequest();
invokeEndpointRequest.setBody(buf);
invokeEndpointRequest.setEndpointName(endpointName);
invokeEndpointRequest.setContentType("text/csv");
invokeEndpointRequest.setAccept("application/json");

AmazonSageMakerRuntime amazonSageMaker = AmazonSageMakerRuntimeClientBuilder.defaultClient();
InvokeEndpointResult invokeEndpointResult = amazonSageMaker.invokeEndpoint(invokeEndpointRequest);

モデルのパフォーマンスを評価する

モデルをデプロイしたので、次は認証されたログインイベントと疑わしいまたは不正な試みを区別できることを検証します。この検証は、モデルがテストデータセット内の正当なログインイベントに対して与えるスコアと、モデルが負のサンプリングされたランダムなイベントに対して与えるスコアとを比較することによって行います。ネガティブイベントを生成するには、テストデータセットからログインイベントを選択し、アカウントを同じにして、IP アドレスをランダムに生成された IP アドレスに置き換えます。このように、ネガティブイベントは、不明な IP アドレスからアクセスされている既知のアカウントのレコードであるため、悪意のあるログイン試行をいくらか表示します。

ご覧のとおり、Amazon SageMaker IP Insights モデルは悪意のあるイベントに対してより高いスコアを与え、2 つの分布の間には明確な分離があります。

モデルのパフォーマンスとしきい値を調整する

正当なイベントと悪意のあるイベントのスコアの分布を確認できたので、これで、選んだしきい値と取り組むべき行動に関して、より良い選択をすることができます。モデルのスコアを使用して、携帯電話にワンタイムコードを送信したり、セキュリティに関する質問を表示したりするなど、追加の認証のための質問をトリガーする場合、適切なしきい値はおおよそ 0 になります。この結果、ほとんどの悪意のあるログイン試行が、追加の認証の質問と対峙することになります。より正当なトラフィックにはフラグが立てられますが、それで困るのは、正当なユーザーのほんの一部だけでしょう。一方、これらのスコアに基づいて手作業による調査を開始した場合は、しきい値を 10 前後に設定します。これで、偽陽性率がはるかに低い動作点に対応します。つまり、いくつかの悪意のあるイベントが見逃されることはありますが、手動での調査で選択されたものは、悪意を持っている可能性が非常に高くなります。

結果とベースライン比較

アルゴリズムを設計する際に、ユーザーログインの内部データセットでそのパフォーマンスを評価しました。このセクションでは、不審なログインを検出するために使用される既存の方法とそのパフォーマンスを比較します。最初に、前述の「新しい IP フラグ」メソッドの 2 つのバリエーションと比較します。

  1. IP テーブルメソッド : この方法では、トレーニング期間中に、アカウントが IP アドレスを使用したことがない場合、ログインイベントは悪意あるとみなされます。
  2. サブネットテーブルメソッド : このメソッドは、前出のメソッドより緩和したバージョンです。トレーニング期間中に、アカウントが同じ /24 サブネットからの IP アドレスを使用したことがない場合、ログインイベントは悪意あるとみなされます。

シンプルではありますが、これらのメソッドは非常に効果的で、攻撃者の IP アドレスが、被害者が使用する IP アドレスとは異なる可能性が高いため、100% に近い真陽性率を達成することが多いのです。ただしこれから見るように、正規のユーザーが、トレーニング期間中に使用していない IP アドレスからログインすることが時折あるため、偽陽性率が高くなってしまいます。Amazon SageMaker IP Insights アルゴリズムが大きく寄与できることの 1 つに、以前に使用されたことがなくても、より可能性の高い IP アドレスにアカウントを関連付けることにより、偽陽性率を低減することがあります。

Amazon SageMaker IP Insight とベースラインを比較するために、正当なトラフィックのデータセットに 1% の悪意あるトラフィックを人為的に注入したテストケースを作成しました。次に、両メソッドを使用して、データセット内の各イベントにスコアを付けます。

これらの受信者動作特性 (ROC) 曲線では、両ベースラインメソッドが約 20% の偽陽性率 (FPR) で 100% の真陽性率 (TPR) に達することが観察されます。一方、Amazon SageMaker IP Insights モデルでは、偽陽性率が 10% 前後と大幅に低く、真陽性率は 100% に達しています。加えて、ベースラインモデルは剛性で、その唯一の動作点は TPR=100% および FPR~20% でした。一方、Amazon SageMaker IP Insights モデルは、しきい値を調整することで低い FPR 値で動作するように設定できます。先に説明したように、FPR が低いと、得点が高いイベントが手動調査をトリガーする場合に特に便利です。

結論

この記事では、悪質なログイン試行の問題を紹介しました。Amazon SageMaker IP Insights モデルを使用して、疑わしいログインイベントを特定する方法を説明し、Amazon SageMaker IP Insights モデルがベースライン方法よりも大幅に優れたパフォーマンスを発揮することを示しました。さらに、IP Insights モデルが Amazon SageMaker に追加されたため、Amazon SageMaker 自動モデルチューニングを使って、より良いパフォーマンスを達成することが可能となりました。


著者について

Jared Katzman は、AWS AI Labs のソフトウェアエンジニアです。社会的利益のために機械学習とテクノロジーを使用するというテーマの研究に関心を持っています。余暇には、テクノロジーに興味のある LGBTQ+ の学生への指導プログラムを運営しています。

 

 

 

Baris Coskun  は、AWS External Security Services のシニアアプライドサイエンティストで、機械学習と情報セキュリティに携わるサイエンティストチームを率いています。

 

 

 

 

謝辞

このプロジェクトの研究に貴重な情報を提供してくれた、AWS Payments & Fraud チームの Jakub ZablockiJianbo Liu、および Zak Jost に感謝します。さらにプロジェクト初期に貢献してくれた、Amazon AI の Eric KimPranav Garg にも感謝します。