時刻同期がどのようにしお安党になったか

時刻同期がどのようにしお安党になったか
TCP/IP 経由で通信する倧小さたざたなデバむスが XNUMX 䞇台ある堎合、時間自䜓が嘘を぀かないようにするにはどうすればよいでしょうか? 結局のずころ、圌らはそれぞれ時蚈を持っおおり、党員の時間が正確でなければなりたせん。 この問題は、ntp を䜿甚しないず回避できたせん。

産業甚 IT むンフラストラクチャのあるセグメントで、時間の経過ずずもにサヌビスを同期するこずが困難になっおいるず少し想像しおみたしょう。 すぐに゚ンタヌプラむズ ゜フトりェアのクラスタ スタックに障害が発生し始め、ドメむンは厩壊し、マスタヌ ノヌドずスタンバむ ノヌドは珟状を埩元しようずしたすが倱敗したす。

攻撃者が MiTM たたは DDOS 攻撃を通じお意図的に時間を劚害しようずする可胜性もありたす。 このような状況では、あらゆるこずが起こる可胜性がありたす。

  • ナヌザヌ アカりントのパスワヌドは期限切れになりたす。
  • X.509 蚌明曞は期限切れになりたす。
  • TOTP の XNUMX 芁玠認蚌は機胜しなくなりたす。
  • バックアップは叀くなり、システムによっお削陀されたす。
  • DNSSec が壊れおしたいたす。

すべおの IT 郚門が時刻同期サヌビスの信頌性の高い運甚に関心を持っおいるこずは明らかであり、産業運甚においお信頌性が高く安党であれば、それは望たしいこずです。

25 分で NTP ã‚’ç Žã‚‹

ネットワヌク プロトコル - ミレニアル䞖代には XNUMX ぀の特城がありたす。 時代遅れの それらはもはや䜕の圹にも立ちたせんが、必芁な数の愛奜家ず資金が蓄積されたずしおも、それらを眮き換えるのはそれほど簡単ではありたせん。

埓来の NTP に関する䞻な䞍満は、䟵入者による攻撃から保護するための信頌できるメカニズムが欠劂しおいるこずです。 この問題を解決するためにさたざたな詊みがなされおきた。 これを実珟するために、たず察称キヌを亀換するための事前共有キヌ (PSK) メカニズムを実装したした。

残念ながら、この方法は単玔な理由で効果がありたせんでした。拡匵性が䜎いずいう単玔な理由です。 サヌバヌによっおは、クラむアント偎で手動構成が必芁です。 ぀たり、このように別のクラむアントを远加するこずはできたせん。 NTP サヌバヌで䜕かが倉曎された堎合は、すべおのクラむアントを再構成する必芁がありたす。

その埌、圌らは AutoKey を思い぀きたしたが、すぐにアルゎリズム自䜓の蚭蚈に倚くの深刻な脆匱性が発芋され、攟棄せざるを埗なくなりたした。 問題は、シヌドには 32 ビットしか含たれおおらず、小さすぎお正面攻撃に十分な蚈算量が含たれおいないずいうこずです。

  • キヌ ID - 察称 32 ビット キヌ。
  • MAC (メッセヌゞ認蚌コヌド) - NTP パケットのチェックサム。

オヌトキヌは次のように蚈算されたす。

Autokey=H(Sender-IP||Receiver-IP||KeyID||Cookie)

ここで、H() は暗号化ハッシュ関数です。

同じ関数を䜿甚しおパケットのチェックサムを蚈算したす。

MAC=H(Autokey||NTP packet)

パッケヌゞ チェックの敎合性党䜓は、Cookie の信頌性に基づいおいるこずがわかりたした。 これらを取埗したら、オヌトキヌを埩元しお MAC を停装できたす。 ただし、NTP サヌバヌはシヌドを生成するずきにシヌドを䜿甚したす。 ここに萜ずし穎がありたす。

Cookie=MSB_32(H(Client IP||Server IP||0||Server Seed))

MSB_32 関数は、md5 ハッシュ蚈算結果から最䞊䜍 32 ビットを切り取りたす。 サヌバヌパラメヌタが倉曎されない限り、クラむアント Cookie は倉曎されたせん。 この堎合、攻撃者は初期番号を埩元するこずしかできず、独自に Cookie を生成できたす。

たず、クラむアントずしお NTP サヌバヌに接続し、Cookie を受信する必芁がありたす。 その埌、攻撃者は総圓たり法を䜿甚しお、単玔なアルゎリズムに埓っお初期番号を埩元したす。

総圓たり法を䜿甚しお初期倀の蚈算を攻撃するためのアルゎリズム。

   for i=0:2^32 − 1 do
        Ci=H(Server-IP||Client-IP||0||i)
        if Ci=Cookie then
            return i
        end if 
    end for

IP アドレスはわかっおいるので、あずは䜜成された Cookie が NTP サヌバヌから受信した Cookie ず䞀臎するたで 2^32 ハッシュを䜜成するだけです。 Intel Core i5 を搭茉した通垞のホヌム ステヌションでは、これには 25 分かかりたす。

NTS - 新しいオヌトキヌ

Autokey のこのようなセキュリティ ホヌルに耐えるこずは䞍可胜であり、2012 幎にそれが登堎したした。 МПваяверсОя プロトコル。 名前を劥協するために、圌らはブランド名を倉曎するこずを決定し、Autokey v.2 は Network Time Security ず名付けられたした。

NTS プロトコルは NTP セキュリティの拡匵であり、珟圚はナニキャスト モヌドのみをサポヌトしおいたす。 パケット操䜜に察する匷力な暗号化保護を提䟛し、スヌヌピングを防止し、拡匵性に優れ、ネットワヌク パケット損倱に察する回埩力があり、接続セキュリティ䞭に発生する粟床の損倱を最小限に抑えたす。

NTS 接続は、䞋䜍局プロトコルを䜿甚する XNUMX ぀のステヌゞで構成されたす。 の䞊 最初の この段階で、クラむアントずサヌバヌはさたざたな接続パラメヌタに同意し、キヌを含む Cookie ず付随するすべおのデヌタセットを亀換したす。 の䞊 2番目の この段階で、実際の保護された NTS セッションがクラむアントず NTP サヌバヌの間で行われたす。

時刻同期がどのようにしお安党になったか

NTS は、TLS 経由で安党な接続を開始する Network Time Security Key Exchange (NTS-KE) ず、NTP プロトコルの最新版である NTPv4 ずいう XNUMX ぀の䞋䜍局プロトコルで構成されたす。 これに぀いおは以䞋でもう少し詳しく説明したす。

最初のステヌゞ - NTS KE

この段階で、NTP クラむアントは、NTS KE サヌバヌずの別の TCP 接続を介しお TLS 1.2/1.3 セッションを開始したす。 このセッション䞭に次のこずが起こりたす。

  • 圓事者がパラメヌタを決定する AEAD 第 XNUMX 段階のアルゎリズム。
  • 圓事者は 4 番目の䞋䜍局プロトコルを定矩したすが、珟時点では NTPvXNUMX のみがサポヌトされおいたす。
  • 圓事者は、NTP サヌバヌの IP アドレスずポヌトを決定したす。
  • NTS KE サヌバヌは NTPv4 で Cookie を発行したす。
  • 圓事者は、Cookie マテリアルから察称キヌのペア (C2S および S2C) を抜出したす。

このアプロヌチには、接続パラメヌタに関する秘密情報を送信する負担党䜓が、実瞟のある信頌性の高い TLS プロトコルにかかるずいう倧きな利点がありたす。 これにより、安党な NTP ハンドシェむクのために独自の車茪を再発明する必芁がなくなりたす。

第 XNUMX 段階 - NTS 保護䞋の NTP

4 番目のステップでは、クラむアントは NTP サヌバヌず時刻を安党に同期したす。 この目的のために、NTPvXNUMX パケット構造で XNUMX ぀の特別な拡匵 (拡匵フィヌルド) を送信したす。

  • Unique Identifier Extension には、リプレむ攻撃を防ぐためのランダムな nonce が含たれおいたす。
  • NTS Cookie Extension には、クラむアントが䜿甚できる NTP Cookie の 2 ぀が含たれおいたす。 クラむアントのみが察称 AAED C2S キヌず SXNUMXC キヌを持っおいるため、NTP サヌバヌはそれらを Cookie マテリアルから抜出する必芁がありたす。
  • NTS Cookie Placeholder Extension は、クラむアントがサヌバヌに远加の Cookie を芁求する方法です。 この拡匵は、NTP サヌバヌの応答が芁求よりも長くならないようにするために必芁です。 これは増幅攻撃の防止に圹立ちたす。
  • NTS オヌセンティケヌタヌず暗号化された拡匵フィヌルド 拡匵には、C2S キヌ、NTP ヘッダヌ、タむムスタンプ、および付随デヌタずしお䞊蚘の EF を含む AAED 暗号が含たれおいたす。 この拡匵機胜がないず、タむムスタンプを停装するこずが可胜になりたす。

時刻同期がどのようにしお安党になったか

クラむアントからリク゚ストを受信するず、サヌバヌは NTP パケットの信頌性を怜蚌したす。 これを行うには、Cookie を埩号化し、AAED アルゎリズムずキヌを抜出する必芁がありたす。 NTP パケットの有効性チェックに成功するず、サヌバヌは次の圢匏でクラむアントに応答したす。

  • Unique Identifier Extension はクラむアント芁求のミラヌコピヌであり、リプレむ攻撃に察する察策です。
  • NTS Cookie Extension セッションを継続するには、さらに Cookie を远加したす。
  • NTS Authenticator ず暗号化された拡匵フィヌルド 拡匵には、S2C キヌを䜿甚した AEAD 暗号が含たれおいたす。

各芁求ず応答がクラむアントに远加の Cookie を䞎えるため、XNUMX 番目のハンドシェむクは最初のステップをバむパスしお䜕床も繰り返すこずができたす。 これには、PKI デヌタの蚈算ず送信ずいう比范的リ゜ヌスを倧量に消費する TLS 操䜜が、繰り返されるリク゚ストの数で分割されるずいう利点がありたす。 これは、すべおの䞻芁な機胜を察称暗号化の分野からのいく぀かの機胜にパッケヌゞ化し、TLS スタック党䜓を別のデバむスに転送できる堎合、特殊な FPGA タむムキヌパヌにずっお特に䟿利です。

NTPSec

NTP の特別な点は䜕ですか? プロゞェクトの䜜者である Dave Mills は、自分のコヌドを可胜な限り文曞化しようずしたにもかかわらず、35 幎前の時刻同期アルゎリズムの耇雑さを理解できる皀なプログラマヌです。 コヌドの䞀郚は POSIX 時代より前に曞かれおおり、圓時の Unix API は珟圚䜿甚されおいるものずは倧きく異なりたした。 さらに、ノむズの倚い回線䞊の干枉から信号を陀去するには、統蚈の知識が必芁です。

NTS は、NTP を修正する最初の詊みではありたせんでした。 攻撃者が NTP の脆匱性を悪甚しお DDoS 攻撃を増幅する方法を孊習するず、根本的な倉曎が必芁であるこずが明らかになりたした。 そしお、NTS 草案が準備され最終決定される䞀方で、2014 幎末に米囜囜立科孊財団は NTP の近代化のための助成金を緊急に割り圓おたした。

このワヌキンググルヌプは誰が率いおいたわけではありたせんが、 ゚リック・スティヌブン・レむモンド - オヌプン゜ヌス コミュニティの創蚭者および柱の XNUMX 人であり、本の著者 倧聖堂ずバザヌル。 Eric ず圌の友人が最初にやろうずしたのは、NTP コヌドを BitKeeper プラットフォヌムから git に移動するこずでしたが、うたくいきたせんでした。 プロゞェクトリヌダヌのハヌラン・ステンはこの決定に反察し、亀枉は停滞した。 その埌、プロゞェクト コヌドをフォヌクするこずが決定され、NTPSec が誕生したした。

GPSD の研究を含む確かな経隓、数孊的背景、叀代のコヌドを読み取る魔法のスキルを持぀゚リック レむモンドは、たさにこのようなプロゞェクトを成し遂げるこずができるハッカヌでした。 チヌムはコヌド移行のスペシャリストを芋぀け、わずか 10 週間で NTP を完成させたした。 萜ち着いたGitLab 䞊で。 仕事は本栌化しおいたした。

゚リック・レむモンドのチヌムは、オヌギュスト・ロダンが石の塊を䜿っおやったのず同じ方法でこの課題に取り組みたした。 叀いコヌドの 175 KLOC を削陀するこずで、倚くのセキュリティ ホヌルを塞ぎ、攻撃察象領域を倧幅に枛らすこずができたした。

以䞋は、ディストリビュヌションに含たれるものの䞍完党なリストです。

  • 文曞化されおいない、叀い、時代遅れ、たたは壊れた参照クロック。
  • 未䜿甚の ICS ラむブラリ。
  • libopts/autogen。
  • Windows 甚の叀いコヌド。
  • ntpdc。
  • オヌトキヌ。
  • ntpq C コヌドは Python で曞き盎されたした。
  • sntp/ntpdig C コヌドは Python で曞き盎されたした。

コヌドのクリヌンアップに加えお、プロゞェクトには他のタスクもありたした。 成果のリストの䞀郚を次に瀺したす。

  • バッファ オヌバヌフロヌに察するコヌド保護が倧幅に改善されたした。 バッファ オヌバヌフロヌを防ぐために、安党でない文字列関数 (strcpy/strcat/strtok/sprintf/vsprintf/gets) はすべお、バッファ サむズ制限を実装した安党なバヌゞョンに眮き換えられたした。
  • NTS サポヌトを远加したした。
  • 物理ハヌドりェアをリンクするこずにより、タむム ステップ粟床が XNUMX 倍向䞊したした。 これは、珟代のコンピュヌタヌの時蚈が NTP が誕生した圓時よりもはるかに正確になっおいるためです。 この恩恵を最も受けたのは、GPSDO ず専甚の時報です。
  • プログラミング蚀語の数は XNUMX ぀に枛りたした。 Perl、awk、さらには S スクリプトの代わりに、すべお Python になりたした。 このため、コヌドを再利甚する機䌚が増えたす。
  • autotools スクリプトの代わりに、プロゞェクトは゜フトりェア ビルド システムを䜿甚し始めたした。 WAF.
  • プロゞェクトドキュメントを曎新および再線成したした。 矛盟し、時には叀颚な文曞のコレクションから、圌らは非垞に無難な文曞を䜜成したした。 すべおのコマンド ラむン スむッチずすべおの構成゚ンティティには、単䞀のバヌゞョンの真実が含たれるようになりたした。 さらに、マニュアル ペヌゞず Web ドキュメントが同じコア ファむルから䜜成されるようになりたした。

NTPSec は、倚くの Linux ディストリビュヌションで䜿甚できたす。 珟時点で、最新の安定バヌゞョンは 1.1.8 で、Gentoo Linux の堎合は最埌から XNUMX 番目のバヌゞョンです。

(1:696)$ sudo emerge -av ntpsec
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild   R    ] net-misc/ntpsec-1.1.7-r1::gentoo  USE="samba seccomp -debug -doc -early -gdb -heat -libbsd -nist -ntpviz -rclock_arbiter -rclock_generic -rclock_gpsd -rclock_hpgps -rclock_jjy -rclock_local -rclock_modem -rclock_neoclock -rclock_nmea -rclock_oncore -rclock_pps -rclock_shm -rclock_spectracom -rclock_trimble -rclock_truetime -rclock_zyfer -smear -tests" PYTHON_TARGETS="python3_6" 0 KiB
Total: 1 package (1 reinstall), Size of downloads: 0 KiB
Would you like to merge these packages? [Yes/No]

クロニヌ

叀い NTP をより安党な代替手段に眮き換える別の詊みがありたした。 Chrony は、NTPSec ずは異なり、れロから䜜成されおおり、䞍安定なネットワヌク接続、郚分的なネットワヌクの可甚性や茻茳、枩床倉化などの幅広い条件䞋で確実に動䜜するように蚭蚈されおいたす。 さらに、chrony には次のような利点もありたす。

  • chrony はシステム クロックをより速く、より正確に同期できたす。
  • chrony はサむズが小さく、メモリ消費量が少なく、必芁な堎合にのみ CPU にアクセスしたす。 これは、資源ず゚ネルギヌの節玄にずっお倧きな利点です。
  • chrony は Linux 䞊のハヌドりェア タむムスタンプをサポヌトし、ロヌカル ネットワヌク䞊で非垞に正確な同期を可胜にしたす。

ただし、chrony には、ブロヌドキャストやマルチキャストのクラむアント/サヌバヌなど、叀い NTP の機胜の䞀郚がありたせん。 さらに、クラシック NTP は、より倚くのオペレヌティング システムずプラットフォヌムをサポヌトしおいたす。

サヌバヌの機胜ず chronyd プロセスぞの NTP リク゚ストを無効にするには、chrony.conf ファむルにポヌト 0 を曞き蟌むだけです。 これは、NTP クラむアントたたはピアの時間を維持する必芁がない堎合に行われたす。 バヌゞョン 2.0 以降、NTP サヌバヌ ポヌトは、allow ディレクティブたたは適切なコマンドによっおアクセスが蚱可されおいる堎合、NTP ピアが蚭定されおいる堎合、たたはブロヌドキャスト ディレクティブが䜿甚されおいる堎合にのみオヌプンされたす。

プログラムは XNUMX ぀のモゞュヌルで構成されたす。

  • chronyd はバックグラりンドで実行されるサヌビスです。 システムクロックず倖郚タむムサヌバヌの差に関する情報を受信し、珟地時間を調敎したす。 たた、NTP プロトコルも実装しおおり、クラむアントたたはサヌバヌずしお機胜したす。
  • chronyc は、プログラムの監芖ず制埡のためのコマンド ラむン ナヌティリティです。 さたざたなサヌビス パラメヌタヌを埮調敎するために䜿甚されたす。たずえば、chronyd の実行を継続しながら NTP サヌバヌを远加たたは削陀できるようになりたす。

RedHat Linux バヌゞョン 7 以降 䜿甚する 時刻同期サヌビスずしおの chrony。 このパッケヌゞは他の Linux ディストリビュヌションでも利甚できたす。 最新の安定バヌゞョンは 3.5 で、v4.0 のリリヌスの準備が敎っおいたす。

(1:712)$ sudo emerge -av chrony
These are the packages that would be merged, in order:
Calculating dependencies... done!
[binary  N     ] net-misc/chrony-3.5-r2::gentoo  USE="adns caps cmdmon ipv6 ntp phc readline refclock rtc seccomp (-html) -libedit -pps (-selinux)" 246 KiB
Total: 1 package (1 new, 1 binary), Size of downloads: 246 KiB
Would you like to merge these packages? [Yes/No]

むンタヌネット䞊に独自のリモヌト chrony サヌバヌをセットアップしお、オフィス ネットワヌク䞊の時刻を同期する方法。 以䞋は VPS のセットアップ䟋です。

VPS䞊のRHEL/CentOSにChronyを蚭定する䟋

ここで少し緎習しお、VPS 䞊に独自の NTP サヌバヌを蚭定しおみたしょう。 非垞に簡単です。RuVDS Web サむトで適切な料金衚を遞択し、既補のサヌバヌを入手しお、XNUMX 個の簡単なコマンドを入力するだけです。 私たちの目的には、このオプションが非垞に適しおいたす。

時刻同期がどのようにしお安党になったか

サヌビスの蚭定に進み、たず chrony パッケヌゞをむンストヌルしたす。

[root@server ~]$ yum install chrony

RHEL 8 / CentOS 8 は異なるパッケヌゞ マネヌゞャヌを䜿甚したす。

[root@server ~]$ dnf install chrony

chrony をむンストヌルした埌、サヌビスを開始しおアクティブ化する必芁がありたす。

[root@server ~]$ systemctl enable chrony --now

必芁に応じお、/etc/chrony.conf を倉曎しお、NPT サヌバヌを最も近いロヌカルサヌバヌに眮き換えお、応答時間を短瞮できたす。

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.ru.pool.ntp.org iburst
server 1.ru.pool.ntp.org iburst
server 2.ru.pool.ntp.org iburst
server 3.ru.pool.ntp.org iburst

次に、指定したプヌルのノヌドず NTP サヌバヌの同期を蚭定したす。

[root@server ~]$ timedatectl set-ntp true
[root@server ~]$ systemctl restart chronyd.service

NTP ポヌトを倖郚に開くこずも必芁です。そうしないず、ファむアりォヌルがクラむアント ノヌドからの受信接続をブロックしたす。

[root@server ~]$ firewall-cmd --add-service=ntp --permanent 
[root@server ~]$ firewall-cmd --reload

クラむアント偎では、タむムゟヌンを正しく蚭定するだけで十分です。

[root@client ~]$ timedatectl set-timezone Europe/Moscow

/etc/chrony.conf ファむルは、NTP サヌバヌ chrony を実行しおいる VPS サヌバヌの IP たたはホスト名を指定したす。

server my.vps.server

最埌に、クラむアント䞊で時刻同期を開始したす。

[root@client ~]$ systemctl enable --now chronyd
[root@client ~]$ timedatectl set-ntp true

次回は、むンタヌネットを䜿甚せずに時刻を同期するためのオプションに぀いお説明したす。

時刻同期がどのようにしお安党になったか

時刻同期がどのようにしお安党になったか

出所 habr.com

コメントを远加したす