web-dev-qa-db-ja.com

ポートを開くのはなぜ悪いのですか?

ここにいつも私を困惑させたものがあります。コンピューターで開いているポートがあるのはなぜ悪いのですか?コンピューターにウイルスがないか、ポートをリッスンしている他のプログラムが実際に何かをしていると仮定すると、ポートが開いている場合になぜ問題になるのでしょうか。悪意のある人物がポートにパケットを送信し始めたが、データを受信して​​それを処理する手段がない場合、なぜそれが重要なのですか?コンピュータは、受け取ったデータを勝手に実行するわけではありません。コンピューターがパケットで溢れると、データ量を処理できないためにコンピューターがクラッシュする可能性があることを理解していますが、コンピューター上のファイルを実際に変更するセキュリティ問題のみを考慮しています。

更新

これまでの回答に感謝します。現在、ポートが開いているということは、そのポートでリッスンして悪用できるプログラムがあることを意味しています。しかし、悪用できないソフトウェアを書くことがなぜそれほど難しいのでしょうか。コンピュータに実際に危害を加えるには、プログラムで1つ以上のファイルをアップロードする必要がなく、それらのファイルの1つを実行する必要があります。それは偶然に許すことは信じられないほど難しいようです。

38
aireq

何かが接続を待機していない場合、ポートは開いていません。

すべてのポートをどこにでも開放するのが悪い形である理由は、それらのポートでリッスンしているサービスをエクスプロイトに公開するためです。ファイアウォールが存在する理由は、特定のポートへの接続を許可するものを制限し、サービスによって公開される表面領域を減らすためです。


編集

なぜ人々が悪用できないソフトウェアを書くことができないのかというあなたの質問に対処するには:

これは単純なプログラムではかなり簡単ですが、ソケットを必要とする多くのプログラムは複雑です。そのため、これらのコンポーネントには多くのコンポーネントがあり、その多くは開発者が作成したものではない可能性があります(ライブラリを含む)。ファイアウォールなど、自分で使用できる強化方法がある場合、ネットワークを安全に保つために他の人に依存することはできません。

あなたが指摘したように、任意/リモートコード実行は大きなリスクです。残念ながら、バッファオーバーフローとそれを可能にするその他のセキュリティ上の欠陥は一般的です。 Microsoftのセキュリティアップデートを見てみると、リモートコードの実行または特権の昇格にパッチを当てているに違いない。MSは何百人もの開発者と何十億ドルもの巨大企業です。

38
MDMarra

あなたが書いた更新に関して:

これまでの回答に感謝します。現在、ポートが開いているということは、そのポートでリッスンして悪用できるプログラムがあることを意味しています。しかし、悪用できないソフトウェアを書くことがなぜそれほど難しいのでしょうか。コンピュータに実際に危害を加えるには、プログラムで1つ以上のファイルをアップロードする必要がなく、それらのファイルの1つを実行する必要があります。それは偶然に許すことは信じられないほど難しいようです。

悪用できないソフトウェアを書くのは非常に難しい

私は本 Building Secure Software を読みました、そしてそれが議論した1つはスタックオーバーフローの悪用でした。そこには2つの非常に恐ろしい事実がありました。

  • 特にプログラムがCで記述されている場合、プログラムで悪用可能なスタックオーバーフローバグが発生するのは非常に簡単です。Cプログラミング言語では、多くの関数はデフォルトでは安全ではなく、脆弱な関数を回避するためにプログラマーも知る必要があります。 、または安全のために特別な措置をとる必要があります。
  • ハッカーが使用する必要があるエクスプロイトは短いです-very短いです。これは、アセンブリコードの1ページの半分未満であり、100バイト程度(推測)のマシンコードに変換されます。この悪用コードは、ハッカーのシェル(コマンドプロンプト)にマシンへのアクセス権を与えるのに十分です。大きなファイルのアップロードと実行は必要ありません。正当なデータの真ん中に挿入できる小さなコードだけです。

したがって、ハッカーが(a)スタックオーバーフローバグを持ち、(b)ネットワークを介して悪用可能で、(c)バッファーに100バイトの空き容量があるプログラムを見つけた場合、コンピューターは強制されます。幸い、スタックオーバーフローのバグに関する知識は、今ではかなり一般的な知識ですが、それでもポップアップ表示されます。 5年前とそれ以上の場合、これははるかに頻繁な問題でした。

元の質問に戻り、プログラムの悪用可能なバグによる事故を回避するために、ポートを開かないようにする必要があります。これで2つ目の理由があります。ハッカーが使用するリモートシェルが別の開いているポートであるということです。特別に許可したものを除いてすべてをブロックしているファイアウォールがある場合は、そのリモートシェルもブロックします(ハッカーは引き続きコンピューターに対して他の厄介なことを行うことができるため、自己満足しないでください!)

10
Richard Downer
  • ポートを開く:誰かが尋ねると、コンピュータはこのポートでリッスンしているサービスがあると応答します。つまり、このポートに着信するものはすべて、そのコンピューターで実行されているプログラム(サービス)によって処理されます。
  • 閉じたポート:誰かが尋ねると、コンピュータはそのポートでリッスンしているサービスがないと応答します。 akserは、アドレスに応答するコンピューターがあることを認識します。
  • ステルスポート:誰かが尋ねたとき、彼らは応答を受け取りません。重要なのは、そのアドレスにコンピュータがあるかどうかを隠すことです。 joschiがコメントで指摘されているため、あまり効果的ではない可能性があります。

開いているポートがあれば、入ってくるものを処理するプログラムに利用可能なエクスプロイトがなければ、安全です。しかし、エクスプロイトは常に見つかるので、ターゲットを探すためにネットを巡回する多数のポートスキャンがあることを知っておくとよいでしょう。

閉じられたポートは依然としてakserに応答するため、攻撃者の可能性は他のポートのチェックを続行することを知っています。繰り返しになりますが、これはインターネットが機能するために特定されている方法です。ステルスポートは潜在的な攻撃者に情報を提供しないように試みますが、理論的には仕様を破ります。

セキュリティの観点から見ると、コードが外部データの処理に使用されているため、開いているポートはすべて巨大な穴になります。ファイアウォール(またはNATルーター)が行うことは、システムにいくつかの開いているポートがある場合でも、着信トラフィックがコンピューターに到達しないようにすることです。これにより、すべてのポートが効果的に閉じられます。

8
Ilari Kajaste

実際、私の知る限り、開いているポートとは、プログラムがそれをリッスンしていることを意味します。したがって、データを処理する何らかのサービスがあります。

6
Felix

仮定コンピュータにウイルスがいないか、ポートをリッスンしている他のプログラムが実際に何かを実行している可能性があるため、ポートが開いた?悪意のある人物がパケットをポートに送信し始めたが、データを受信して​​それを処理する手段がない場合、なぜそれが重要なのですか?

仮定はすべての効果の母です:)

申し訳ありませんが安全です... makeuseof.comでお読みください。

テクノロジーの説明:Open Routerポートとそのセキュリティへの影響

3
Molly7244

私はセキュリティエクスポートではありませんが、少し調査しました...「オープン」ポートは、着信TCP接続を受け入れるように設定されているポートです。

アプリがポート9、21、80のみをリッスンしていて、ファイアウォールがこれら3つのポートへのアクセスをブロックしている場合、技術的には開いているポートはありません。たとえばIOWのポート25は、何もリッスンしていないため開いていません。

あなたの質問に答える:コンピューターでポートを開くのが悪いのは、これらのポートが簡単に発見できるためです。発見すると、これらのポートはリスニングアプリケーションの脆弱性の影響を受けやすくなります。

1
Shoeless

同じ理由で閉じるとロック自宅のドアと窓。

0
Steven A. Lowe