ペネトレーションテスト&バグバウンティ
ブラックハッカーは、サーバーに侵入するのが仕事ですね。
侵入するためには、まずサーバーの入り口を探す必要があります。
貴方の町でたとえると、家の入口にはいろいろあり、玄関、ガレージ、勝手口、裏門など用途によって様々な入口があります。
貴方の家の入り口は玄関ひとつだけかもしれませんが、サーバーには、なんと65536戸の入口があるのです。まるで超巨大なマンションですね。
貴方が営業マンだったら、一軒、一軒、「ピンポーン」とチャイムを鳴らして、65536戸の在宅情況を確認しますか、絶対に嫌ですよね。
ところが、マンションの在宅情況(サーバー)を調べてくれるツールがあるのです。
それが「ポートスキャン」です。
サーバーの入り口(ポート)をスキャンしてポートが開いているか否か調べてくれるのです。
ブラックハッカーは、まずサーバーの使える(開いている)ポートを探し、侵入経路を探します。
ポートスキャンとは
ポートスキャンは、コンピュータネットワーク上の特定のコンピュータやサーバーに対して、開いているポート(通信の入り口)を調査する手法です。ポートは、データの送受信に使用される通信チャネルであり、各ポートは特定の役割やサービスに割り当てられています。
TCPで良く利用されるポートとして
・20番 FTP (データ)
・21番 FTP(制御)
・22番 SSH
・23番 Telnet
・25番 SMTP
・80番 HTTP
・110番 POP3
・143番 IMAP4
・443番 HTTPS
があります。
ポートスキャンの手順
ポートスキャンの手順は以下のとおり。
1.ターゲットのIPアドレスを特定します
スキャン対象となるコンピュータやサーバーのIPアドレスを特定します。
2.スキャン対象のポート範囲を決定します
ポートスキャンを行う際、どのポートを調査するかを範囲指定します。一部の一般的なポートや特定のサービスをターゲットにする場合もあります。
3.対象ポートに対して通信を試みます
ポートスキャンツールを使って、指定されたポートに対して通信を試みます。通信の結果に応じてポートの状態を判断します。
4.スキャンの結果
・開いているポート
対象ポートが開いている場合、通信が成功し、コンピュータはそのポートを使用して通信を受け付けていることを意味します。
・閉じているポート
対象ポートが閉じている場合、通信が失敗し、コンピュータはそのポートを使用して通信を受け付けていないことを意味します。
TCPヘッダーのコントロールフラグ
ポートスキャンのポートが開いているか否かの判断は基本的に、TCPヘッダーのコントロールフラグを確認します。
ポートスキャンで利用するコントロールフラグは以下の通り。
・SYN 接続を確認する。
・ACK 確認した。
・RST 異常が発生、接続を強制切断した。
・FIN データの送信が完了したので終了したい。
ポートスキャンの種類
よく利用されるポートスキャンは以下のとおりです。
- TCPスキャン
- SYNスキャン
- FINスキャン
- ACKスキャン
- UDPスキャン
TCPスキャン
TCPスキャンは最も一般的なスキャン方法です。スキャナーはTCPヘッダーを使用ターゲットポートに接続を試みます。TCPコネクションの確立が成功すれば、ポートは「開いている」と判断されます。確立できなければ「閉じている」と判断されます。
ハッカーはTCPスキャンを使用して、特定のポートが開いているかどうかを調査します。
それは、攻撃するにはポートが開いている必要があるからです。
ポートが開いていれば、攻撃に対して脆弱性が存在する可能性が高いと考えられます。
開いているポートより、サーバーのどのサービスに対応しているかを特定することができます。サービスにより、ハッカーは攻撃手法を選択します。
・ポートが開いている場合
・ポートが閉じている場合
SYNスキャン
SYNスキャンはTCPスキャンの一つで、フルコネクションを確立せずにSYNパケットを送信し、サーバーがSYN/ACKを返すかどうかを調べます。SYN/ACKが返ってきた場合は「開いている」、RST(リセット)が返ってきた場合は「閉じている」と判断されます。
ハッカーはSYNスキャンを使用して、ターゲットのコンピュータに対して開いているポートを探索します。開いているポートがどのサービスに対応しているかを特定し、特定の攻撃や脆弱性を利用するための情報を収集します。
・ポートが開いている場合
・ポートが閉じている場合
攻撃方法
・SYNフラッド攻撃
通信の確立(SYN)のデータをサーバーに大量に送信して、サーバに負荷をかけて停止させる攻撃です。
FINスキャン
FINスキャンはTCPスキャンの一つで、ターゲットのポートが閉じているかどうかを確認するために、FINフラグを立てたTCPパケットを送信し、ターゲットの応答を調べる手法です。
ハッカーはFINスキャンを使用して、ターゲットのコンピュータに対して開いているポートを探索します。開いているポートは特定の攻撃や脆弱性を利用するための情報を収集します。
・ポートが開いている場合
・ポートが閉じている場合
攻撃方法
・FINフラッド攻撃
通信の切断(FIN)のデータをサーバーに大量に送信して、サーバに負荷をかけて停止させる攻撃です。
ACKスキャン
ACKスキャンは、ターゲットのポートがフィルタリングされているかどうかを確認するために、TCPパケットのACKフラグだけを立てたパケットを送信して、ターゲットがポートをどのように処理しているかを確認します。ACKパケットがRSTで返ってきた場合は「閉じている」、それ以外の応答があった場合は「フィルタリングされている」または「開いている」と判断されます。
ハッカーは、ACKスキャンを使用して、TCPパケットのACKフラグだけを立てたパケットを送信して、ターゲットのコンピュータに対して開いているポートを特定します。開いているポートは特定の攻撃や脆弱性を利用するための情報を収集します。
・ポートが開いている場合
・ポートが閉じている場合
攻撃方法
・ACKフラッド攻撃
無効なACKデータをサーバーに大量に送信して、サーバに負荷をかけて停止させる攻撃です。
UDPスキャン
UDPスキャンは、TCPスキャンとは異なり、UDPプロトコルを使用して通信を試みます。UDPはコネクションレスのプロトコルであるため、開いているポートでも応答がない場合があります。応答がなければ「閉じている」と判断します。
ハッカーはUDPスキャンを使用して、ターゲットのポートがUDPプロトコルに対応しているかどうかを確認します。特定のサービスがUDPポート上で動作している場合、それらのポートが開いている可能性が高いです。ハッカーはサービスを特定し、特定の攻撃や脆弱性を利用するための情報を収集します。
・ポートが開いている場合
・ポートが閉じている場合
攻撃方法
・ランダムポートフラッド攻撃
ランダムなポートに対してUDPを大量に送信することで、サーバはそのポートで待機しているプロセスを大量に処理することによりサーバに負荷をかけて停止させる攻撃です。
・フラグメント攻撃
大きなサイズのUDPパケットを中途半端に大量に送信する攻撃です。
送信先ではサイズの大きいUDPは分割して送信し、受信先で分割されたUDPを組み立てるのですが、送信先は分割したUDPの最初だけ送信することにより、受信先では組み立て待ちの未完成の情報を蓄積させることになり、サーバに負荷をかけて停止させる攻撃です。
ポートスキャンによる具体的な被害例
先に、ポートスキャンの攻撃方法を示しましたが、攻撃による具体的な被害例は以下の通りです。
-
不正アクセスと侵入
ハッカーがポートスキャンを用いてオープンしているポートを特定し、脆弱性を突いたりデフォルトのパスワードでのアクセスを試みることで、システムに不正に侵入することがあります。
-
サービス拒否(DoS)攻撃
ハッカーが大量のポートスキャンリクエストを送り込むことで、ターゲットのサーバーやネットワークを過負荷にして、正規のユーザーからのリクエストをブロックしたり、サービスの提供を妨害することがあります。
-
脆弱性の特定
ポートスキャンによってオープンしているポートが特定され、そのサービスやアプリケーションに対して既知の脆弱性を突くことができる可能性があります。
-
セキュリティ違反の確認
ポートスキャンによって、セキュリティ設定が不適切なシステムやサーバーが特定され、セキュリティポリシーに違反していることが判明する場合があります。
-
脅迫や恐喝
ハッカーがポートスキャンを行い、オープンしているポートを発見することで、それらのサービスに対して攻撃や情報の漏洩を脅迫することがあります。
ハッカーはポートスキャンを利用して侵入経路を探し、攻撃するのまとめ
ポートスキャンは、一般的には合法的なセキュリティテストやネットワーク評価の手法として使用されるため、ポートスキャン自体は違法行為ではありません。
しかし、ハッカーが侵入経路を調査する際にもポートスキャンが使われるため、使用方法には十分気をつける必要があります。
ポートスキャンの防衛方法としては、ファイアウォール、WAFの使用や、IDS/IPSの導入などがあり、これらの対策を組み合わせて実施することで、ポートスキャンによる攻撃からシステムやネットワークを守ることができます。