一般的ではない IPv4 表記を用いたフィッシングメールを調査した

:::note warn
以下ご理解いただける方のみお読みください。

- 私（iron）が記載している投稿は **一個人の見解** であり、特定の企業や団体の見解や主張ではありません。一つの情報としてご覧ください。
- この記事は **注意喚起と同業の方への共有を目的として記載** しています。
ここに記載されたフィッシングサイトを模倣したりすると法令に違反する場合があります。ご注意ください。
:::

# 一般的ではない IPv4 表記を用いたフィッシングメールを調査

## TL;DR

- 一般的な IPv4 アドレスの表記ではない IPv4 アドレス（e.g., `http://2130706433`）が書かれたフィッシングメールを確認。
- フィッシングメールを含む迷惑メールを受信しないようにする 「メールフィルタ」 を回避する意図で使われている模様。
- メール・チャットにおいて、URL をハイパーリンク化するのが普通なので、本格的に広がると厄介かも？
- メールのリンクをそのまま開くのではなく、自分がインストールしているアプリなどから事実を確認するのが大事。

## きっかけ

2023/11/14 に [フィッシング対策協議会](https://www.antiphishing.jp/) が緊急情報として以下を投稿。
実際、同じ頃にちらほら見かけるようになったため、挙動などを調査。

https://twitter.com/antiphishing_jp/status/1724346531170725909

> URL に特殊な IP アドレス表記を用いたフィッシング (2023/11/14)
> https://www.antiphishing.jp/news/alert/ipurl_20231114.html

## 仕組み

### RFC 791 - Internet Protocol

ご存知の通り、IPv4 アドレスは 32bit の長さを持つ情報であり、これは RFC791 で定義されている。

32bit をそのまま 2 進数 32 桁で表記するのは可読性もよろしくないので、一般的にドット（`.`）で区切られた 4 つの 8 ビットの 10 進数で表記している。

- 2 進数のまま： `01111111000000000000000000000001`
- 一般的な表記： `127.0.0.1`

https://datatracker.ietf.org/doc/html/rfc791

### 実際にやってみる

先駆者は当然おりますし、きちんとした説明も既にあります。
が、自分でも、ということで試します。

https://qiita.com/ip6/items/e6a2376453f39d8acb3c

#### 2 進数のアドレス

`ping 01111111000000000000000000000001`。Windows では 2 進数 NG のご様子。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188227/54282cc0-7350-4281-382c-9d7e5d61ea10.png" width="50%">

#### 8 進数のアドレス

`ping 017700000001`。問題なく ping できた。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188227/4d3cff86-7a75-2c55-5bf3-342d1aaca16e.png" width="50%">

#### 10 進数のアドレス

`ping 2130706433`。いつもの表記ではない 10 進数でも問題なく ping できた。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188227/d220079f-5057-3ef5-8978-77073b401392.png" width="50%">

#### 16 進数のアドレス

`ping 0x7f000001`。問題なし。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188227/f8acdee5-ad1b-9e00-ab77-ec52fc159258.png" width="50%">

#### 合わせ技

ドット（`.`）が入ることが想定されていること、かつここまでの動作状況を踏まえると合わせ技もできたりする。

- `ping 0x7f.0.1`
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188227/68c530be-fa53-0c62-9e44-145a4ed3cb49.png" width="50%">
- `ping 127.0.0x0001`
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188227/86636cff-2cd4-01b9-99a8-53ed187d6f2b.png" width="50%">

### ブラウザやメールソフト特有の仕様

スマホの場合、例えば `https://` から始まるテキストを入力してチャットしたり、メール本文に書かれたりすると自動的にハイパーリンク化されることが一般的。

また、ブラウザなどの場合、URL 上でパーセントエンコードを用いることもできるため、ping のときよりもさらに無理できる。例えば、

- `http://127%2E0%2E0%2E`
→ ドット（`.`）をパーセントエンコードして `%2E` に
- `http://%31%32%37%2E%30%2E%30%2E%31`
→ 数字も無理やりパーセントエンコード

みたいなことができる。

実際に iPhone（iOS）で試すと、前述の [2 進数の場合](#2-進数のアドレス) を除くリンクで `127.0.0.1` にアクセスすることができた。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188227/c3da9be4-b432-d517-bd67-3aceeed618cf.jpeg" width="50%">

## 何が問題なのか

### フィルタの回避

フィッシング対策協議会からの緊急情報にもあるとおり、メールフィルタなどを回避するためにこのような表記をおこなっていると推測される。

例えば `127.0.0.1` を含んでいたら迷惑メールと判定するフィルタがあったとしても、前述のとおり、様々な表記ができることからすべてのパターンのフィルタを設定するのは大変。

ドメインなしで IP アドレスを直接フィッシングサイトに使うパターンは多くないが、こういうのが増えると面倒なのは言える。

### 以前よりフィッシングメール以外に悪用例あり

なおこのような IPv4 アドレスを一般的ではない表記で用いて、なんらかのフィルタを回避する手法は、アンチウイルスソフトなどの検知を回避するためにマルウェアが工夫する手法として以前より利用されていた。

世間を騒がせている Emotet もこのような表記を用いてアンチウィルスソフト等の検知を回避しようと試みているとのこと。

https://www.trendmicro.com/ja_jp/research/22/a/Emotet-evade-securtity-detection-by-hexadecimal.html