0

たとえば、コンパイルされたアプリケーションのソケットが123.456.789.0に接続するように設計されている場合。123.456.789.0に接続されているかどうかを確認するにはどうすればよいですか?これを行う方法はありますか?

アイデアはこれです:他の人が私のプログラムを編集してアドレスをたとえば127.0.0.1に変更し、プロキシを介して接続するのを防ぎたいです。

ソケット接続後にアドレスを確認する機能/方法/トリックはありますか?

4

2 に答える 2

4

getpeername関数を使用して、リモートホストのアドレスを取得します。

あなたが言及したように誰かがあなたのプログラムを編集した場合、彼らはおそらくそのようなチェックも変更するでしょう。

于 2009-08-10T17:07:48.553 に答える
3

このアプローチの不安定さについてのnosのコメントは正しいですが、不完全です。提案されたメカニズムを回避するために、プログラムのコードを変更する必要さえありません。

これを回避する最も簡単な方法は、マシンのネットワークインターフェイスの1つにIPエイリアスを追加することです。次に、プログラムは、プログラムが接続するポート上のそのインターフェイスにバインドでき、OSのネットワークスタックは、リモートプログラムではなく、攻撃者のローカルプログラムに接続を送信します。

したがって、この種の破壊を検出できるように、コンピューターのインターフェースをリストする方法を知りたいと言います。対戦相手は反撃し、Winsockコールを親プロセスにルーティングするWinsockフックをインストールした後、プログラムをサブプロセスとして起動します。

次に、プロセススペースにロードされた特定のDLLの実行可能コードセクションを読み取る方法を尋ねられることを期待しているので、コードが期待どおりであることを確認できます。これで、対戦相手はWinsockシムをドロップし、NDISレイヤーフィルターに切り替えて、NICに到達する直前にプログラムからパケットを書き換えます。

次に、Windowsシステムにインストールされているドライバーを一覧表示する方法を教えてくれる人を探しているので、これらのフィルターの1つが存在しないことを確認できます。対戦相手は約6秒間考え、パケットルーティングをねじ込み始め、頭のてっぺんから考えられる少なくとも3つの異なる攻撃の1つを選択することにしました。(いいえ、待ってください、4つです。)

私はセキュリティの専門家ではありません。それでも、私はこれに5分を費やし、すでに7つの異なる方法でセキュリティを打ち負かしています。

あなたは運命にありますか?多分そうでないかもしれません。

あなたが見ることができるリスクの修正を思い付く代わりに、あなたが何を保護しようとしているのかを示す新しい質問を投稿し、専門家にリスクと可能な修正についてコメントしてもらう方が良いでしょう。(ここに追加しないでください。あなたの質問は、すでに正しく、nosによって回答されています。これは別の質問です。)

セキュリティは難しいです。専門知識は、コンピュータサイエンスの他のほとんどの分野よりも、その分野ではるかに重要です。

于 2009-08-12T01:23:33.773 に答える