MENU

バックドアとは?攻撃者が仕掛ける隠し通路の仕組みと検出・除去方法をわかりやすく解説

「管理しているサーバーに誰かが侵入しているかもしれない」「マルウェア感染後、本当に完全に除去できているか自信がない」――そう感じているエンジニアは少なくありません。

その不安の根拠の一つが、バックドアの存在です。バックドアとは、攻撃者がシステムへの不正アクセス経路をこっそり仕掛ける手法で、正規の認証を迂回して再侵入できるように設計されています。一度設置されると、適切な対処をしない限り攻撃者は何度でも戻ってくることができます。

この記事では、バックドアの定義・設置の仕組み・種類から、実際に検出・除去するための具体的な手順まで、現場で使えるレベルで解説します。「感染後の完全排除」を目指す情シスの方にとって、役立つ内容をまとめています。

バックドアとは?攻撃者が仕掛ける隠し通路の仕組みと検出・除去方法をわかりやすく解説 - 解説

目次

バックドアとは?

バックドア(Backdoor)とは、攻撃者がシステムに密かに設置した「裏口」のことです。正規のログイン画面を使わずに、管理者の目をかいくぐってシステムへ侵入できるように作られています。

本来「バックドア」という言葉はソフトウェア開発者がデバッグや保守目的で設けたアクセス手段を指すこともあります。しかし一般的なセキュリティの文脈では、攻撃者が不正に設置した隠し通路を指します。

バックドアが怖い理由は、その持続性(Persistence)にあります。マルウェアが検出・除去されても、バックドアが残っていれば攻撃者はいつでも復帰できます。また、動作が極めて静かで、通常の運用ログに溶け込みやすいため、気づかれないまま長期間潜伏するケースもあります。

バックドアが設置される仕組み

バックドアは、どのようにしてシステムに仕込まれるのでしょうか。主な経路を整理します。

1. マルウェア感染による設置

もっともよく見られるパターンです。フィッシングメールの添付ファイルや悪意あるサイトを通じてマルウェアが実行されると、そのマルウェアがシステム内部にバックドアを設置します。RAT(リモートアクセス型トロイの木馬)はその典型例で、感染後に攻撃者のC2サーバーへ接続し、遠隔から命令を受け付ける仕組みを作り上げます。

2. 脆弱性を突いた直接設置

WebアプリケーションのSQLインジェクションやリモートコード実行(RCE)などの脆弱性を悪用して、攻撃者がWebシェルやSSHの公開鍵を直接設置するケースもあります。特にWebサーバーには、正規のファイルに偽装したWebシェルが設置されることが多く、HTTPリクエストを使ってOSコマンドを実行できる状態が作られます。

3. サプライチェーン経由での設置

利用しているソフトウェアや依存ライブラリの改ざんを通じて、バックドアが混入するケースもあります。開発環境や本番環境で使うパッケージが汚染されていた場合、運用側では検知が困難です。ファイルレスマルウェアと組み合わせて使われると、ディスクに明確な証拠を残さないこともあります。

4. 内部犯行による設置

退職した従業員や悪意を持つ内部関係者が、在職中にバックドアを仕込むケースもゼロではありません。システム管理者権限を持つ人物が関与すると、痕跡を消しやすく発覚が遅れることもあります。

バックドアの主な種類

バックドアにはいくつかの種類があります。特徴を整理しておくと、検出の際に役立ちます。

・Webシェル: Webサーバーに設置されるスクリプトファイル(PHP・ASP・JSPなど)。HTTPリクエスト経由でOSコマンドを実行できる。ファイル名を正規のCMSファイルに偽装されることが多い
・リバースシェル: 侵害されたサーバー側から攻撃者のサーバーへ接続を開始する。ファイアウォールのアウトバウンドが開いていれば通過しやすい
・SSH不正公開鍵: 攻撃者の公開鍵を`authorized_keys`に追加することで、パスワードなしにSSH接続できるようにする。設定ファイルの変更なので見落としやすい
・不正なcronジョブ: 定期的にC2サーバーへ接続するスクリプトをcronに登録する。再起動後も自動で起動するため持続性が高い
・systemdサービス登録: 不正なサービスをsystemdに登録して起動時に自動実行させる。正規サービスに似た名前を使って偽装されることがある
・rootkit: カーネルレベルで動作し、プロセスやファイルをOS自体から隠蔽するバックドア。検出が特に難しい

バックドアを検出する方法

バックドアの検出は、単一の手段では不十分です。複数の視点から確認することが重要です。

1. 不審なネットワーク接続の確認

バックドアは通常、外部のC2サーバーへ定期的に接続します。`ss`や`netstat`を使って、確認できていない外部IPへの接続がないかチェックします。

# ESTABLISHEDな外部接続を確認する ss -tnp | grep ESTAB # リッスン中のポートとプロセスを確認する ss -tlnp # 外部接続を全件確認する(netstat版) netstat -an | grep ESTABLISHED

Linuxの不審プロセス・ネットワーク接続を調査する方法も参考にしてください。普段から「正常な接続先」を把握しておくことが、異常の発見につながります。

2. 不審なプロセスとサービスの確認

常駐プロセスに見慣れないものがないか確認します。特に、実行パスが`/tmp`・`/dev/shm`・`/var/tmp`など一時ディレクトリを指しているプロセスは要注意です。

# 全プロセスの実行パスを確認する ps auxf # 実行ファイルのパスを確認する(/tmpなど一時ディレクトリからの起動を探す) ls -la /proc/*/exe 2>/dev/null | grep -E '/tmp|/dev/shm|/var/tmp' # systemdサービス一覧を確認する systemctl list-units --type=service --state=running

3. ファイルシステムの変更確認

最近変更されたファイルを探します。特にWebサーバーのドキュメントルートや、`/etc`・`/usr/bin`・`/usr/sbin`などの重要ディレクトリに不審なファイルがないか確認します。

# 過去24時間以内に変更されたファイルを探す(/varと/tmpを対象に) find /var /tmp /dev/shm -mtime -1 -type f 2>/dev/null # Webディレクトリ内で最近変更されたPHPファイルを探す find /var/www -name "*.php" -mtime -7 2>/dev/null # setuidビットを持つファイルを確認する(正規以外があれば要調査) find / -perm -u=s -type f 2>/dev/null

ファイルの整合性チェックには、AIDE(Advanced Intrusion Detection Environment)のようなツールが有効です。事前にベースラインを取得しておけば、ファイルの改ざんをハッシュ値で検出できます。

4. ユーザーアカウントとSSH鍵の確認

不正なユーザーアカウントの追加や、`authorized_keys`への不正な公開鍵の追加がないか確認します。

# シェルが割り当てられているユーザーを確認する grep -v '/nologin\|/false' /etc/passwd # 全ユーザーのauthorized_keysを確認する find /home /root -name "authorized_keys" 2>/dev/null -exec cat {} \; # UID 0(rootと同等)を持つユーザーを探す awk -F: '$3 == 0' /etc/passwd # sudoers設定に不正な追加がないか確認する cat /etc/sudoers && ls /etc/sudoers.d/

5. cronジョブとスタートアップスクリプトの確認

# 全ユーザーのcronジョブを確認する for user in $(cut -f1 -d: /etc/passwd); do echo "=== $user ==="; crontab -u $user -l 2>/dev/null done # システムワイドなcronを確認する ls -la /etc/cron* /var/spool/cron/

バックドアを除去する手順

バックドアを発見したら、除去の手順は「隔離 → 証拠保全 → 除去 → 再侵入経路の封鎖 → 再確認」の順で行います。

一点注意してほしいのは、「バックドアを削除するだけでは不十分」という点です。バックドアが設置されたということは、何らかの侵入経路(脆弱性・認証情報漏洩など)が使われたはずです。その侵入経路を特定・封鎖しない限り、再度同じ手法でバックドアを設置されるリスクが残ります。

感染が疑われる場合の対応については、権限昇格の仕組みと防御策も合わせて確認することをお勧めします。攻撃者はバックドア設置の前後に権限昇格を試みることが多いためです。

中小企業でも今日からできること

バックドアの予防には、日常的な運用の積み重ねが重要です。

・定期的なファイル整合性チェック: AIDEやtripwireで重要ディレクトリのハッシュ値を定期的に検証する。変更があればすぐに気づける
・不審な外部通信の監視: ファイアウォールのアウトバウンドルールを「許可リスト方式」に切り替え、業務上不要な外部接続を遮断する
・SSH鍵の棚卸し: `authorized_keys`に登録されている公開鍵を定期的に確認し、退職者や不明な鍵を削除する
・特権アカウントの最小化: root直接ログインを禁止し、sudoの利用権限を業務上必要な最小限に絞る
・ソフトウェアの定期更新: 公開されている脆弱性の悪用を防ぐため、OSとアプリケーションのパッチを適時適用する
・ログの集中管理: ローカルのログのみでは攻撃者に改ざんされるリスクがある。リモートログサーバーへの転送を設定する

想定例として、月に1回「新規ユーザーの追加がないか」「authorized_keysに見覚えのない鍵がないか」「最近変更されたシステムファイルがないか」の3点だけを確認するチェックリストを作るだけでも、早期発見の確率が格段に上がります。

よくある誤解と注意点

【誤解1】ウイルス対策ソフトがあれば検知できる

一般的なウイルス対策ソフトのシグネチャベース検知は、既知のマルウェアを検出する仕組みです。攻撃者が手動で設置したSSH鍵の追加やcronジョブの登録は、「悪意ある動作」として検知されないことがほとんどです。ファイル整合性チェックやログ監視との組み合わせが不可欠です。

【誤解2】バックドアはOSを再インストールすれば完全に除去できる

OSの再インストールでほとんどのバックドアは除去できますが、ファームウェアレベルのrootkitや、外部の設定管理サーバー(Puppet・Ansibleなど)が侵害されている場合は再構築後も同じ状態になる可能性があります。再インストール後は、侵入経路の特定と封鎖が最優先です。

【誤解3】小規模なサイトは標的にならない

攻撃者は標的の「価値」だけでなく、「侵入しやすさ」で攻撃先を選びます。パッチが古い・管理者が少ない・ログ監視が手薄な中小規模のシステムは、踏み台やマイニングリソースとして積極的に狙われます。

バックドアとは?攻撃者が仕掛ける隠し通路の仕組みと検出・除去方法をわかりやすく解説 - まとめ

本記事のまとめ

確認項目 使うコマンド・ツール 確認頻度
不審な外部接続 ss -tnp / netstat 日次
不審なプロセス ps auxf / /proc確認 日次
重要ファイルの変更 AIDE / find -mtime 日次
ユーザーアカウント・SSH鍵 /etc/passwd / authorized_keys 月次
cronジョブ・サービス crontab -l / systemctl 月次
Webシェルの有無 find / ウイルススキャン 月次

バックドアは「侵入の痕跡」ではなく「継続的な侵害の仕掛け」です。発見の難しさと除去後の再侵入リスクを正しく理解した上で、日常的な監視体制を整えることが、最も効果的な対策になります。

Linuxサーバーのセキュリティ全般については、姉妹サイトLinuxMaster.JPでも権限管理やアクセス制御に関する詳しい解説を公開しています。

PR

詳解 インシデントレスポンス(Steve Anson著/石川朝久訳)

バックドア設置後の侵害調査・証拠保全・封鎖対応まで、実務に即したインシデントレスポンス手順を体系的に学べる一冊。感染端末の調査手順や揮発性情報の収集方法も詳しく解説されています。

関連記事をもっと読む

同じテーマの記事をまとめています。あわせて読みたい記事はこちらからご覧いただけます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次