SEILのNTP機能使用時に、NTPサーバとしての応答をさせない動作モードを追加しました。NTPサーバが必要なくシステム時刻の時刻合わせのみ必要な場合に、NTPサーバの脆弱性が新たに発見された際のリスクを減らすことができます。
これまでSEILのNTP機能は、機能を有効にした時点でNTPクライアントかつNTPサーバとして動作していました。サーバとして他のクライアントから参照されることを想定していない場合、IPフィルタの設定を忘れてしまうと、意図せずサーバとして動作していることにより、脆弱性を狙われた際に、見逃しやすくなってしまっていました。これを防止するために、NTPサーバまたはNTPクライアントを動作モードとして明示的に設定できるようモード設定を追加しました。
SEIL/X1 Ver.4.81 での動作
OBJ# interface lan2 address 192.168.1.123
OBJ# ntp server add 192.168.1.1
OBJ# ntp enable
OBJ# show status ntp
host info:
status: synchronized
stratum: 5
offset: 0.772ms
jitter: 0.919ms
peer info:
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.1.1 192.168.1.11 4 u 29 64 37 0.359 0.772 1.837
このような動作状態で外部からSEILに対してNTPを参照すると、時刻に応答があります。
# ntpdate 192.168.1.123
7 May 11:37:53 ntpdate[27482]: step time server 192.168.1.123 offset 168690663.592025 sec
新たに追加されたNTPクライアントモードの設定および動作は次のようになります。
OBJ# interface lan2 address 192.168.1.123
OBJ# ntp server add 192.168.1.1
OBJ# ntp mode client
OBJ# ntp enable
OBJ# show status ntp
function info:
mode: client
host info:
status: synchronized
stratum: 5
offset: 1.684ms
jitter: 1.098ms
peer info:
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.1.1 192.168.1.11 4 u 17 64 377 0.361 3.381 1.239
この状態で外部からこのSEILに対してNTPを参照すると、次のように応答しません。
# ntpdate 192.168.1.123
1 Jan 01:11:11 ntpdate[27502]: no server suitable for synchronization found
ただし、現在のバージョンではSEILのUDPの123番ポートは開いており、受信したNTPメッセージを破棄しているだけです。
# hping -p 123 -k 192.168.1.123
HPING 192.168.1.123 (em0 192.168.1.123): NO FLAGS are set, 40 headers + 0 data bytes
len=46 ip=192.168.1.123 ttl=64 id=13 sport=123 flags=RA seq=0 win=0 rtt=0.8 ms
このように、123番ポートは応答してしまいます。
将来的には、ポート番号を変更可能とすることで、より安全に運用できるよう変更する予定です。
受信時に破棄するNTPのメッセージは以下の通りです。
送信元 | 破棄するパケット | 備考 |
---|---|---|
ntp server に指定されたアドレス | mode1, mode2 mode3, mode5, mode6, mode7 | mode4 パケットはサーバから供給される時刻通知に利用 |
ntp peer に指定されたアドレス | mode3, mode5, mode6, mode7 | mode1, mode2 は peer との時刻同期に利用 |
それ以外のアドレス | mode[0-7] |