本文の内容は、2024年10月30日に Miguel Hernández が投稿したブログ(https://sysdig.com/blog/emeraldwhale/)を元に日本語に翻訳・再構成した内容となっております。
Sysdig脅威調査チーム(TRT) は最近、公開された Git 構成をターゲットにしたグローバルなオペレーション EMERALDWHALE を発見しました。このオペレーションでは、複数の誤って構成された Web サービスを悪用した複数のプライベートツールが使用され、攻撃者は認証情報を盗み、プライベートリポジトリを複製し、ソースコードからクラウド認証情報を抽出できました。オペレーション中に 10,000 を超えるプライベートリポジトリの認証情報が収集されました。盗まれたデータは、以前の被害者の S3 バケットに保存されていました。
盗まれた認証情報は、クラウドサービスプロバイダー (CSP)、電子メールプロバイダー、およびその他のサービスのものです。フィッシングとスパムが認証情報を盗む主な目的のようです。認証情報自体は、アカウントごとに数百ドルの価値があります。EMERALDWHALE が収益を得る方法はアカウントだけではありません。彼らが作成したターゲット リストは、さまざまなマーケットプレイスで販売することもできます。
この攻撃は、環境を保護するにはシークレット管理だけでは不十分であることを示しています。認証情報が漏洩する可能性のある場所が多すぎるのです。
S3からの初期ディスカバリー
Sysdig TRT クラウドハニーポットを監視しているときに、侵害されたアカウントを使用した異常なListBuckets呼び出しを確認しました。参照された S3 バケットs3simplisitter は、弊社のアカウントに属していませんでした。代わりに、不明なアカウントに属し、公開されていました。このバケットを調査しているときに、悪意のあるツールと、侵害された認証情報とログデータを含む 1 テラバイトを超えるデータを発見しました。悪意のあるツールを分析すると、Web スクレイピング Git 構成ファイル、Laravel .envファイル、生の Web データなど、多面的な攻撃が明らかになりました。
私たちは AWS に連絡してバケットを報告し、AWS はバケットを削除しました。
Git 構成の悪用
バケットから復元されたログデータは、Git リポジトリ構成ファイルを公開していたサーバーに対する 8 月から 9 月にかけての大規模なスキャンキャンペーンを示していました。EMERALDWHALE は、httpxなどのオープンソースツールによってこの規模のスキャンが容易になったため、インターネットの広範囲をターゲットにしました。
攻撃チェーンの概要は次のとおりです。
EMERALDWHALEが使用するツールセットは、長いIPアドレス範囲のリストから自動的に関連するホストを発見し、認証情報を抽出し、回収したトークンの有効性を確認します。その後、盗まれたトークンを使って、Git互換サービスに属するパブリックおよびプライベートリポジトリのクローンを作成します。このツールはダウンロードしたリポジトリをスキャンしてさらに認証情報を抽出します。最終的に、すべての結果がS3バケットにアップロードされます。。
なぜ Git 構成なのか?
Gitは、開発者が同じコードベースで作業できるようにする並行バージョン管理システム(CVS)であり、ソフトウェアプロジェクトの管理や展開をサポートします。GitHubは、Gitプロトコルを使用する最も一般的なサービスの一例で、特にLinuxユーザーやコマンドラインユーザーに人気があります。Gitでは、設定や認証情報を構成ファイルに保存します。
.gitディレクトリには、バージョン管理に必要なすべての情報が含まれており、完全なコミット履歴、構成ファイル、ブランチ、参照などが含まれます。このディレクトリが公開されてしまうと、攻撃者はリポジトリの履歴や構造、プロジェクトの機密情報など、貴重なデータを取得できるようになります。具体的には、コミットメッセージ、ユーザー名、メールアドレス、さらには認証情報やAPIキーなどが含まれる可能性があります。
.gitディレクトリが公開される一般的な原因の1つは、Webサーバーの設定ミスです。Webサーバーの権限が適切に設定されていないと、ユーザーがWeb経由で直接.gitディレクトリにアクセスできる可能性があり、これによりリポジトリ全体をダウンロードして公開された内容を解析されるリスクが生じます。EMERALDWHALEは、このセキュリティ問題を悪用し、公開されたリポジトリの認証情報をスキャンして収集し、それらを売買または他の目的で利用しました。
なお、GitHubの公開リポジトリから認証情報を収集・悪用することは、以前ほど効果的ではなくなっています。多くの企業が定期的に公開リポジトリをスキャンし、発見された認証情報にフラグを付けるようになっているためです。たとえば、AWSは見つかった認証情報に対して、自動的にキーを隔離するポリシーを付与し、悪用の可能性を制限する措置を講じています。
EMERALDWHALEツール
調査中に、脆弱性スキャンと公開された Git リポジトリの悪用に関連する 2 つのツールが見つかりました。
- MZR V2 (MIZARU) by @kosov2
- Seyzo-v2
これらのツールは、多くの場合、アンダーグラウンド マーケットプレイスで販売されています。さらに、ツールだけでなく、それらを使用してスパムやフィッシング キャンペーンを作成する方法を解説するコースも提供され始めています。
以下にいくつかの例を示します。
MZR V2 と Seyzo-v2 はどちらもターゲットのリストを必要とします。これらのリストは通常、以前にスキャンされ、アクティブであることがわかっている IP またはドメインです。これらのターゲットリストを作成するには、いくつかの方法があります。一般的な方法は次のとおりです。
- 正当な検索エンジン: Google Dorks、Shodan、その他のインターネットマッピングサービス。
- スキャンツール: Masscan は最もよく使用されるものの 1 つです。たとえば、 RUBYCARP はボットネットを使用してスキャンを実行し、アクティブな IP をマッピングします。
- アンダーグラウンドマーケットまたはデータプロバイダーから直接購入します。
これらのツールがどのように機能するかを理解するために、さらに詳しく見ていきましょう。
MZR V2 – MIZARU
発見されたツールには、プロセス全体を実行するための手順が記載された README が含まれていました。これは英語で書かれた唯一のファイルであり、スクリプトやその他のファイル内のコメントはフランス語です。MZR V2 は、Python スクリプトとシェル スクリプトのコレクションで構成されています。
最初のスクリプトgitfinder.sh は、httpxツールを使用してIP の対象リストをスキャンします。CRYSTALRAY でも使用されたhttpx は、Web サーバーを高度に並列化してスキャンできる OSS ツールであり、非常に効率的です。
httpx -l $1 -silent -threads 300 -path '/.git/config' -ms '[core]' >> git.txt
$1 値には入力 IP アドレスが含まれます。結果は、次のような行を含むリストになります https[:]//<IP>/.git/config。
次のステップは、Pythonスクリプト ghpurl.py
を実行することです。このスクリプトは、wgetを使用してクエリを行い、単純な正規表現(regex)を用いてURLの内容を抽出します。
atch = re.search(r'url = (.+)', content)
抽出された URL は、さらに分析するために別のファイルに保存されます。例:
https://<user>:<token>@<github|gitlab|bitbucket>/<user>/<repo>.git
GitHub の認証情報を検証するために、checkuser.shスクリプトは前の手順で取得した情報を使用して GitHub の API にアクセスします。成功した場合は、認証情報を新しいファイルに再度保存します。GitHub へのリクエストは次のようになります。
これらの認証情報を使用して、dumpsph.shスクリプトがリポジトリをダウンロードし、単純なgrepコマンドでファイル内に保存されている認証情報を抽出します。
grep -C25 -rPn --exclude='*.html' 'AKIA[A-Z0-9]{16}' .
Code language: JavaScript (javascript)
現在、このツールは古いコミットやブランチをチェックせず、リポジトリをクローンした際にフォルダー内の現行ファイルのみを確認します。
最後に、parser.shというスクリプトがあり、収集したデータを後続のコマンドで使用しやすい形式に整えます。以下は、AWSキーを収集するためのgrepコマンドの例です:
grep -aoP '(?<![A-Za-z0-9/+=])[A-Za-z0-9/+=]{40,}(?![A-Za-z0-9/+=])' | head -n1 | sed -e 's/^\(KEY\|SECRET\)=//g'); region=$(strings $1 | grep -A5 "$i" | grep -aoP '(us(-gov)?|ap|ca|cn|eu|sa)-(central|(north|south)?(east|west)?)-[0-9]'
Code language: HTML, XML (xml)
MZR V2の最終ステップでは、AWS CLIコマンドを使用して認証情報を検証し、その機能を確認します。指定されたオプションに応じて、新しいユーザーを作成したり、追加の偵察を実施することができます。
1. ログインステータスを確認し、ログイン認証情報を自動作成
2make_panel.shスクリプトを使用して、ユーザー名「mailer-sns-smtp」を指定して新しいユーザーを作成し、AdministratorAccessポリシーを付与
2. SMTPの権限とクォータを確認し、SMTP認証情報を自動的に作成
ses_password.pyを使用してIAMユーザーのシークレットアクセスキーをSMTPパスワードに変換
SNSサービスを確認し、sns_checker.shスクリプトを使ってSMSメッセージを送信できるかチェック
最後に、一連のスクリプト(うち1つはJavaScriptで、Nodeとnpmのインストールが必要)を使用してメール送信機能を検証します。その結果、MZR V2は新しいアカウント情報を含む以下の2つのファイルを作成します。
healthy_aws_smtp.txt
,ses_valid.txt
Seyzo-v2
MZR V2と同様に、Seyzo-v2は認証情報を発見し盗むためのスクリプト群です。また、スクリプト内にはいくつかのフランス語の文字列が見つかりました。Seyzo-v2はgitfinder.shスクリプトから開始され、httpxを使用して公開されたGit設定ファイルを検出し、ターゲットリストを作成します。
次に、dumperz.shスクリプトが使用され、OSSツールであるgit-dumperを利用してターゲットリポジトリからすべての情報を収集します。このツールは、MZR V2で使用される方法よりも包括的です。
以下は、dumperz.shスクリプトの一部で、git-dumperの使用方法と、収集したデータをどのように検索するかを示しています。
git-dumper -j 50 $i $name #git-dumper -h pour savoir comment config proxy, nombre de threads etc
grep --exclude='*.html' -C25 -rPn 'AKIA[A-Z0-9]{16}' --binary-files=text $name/ | cut -c -500
grep -rniP -C25 "smtp\.sendgrid\.net|smtp\.mailgun\.org|smtp-relay\.sendinblue\.com|email-smtp\.(us|eu|ap|ca|cn|sa)-(central|(north|south)?(west|east)?)-[0-9]{1}\.amazonaws.com|smtp.tipimail.com|smtp.sparkpostmail.com|smtp.deliverabilitymanager.net|smtp.mailendo.com|mail.smtpeter.com|mail.smtp2go.com|smtp.socketlabs.com|secure.emailsrvr.com|mail.infomaniak.com|smtp.pepipost.com|smtp.elasticemail.com|smtp25.elasticemail.com|pro.turbo-smtp.com|smtp-pulse.com|in-v3.mailjet.com" --binary-files=text $name | cut -c -500 >> smtp.txt
grep -rniP -C25 "(?i)twilio(.{0,20})?SK[0-9a-f]{32}|nexmo_key|nexmo_secret|nexmo_api" --binary-files=text $name | cut -c -500 >> api_sms.txt
Code language: PHP (php)
上記のように、Seyzo-v2はSMTP、SMS、およびクラウドメールプロバイダーの認証情報を収集するためのさらなる検索も行っています。前述のツールとは異なり、Seyzo-v2はクラウドサービスプロバイダー(CSP)の認証情報の窃盗に完全には特化していませんが、認証情報にアクセスすると、以前説明した方法と同様にキーを使用してスパムやフィッシングキャンペーン用のユーザーを作成します。
IoC
以下の表には、ツールで使用されるAWS CLIコマンドやキーワードとともに、IoC(セキュリティ侵害の指標)を追加しています。
IOCs | |
Username | mailer-sns-smtp |
Username | mizaruveryhq |
Username | s3-admin |
Username | SupportAWS |
Password | SupportAWS123 |
Password | @Myregular2910Evolutions@ |
AWS CLI Command | aws ses get-send-quota |
AWS CLI Command | aws ses list-identities |
AWS CLI Command | aws sesv2 get-account |
AWS CLI Command | aws sts get-caller-identity |
AWS CLI Command | aws iam list-users |
AWS CLI Command | aws sns get-sms-attributes |
AWS CLI Command | aws iam create-user –user-name $username |
AWS CLI Command | aws iam attach-user-policy –user-name $username –policy-arn arn:aws:iam::aws:policy/AdministratorAccess |
AWS CLI Command | aws iam create-login-profile –user-name $username –password “$password” |
AWS CLI Command | aws s3 ls |
Raw Web スクレイピング
EMERALDWHALE は、設定ミスのあるサーバーや公開された認証情報を探すだけでなく、別の手法も利用していることがわかりました。また、大量の Web スクレイピングも使用し、収集したアセットからクラウド認証情報を抽出していました。私たちは、標的の Web サイトからダウンロードしたアセットを含む、類似した名前のフォルダを数十個発見しました。たとえば、Web サイトで使用されている JavaScript ファイルには、静的に定義されたクラウド認証情報が見つかりました。
次の画像は、フォルダー内の最後のファイルの例を示しています。
各フォルダーには、標的の Web サイトのデータの収集と分析に関係するいくつかの標準スクリプトと出力ファイルが見つかりました。
メインファイルは ex.sh
です。このシェル スクリプトは、収集されたファイルを分析して、クラウド認証情報を検索し、抽出します。使用される正規表現は、他のツールで見られるものと同様です。
grep -C15 -rPn 'AKIA[A-Z0-9]{16}'
grep -E -a -o "(us|eu|ap|ca|cn|sa|me)-(central|(north|south)?(west|east)?(gov-west|gov-east)?)-[0-9]{1}"
grep -aoP '(?<![A-Za-z0-9/+=])[A-Za-z0-9/+=]{40,}(?![A-Za-z0-9/+=])'
残りのファイルは、抽出プロセスが完了すると生成され、削除される一時ファイルです。この特定の例では、スクレイピングがまだアクティブなフォルダー内にあるため、それらが表示されます。
ターゲットと被害者の分析
EMERALDWHALEがS3バケットに残したログデータにより、このオペレーションの規模や成功度合いを把握することができます。データにはターゲットリスト、ツールの出力、収集された生データが含まれています。
前述のように、両方のツールのワークフローでは、攻撃の開始にターゲットリストが使用されていました。このターゲットリストの分析により、以下のことが判明しました:
- IP Addresses: 500M+
- IP Ranges: 12k
- Domains: 500k
- EC2 hostnames: ~1M
面白い事実: 彼らはすべての IPV4 を 1 行に 1 つの IP (1.1.1.1 から 255.255.255.255.255) でファイルに保存し、その結果 4,278,190,082 行になりました。
これらのターゲットリストの1つを使用して、攻撃者はMZR V2ツールを利用し、67,000件以上のURLで/.git/configパスが公開されていることを発見しました。Telegram上で調査を行ったところ、このリスト単体で**$100**で取引されていることが判明しました。これにより、Git設定ファイルに対する活発な市場が存在することが確認されました。
この価格が高額なのは、Shodan や Censys などのインターネットマッピングサービスのような検索エンジンでは URL パスで検索できないためです。Google Dorks を使用して、これらの公開されたファイルの一部を見つけることは可能ですが、アクティブスキャンと比較して、これほど大量のファイルを取得するのは困難です。
公開されたすべての Git 構成ファイルから収集されたリポジトリは多種多様で、そのほとんどは GitHub、BitBucket、GitLab などの主要なサービスに属していました。発見された資格情報のうち有効なものの数をより正確に推定するために、約 6,000 個の GitHub トークンに対して限定的な分析を実施し、約 2,000 個が有効な資格情報であると判断しました。
GitHub、BitBucket、GitLab はボリュームで最大のリポジトリでしたが、データセットでは、より小規模なリポジトリも多数発見されました。AWSによって最近廃止されたCodeCommit リポジトリは、700 回以上見られました。このオペレーション中に、これらの小規模なリポジトリのうち約 3,500 個が公開されました。これらのリポジトリの多くは、個人用か、小規模なグループによって使用されている可能性があります。
Laravel の悪用
EMERALDWHALE は、Git 構成ファイルに加え、公開された Laravel 環境ファイルも標的にしていました。PHP フレームワークの Laravel は近年、攻撃者の間で流行しており、その脆弱性、標的、および積極的な悪用は CISA や Unit42 によって広く報告されています。.envファイルには、クラウド サービスプロバイダーやデータベースなど、豊富な認証情報が含まれています。
次の図は攻撃経路を示しています。
Multigrabber v8.5
Laravel エクスプロイト ツールの市場は活発に展開されており、この調査で発見されたものを簡単に紹介します。Multigrabber は、ドメインまたは IP をチェックして .env ファイルが存在するかどうかを検証し、取得した情報を収集して分類し、スパムやフィッシングキャンペーンに使用するシークレット窃盗ツールです。このツールは多くのフォーラムやチャットで見つかります。また、さまざまなバージョンに進化し、新機能が追加されています。調査中にバージョン 8.5 が見つかりました。以下は、Telegram グループの広告の例です。
公式の開発チームは EmperorsTool ですが、活動を停止しているようです。以前は EmperorsTool のコードにアクセスしていた他のグループが、現在は再販しているようです。
EMERALDWHALEのその後
これらの攻撃の結果、複数の異なるクラウド サービスから 15,000 件を超える認証情報が盗まれました。基本的な正規表現と単純な重複排除以外では、認証情報の有効性を検証しようとはしませんでした。この攻撃は、スクリプトと Web サーバー上の公開ファイルのみを使用して実行され、認証情報の別のソースである Git リポジトリにつながりました。
現在の傾向
認証情報収集攻撃がなぜこれほど一般的になっているのでしょうか?
この疑問に答えるために、私たちは過去数か月にわたって、設定ミスにより公開されたファイルを探す多数の攻撃や自動スキャンを監視し、検出してきました。攻撃者は、ほとんど労力をかけずに認証情報を盗んだり入手したりするという目的を達成しています。簡単に言うと、次のようになります。
- 最小限の労力: すべてを自動化でき、ツールを一時的なシステムで実行し、結果を別の場所に保存します。この種の活動の背後に誰がいるのかを知ることは非常に困難になり、攻撃者にとってのリスクは軽減されます。
- 無料ツール: GitHub では、必要なすべての手順を支援するツールを簡単に見つけることができます。また、攻撃者志望者が購入できるコースの市場も活発に存在しています。
- ビジネス: 攻撃者にとっては手っ取り早い収入源です。有効なキーを確認し、パックやオートショップ、ウェブサイト、インタラクションを必要としない Telegram ボットで販売します。
まとめ
EMERALDWHALE は最も洗練されたオペレーションではありませんが、それでも 15,000 件を超える認証情報を収集することに成功しました。脆弱性ではなく、構成ミスのみに頼っていましたが、これは珍しいことではありません。異なるのは、ターゲットが、公開された Git 構成ファイルだったことです。これらのファイルとそこに含まれる認証情報により、通常はアクセスが難しいプライベートリポジトリへのアクセスが可能になります。プライベートリポジトリでは、セキュリティが確保されているという誤った認識があるため、開発者はシークレット情報を含める傾向が強くなります。
認証情報の闇市場は特にクラウドサービス向けで急成長しており、この攻撃からも、シークレット管理だけでは環境を十分に保護できないことが示されています。認証情報が漏洩する可能性のある箇所は多く、認証情報に関連するIDの動作を監視することが、これらの脅威から守るために必須になりつつあります。
エクスポージャーマネジメントや脆弱性スキャナーは、Git設定ファイルの公開などの問題を検出する際に役立ちます。また、内部と外部の両方の視点からこれらのスキャンを実施することが重要であり、攻撃者が見ている全体像を把握することが求められます。