web-dev-qa-db-ja.com

最も賢い人が侵害できないサーバーインフラストラクチャは基本的に可能ですか?

TL; DR:

おそらく、質問の詳細に行き過ぎたかもしれませんが、トピックが非常に広範囲に見えるため、質問が明確であることを確認したかったのです。しかし、ここにあります。 「スマート」という言葉は、文字通りではなく、基本的に意味されます。

最も賢い人が侵害できないサーバーインフラストラクチャは基本的に可能ですか?

バックグラウンド:

私は、大規模な銀行のサーバー(またはチートサイト)が侵害されていることに関する記事を読みました。この事件に関心のあるインターネットセキュリティ会社へのインタビューに基づく1つの記事で、専門家は、特に中国には高度なスキルを持つ犯罪組織があると主張しました膨大なリソース、ツール、そして世界で最も優れたハッカーのいくつかを自由に使えるロシア、そしてこの専門家は、「地球上にシステムはもちろんありません」(もちろんWebに接続されている) t利用可能なリソースで妥協する。

(ウェブサーバー)情報セキュリティはチェスに似ています:

私はチェスプレイヤーではありませんし、情報保護者でもありません。エキスパートですが、私はサーバーソフトウェアを作成するプログラマーであり、これに興味があります。私のシナリオを無効にする可能性のあるチェスの要素を無視して、たとえば最初に移動する人に利点またはある種の何かがある場合、情報セキュリティは世界で最高の2人のチェスプレーヤーの間のチェスのゲームであると想像してください。

クラシック:あなたと私がチェスのゲームをプレイする場合、チェスのゲームに関するより優れたスキル、知識、および知性を持っているものが勝つでしょう。

プログラムされたシナリオ1:または、デジタルでゲームをプレイする場合、最も賢いチェス用ソフトウェアを書いた私たちが勝つでしょう。

プログラムされたシナリオ2:または、ここが鍵です。おそらく、両方がチェスとプログラミングの両方で非常に優れているため、チェスをプレイするコンピューターを作成することができます。私たちのプログラムのどちらも勝つことができないほど良いプログラムであり、ゲームは行き詰まりで終了します。

Web上のクライアントと通信する必要があるが、犯罪者がデータストアに侵入することを許可してはならない、バンキングサーバーやアプリケーションサーバーなどのサーバーインフラストラクチャを検討してください。

  • このサーバーインフラストラクチャのセキュリティはプログラムされたシナリオ1のようになる可能性があります。つまり、最高のソフトウェアと情報セキュリティの知識を持っている人、たとえばセキュリティ戦略を考案した人は、常に安全性に関係なく、サーバーインフラストラクチャの防御を突破するチャンス。 基本的に完全な防御は不可能です。

  • またはProgrammed Scenario 2のようになることもあります。この場合、基本的にはよりスマートなプログラムでは利用できないセキュリティ戦略を使用するサーバーインフラストラクチャを開発できます。 基本的に完全な防御が可能です。

質問

それはどれですか?

30
Viziionary

セキュリティは証明できますが、証明されている内容を理解する必要があります

https://sel4.systems/FAQ/proof.pml

高水準の自然言語での証明は次のとおりです。

SeL4マイクロカーネルのバイナリコードは、その抽象的な仕様で説明されている動作を正しく実装し、それ以外は何もしません。さらに、仕様とseL4バイナリは、整合性と機密性と呼ばれる従来のセキュリティプロパティを満たします。

完全性とは、データを許可なしに変更できないことを意味し、機密性とは、データを許可なく読み取ることができないことを意味します。

私たちの証明はさらに一歩進んで、データが許可なしにある程度までは推論できないことを示しています。いわゆる情報サイドチャネル(隠れチャネルとも呼ばれる)が存在することが知られています。証拠は、正式なモデルに存在する情報推論チャネルのみを対象とします。機密性の証拠は、カーネル内のすべてのストレージチャネルを対象としますが、経験的に処理する必要があるタイミングチャネルは除きます。

では、なぜ誰もが単にsel4を使用しないのですか? (現在、最も遭遇する可能性が高い場所は、一部のAppleデバイス)のTrustZoneプロセッサ上です。

答えは、証明はカーネルをカバーするだけであり、実行したいユーザースペースソフトウェアはカバーしないということです。たとえば、その上で実行する可能性のあるアプリケーションの言語実装は言うまでもなく、安全であることが証明されたWebサーバーはありません。また、Webアプリケーションが安全であることを証明する必要もあります。これらのものを開発することは非常に大規模な投資を必要とし、大企業は作ることに興味がありません。

高セキュリティシステムは通常、キーおよびログイン管理ポイントで攻撃されます

管理者が誤ってパスワードをPastebinに残してしまった場合でも、システムの安全性は重要ではありません。先日、TSAの従業員がTwitterで手荷物ロックに(物理的な)TSAマスターキーの写真を投稿したので、これらはすべて侵害されました。脆弱なパスワード、推測可能なパスワード、安全に保存されていないパスワード、不正なハードウェアセキュリティトークン、コピーされた指紋:これらはすべて、攻撃ベクトルの可能性があります。

31
pjc50

"根本的に完全な防御は不可能です。"

チェスでは、64の正方形、2人のプレイヤー、および1セットの不変の一般的に知られているルールがあります。

サーバーインフラストラクチャには、無数のアセットとそれらのアセットにアプローチする方法、未知の数のプレイヤー、ルールを意図的に曲げたり、破ったり、迂回させようとするプレーヤーによって絶えず変化するルールがあります。

私のポイントを証明する2つの要素を考えてみましょう:ゼロ日チョコレートバー

まず、ゼロデイはゲームのプレイ中にルールを変更します。一方がこの要素の利点を得る一方で、もう一方はその利点を認識しておらず、最終的に知られていても、これらの攻撃に対抗できない可能性があります。各ゼロデイは、ゲームに均等に適用されない新しいルールです。 「完璧なセキュリティ戦略」を考案して完全に適用できたとしても、ゼロ日は、戦略が防御側には知られていないかもしれない未知の弱点に基づいて構築されていることを意味します。

第二に、チョコレートバーは他のどの要素よりもインフラストラクチャのセキュリティを破るためにより多くのことができます。私が言いたいのは、人々は賄賂や「サイドを切り替える」ように誘惑され、反対側にアドバンテージを与えることができるということです。フィッシング、賄賂、データ漏洩などはすべて、ゲームの人間側の一部であり、テクノロジーが完全に説明することはできません。インフラストラクチャに力を持つ人間がいる限り、システムに対するその弱点は常に存在します。

何をすべきか?

歴史上、防御のための大規模な試みが予期せぬ小さな何かによって打ち負かされた複数の状況が見られます(たとえば、万里の長城の門がモンゴル人の二重工作員であった側室に開かれました)。防御側としての目標は、完全な防御を実装することではなく、攻撃をすばやく確認して完全に対応できる、弾力性のある透明なインフラストラクチャを設計することです。より高い壁ではなく、より警戒する民兵。揺るぎない基盤ではなく、置き換え可能なアーキテクチャ。

76
schroeder

彼らがそのようなシステムを見つけたと信じる特定の理由を誰も見つけていません。

あなたはチェスについて言及します。これは8x8グリッドの素晴らしいゲームです。最近のサーバーはそれよりも少し複雑だと考えてください。代わりに、よりリアルにするために、65536x65536のボードでプレイしてみましょう。また、チェスでは、プレイするほど、可能なポジションが少なくなります。代わりに、より現実的なシステムはGoのようなものです。プレイすればするほど、ポジションが絡み合います。囲碁のゲームはチェスのコンピューターでの私たちの仕事を愚かに見せていることに注意します。

1970年頃のコンウェイは、囲碁のゲームを分解しようとしました。彼は、ボードがサブゲームに分割されているように見えることがよくあることを発見しました。彼は彼らが一緒に働く方法が非常に複雑であることを発見しました。その結果、彼は超現実的な数を見つけました。これは、物理学で使用する実数よりも文字数が多い数体系です。冗談ではありません。実際にGoで分断して征服して勝つよりも、全天候を予測する方が簡単です。ここで「勝利」のケースはありますか?たぶん。それを見つける幸運。確実に知る唯一の方法は、一度に65536x65536ボード全体を説明することです。

Kevin Mitnickは彼の著書の1つで次のようにコメントしています。

真に安全な唯一のコンピュータは、インターネットから切断され、電源がオフで、プラグが抜かれ、武装した警備員の下でコンクリートのバンカーに保管されているコンピュータです。それでも、たまにチェックしてみます。」

18
Cort Ammon

チェスとの比較は、システムを保護することが何ではないかを示しているので興味深いです。チェスと比較して、ITセキュリティの善玉と悪者の戦いには固定されたルールがないため、対戦相手が誰なのかわからず、チェス盤の外で攻撃される可能性があります。そして、対戦相手が数値を失った場合、あなたが失っていない間に新しい数値を得ることができます。

  • システムを保護するためのリソース(時間、お金、知識)が限られています。攻撃者も限られたリソースしか持っていませんが、あなたが興味深いターゲットである場合、合計であなたよりも多くのリソースを持っているかもしれない十分なハッカーが興味を持っています。
  • これらの限られたリソースでは、すべてを保護する必要があります。これは、攻撃者が侵入するために使用する可能性のあるすべての(そしておそらくあなたには知られていない)方法/エクスプロイトを閉じることを意味します。攻撃者は1つの方法を見つけてそれを使用する必要があります。
  • それとは別に、ユーザビリティとセキュリティの間には矛盾があります。パスワードによるアクセス制御、忘れたパスワードをリセットする方法などを見てください。これらはセキュリティと使いやすさのトレードオフであるため、100%安全ではありません。すべてのユーザーを2要素認証、クライアント証明書、スマートカードなどのより安全な方法に移動できますが、これらはユーザーにとって不便すぎて顧客を失う可能性があります。また、それらは100%安全ではなく、パスワードよりも安全です。
  • また、セキュリティとパフォーマンスの間にも矛盾があります。すべての受信データを分析して攻撃を検出するのが難しいほど、攻撃は遅くなります。問題により多くのハードウェアを投入することはできますが、線形にスケーリングすることはできないため、速度と分析の深さのバランスを見つける必要があります。
  • そして、あなたは安全でないソフトウェアを扱わなければなりません。クローズドソースの可能性があるため、見たり修正したりすることはできませんが、オープンソースを使用しても、偶然または故意に隠されたバグやバックドアを見つける時間や経験がありません。あなたがすべてのお金と最高の専門家を手に入れても、評価と分析を行うための限られた時間がある場合でも、専門家の数に比例してスケーリングしません(つまり、あなたが1000人の専門家を得るのに役立ちませんこれらの1000行は互いに独立していないため、1000行のコードを分析する必要があります。
  • そして最後に、インフラストラクチャを保護し、それにアクセスできる人々がいます。彼らは人間なので、ソーシャルエンジニアリングで攻撃されたり、賄賂や脅迫を受けたりする可能性があります...

要約すると、理論的には、システムを保護するために無制限のリソース(時間、お金、知識、無制限の高速ハードウェア)があり、そのような専門家であり、便利なアクセス方法よりも安全を好む顧客しかいない場合がありますが、実際にはそうではありません。いつでも入る方法があるので、あなたはそれに備える必要があります。 100%安全なインフラストラクチャを実現するとは思わないでください。代わりに、外部からの攻撃に対して堅牢であるだけでなく、妥協点を検出して可能な限り迅速に回復できるインフラストラクチャを作成してください。害はあるかもしれませんが、それは制限されるべきです。

8
Steffen Ullrich

このようなシステムはおそらく存在しますが、おそらく見つかりません

セキュリティで使用する多くのアルゴリズムがあります。それらのいくつかはおそらく正しいです。具体的には、それらのいくつかはおそらく指数関数的に破壊することが困難です。確かに、破壊することがまったく不可能であるものを知っています(1つのタイムパッド)。問題は実装です。

セキュリティは、誰が賢いかということではありません。セキュリティとは、防御側の慎重さに対するものです。攻撃者の知性と創造性。アルゴリズムを非常に注意深く追跡できれば、防御者は優秀である必要はありません。完璧な防御対完璧な攻撃は、セキュリティランドでの防御的な勝利をもたらします。

問題は、サーバーが複雑なマシンであることが多いことです。あなたはOSとプログラムの奇跡、そして異なるプロトコルとプログラミング言語とAHHを持っています。このような環境で完全なセキュリティを確保することはほぼ不可能です。

一方、システムが十分に単純であれば、人間はおそらくそれを完璧にすることができます。たとえば、1から6の数字としてエンコードされた$ M $というメッセージがあります。次に、$ K $のキーとなるサイコロを振り、$ M $と$ K $モジュラー$ 6 $を追加します。 、暗号文$ C $を取得します。

暗号文は$ 5 $です。メッセージは何でしたか?

これは非常に単純な例であり、すべての可能性をもっともらしく考えることができました。一方、サーバーはかなり複雑です。

これからどのようなアドバイスを得ることができますか。 シンプルに保つ、愚かです。(K.I.S.S.の原則です。)完璧なサーバーを作成するのは人間の能力を超えているかもしれませんが、サーバーとアルゴリズムがシンプルであればあるほど、優れています。コードを文書化し、理解しやすくし、シンプルにします。コードのすべての行には理由があります。シンプルなオペレーティングシステムを使用します(注:シンプルさと使いやすさを混同しないでください。iOSではなくArch Linuxと考えてください)。最小限のプログラムのみを保持します。小さな定義を持ち、奇妙なルールなどのないプログラミング言語を選択してください(私はあなたを見ています、javascript。)これは完璧にはなりませんが、より安全にするための長い道のりになります。

8
PyRulez

セキュリティがチェスのようなものだとしましょう

ここにいるほとんどの人とは異なり、私は実際にはチェスについてかなり知っており、セキュリティについてこれを有用な答えにするのに十分です。

チェスを検討すると、次のことがわかります。

可能性の数は非常に多いため、すべてを明示的にカバーする実用的な戦略はありません。

したがって、実際にも見られるように、最強の参加者が勝つ可能性が最も高いです。しかし、それでも、強い人/コンピュータープレーヤーが(かなり)弱い人に負ける可能性は常にあります。

結論として:

あらゆる可能な状況での正しい動きを知らなければ、完全な防御は不可能です

6

完全な防御は基本的に可能です。

私は実際にはチェスでは平凡ですが、世界で最も偉大なプレーヤーを膠着させることは私にとっては些細なことであり、最速の最高のチェスコンピューターを膠着させることさえできます。

私は自分の手に座り、時間がなくなるのを待つだけです。チェスのグランドマスターは私に対する勝利を主張できません。

同様に、侵入不可能なサーバーはクライアントの要求に応答することはなく、最も賢いハッカーでさえも倒すことはできません。

その完璧なセキュリティにもかかわらず、それは全く役に立たない。

4
emory

はい。 nullサーバーインフラストラクチャは、基本的に違反することは不可能です。

サーバーなし=違反なし=違反することは基本的に不可能。

それ以外は基本的に違反する可能性があります。

2
LawrenceC

情報セキュリティは基本的にチェスとは異なります。チェスは情報セキュリティに適用するのに適したモデルではありませんが、2つの違いは理解できるでしょう。

チェスは完璧な情報のゲームです。両当事者は、すべてのピースが常にどこにあるかを正確に知っています。情報セキュリティでは、情報の多くが隠されており、一方が他方よりも多くの情報を持つことで利点を得ることができます。 「賢い」はこれとは何の関係もありません。

チェスは、すべてのルールが既知であり、設定されているゲームです。情報セキュリティにおいては、ルールの存在はせいぜい疑わしいだけです。 「ルール」は、環境、つまり移動するターゲットとしてよりよく考えられています。

チェスはゼロサムゲームです。情報セキュリティでは、誰もが失う可能性があり、誰もが勝つことができ、誰も勝つことができず、勝ち負けは何の意味もありません。

チェスは2人で遊ぶゲームです。情報セキュリティには、動機の異なる複数のアクターがあります(「ゼロサムゲームではない」を参照)。

チェスには明確に定義された勝敗があります。勝利は完全で、損失は完全です。情報セキュリティははるかに曖昧であり、まったく白黒ではありません。システムは部分的に危険にさらされる可能性があり、損失は軽減されます。

2
Steve Sether

これの背後にある真の問題はむしろです:防御を破るためにどれだけのリソースを費やして喜んでですか?また、完全に安全であると見なすことができる最低限のセキュリティレベルとは何でしょうか。これまでアクセスできませんでしたか?ランダムデータにアクセスしますか?または、利益のために使用できるデータへのアクセスのみが違反と見なされますか?

あなたのチェスの例を使用するために:将来いつかwillチェスのすべての可能なゲームのすべてのポジションを保持するコンピューターを構築します。自分自身に対してピットインすると、おそらく100%ドロー/ステイルメイトになります。可能な動きの「限定された」セットで、これは完全な防御の有効な仮定です。

現実には、ルールや考えられる状況を回避するには選択肢が多すぎる。データを盗むのではなく、すべてのバックアップの存在を停止したいだけかもしれません。サーバーファシリティを爆撃し、機能しない残骸に満足します。

現実には、侵入検知システム、コールドストレージ(ウェブ上に存在しないストレージシステム)、攻撃的なアカウントとパスワードの管理プロセス、防御的なアプリケーション設計と使用行動分析などのソリューションは、これらのシステムをそのようなものにハッキングするためのコストを上昇させる可能性があります。レベル、非常に深いポケットだけがそれを攻撃することさえ考えることができました。

そして、「ジェームズ・ボンド」のような能力とそれを引き出すためのよく訓練された戦術スキルセットが必要です。ハッキングコミュニティの特定の非常に大きな部分では、これは「ほぼ」完全な防御と見なされます。

ニュースで最もハッキングされたサイトは、誰が「デジタルローン」を利用しているかさえわかりません。多くのハッカーは、検出されずに、数週間から数か月をシステムに費やしています。彼らは最小の防衛に数百万ドルを費やすことを単に考えていませんでした、それは法律で要求されておらず、訴訟は「ハッキング防御」チェスのゲームを始めるよりも潜在的に安価だからです。

1
Michael K.

それは、無名で恥知らずで創造的で粘り強い人々を排除するシステムを設計するよりも、最も賢い人々を排除するシステムを設計するほうがはるかに簡単であることを証明しています。

賢い人々は、努力と探査の予測可能な道に沿って、識別可能なパターンの方法で進み、惨めに予測可能で類似した一連の仮定に依存します。天才は常に2と2が常に4であり、決して22でないか、または2と2であるという加算機能を利用することを常に想定しているようです。

経験的で合理的なシステムへの最大の脅威-人間の言葉で-は天才レベルのIQを下回る敵であることが判明し、社会的規範に従うのではなく、異端者になるか、自分のドラムのビートに合わせて踊る傾向があります群れの中で、希少なものが社会的グループの賢い人であると特定されることは決してありません。よく調整されていて、自分の肌に快適で、自分が誰であるか、どの地域でもパックリーダーではないというステータスを受け入れています。この人物は、彼らを取り巻くような軽薄な個人的な競争に左右されず、関与していません。自己主導型、自己始動型、内部の現実に触発されて駆動される、この個人は、特定のspark=自発性と本物の非合理的な創造性を揺るぎない持続性と内的で緩和されたものと結びつけます。懲戒意志または意志。

彼らはあなたの社会的検証を必要としないので、ソーシャルエンジニアリングのエクスプロイト全体が役に立たないことがわかります。彼らは多くの場合、群集の中で気づかれずに行きます。なぜなら、彼らは自分たちの興味と注意力の面白さや価値があると特定した人々を救い、誰の注意も気にせず、競争もしないからです。

私は個人的に、私が最も優れた天才の設計および実装仕様に反抗し、違反し、無効化するような人生の貴重な機会をいくつか目にしました。

繰り返しますが、私が説明したような1人の人に対してよりも、最も賢い人に対してシステムを設計する必要があります。

正当な方法がある場合は、不法な方法があります。

基本的に侵害することが不可能である唯一のサーバーは、アクセスすることが基本的に不可能であるサーバーです。ネットワークセキュリティでは、これは「エアギャップ」として知られています。サーバーまたはサブネットは、外部を含む他のネットワークから物理的に切断されています。このエアギャップネットワークのコンポーネントの物理的なセキュリティと組み合わせて、許可されていない人がネットワークに接続されているコンピューティングハードウェアに手を伸ばして物理的に触れるのを防ぎます。このネットワーク上のコンピューターは、ハッカーによって攻撃できません。

... やや。繰り返しになりますが、正当な方法がある場合、不法な方法があります。物理的なセキュリティは、最終的には人間の努力であり、したがって最終的には誤りです。ソーシャルエンジニアリングを使用して、「ゲートキーパー」をだまして無許可の人物を侵入させるか、または権限のある人物をだまして不正な人物の代わりにしてはいけないことを行わせることにより、対面のセキュリティプロトコルを回避できます。関係する人間が物理的なセキュリティプロトコルに従うように訓練されていればいるほど、これは起こりそうにありませんが、物理的なセキュリティをブルートフォース(ゼロダークサーティッドレイドのようなもの)までバイパスする可能性は常にゼロではありません。少しでも微妙ではありませんが、理論的には地球上のあらゆる企業本部に対して犯される可能性があります。それは、適切な機器を備えた適切な人々に仕事を任せることだけの問題です)。

1
KeithS

明らかに、人為的エラーを防ぐ、または攻撃者がシステム管理者に賄賂を贈るのを防ぐ完璧な技術的解決策はありません。しかし、これの純粋に決定論的な技術的な側面を見ると、答えは(ごくわずか)はいです。

ネットワークに接続されたシステムを関数として見ることができます。計算したい関数がいくつかあります。ここで、入力はシステム状態であり、ビットはネットワーク経由で受信され、出力は新しいシステム状態とビットがネットワーク経由で送信されます。関数が計算可能であれば、それを正確に実行するシステム実装があります。

問題は、与えられたシステムが関数を完全に計算するかどうかを決定することは一般に不可能であり、システムの動作が複雑な場合、実際には確実に決定することが不可能であることです。したがって、システムが本当に(この限られた技術的な観点から)突き通せない人は、それを確信することはできません。逆に、非常に複雑なシステムのセキュリティをisと完全に確信している人は、その信念を非合理的に信じています。

1
Thom Smith