私は小規模なネットワークを継承し、現在そのセキュリティパフォーマンスを評価しています。
私はその小さなネットワークでホストのポートスキャンを開始しました(これをWeirdoと呼びます)、私の観点から、その特定のホストには何らかのがあるようですポートスキャン検出器および/またはスキャン結果難読化プログラムiptablesが実行されています。 intenseスキャンは、quickスキャンと大きく異なります。
したがって、ここでquickスキャン結果_me@mypc:~# nmap -T4 -F 12.34.56.78
_:
_Starting Nmap 7.01 ( https://nmap.org ) at 2017-04-18 11:48 CEST
Nmap scan report for 12.34.56.78
Host is up (0.57s latency).
Not shown: 93 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
3306/tcp open mysql
8080/tcp open http-proxy
8443/tcp open https-alt
Nmap done: 1 IP address (1 Host up) scanned in 4.15 seconds
_
これは実際には、Weirdo localhost _root@Weirdo:~# nmap -T4 -F localhost
_からクイックスキャンを実行した場合と同じ出力を示しています。
しかし、これはintenseスキャン_me@mypc:~# nmap -T4 -A -v 12.34.56.78
_です:
_1/tcp open tcpmux?
...(every port is shown as open, except a few)
49155/tcp open unknown
...
9102/tcp open jetdirect?
...
65389/tcp open tcpwrapped
...
Completed SYN Stealth Scan at 11:49, 18.22s elapsed (1000 total ports)
...
Not shown: 120 closed ports
_
注:_...
_は、異なるポート番号で前の行を繰り返すことを意味します
したがって、基本的にintenseスキャンは、さらに多くのポートが開いていることを検出しますが、これはパラドックスです。これは、Weirdo localhost _root@Weirdo:~# nmap -T4 -A -v localhost
_に対する強力なスキャンが、まったく同じ開いているポートも提供するためですクイックスキャンとしてリストします。
tracerouteを見ると、次のことがわかります。
_TRACEROUTE (using port 199/tcp)
HOP RTT ADDRESS
1 1.52 ms 12.99.34.255
2 1.37 ms 12.99.0.3
3 1.09 ms 12.34.56.78
_
_me@mypc:~# nmap -sV -T4 -O -F --version-light 12.99.34.255 12.99.0.3
_を使用して2つのIPをポートスキャンする_12.99.34.255
_は、ブラウザーでアクセス可能なNetgear Firewall FVS336Gv2であることがわかります(ポート80、したがって開いています)。
連続(1秒後)、クイックスキャン(強スキャン後)では、強スキャンと同じ出力が得られます。
数秒待ってからもう一度クイックスキャンを実行すると、最初のクイックスキャンと同じ出力が得られます。
このファイアウォールは強力なスキャンでトリックをしているのでしょうか?
別の小さな追加:
Weirdoホストで、iptablesファイアウォールをチェックしてこれを取得します。
_root@Weirdo:~# iptables -vL -t filter
Chain INPUT (policy DROP 25288 packets, 1768K bytes)
pkts bytes target prot opt in out source destination
101K 54M ACCEPT all -- lo any anywhere anywhere
189K 12M ACCEPT all -- eth1 any anywhere anywhere
285 9686 ACCEPT icmp -- eth0 any anywhere anywhere icmp echo-request
297 30354 garbage all -- eth0 any anywhere anywhere state INVALID
0 0 garbage tcp -- eth0 any anywhere anywhere tcpflags: FIN,SYN,RST,PSH,ACK,URG/NONE
0 0 garbage tcp -- eth0 any anywhere anywhere tcpflags: FIN,SYN/FIN,SYN
0 0 garbage tcp -- eth0 any anywhere anywhere tcpflags: SYN,RST/SYN,RST
0 0 garbage tcp -- eth0 any anywhere anywhere tcpflags: FIN,RST/FIN,RST
0 0 garbage tcp -- eth0 any anywhere anywhere tcpflags: FIN,ACK/FIN
0 0 garbage tcp -- eth0 any anywhere anywhere tcpflags: PSH,ACK/PSH
0 0 garbage tcp -- eth0 any anywhere anywhere tcpflags: ACK,URG/URG
1968K 2742M ACCEPT all -- eth0 any anywhere anywhere state RELATED,ESTABLISHED
9564 391K ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:http
463 27508 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:domain
45 2392 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:8443
0 0 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:9422
25288 1768K garbage all -- eth0 any anywhere anywhere
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1361K packets, 501M bytes)
pkts bytes target prot opt in out source destination
Chain garbage (9 references)
pkts bytes target prot opt in out source destination
_
これらのフィルターは、強力なスキャンでトリックを果たしていますか?
ターゲットgarbage
のルールがあるとはどういう意味ですか?
最初に、結果をより簡単に理解できるようにするいくつかの仮定と用語を修正しましょう。
-F
_オプションは100ポートしかスキャンしないため、「クイック」スキャンです。 _--top-ports 100
_と同等です。このオプションを使用しない場合、Nmapスキャン1000 TCPポート。-A
_オプションは「強力」ではなく、「すべての機能」です。 _-sV -sC -O --traceroute
_と同等です。したがって、100個のポートのポートスキャンを実行し、それをバージョン検出および1000個のポートのOSフィンガープリントを使用したポートスキャンと比較しています。 2回目のスキャンでより多くの結果が得られることは理解できます。しかし、2番目のスキャンで文字通り「すべてのポートが開いている」ことを意味すると仮定しましょう。何が原因で、どうすれば確実に知ることができますか?
まず、_-F
_スキャンを実行した場合後に_-A
_スキャンを実行すると、_tcpmux?
_スキャンが異なる結果を生成するかどうかを知ることは興味深いでしょう。私はそうなると思います。これにより、何かが(ファイアウォールのように)スキャンシステムとターゲットの間でパケットが渡される方法が変更されたことがわかります。 2回目のスキャンで表示される手がかりは次のとおりです。
-oX
_)およびtcpwrapped
サービスIptablesだけでは、このような振る舞いを適応させるのに十分なほどスマートではなく、ルールにそれを示すものもありません。そのため、スキャナーとターゲット間のネットワークパス上の別のシステムから干渉が発生している可能性があります。 XML出力(_-oA
_または_--reason
_)を保存した場合、または_-vv
_オプション(_-d
_または_reason_ttl
_によってもアクティブ化)を使用した場合、次のようになります。 whyNmapは各ポートが開いているか閉じていると見なされるかについての詳細を見ることができます。これの最も興味深い部分は_-F
_属性、これは、受信したIP Time-To-Liveフィールド値を記録します。これは通常、ネットワークパスの各IPホップごとに1回デクリメントされます。したがって、Linuxターゲットの場合、応答はTTL 64、その間の2ホップは62に減らす必要があります。最も正確なバージョンのスキャン(つまり、ポートがほとんど閉じられている_--ttl 2
_スキャン)で表示されるものがベースラインです。それよりも高い値が表示され始めたら、おそらく、あなたとターゲットの間の何かがターゲットの代わりに応答を送信していることを意味します例(ポート27は「偽のオープン」):
ポートステートサービスの理由 25/tcp open smtp syn-ack ttl 60 27/tcp open nsw-fe syn-ack ttl 61 80/tcp open http syn-ack ttl 60
これを回避するには、「ポートスキャン」アラートのしきい値を超えないようにスキャンを遅くする必要があります。このような適応策の回避 複雑です 。ただし、しきい値を超えたら、いくつかの興味深いことを実行して、ファイアウォールルールを計画することができます。
多数の開いているポートで現在このように「ブロック」されているが、元のポートのセット(ssh、smtp、httpなど)の背後にある実際のサービスに引き続きアクセスできる場合は、非常に低い値に設定してみてください。 TTL値。ルーターがTTLを0にデクリメントすると、ICMP Time Expiredメッセージが送信され、ポートにfiltered
というラベルが付けられます。TTL有効期限が切れるファイアウォールの後で、ターゲットの前を選択できる場合、ファイアウォールによって引き起こされた「開いている」ポートのリスト、およびおそらく通過が許可されている「フィルターされた」ポートのセットを取得できます。例では、tracerouteの出力に基づいて、__(SOMECODE)を使用します。 _--ttl 3
_が実際にターゲットに到達するため、__オプション。スキャンは次のようになります:_nmap -sS --ttl 2 -Pn example.com
_。通常、_-Pn
_の使用は推奨されませんが、この場合、プローブは実際にターゲットに到達することはありません。注意:このスキャンではuのみが生成されます現在ファイアウォールによってブロックされていて、ブロックがすべてのポートにあるわけではないが、一部のトラフィックが通過している場合のseful出力:
PORT STATE SERVICE REASON 25/tcp Filtered smtp time-exceeded from 12.99.34.255 ttl 252 27/tcp open nsw-fe syn-ack ttl 61 80/tcpでフィルタリングされたhttpは12.99.34.255から時間超過ttl 252
この出力では、_--ttl 2
_からプローブがターゲットに到達しなかったことがわかっていても、ポート27はターゲットから来たように偽装されたsyn-ackを受信しました。他の2つのポートは、それらが期限切れになったときからの時間超過メッセージを取得するため、通過を許可されます。ファイアウォールが時間超過メッセージの送信を許可しない場合、それらは_no-response
_の理由でfiltered
として表示されます。