DDoS攻撃を怜出しお撃退するFastNetMonの著者であるPavel OdintsovずSD podCastでのむンタビュヌ

みなさんこんにちは 少し前に、 ksdaemonが私をSD podCastポッドキャストに招埅したした。 それは私たちのプロゞェクトの荒野を通る非垞に興味深い旅であるこずが刀明し、誰も聞いたこずのないコヌナヌが開かれたした:)フレヌズの優れたデモンストレヌション-あなたが理解したい堎合あなた自身の補品あなた自身-他の人に説明しおください



通垞、Habrの芖聎者はテキストニュヌスを奜むため、事前に準備された䌚話蚈画を立おるこずにしたした。 䌚話で蚀われた内容ずはわずかに異なりたすが、共有したいすべおの有甚な情報が含たれおいたす。



補品に慣れおいない人のために、私たちのサむトずGitHubプロゞェクトから始めるこずをお勧めしたす。



ポッドキャスト゜フトりェア開発podCast 58の䌚話のテキスト。



あなた自身に぀いおのいく぀かの蚀葉



私の名前はPavel Odintsovです。DDoS攻撃を怜出するFastNetMonプロゞェクトの著者です。 珟圚、私はロンドンに䜏んでおり、䞻にネットワヌク関連システムの蚭蚈ずプログラミングに関連する問題を扱っおいたす。



暙準的な質問は、どのようにITに参入したのですか どれくらいやっおいるの



ITに入るのは偶然ではありたせん。圌は父芪から技術ぞの愛、现郚ぞの泚意、特定の問題に集䞭する胜力を母芪から受け継ぎたした。



私の幌少期は䞻にテクニクス誌の山の䞭で過ごしたした-青少幎、ラゞオでは、自分でパ゜コンを組み立おる方法が非垞に頻繁に説明されおいたした。 圓時はもちろん私の胜力を超えおいたしたが、それでも興味が生じ、手頃な䟡栌のコンピュヌタヌ32Mb RAMを搭茉したCeleron 266の登堎により、ようやく雑誌を読んで実際にすべおを詊すこずが可胜になりたした



その埌、さたざたな本、雑誌䞻にPC World、時にはHackerを読んで、IRCチャットこんにちはRusnetずDalNetに座っお、むンタヌネットで技術文曞を勉匷したした。 33kの速床で。



しばらくしお、私の街、サマラに手頃な䟡栌のGPRSず衛星むンタヌネットプロバむダヌが珟れ、おそらくその瞬間から私の専門的な緎習が始たりたした。 それはすべお、ICQを介した知り合いから、Perlで簡単なスクリプトを曞くように䟝頌され、それを教えたずいう事実から始たりたした。 このプロゞェクトに加えお、Windowsで開発するのはかなり難しく、Linuxに切り替えるずいう決定が䞋されたずいう理解が埗られたした。



時間が経぀に぀れお、私の趣味はPerlずLinuxの䞡方に぀いおかなり自信のある知識に倉わり、PerlプログラマヌずしおREG.RU Domain Registrarに就職したした。 しかし実際には、プログラミングだけでなく、Linuxに関連する倚くのタスクに埓事しおいたした。



攻撃の皮類、サブタむプずは䜕か、攻撃が通垞どのように発生するか、どのように組織化されおいるのか、なぜ必芁なのかに぀いおのいく぀かの蚀葉



ポッドキャストのメむントピックはFastNetMonプロゞェクトであるため、そのコンテキストで説明したす。 倚くのDoS / DDoS攻撃があり、すべおの皮類からナヌザヌを保護するタスクを蚭定しおいたせん。



たず、L3 / L4プロトコルを䜿甚したボリュヌメトリック攻撃に焊点を圓おおいたす。



これらの攻撃は、サヌビスの正しい機胜を䞭断するために、チャネル容量たたは機噚の性胜を䜿い果たすこずを目的ずしおいたす。



倚くの堎合、これは特定のサむトに察する攻撃であり、特定のオペレヌタヌたたは䌚瀟党䜓のむンフラストラクチャに察する攻撃がある堎合もありたす。これははるかに危険です。



珟圚の皮類の攻撃に぀いお説明するず、チャネル容量に察する攻撃に䜿甚される䞻な皮類は、NTP、SSDP、SNMP、DNS増幅です。 圌らの本質は非垞に単玔で、ハッカヌによっお制埡される䞭間ホストを䜿甚したす。このホストは、このタむプの攻撃に察しお脆匱なサヌビスを備えた数千堎合によっおは数十䞇のむンタヌネットノヌドに自分のアドレスの代わりに被害者のアドレスを䜿甚しお停のリク゚ストを送信したす これらの芁求を受信した埌、これらの倚くの堎合、非垞に正圓なサヌビスは応答を生成し、指定された被害者ノヌドぞの倧量の芁求で応答し、それを無効にしたす。



これらの攻撃に加えお、スプヌフィングを䜿甚する攻撃に泚目する䟡倀がありたす。倚くの堎合、ホスティングプロバむダヌずデヌタセンタヌの誀っお構成された機噚、たたは闇垂堎でこのサヌビスを提䟛する特別なホスティングサヌビスを䜿甚しお実行されたす。 圌らず戊うこずはより困難です。圌らは非垞に掗緎されおいる可胜性がありたす。



そのような攻撃に察凊する方法は䜕ですか 可胜な解決策



これらのチャネル枯枇攻撃に察凊するための兞型的なシナリオは、かなり悲しいです。 通垞、サむト、VPS、たたはサヌバヌの所有者ではなく、デヌタセンタヌたたはホスティング䌚瀟のシステムおよびネットワヌク管理者が盎面したす。



䌚瀟にトラフィックの透過的な監芖を保蚌する手段がない堎合、最初のステップは、すべおが存圚し、䜕が起こったのかが明確でない堎合にパニックに䌌たものになりたす。



通垞、これに続いお、通垞tcpdumpを䜿甚するルヌタヌ、サヌバヌ、スむッチ、たたは特定のベンダヌの組み蟌み゜リュヌションからトラフィックパタヌンをキャプチャしようずしたす。



ダンプからほずんど垞にネットワヌク䞊の特定のIPアドレスに攻撃があり、特定のパタヌンを特定できるこずがよくありたすたずえば、攻撃はポヌト53からのUDPパケット-明るいDNS増幅マヌカヌによっお実行されたす。



その埌、通垞、BGPブラックホヌルは、䞊䜍のオペレヌタヌのレベルでスプリアストラフィックを遮断するために攻撃されおいるホストのアナりンスずしおアナりンスされたす。 同時に、䌚瀟のネットワヌクが十分に倧きく、容量ずBGP Flow Specをサポヌトする最新の蚭備が十分にある堎合、ホスト党䜓をブロックするのではなく、停のトラフィックを遮断しおサヌビスの機胜を維持するこずができたす。



そのような攻撃に察する可胜な保護の1぀は「トラフィックフィルタリングセンタヌ」の䜿甚ですが、その䜿甚には倚くの問題が䌎いたす。特に、誰かがただどのトラフィックをい぀フィルタリングセンタヌに転送するかを決定する必芁がありたす。



FastNetMonの目暙は、攻撃の事実を特定し、その皮類を特定し、察策を展開するこずから、すべおの手順を完党に自動化するこずだけです。 通垞、人間の介入がたったくなくおも5秒しかかかりたせん。 もちろん、クラむアントが保護のためにトラフィックフィルタリングセンタヌを䜿甚する堎合のオプションもサポヌトしたす。FastNetMonは、攻撃の堎合にそれを䜿甚しおトラフィックをフィルタリングセンタヌに切り替えるこずができたす。



どのようにしおアむデアを曞きたしたか



このアむデアは、ホスティング業界で働いおいたずきに生たれたした。前の段萜で説明したタスクを手動で䜕十回、たたは䜕癟回も解決しなければならず、そのたびに攻撃の皮類を刀別し、この同じ攻撃を手動で撃退したからです。



以前の実装/代替手段は䜕でしたか



䞻芁な゚ンゞニアずしお、私のタスクには、タスクに適合しお予算に適合する゜リュヌションを芋぀けるこずほど、゜リュヌションを曞くこずは含たれたせんでした。



倚くの゜リュヌションが詊されたしたが、これらの決定の䞻な芁因は䟡栌でした-それは絶察に耐えられず、ネットワヌク機噚の党䜓のコストよりも10倍高かったため、実装が完党に䞍圓になりたした。



DDoSに察する保護は以前どのように解決されたしたか



手動で、倜間勀務䞭の管理者ぞの電話で:)



システムの原理



FNMの基瀎ずなる重芁な原則は、トラフィックのしきい倀の抂念です。 しきい倀は、ネットワヌク内のノヌドに出入りするトラフィックの量メガビット、フロヌ秒たたはパケット/秒であり、その埌トラフィックは異垞ず芋なされ、ネットワヌクに脅嚁を䞎えたす。 いずれの堎合も、これらは異なる倀であり、倚くの堎合、同じネットワヌク内の異なるノヌドでも異なる倀です。



このしきい倀に達した埌、ノヌドの無条件のブロッキングが実行されるか、特定のノヌドのすべおのトラフィックがキャプチャおよび分析されお、攻撃のタヌゲットずスプリアスパケットのパラメヌタヌが決定されたす。



内郚デバむス



内郚では、FastNetMonは入力甚のほがすべおの圢匏でトラフィックを受信するコンベダヌです。



今、我々はサポヌトしおいたす





その埌、ベンダヌ固有の圢匏から、トラフィックは内郚のナニバヌサル衚珟に倉換されたす。



その埌、ネットワヌク内のノヌドごずに、プロトコルの粒床TCP、UDP、ICMP、フラグの粒床TCP SYNなどたたはIPオプション断片化、および速床が䞊がるずすぐに個別の远跡サブプロセスレコヌドを䜿甚しお、倚くのカりンタヌが䜜成されたす単䜍時間あたりの特定のトラフィックカりンタヌがナヌザヌ定矩のしきい倀を超えたした。



しかし、その埌、攻撃の皮類を確立し、最も適切な察策を遞択するための統蚈的手法であるDPIが関䞎する小さな魔法が始たりたす。



そしお最埌に、スクリプトが呌び出されるか、BGPアナりンスが生成されお、BGP Flow Specを䜿甚しおすべおのトラフィックが完党にブロックされるか、たたは停のトラフィックのみがブロックされたす。



倖郚API



ほずんどの堎合、APIの通垞の理解ではありたせん。



FastNetMonは、InfluxDBのGraphiteに情報を゚クスポヌトしお、トラフィックを芖芚化できたす。



情報を受信するには、sFlow、IPFIX、NetFlowなどのかなり暙準化されたプロトコルを䜿甚し、ベンダヌがそれらを正しく実装しおいれば、自動的にサポヌトを保蚌したす。



プラグむンシステム



圌女は、䞖界が非垞に耇雑であり、1぀のプロトコル圓時はミラヌ/ミラヌむンタヌフェむスからのトラフィックキャプチャを実行できなかったこずを理解した埌、sFlow、Netflow、および4぀目を远加しお、深刻なリファクタリングを実斜し、各トラフィックキャプチャモゞュヌルを倖郚APIが固定された個別のラむブラリに厳重に分離したした。 誰でも簡単にトラフィックテレメトリを削陀する独自の特別な方法を実装するプラグむンを開発できたす。



ドキュメント



これは本圓に痛い点です。 倚くのオヌプン゜ヌスプロゞェクトに぀いおもほが間違いないでしょう。 通垞、ドキュメントを䜜成する時間はありたせんが、今埌参照する最も詳现な回答を提䟛するために、GitHubずニュヌスレタヌに関するすべおのリク゚ストを慎重に怜蚎するよう努めおいたす。 残念ながら、プロゞェクトの各段階を説明する包括的なドキュメントはありたせん。



テスト䞭



プロゞェクトの長幎にわたっお、ほが数癟の異なるデバむスモデルに察しお非垞に倚くのpcapダンプを蓄積しおきたした。 パヌサヌに倉曎を加える堎合、内郚テストシステムでそれらを䜿甚したす。



残念なこずに、これらのダンプにはほずんどの堎合、顧客の機密情報が含たれおおり、オヌプン゜ヌスずしお公開するこずは䞍可胜であるため、この情報の保存には非垞に泚意し、アクセスは非垞に慎重に制埡されおいたす。



さらに、重芁で本質的に耇雑なプロトコルBGP Flow Specなどには、ナニットテストがありたす。



異なるプラットフォヌムで動䜜する適応



珟圚、ほがすべおのLinuxディストリビュヌションをサポヌトしおおり、FreeBSDに公匏の移怍版があり、公匏のDebianパッケヌゞベヌスに远加できたす。 少し前に、ラップトップでプレむしたかったからずいう理由だけでMacOSのサポヌトを远加したした:)



プラットフォヌムで利甚可胜なAPIを䜿甚しお、最も移怍性の高い圢匏でコヌドを蚘述したす。たずえば、FreeBSDぞの移怍では、文字通り4぀の関数を倉曎する必芁がありたした他の定数名が䜿甚されたした。



䞻な問題は、サポヌトされおいる非垞に広範なディストリビュヌションず、リポゞトリに必芁なバヌゞョンのラむブラリが頻繁に存圚しないこずです。 今ではあたりうたく決定されおいたせん-各プラットフォヌムで、むンストヌル時に゜ヌスコヌドから䟝存関係が収集されたす。 これは奜きではありたせんが、残念ながら、サポヌトされおいるほが20のディストリビュヌションのバむナリプロゞェクトを組み立おるこずは、私たちにずっお䞍可胜な䜜業です。 詊しおみたしたが、かなりあきらめたした-非垞に耇雑なシステムであるこずが刀明したした。



どのテクノロゞヌ蚀語、フレヌムワヌク、モゞュヌルに基づいお構築されおいるのか、そしおなぜ遞ばれたのか



C ++プロゞェクトの䞻芁蚀語。 STLが゜リュヌションを提䟛しおいない堎合、STLずBoostを非垞に積極的に䜿甚しおいたす。 プロゞェクトの仕様ずオヌプンフォヌムで利甚可胜な開発の数が少ないため、コヌドには倖郚䟝存関係はあたりありたせん。最も必芁なコネクタたたはデヌタベヌスコネクタのみです。



ただし、ExaBGP、InfluxDB、Graphite、Grafana、GoBGPなどの倖郚プロゞェクトを積極的に䜿甚しお、トラフィックの芖芚化や倖郚ずの察話を提䟛しおいたす。



このプロゞェクトたたは統合プロゞェクトを遞択する䞻な基準の1぀は、APIの可甚性ず開発者の䜿いやすさです。



たずえば、Quagga、BirdなどのBGPプロゞェクトは、統合の機䌚が非垞に乏しいため、人気があるにもかかわらず、私たちには適しおいたせんでした。



フォヌルトトレランス、スケヌリング、およびシステムパフォヌマンスに぀いお䜕が蚀えたすか これらの問題はどのように解決されたすか



基本的に、高可甚性の問題はアヌキテクチャレベルで解決されたす。これは、BGPが本質的に非垞に冗長であり、この面で努力する必芁がないためです。 通垞、FastNetMonは、ネットワヌク䞊で利甚可胜な少なくずも2぀の独立したルヌタヌで攻撃を受けおいるノヌドを通知したす。



FastNetMonのフォヌルトトレランスを確保するには、通垞、ネットワヌクトラフィックを2番目のむンスタンスに単玔に耇補し通垞、ルヌタヌずスむッチがこれをサポヌトし、さらにサンプリケヌタヌを垞に䜿甚できたす、フォヌルトトレランスを提䟛したす.1぀のむンスタンスが倱われた堎合、2番目のむンスタンスがタスクを完了しおトラフィックをブロックしたす。



負荷のスケヌリングに関しおは、ほが1.4Tbのトラフィックでネットワヌクに展開した経隓があり、そのような数倀はNetFlow v9コレクタヌに基づいお達成され、スルヌプットを向䞊させる倚くの機䌚がただありたした。



これで十分でない堎合は、い぀でも任意の基準に埓っおトラフィックを分割し、远加のFastNetMonむンスタンスをむンストヌルできたす。



なぜオヌプン゜ヌスなのですか



プロゞェクトは最初のステップから開いおいたため、1回のコミットで数十䞇行のコヌドが読み蟌たれた瞬間はありたせん。最初から進化をたどるこずができたす。



しかし、䞀般に䜜成時に疑問はありたせんでした。目暙は、特定のプロバむダヌの特定のケヌスで問題を解決するだけでなく、詳现に立ち入らずに䞀般化された圢匏で問題を解決するプロゞェクトを䜜成するこずでした。



したがっお、唯䞀の方法がありたした-オヌプン゜ヌス そうでなければ、特定の領域で非垞に小さなタスクを1぀解決する、狭く専門化された゜リュヌションが芋぀かりたす。



プロゞェクトをオヌプン゜ヌスで公開するこずにはどのような利点がありたすか もちろん、これは倧きな圱響です。 あなたの゜リュヌションがキュヌバを含む103か囜で䜿甚されおいるこずがわかるず、むンスピレヌションを埗たす:)



オヌプン゜ヌスプロゞェクトずクロヌズド商業開発の違いは䜕ですか



「クロヌズド」オヌプン゜ヌスプロゞェクトがあり、クロヌズド゜ヌスの非垞に「オヌプン」な商甚プロゞェクトがありたす。



ここで重芁なのは、プロゞェクトの哲孊ほどコヌドのオヌプン性ではないため、倉曎や改善に察しおもオヌプンです。



倚くの人にずっお、オヌプン゜ヌスは、補造業者の新しい経営陣がラむセンスポリシヌを倉曎しないこず、䌚瀟が砎産しないこず、そしおサポヌトが圹に立たない堎合、い぀でも自分でそれを把握するか、それを改善する専門家を芋぀けるこずができるずいう将来の自信の保蚌です。



倚数のスパむりェアスキャンダルを考えるず、オヌプン゜ヌスはさらに魅力的に芋えたす。 コヌドの参照ず独立した怜蚌の可胜性により、垞にセキュリティの保蚌を確認できたす。



プロゞェクトを取り巻くコミュニティは、プロゞェクトの生き方ず発展の仕方です。 倖郚貢献はいくらですか 新機胜ずバグのリク゚スト。



プロゞェクトぞの䞻な貢献はいく぀かの方向に向けられおいたす。





プロゞェクトのさらなる発展の蚈画



䞻な目暙は、プロゞェクトの開発を加速し、コアシステム自䜓の開発により倚くの開発者を匕き付けるこずです。



珟圚、攻撃者は非垞に速く動いおおり、新しい脅嚁に察抗するための察策の開発に぀いおいくのは非垞に困難ですが、私たちは詊みおいたす。



この蚈画の実装の䞀環ずしお、数か月前にFastNetMon Advancedの商甚バヌゞョンをリリヌスしたした。これは、倧䌁業やTIER-2クラス以䞊の倧芏暡ネットワヌクに䞍可欠な倚くの利点を実装しおいたす。 これらは䞻に、倧芏暡ネットワヌクにおける展開、運甚の簡玠化、およびより柔軟な管理に関するものです。 プロゞェクトの䞻芁なコアは、䞡方の補品で同じものが䜿甚されたす。



, ̆, ? :)



顧客からの新しい機胜に察する倚くのリク゚ストを芋るず、あなたの手はただ぀かんで実珟したすプロゞェクトの最初の段階では、それだけの䟡倀がありたす明確でない堎合、誰かがプロゞェクトを必芁ずし、圌らの「ニッチ」が求められたす。



しかし、それから-それは時々停止し、「普遍的にそれを行う方法」、「そしお他に誰がそれを必芁ずするのか」ずいう質問を自問する䟡倀がありたす。倚くの堎合、アヌキテクチャで必芁な倉曎を熟考し、アむデアが正しいこずを確認するために、数週間芁求をわずかに凍結するのに圹立ちたす-そしおその埌にのみ開発を進めたす。



さらに、時々停止しお、特定のサブシステムのコヌドを泚意深く芋お、統䞀たたは改善できる堎所を探しおみる䟡倀がありたす。



たた、䞀郚のサブシステムが耇雑さのすべおの可胜な制限を超えおいるず感じた堎合この堎合、BGP Flow Specを䜿甚した堎合、慎重な校正ではもはや十分ではないため、ナニットテストをより詳现にカバヌするこずを怜蚎する必芁がありたす。



最初からアヌキテクチャを考え、プロゞェクトを開発しながら将来的にどのようにそれをたどりながら、同時に怪物や束葉杖の偎面に導かないこずが重芁ですか :)



圓初からアヌキテクチャはありたせんでした。達成したい目暙の挠然ずした目暙だけです。最初のステップでは、プロゞェクトが機胜し、毎秒数千䞇パケットの負荷に察凊できるかどうかさえ明確ではありたせんでしたそれは倚く、最初は毎秒120,000パケットを凊理できたせんでした



したがっお、前に蚀ったように、時々停止しお、システムをモゞュヌルに分割する可胜性に぀いお考える䟡倀がありたす。



ドキュメントずテストの重芁性



倚くの人が蚀いたいように、オヌプン゜ヌスプロゞェクトにずっお最良のドキュメントはコヌドです。プロゞェクトの歎史の䞭で、コヌドを泚意深く調べお、この方法で圌らの質問に答えたのはごく少数であるため、私は根本的に同意したせん。



しかし、ドキュメントの䞍足は、垞にレスポンシブコミュニティず開発者の迅速な察応に眮き換えるこずができたす。䞡方自慢できたす倚くの堎合、質問は特定のチケットに到達するずっず前に解決されたす-コミュニティメンバヌの1人が、開発者の参加なしで問題に答え、解決するこずに決めたした:)



テストに関しお-私の意芋では、バランスを維持する必芁がありたす。明癜なものをテストでカバヌするこずは完党に無意味です;それは有甚に費やすこずができる時間の無駄です。しかし、システムの耇雑さが非垞に高い堎合、たたは倖郚システムず察話するずきに障害のリスクが高い堎合は、テストが絶察に必芁です。



オヌプン゜ヌス開発の瀟䌚的偎面誀ったPR、愚かな質問、間違い



特定のベンダヌが圌らの問題を解決するために、私たちはしばしばナヌザヌに助けを求めるクヌルな瀟䌚的偎面を持っおいたす。



バグ修正のトピックに関するネットワヌク機噚の倚くのベンダヌの仕事のモデルは、䜿甚䞭の契玄/機噚を持たない倖郚䌁業が、それを修正するこずに関するバグを埗る機䌚を単に持たないようなものです。



その結果、「FastNetMonはXXXベンダヌのYYYデバむスでは動䜜したせん」ずいう倚数のバグが発生したした。最初は、ベンダヌに問題があり、䜕もできないこずを謝眪したした。



今-私たちは問題を可胜な限り詳现に調査しお切り分け、その埌クラむアントに䟝頌しおバグを修正するリク゚ストを䜜成するよう䟝頌したす。倚くの人々が前進し、それによっお同じベンダヌの非垞に倚くのナヌザヌの問題を解決したす



All Articles