ウサギは後退せず、大きな耳で情報集めをする事に験を担ぎ、古来より日本では鎧などにウサギの図柄を取り入れてきたらしい。
読者です 読者をやめる 読者になる 読者になる

うさブロ

ぼっちなうさぎのセキュリティラボ

とある親父の侵入実験【nmap編】

Kali Linux ペネトレーションテスト nmap

f:id:appleseedj073:20160813022549p:image

御坂美琴の様なツンデレが好きですが何か?

 

今後、ペネトレーションテスト的な需要が増えそうなので頻繁に使うツールについてまとめておこうと思う。基本的にKali Linuxを使用することが前提でまとめる。

尚、ここでの攻撃対象はMetasploitableを用意している。説明については省略。

 

まずは、誰しもが調査に使うであろうnmapについて。正直自分は、そこまでnmapを使いこなしていない。とりあえずって感じでざっくり調査しておしまいという雑な攻撃しかしないので・・・。

そこで、とりあえず解説してるサイトからオプションを参照してみる。

 

-A OSとバージョンを検知しようとする
-sL 指定したネットワーク内のホスト一覧を表示する(リストスキャン)
-sP pingに応答するホストの一覧を表示する(Pingスキャン)
-sS TCPのSYNパケットを送ってSYN+ACKが返ってくるか調べる(TCP SYNスキャン/TCPハーフスキャン)
-sT TCPでポートに接続できるかを調べる(TCP Connectスキャン)
-sV ソフトウェア名とバージョンの表示を有効にする
-sU UDPポートをスキャンする(UDPスキャン)
-sF FINフラグだけのパケットを送って調べる(TCP FINスキャン)
-sN まったくフラグなしのパケットを送って調べる(TCP Nullスキャン)
-sX FIN/PSH/URGフラグを立てたパケットを送って調べる(Xmasスキャン)
-sA ACKフラグだけのパケットを送って調べる(TCP ACKスキャン)
-b FTP_HOST FTP_HOSTのFTPサーバを利用して調べる(FTPバウンススキャン)
-O OSを検出しようとする
-P0 Pingスキャンを行わない(アクティブなマシンを割り出すためのホスト発見プロセスが省略される)
-PS [PORTLIST] PORTLISTで指定したポート(デフォルトは80番)にSYNフラグ付きの空TCPパケットを送信する(TCP SYN Ping
-PA [PORTLIST] PORTLISTで指定したポート(デフォルトは80番)にACKフラグ付きの空TCPパケットを送信する(TCP ACK Ping
-PU [PORTLIST] PORTLISTで指定したポート(デフォルトは31338番)に空UDPパケットを送信する(UDP Ping
-PE ICMPタイプ8(エコー要求)パケットをターゲットに送信する(ICMP Ping
-PR IPベースのスキャンより高速なARPスキャンを行う(ARP Ping
-n DNSによる逆引き名前解決を行わない
-R すべてのターゲットに対して常にDNSによる逆引き名前解決を行う
-p PORT スキャンするポートをPORTで指定する(1-1023、U:53,T:80)UはUDPポート、TはTCPポートを示す
-F 限定したポートのみ調べる(約1200ポート)
-r 調べるポートの順番を無作為(デフォルト)ではなく順に選ぶ

Linuxコマンド集 - 【nmap】ポートスキャンを実施する:ITpro より

 

こうやって見てみると、とりあえずリファレンスに書いてあるオプションをそのまま使っていただけだなぁ・・・と、しみじみ思うσ(^_^;)

 

じゃあ実際にいつも使っているコマンドはどんな感じかというと・・・

 nmap IPアドレス

 nmap ネットワークアドレス

 nmap -v -A IPアドレス

 

レパートリー少ないな・・・。

このままじゃ自分にとっても何の参考にもならないので、プレゼンの時によく使うnmapのGUIアプリケーション「Zenmap」の中からオプションの組み合わせを参考にしてみる。

f:id:appleseedj073:20160814224827p:plain

ちなみにZenmapの画面。コマンドライン上で

 zenmap

と入力すると立ち上がる。

Zenmapのスキルプロファイルから選択できる項目は10種類

1. Intense scan

 nmap -T4 -A -v ホスト名 or IPアドレス

 「-T4」:タイミングのテンプレートを「aggressive」に指定して実行。

以下にテンプレートの解説をnmapのオフィシャルより引用。

テンプレート名は、paranoid (0)、sneaky (1)、polite (2)、normal (3)、aggressive (4)、insane (5)である。最初の2つは、IDS回避用のテンプレートである。Politeモードは、スキャン処理速度を落とし、帯域幅とターゲットマシンのリソースの使用量を少なくするためのものである。Normalモードはデフォルトなので、としても特に何もしない。Aggressiveモードは、ユーザが適度に高速で信頼性の高いネットワーク上にいることを想定して、スキャン速度を上げる。最後にInsaneモードは、非常に高速なネットワーク上にいるか、あるいは速度と引き換えに精度の一部を犠牲にしても構わない場合を想定したモードである。

 「-A」:OSとバージョンを検知する

 「-v」:詳細なスキャン情報を取得

2. Intense scan plus UDP

 nmap -sS -sU -T4 -A -v ホスト名 or IPアドレス

 「-sS」:TCPのSYNパケットを送ってSYN+ACKが返ってくるか調べる(TCP SYNスキャン/TCPハーフスキャン)

 「-sU」:UDPポートをスキャンする(UDPスキャン)

3. Intense scan, all TCP ports

 nmap -p 1-65535 -T4 -A -v ホスト名 or IPアドレス

 「-p <ポート番号>」:ポート番号を指定する(ここでは1-65535)

4. Intense scan, no ping

 nmap -T4 -A -v -Pn ホスト名 or IPアドレス

 「-Pn」:事前のPing送信をせずにスキャンを行う

5. Ping scan

 nmap -sn ネットワークアドレス

 「-sn」:ホスト検出を行うが、ポートスキャンは行わない。

6. Quick scan

 nmap -T4 -F ホスト名 or IPアドレス

 「-F」:限定したポートのみ調べる(約1200ポート)

7. Quick scan plus

 nmap -sV -T4 -O -F --version-light ホスト名 or IPアドレス

 「-sV」:ソフトウェア名とバージョンの表示を有効にする

 「-O」:OSを検出しようとする

 「--version-light」:ライトモードのバージョン検出を行う。強度2でバージョン検出を行う

 ※バージョン検出に関連した他のオプション

 「--version-intensity <強度>」:バージョン検出に対する強度を指定する。バージョン検出に対し、0-9の強度を指定する。強度数値が高いほど精度が上がるが、時間がかかる。デフォルト値は7に設定

 「--version-all」:全てのバージョン検出を試みる。強度9でバージョン検出を行う

 「--version-trace」:バージョンスキャンの動作をトレース   

8. Quick traceroute

 nmap -sn --traceroute ホスト名 or IPアドレス

 「--traceroute」:対象ホストまでのパスをトレース

9. Regular scan

 nmap ホスト名 or IPアドレス

10. Slow comprehensive scan

 nmap -sS -sU -T4 -A -v -PE -PP -PS80,443 -PA3389 -PU40125 -PY -g 53 --script "default or (discovery and safe)" ホスト名 or IPアドレス

 「-PE」:ICMPタイプ8(エコー要求)パケットをターゲットに送信する(ICMP Ping

 「-PP」:タイプ13(タイムスタンプ要求)のICMPパケットを送信

 「-PS <ポートリスト>」:SYNフラグ付きの空のTCPパケットを送信。<ポートリスト>はSYN付きTCPパケットを送信するポートのリスト。<ポートリスト>が設定されない場合、デフォルトの80が使用される。カンマ区切りで複数のポート、25-80の様にハイフンで範囲が指定できる。

 「-PA <ポートリスト>」:ACKフラグ付きのTCPパケットを送信。仕様は「-PS」とほぼ同様

 「-PU <ポートリスト>」:空のUDPパケットを送信。仕様は「-PS」とほぼ同様

 「-PY」:SCTP(Stream Control Transmission Protocol) INIT

 「--script<スクリプトカテゴリ>|<ディレクトリ>|<ファイル名>|<全て> 」:使用するスクリプトを指定

 もう、これだけでも使いこなせたら完璧な気になってしまうのは考え甘いかな(>_<)

 

簡単にだけどnmapを使ってみて、どんな答えが返ってくるかをまとめる。

 

f:id:appleseedj073:20160815222317p:plain

基本、これだけでもどんなポートが解放されているのかが判別できる。いつもは、これやっておしまいw

 

f:id:appleseedj073:20160815222657p:plain

f:id:appleseedj073:20160815222729p:plain

f:id:appleseedj073:20160815222752p:plain

情報量半端ない!

これからはもう少しnmapを有効活用できるように頑張りますw