This post is also available in: English (英語)
概要
本稿は、悪意のあるソフトウェアにおける PAM (Pluggable Authenticaton Modules) の API (application programming interface) 利用について解説します。また、サンドボックス環境での PAM API 監視がなぜ役に立つのかについても提示します。
PAM というのは、Linux システムで認証 (authentication) や認可 (authorization) に広く使われているフレームワークです。Linux システムでは、よく使われるアプリケーションやサービスの多くが PAM に依存しており、認証に PAM API を使っています。たとえば、SSH サービスや GNOME ディスプレイ マネージャー (GDM)、システム サービスの sudo なども PAM API を使っています。
PAM の設計は柔軟でモジュール式です。このため、マルウェアの PAM API を認証プロセスのインターセプトや操作に使いたいと考える攻撃者にとって、PAM は魅力的な標的になっています。
Advanced WildFire for Linux は、クレデンシャル (資格情報) へのアクセスなどの潜在的なセキュリティ脅威を確実に特定して迅速に対処するために、PAM API の使用状況を監視し、ログに記録します。
関連する Unit 42 のトピック | Sandbox, Linux |
概要
PAM は Linux システム用の柔軟なモジュール式の認証フレームワークで、ユーザーの認証・認可の管理を一元的に行う方法を提供してくれます。PAM のモジュール設計は、特定の認証・認可タスクを処理する共有オブジェクト ライブラリーである「pluggable modules (プラグイン可能なモジュール)」の概念に基づいています。これらのモジュールは個別に開発できて、PAM フレームワークにプラグインすれば機能を拡張できます。
PAM モジュールの一例として、pam_unix があげられます。このモジュールは、昔ながらの Unix スタイルのパスワード ファイル (/etc/passwd と /etc/shadow) を使った認証・認可タスクを処理します。このモジュールを PAM フレームワークにプラグインすれば、アプリケーションが Unix のパスワードに基づいてユーザーを認証できます。
PAM フレームワークには中心となるライブラリー (libpam) があり、このセントラル ライブラリーがさまざまな PAM モジュールと通信しています。認証や認可を必要とするアプリケーションは、PAM API を使ってこのセントラル ライブラリーと対話し、それを受けてセントラル ライブラリーがそれらのタスクを適切なモジュールに委任します。要するに、libpam は PAM モジュール (たとえば pam_unix.so) のロードと管理を担い、アプリケーション − PAM モジュール間の通信を支えています。
Linux システムでは、よく使われているアプリケーションやサービスの多くが PAM に依存しており、認証に PAM の API を使っています。たとえば、SSH サービスや GNOME ディスプレイ マネージャー (GDM)、システム サービスの sudo なども PAM API を使っています。図 1 は、PAM を使った SSH の認証プロセスを示したものです。
攻撃者は、PAM のモジュール性と柔軟性を悪用し、認証プロセスのインターセプトや操作を行ってきました。マルウェアは標的システムのセキュリティ侵害に PAM API を使ってきました。
マルウェアにおける PAM API の利用法
以下、ユーザー クレデンシャルのログの取得やリモート アクセスの確立に PAM API を使うマルウェア ファミリーの一例を取り上げます。
Orbit マルウェア
Orbit マルウェアは 2022 年に発見されました。このマルウェアはさまざまな共有オブジェクト ライブラリーの API をフックしますが、PAM API もその対象の 1 つです。Orbit マルウェアのペイロードは、pam_open_session() API、pam_authenticate() API、pam_acct_mgmt() API をフックして、被害者の SSH パスワードをファイルに記録します。
pam_open_session() API は認証が成功した場合に対象のユーザー用の新たなセッションを開始します。pam_authenticate() API はユーザー認証プロセスを処理します。pam_acct_mgmt() API はユーザー アカウント情報を管理していて、アカウントの有効期限は切れていないか、そのユーザーは特定の時間に対象システムへのアクセスを許可されているか、といったことを確認します。
Azazel ルートキット
Azazel ルートキットは、古い Linux カーネルを狙うオープンソースのルートキットで、LD_PRELOAD 技術をベースにしています。図 2 は、このルートキットが PAM API (pam_open_session()、pam_authenticate()、pam_acct_mgmt()) をどのように使ってリモートからの被害マシン侵入を実現しているかを示したものです。
Derusbi マルウェア
Derusbi は、Linux と Windows システムの両方を狙うことで知られるマルウェア ファミリーです。脅威アクターは主に、標的システムへのリモート アクセスの取得・維持のために Derusbi を使っています。これにより、アクターは機微情報の窃取や偵察の実施などの悪意のあるアクティビティを実行できます。Derusbi マルウェアもまた LD_PRELOAD 技術を採用しています。これによって悪意のある共有オブジェクトライブラリーをロードし、このライブラリーに PAM API をエクスポートさせています。
Skidmap マルウェア
Skidmap マルウェア は 2019 年に初めて確認されました。これは主に Linux システムをクリプトマイニングのために狙います。被害マシンにアクセスするため、Skidmap は対象マシン上の正規の pam_unix.so を悪意のあるライブラリーに置き換えます。この悪意のある pam_unix.so ファイルは特定のパスワードを指定すればどんなユーザーでも受け入れます。このため、攻撃者はマシンに任意のユーザーとしてログインできます。
結論
PAM は Linux システムには欠かせないコンポーネントです。Linux システムはこれがあるおかげで、標準化され、柔軟で、安全なモジュール式フレームワークでユーザー認証を行えています。安全な認証システムを維持し、機微データを保護するには、サンドボックス環境で PAM API を監視することが重要です。
安全かつ隔離された環境で、ほかの潜在的に不審なアクティビティとともに PAM API を監視することは、PAM API 経由で認証プロセスを改ざんしようとする悪意のある試みを検出するうえで有効です。LD_PRELOAD 環境変数の使われかたや、関連するイベントをよく観察することで、攻撃者が PAM API を使って認証プロセスに干渉する可能性のあるインスタンスを特定できます。
パロアルトネットワークスの Advanced WildFire for Linux は、クレデンシャルへのアクセスなどの潜在的なセキュリティ脅威を確実に特定して迅速に対処するために、PAM API の使用状況を監視し、ログに記録します。
Advanced WildFire による PAM アクティビティの捕捉
パロアルトネットワークスの Advanced WildFire for Linux は、クレデンシャルへのアクセスなどの潜在的なセキュリティ脅威を確実に特定して迅速に対処するために、PAM API の使用状況を監視し、ログに記録します。図 3 のグラフは、WildFire が検出した PAM API を使うマルウェアの発生状況 (6 か月間) を示しています。
パロアルトネットワークスは、ファイル サンプルや IoC (侵害指標) をふくむ調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細は Cyber Threat Alliance にてご確認ください。
IoC (侵害指標)
Azazel マルウェア ファミリー
- SHA256 ハッシュ: 2ad5993cf4db52ef72e299590d79dd7414bc3b119f5d8be8274ad89bec4cbbae