2014 年 12 月に発生した NTP セキュリティ脆弱性

更新 -

対象となる脆弱性

以下の脆弱性が 2014 年 12 月に公開されました。

Red Hat は、この脆弱性の影響度をまとめて「重要」と定義しました。この脆弱性の影響度を「重大」とする報道もありますが、Red Hat が提供する製品にはデフォルト設定で軽減策が組み込まれているため、Red Hat Enterprise Linux におけるこの脆弱性の影響度はそれよりも低く設定されています。

軽減策

ntpd デーモンは、時間同期プロトコルパケットだけでなく、デーモンの状況に関する情報をクエリーしたり、その設定を変更したりするのに使用できる特別な制御パケットも処理します。この機能は、ntpqntpdc などのツールによって使用されます。報告された問題の多くは、これらの制御パケットの処理にしか影響しないため、信頼されるソースから送られたパケットの処理だけを許可することが推奨されます。NTP サーバーとの時間同期のみを必要とする NTP クライアントからのパケットの処理については必要ありません。

ntpd の IP アドレスに基づいた制限

Red Hat Enterprise Linux 5、6、および 7 におけるデフォルトの ntpd 設定では、ローカルホストから送られた制御要求だけが処理されます。127.0.0.1 (IPv4) および ::1 (IPv6) アドレスからの制御要求だけを許可することによってこの制限が定義されています。ntp パッケージに同梱されるデフォルトの設定ファイル /etc/ntp.conf には以下の restrict 設定が含まれます。

restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1 
restrict -6 ::1

(Red Hat Enterprise Linux 7 の場合は restrict default 行により暗黙的に設定されるため、restrict -6 default 行がありません。)

Red Hat Enterprise Linux 4 では、デフォルト設定では IPv6 アクセスが制御されていないため、デフォルトの restrict 行を上述の行で置き換えることが推奨されます。

NTP は UDP プロトコルを使用しているため、この制限の回避を試みるパケットのソース IP アドレスになりすます (スプーフィング) ことが可能になる場合があります。パケットのスプーフィングを防ぐ方法については以下のセクションを参照してください。

注意: 上述のように設定しても、基本的な時間サービスは有効です。(ntpd を実行するサーバーに ntpq または ntpdc コマンドを使用できるように) 特定のホストおよびネットワークに対してそれ以上のサービスを実行することが ntpd に要求される場合は、そのホストやネットワークが、適切な restrict ステートメントが追加された状態で ntpd 設定に記載されている必要があります。

パケットフィルターを使用してアクセスをフィルタリング

Red Hat Enterprise Linux 4、5、6、および 7 のデフォルトのファイアウォール設定では、UDP ポート 123 を使用した NTP サービスへのアクセスがブロックされます。 NTP パケットにフィルターをかけると、この問題が悪用されるのを防ぐことができます。

NTP サービスへのネットワークトラフィックを許可するようにシステムを設定し、ローカルホストに対しての制御パケットを制限するように上述した設定を使用すると、攻撃者は、UDP パケットの ソースアドレス IP になりすまして (スプーフィングして)、定義されたアクセス制限を無効にできる場合があります。127.0.0.1 (IPv4) または ::1 (IPv6) は上述されたデフォルトの restrict 設定と一致するため、ソースアドレスとして特に魅力的です。

IPv4 の場合、Red Hat Enterprise Linux 4 および 5 はソースアドレス 127.0.0.1 を持つ入力パケットを常にドロップとします。Red Hat Enterprise Linux 6 および 7 はデフォルトでは入力パケットをドロップしますが、デフォルト以外の route_localnet および rp_filter インターフェイスオプション設定を使用している場合は、ローカルアドレスのスプーフィングが可能になる場合があります。

IPv6 では firewalld が以下のパケットフィルタールールを設定するため、Red Hat Enterprise Linux 7 はデフォルト設定でソースアドレス ::1 のスプーフィングを防止します。

ip6tables -t raw -I PREROUTING -m rpfilter --invert -j DROP

firewalld を使用せず手動でパケットフィルタールールを定義している設定にこのルールを使用することができます。

Red Hat Enterprise Linux 4、5、および 6 は、デフォルトでは、ソースアドレス ::1 のスプーフィングを防止しません。同様にそれらでは、rpfilter パケットフィルターモジュールはサポートされません。以下のルールを使用して、ループバックインターフェイス以外から受け取った、ソースアドレス ::1 を持つ入力パケットを落とすことができます。

ip6tables -t raw -I PREROUTING \!-i lo -s ::1 -j DROP

注意: (上述の説明とは異なり) restrict を許可するように設定すると、パケットフィルターを使用している場合でも、設定した IP ベースのタイムソースは ntpd 設定モジュールにアクセスでき、脆弱性を利用できます。これは、攻撃パケットが、通常の時間情報と同じ UDP ポートに送られることが原因です。

各不具合における軽減策

CVE-2014-9295

この CVE は、バッファーのオーバーフローに関する 3 つの不具合を扱っています。そのうちの 2 つは制御要求の処理に影響するため、上述のように、restrict とパケットフィルター制御を定義すれば軽減できます。 残りの 1 つは Autokey 公開キー認証メカニズムに影響します。Autokey 認証は、Red Hat Enterprise Linux の ntpd におけるデフォルト設定では有効ではありません。ntp.conf に、Autokey 認証が無効であることを確認できるキーワード crypto で始まる設定ディレクトリが含まれていないことを確認してください。

CVE-2014-9293

攻撃者は、この問題を利用して、特定の制御要求に必要な認証を回避し、未認証のまま ntpd 設定を変更できます。また、CVE-2014-9295 を利用してバッファーのオーバーフローを発生させることもできます。ntpd は、requestkey が設定されていないと、起動時に (内部処理で必要な) キーを自動的に生成します。以下のコマンドを実行すれば ntpd で強力なキーが利用できるため、新しいキーは生成されなくなります。

echo trustedkey 65535 >> /etc/ntp.conf
printf "65535\tM\t%s\n" $(tr -cd a-zA-Z0-9 < /dev/urandom | head -c 16) >> /etc/ntp/keys

注意: アップデート版 ntp パッケージでは ntpd が強力なキーを作成するように修正されているため、アップデート版 ntp パッケージを使用している場合は上述の手順を行う必要はありません。

CVE-2014-9294

脆弱性のある ntp-keygen バージョンを使用して生成された MD5 キー (つまり /etc/ntp/keysM または MD5 タイプがあるキー) は置き換える必要があります。アップデート版 ntpntp-keygen を使用して新しいキーを生成するか、CVE-2014-9293 の軽減手順に従ってキーを 1 つ生成します。

tr -cd a-zA-Z0-9 < /dev/urandom | head -c 16

注意: ntp パッケージのアップデート版をインストールした場合でも MD5 キーは再生成する必要があります。ntp をインストールした時にキーが自動的に生成されないため、特定のキーを明示的に生成していた場合は再生成が必要になります。ntp-keygen -M コマンドの出力結果には SHA-1 キーが含まれている場合もあります。このキーは常に、CVE-2014-9294 問題の影響も受けない異なる生成される方法によって生成され、キーを再生成する必要はありません。

CVE-2014-9297

影響を受けるコードは NTP の autokey プロトコルです。クライアントはサーバーに公開キー RSA を送ります。これは、クライアントに戻される 32 ビット秘密鍵です。その後、クライアントはそれを解読して 32 ビットの整数 temp32 で保存しますが、解読した平文テキストのサイズは「(キーサイズ/8)-42」となります (例: 2048 ビットキーの場合は 214 バイト)。 これにより、スタックベースのバッファーオーバーフローが発生します。

Autokey 機能を無効にするとこの問題を軽減できます。Autokey 認証は、Red Hat Enterprise Linux の ntpd におけるデフォルト設定では有効ではありません。ntp.conf に、Autokey 認証が無効であることを確認できるキーワード crypto で始まる設定ディレクトリが含まれていないことを確認してください。

CVE-2014-9298

NTP のアクセス制御はソースアドレスに基づいており、ローカルホストアドレスには、通常、制限がありません。攻撃者は、外側から ::1 アドレスをスプーフすることで、悪意のある制御と設定パケットを送ることができます。

上述の軽減手順を実施し、IPv6 および ::1 の処理方法を制限すると、この問題が軽減します。

その他の実装への影響

これらの脆弱性は、(ntp.org の) ネットワークタイムプロトコルの ntp 実装を対象としています。したがって、chrony などの実行には影響しません。プロトコル自体にも影響しません。

継続中の悪用に関する主張

Red Hat は、これらの脆弱性への積極的な悪用に注意を促す報道について認識しています。これらの脆弱性に関する最初の ICS-CERT アドバイザリ ICSA-14-353-01 では実証コードが利用可能であったと指摘していました。ただし、アップデートされた ICSA-14-353-01A には「これらの脆弱性を特別に狙った実証コードが公開されているとの報告はない」と記載されています。

また、2015 年 1 月には、これらの脆弱性を組み合わせて Mac OS X でリモートコードを実行する問題についてこちらのページで発表がありました。