
## この記事でわかること

- Heroku 特有のテイクオーバーパターン
- 検出する具体手順
- 是正の 3 ステップ
- 予防のための運用ルール

## Heroku のテイクオーバーが成立する条件

![Heroku の dangling 状態](/blog/heroku-subdomain-takeover/state.svg)

### 危険な状態

```
app.example.co.jp  CNAME  myapp.herokuapp.com
                          ↑ Heroku アプリが削除済
```

Heroku では **同じアプリ名で誰でも新規作成可能**な仕様上、過去のアプリ名が解放されると **攻撃者が再取得**できます。

### 攻撃成立のパターン

1. 御社が `myapp.herokuapp.com` で社内ツールを試運用
2. 別ホスティングへ移行して Heroku アプリを削除
3. しかし `app.example.co.jp` の CNAME はそのまま残置
4. 攻撃者が `myapp` 名のアプリを Heroku で新規作成
5. カスタムドメイン `app.example.co.jp` を設定
6. 御社のドメインで攻撃者のアプリが配信される

## 自社で確認する手順

### 1. CNAME が `*.herokuapp.com` に向いているか確認

```bash
dig +short CNAME app.example.co.jp
# → myapp.herokuapp.com. が返れば対象
```

### 2. アプリが存在するか確認

ブラウザで `https://myapp.herokuapp.com/` を開いて、以下のメッセージが表示されたら **dangling 確定**:

```
There's nothing here, yet.
No such app
```

または `heroku-not-found` の Heroku エラーページ。

## 是正の 3 ステップ

![Heroku dangling の是正フロー](/blog/heroku-subdomain-takeover/remediation.svg)

### ステップ 1: 即座に DNS から CNAME を削除

最優先。利用予定がない CNAME はすぐ消します。

### ステップ 2: 自社で同名アプリを再取得（攻撃者より先に）

将来また使う可能性がある名前は、自社の Heroku アカウントで `heroku apps:create myapp` で空アプリを作って占有します。Free / Eco プランでもアプリ名予約は可能。

```bash
heroku apps:create myapp --no-remote
```

### ステップ 3: カスタムドメインの所有確認 ACM 設定

Heroku の Automated Certificate Management（ACM）+ カスタムドメイン設定で、**そのドメインを設定できるアカウントを限定**できます。

```bash
heroku domains:add app.example.co.jp --app myapp
heroku certs:auto:enable --app myapp
```

ACM が有効化されていると、別アカウントで同じカスタムドメインを設定しようとした際にエラーになります（DNS challenge 失敗）。

## 予防のための運用ルール

| ルール | 内容 |
|---|---|
| 解約フローの整備 | Heroku アプリ削除 = DNS 整理 = カスタムドメイン削除をセットで実施 |
| 検証用アプリの命名規則 | 検証用は `<会社名>-test-<日付>` で識別しやすく |
| 終了期限の DNS メモ | 期間限定のアプリは TTL を短くして自動失効させる |
| 棚卸し頻度 | 半年〜1 年に 1 回、CT log + DoH で全 herokuapp.com への CNAME を点検 |

## 検出を自動化する

ドメイン番人の [サブドメイン棚卸し 単発チェック](/subdomain/check) では `*.herokuapp.com` パターンの dangling CNAME を自動検出します。

## まずは現状を把握しましょう

棚卸しと是正の支援は [サブドメイン棚卸し＋テイクオーバーリスク診断](/contact)（5 万円〜）でご相談ください。

関連記事:
- [サブドメインテイクオーバーとは？仕組みと EC・スタートアップ・制作会社への影響](/blog/subdomain-takeover-toha)
- [dangling CNAME のリスクと検出方法](/blog/dangling-cname-risk)
- [GitHub Pages のサブドメインテイクオーバー対策](/blog/github-pages-subdomain-takeover)
- [AWS S3 のサブドメインテイクオーバー対策](/blog/aws-s3-subdomain-takeover)

総合点検は [無料のドメイン診断](/diagnose)、SSL 単独は [SSL 単発チェック](/ssl/check) をご利用ください。
