オープンポートとは何か?セキュリティとの関わりは?

What is an Open Port & What are the Security Implications?

“What is an Open Port & What are the Security Implications?” May 19, 2022 by Brian Chappell より

ポートとは?

ポートとは、ソフトウェアで定義される意味では、ネットワークのエンドポイントを指します。TCP/IPネットワークで行なわれる接続にはすべて送信と受信のポートがあり、送られる各メッセージ(パケット)の送信側と受信側を一意に特定するため、それぞれのIPアドレスをつけて使われます。

TCP/IPベースの通信にはポートが必需品で、それがなければお手上げです。ポートの構成不備や脆弱性があると、脅威の実行者を環境に招き入れる危険な入口になってしまいます。セキュリティ態勢の強化は、ポートがどのように使われているか、そしてどのように保護されているかを理解することにかかっています。こうしたポートがインターネットに接続している場合は、常にクラウドにあるようなものなので特にそうです。

このブログでは、ポートの概要と、その使われ方、留意すべき重大なリスク、環境全体でポート関連のサイバーセキュリティのリスクを軽減する方法などについて述べています。

関連記事 なぜ脆弱性管理からCTEMへと前進すべきか?

なぜポートが必要か?

ほぼすべての人が、IPアドレスをネットワーク上でシステムを「一意に」特定するためのメカニズムとして認識しているでしょう。現在、最もよく使われているIPアドレスのフォーマットは、ピリオドで4つに区切られた8桁番号で、「192.168.1.1」のようになります。これはIPプロトコルの4番目のバージョン(IPv4)です。次のバージョンであるIPv6は、はるかに長いアドレス割り当て方式が用いられ、16ビットごとにコロンで区切られた8つの16進数で表されます。
「2001:0db8:85a3:0000:0000:8a2e:0370:7334」といった具合です。このブログではIpv6は扱いませんが、やはりポートを使っているので、次に述べることは同様に当てはまります。

ネットワーク接続されたシステムにはそれぞれIPアドレスが1つまたは複数あり、各システムはそのネットワークで複数のサービスを提供しています。ポートは、こうしたサービスに一意のアドレスを割り当てる役割を果たします。ウェブサーバのような最も単純なシステムでさえ、ウェブページだけでなくリモートアクセスの機能を持ち、システム自体を管理しているのです。

サービスに特化するためシステムにアドレスを割り当てるには、一歩踏み込んだメカニズムが必要です。ここでポートの出番となります。

ポートはオフィスビルの部屋番号、そしてIPアドレスは同じようにビルの通りの住所だと考えてください。ある特定のオフィスにメッセージを届けるには、入ってきたメッセージを誰かに読んでもらい、誰に宛てたものかを確かめてもらえば済みます。この方式は、メッセージが少量ならうまくいきますが、すぐに管理不能な状態になります。特定のオフィス番号を住所に追加し、メッセージが直接届くようにするほうがずっと簡単で早いのです。この方式なら、メッセージ自体のプライバシーを保てるという利点もあります。

当社のウェブサーバを例にとってみると、ポート80とポート443は、オペレーティングシステム(および構成)のタイプに応じて、ポート22か3389のいずれかと関連していると判断できます。

  • ポート80はHTTP(ハイパーテキスト・トランスポート・プロトコル)データという、あまり安全でないウェブプロトコルのために割り当てられていて、これは時代の流れで徐々に廃れつつある
  • ポート443はHTTPSデータという、HTTPの安全なバージョンのためのデフォルトのポート
  • ポート22は、おもにLinux/Unixシステムとネットワークデバイスで使われるテキストベータのコンソール、Secure Shellデータに使われる
  • ポート3389は、おもにWindowsベースのシステムのコンソールにアクセスするために使われる RDP (Remote Desktop Protocol)に割り当てられる

お気づきの通り、これらのポート番号はいたるところで見受けられます。ポートを16ビットの数字で表す場合は、0から65535までのどの値を使うこともできるのに、なぜこれらのポート番号なのでしょうか? IPアドレスを割り当てているIANA(インターネット番号割当機関)は、ポート番号も割り当てています。ただ、利用できるポートが65535だけだと、専用のポートの割り当ては、IPアドレスよりもずっと難しくなるのです。

では、IANAがポート番号の範囲を決める方法をご紹介します。

ウェルノウンポートまたは特権ポート(ポート番号0~1023)-この範囲は、TCP/IPで使われるほとんどのウェルノウンプロトコル/アプリケーション用にとってあります。これらのポートは、すでにTCP/IP RFPプロセスを介して標準化されているか、このプロセスを経由しているプロトコルとアプリケーションにのみ割り当てられます。これらのポートの背後にあるサービスは一般に、TCP/IPの操作に重要なので、「システムポート」と呼ばれることもあります。

登録済みポート(ポート番号1024~49151)-アプリケーションの多くは、TCP/IPを使い、それぞれに一意に割り当てられたプロトコルを使ってデータをやり取りし、作者はこの番号の範囲からポートの割り当てをリクエストすることができます。よくある分野はデータベースで、Microsoft SQL Serverはポート1433と1434に割り当てられ、Oracleのデータベースはポート2483(1521に代わり)と2484、PostgreSQLは5432に割り当てられています。

プライベート/ダイナミックポート(ポート番号49152~65535)-これらのポート番号は誰でも自由に使えるもので、IANAが保管・管理しているものではありません。この範囲のポートは、おもに上記のウェルノウンポートや登録済みポートに通信を行なうクライアントソフトとも呼ばれるソフトウェアに使われます。登録済みポートは、話したいサービスを割り当てる一つの形態です。クライアント向けダイナミックポートはまた、戻りのトラフィックが正しい場所に返されるようにします。こうした割り当ては一般に、通信セッションの間だけに限られ、常に使えるスペースを確保できるようになっています。

サービスは「リスナー」として、IANAの定義通り適切なポートに登録されます。たとえば、DNSサーバはポート53で待機します。あるサービスでアプリケーションかクライアントのソフトウェアが通信を始めると、プライベートの枠内にあるポートを待ち受けるよう登録されます。外方向へのパケットには、IPアドレスとポートの行先と共に、発信元のIPアドレスとポートも入っています。このモデルによって、リンクの両端がそれぞれ相手側を適切に割り当てられるのです。クライアントの待ち受けポートはセッションごとに違うものにすることができるため、クライアントソフトウェアは同一サーバにある複数のサービスと通信し、しかも、それぞれのセッションを独立させることも簡単です。

オープンポートのセキュリティリスク

ネットワークをきちんと動かすために必須だとはいえ、ポートが攻撃にさらされてしまう可能性は常にあります。

たとえば、オープンポートでは、システムを特定することができてしまいます。これまでも、オープンポート(新しくシステムをインストールしたときのデフォルトのポート構成)で、ポートの特徴がわかり、システムを探っているときには多くの情報を暴露してしまうことになっていました。最近では、オペレーティングシステムがインストールの際に厳重にロックされ、必須でないポートのみを必要に応じて開くようになっているため、こういうケースは減りました。しかし、このように必要に迫られて開くポートによって、システムについてどれほどのことがわかるかは、驚くほどです。

対象のIPアドレス(またはIPアドレスの範囲)をスキャンし、ポートに「開いている」というレポートを返して、そのポートにはトラフィックを待ち受けているソフトウェアがあるということを示せるツールはたくさんあります。そうしたツールは使いやすく、すぐに手に入ります。ポートスキャナーの例を挙げれば、Nmap、Netcat、Advanced Port Scannerや、その他かなり脆弱なスキャナーも含まれます。選べるポートスキャナーは文字どおり山ほどありますが、1997年に初めてリリースされたNmapが、間違いなくいちばん有名でしょう。ITセキュリティに携わる者にとってはポートスキャナーは便利ですが、脅威の実行者にとっては貴重な情報源にもなってしまいます。

下の図は、Nmapのチーム(scanme.nmap.org)でテスト対象に行なわれたNmapスキャンの出力結果です。これを見ると、開示されそうな情報の種類がわかります。ここでの対象は一つですが、Nmapは、複数の対象をリストやCIDR通知といったさまざまなフォーマットに入れることができます。

Nmap output for Nmap test target

Nmapテスト対象のNmapの出力

ウェブサーバのポート80と443がオープンであることは容易に想像できます。ただ、上の例では、このテスト対象に対してはポート80のみがオープンであることがわかるでしょう。TLSを適用してポート443をオープンにすると、デジタル証明書情報で他の情報、つまり、誰が証明書を持っているか、といったことも明らかになってしまいます。

インターネットがより安全なアクセスという方向へ進化しているため、ポート443(HTTPS)はウェブトラフィックの最も一般的なポートとなるでしょう。ただし、ポート80もHTTPリクエストをHTTPSアドレスに転送するため、まだオープンのままです。攻撃者は、ポート443と80がオープンであるのを見れば、かなり確信をもってウェブサーバを見つけることができます。上の例でいえば、ポート80から、もとになっているサービスがUbuntuを実行しているApacheウェブサーバであり(Linuxのディストリビューション)、このサービスがHTTPの「動詞」GET、HEAD、POST、OPTIONSをサポートしていることがわかるのです。

Windows Active Directory Domain Controller(私の実験室ではデフォルトで組み込まれている)に関する結果を見ると、「-Pn」を指定しなければならないことに気づくでしょう。
これでNmapに対し、ホストが応答中であると考えられること、そして最初にpingを送ってチェックしないように、ということを知らせます。私が使ったWindows Serverは、デフォルトでpingが無効になっています。私は、スペースを確保するオプションである「-v」すなわち「冗長」の機能も外しています。関連情報は得られますが、スキャンの操作情報は少なくなることがわかるでしょう。

Port Scan Example - Search for open ports

ポートスキャンの例-オープンポートの検索

ここでは、かなり高い確率でOSが何であるかがわかり、キャプチャされているSSL/TLS証明書もわかります。いずれかの証明書をさらに見ていく(あるいは、「冗長」のオプションでNmapを実行すると、証明書を発行しているサーバについての言及が見つかり、それ以上の手間をかけなくてもネットワークについてさらに詳細が明らかになってしまうのです。

こうした「フィンガープリント」方式だと、攻撃対象のリストから次々に選択することが可能となり、膨大な量の一連の動作を行なわずにすむため、ハッカーは発見される可能性を減らせます。攻撃者はおそらく、Windowsシステムでポート3389を探るでしょうが、SSHがそれほど一般的な構成ではないためポート22には注目しないでしょう。その結果、システムのタイプに関するこのような知識のおかげで、ハッカーのネットワークトラフィックはますます正常なものに見えます。侵入検知システム(IDS)は、Nmapなどのツールでポートに対して行われるスキャンを監視しています。ただし、Nmapはデフォルトでポートスキャンの順序を変えるので、単純なIDSだとすり抜けてしまう可能性があります。

ポートや脆弱性のスキャン動作出発生する偽陽性が煩わしく感じられたら、送信元のIPアドレスをスキャナーに追加して、リストから「排除」できるようにします。監視そのものを完全に無効にしないでください。IDSで発信元のIPを排除できない場合は、他のソリューションを実施することをお勧めします。ソリューションを変えるのは思い切った手段のようですが、偽陽性はアラートの過小評価に、ひいては無視につながってしまうでしょう。

クラウドコンピューティングへのオープンポートの関与

クラウドでは、インターネットにつながっているオープンなポートを介して、あらゆるものがアクセス可能となります。アクセス制御リスト(ACLs)のような技術を使ってすべてのオープンポートを把握し、保護することが必須です。

ポートベースの堅牢化機能を、クラウドにあるあらゆるアプリケーションとオペレーティングシステムに適用しなければなりません。さらに、不必要な、あるいは使われていないポートは無効化すべきです。こうした資産管理手順は、システムを正しく運用するためにはどのような堅牢化が必要か、また堅牢化を解くためには何が必要かというアーキテクチャ上の構図を描くのに役立ちます。

ポートが閉じていてアプリケーションが実行されていれば、攻撃ベクトルはおそらく軽減されるでしょう。しかし、正しい堅牢化のためにはアプリケーションもポートも無効にする必要があるのです。多くのアプリケーションは、特定のタスクを完了させるために、あるサービスとその処理をローカルで行なう必要があり、その一方で、閉じたポートを介して内方向の接続を許容しないようにすることができます。

関連記事 なぜ脆弱性管理からCTEMへと前進すべきか?

ポートを保護し、脅威にさらされる面を減らすためのベストプラクティス

攻撃が精度を増せば増すほど、どの段階であっても攻撃を防いだり検知したりできる可能性は低くなります。存在するかしないかわからないかすかな兆候は、攻撃者がかき消してしまえる範囲にとどまるからです。

環境でポートにまつわるリスクを最小限に抑えるために、何ができるでしょう?
ポートの堅牢化と保護のためのベストプラクティスについて見てみましょう。

1. 手持ちのオープンポートを一覧にして把握しておく

第一のステップは発見です。持っているオープンポートをすべてリストにし、ポートに関連した構成変更がないか、継続的にチェックします。ただし、同じくらい重要なのは、環境全体ですべてのポートがどう使われているかを理解し、文書化しておくことです。この情報が、ポートのセキュリティの基準となります。

2. 活発に必要とされていないポートを閉じる

これは難題かもしれません。システムの運用が、オープンになっている脆弱の恐れのあるポートに依存しているかもしれないからです。もしそうであれば、選択肢2が有効です。

3. 特定の発信元IPアドレス(またはその範囲)に、ポートのアクセスを限定する

この方法は常に有効で、選択肢1が選べない場合は最良の選択肢となります。環境内にいる全員が基幹サーバ――またはどんなサーバでも――のターミナル/コンソールにアクセスする必要はありません。管理者と関連のシステムが使用する範囲のIPのみにアクセスを制限すれば(そのポートのサービスを使って)、環境内のリスク状況を最小限に抑えることになるでしょう。

システムにアクセスしなければならないリモートワーカーがいる場合、セキュアリモートアクセス(SRA)ソリューションを導入し、リモートワーカーがそうしたシステムにアクセスできるようにします。VPN構成と管理スキルにどれだけ自信があったとしても、境界を開放してアクセスを許可しないでください。一つのミス、以前には気づかなかった脆弱性が、大きな侵入につながってしまうこともあるのです。

4. ネットワークにさらされているシステムに対して、既知のエクスプロイトへの脆弱性を優先させる

この作業は当たり前に思えますが、実行されていることは稀です。既知の脆弱性のないオープンポートは、既知の脆弱性のあるものに比べれば安全です。選択肢2が当てはまる場合なら、いっそう安全性は高まります。

ゼロデイ攻撃への脆弱性は常に存在します。ここで挙げた他のセキュリティ手段は、ゼロデイ攻撃に関連したリスクを軽減するのにも役立つでしょう。脆弱なサービスをネットワーク上に放置しておくことには、特に既知のエクスプロイトがある場合は、どんな言い訳も通りません。

5. すべてのエンドポイントで最小権限の原則を実施する
コンソールでのすべてのアクセスが必要最小限の権限で行なわれるようにしておけば、侵入もそのアクセスのレベルにとどまります。マルウェアは魔術ではありません。活動しているセキュリティモデルによって阻止できるのです。双方向のユーザの権限レベルを最小限に保つことで、たとえば水平方向への移動の制限などによって、うまくいった攻撃さえも封じ込めることが可能になります。

6. 高い特権のアカウントへの直接アクセスを誰にも許可しない
ユーザに、そのアカウントに関連した直接の特権を持たせてはいけません。どんなアクセスも、やはり安全な多要素認証に守られている特権アクセス/アクセス管理(PAM)ソリューションを通じて行なってください。PAMシステムなら、使うたびに資格証明書を変更し、ユーザに資格証明書を開示せずにすみます。

これは、資格証明書を自動的に埋め込むなど、必要なセッションを安全に仲介することで達成できます。このベストプラクティスの利点は、選択肢1~4までが失敗しても、資格証明書を悪用して水平方向への移動を許してしまう危険性を、アカウントが使用されている間だけにとどめられることです。

7. オープンポートで開示されている情報を減らす
上で見てきたように、Apacheのウェブサーバはその発表と共に特定のバージョンとどんなオペレーティングシステム実行されているかについて、詳細を伝えています。この情報をなくしても、もともと備わっているシステムのセキュリティが高まることはありませんが、ツールボックスに特定のエクスプロイトを用意している攻撃者の標的になる危険は、わずかながら弱まるでしょう。

このような手法は「隠ぺいによるセキュリティ」として知られています。Apacheのウェブサーバは、バージョン番号を排して「Apache」と返すように制限することができます。おそらく攻撃者は特定のApacheのバージョンを探しているので、この情報を提示しないことで、その目を逃れることはできるでしょう-少なくとも最初は。できれば御社のIDSがこの点に気づき、上記の選択肢3に至急取りかかれるようにしてくれるといいのですが。Apacheのウェブサーバは多くのサービスと同様、オペレーティングシステムがいくつあっても実行することができるので、この情報を明らかにしないことで、少しは時間を稼ぐことはできます。

関連記事 なぜ脆弱性管理からCTEMへと前進すべきか?

次のステップ-オープンポートとアクセスに関するセキュリティリスクをチェックする

基本のシステムが、業界のベストプラクティス――効果的な脆弱性管理、安全なリモートアクセス、特権アカウントと重要な基幹システムへのアクセスの制御と監視、エンドポイントの特権管理など――に沿うようにすることで、サイバーセキュリティへの備えは格段に上がります。

御社の環境はすでに安全なポート、特権、その時点のみのアクセス経路といった方法で強化されているかもしれませんが、自身のネットワークに対する変更には常に注意を払っておかねばなりません。システムの機能への変更は、全面的なものであろうと適用事例の拡張に伴うものであろうと、ネットワークサービスが追加されればポートの要件が増えることになります。

オープンポート、過剰権限を持つアカウント、構成不備、特権の資格証明書、リモートアクセスツールその他、御社の環境内にあるアクセス関連のリスクを明らかにするには、BeyondTrustの無償ツール、Privileged Access Discovery Applicationをお試しください。この種のものとしては最も優秀な無償ツールです。アプリケーションを使ってリスクの高い領域をすばやく特定してそのリスクを軽減し、一方で時間をかけてリスクを理解し、完全に把握し続けることができます。

参考 BeyondTrust関連情報のトップページ

参考 BeyondTrust関連の他のブログ記事


Brian Chappell, Chief Security Strategist(セキュリティ戦略責任者)

BrianはITとサイバーセキュリティに関して30年以上の経験を積んでおり、その経歴はシステムインテグレータからPCとソフトウェアのベンダー、ハイテクの多国籍企業と、多岐に渡っています。

Amstrad plc、BBC Television、GlaxoSmithKline、そしてBeyondTrustといった企業で、ベンダー側と購買側の両方で重要な役割を担いました。BeyondTrustでは、EMEAとAPACのセールスエンジニアの統率、特権パスワード管理の全世界における商品管理を行ない、現在は社内外のセキュリティ戦略に注力しています。Brianはまた、さまざまな会議で講演し、記事やブログを執筆し、世界中のメディアに専門家として寄稿しています。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする