SIP 攻撃で 050 発信不能にされたので、国外IP を全て弾いてやった

 我が家は未だに ADSL でして、そのルーターヤマハ RT58i なんですが、NTT 0XY番号のほか、IP電話ISP提供の 050)も利用しています。


 黒電話 on RT58i って記事を書いたのがついこの前のように感じていたのですが、もうすぐで8年。
 着信拒否に登録した電話番号数が200を超えたくらいで、基本的には運用形態は当時のままです。
 ADSLモデムは何度か買い換えているものの、ヤマハルーターは本当に壊れないですね。
 もし将来、フレッツ光ネクストに移行することがあれば、NVR500(NVR510) を指名買いさせて頂きます!


 さて、RT58i ですが

  • 市内へは普通にNTT網にて
  • 市外へは 050 を使うが不通時は NTT網 に迂回
  • 携帯へは 0039 を付与したうえでNTT網にて

という風にルーティング定義しています。


 ほとんど放置状態なんですが、超久しぶりにルーターtelnet で入って show log してみたんですよ。
 そしたら・・・


[SIP] SIP Call to [sip:06xxxxxxxx@xxx.xxxxx.ne.jp] from [sip:050xxxxxxxx] rejected with cause NO CHANNEL (3034).

ってログが割と残ってるじゃないですか。
 050 で発信できなかったことを意味するログです。


 おいおい、いつの間にかプロバイダのIP電話サービスが終了してたのか?って確認したら、050 同士の無料範囲が狭まったという残念な事実を知ってしまったものの、とりあえずはサービスは続行してるみたい。
 じゃあ、いつから NO CHANNEL になってるだい?って追っかけみたら


[SIP] SIP Call from [sip:c@218.xxx.xxx.xxx] to [sip:+90041315281818@192.168.1.1] rejected.
[SIP] SIP Call from [sip:c@218.xxx.xxx.xxx] to [sip:++41315281818@192.168.1.1] rejected.
[SIP] SIP Call from [sip:trunk@218.xxx.xxx.xxx] to [sip:011+41315281818@192.168.1.1] rejected.
[SIP] SIP Call from [sip:test@218.xxx.xxx.xxx] to [sip:00+41315281818@192.168.1.1] rejected.

みたいな風がトリガーであると発覚。
218.xxx.xxx.xxx はプロバイダから割り当てられた自ルーターのグローバルアドレス)


 知らん間に SIP 攻撃を受けていたぜ


 ログによれば正常に rejected されたぽいし、クレカの請求額も常識的な範囲内であることから、経済的損失はなかったと推定されるものの、この攻撃を食らうと 050 への発信が出来なくなってしまうみたいです。
※050 への着信は皆無なため当方では確認できませんでしたが、着信も不能にされていたかもしれません。


 どうも同様の攻撃は 11/13 付近から始まっていたものの毎朝未明に reboot するようにスケジュール登録していたため翌朝には勝手に回復してしまい、また普段から家の電話で発信する頻度が少なかったことと相まって、050 発信不能に気がつくことなく過ごしてきましたが、ヤマハルーターSIP 実装に何らかの脆弱性があるのは確実で、かつ RT58i はサポート終了しているので自力で何らかの緩和策を取らないと危険です。


 ファームウェアを弄るのは不可能なので、どうしたものか・・・

 きっと攻撃者は日本人じゃないはず・・・

という思い切った仮説のもと、国外IP を全ブロックするフィルターを書いてみることにしました。



※ファイル形式にてのダウンロードは こちら


 0.0.0.0/8 の扱いはよく分からないので放置(笑)
 単純にこれだけを ip pp secure filter in に当てるとブラウジング不能になるので、

ip filter 200 pass * * tcp * 5060
ip filter 201 pass * * udp * 5004-5035,5060
ip filter 300 reject * * udp,tcp 135,netbios_ns-netbios_ssn,445 *
ip filter 999 pass * * * * *
ip filter dynamic 10 * * tcp
ip filter dynamic 11 * * udp

としたうえで、外に繋がってる pp に対してフィルターを適用します。


ip pp secure filter in 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 200 201
ip pp secure filter out 300 999 dynamic 10 11

 内側から外に出て行くパケット(と、その戻り)は、ほぼ全スルーという、かなりユルユル設定ですが、その辺は各自で追い込んで頂くとして、ひとまずは海外からのSIP攻撃は防ぐことができます。


 WEBサーバーを設置・公開していて、それは国外OKにしたいなら、100 の前に 80/tcp や 443/tcp を pass するフィルターを追加してやって下さい。
 また、22/tcp や 500/udp・4500/udp 等々を公開していて、それらを国内限定にしたい場合は、200・201 付近を参考にして後ろの方に追加してやって下さい。


 攻撃そのものを防げるわけじゃないですけど、少なくとも国内IPからならば、日本の警察を動かすことができますから。


 IPアドレスの範囲は定期的に変わるので、その更新を含めて何とか自動化させたいですよね。
 って焦らしつつも実のところ概ね目処は立ってるんですが、さて、これをボランティアで無料公開すべきなのかどうか・・・


 商売と無関係な個人の方々の細々とした用途には広く活用してもらいたいけど、ボランティアを利用して自らの利益を最大化しようと企む輩の手駒にはなりたくない・・・
 うーん、ジレンマですな。しばらく悩んでみよう。


 それはそうと、114KB ものフィルターリストを追加で突っ込んでも、(少なくとも体感上では)特に速度が悪化することなく、何事もなかったかのように普通に動いてしまうヤマハルーターって、真剣に凄いですわ。


(追記)2018/02/14
 最新の割り当てデータベースを用いてフィルターファイルを自由に作る ヤマハルーター向け鎖国フィルタージェネレーター を作りました。
 詳しくは こちら


(追記)2018/02/24
 鎖国フィルターを自動更新する仕組みについて記事にしました。
 こちら をどうぞ。