blog

日常・技術のことを記録する

ICMPタイムスタンプ要求/応答のDROPを確認する

経緯

TCP Timestamp Optionの脆弱性 〜Linux/Windowsでの設定無効化、確認方法〜 | SEの道標
どうやら、IPアドレスを偽装してパケット送信するときにtimestampをいじくることで、なんやかんやでDos攻撃ができるらしい、と(くわしいことはわからん)。
この脆弱性を回避するために、LinuxでのICMP Timestampを無効化をしたい!という試み。

前提

Ubuntu 16.04.5 LTS
iptablesにパケットフィルタリング制御をかけた状態。(今のLinuxカーネルではICMP Timestampを無効化する設定はなくて、途中経路またはiptables等のファイヤウォールでDROPするのが定石らしい。)

ICMPのtype一覧

ICMP Type / Code一覧
今回、iptablesで無効化したのは下記の2つ。
・タイプ13の「タイムスタンプ(Timestamp)」
・タイプ14の「タイムスタンプ応答(Timestamp Reply)」

pingを叩いたら拒否されるはず!

ICMPタイムスタンプ要求・応答をDROPする設定はすでに完了してるから、クライアントからサーバへ向けてping叩いて反応を見てみよう。
想定では、タイムスタンプを返却しなくなっているはず。結果は?

$ ping -D -T tsandaddr 10.10.10.230
PING 10.10.10.230 (10.10.10.230) 56(124) bytes of data.
[] 64 bytes from 10.10.10.230: icmp_seq=1 ttl=64 time=2.44 ms
TS:     10.10.10.231 23700782 absolute
        10.10.10.230 56400773 # 変わらずタイムスタンプを取得できちゃってる
        10.10.10.230 0
        10.10.10.231 -56400770

[] 64 bytes from 10.10.10.230: icmp_seq=2 ttl=64 time=2.66 ms
TS:     10.10.10.231 23701785 absolute
        10.10.10.230 56400773
        10.10.10.230 0
        10.10.10.231 -56400771
...

あれ???タイムスタンプを取得できなくなるはずが、変わらず取得できちゃってる。
タイムスタンプ情報を返却させないための、サーバ側での設定が足りないのかな????

「タイムスタンプ」は、pingとICMPで意味が違う

調べたり聞いたりしていくうちに、pingでいう「タイムスタンプ」とICMPで使う「タイムスタンプ」は意味が違うらしい、ということを知った。

pingコマンドで使用されるのは、
・タイプ8の「エコー要求(Echo Request)」
pingでいうタイムスタンプは、その応答の中にある「Timestamp: <IPアドレス> : <時刻情報>」のこと。つまり、"ICMPタイムスタンプ"とはそもそもの意味が違うらしい。わたしは、ここを混同してたみたい。

今回、iptablesで無効化したのは前述の通り
・タイプ13の「タイムスタンプ(Timestamp)」
・タイプ14の「タイムスタンプ応答(Timestamp Reply)」

だったのに、わたしはping
・タイプ8の「エコー要求(Echo Request)」
を投げて、拒否されることを期待していたのね...

ICMPタイムスタンプリクエストを出せるツール

pingがダメなら、じゃあどうしたらICMPタイムスタンプ(タイプ13,14)を叩けるのか?
Linuxの標準のpingだったりその他コマンドでは、ICMPタイムスタンプリクエストが出せる機能は備わっていないらしく。どうやらサードパーティ製ツールを使えば、ICMPタイムスタンプリクエストを出せるとのこと。

・xprobe
・hping パケット生成が簡単にできるhpingコマンド - 無題の備忘録

(使い心地については、長くなるからまたちがうときに書く。今回のケースはhping3のほうが合った)
前述の通りiptablesにパケットフィルタリングをかけた状態で、hping3を使用したところ、ICMPタイムスタンプ応答がない(DROPされている)ことを確認できた。

$ sudo hping3 -1 -C 13 192.168.104.230
sudo: unable to resolve host hdn-master
HPING 192.168.104.230 (enx4 192.168.104.230): icmp mode set, 28 headers + 0 data bytes # hping通ってない
^C

よかったバンザイ\(^o^)/

メモ

・ICMPタイムスタンプリクエストは、ICMPのタイプ13を使用し、タイプ14のタイムスタンプ応答を受け取り、リモートシステムから現在の時間を受け取る

・ICMPタイムスタンプで、参考にしたサイト覚書(読み返すよりググったほうが速いけどいちおう)
iptablesの読み方覚え書き - Qiita
hping3コマンドの使い方 - Qiita
TCP Timestamp Optionの脆弱性 〜Linux/Windowsでの設定無効化、確認方法〜 | SEの道標
pingのポート番号ってあるの?(結論:ない)
良く使うiptablesの運用管理方法2つをメモ(ここに書いてあったことできなかった。RedHat系のみ適用?)