ターミナル経由でリモート サーバーのポート上で実際に実行されているサービスを識別するにはどうすればよいでしょうか?

ターミナル経由でリモート サーバーのポート上で実際に実行されているサービスを識別するにはどうすればよいでしょうか?

ターゲットサーバーでnmapを使用したところ、次のサービスが返されました。

PORT     STATE SERVICE       VERSION
53/tcp   open  domain?
80/tcp   open  http          Microsoft IIS httpd 10.0
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2021-03-17 07:07:34Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp  open  ldap
443/tcp  open  https?
445/tcp  open  microsoft-ds?
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  tcpwrapped
3268/tcp open  ldap
3269/tcp open  tcpwrapped
3389/tcp open  ms-wbt-server Microsoft Terminal Services

問題は、Nmap が誤って識別した可能性のあるポートで実行されている実際のサービスを識別する方法です。たとえば、ポート 53 で、ターミナル経由で DNS サービスが実行されていることをどのように確認すればよいでしょうか。

どのテクニックを使用できますか? ターゲット サーバーにアクセスできないため、サーバー上で実行されているプロセスを確認できません。

答え1

Steffen が指摘しているように、サーバー X がホスト Z のポート Y で実行されているかどうかを確認するには、X と同じプロトコルを使用するクライアントを実行し、それをホスト Z のポート Y に向けます。たとえば、特定のサーバーが DNS を使用するかどうかをテストするには、 などの多くの DNS クライアントのいずれかを使用できますnslookup

もちろん、これは、使用したプロトコルと互換性があるということ以外、実際にそこで何が実行されているかについては何も教えてくれません。サーバーは、ほとんど何でもかまいません。たとえば、ポート 80 (例) のリスナーは、TCP ハンドシェイクに「HTTP 201 No content\r\nServer: Microsoft IIS httpd 10.0\r\n\r\n」で応答するだけの小さなスクリプトである可能性があります。これは、ほぼ有効な HTTP 応答です (クライアントが HTTP 要求を送信しなかった場合でも、この応答が送信される可能性があります)。ただし、リスナーが有用な意味で Web サーバーであることを意味するわけではなく、特に IIS 10.0 であることを意味するわけでもありません。

Nmap に組み込まれている認識スクリプトは、ほとんどのサーバーを認識するのにおそらくあなたよりも優れていますが、非常に柔軟性に欠け、誰かが試みれば簡単に騙される可能性があります。問題のツールとプロトコルに精通している人間は、異常なケース (あるサーバーが別のサーバーになりすましている場合や、管理者が Nmap に従ってサーバーを識別する通常の「兆候」を意図的に隠している場合など) では、スクリプトよりも多くの情報を抽出できる可能性があります。ただし、そのような知識の基本さえも一般に伝えることは、この回答、またはこのサイトの範囲を超えています。

関連情報