ポート番号を変更したときのNmapでの見え方を確かめたときのお話

お久しぶりです。みどりからすです。
令和になったので(こじつけ)ブログを再開してみようかと思います。

よく参加させていただいている勉強会でポートスキャンの話が出てきます。

まずはどんなサービスが動いているのかを調査するために行うことが多いみたいです。

ただ私自身インターネットから直接アクセスできるサーバを公開するときは、単純に怖いのでsshのポート番号を変更することが多いです。
もちろん自分で変更しても大丈夫なサーバのみですが。
正直なところ社内の開発用サーバでもポート番号変更したいぐらい。

そんな中ふと思った疑問ですが…
ポート番号変更後にポートスキャンかけたらどんな結果になるんだろう?

そんな疑問を試してみました。

環境

ホストマシン

  • Windows 10 Home 64 bit
  • Nmap Version 7.70
  • Vagrant 2.2.3
  • VirtualBox 6.0.6 r130049 (Qt5.6.2)

ゲストマシン

  • Centos7.6.1810 64bit

前提条件

ゲストマシンはインストールしてsudo yum -y updateを実施済み。
ホストOSにNmapをインストール済み。

めんどくさいのでfirewalld止めてます。

目標

httpdのポート番号を変更して、変更後のポート番号でhttpdをNmapで検出できるかどうかを確認する。

変更前: 80番
変更後: 81番

手順要約

  1. httpdインストール
  2. ポートスキャン(ポート番号変更前)
  3. httpdのポート番号変更
  4. ポートスキャン(ポート番号変更後)

httpdインストール

インストールする前に念のためListenしているポートの確認をします。
とりあえずでTCPだけ確認します。

ss -ltn
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port
 LISTEN      0      128                   *:111                               *:*
 LISTEN      0      128                   *:22                                *:*
 LISTEN      0      100           127.0.0.1:25                                *:*
 LISTEN      0      128                  :::111                              :::*
 LISTEN      0      128                  :::22                               :::*
 LISTEN      0      100                 ::1:25

開放しているのは22番と111番だけっぽい。
25番はローカルアクセスだけかな。

httpdをインストールします。

sudo yum -y install httpd

インストールしただけだと起動していないのでhttpdを起動します。

sudo systemctl start httpd

curlを一発撃ちます。
curl http://192.168.33.23
なんか返ってきました。
ブラウザでもページが表示されました。
最近知ったんですが、Windowsのコマンドプロンプトでcurlコマンドが使えるようになったんですね。

とりあえずでListenしているポートの確認。7行目がそうですね。

ss -ltn
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port
LISTEN      0      128                   *:111                               *:*
LISTEN      0      128                   *:22                                *:*
LISTEN      0      100           127.0.0.1:25                                *:*
LISTEN      0      128                  :::111                              :::*
LISTEN      0      128                  :::80                               :::*
LISTEN      0      128                  :::22                               :::*
LISTEN      0      100                 ::1:25                               :::*

ポートスキャン(ポート番号変更前)

一応フルポートスキャンをかけます。-pオプションをつけてます。
-oオプションで結果をファイルに出力します。

nmap -A 192.168.33.23 -p 1-65535 -o httpd_pre_port_change.txt

想定通りの結果になりました。

80/tcp  open  http    Apache httpd 2.4.6 ((CentOS))

デフォルトだとTRACEメソッド使えるの?

httpdのポート番号変更

httpdのポート番号を80番から81番に変更します。
私の場合は42行目でした。

編集が終わったらhttpdを再起動します。

sudo vi /etc/httpd/conf/httpd.conf
Listen 80
↓
Listen 81
sudo systemctl restart httpd

ポート番号が変更されたことを確認します。

ss -ltn
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port
LISTEN      0      128                   *:111                               *:*
LISTEN      0      128                   *:22                                *:*
LISTEN      0      100           127.0.0.1:25                                *:*
LISTEN      0      128                  :::111                              :::*
LISTEN      0      128                  :::81                               :::*
LISTEN      0      128                  :::22                               :::*
LISTEN      0      100                 ::1:25                               :::*

はい、変わりました。 7行目がそうです 。

念のためcurlとブラウザでも確認します。
結果は省略しますが、返ってきました。

ポートスキャン(ポート番号変更後)

nmap -A 192.168.33.23 -p 1-65535 -o httpd_post_port_change.txt

あ、検出された!

81/tcp  open  http    Apache httpd 2.4.6 ((CentOS))

ちなみにですが、81/tcpは以下のサービスと紐づいているようですので、well known portでしょう。
hosts2-ns 81/tcp #HOSTS2 Name Server

なんかあれだな…癪だから53番とかに変えてみよう…
53番はDNSのポート番号ですね。
詳細は上記と同じなので省略します。

53番に変更後、Firefox使っていますがブラウザからはアクセスできません。
「このアドレスへの接続は制限されています」と表示されます。
Chromeでもダメなんだ。

curlでは正常に結果が返ってきました。

いざポートスキャン…!

nmap -A 192.168.33.23 -p 1-65535 -o httpd_post_port_change_53.txt
53/tcp  open  http    Apache httpd 2.4.6 ((CentOS))

出るやん!!

じゃーエフェメラルポートや!

nmap -A 192.168.33.23 -p 1-65535 -o httpd_post_port_change_65530.txt
65530/tcp open  http    Apache httpd 2.4.6 ((CentOS))

出るやん!!!!

結果

ポート番号を変更していてもNmapをかけるとhttpdであることが検出されることがわかりました。

考察

前置きとして、
今回httpdで試したのは手軽だったからという理由だけです。
実際にはwebサービスのポート番号を変更するとユーザがアクセスできなくなるので変更することはないと思います。

今回はhttpdのポート番号を変更していてもポートスキャンをかけてればどのポートにhttpdが動いているのかがすぐにわかるということが今回わかりました。
おそらく他のサービスでも同様の結果が得られると考えています。

防御側としては
「あまり意味がない」
ように思えます。攻撃者が攻めるポート番号を特定するまでの時間稼ぎ程度でしょうか?
攻撃者に「なんかこのサーバ攻めるの時間かかるかも…?」と思ってもらえれば御の字でしょうか。
もしかしたら攻撃者が「お、このサーバなんか対策しとるやんけ!やったろ!!」と燃える材料になるかもしれませんw

ポートスキャンなどの異常なパケットの流れを検出してbanする仕組みを入れておかないと、本当にただの時間稼ぎ程度になるのかもしれませんね。

攻撃者側としては(まだまだ未熟ですが)、
「なんだ、ポート番号変わっただけか」
となるのかなぁ。もしくは
「あ、このサーバちょっと攻めるのめんどくさいかも?」
と思わせることぐらいはできるかも。

もちろん最近の防御側も対策しているので、ポートスキャンの通信を検知かと思いますので(しますよね…?)
ポートスキャンをしないと攻撃対象ポートがわからないという状態は攻撃者としては不利になるのかもしれません。
なってほしいなぁ。

0

シェアする

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

フォローする