データサイエンスツールを狙ったサイバー攻撃の実情 #aqua #セキュリティ

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2022年4月13日に公開された「 Real-world Cyber Attacks Targeting Data Science Tools 」の日本語翻訳です。

データサイエンスツールを狙ったサイバー攻撃の実情
クラウドへの移行が加速する中、企業はデータ駆動型のビジネス決定を行うために、大規模なデータチームへの依存度を高めています。その中で、データチームは高い権限を与えられ、開発環境や本番環境へのアクセスも可能になっています。しかし、データツールを狙うセキュリティ脅威にはどのようなものがあるのでしょうか。そして、さらに重要なことは、これらの課題に対処するための組織の準備が整っているかです。Aqua のセキュリティ研究チームである Team Nautilus の調査により、多くのデータツールが脅威にさらされ、野放し状態で活発に攻撃されていることが明らかになりました。
そこで私たちは、実際に起こった攻撃をもとに、データチームが直面する脅威を調査し、これらのリスクを軽減する方法について推奨する一連のブログを作成しました。
この調査の一環として、私たちは Jupyter Notebooks を標的とした史上初の Python ランサムウェア攻撃を発見しました。このシリーズの次の投稿では、データチームがデータの分析や操作に使用する Jupyter Notebooks やその他の一般的なオープンソースツールに対する攻撃について詳しく説明します。
データを取り扱う人とは
データを取り扱う人は、企業のデータを収集、操作、分析し、実用的な洞察でビジネスを導き、力を与えることができます。現代の組織には、多種多様なデータの役割があります。上位3つの肩書として、データエンジニア、データサイエンティスト、データアナリストがあります。
- データエンジニアは、データの取得や収集など、組織のデータインフラを設計、構築、維持します。さまざまなソースからのデータを統合し、組織のデータプラットフォームへ適合するようにします。
- データサイエンティストは、データツールの設計と構築を行います。複雑な数学とモデリングを適用して、大規模な分析タスクを実行するための高度なデータツールを構築します。
- データアナリストは、データ分析を行い、その結果を組織内の関係者に報告します。日々の業務では、ダッシュボードの管理、レポートの作成、データ可視化などを行います。
データを取り扱う人は通常、業務を遂行するために、企業のデータベースやコンピューティングリソースへの高い特権的なアクセスを必要とします。そのため、彼らは組織に大きな損害を与える可能性のあるサイバーリスクにさらされます。
データサイエンスツールとは
データを取り扱う人は、データの取得、クリーニング、保存、前処理を行い、それに基づいてダッシュボードやレポートなどのアーティファクトを構築する役割を担っています。そのためには、Jupyter Notebooks、Apache Spark、Hadoop、Airflow DAG、Redis、MySQL など、さまざまなツール、フレームワーク、プログラミング言語に関する知識と経験が必要です。一般的に、これらのツールは、組織内のさまざまな種類のデータ担当者が、さまざまな製品を提供するために使用されます。しかし、セキュリティの観点からは、これらのツールはすべて、攻撃者に悪用される可能性のある攻撃対象領域を作り出しています。
データサイエンスツールを標的とした攻撃観測の概要
Jupyter Notebooks など人気のあるツールを標的とした、さまざまな攻撃が確認されています。Jupyter Notebooks は、データを扱い、コードを書き、実行し、結果を可視化するためのウェブベースのユーザインタフェースです。
ほとんどの攻撃は、誤った環境設定によって最初のアクセスを取得します。アクセス権を得た後、攻撃者は Jupyter Notebooks に新しいユーザを作成したり、ssh 鍵を追加したりして、永続性を実現しようと試みました。その後、ほとんどの攻撃がクリプトマイナーを実行し、迅速な利得を得ようとしました。以下では、これらの攻撃を詳細に分析します。
検出方法と緩和策
このようなリスクを軽減し、データツールを保護するために、組織が実行できるいくつかの推奨事項があります。
- データツールへのアクセスを制御するために、トークンまたは他の認証方法を使用します。
- インターネットアクセスを完全にブロックするか、インターネットアクセスが必要な環境の場合は、ネットワークルールや VPN を使用してインバウンドトラフィックを制御することで、アプリケーションへのインバウンドトラフィックを制限します。アウトバウンドアクセスを制限することも推奨されます。例えば、Aqua プラットフォームでは、ネットワークルールを設定して、リソースへのアクセスを制限できます。
- 非特権ユーザまたはアクセス制限されたユーザでアプリケーションを実行します。
- すべての Jupyter Notebooks のユーザが明らかになっていることを確認します。SQLite3 データベースでユーザを照会できます。このデータベースは「./root/.local/share/jupyter/nbsignatures.db」のパスにあります。
また、ssh 鍵ファイルを検索して、不明なユーザや鍵を見つけることをお勧めします。 - ホスト上で実行中のプロセスを監視し、リソースをハイジャックする疑わしいプロセスやクリプトマイナーを検出します。

例えば、上のスクリーンショットでは、Python 2.7 と Python 3 というプロセスが非常に高い CPU を消費していることがわかります。実際、これらはクリプトマイナーです。通常、Python プロセスは長期間にわたって高い CPU を消費することはありませんし、少なくともそうすべきではないでしょう。もし、このような現象が長時間続くようであれば、環境が侵害され、クリプトマイナーが活動している可能性があります。これは、マシン速度の低下や、処理の中断を引き起こし、クラウドの高額請求の原因となる可能性があります。
同様に、以下のプロセス xmr は、XMRクリプトコインと表記されていることから、Monero のクリプトマイニング活動を示しています。

実行中のプロセスを手動で確認もできますが、この方法は非現実的であり、拡張性もありません。この場合、Linux の一般的なセキュリティ問題に対処するため構築された Linux 用のオープンソースのランタイムセキュリティでフォレンジックツールである Tracee を使用して、ホスト上のイベントを監視できます。GitHub には、eBPF をベースにした Linux のトレースおよびフォレンジックツールである Tracee-eBPF と、悪意のあるイベントの検出を支援するランタイムセキュリティ検出エンジンである Tracee-rules が公開されています。
例えば、後述の Reverse Shell 攻撃を検出するために Tracee を使用した場合、プロセス python3 が IPv4 アドレス 172.247.113.170、ポート 8854 でイベントソケット dup を開始したので、以下の収集データを確認できます。

Tracee-rules は、このイベントをソケットを介した Reverse Shell として検出しました。

Reverse Shell は、ファイアウォールなどのセキュリティを回避し、攻撃者がターゲットマシンへアクセスするために使用されます。この場合、攻撃対象マシンは、攻撃者のマシンへの接続を開始するものであり、攻撃者のマシンは、指定したポートで着信接続をリッスンするように設定されています。この攻撃例では、Jupyter Notebooks が侵害され、攻撃者は自分のマシンへの接続を開始するリモートコードを実行し、ターゲットに対するより良い制御を得ることができました。
疑わしいイベントや悪意のあるイベントを発生時に検出するには、大規模なチームにとって、実行時に攻撃の検出と防止を可能にする Aqua の Cloud Native Detection and Response(CNDR)がより良い解決策となり得ます。CNDR の検出能力と、CNDR が DeamBus ボットネット攻撃を阻止した方法について、詳しくはこちらをご覧ください。
データツールを狙った攻撃が横行
Jupyter Notebooks
Jupyter Notebooks は、データを取り扱う人がドキュメントを作成/共有するためのオープンソースの Web アプリケーションです。Jupyter Notebooks には、ライブコード、方程式、計算出力、可視化、その他のマルチメディアリソース、および説明テキストが1つのドキュメントに統合されています。
インターネットに接続されたデバイスのための検索エンジンである Shodan で照会したところ、インターネットを通じて到達可能な Jupyter Notebooks が 10,000 件見つかりました。その多くは認証が必要ですが、認証不要で簡単にアクセスできるものが 70件 見つかりました。
その IP アドレスとポートをブラウザに入れると、Jupyter Notebooks はホストを完全に可視化し、制御できるようになりました。誰でもアクティブディレクトリのファイルを見たり、リモートソースからファイルをダウンロードできます。

私たちは、Jupyter Notebooks のハニーポットを作成し、デフォルトのポート 8888 でリッスンし、攻撃の様子を記録しています。以下は、私たちが見た攻撃のハイライトです。
TeamTNTによる複合攻撃
以下の図に示すように、Jupyter Notebooks を攻撃する TeamTNT による活発なボットネットを発見しました。

- 公開された Jupyter Notebooks を検出し、ターミナルでスクリプトを実行
- リモート C2 サーバから攻撃用コンポーネントをダウンロードするためのスクリプトをダウンロード

- ファイル m8priv
- 3.1 ホスト上で競合するクリプトマイナープロセスの抹殺
- 3.2 クリプトマイナーのインストール
- ファイル ldm
- 4.1 ターゲットに ssh アクセス可能なバックドアを作成する
- 4.2 ホスト上で競合するクリプトマイナープロセスを停止する
- 4.3 リモートソースからTORを使用したダウンロード
- 4.4 ターゲット上の cron ジョブで永続性を持たせる
- 4.5 追加アプリケーションのインストール(wget、net-tools、zip を含む)
- 4.6 ローカル認証情報とアクセスキーの収集
- 4.7 下図に見られるように、追加の悪意あるバイナリ(1.sh と 3.sh)をダウンロード
- 4.7.1 Pty1:Tsunamiマルウェア(MD5:7d3f686801ae3f90f36aae17f7a66478)
- 4.7.2 pty2: Tsunami マルウェア(MD5: 6f3d7c01c25decca73f8e7c7d998ff4a)
- 4.7.3 pty3: Tsunami マルウェア(MD5: 1db40b7e18cf228169d2f5d73bf27ef7)
- 4.7.4 pty4: Tsunami マルウェア(MD5: 9b22dc965582572dd8f07f452228b18b)
- 4.7.5 pty5: Tsunami マルウェア(MD5: ff171712ab8816f3d7600fe75bb18052)
- 4.7.6 pty6: Tsunami マルウェア(MD5: a4f9761b5f9d8804ef4315c5ecec64f6)
- 4.7.7 pty7: Tsunami マルウェア(MD5: ebd827a6e50766508b87f51d7ce6be5c)
- 4.7.8 pty8: Tsunami マルウェア(MD5: 71e644015f646f7532c7dd2c3c847364)
- 4.7.9 pty9: Tsunami マルウェア(MD5: a45599d81cbf25b7bf0968d49c9ced68)
- 4.7.10 pty10: Tsunami マルウェア(MD5: f5271f6b20fda39c213fd9579ad7e1fb)
- 4.7.11 pty11: Tsunami マルウェア(MD5: 96364eef5116a5825e16b1c28eecb6b5)


- ファイル ptyw64: これは、Tsunami マルウェアです。
- aws2.shというファイルです。このスクリプトは、インスタンスのクラウドメタデータを照会するためのものです。取得後、TeamTNTのC2サーバにデータを流出させます。


Jupyter Notebooks に認証情報を追加
また、攻撃者が手動で Jupyter Notebooks にアクセスし、クリプトマイナーと設定ファイルをダウンロードし、マイニングプロセスを起動するという単純明快な攻撃も確認されました。

Jupyter Notebooks に認証情報を追加
また、攻撃者が「nbsignatures」テーブルに認証情報を追加する攻撃も確認されています。つまり、ユーザが署名を追加しても、攻撃者はこれらの認証情報を使ってアクセスできます。
身代金を要求するためにファイルを暗号化
私たちは、Jupyter Notebooks を標的とした初の Python ベースのランサムウェアを含む、シンプルでわかりやすい攻撃を検出しました。攻撃者は、設定ミスのある Jupyter Notebooks に手動でアクセスし、Python ファイルを開いて、そこにコードをコピーします。このコードは、暗号化パスワードとパスの2つの引数を取得し、そこからサーバのファイルシステム上を追跡していきます。さらに、2つの関数があります。1つ目はファイルシステムを通過し、2つ目はすべてを暗号化し、暗号化されていないファイルを削除します。

高度な攻撃ツール:Cobalt Strike
Cobalt Strike は、もともと倫理的なハッキングのために開発された、強力な商用攻撃型セキュリティツールです。しかし、現実にはサイバー犯罪者にも利用されています。このフレームワークは、ネットワーク攻撃、ソーシャルエンジニアリング、バイナリやコードを臨機応変に展開するメカニズムを実施することを目的とした多くの有用なツールを提供します。
私たちの研究の中で、Cobalt Strike が関与する攻撃を発見しました。攻撃者は、Jupyter Notebooks 経由でサーバにアクセスし、追跡や検出が困難なバックドア機能を持つマルウェアを含む小さなペイロードであるファイル CrossC2-test をダウンロードしました。

さらに、別のバイナリファイルが /tmp にダウンロードされましたが、これは Cobalt Strike ペイロード(MD5=d9c9c6777932a6c627a9dd34e1932efb)が含まれています。Cobalt Strike は、攻撃者がバックドアアクセス、サーバの探索、ルート権限の取得などに使用できる強力なツールです。
脆弱性を悪用して高い権限を得る
また、別の事例では、最近の2つの脆弱性を悪用して権限を昇格させようとする試みが見られました。公開された Jupyter Notebooks を侵害することで、攻撃者はサーバにアクセスし、積極的に root への権限昇格を試みました。そして、GitHub から sudoedit の脆弱性(CVE-2021-3165)と Dirty Pipe の脆弱性(CVE-2022-0847)を利用したエクスプロイトを利用しました。
攻撃者は、ターゲット環境に対するより多くの制御を実現し、攻撃の範囲を拡大するために、サーバの root 権限を求めています。我々の知る限り、この脆弱性が悪用されたケースは、今回が初めてとなります。
Reverse Shell 攻撃
新しい Jupyter Notebooks を起動し、ホストへの Reverse Shell を作成するコマンドを実行するなどの攻撃も確認されています。

JupyterLab
JupyterLab は、ノートブック、コード、データのためのウェブベースの対話型開発環境です。Linux ターミナルと Jupyter Notebooks へのアクセスを提供します。
Shodan に照会したところ、70件 以上の JupyterLab のインスタンスがインターネットに公開されていることがわかりました。そのほとんどは、認証を必要とせず、すでにマルウェアに感染していました。私たちは、JupyterLab インスタンスへのアクセスを許可するいくつかのハニーポットを作成しました。以下は、私たちが実際に目にした攻撃のサンプルです。

上のスクリーンショットでは、JupyterLab プラットフォーム上でスパムスクリプトを含む Jupyter Notebooks を作成し、GitHub から xmrig をダウンロードし、インスタンス上で実行する攻撃が確認されています。

上のスクリーンショットでは、2つの攻撃を見ることができます。そのうちの1つは、攻撃者が手動で端末にアクセスし、xmrig クリプトマイナーとその設定ファイルである Python2.7 と 1.json ファイルをダウンロードしたものです。
2つ目の攻撃は、Mirai マルウェアによる攻撃です。whoareyou.x86 というファイルには、サービス拒否攻撃(DDoS)攻撃を仕掛けるために設計された Mirai マルウェアが含まれています。攻撃者は、以下のスクリプトを使用して、Mirai をダウンロードし実行しました。


上のスクリーンショットでは、シェルスクリプトを使用してクリプトマイナーをダウンロードし、実行する攻撃が確認できます。

最後に、上のスクリーンショットでは、攻撃された JupyterLab インスタンス上で実行されているクリプトマイニングプロセスの範囲を確認できます。
CoCalc
CoCalc は、数学と研究のためにデータサイエンスと科学的 Python スタックを提供する、オンライン共同ワークスペースです。この中には、Jupyter Notebook、R Statistics、Octave を含みます。また、ウェブベースの Linux ターミナルと X11 グラフィカルデスクトップも提供しています。
ホスティングとサポートを提供する商用版と、GitHub からダウンロードできるオープンソース版があります。
Shodan に照会したところ、66件 の CoCalc インスタンスがネットワークに公開されており、そのうち 10件 は完全に公開され、未認証のアクセスが許可されていました。
これらのインスタンスの中には、攻撃者がアカウントを作成したり、既存のアカウントに匿名でログインして、Linux 端末を開けるインスタンスもありました。特権は制限されていましたが、攻撃者はこのプラットフォームを悪用して権限昇格させ、ホストへのさらなるアクセスを獲得する可能性があります。しかし、これらのホストを標的とした活発な攻撃は確認されていません。攻撃者は、このプラットフォームにあまり慣れていないか、このプラットフォームを悪用することにあまり熱心でない可能性があります。

未認証のアクセスでは、Linux ターミナルや X11 デスクトップを開くことができます。
これらのキャンペーンを MITRE ATT&CK フレームワークへマッピング
ここでは攻撃の各要素を、MITRE ATT&CK フレームワークに対応する技術へマッピングしています。
Indicators of compromise (IOCs):
