このシナリオを考えてみましょう。侵害されたクライアントマシンと、そのクライアントのステータスを監視する「マスター」マシンがあります(IsCompromised = {True | False})。クライアントには、この情報を中継するために、定義された間隔でマスターにチェックインするエージェントがあります。
クライアントが正しい情報を収集して、侵害されているかどうかを判断できると仮定すると(「ルート化」または「ジェイルブレイク」と考えてください)、マスターマシンに送信されているクライアントからの情報が実際に送信されていないことをどのように確認できますかサードパーティのマシンから送信されたものであり、操作または再生されたものでもありませんか?
私の最初の考えはメッセージの暗号化と署名ですが、最悪のシナリオでは、クライアントの証明書が危険にさらされ、署名が認証を提供しません(ただし、クライアントとTLS接続の反対側の間で適切な暗号化を行うことができます。このマシンは危険にさらされているため、MITMの可能性が高いことに注意する必要があります...それは何でも信頼でき、反対側がサーバーであるという現実的な期待はありません)。また、ある種のセッションベースの情報または認証されたハッシュが必要ですが、マシンに秘密がない場合、どうすれば自信を持ってそれを入手できますか?
コンテキストについては、 この記事 を確認してください。
もちろん、ここでは 第3の不変のセキュリティ法則 と戦っていますが、私はこれを十分に考えようとしています。
否認防止は、第三者(裁判官)を説得することです。アリスはメッセージに署名してボブに送信します。これにより、ボブだけがメッセージが実際に届くと確信できます。アリスから変更されていませんが、ボブはそれをチャーリーに見せることができ、チャーリーも納得します。ここでは、クライアントとサーバーのみがあり、サードパーティはないため、「否認防止」はここでは関係ありません。これは認証の問題のように見えます。
最初の答えは不可能です次の理由でです:マシンが完全に危険にさらされているため、攻撃者はその内容全体を読み取る可能性があります。次に、攻撃者は仮想マシンでマシンのクローンを実行し、そのクローンをサーバーと通信させる可能性があります。クローンは、攻撃者が本物のシステムを略奪している間、すべてが順調であることを報告します。暗号学者の観点からは、2つのエンティティ間で、同じことを計算できない場合にのみ、外部(たとえば、本物のウォッチドッグと偽のウォッチドッグ)からの違い、およびcomputeはknowledgeに相当します:ウォッチドッグは、攻撃者が知らない秘密データをウォッチドッグが知っている場合にのみ、攻撃者が偽造できないサーバーへの回答を計算できます。 、および、構造上、これは発生しません。
2番目の答えはそれは実行可能かもしれませんですが、それは条件が正しいことを必要とします。問題を詳しく見ると、攻撃者の目標はサーバーと通信し、侵入先のマシンが生成できないメッセージを送信することであることがわかります。これは、ウォッチドッグが確実に機能できることを意味します妥協が破壊的である場合のみ。たとえば、次のように仮定します。
これらの条件下では、次を使用できます。
HMACを使用したチャレンジ/レスポンスプロトコルは、リプレイ攻撃を防ぎます。 MitMも適用されません。私たちは本当にここで情報理論の根拠にあり、「通常の暗号」ではありません。
残念ながら、上記の条件を保証することは非常に困難です。デバイスが消費者製品である場合(攻撃者は他のデバイスインスタンスを購入し、それらを開いてすべてのコンテンツを見ることができます)、デバイスコンテンツの機密性を実現することはほとんど不可能であり、ほとんどの侵害はではありません少なくともシステムファイルが関係している限り、破壊的です。バッファオーバーフローや同様の脆弱性は、システムファイルに何の変更も加えずに、RAMのみのエクスプロイトにつながります。
したがって、ここで公開するのは、実際的なものよりも理論的な概念です。ただし、これは問題の理解に役立つはずです。隠された変更を防ぐために、ウォッチドッグは完全な妥協によって明らかにされない「秘密」を所有している必要があります。これは一種の逆説的であり、不合理な条件で少し不正行為を行う必要があります。