1. ホーム
  2. 記事一覧
  3. あなたのコンピュータ・ネットワークを守るポートスキャン対策

2023.02.12

あなたのコンピュータ・ネットワークを守るポートスキャン対策

こちらの記事では、ポートスキャンについて解説します。ポートスキャンという言葉から、サイバー攻撃を想像する方も多いのではないでしょうか?

悪いイメージが先行しそうですが、システムを開発する時や、システムに存在する脆弱性の有無を調査する時にポートスキャンは行われます。

ポートスキャンとは

ポートスキャンとは、port(港、港湾)とscan(精査する、検査する)という意味の言葉の組み合わせです。ITの世界では、サーバーやネットワーク機器などに外部からツールなどを使用してパケットを送信し、その応答によって、通信するために開放されているポート番号(オープンポート)を特定することを意味します。

応答の内容によっては、開放されているポート番号だけではなく、動いているサービスのバージョンやOS、FW(ファイアウォール)によってフィルタリングされているポート番号なども特定することが可能です。

サイバー攻撃に使われるイメージの強いポートスキャンですが、本来のポートスキャンは攻撃を目的としたものではなく、サーバーやネットワークの管理者が、運用しているシステムに脆弱性やセキュリティ的な問題がないか、チェックを行う目的でポートスキャンは行われます。

サイバー攻撃の事前調査として行われるポートスキャン

悪意ある攻撃者がポートスキャンを行う場合、サイバー攻撃を行うための事前調査として行います。

開放されているポート番号を把握できれば、どのようなプログラムが使われているのか推測されてしまいます。使われているプログラムが推測できれば、そのプログラムの脆弱性を突くにはどうしたら良いかを、攻撃者に考える隙を与えてしまいます。

22番ポートが開放されていることが分かれば、sshで何か攻撃を仕掛けよう、80番ポートが開放されているからhttp接続で、、、といった具合にサイバー攻撃を行うための事前調査を行われてしまうのです。

ポート番号とは

ポート番号とは、OSI参照モデル第4層のトランスポート層で、0~65535番までの整数値の番号からなり、コンピュータが通信先のどのプログラムと通信するかを判断するために利用する番号のことです。

OSI参照モデルについては以下リンクをご覧ください。

https://envader.plus/article/38

ポート番号の役割

IPアドレスがあれば、ネットワーク上のコンピュータを一意に識別することはできます。しかし、そのコンピュータのどのプログラムと通信すれば良いかはIPアドレスだけでは分かりません。

コンピュータの中では非常にたくさんのプログラムが動いています。たくさんのプログラムが動いているコンピュータの中で、どのプログラムと通信するかを判断するためにポート番号が必要になります。

参考:竹下隆史 村山公保 荒井 透 苅田幸雄 共著「マスタリングTCP/IP 入門編」、オーム社

郵便物に例えると、住所(IPアドレス)があればどの家まで郵便物(データ)を届ければ良いかは判断できます。しかし、その家に住む誰宛て(プログラム)に届けるべき郵便物なのかまでは、IPアドレスだけでは判断できません。

郵便物(データ)が誰宛て(プログラム)に送るべきものなのかは、宛名(ポート番号)がなければ判断できません。この宛名に該当するのがポート番号です。

IPアドレスについては以下リンクで解説しています。

https://envader.plus/article/51

ウェルノウンポート番号とは

65535番までのポート番号のうち、0~1023番までがウェルノウンポート番号と呼ばれており、それぞれのサービスごとにあらかじめポート番号が決められていて、IANA(Internet Assigned Numbers Authority)で管理されています。

以下、ウェルノウンポート番号の一部になります。

ポート番号サービス用途
20ftp-dataファイル転送(データ本体)
21ftpファイル転送(コントロール)
22sshリモートログイン(セキュア)
23telnetリモートログイン
25smtpメール送信
53domain名前解決(DNS)
80httpWeb接続(www)
101hostnameホストの登録や情報の表示
443httpsWeb接続(セキュア)

この表のように、SSHであれば22番を、HTTPであれば80番を使用するというように、使用するプロトコルごとにあらかじめ決められているポート番号のことを、ウェルノウンポート番号と呼びます。

紹介した以外のウェルノウンポート番号については、IANAの公式サイトで確認することができます。

https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

ポートスキャンで使用するツール

ポート番号は0~65535番まであり、この数を手作業で調べていくのは現実的ではありません。通常はポートスキャン用のツールを用いてスキャンを行います。代表的なツールの例として、NmapとNetcatをご紹介します。

Nmap

まず、ポートスキャンを行う際に使用する代表的なツールとして、Nmapがあります。

https://nmap.org/man/ja/index.html

Nmapは、ポートスキャンを行うことができるLinuxコマンドの一つです。非常に多機能なため、ポートスキャン以外にも、サービスのバージョン検知、OSのバージョン検知など様々な調査を行うことができます。

注意点として、Nmapを使用する際、使用を許可されていないホストに対しては絶対に行わないでください。不正アクセスなどに該当し、問題になる可能性があります。

NmapはDebian系のLinuxディストリビューションでは、標準パッケージとして用意されており、ダウンロードをせずに利用することが可能です。そのほかに関しては、ダウンロードをすることで利用が可能です。

ポートスキャンを行う際、Nmapでは65535番までのすべてのポートをスキャンするわけではなく、ランダムに1000個のポートをスキャンします。その際、どのポートをスキャンするかは分かりません。

Envaderでは、セキュリティ基礎コースにて安全に、簡単にNmapを体験できます。以下リンクよりご覧ください。

https://envader.plus/course/3/scenario/1063

Netcat

NetcatはLinuxコマンドの一つで、TCPまたはUDPの通信を使ってコマンドラインからデータを送受信するコマンドです。コマンドを使用する際は、netcatではなくncコマンドを使用します。

ncコマンドの使い方やインストール方法については、別記事にて解説しています。

https://envader.plus/course/16/scenario/1024

ncコマンドを使用すれば、簡単にクライアント・サーバシステムを構築できたり、Webサーバを立てたりすることが可能です。

ポートスキャンで認識する状態(open,closed,filtered)

ここでは、Nmapを使用した場合に認識されるポートの状態を3つ、ご紹介します。

open

文字通りポートが開いているため、通信を受け付けている状態です。多くの場合、ポートスキャンの一番の目的はこのopenポートを見つけることになるでしょう。

攻撃者であれば、このopenポートを発見し、その脆弱性を突くための計画の第一歩を踏み出します。

一方、システム管理者であれば、開発や運用を妨げないよう、ポート番号によってはファイアウォールなどを使用してセキュリティ対策を行う必要が出てきます。

closed

closed状態は、Nmapのパケットがclosedのポートまで到達することができたが、通信を待ち受けているアプリケーションが存在しない(ポートがLISTEN状態ではない)状態です。

filtered

ファイアウォールやパケットフィルタなどで、Nmapのパケットがポートまで到達できない状態です。情報がほとんど得られないため、Nmapではポートが開いているのか閉じているのか判断できない状態を意味します。

ポートスキャンの種類

ポートスキャンは、その手法によって複数の種類に分けることができます。IPA(独立行政法人情報処理推進機構)でも、その種類の特徴が説明されています。

https://www.ipa.go.jp/security/fy12/contents/crack/soho/soho.pdf#page=12&zoom=100,0,0

TCPスキャン

通信開始時に3ウェイハンドシェイクを行い、コネクションの確立を行います。スキャンしたサーバなどのログに記録されるため、ログ解析を行うことでポートスキャンを受けたかどうかを確認できます。

SYNスキャン

TCPスキャンのように、コネクションの確立は行いません。3ウェイハンドシェイクのうち、SYNパケットのみを送信するため、ハーフオープンスキャンステルススキャンとも呼ばれます。

サーバからの返信がSYN/ACKだった場合はポートがLISTEN状態、RST/ACKだった場合ポートは非LISTEN状態と判断できます。通信途中の状態で放置されるため、相手のリソースを浪費させることが可能です。

UDPスキャン

UDPを使ったポートスキャンで、ターゲットがUDPでサービスを稼働させているかを確認する方法です。

ターゲットにUDPパケットを送信し、応答がなければUDPを使うポートが稼働していると判断できます。「ICMP Port Unreachable」というメッセージが返ってくればUDPを使うポートは稼働していないと判断できます。

また、UDPの性質上、ネットワーク越しにスキャンを行う場合の信頼性は非常に低くなるとされています。

FINスキャン

ターゲットに対して、接続終了を意味するFINパケットを送信する手法です。

FINパケットを受け取ったサーバで、サービスが稼働しているポートからは、RSTパケットが返ってきます。対して、サービスが稼働していないポートからは何も応答がありません。このようにして、稼働しているサービスがあるかどうかを判断することができます。

接続終了を意味するFINパケットをいきなり送信することで、ターゲットへログを残さないようにすることができるため、SYNスキャンと同じステルススキャンに該当します。

クリスマスツリースキャン

コネクションが確立していない状態で、FIN、URG、PSHの3つのパケットを送信する方法です。

SYNスキャン、FINスキャンと同じくステルススキャンに該当し、接続先へログを残すことはありません。

何も応答がない場合、対象のポートが開いていると判断でき、RSTパケットが返ってくれば、ポートが閉じていると判断できます。

ポートスキャンへの対策

ポートスキャンは攻撃を行うものではありませんが、悪意ある攻撃者からポートスキャンを受けた場合には、攻撃を仕掛けるための調査を行う事を許してしまいます。次に紹介するのは、攻撃者からのポートスキャンを防ぐための対策方法です。

公開する必要のないポートは閉じる

一般的に、Webサーバであれば80番や443番のポートは公開する必要がありますが、そのほかのポートは必要最低限のポートのみ公開するようにし、できるだけアクセスできる範囲を限定することで安全性を高めることができます。Nmapなどのポートスキャナを利用し、どのポートが開いているのかを把握し、公開しなくても良いポートであれば閉じます。

不要なサービスは停止する

起動する必要のないサービスは停止させておくことも対策の一つです。ポートスキャンにより、不要なサービスが稼働していることが判明してしまえば、そのサービスの脆弱性を突かれて攻撃を受ける可能性があります。

定期的にどのサービスが稼働しているのかを確認し、意図していないサービスが稼働していれば停止させることも必要です。

WAFを導入する

WAF(Web Application Firewall)は、HTTPやHTTPSを解釈して、各種の攻撃からWebサーバを守ってくれる装置のことです。ファイアウォールや、IDS/IPSで検知できないような攻撃にもWAFであれば検知できる場面も多いとされています。

WAFについては、以下の記事で解説しています。

https://envader.plus/article/21

まとめ

今回はポートスキャンについて解説しました。

ポートスキャンはサーバーやネットワーク機器などに外部からパケットを送信し、その応答によって、通信するために開放されているポート番号を特定するというものです。ポートスキャンは本来システムを管理する目的で行うものです。

しかし、攻撃の調査目的で行われる場合もあるため、ポートスキャンを受けてサイバー攻撃の被害へと発展しないよう、しっかりと対策に努めましょう。

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事