動的シードを使用する DGA ファミリー:DNS トラフィックの予期せぬふるまい
編集・協力:Tricia Howard、Lance Rhodes
エグゼクティブサマリー
Akamai の研究者は、ドメイン・ネーム・システム(DNS)トラフィックデータでは、動的にシードされたドメイン生成アルゴリズム(DGA)ファミリーのふるまいがそのリバースエンジニアリングアルゴリズムが示唆するものとは異なる理由を明らかにし、説明しています。
修正されたふるまいは、攻撃者が DGA ファミリーの機能をさらに強化し、コマンド&コントロール(C2)通信チャネルの存続期間を延長し、ボットネットを保護しようとしていることを示唆しています。
セキュリティリサーチャーたちは、静的にシードされた DGA よりも動的にシードされた DGA の方が、将来生成されるドメイン名の予測がより複雑であると考えています。
Pushdo DGA および Necurs DGA ファミリーを詳しく見てみると、予想される生成日の前と後に悪性ドメインを出力することがわかります。
はじめに
このブログの記事では、DGA の概要を説明してから、興味深い事実をいくつか紹介します。
Akamai Security Intelligence Group は、 CacheServe DNS サーバーから送信された DNS クエリーの、匿名化されたログを分析できます。ボットネット検知の取り組みの一環として、100 を超える既知の DGA ファミリーの実際のふるまいを観察し、監視します。
弊社は、動的にシードされた DGA(DGA のサブセット)は、リバースエンジニアリングされた DGA アルゴリズム自体が示すものとはまったく異なるふるまいを示すことが多いことに気づきました。もっと正確に言えば、DGA ドメイン名が、予想される生成日より前にアクティベートされていることがわかりました。
ドメイン生成アルゴリズムとは
マルウェア、たとえばボットネットは、コマンドやアップデートを受信するために集中型サーバーと通信する必要があります。
DGA は、マルウェアに使用され、大量の半ランダムなドメイン名を生成するアルゴリズムです。
感染したデバイスは、DGA によって提供されるアルゴリズムで生成されたドメインの全セットに対して、定期的に接続を試みます。1 つのドメインに到達できさえすれば、C2 サーバーとの接続を確立できます。これにより、サイバーセキュリティリサーチャーにとって C2 通信を停止することが難しくなります。
仕組み
たとえば、ボットネットを想像してみてください。このボットネットは、1 日あたり 500 もの悪性ドメイン名を生成する仮想 DGA ファミリーやバリアントを使用します。
感染したデバイスはこの DGA ファミリーを使用して、毎日これら 500 のドメイン名すべてを照会します。ボットネットの C2 サーバーは、毎日同じように 500 のドメイン名を生成します(同じシードが使用されていると想定していますが、詳細は後述します)。しかし、攻撃者が感染したマシン(ボット)との通信を確立するためには、これらの 500 ドメインのうち 1 つを制御すればいいのです。
シードが変更され、新しいドメインセットが生成されてプロセスが新たに始まることもあります。ドメインが頻繁に変更され、そのドメイン名が「ghlidae[.]com]」のようにランダムであることが多いため、セキュリティリサーチャーが悪性のトラフィックをブロックすることは、困難になります。
トップレベルドメイン(TLD)はハードコーディングされており、そのほとんどが取得コストが安い TLD に限定されます。
現在存在する DGA には、いろいろなものがあります。セキュリティコミュニティーが新しいアルゴリズムを検知すると(そしてときにはリバースエンジニアリングに成功すると)、一般にそのアルゴリズムには「ファミリー名」が与えられます。最も有名な DGA ファミリーとしては、Conficker、 Mirai、CryptoLocker などがあります。
DGA の歴史
マルウェア、たとえば ボットネット、クライムウェア、および ランサムウェア などは、感染したデバイスと通信する必要があります。DGA が登場する以前は、マルウェアの作成者は、単にマルウェアコードにドメイン、あるいはドメインのリストをハードコーディングするだけでした。感染したマシンは、ハードコーディングされたこれらのドメインに定期的に接続し、C2 サーバーとの通信を確立しようと試みていました。
このため、セキュリティチームがマルウェアのソースコードを入手してしまえば、ハードコードされたドメインをすべてブロックリストに入れるのは簡単な作業でした。
リサーチャー:1 点。攻撃者:0 点。
DGA を実装した最初のマルウェアファミリーは、2008 年の初め頃に登場した Kraken ファミリーでした。しかし、その年の後半には Conficker ファミリーが DGA を普及させることになりました。
Conficker.A は 1 日あたり 250 のドメイン名を生成しました。その後出現した Conficer.C は性能を向上させ、1 日に 50,000 という大量のドメインを生成するようになりました。その結果、セキュリティチームは突然、毎日大量の新しいドメインを検知し、ブロックしなければならなくなりました。一方、攻撃者は毎日 1 つのドメイン名を制御するだけでした。
リサーチャー:1 点。攻撃者:1 点。
堅牢な C2 コミュニケーションを増やす
DGA により、C2 通信の堅牢性が上がり、以下をさらに発展させることが可能になりました。
分散型サービス妨害 (DDoS)攻撃
クリプトマイニング
侵害されたデバイスから機密情報を売却する
スパイウェア
広告および電子メール詐欺
マルウェアの自己拡散
これらは、今日に至るまでサイバーセキュリティコミュニティーを悩ませ続けているキャンペーンの一部です。DGA は非常に効果的であることが実証されています。
動的シードと静的シードとは
DGA には、主なカテゴリーとして、動的シードと静的シードの 2 つがあります。違いを理解するためには、まず「シード」の概念を理解する必要があります。
シードとは基本的に、擬似乱数ジェネレータ(PRNG)を開始させる入力値です。シードは、PRNG を使用するアルゴリズムの出力に直接影響します。
たとえば、シード 42 を使用する特定の DGA ファミリーは、常にまったく同じドメイン名のリストを出力します。シードを 50 など別の値に変更すると、まったく異なる出力になります。
シードが DGA にとって重要な役割を果たしていることが想像できると思います。感染したボットネットデバイスは、接続する必要がある C2 サーバーと同じ DGA アルゴリズムを使用するだけでなく、同じシードを使用する必要もあります。
DGA シードは、さまざまな方法で、さまざまなソースに基づいて生成できます。
DGA シードが時間の経過に伴って変化しない場合(ハードコードされている場合が多い)、静的にシードされた DGA と呼ばれます。
DGA によっては、時間の経過に伴って変化するシードを使うものもあります。これらは動的にシードされた DGA と呼ばれます。
静的にシードされた DGA
静的シードは、乱数、有名人の名前、独立宣言、単語辞書、または攻撃者が簡単に別のものにすり替えられるものであれば何でも構いません。
これらのシードは通常、長期間にわたって一定であり、一貫したドメイン名のシーケンスが生成されます。
これらの DGA とシードの組み合わせは、アルゴリズムがリバースエンジニアリングされず、シードがサイバーセキュリティリサーチャーによって検知されない限り有効です。検知されると、生成されたドメイン名はすべて、迅速にブロックリストに登録されます。登録されてしまうと、攻撃者はドメイン名の新しいリストを生成するためにシードを変更する必要があります。
社内では静的にシードされた DGA を単に「静的 DGA」と呼んでおり、この投稿の残りの部分にはこの用語を使用します。
動的にシードされた DGA
動的にシードされた DGA(または単に「動的 DGA」)は、セキュリティリサーチャーをさらに複雑な状況に陥らせます。
動的 DGA は時間に依存したシードを使用します。現在の日付が最も一般的に使用されます。また、FX レート、温度、Google トレンド、Twitter のトレンドトピックを使用する DGA もあります。
このシードが予測可能であれば、セキュリティリサーチャーは、DGA が将来のある時点でどのドメイン名を生成するか予測できます。もちろん、DGA ファミリーがリバースエンジニアリングに成功していることが条件です。
シードが日付に基づいている場合、通常は 24 時間ウィンドウに同じドメイン名のセットが表示されます(つまり、毎日午前 0 時過ぎに新しいドメインのセットが生成されるということです)。
明日アクティベートされる DGA ドメインがどれかがわかれば、これらのドメインを積極的にブロックリストに入れて、エンドユーザーをボットネットから保護することができます。
残念ながら、Google トレンド、気温、為替レートといった予測できないシードでは、このシナリオは不可能です。たとえファミリーのソースコードがあったとしても、将来生成される DGA ドメイン名を正確に予測することはできません。
動的 DGA:予想と現実:
弊社のリサーチャーチームは、何十種類もの DGA について予想外のふるまいを観察し、調査しました。特に興味深い 2 つについて、ふるまいを見てみましょう。
どちらの例も、日付をシードとして使用する動的 DGA ファミリーです。これは、シード(日付)とリバースエンジニアリングされた DGA を組み合わせることで、どのドメイン名が いつDNS クエリーログに表示されるのかを予測できるようになることを意味します。
DNS トラフィックデータで、予測と実際に見たものを比較します。
簡潔にするために、このセクションの残りの部分では、単に「DGA」または「DGA ファミリー」を「日付をシードとして使用する動的 DGA ファミリー」の略語として使用します。
トラフィックデータ内の DGA のビュー
図 1 は、弊社のトラフィックデータに含まれる DGA の全体像です。これを直感的に理解するためには、少し予備知識が必要です。
まず、軸を定義します。
x 軸は、DNS トラフィックデータで DGA ファミリーからのドメイン名が表示されると予想した日(シード日付)と実際の観測日の時間差(日数で測定)を表します。
Y 軸は、トラフィックデータに表示されるドメインの一意の数です。
シードは 24 時間ごとに変更されると想定しています。これは、毎日午前 0 時過ぎに、DGA は新しいシードから新しいドメイン名のセットをアクティベートするということです。つまり、同じドメイン名のウィンドウが 24 時間表示され、その後変更されることを意味します。図の赤で表した部分がこれに該当します。 赤いバー は、レイテンシーのない理想的な世界であれば、DGA ファミリーがこうふるまうであろうという期待を示します。
その右側にある 紫色のバーが示しているのは、各段階で発生するレイテンシーを考慮した上で、DNS データシステムに到達するまでにかかると予想される時間です。ほとんどのレイテンシーは、意図的に設計されていない限り、わずかに右側へシフトするだけで、通常は日単位ではなく分単位か時間単位で測定されます。
しかし左側には、予想外のものが 緑色のバーで表示されています。これが何かというと、理論上の生成日よりも前に確認された DGA ドメイン名です。
この奇妙なふるまいは、検知をさらに複雑にし、悪性のアクティビティを保護するために、攻撃者がこれらの DGA を変更したことを示しています。
Pushdo ファミリートラフィック
Pushdo ファミリーの場合、すべてのクエリー対象ドメインが、X 軸上で 0~1 日の間に 24 時間ウィンドウに表示されると予想します(図 2)。これが、赤い網掛けで示した部分です。
実際には、固有ドメイン名のトラフィック内における分布が観測され、予想される日付から -50~+50 日の間で発生します。ピークはゼロのすぐ手前で、10,000 に達しています。
正規分布のようなものを使用して、シード(日付)が最大 50 日までずらされたようです。
この場合、Python コードは次のように記述されます。
import numpy as np
import pandas as pd
from datetime import datetime
seed = datetime.now().date()
shift = np.random.normal(loc=0, scale=15, size=1).astype(int)[0]
modified_seed = seed + pd.to_timedelta(f'{shift} days')
私たちはこれを、攻撃者がセキュリティリサーチャーの心をくじいたり混乱させたりするための試みであると解釈しています。
ですが私たちは、混乱させられたりなどしません。 弊社の DGA 検知システムは、図 2 に示す範囲全体をカバーしています。
Necurs ファミリーのトラフィック
Necurs ファミリーでは、固有のドメイン名が -7~+7 日間で分布しています(図 3)。また、+12 日の部分にもっと小さいピークがありますが、そのように設計されていると考えて差し支えない大きさです。
これは、攻撃者のサブセットが、同じドメインセットを使用するまでに待機時間を十分に取って 7 日後までずらすことで、予想されたドメイン名の使用日を 7 日分遅らせていることを示唆しています。
結論
DNS リクエストで動的にシードされた DGA のアクティビティを分析したところ、予想外のふるまいがいくつか観察されました。これらの異常は、攻撃者が DGA のシードをさまざまな方法で改ざんしたことに起因すると弊社は結論付けています。私たちが調査した DGA ファミリーである Pushdo と Necurs のどちらも、予想される生成日の前と後に悪性ドメインを出力しており、その範囲は予想される生成日の前後 50 日間に及びます。
これは、DGA 検知システムを回避し、セキュリティリサーチチームの作業を複雑にするための試みとして行われていると弊社は分析しています。攻撃者がボットネットを保護し、C2 通信チャネルの存続期間を延ばす方法を模索し続ける一方で、こういった対策に対抗し、現実と予想を明確に識別することがセキュリティリサーチャーの仕事です。
今後の情報提供
セキュリティに関する最新の調査結果をリアルタイムで確認するためには、 X(旧 Twitter)で Akamai をフォローしてください。