改善された検索機能と監査ログを用いてDatabricksで任意のコードをスキャンする

[How to Easily Scan Databricks Workspaces for Common Vulnerabilities \- The Databricks Blog](https://databricks.com/blog/2022/07/19/scanning-for-arbitrary-code-in-databricks-workspace-with-improved-search-and-audit-logs.html)の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

# Common Vulnerabilities and Exposures (CVE)ライブラリにあるような任意の文字列のスキャンを支援するための、改善されたワークスペース検索機能と監査ログ

**我々のユーザーが脆弱性のあるライブラリを使っているのかどうかをどのように調査できるのでしょうか？**
**ユーザーがそのようなAPIを使っているのかどうかをどのように知ることができるのでしょうか？**

これらは我々が定常的にお客様からいただくタイプの質問です。

Python ctxやPHPassハイジャックのような脆弱性のあるライブラリのレポートが急増するにつれ、これらの問題が公開されたら即座に緊急の調査を行いたいというお客様のニーズは理解できるものです。彼らは、脆弱性のあるライブラリを使っているかどうかを確認し、自身の環境に悪意の兆候があるかどうかをチェックする必要があります。このような潜在的なセキュリティインシデントが発生した際には、もちろんDatabricksのインシデントレスポンスチームは常に製品や内部システムの調査を行いますが、お客様自身のコードベースでインパクトを受けるライブラリが使用されていないこと、影響を受けるバージョンを直接参照していないこと、間接的にも依存していないことを確認することはお客様の責任範囲となります。このようなシナリオにおいては、我々は通常お客さまが自身のコードでいかなる方法においてもインパクトを受けるライブラリを使用しているかどうかを評価することをおすすめしていますが、今では任意の文字列でワークスペースを検索することができます。

この記事のゴールは、ノートブック、ライブラリ、フォルダ、ファイル、リポジトリを名前や最新のサプライチェーンで使用されている脆弱性のあるライブラリなどノートブック内の任意の文字列を検索できるように、新たに改善されたワークスペース検索機能と監査機能をお知らせするものとなっています。しかし、他の物でもをなんでも検索することができます！この新たな検索機能を用いることで、脆弱性のあるライブラリに関する質問によりクイックかつ容易に答えられるようにし、攻撃者に対して先んじることができるようになります。

# 背景

お客様の人生をより簡単なものにするために、Databricksでは一般的な多くのライブラリを自動でDatabricksランタイム(DBR)に組み込んでいます。どのライブラリが同梱されているのかを確認するためには、対象のDBRバージョンの[Databricks Runtime release notes](https://docs.databricks.com/release-notes/runtime/releases.html)のSystem Environmentサブセクションをご覧ください。全てのお客さまが定期的にクラスターを再起動するだけで新たなバージョンを活用できるように、Databricksではこれらのライブラリを最新の状態に保つことに責任を持っています。Databricksにおいては、アプリケーションのセキュリティを非常に真剣に捉えています。詳細に関しては、[Security and Trust Center](http://databricks.com/trust)をご覧ください。

しかし、汎用データ分析プラットフォームとして、Databricksでは皆様の課題の解決に必要なPython、Java、Scala、Rの公開ライブラリ、プライベートライブラリをインストールできるようにしています。このため、そのようなライブラリに脆弱性がある場合は、お客様はインパクトの有無を確認するために、自身のコードベースを検索できるようになっている必要があります。Databricksとしては、定期的にインパクトを受ける可能性があるライブラリを使用していないかどうかを評価することをお勧めします。

# Databricksワークスペースで任意のコードを検索する

![](https://databricks.com/wp-content/uploads/2022/07/db-264-blog-img-1.png)
*図1: この例では、ノートブック、ライブラリ、フォルダ、リポジトリに対して**mlflow**(脆弱性のあるライブラリではありません)の名前、そして、ノートブックの中身を検索してマッチした結果のプレビューを表示しています。*

ご自身で[改善されたワークスペース検索機能](https://docs.databricks.com/release-notes/product/2022/may.html#improved-workspace-search-public-preview)を用いて、ワークスペースで検索を行うことをお勧めします。詳細に関しては[オブジェクトに対するワークスペース検索](https://qiita.com/taka_yayoi/items/e469dded5ee83ae42d24#%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E6%A4%9C%E7%B4%A2)をご覧ください。

ワークスペースのオブジェクトを検索するには、サイドバーの![](https://databricks.com/wp-content/uploads/2022/07/db-264-blog-img-2.png)Searchをクリックします。検索ダイアログが表示されます。
![](https://databricks.com/wp-content/uploads/2022/07/db-264-blog-img-3.png)
*新たに改善されたワークスペース検索機能*

テキスト文字列で検索するには、検索フィールドをタイプしてEnterを押します。あなたがワークスペースでアクセスできる全てのノートブック、ファイル、ライブラリ、リポジトリをシステムが検索します。管理者としてはワークスペースのすべてのオブジェクトを検索することができます。また、ノートブックのコマンドも検索できますが、非ノートブックファイルのテキストは検索されません。また、タイプ(ファイル、フォルダ、ノートブック、ライブラリ、リポジトリ)を指定して検索することができます。Enterを押すと、検索条件に合致するワークスペースオブジェクトがダイアログに表示されます。リストの項目をクリックすることで、その項目をワークスペースで開くことができます。
![](https://databricks.com/wp-content/uploads/2022/07/db-264-blog-img-4.png)
*図2: この例では、ノートブック、ライブラリ、フォルダ、リポジトリに対して **"ctx"** (脆弱性があると知られているライブラリです)の名前、そして、ノートブックの中身を検索してマッチした結果のプレビューを表示しています。さらに、特定ユーザーのノートブックに結果を絞り込んでいます。*

:::note info
**注意**
この記事における検索機能の挙動は、[暗号化に顧客管理キー](https://docs.databricks.com/security/keys/customer-managed-keys.html)を用いているワークスペースではサポートされていません。このようなワークスペースでは、任意の文字列でDatabricksワークスペースのスキャンを支援する[こちらのノートブック](https://databricks.com/wp-content/uploads/notebooks/db-264-scanning-arb-code.html)を活用することができます。ノートブックに関する支援が必要であればお声がけください。
:::

# 豊富な監査ログによる継続的な検知

ゼロデイ攻撃に対するセキュリティ調査が簡単であることは稀です。時には数ヶ月要することがあります。この期間、セキュリティチームは、コードに当該機能がないことを確認した後に、問題のあるライブラリがインポートされていないことを確実にするために、継続的モニタリングやアラーティングを用いて、いくつかの時点で検索を行いたいと考えるかもしれません。

今ではDatabricksのお客様は、インタラクティブな開発を通じて実行されるすべてのノートブックコマンドの豊富な監査ログ([AWS](https://docs.databricks.com/administration-guide/account-settings/audit-logs.html#configure-verbose-audit-logs)、[Azure](https://docs.microsoft.com/en-us/azure/databricks/administration-guide/account-settings/azure-diagnostic-logs#--configure-verbose-audit-logs)のマニュアルをご覧ください)を活用することができ、監査ログのデリバリーをセットアップし、[最近我々がこのトピックに触れた記事](https://databricks.com/blog/2022/05/02/monitoring-your-databricks-lakehouse-platform-with-audit-logs.html)で説明されている方法で処理を行うことで、ノートブックコマンドに対して`import ctx`のような文字列で検索を行うために、以下のような[Databricks SQL](https://databricks.com/jp/product/databricks-sql)のクエリーを使用することができます。

```sql:SQL
SELECT
  timestamp,  
  workspaceId,
  sourceIPAddress,
  email,
  requestParams.commandText,
  requestParams.status,
  requestParams.executionTime,
  requestParams.notebookId,
  result,
  errorMessage
FROM
  audit_logs.gold_workspace_notebook
 WHERE actionName = "runCommand"
 AND contains(requestParams.commandText, {{query_string}})
 ORDER BY timestamp DESC
```

しかし、これはいまだにアドホックなクエリーですね？はい。しかし、少々の修正を行うことで、前日1回以上(eventsのカウントが > 0)特定のライブラリが使用された場合にメールの通知を送信する定期的なスケジュール処理の[Databricks SQL](https://databricks.com/jp/product/databricks-sql)のアラートにこのクエリーを変換することができます。

```sql:SQL
SELECT
  date,  
  workspaceId,
  sourceIPAddress,
  email,
  requestParams.commandText,
  count(*) AS total
FROM
  audit_logs.gold_workspace_notebook
 WHERE actionName = "runCommand"
 AND contains(requestParams.commandText, "import ctx")
 AND date > current_date - 1
 GROUP BY 1, 2, 3, 4, 5
 ORDER BY date DESC
```

利用ポリシーに違反していないかどうかをセキュリティチームが調査するために十分な情を入手できるように、以下のようなカスタムアラートテンプレートと組み合わせた方が良いでしょう。

```
Alert "{{ALERT_NAME}}" changed status to {{ALERT_STATUS}}
```

前日に予期しないイベントが起きたことを示すには以下を使用します。

```
{{QUERY_RESULT_ROWS}}
```

アラートをどのように設定するのかの手順に関してはドキュメント([AWS](https://docs.databricks.com/sql/user/alerts/index.html)、[Azure](https://docs.microsoft.com/en-us/azure/databricks/sql/user/alerts/))をチェックしてください。また、SlackやPagerDutyなど他のアラート送信先に関してもチェックしてみてください([AWS](https://docs.databricks.com/sql/admin/alert-destinations.html)、[Azure](https://docs.microsoft.com/en-us/azure/databricks/sql/admin/alert-destinations))。

# まとめ

この記事では、Databricksワークスペースで任意のコードを検索するために使用する改善された検索機能について学び、脆弱性のあるライブラリをモニタリング、アラートするために監査ログを活用しました。また、脆弱性のあるライブラリの兆候をどのように捕らえるのかに関するサンプルに触れました。向こう数ヶ月で新たに投入される検索機能を楽しみにしていてください。

質問や提案は大歓迎です。[cybersecurity@databricks\.com](mailto:cybersecurity@databricks.com)からコンタクトすることができます。また、Databricksがセキュリティにどのように取り組んでいるのかに興味があるのであれば、[Security & Trust Center](https://databricks.com/trust)をチェックしてみてください。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)