セキュリティ学習7日目
nmapやtelnetを使ってポートスキャンなどを試すことをしました。
nmap自体は仕事でもたまに使っているため、障壁は少なく軽く使えましたが、やはりオプションが多いので使いこなすにはそれなりにネットワーク周りが好きでごにょごにょする人が趣味で極めていくものなのかなぁともふと思ったり…。
とはいえ、少ないオプションでも実用で使えるnmapさんなので、今回も実践的で面白かった。
軽く調べて詳細を書く。
nmapオプション
主要なオプション(ホストスキャン)
`-sL`: リストスキャン。単純にターゲットとなるホストのリストを表示します。実際のスキャンは行いません。ネットワークの調査初期段階で使用します。
`-sn`: Pingスキャン(以前の-sP)。ポートスキャンを行わず、ホストが稼働しているかどうかのみを確認します。大規模ネットワークの生存ホスト探索に有効です。
`-Pn`: ホストの生存確認を行わず、すべてのホストが稼働していると仮定してスキャンを実行します。ファイアウォールでPingがブロックされている環境で有用です。
`-PS <ポートリスト>`: TCP SYN Pingを指定したポートに送信します。デフォルトは80番ポートです。ファイアウォール環境での代替的なホスト探索手段として使用します。
`-PE`: ICMP Echo Request (ping)を送信します。最も基本的なホスト探索方法ですが、多くの環境でブロックされています。
`-PP`: ICMP Timestamp Requestを送信します。Echo Requestがブロックされている環境での代替手段です。
`-PM`: ICMP Address Mask Requestを送信します。これもEcho Requestの代替手段の一つです。
`-PO <プロトコルリスト>`: IP Protocol Pingを送信します。指定したプロトコルを使用してホストの生存確認を行います。
`-n`: DNS名前解決を行いません。スキャンを高速化できます。
`-R`: 常にDNS名前解決を行います。オフラインのホストに対しても実行されます。
`--resolve-all`: 同じIPアドレスに対する複数のDNS名を解決します。
`--system-dns`: システムのDNSリゾルバを使用します。
`--disable-arp-ping`: ARP pingを無効化します。特定の環境でスキャンの精度を向上させる場合に使用します。
`--traceroute`: 各ターゲットへの経路を追跡します。
`--dns-servers`: カスタムDNSサーバーを指定します。
nmapの返す6つのポート状態
`open`: ポートが開いており、アプリケーションがリッスンしている状態です。
`closed`: ポートは到達可能ですが、リッスンしているアプリケーションがない状態です。
`filtered`: パケットがフィルタリングされており、ポートの状態を判断できません。ファイアウォールなどによってブロックされている可能性があります。
`open|filtered`: ポートが開いているか、フィルタリングされているか判断できない状態です。
`closed|filtered`: ポートが閉じているか、フィルタリングされているか判断できない状態です。
主要なポート(ポートスキャン)
`-sT`: TCP接続スキャン。完全なTCP接続を確立します。最も基本的で確実なスキャン方法です。
`-sS`: TCP SYNスキャン。SYNパケットのみを送信する半接続スキャンです。高速で検出されにくい特徴があります。
`-sU`: UDPスキャン。UDPポートのスキャンを行います。時間がかかりますが、重要なサービスの発見に不可欠です。
`-O`: OS検出を試みます。
`-O -A`: OS検出と詳細なスキャンを行います。
`-A`: 積極的なスキャンオプション。OS検出、バージョン検出、スクリプトスキャン、トレースルートを実行します。
`-sC`: デフォルトのNSEスクリプトでスキャンを実行します。
`-sY`: SCTP INITスキャン。SCTPポートの検出に使用します。
`-sN`: TCP NULLスキャン。フラグを設定しないパケットを送信します。
`-sF`: FINスキャン。FINフラグのみを設定したパケットを送信します。
`-sX`: Xmasスキャン。FIN、PSH、URGフラグを設定したパケットを送信します。
`-sA`: ACKスキャン。ファイアウォールルールのマッピングに使用します。
`-sW`: Windowスキャン。TCP Windowサイズの違いを利用したスキャンです。
`-sM`: TCP Maimonスキャン。FINとACKフラグを使用します。
`--scanflags`: カスタムTCPフラグの組み合わせでスキャンします。
`-sZ`: SCTPCOOKIEECHOスキャン。SCTPポートのスキャンの一種です。
`-sI <ゾンビホスト>`: Idleスキャン。第三者のホストを利用した隠密スキャンです。
`-sO`: IPプロトコルスキャン。どのIPプロトコルが使用可能か調査します。
`-b <FTPリレーホスト>`: FTPバウンススキャン。FTPサーバーを経由したスキャンを行います。
オプション詳細(ポート仕様、スキャン順序)
`-p <ポート範囲>`: スキャンするポート範囲を指定します。
`--exclude-ports <ポート範囲>`: スキャンから除外するポート範囲を指定します。
`-F`: 高速モード。より少ないポートをスキャンします。
`-r`: 順番にポートスキャンを行います。ランダム化しません。
オプション(サービスとバージョン検出)
`-sV (-sR or -A)`: サービスのバージョン情報を検出します。
`--allports`: すべてのポートでバージョン検出を試みます。
`--version-intensity`: バージョン検出の積極性を0-9で指定します。
`--version-trace`: バージョン検出のデバッグ情報を表示します。
Metasploit
Metasploit Frameworkとは、Rapid社が保守しているOSSであり、攻撃用のプログラムなども含めた攻撃ツールになります。
これを使って、やられサーバに対して攻撃をしかけたりしていました。
これも難しいが楽しい!
難しさの一つにMetasploitのコマンドの多さや種類の理解が必要ということがあると思っています。
所謂フレームワークなので、これはプログラムの塊のようなものであり、中のプログラム(オプション)を使うには利用用途を理解しないといけませんよねってことです。
例えば、Metasploitを立ち上げると、使うツールによってRHOSTとLHOSTを指定する必要があったりします。
さらにツールも様々な攻撃手法を兼ね備えているので、必要に応じて攻撃したい種類に合わせてツールの選択が必要になります。
`use XXXX` とすることでそのツールを使うことをするのですが、この `XXX` の部分に何を選べばいいのか利用方法を理解しないと使えないというのがあり、さらにそれを試すための仮想環境が必要になります。
なにせ、攻撃用のツールなので外部のサーバに無闇に攻撃したら犯罪になりますからね。
そのため、CTFなど攻撃しても良いサーバで思う存分試すのが効率が良さそうに思いました。
多分毎回脆弱性を仕込んだやられサーバを自分で構築してたら時間が湯水のように溶けていきます。
しかし、それらを使いやすくしてくれるツールがありました。
Armitageというツールであり、MetasploitをGUIで使えるようにしてくれるツールです。
これにより画面ぽちぽちすることで、RHOSTの設定や攻撃する項目の一覧をポップアップから選ぶだけで良かったり、攻撃先や手法毎に保存しておいて、ログなどもタブの切り替えだけでできるようになるので、非常に使いやすい。
しかし、Metasploitの利用に慣れたら、Armitageを使いこなすことにもつながるかもしれないですが、まずはMetasploitをそのままコマンドで利用することで何を使えばいいのかを把握することが重要な気がします。
とはいえ、MetasploitがどういうCTFで必要になるかは僕もまだ分かってない部分なので、これからCTFをやる際や、いろんな人のwriteupを見て、Metasploitを使ってそうなものを選んでCTFやっていくのが良いのかなぁと考えているところです。