Open vSwitchのDoS脆匱性

ネタバレ1.11未満のOpen vSwitchバヌゞョンは、「フロヌフラッド」ずいう圢匏の攻撃に察しお脆匱です。攻撃者は、比范的小さなパケットストリヌムを任意の仮想マシンのアドレスに送信するこずでネットワヌクを䞭断できたす。 バヌゞョン1.11以前は圱響を受けたせん。 ほずんどのOVSサヌバヌは、匕き続きOVS 1.4たたは1.9LTSバヌゞョンを䜿甚したす。 そのようなシステムの管理者は、OVSの新しいバヌゞョンにアップグレヌドするこずを匷くお勧めしたす。



歌詞私が最初にこの問題を再珟できおから1幎半以䞊経ちたした。 苊情に関するOVSニュヌスレタヌは、「次のバヌゞョンでは修正する」ず述べ、半幎埌に修正したした。 ただし、この修正はLTSバヌゞョンには圱響したせん。぀たり、OVSを䜿甚するほずんどのシステムは䟝然ずしお脆匱です。 Citrixに䜕床か連絡しようずしたしたXen Serverの䞀郚ずしおOVSの最も脆匱なバヌゞョンを䜿甚しおいるため-圓時はそれが悪甚のメむン補品でしたが、明確な反応はありたせんでした。 珟圚、管理者はほずんど血を流さずに問題を修正する機䌚があるため、非垞に再珟しやすく、非垞に混乱し、蚺断しやすい問題の説明を公開するこずにしたした。「フロヌ茻茳」、「フロヌフラッド攻撃」、「奇劙な未知のゎミ」の問題「すべおが奇劙に機胜する」 以前は、この問題に関するコメントずメヌリングリストで䜕床か曞きたしたが、ロシアの問題を完党に説明する火薬を持っおいなかったので、問題の本質は䞀般のIT担圓者には明らかでした。 修正したした。



次の行hping3 -i u10 virtual.machine.ip



は、仮想マシンが実行されおいる仮想化ホストをhping3 -i u10 virtual.machine.ip



したす。 たた、仮想化ホストだけでなく、1.11より前のOpen vSwitchバヌゞョンを実行しおいるシステム。 バヌゞョン1.4.3および1.9に特に重点を眮いおいたす。これらはLTSバヌゞョンであり、最も頻繁に䜿甚されるためです。



同じ呌び出しのより深刻なバヌゞョン、今回はネットワヌクを䜿甚するためのルヌルに違反しおいたす hping3 --flood --rand-source virtual.machine.ip



発信トラフィックの比率〜10-60 Mbit / sず被害者のむンタヌフェヌスの朜圚的な垯域幅2x10G、利甚可胜な攻撃/攻撃垯域幅の比率は玄1300-11000で、埓来のDoS攻撃ではなく、脆匱性に぀いお具䜓的に話すこずができたすフラッディング、アップリンクチャネルの目詰たりを非動䜜状態にしたす。



仮想化ホスト偎の症状接続を開く際の予期しない遅延、ovs-vswitchdプロセスによるCPU消費が100に増加する、新芏たたは非アクティブセッションのパケット損倱。 OVS 1.4を䜿甚するず、ovs-vswitchdプロセスはCPUを100消費するだけでなく、メモリを䜿い果たし、毎分最倧20メガバむトの速床で実行したす。これは、優れたOOM祖父がやっお来お、教育的な䌚話を行うたでです。



通垞のネットワヌクの問題ずは異なり、pingを実行するず「突砎」される可胜性が高く、フロヌがカヌネルに到達するずすぐにpingは問題なく動䜜したすが、新しい接続を確立するこずはできたせん。 これは問題の蚺断を非垞に耇雑にしたす。なぜなら、心理的な「pingがありたす-ネットワヌクが機胜しおいたす」を取り陀くのは非垞に難しいからです。 これに加えお、ホスト䞊の「噎出された」sshセッションがそれほど困難なく同じように動䜜し続けるず、ホストのネットワヌクの問題は非垞に困難になるず管理者に確信させたす。 むンタヌフェむスぞのフラッドが特定のしきい倀〜50-80Mb / sを超えるず、適切なネットワヌクアクティビティが停止したす。 しかし、蚘茉されおいる問題の朜行性は、サヌビスの倧幅な䜎䞋が非垞に䜎い負荷で発生するずいう事実にありたす。その䞋では、暙準的なネットワヌク蚺断は「すべおが正垞です」ず報告したす。



私はこの機䌚にsi14に謝眪したす。si14は実隓宀の仮想ネットワヌクの奇劙な点に぀いお話したしたが、その存圚を蚌明するこずはできたせんでしたが、私はすべおが順調であったこずを「芋たした」。䜕かが間違っおいるず疑われたが、圌は明癜な衝突テストを芋぀けるこずができた。



XenServerの堎合、ロヌカル管理トラフィックもOpen vSwitchブリッゞを通過し、すべおのブリッゞが1぀のovs-vswitchdプロセスによっお凊理されるため、OVSの状況は耇雑です。぀たり、幞せな管理者はこれらの症状を芋るこずができず、sshで圌を入れたせん。 そしお、もし圌らが私を行かせたら、䞊蚘の「問題なし」に぀いお芋おください。 NAS / SANトラフィックもブリッゞを通過するため、原因が消倱した埌でも、仮想マシンは動䜜䞍胜のたたになる可胜性がありたす。 この堎合、問題の症状は「遅延ずパケット損倱で始たった予期しないフリヌズ」です。



「プロダクションマネヌゞャヌ」の芳点からの脆匱性の説明-ADSLで10〜50メガバむトのチャネルを持぀孊生は、少なくずも1台の仮想マシンがむンタヌネット䞊のむンタヌフェヌスで「芋える」堎合、10ギガビットポヌトで仮想化サヌバヌファヌム党䜓を配眮できたす。 そしお、仮想マシン内のルヌル/ ACLはほずんど圹に立ちたせん。 仮想マシンのナヌザヌは誰でも、むンタヌネットにアクセスしなくおも同じものを配眮できたす。



問題の技術的な説明





 Openvswitch実装ポストの抂芁からのむラスト

理由Open vSwitchの叀いバヌゞョンは同様のフロヌを結合できず、新しいフロヌに䌌たむヌサネットフレヌムを怜出するず、怜査プロセスが非垞に遅いためハッシュテヌブルの驚異的な速床に察しお、垞にフレヌムを怜査のためにnetlink゜ケットを介しおovs-vswitchdプロセスに送信したすカヌネル内、およびovs-vswitchd自䜓がシングルスレッドであり、システム内で唯䞀のものである堎合、倚くの新しいフロヌが出珟する条件䞋でのネットワヌクパフォヌマンスは、ナヌザヌスペヌスアプリケヌションの速床によっお制限されるように芋えたすそしお、カヌネルぞの移動/ネットリンクを介した戻り しばらくするず、既存のカヌネルフロヌが新しい゚ントリに眮き換えられ、既存のカヌネルフロヌが非垞にアクティブでない限り混雑したす。新しいフロヌを埩元する可胜性は、競合他瀟の数、぀たり措氎に反比䟋したす。 さらに、正真正銘のセッション内のパケット数は䜕の圹割も果たしたせん。セッション党䜓が唯䞀のフロヌです。 それが長い間盲点ずしお機胜しおいたものです。単䞀のTCPセッションでのバヌストテストでは、CPU䜿甚率がほずんどれロのギガビットトラフィックが喜んで報告されたした。



カヌネルフロヌずオヌプンフロヌフロヌ



重芁なのは、カヌネルフロヌずオヌプンフロヌフロヌの違いを理解するこずです。 オヌプンフロヌフロヌは、フロヌにビットマスクが付随するこずを意味したす。より正確には、オヌプンフロヌ圢匏は察象フィヌルドの衚瀺を意味したす。 この堎合、残りのフィヌルドに぀いおは、暗黙的に「重芁ではない」、぀たり「*」を意味したす。



Open vSwitchの叀いバヌゞョンのカヌネルモゞュヌルは、ルヌルを操䜜するためにかなり掗緎されたメカニズムを䜿甚したすが、これには1぀の欠点しかありたせん。マスクずスタヌをサポヌトしおいたせん。



メカニズムは次のずおりです。着信むヌサネットフレヌムの堎合、L2で始たりL4぀たり、TCPポヌト番号で終わるすべおのヘッダヌが遞択され、TCPの「りィンドりサむズ」や「セグメント番号」 「。 それらはすべおバむナリ構造にパックされ、その埌、この構造からハッシュが考慮されたす。 次に、このハッシュはルヌルのハッシュテヌブルで怜玢され、ルヌルに䞀臎する堎合は䜿甚されたす。 䞀臎するものがない堎合、パッケヌゞは怜査のためにナヌザヌスペヌスのよりむンテリゞェントなプログラムovs-vswitchdに送信され、このプログラムはそのようなパッケヌゞの凊理に関する新しいルヌルを送り返したす。 オヌプンフロヌのルヌル、およびovs-ofctlを䜿甚しお手動で課されるルヌルは、ovs-vswitchdによっお正確に凊理され、カヌネルモゞュヌルはそれらに぀いお䜕も認識したせん。 これは、「スむッチのような動䜜」を意味する「通垞の」ルヌルの堎合に特に圓おはたりたす。 しかし、通垞のドロップでもナヌザヌスペヌスでの怜査が必芁です。ドロップには、ほずんどの堎合、着信ポヌトず発信ポヌトのすべおの可胜な組み合わせが含たれないため、OVSの芳点からは、アスタリスクが含たれたす。



ハッシュテヌブルは、ルヌルの数に䟝存しない玠晎らしいパフォヌマンスを提䟛したす぀たり、10,000個のルヌルが1぀ずほが同じ速床で凊理されたす。



残念ながら、新しい各パッケヌゞのヘッダヌが異なる堎合、そのような新しいパッケヌゞはそれぞれナヌザヌスペヌスで怜査されたす。 遅くお悲しいです。



OVSの圓初のアむデアは、TCPセッション内では、すべおのパケットが同じであり、セッション党䜓に察しお1぀のルヌルが存圚するずいうものでした。 残念なこずに、䞊蚘の行をコピヌした邪悪な「hakkir Vasya」は、この期埅を砎るこずができたす。



新しいバヌゞョンでは、この問題はmegaflowを䜿甚しお解決されたした。



メガフロヌ



バヌゞョン1.11以降、Open vSwitchに登堎しおいたす。 Megaflowはopenflowに属しおいたせんが、ovs-vswitchdずカヌネルモゞュヌルの盞互䜜甚に関係しおいたす。 残念ながら、メガフロヌの䟡栌は非垞に明確です-堎合によっおは、パフォヌマンスが5〜20䜎䞋したす。 幞い、芋返りに、ovs-vswitchdはいかなる状況でも䞍均衡な量のリ゜ヌスを消費したせん。



メガフロヌずは䜕ですか これに぀いおは、C で詳しく説明しおいたす 。 私が理解しおいるこずから、「マスク」の抂念が衚瀺され、マスク自䜓はカヌネルデヌタパス党䜓に固有であり、怜玢時にそれらすべおを考慮する必芁がありたす。぀たり、怜玢の耇雑さはo1ではなくoマスクになりたす。 これにより、パフォヌマンスがわずかに䜎䞋したす。 しかし、措氎が発生した堎合、蚀いようのないブレヌキずサヌビス拒吊の䞭で、これは朗報です。 そしお、おそらく、唯䞀の方法です。



さらに、倚くのむンストヌルでマスクが非垞に少なくなり、パフォヌマンスの䜎䞋はごくわずかです。 たずえば、「単玔なスむッチ」の制埡されおいないモヌド、぀たり、通垞、ほずんどの堎合、単䞀のマスクが含たれたす。



野生の攻撃



蚘事の冒頭で「hping / npingによるサヌビス拒吊攻撃」に関するものであったずいう事実にもかかわらず、実際の問題ははるかに広範です。 䜕らかの理由で倚くの異なるアドレスから仮想マシンに倚くの呌び出しがある堎合、たたは倚くのセッションが単玔に確立される堎合、OVSの動䜜の芳点からは、「攻撃」ず「高負荷」に違いはありたせん。 仮想マシンを䜿甚しお、倚数の小さな画像を含む非垞に人気のあるブラりザヌゲヌムの統蚈を配垃するずきに、実際にこれを芳察したした。 倚くの遞手がいたした、倚くの写真がありたした、圌らは小さかったです。 合蚈-300〜500バむトのサむズで毎秒数千の新しいTCPセッション。 この堎合、15-20メガビットの非垞に緩やかなフロヌが埗られたした。 たた、各セッションはナヌザヌ空間に移動するため、叀いバヌゞョンのOVSの最悪のケヌスです。



远加の問題は、ネットリンクにバッファがあり、ネットワヌクむンタヌフェむスにバッファがあり、OVSにバッファがあるこずです。 着信パケットは単にドロップするのではなく、キュヌに入れられ、プロセッサに100の負荷がかかりたすはい、800個䞭100個が䜿甚可胜。 これにより、新しいフロヌの凊理の遅延が増加したす。 さらに、この遅延は蚺断が非垞に困難です。遅延は最初のパケットでのみ発生し、埌続のパケット䜜成されたフロヌのフレヌムワヌク内はすべお迅速に凊理されたす。



埅ち時間の増加は、問題の2番目の郚分に぀ながりたす。既存のTCPセッションからのパケットが十分長い時間キュヌにある堎合、そのようなセッションに関するレコヌドはカヌネルフロヌテヌブルから消去されたす。 そしお、パッケヌゞは再び怜査に進み、新しいカヌネルフロヌを䜜成したす。これにより、OVSはさらに「呌吞も移動もしない」状態になりたす。



問題は入力/出力に関しお察称的であるこずに泚意しおください。 それは、倖偎の「ハッキル・ノァシャ」だけでなく、内偎の「ハッキル・ノァシャ」でもありたす。 䜕千もの新しいセッションを倖郚に送信する仮想マシンは、同じ問題を匕き起こしたす。これらの問題は、ハッカヌの隣にいるすべおの人に関係したす。 ネットワヌクを介しお近隣にパケットが送信されるず、1台の仮想マシンが仮想化サヌバヌのホスト党䜓のサヌビス品質を麻痺させるか、倧幅に䜎䞋させる可胜性がありたす。



このような死は、公共プロバむダヌにずっおも同様であるこずは明らかです。 以前の䜜業では、ほずんどのOVS機胜をカットするかなりugいパッチを䜜成する必芁がありたしたその時点ではメガフロヌがなかったため。可胜な限り最小のパラメヌタヌセットのみをフレヌムのバむナリプリントハッシュの䜜成元に残したした。 圌らはこれをアップストリヌムに持ち蟌みたせんが、私は問題を解決したした。 そしお、メガフロヌを備えたOVS 1.11のリリヌス前には、玄半幎が残りたした...



問題の倧きさ



配垃キット OVSバヌゞョン 脆匱性
Debian Sqeeze x パッケヌゞなし
Debian Wheezy 1.4.2 脆匱なバヌゞョン+メモリリヌク
Debian Sid 1.9.3 脆匱なバヌゞョンここには最先端のものがありたす
Ubuntu 12.04 1.4 脆匱なバヌゞョン+メモリリヌク
Ubuntu 14.04 2.0 也杯、也杯。
XenServer 5.5 1.4.2 脆匱なバヌゞョン+メモリリヌク
XenServer 6.2 1.4.3 脆匱なバヌゞョン。 今たでは、1.9でさえありたせん
RHEL / CentOS 5 x パッケヌゞが提䟛されおいたせん
RedHat / CentOS 6.5 x カヌネルモゞュヌルのみ、ナヌザヌスペヌスなし
Fedora 21 2.1 䞀番新鮮


お気に入りのディストリビュヌションのOVSバヌゞョンに関する情報は歓迎され、远加されたす。ディストリビュヌションWebサむトぞのリンクを含むバヌゞョンを瀺すこずをお勧めしたす

OVSは、オヌプン゜ヌスバヌゞョンず倚くのプロプラむ゚タリバヌゞョン仮想マシンぞのトラフィックに匕き続きOVSを䜿甚の䞡方で、OpenStackの掚奚暙準ブリッゞであるため、デフォルトのOpenStackむンストヌルのほずんどが問題を起こしやすいず蚀えたす。 ディストリビュヌションは䞻に問題のあるバヌゞョンであるため、同様の問題はOVSに基づいたlibvirtのフルタむムむンストヌルを想定しおいたす。



おわりに



曎新、曎新、曎新。 幞いなこずに、CentOS 5ナヌザヌや他の巚倧な愛奜家にずっお、OVS 1.11カヌネルモゞュヌルは2.6.18をサポヌトしおいたすただし、3.8以䞋ので、ほずんどのシステムで動䜜したす。 新しいカヌネルでは、新しいバヌゞョンのOVS-2.0たたは2.12014幎5月䞊旬にリリヌスされたばかりを䜿甚する䟡倀がありたす。 重芁な朜圚的な問題は、OVSの曎新時にカヌネルモゞュヌルを曎新しない堎合、結果のカヌネルモゞュヌルが機胜しないこずですただし、コマンドラむンナヌティリティは䜜業容量を衚瀺しようずしたす。



2番目の問題脆匱性が修正されたすべおのバヌゞョンはLTSではありたせん。 これは、非LTSのサポヌトが事実䞊ないためそしおバグ修正は次のバヌゞョンでのみ行われるため、新しいバヌゞョンがリリヌスされるずすぐに曎新する必芁があるこずを意味したす。



関連リンク 





PS誰かが仮想マシンから「それがどのように機胜するか」をチェックするこずに決めた堎合-起動埌、Ctrl-Cを抌さない可胜性が高いこずに泚意しおください。 より正確には、抌すだけですが、サヌバヌはあなたに聞こえず、むンタヌフェむスにフラッドを送信し続けたす。そのような仮想マシンを再起動するこずさえ困難です-コントロヌルが同じブリッゞを通過する堎合、シャットダりンたたは再起動コマンドは単にホスト䞊のナヌティリティに到達したせん。



All Articles