このブログを検索

ラベル ポートスキャン の投稿を表示しています。 すべての投稿を表示
ラベル ポートスキャン の投稿を表示しています。 すべての投稿を表示

2019/04/07

ポートスキャン - 「ポートが開いている」とはどういう状態か?

セキスペの過去問を解いていたらポートスキャンに関する問題が出てきた。

synを送ってその反応を見る、というもので、

まず「それを何というか」という問題があり、「ポートスキャン」と回答したが、
正解は「SYNスキャン」であった。

SYNスキャンはポートスキャンの一種なので間違いではないが、
SYNだけ送って、そのあとSYNACKが返ってきてもセッションを確立しないので、
スキャン先に接続履歴を残したくないときに使うそうだ。

もう一つの問題は、「ポートが閉じているときにどういう反応があるか」というもので、
私は「応答なし」と答えたのだが正解は「RSTACK受信」および「応答なし」であった。

私は応答がないと思い込んでいたので、えっと思って
パソコンでwiresharkを起動して自分のサーバへのアクセスで試してみた。

接続できないはずのtelnetアクセスをしてみると応答がない。

しかしそれはポートが開いてるかどうか以前にiptablesで許可していないからだと気づき、
一時的にiptablesを無効にして、再度telnetしてみた。

RST,ACKが返ってくる。

なるほど。

以前nmapでポートスキャンしたときに、「ポートにアクセスできないがフィルターされているかもしれない」みたいな結果が出たことがあった。

これはsynに応答がなかった場合であろう。
サーバでtelnetサービスが動いていてもiptablesとかその前のFW装置で許可されていなければ応答が返ってこない。
だから応答が返ってこない場合はポートが開いているか閉じているかはわからない。

今書いていて思ったのだが、ポートが開いていないときにRSTを返さないような設定ができるんじゃないだろうか?
できないか?

まあいい。ふつうはRST ACKが返るということがわかった。

ところで、「ポートが開いている」という言い方をよくするが、
私はまだ若いころ、その確認方法がよくわからなかった。

どこかに設定ファイルがあって、開けるポート番号または閉じるポート番号を指定してあるのだと思っていた。

しかし、サーバ(RedHat9)設定のどこを探してもそのような設定はない。

そのサーバではiptablesは設定していなかった。設定方法も知らなかった。
検証環境のサーバだからだ。

調べていくうちにiptablesのこともわかってきたのだが、
iptablesは確かに通信を許可するポートを開けたり閉めたりするが、
いわゆる「ポートが開いている」というのはそのことを言うのではない。
まあ、ユーザや運用管理者にとっては「FWで閉じている=閉じている」
ということでよいだろう。

しかし、「FWで開いている=開いている」にはならない。

というか、そもそも「ポートが開いている」という言い方が不正確で誤解を生む。

開いているという言い方だとFWで開け閉めするのを想像するが、
正確には「そのポートをリッスンしているサービスが稼働している」
という状態である。

たとえばtelnetサービスを有効にしていてその使用ポートが23であれば、
「TCP23が開いている」となる。

使用ポートは変更できるので、telnetサービス(正確にはtelnetサーバサービス)が動いている=23番が開いているとも言えない。

そんな人はいないと思うが、telnetで80番を使うようにすることもできる(よね?)。

私のサーバではtelnetは動作していず、sshが動作していてポート番号は22でないものに変更している。

このとき、「TCP23は開いていず、SSH接続できるがTCP22は開いていない」という状態になる。

そして、iptablesでTCP23とTCP22は拒否しているので、
ポートスキャンするといずれも応答が返らない。

しかし、その結果だけからは、サーバの手前の別装置のFWやアクセスリストで拒否されているのか、
サーバのiptablesで拒否されているのか、サーバがダウンしているのか、はわからない。
アクセスしているIPアドレスが間違っている可能性もある。

pingは返ってくる、80番はアクセスできる、23番は応答がない、
であればFWかサーバのiptablesで拒否されているとわかる。

2008/08/27

「ポートが開いている」とは

私の職場でRedHat Linux9を使っている。古いOSであるが理由があって使っている。

「ポート」について、疑問を感じたことがある。ポートは必要最小限のものしか開けてはならない、と言うことは知っている。

今、自分自身をポートスキャンしてみると、telnet とか ftpとかで使用するポートが開いているのがわかる。全部で10個もないくらいである。

だが、私はこのLinuxマシンで、一度もポートを開ける設定も閉める設定もした覚えはない。インストールするときに、ファイアウォールを設定するか、というところでファイアウォールなしにした記憶はある。

それなのに、ちゃんと必要最低限のポートしか開いていないのである。一体どこに、このポートは開けて、このポートは閉める、という設定がしてあるのか、探してみたがわからない。

inetd.confが非常に怪しいとにらんだ。nmapで開いているとされているポートで使用しているサービスがここで設定されているからだ。ここに設定するとポートが開くんだな、とほとんど確信しかけたが、ntpは設定されていないし、それ以外にも開いているポートがいくつかある。

nmapの結果

PORT STATE SERVICE

21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
70/tcp open gopher
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
513/tcp open login
672/tcp open unknown
901/tcp open samba-swat


PORT STATE SERVICE

69/udp open|filtered tftp
111/udp open|filtered rpcbind
123/udp open|filtered ntp
137/udp open|filtered netbios-ns
138/udp open|filtered netbios-dgm
836/udp open|filtered unknown
32768/udp open|filtered omad

inetd.conf
ftp
telnet
gopher
login
tftp
swat

どうなっているんだ・・・。そもそも、「ポートが開いている」とはどういう状態なのか?

キーワードをいろいろと変えて検索してみたがどこにも「xxxのxxxをxxxxするとポートが開放される」などとは書いていなかった。

しかし、「ポートの開放の仕方なんか少し調べればすぐ見つかるよ」見たいな冷たい反応はたくさんみつかった。iptablesがどうのこうの、という情報もたくさん見つかったが、iptablesなど設定していないし、確認したがすべてのポートが許可されている。

一体、どこの誰がポートを開けているのか!?

......

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10465&forum=10&4
を見て。

どうやら、「あるポートが開いている」というのは、「あるポートを使って通信をおこなっているサービスが存在している」という意味のようだ。

つまり、ftpdを稼動させれば21番などが開いているということになる。窓のようなポートというものが存在している訳ではないようである。

iptablesというのは、それとは違って、サービスの状況によらずポートをフィルタリングする。だから、iptablesで何もフィルタリングしていない状態であっても、サービスがなにもしていなければ、ポートは開いていないということになる。