In addition to clearing system logs, an adversary may clear the command history of a compromised account to conceal the actions undertaken during an intrusion. macOS and Linux both keep track of the commands users type in their terminal so that users can retrace what they've done. These logs can be accessed in a few different ways. While logged in, this command history is tracked in a file pointed to by the environment variable HISTFILE. When a user logs off a system, this information is flushed to a file in the user's home directory called ~/.bash_history. The benefit of this is that it allows users to go back to commands they've used before in different sessions. Since everything typed on the command-line is saved, passwords passed in on the command line are also saved. Adversaries can abuse this by searching these files for cleartext passwords. Additionally, adversaries can use a variety of methods to prevent their own commands from appear in these logs such as unset HISTFILE, export HISTFILESIZE=0, history -c, rm ~/.bash_history.
MITRE ATT&CKにおいて、T1146は「Clear Command History(コマンド履歴の消去)」として定義されている「防御回避(Defense Evasion)」のテクニックです。
Linux/Unix(Bash, Zsh)やWindows(PowerShell, cmd.exe)などのシェル環境において、攻撃者が実行した不審なコマンド(偵察、横展開、マルウェア実行など)の記録ログ(ヒストリファイル)を意図的に削除・無効化する手法です。
この手法で攻撃者は、「侵害後の調査(フォレンジック)を妨害し、自身の手口や使用したコマンド・アクセス先を隠蔽すること」を実現します。
フォレンジック調査の妨害:
攻撃発覚後、セキュリティチーム(DFIR)が最初に行う「ヒストリファイル(~/.bash_history など)の確認」による行動履歴追跡を不能にします。
潜伏期間の延命:
システム管理者に後からコマンド実行履歴を見られて不審な操作(wget や chmod +x など)に気づかれるリスクを排除します。
攻撃者はシェルの標準環境変数やコマンドを利用して、履歴の記録を停止するかファイルを消去します。
侵入と対話型シェルの獲得:
SSHの不正利用やWebシェル経由でターゲット(主にLinux/Unix環境)にログインします。
コマンド履歴の無効化・削除(T1146の発動):
攻撃者は以下のようなコマンドを実行します。
rm ~/.bash_historyhistory -chistory -c でメモリ上の履歴をクリアし、rm でファイル自体を削除します。
unset HISTFILE# またはexport HISTSIZE=0セッション開始直後に unset HISTFILE を設定することで、そのセッションで行った全操作が最初からファイルに保存されないようにします。
スペースを先頭に付けたコマンド実行(Bashの仕様悪用):
HISTCONTROL=ignoreboth や ignorespace が設定されている環境では、コマンドの先頭に半角スペースを入れて実行することで、そのコマンドだけを履歴から除外させます。
PowerShell(Windows)の場合:
Remove-Item (Get-PSReadLineOption).HistorySavePath
目的の攻撃操作の実行:
履歴が残らない状態で、権限昇格やデータ持ち出し(Exfiltration)のコマンドを実行します。
ローカルファイルとしてのヒストリだけに依存せず、カーネルレベルや集中ログサーバーへリアルタイム転送する仕組みが不可欠です。
中央ログサーバーへのリアルタイム送信(最重要):
~/.bash_history などのローカルファイルは簡単に削除できるため、rsyslog や auditd(Linux Audit Daemon)を使い、実行されたすべてのコマンドライン(Syscall: execve)を発生と同時に外部の不可逆なログサーバー(SIEM等)へ即時転送します。
auditd によるコマンド実行の常時監視:
Linuxの auditd サービスを有効化し、ユーザーが実行したプロセス生成ログ(プロセスコマンドライン)をカーネル空間で記録(-a always,exit -F arch=b64 -S execve)します。これによりファイルが消されてもカーネルログに履歴が残ります。
ヒストリファイルの変更・削除権限の制限:
chattr +a ~/.bash_history(追記専用属性)を設定し、一般ユーザー権限や不正プロセスが既存の履歴を上書き・削除(rm)できないよう保護します。
「履歴の不在」自体が侵害のインジケーター(IoC)になる:
通常運用されているサーバーにおいて、突然 .bash_history が空(0バイト)になったり削除されたりする挙動自体が「システム侵害が発生した可能性」を示す強力なアラート(指示子)となります。
対話型シェルにおける基本挙動:
手動で侵入・操作を行う人間ベースの攻撃(APTやランサムウェアグループのアペレーター)において、痕跡消去のチェックリストとしてほぼ確実に行われます。
Rocke Group(暗号資産採掘マルウェア・脅威グループ):
Linuxサーバーに侵入後、マイニング用スクリプトを実行する前に unset HISTFILE や export HISTFILE=/dev/null を実行し、自身のコマンド操作痕跡を完全に隠蔽した状態で感染を広げました。
Kinsing(Docker/Kubernetes環境を狙うマルウェア):
コンテナ内へ初期侵入した際、シェルスクリプトの冒頭で history -c や rm -f ~/.bash_history を呼び出し、コンテナ管理者が事後調査(docker exec 等)を行った際に侵入経路や実行コマンドを特定できないよう妨害しました。
実務上のアドバイス:
Linuxのセキュリティ監視において、「unset HISTFILE」「export HISTSIZE=0」「history -c」「rm ~/.bash_history」 の実行(またはプロセス生成)を auditd や SIEM で検知した場合、それは高確率で第三者による侵入・痕跡消去(旧 T1144 / 現 T1070.003)の発生を意味します。
単に「履歴が消された」こと自体を追うだけでなく、カーネルログ(audit.log)やプロキシログから「その直前にどのセッション(IP/Port)からどのユーザー権限でログインされたか」をログサーバー側から即時特定してください。