CNN の BIMI レコードを調べてみた

GmailにBIMI準拠の認証企業/ブランドロゴ表示機能
https://pc.watch.impress.co.jp/docs/news/1267121.html
https://cloud.google.com/blog/products/g-suite/gsuite-security-updates-for-gmail-meet-chat-and-admin

Google が Gmail プラットフォームにおいて BIMI 規格のサポートをするというアナウンスがあり、DigiCert が CNN の BIMI 準拠証明書を発行したとのことです。試しに確認してみました。

なお、僕自身はそこまで PKI や証明書のデータ構造などに詳しくないため、誤りや勘違いなどがあればご指摘ください。

# BIMI とは
https://bimigroup.org/all-about-bimi/
簡単に言えば、なりすましではないと確認された電子メールにロゴマークを表示して、フィッシングメールなどの攻撃からユーザーを保護する仕組みです。ロゴマークが表示される条件は、

- ドメインが DMARC レコードに対応している
- ドメインの DMARC のポリシーが quarantine 以上である
- ドメインが BIMI レコードに対応している
- ロゴマークが信頼できる

という条件を全て満足することです。

# CNN ドメインが BIMI 対応かどうかの確認

## DMARC レコードに対応、かつ、quarantine 以上である
```
$ dig +short _dmarc.cnn.com txt
"v=DMARC1; p=reject; rua=mailto:dmarc_agg@vali.email,mailto:tw@rua.agari.com; ruf=mailto:tw@ruf.agari.com"
```

## BIMI レコードに対応している
```
$ dig +short default._bimi.cnn.com txt
"v=BIMI1; l=https://amplify.valimail.com/bimi/time-warner/ITg_B9KhtJI-cnn_com.svg; a=https://amplify.valimail.com/bimi/time-warner/ITg_B9KhtJI-cnn_com.pem"
```

# 証明書の確認
証明書は、`aタグ` で指定されているので、`https://amplify.valimail.com/bimi/time-warner/ITg_B9KhtJI-cnn_com.pem` を確認します。

## 証明書のダウンロード
```
$ wget https://amplify.valimail.com/bimi/time-warner/ITg_B9KhtJI-cnn_com.pem
--2020-07-26 19:16:36--  https://amplify.valimail.com/bimi/time-warner/ITg_B9KhtJI-cnn_com.pem
amplify.valimail.com (amplify.valimail.com) をDNSに問いあわせています... 54.230.175.50, 54.230.175.65, 54.230.175.104, ...
amplify.valimail.com (amplify.valimail.com)|54.230.175.50|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 9216 (9.0K) [application/x-x509-ca-cert]
`ITg_B9KhtJI-cnn_com.pem' に保存中
```

## X.509 拡張部分を確認
`1.3.6.1.5.5.7.1.12` の部分に BASE64 形式でロゴデータが記録されているようです。
https://oidref.com/1.3.6.1.5.5.7.1.12

```
$ openssl x509 -text -noout -in ITg_B9KhtJI-cnn_com.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            0b:cf:58:1f:50:dd:0f:f4:87:f0:c0:1f:7a:d9:1f:3c
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=Utah, L=Lehi, O=DigiCert, Inc., OU=www.digicert.com, CN=DigiCert Verified Mark Intermediate CA
        Validity
            Not Before: Jul 14 00:00:00 2020 GMT
            Not After : Jan  9 12:00:00 2021 GMT
        Subject: businessCategory=Private Organization/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/serialNumber=2976730/street=190 Marietta St NW/postalCode=30303, C=US, ST=Georgia, L=Atlanta, O=Cable News Network, Inc./1.3.6.1.4.1.53087.1.3=US/1.3.6.1.4.1.53087.1.4=5817930
        ...
        X509v3 extensions:
            ...
            X509v3 Basic Constraints: critical
                CA:FALSE
            1.3.6.1.5.5.7.1.12: 
image/svg+xml0#0!0...+........W1.'PLp.r...4M..Yad.0.......data:image/svg+xml,base64,H4sIAAAAAAAACp1UTW/bOBA9x7+Cq54KkDSHFL+MOEUbFE2BblFgAV8...moQI8fSd/Emfs5D56361+A9wMCyrugYAAA==
            1.3.6.1.4.1.11129.2.4.2: 
                .z.x.v.UYS.0...l..R......(..V.B.U6.L_u....sN<.......G0E.!......;.....A.....nH..<...d./'.... ..m.....@.\.~^....B..I.
/p7]r...
    Signature Algorithm: sha256WithRSAEncryption
         ac:db:fa:df:c8:e8:8f:e7:69:20:e3:f4:13:f4:d6:27:e3:7f:
         ...
```

あとで確認するために image/svg+xml を BASE64 データをデコードしてファイルに保存します。

```
$ echo "H4sIAAAAAAAACp1UTW/bOBA9x7+Cq54KkDSHFL+MOEUbFE2BblFgAV8...moQI8fSd/Emfs5D56361+A9wMCyrugYAAA==" | base64 -D > cnn.com.logo.gz
```

# ロゴデータの確認
ロゴデータは、`lタグ` で指定されているので、`https://amplify.valimail.com/bimi/time-warner/ITg_B9KhtJI-cnn_com.svg` を確認します。

## ロゴデータのダウンロード
```
$ wget https://amplify.valimail.com/bimi/time-warner/ITg_B9KhtJI-cnn_com.svg
--2020-07-26 19:26:48--  https://amplify.valimail.com/bimi/time-warner/ITg_B9KhtJI-cnn_com.svg
amplify.valimail.com (amplify.valimail.com) をDNSに問いあわせています... 54.230.175.50, 54.230.175.104, 54.230.175.65, ...
amplify.valimail.com (amplify.valimail.com)|54.230.175.50|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1722 (1.7K) [image/svg+xml]
`ITg_B9KhtJI-cnn_com.svg' に保存中
```

# ロゴデータの正当性の確認
得られた2つのデータを突合します。

```
$ gzip -d cnn.com.logo.gz
$ cmp -l cnn.com.logo ITg_B9KhtJI-cnn_com.svg
```

以上です。