Systemd services can be used to establish persistence on a Linux system. The systemd service manager is commonly used for managing background daemon processes (also known as services) and other system resources.(Citation: Linux man-pages: systemd January 2014)(Citation: Freedesktop.org Linux systemd 29SEP2018) Systemd is the default initialization (init) system on many Linux distributions starting with Debian 8, Ubuntu 15.04, CentOS 7, RHEL 7, Fedora 15, and replaces legacy init systems including SysVinit and Upstart while remaining backwards compatible with the aforementioned init systems.
Systemd utilizes configuration files known as service units to control how services boot and under what conditions. By default, these unit files are stored in the /etc/systemd/system and /usr/lib/systemd/system directories and have the file extension .service. Each service unit file may contain numerous directives that can execute system commands.
Adversaries have used systemd functionality to establish persistent access to victim systems by creating and/or modifying service unit files that cause systemd to execute malicious commands at recurring intervals, such as at system boot.(Citation: Anomali Rocke March 2019)(Citation: gist Arch package compromise 10JUL2018)(Citation: Arch Linux Package Systemd Compromise BleepingComputer 10JUL2018)(Citation: acroread package compromised Arch Linux Mail 8JUL2018)
While adversaries typically require root privileges to create/modify service unit files in the /etc/systemd/system and /usr/lib/systemd/system directories, low privilege users can create/modify service unit files in directories such as ~/.config/systemd/user/ to achieve user-level persistence.(Citation: Rapid7 Service Persistence 22JUNE2016)
T1501 は、Linuxのサービス管理機構を悪用した自動実行手法「Systemd Service(Systemdサービスの悪用)」として定義されています。
この手法で攻撃者は、「Linuxサーバーが起動した瞬間から、ユーザーのログイン状態に関係なく、OSの最高権限(root)を伴ったバックドアをバックグラウンドで完全常駐させること」を実現します。
最高権限(root)での安定稼働:
Systemdサービスは通常、システムを管理する最高権限(root)で実行されます。そのため、仕込まれたマルウェアも自動的にroot権限で動作し、セキュリティツールの妨害やシステム内での完全な自由を手に入れます。
強固な永続化(自動再起動機能の悪用):
Systemdには「プロセスが何らかの理由で落ちたら自動で再起動する(Restart=always など)」という便利な機能があります。攻撃者はこれを悪用するため、管理者がマルウェアのプロセスを強制終了(kill)しても、数秒後にはシステムが親切にマルウェアを自動復活させてしまうゾンビのような状態を作ることができます。
Systemdサービスは、特定のフォルダ内に配置された .service という拡張子の設定ファイル(ユニットファイル)で管理されています。攻撃者はここに独自のファイルをねじ込みます。
初期侵入と管理者権限の確保:
Webアプリケーションの脆弱性(RCEなど)を突いてLinuxサーバーに侵入し、他の脆弱性を悪用して管理者権限(root)へと昇格します。
マルウェア(バイナリやスクリプト)の配置:
遠隔操作用ツール(RAT)や仮想通貨マイニング用のプログラム(例: .sshd や kswapd など、正規プロセスを装った名前)を、/usr/local/bin/ などの目立たないフォルダに配置します。
悪意あるサービスファイルの作成・設置:
システム全体を管理する以下のいずれかのSystemd用フォルダに、新しいサービスファイル(例: com.system.security.service など)を作成します。
/etc/systemd/system/ または /lib/systemd/system/ファイル内には以下のような「永続化設定」を記述します。
``` [Unit] Description=System Security Daemon # もっともらしい説明文
[Service] Type=simple ExecStart=/usr/local/bin/マルウェアのパス # 手順2の不正プログラムを指定 Restart=always # プロセスが落ちたら即座に再起動させる
[Install] WantedBy=multi-user.target # OS起動時に自動実行させる設定
```
``` systemctl daemon-reload systemctl enable com.system.security.service systemctl start com.system.security.service
```
Systemdフォルダのファイル整合性と、サービス登録時のコマンドラインを監視するのが最も効果的です。
Systemdフォルダのファイル整合性監視(FIM / 最重要):
以下のフォルダ配下で、新しい .service ファイルが作成されたり、既存のファイルが変更されたりする挙動を監視・アラート化します。通常のシステム運用でも、新しいパッケージのインストール時以外でここにファイルが増えることはありません。
/etc/systemd/system//lib/systemd/system/systemctl コマンドのログ監視:
auditd などのツールを用い、systemctl enable や systemctl start、および systemctl daemon-reload といった、自動起動設定を有効化するためのコマンド実行履歴を常時記録・監査します。
不審なプロセスの親子関係のチェック:
Systemdの親プロセスである systemd (PID 1) から直接起動しているプロセスの中に、身に覚えのないバイナリや、一時フォルダ(/tmp や /dev/shm)から呼び出されている怪しいスクリプトがないかをEDRでチェックします。
「ゾンビ化」するマルウェア:
先述の通り Restart=always 設定が仕込まれているケースが非常に多く、管理者が「怪しいプロセスを見つけたから kill -9 [PID] で落とした」だけでは、瞬時に別PIDで蘇るため、大元のサービス設定ファイル自体を無効化(systemctl disable)して削除しなければ根絶できません。
マスカレード(偽装)の多用:
攻撃者は malware.service のような名前は絶対に使いません。syslogd.service や cron-update.service、network-manager.service のように、Linuxに最初から入っていそうな正規のシステムデーモンに酷似した名前(マスカレード)をつけ、大量の正規サービスの中に紛れ込ませる手口を徹底します。
CWE-15: External Control of System or Configuration Setting(システムまたは構成設定の外部制御)
OSの起動や常駐サービスを管理するSystemdの構成ファイルが外部から改ざんされ、実行フローを乗っ取られてしまう設計・運用の不備。
CWE-732: Incorrect Permission Assignment for Critical Resource(重要なリソースに対する不適切なアクセス権限の割り当て)
本来であれば厳重に保護されるべき /etc/systemd/system/ などのフォルダや、既存のサービスファイルに対する書き込み権限が適切でなく、特権を持つ(または昇格した)攻撃者に改ざんを許してしまう問題。
Linuxサーバーを狙うあらゆるAPT(国家系ハッカー)や、ボットネット、暗号資産マイニングマルウェアにとって「必須」と言えるほど定番の手法です。
Linuxサーバーで「原因不明の高負荷が続いている」「怪しいプロセスを殺しても即座に復活する」という場合は、ターミナルで以下のコマンドを叩き、登録されているサービスの一覧と状態を確認してください。
``` systemctl list-unit-files --type=service
```
各サービスの .service ファイルの実体を確認し、ExecStart= に指定されているバイナリのパスが本当に正規のもの(/usr/bin/ ではなく /tmp/ や不自然な隠しフォルダになっていないか)を点検することが、Systemdを悪用した潜伏を暴くための最も確実な手順となります。
この攻撃手法を利用する脅威アクターは登録されていません。