On Linux and macOS systems, multiple methods are supported for creating pre-scheduled and periodic background jobs: cron, (Citation: Die.net Linux crontab Man Page) at, (Citation: Die.net Linux at Man Page) and launchd. (Citation: AppleDocs Scheduling Timed Jobs) Unlike Scheduled Task/Job on Windows systems, job scheduling on Linux-based systems cannot be done remotely unless used in conjunction within an established remote session, like secure shell (SSH).
System-wide cron jobs are installed by modifying /etc/crontab file, /etc/cron.d/ directory or other locations supported by the Cron daemon, while per-user cron jobs are installed using crontab with specifically formatted crontab files. (Citation: AppleDocs Scheduling Timed Jobs) This works on macOS and Linux systems.
Those methods allow for commands or scripts to be executed at specific, periodic intervals in the background without user interaction. An adversary may use job scheduling to execute programs at system startup or on a scheduled basis for Persistence, (Citation: Janicab) (Citation: Methods of Mac Malware Persistence) (Citation: Malware Persistence on OS X) (Citation: Avast Linux Trojan Cron Persistence) to conduct Execution as part of Lateral Movement, to gain root privileges, or to run a process under the context of a specific account.
The at program is another means on POSIX-based systems, including macOS and Linux, to schedule a program or script job for execution at a later date and/or time, which could also be used for the same purposes.
Each launchd job is described by a different configuration property list (plist) file similar to Launch Daemon or Launch Agent, except there is an additional key called StartCalendarInterval with a dictionary of time values. (Citation: AppleDocs Scheduling Timed Jobs) This only works on macOS and OS X.
T1168は「Local Job Scheduling(ローカルジョブスケジューリング)」として定義されていた、LinuxおよびmacOS環境における極めて一般的な自動実行・永続化手法です。
LinuxやmacOSに標準搭載されているジョブスケジュール機能(cron や at など)を悪用し、特定の時間や一定の間隔(例:毎日深夜2時、または1時間ごと)でマルウェアを自動実行させる手法です。
この手法で攻撃者は、「24時間365日、自分が端末の前にいなくても、システムが勝手にバックドアを起動してC2サーバーへ接続してくれる環境」を構築します。
確実な永続化:
セキュリティ担当者によってマルウェアのプロセスが強制終了されたり、サーバーが再起動されたりしても、指定した時間が来ればスケジュール機能によってマルウェアが自動的に再生成・実行(ゾンビ化)されます。
特権の獲得と便乗:
システム全体のスケジュール設定を書き換えることができれば、マルウェアを最初から root権限(最高権限) で定期実行させることが可能になります。
LinuxやmacOSで最も一般的に使われる常駐型の定期実行システムです。
仕組み:
各ユーザーは crontab -e コマンドで自分用の設定(タスク)を書くことができます。また、システム全体に影響する /etc/crontab や /etc/cron.d/ などのディレクトリが存在します。
攻撃の例:
攻撃者は以下のような1行を設定ファイルに滑り込ませます。
* * * * * /tmp/.backdoor_agent (※1分ごとにバックドアを実行する設定)
cron が「定期的(繰り返し)」に実行するのに対し、at は「指定した未来の時刻に1回だけ」実行するコマンドです。
攻撃の例:
echo "/tmp/.backdoor_agent" | at 23:00 (※今夜23時に1回だけ実行)
使われ方:
攻撃者がその場での怪しい挙動(ログ)を分散させるため、「自分がログアウトした数時間後に不審なスクリプトを単発実行させる」といったタイムボム的な仕掛けに悪用されます。
一般ユーザー権限でもそのユーザー自身のスケジュール(crontab)は書き換えられますが、root権限を奪取した後はより強固な仕込みが行われます。
侵入:
脆弱性を突くなどして、Linux/macOSサーバーに侵入します。
スケジュールの改ざん:
一般ユーザー権限:
crontab -e を裏で実行し、自身のホームディレクトリ内にあるマルウェアを定期実行するよう追記。
管理者権限(root):
システム全体の共通フォルダである /etc/cron.hourly/(毎時実行)や /etc/cron.daily/(毎日実行)の中に、悪意あるシェルスクリプトを直接設置。
自動実行と通信の維持:
攻撃者が接続を切った後も、OSの cron デーモンが設定を忠実に守り、定刻になるとバックグラウンドでマルウェアを起動してC2サーバーへとリバースシェルを繋ぎにいきます。
「設定ファイルの変更監視」と「スケジュール機能の利用制限」が有効です。
Cron関連ファイルの整合性監視(FIM):
以下のシステムフォルダおよび設定ファイルに対する予期せぬ変更・新規ファイル作成を常時監視します。通常のシステム運用でも、ここが頻繁に書き換わることはありません。
/etc/crontab/etc/cron.d//etc/cron.daily/ / /etc/cron.weekly/ / /etc/cron.monthly//var/spool/cron/crontabs/ (ユーザー個別のcronが保存される場所)アクセス制御(ホワイトリスト化):
Linuxには、cronやatの使用を許可・禁止するユーザーを指定する cron.allow / cron.deny や at.allow / at.deny というファイルがあります。業務で定期実行が不要な一般ユーザーや、Webアプリケーションを実行しているシステムアカウント(www-data や apache など)によるスケジュール登録をあらかじめ禁止しておきます。
プロセスログの監査:
auditd などの監査ツールを使い、crond から派生した子プロセスが、一時フォルダ(/tmp や /dev/shm)から怪しいスクリプトや外部通信(curl、wget など)を呼び出していないか監視します。
Linux環境を狙うサイバー犯罪(特に仮想通貨の不正マイニングやDDoSボット)における絶対的な定番手口です。
Linux.Wifatch / Kinsing (マイナー系マルウェア):
クラウド上の不完全に管理されたDockerやKubernetes、Webサーバーの脆弱性を突いて侵入するマルウェア「Kinsing」などは、侵入するとすぐに crontab を書き換えます。これにより、管理者がマイニングプロセス(CPUを高負荷にする不正プログラム)を強制終了しても、数分後には自動的に復活して再びマイニングを再開する永続性を確立します。
高度なAPT攻撃:
長期間にわたって組織のネットワークに潜伏する国家系のハッカー集団も、バックドアの生存確認(ビーコニング)を確実に行うための「保険」として、このローカルジョブスケジュールを他の永続化手法と組み合わせて設定することが多々あります。
Linuxサーバーの調査(フォレンジック)で「プロセスをキルしても、なぜか定期的に復活してくる」という怪奇現象に遭遇した場合、原因の9割はこの T1168 / T1053(主にcron)です。
まずは落ち着いて crontab -l(現在のユーザーの確認)を実行し、さらに管理者権限で ls -la /var/spool/cron/crontabs/ や /etc/cron* を確認して、システム内に埋め込まれた「定期実行のタイマー」を解除することが初動対応の鉄則となります。
この攻撃手法に関連する CVE は登録されていません。