Jupyter Notebookを標的とした初のPythonランサムウェアの攻撃に関する脅威の警告 #aqua #セキュリティ #python #ランサムウェア #jupyternotebooks
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2022年3月30日に公開された「 Threat Alert: First Python Ransomware Attack Targeting Jupyter Notebooks 」の日本語翻訳です。
Jupyter Notebookを標的とした初のPythonランサムウェアの攻撃に関する脅威の警告
Aqua のセキュリティ研究チームである Team Nautilus は、データエンジニアに人気のツール Jupyter Notebook を標的とした、Python ベースのランサムウェア攻撃を発見しました。攻撃者は、まず設定ミスがある環境を経由して侵入した後に、サーバ上の指定したパス上のすべてのファイルを暗号化し、実行後に自身を削除して攻撃を隠ぺいするランサムウェアスクリプトを実行しました。Jupyter Notebook は、データの分析やデータモデルの構築に使用されるため、これらの環境が適切にバックアップされていない場合、この攻撃は組織に大きな損害を与える可能性があります。
Jupyter Notebookとは
Jupyter Notebook は、データのスペシャリストがデータを扱ったり、コードを作成、実行、そして結果を可視化するために使用するオープンソースの Web アプリケーションです。通常、オンラインアプリケーションへのアクセスは、トークンやパスワードで保護したり、ingress トラフィックを制御するなどしてアクセスを制限する必要があります。しかし一部の Notebook は、認証手段を持たずに、インターネットに公開された状態であることがあります。この場合、誰でも簡単に Web ブラウザーを介して、Notebook へアクセスできるようになっています。さらに、Jupyter Notebook に組み込み機能により、ユーザはサーバへアクセス可能なシェルコンソールを実行することもできます。
Jupyter Notebookランサムウェア攻撃の解説
我々は、インターネット上に、Jupyter Notebook アプリケーションのハニーポットを設置してみました。以下は、観測された攻撃のキルチェーンです。
攻撃者は、設定ミスがあるアプリケーション経由でサーバにアクセスし、攻撃をサポートするライブラリやツール(例えば、暗号化ツール)をダウンロードします。そして、Python コードを貼り付けてランサムウェアスクリプトを手動で作成し、スクリプトを実行しました。
以下は、我々のハニーポットへの攻撃で実際に使用されたコードです。
我々のハニーポットは、実際の企業環境をシミュレートするために設計されており、実際の Jupyter Notebook と攻撃者が暗号化できる RAW データファイルが含まれています。攻撃が被害を拡大させる前に停止させた後に、この攻撃をラボでシミュレートして調査することにしました。下のスクリーンショットでは、暗号化ツールの実行の様子を見ることができます。Python ファイル(ct.py)は、攻撃を隠ぺいするために、実行後に自分自身を削除するように設計されていることに注意してください。
この攻撃では、ランサム(身代金)は提示されませんでした。攻撃者が攻撃の実験をしていたか、攻撃が完了する前にハニーポットがタイムアウトしたかのどちらかだと考えています。
全体として、Locky、Ryuk、WannaCry、あるいは GandCrab のような Ransomware-as-a-Service のような高度な技術を用いたランサムウェアとは異なり、この攻撃はシンプルなものです。
また、使用されている商標が独特であることから、攻撃手法に見覚えがあると感じました。攻撃の始めに、/tmp ディレクトリに f1gl6i6z という名前のテキストファイルをダウンロードし、サーバが脆弱であるかどうかを確認しています。このファイルには、「bl*t」という単語が含まれており、攻撃者がロシアを起源としている可能性を示しています。このファイルは、Jupyter Notebook や JupyterLab 環境を標的とした多くのクリプトマイニング攻撃で以前から使用されていることが確認されています。
Shodan のクイッククエリでは、認証を必要としない Jupyter Notebook が、インターネット上に約 200 個あることがわかります。当然、そのうちのいくつかはハニーポットになりえますが、すべてではありません。この攻撃は、これらのサーバ上でランサムウェアを実行するキャンペーンを示すことができると考えています。
Traceeを使った攻撃の検出
我々のハニーポットは、Linux の一般的なセキュリティ問題へ対処するために構築された、Linux 用のオープンソースのランタイムセキュリティおよびフォレンジックツールである Aqua Security の Tracee によって、継続的に監視されています。GitHub には、eBPF 技術に基づく Linux のトレースとフォレンジックをおこなうツール Tracee-eBPF と、悪意のあるイベントを検出できるランタイムセキュリティ検出エンジン Tracee-rules が公開されています。
今回の攻撃で Tracee は、バイナリと Python ファイルのオンザフライでのドロップと実行という2つのドリフトイベントを検出しました。ターゲット環境にある既存のツールを使用する「住み分け」的なアプローチは一般的ですが、攻撃者はしばしば独自のツールを持ち込んで適用することを考えます。Tracee は、このような事象を検知するために設計されました。今回のケースでは、攻撃者は nano バイナリをダウンロードして cpt.py というファイルを作成し、このバイナリを cpt.py スクリプトと一緒に実行しました。
これら特有のふるまいの検知は、オープンソースの Tracee-rules では利用できませんが、実行時に攻撃を検知・防止できる Aqua の Cloud Native Detection and Response(CNDR)ソリューションには含まれています。CNDR の検出能力と、CNDR が DeamBus ボットネット攻撃を阻止した方法については、こちらをご覧ください。
MITRE ATT&CKフレームワークへの攻撃のマッピング
ここでは、攻撃の各要素を MITRE ATT&CK フレームワークの対応する技術にマッピングしています。
取るべきアクション
このようなリスクを軽減し、データアプリケーションを保護するために、いくつかの推奨事項があります。
Jupyter Notebook 推奨事項
- データ開発アプリケーションへのアクセスを制御するために、トークンまたは他の認証方法を使用します。
- 転送中のデータを保護するために SSL を使用していることを確認します。
- インターネットアクセスを完全にブロックするか、インターネットアクセスが必要な環境であれば、ネットワークルールや VPN を使用して受信トラフィックを制御することにより、アプリケーションへの受信トラフィックを制限します。また、アウトバウンドアクセスを制限することも推奨されます。例えば、Aqua Platform では、ネットワークルールを設定して、リソースへのアクセスを制限できます。
- 非特権ユーザまたは制限された特権を持つユーザでアプリケーションを実行します。
- Jupyter Notebook のユーザをすべて把握しておくことです。Sqlite3 データベースでユーザを照会できます。このデータベースは「./root/.local/share/jupyter/nbsignatures.db」のパスにあります。サーバへの SSH アクセスが有効になっている場合、SSH 認証鍵ファイルを調べて、すべての鍵を把握していること、不明なユーザや鍵がないことを確認します。
セキュリティに関する一般的な推奨事項
- 重要な業務システムのバックアップを定期的かつ継続的に行い、データの損失を防ぎます。
- 最小権限アクセス原則を環境全体に適用します。
- サイバーセキュリティの基本的な衛生管理をします。これは、従業員が誤って残してしまう可能性のあるセキュリティギャップ(例えば、パッチの欠落やデフォルトパスワード)を回避するための基本です。
- IT およびセキュリティ担当者が常に警戒、監視を怠らず、顧客、プロセス、システムを保護するために真摯に働く準備ができていることを確認します。
クラウドネイティブ環境での推奨事項
- 攻撃者がネットワークにアクセスし、侵害するためのエントリポイントになりうるエクスポージャ、脆弱性、設定ミスを特定します。
- 実行中のすべてのワークロードをスキャンして、悪用につながる既知の重大な脆弱性を発見し、重点的にパッチを適用して緩和します。Trivy などの信頼できるオープンソーススキャナを使用できます。
- CI/CD パイプラインの脆弱性をスキャンし、新たな脆弱性が発生しないようにします。
- Tracee などのオープンソースツールを使用して、ワークロードの実行時の疑わしい動作や悪意のある動作をスキャンします。