ラベル TryHackMe の投稿を表示しています。 すべての投稿を表示
ラベル TryHackMe の投稿を表示しています。 すべての投稿を表示

【TryHackMeウォークスルー】Command Injection

 

Command Injectionとは、アプリケーションの動作を悪用して、デバイス上で実行中のプログラムと同じ権限でオペレーティングシステム上のコマンドを実行することです。これはOWASPフレームワークのトップテンの脆弱性の一つとして挙げられています。また、攻撃者がシステム自体への直接的なアクセスを得ることなく、アプリケーションに攻撃者が提供するペイロードのシーケンスを実行させることができるため、"Remote Code Execution" (RCE) とも呼ばれます。

この脆弱性は、PHP、Python、NodeJSなどのプログラミング言語で頻繁に使用される関数を使用して、データを転送し、マシンのオペレーティングシステム上でシステムコールを行うために存在します。例として、入力フィールドからの入力を取得し、ファイル内のエントリを検索する場合が挙げられます。

攻撃者は、このプログラムの脆弱性を利用して、自分のコマンドを実行させることができます。

あるWebアプリケーションがあり、ユーザーはIPアドレスを入力すると、サーバーがそのIPアドレスに対してpingを実行し、結果をユーザーに返します。


攻撃者はこの機能を悪用して、次のような入力をすることができます:

127.0.0.1 & cat /etc/passwd


Command Injectionは、以下の2つの方法のいずれかで検出できることが多いです:

Blind Command Injection: ペイロードをテストする際、アプリケーションから直接の出力はなく、攻撃者はペイロードが成功したかどうかを発見するためにアプリケーションの動作を分析する必要があります。

Verbose Command Injection: ペイロードをテストした後、攻撃者はプログラムから即座に応答を受け取ります。

この脆弱性を回避する方法はいくつかありますが、プログラム言語で有害な関数やライブラリを使用することから、ユーザー入力に依存せずに入力をフィルタリングすることまで、さまざまな方法が考えられます。

  1. ユーザー入力の検証: ユーザーからの入力を信頼せず、特定のパターンや値にのみ一致する入力のみを受け入れるようにします。

  2. ホワイトリスト方式: 期待される入力のホワイトリストを作成し、それ以外の入力を拒否します。

  3. 外部コマンドの使用を避ける: 可能であれば、外部システムコマンドの実行を避け、代わりにプログラム言語の組み込み関数やライブラリを使用します。

  4. エスケープ処理: システムコマンドを実行する前に、ユーザー入力を適切にエスケープ処理します。

  5. 最小権限の原則: アプリケーションが実行されるアカウントの権限を最小限に保ち、不要な権限を持たせないようにします。

  6. セキュリティライブラリの使用: コマンドインジェクションを防ぐためのセキュリティライブラリやフレームワークを使用します。

  7. 環境変数の制限: システムの環境変数を制限し、攻撃者がこれを利用してコマンドを実行するのを防ぎます。

  8. 入力長の制限: ユーザーからの入力の長さを制限し、大量のコマンドやペイロードの挿入を防ぎます。


サブドメイン列挙ツール:Sublist3r

 

セキュリティ研究やペネトレーションテスティングにおいて有用な一つのツール、Sublist3rの紹介。Sublist3rは、特定のドメインに対するすべてのサブドメインを列挙するためのPython製のオープンソースツール。その能力はOSINT(Open Source Intelligence)の一環であり、公開情報から情報を収集します。

Sublist3rとは何か?

簡単に言うと、Sublist3rは様々な検索エンジン(Google、Yahoo、Bing等)と人気のあるツールのAPI(Netcraft、Virustotal、ThreatCrowd、SSL Certificates Transparency Logsなど)を利用して、特定のドメインのすべてのサブドメインを探し出すツールです。

なぜSublist3rが必要なのか?

サブドメインの発見は、情報収集フェーズにおいて非常に重要です。特定のドメインがどのように構築され、どのサーバーが公開されているかを理解するための重要な手段となります。

Sublist3rの簡単な使い方

それでは、実際にSublist3rをどのように使うのかを見てみましょう。

1.インストール: まずはGitHubからSublist3rをクローンします。


git clone https://github.com/aboul3la/Sublist3r.git

2.次に、Sublist3rディレクトリに移動し、必要なPythonライブラリをインストールします。


cd Sublist3r pip install -r requirements.txt

3.使用方法: 基本的な使用方法は非常にシンプルです。以下のコマンドを使用して特定のドメイン(ここでは"example.com")のサブドメインを列挙します。

python sublist3r.py -d example.com


これだけで、Sublist3rが「example.com」のすべてのサブドメインを探し出してくれます。

Sublist3rは、セキュリティテストやネットワーク分析において非常に役立つツールです。特にOSINTに関心がある方はぜひ一度お試しください。ただし、正当な理由と許可がない限り、他人のドメインでこれを使用しないでください。

出典:Subdomain Enumeration

【TryHackMeウォークスルー】Nmap Advanced Port Scans

 

Task 1  Introduction

ここは、Nmapシリーズ(ネットワークセキュリティ入門モジュールの一部)の3つ目です。

  1. Nmap Live Host Discovery
  2. Nmap Basic Port Scans
  3. Nmap Advanced Port Scans
  4. Nmap Post Port Scans
Nmap Basic Port Scansでは、TCPフラグについて説明し、TCPの3ウェイハンドシェイクを復習しました。接続を開始するために、TCPは最初のパケットにSYNフラグを設定する必要があります。その結果、受信した応答に基づいて、TCPポートが開いているかどうかを判断することができます。

セキュリティ研究者やハッカーは、下図と前回説明したTCPフラグを熟考し、実験を開始しました。TCPパケットを送信した場合、どのようなことが起こるのか、また、どのTCPコネクションにも属さないのに、1つまたは複数のフラグが設定されているのかを知りたいと考えました。


例えば、ACKフラグは、受信したデータを承認したいときに設定します。ACKスキャンは、そもそも送信も受信もされていないデータを承認しようとするようなものです。例えるなら、何も言っていないのに突然「はい、聞こえます、続けてください」と言われるようなものです。

ここでは、高度なスキャンの種類とスキャンオプションについて説明します。これらのスキャンの種類には、特定のシステムに対して有効なものもあれば、特定のネットワーク設定に有効なものもあります。ここでは、次のようなタイプのポートスキャンを取り上げます。

  • Null Scan
  • FIN Scan
  • Xmas Scan
  • Maimon Scan
  • ACK Scan
  • Window Scan
  • Custom Scan

さらに、以下を取り上げます。

  • Spoofing IP
  • Spoofing MAC
  • Decoy Scan
  • Fragmented Packets
  • Idle/Zombie Scan

ファイアウォールやIDSシステムを回避するためのオプションやテクニックについて説明します。また、Nmapからより詳細な情報を取得するためのオプションについても説明します。

■question

 ※無し


Task 2  TCP Null Scan, FIN Scan, and Xmas Scan

まずは、次の3種類のスキャンをご紹介します。

  • Null Scan
  • FIN Scan
  • Xmas Scan

Null Scan

Nullスキャンでは、フラグは設定されず、6 つのフラグビットはすべて 0 に設定されます。このスキャンは、-sN オプションを使用して選択することができます。フラグが設定されていないTCPパケットは、下図に示すように、オープンポートに到達しても何の応答も引き起こしません。したがって、Nmapの観点では、nullスキャンで応答がないのは、ポートが開いているか、ファイアウォールがパケットをブロックしているかのどちらかであることを示しています。


しかし、ポートが閉じている場合、ターゲットサーバーはRSTパケットで応答することが想定されます。その結果、RSTの応答がないことを利用して、閉じていないポートすなわちopenまたはfilteredを把握することができます。


以下は、Linuxサーバーに対するnullスキャンの例です。実施したnullスキャンでは、ターゲットシステム上の6つのオープンポートを正常に識別しています。null スキャンは、これらのポートが開いていることを確実に示すことはできず、ポートがファイアウォール ルールに起因して応答しない可能性もあります。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sN MACHINE_IP

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 10:30 BST
Nmap scan report for MACHINE_IP
Host is up (0.00066s latency).
Not shown: 994 closed ports
PORT    STATE         SERVICE
22/tcp  open|filtered ssh
25/tcp  open|filtered smtp
80/tcp  open|filtered http
110/tcp open|filtered pop3
111/tcp open|filtered rpcbind
143/tcp open|filtered imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 96.50 seconds

多くのNmapオプションはroot権限を必要とすることに注意してください。Nmapをrootで実行しているのでなければ、上の例のように-sNオプションを使用してsudoを使用する必要があります。

FIN Scan

FINスキャンは、FINフラグが設定されたTCPパケットを送信します。このスキャンタイプは、-sF オプションを使用して選択できます。同様に、TCPポートが開いている場合、応答は送信されません。ここでも、Nmapは、ポートが開いているか、ファイアウォールがこのTCPポートに関連するトラフィックをブロックしているかどうかを確認することはできません。


しかし、ポートが閉じられている場合、ターゲットシステムはRSTで応答します。その結果、どのポートが閉じられているかを知ることができ、この知識を使って開いているポートやフィルタリングされているポートを推測することができるようになります。ファイアウォールの中には、RSTを送信せずにトラフィックを「静かに」ドロップするものがあることは注目に値します。


以下は、Linuxサーバーに対するFINスキャンの例である。この結果は、先にnullスキャンを使用して得た結果とよく似ています。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sF MACHINE_IP

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 10:32 BST
Nmap scan report for MACHINE_IP
Host is up (0.0018s latency).
Not shown: 994 closed ports
PORT    STATE         SERVICE
22/tcp  open|filtered ssh
25/tcp  open|filtered smtp
80/tcp  open|filtered http
110/tcp open|filtered pop3
111/tcp open|filtered rpcbind
143/tcp open|filtered imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 96.52 seconds

Xmas Scan

Xmasスキャンは、クリスマスツリーのイルミネーションにちなんで名づけられました。Xmasスキャンは、FIN、PSH、URGフラグを同時に設定します。Xmasスキャンは、オプション-sXで選択することができます。

NullスキャンやFINスキャンと同様に、RSTパケットを受信した場合、そのポートはクローズされていることを意味します。それ以外の場合は、open|filteredと報告されます。

次の2つの図は、TCPポートが開いている場合と閉じている場合を示しています。


以下のコンソール出力は、Linuxサーバーに対するXmasスキャンの例を示しています。得られた結果は、nullスキャンやFINスキャンの結果とよく似ています。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sX MACHINE_IP

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 10:34 BST
Nmap scan report for MACHINE_IP
Host is up (0.00087s latency).
Not shown: 994 closed ports
PORT    STATE         SERVICE
22/tcp  open|filtered ssh
25/tcp  open|filtered smtp
80/tcp  open|filtered http
110/tcp open|filtered pop3
111/tcp open|filtered rpcbind
143/tcp open|filtered imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 84.85 seconds

これら3つのスキャンタイプを効率的に使用できるシナリオの1つは、ステートレス(非ステートフル)ファイアウォールの背後にあるターゲットをスキャンする場合です。ステートレスファイアウォールは、着信パケットにSYNフラグが設定されているかどうかをチェックし、接続の試行を検出します。SYNパケットと一致しないフラグの組み合わせを使用すると、ファイアウォールを欺き、その背後にあるシステムに到達することが可能になります。しかし、ステートフルファイアウォールは、このような細工を施したパケットをすべて実質的にブロックし、この種のスキャンを無意味なものにしてしまいます。

■question

In a null scan, how many flags are set to 1?
0


In a FIN scan, how many flags are set to 1?
1

In a Xmas scan, how many flags are set to 1?
3

Start the VM and load the AttackBox. Once both are ready, open the terminal on the AttackBox and use nmap to launch a FIN scan against the target VM. How many ports appear as open|filtered?
7

Repeat your scan launching a null scan against the target VM. How many ports appear as open|filtered?
7


Task 3  TCP Maimon Scan

Uriel Maimonは1996年にこのスキャンを初めて説明しました。このスキャンでは、FINビットとACKビットが設定さ れます。ターゲットは、応答としてRSTパケットを送信する必要があります。しかし、ある種のBSD由来のシステムでは、オープンポートを公開している場合、パケットをドロップします。このスキャンは、現代のネットワークで遭遇するほとんどのターゲットでは機能しません。しかし、ここではポートスキャンの仕組みとハッキングの考え方をより理解するために、取り入れています。このスキャンタイプを選択するには、-sM オプションを使用します。

ほとんどのターゲット・システムは、TCPポートが開いているかどうかに関係なく、RSTパケットで応答します。このような場合、開いているポートを発見することはできません。下図は、TCPポートが開いている場合と閉じている場合の両方で期待される動作を示しています。


以下のコンソール出力は、Linuxサーバーに対するTCP Maimonスキャンの一例です。前述の通り、オープンポートとクローズドポートは同じ動作をするため、Maimonスキャンではターゲットシステム上のオープンポートを発見することができませんでした。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sM 10.10.252.27

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 10:36 BST
Nmap scan report for ip-10-10-252-27.eu-west-1.compute.internal (10.10.252.27)
Host is up (0.00095s latency).
All 1000 scanned ports on ip-10-10-252-27.eu-west-1.compute.internal (10.10.252.27) are closed
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.61 seconds

このタイプのスキャンは、システムを発見するために最初に選ぶスキャンではありませんが、いつ役に立つかわからないため、知っておくことは重要です。

■question

In the Maimon scan, how many flags are set?
2


Task 4  TCP ACK, Window, and Custom Scan

このタスクでは、TCP ACKスキャン、TCPウィンドウスキャンの実行方法、およびカスタムフラッグスキャンの作成方法について説明します。

TCP ACK Scan

まず、TCP ACKスキャンから説明します。その名の通り、ACKスキャンはACKフラグがセットされたTCPパケットを送信します。このスキャンを選択するには、-sAオプションを使用します。下の図に示すように、ターゲットはポートの状態に関係なく、ACKに対してRSTで応答することになります。この挙動は、ACKフラグが設定されたTCPパケットは、今回のケースとは異なり、何らかのデータの受信を確認するために、受信したTCPパケットに応答してのみ送信されるはずであるために起こります。したがって、このスキャンでは、単純なセットアップでは、ターゲット・ポートが開いているかどうかはわかりません。


次の例では、ファイアウォールをインストールする前にターゲットVMをスキャンしています。予想通り、どのポートが開いているのかを知ることはできませんでした。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sA 10.10.86.220

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 10:37 BST
Nmap scan report for 10.10.86.220
Host is up (0.0013s latency).
All 1000 scanned ports on MACHINE_IP are unfiltered
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.68 seconds

このようなスキャンは、ターゲットの前にファイアウォールがある場合に有効でしょう。その結果、どのACKパケットがレスポンスになったかに基づいて、どのポートがファイアウォールによってブロックされなかったかを知ることができます。つまり、このタイプのスキャンは、ファイアウォールのルールセットと構成を発見するのに適しています。

ターゲットVM 10.10.86.220にファイアウォールを設定した後、ACKスキャンを繰り返しました。今回、興味深い結果が得られました。下のコンソール出力に見られるように、ファイアウォールによってブロックされていないポートが3つあります。この結果は、ファイアウォールがこの3つのポート以外のすべてのポートをブロックしていることを示しています。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sA 10.10.86.220

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-07 11:34 BST
Nmap scan report for 10.10.86.220
Host is up (0.00046s latency).
Not shown: 997 filtered ports
PORT    STATE      SERVICE
22/tcp  unfiltered ssh
25/tcp  unfiltered smtp
80/tcp  unfiltered http
MAC Address: 02:78:C0:D0:4E:E9 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 15.45 seconds


Window Scan

もう1つの類似のスキャンは、TCPウィンドウ・スキャンです。TCPウィンドウ・スキャンは、ACKスキャンとほぼ同じですが、返されたRSTパケットのTCPウィンドウ・フィールドを検査するものです。特定のシステムでは、これによってポートが開いていることが判明することがあります。このスキャン・タイプは、オプション -sW で選択することができます。下図に示すように、ポートが開いているか閉じているかにかかわらず、「招かれざる」ACKパケットに対する返信としてRSTパケットを受け取ることが予想されます。


同様に、ファイアウォールのないLinuxシステムに対してTCPウィンドウ・スキャンを起動しても、あまり情報は得られません。以下のコンソール出力でわかるように、ファイアウォールのないLinuxサーバーに対するウィンドウスキャンの結果は、先に実行したACKスキャンと比較して、余分な情報を与えていないことがわかります。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sW 10.10.86.220

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 10:38 BST
Nmap scan report for 10.10.86.220
Host is up (0.0011s latency).
All 1000 scanned ports on ip-10-10-252-27.eu-west-1.compute.internal (10.10.252.27) are closed
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

しかし、ファイアウォールの背後にあるサーバーに対してTCPウィンドウスキャンを繰り返すと、より満足のいく結果が得られると思われます。以下のコンソール出力では、TCPウィンドウスキャンによって3つのポートがクローズドとして検出されたことが指摘されています。(これは、同じ3つのポートがフィルタリングされていないとラベル付けされたACKスキャンとは対照的です)。これらの3つのポートが閉じられていないことは分かっていますが、ファイアウォールがそれらをブロックしていないことを示す、異なる反応を示していることに気付かされます。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sW 10.10.86.220

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-07 11:39 BST
Nmap scan report for 10.10.86.220
Host is up (0.00040s latency).
Not shown: 997 filtered ports
PORT    STATE  SERVICE
22/tcp  closed ssh
25/tcp  closed smtp
80/tcp  closed http
MAC Address: 02:78:C0:D0:4E:E9 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 14.84 seconds


Custom Scan

内蔵のTCPスキャン・タイプを超える新しいTCPフラグの組み合わせを実験したい場合は、-scanflagsで行うことができます。例えば、SYN、RST、FINを同時に設定したい場合は、-scanflags RSTSYNFINを使用して設定することができます。下図に示すように、カスタムスキャンを開発する場合、異なるシナリオでの結果を正しく解釈するために、異なるポートがどのように動作するかを知っておく必要があります。


最後に、ACKスキャンとWindowsスキャンは、ファイアウォールルールをマッピングする上で非常に効率的でした。しかし、ファイアウォールが特定のポートをブロックしていないからといって、必ずしもそのポートでサービスが listenしているとは限らないということを覚えておくことが重要です。例えば、サービス変更に伴い、ファイアウォールルールを更新する必要がある可能性があります。したがって、ACKとWindowsスキャンは、サービスではなく、ファイアウォールのルールを公開していることになります。

■question

In TCP Window scan, how many flags are set?
1

You decided to experiment with a custom TCP scan that has the reset flag set. What would you add after --scanflags? 
RST


The VM received an update to its firewall ruleset. A new port is now allowed by the firewall. After you make sure that you have terminated the VM from Task 2, start the VM for this task. Launch the AttackBox if you haven't done that already. Once both are ready, open the terminal on the AttackBox and use Nmap to launch an ACK scan against the target VM. How many ports appear unfiltered?
4

What is the new port number that appeared?
443

Is there any service behind the newly discovered port number? (Y/N)
N


Task 5  Spoofing and Decoys

一部のネットワーク設定では、なりすましIPアドレスやなりすましMACアドレスを使ってターゲットシステムをスキャンすることができます。このようなスキャンは、応答をキャプチャできることを保証できる状況でのみ有益です。詐称したIPアドレスを使ってどこかランダムなネットワークからターゲットをスキャンしようとすると、自分にルーティングされたレスポンスがない可能性があり、スキャン結果も信頼できないものになる可能性があります。

次の図は、攻撃者がnmap -S SPOOFED_IP MACHINE_IPというコマンドを実行しているところです。その結果、Nmapは提供されたソースIPアドレスSPOOFED_IPを使用してすべてのパケットを作成します。ターゲットマシーンは、受信したパケットに応答して、宛先IPアドレスSPOOFED_IPに返信を送信します。このスキャンが機能し、正確な結果を得るためには、攻撃者はネットワークトラフィックを監視して、返信を分析する必要があります。


簡単に説明すると、詐称したIPアドレスでのスキャンは3ステップです:
  1. 攻撃者は、送信元IPアドレスを詐称したパケットを対象マシンに送信する。
  2. ターゲットマシンは、偽装されたIPアドレスを宛先として返信する。
  3. 攻撃者は返信をキャプチャしてオープンポートを把握する。
一般的に、-eを使用してネットワーク・インターフェイスを指定し、明示的にpingスキャン -Pn を無効にすることを想定しています。したがって、nmap -S SPOOFED_IP MACHINE_IPの代わりに、nmap -e NET_INTERFACE -Pn -S SPOOFED_IP MACHINE_IPを実行して、Nmapに使用するネットワークインターフェイスとping応答の受信を期待しないことを明示的に伝える必要があります。攻撃側のシステムが応答についてネットワークを監視できない場合、このスキャンは無意味となります。

ターゲットマシーンと同じサブネット上にいる場合、MACアドレスも偽装することができます。送信元MACアドレスは、-spoof-mac SPOOFED_MACで指定することができます。このアドレススプーフィングは、攻撃者とターゲットマシンが同じイーサネット(802.3)ネットワークまたは同じWiFi(802.11)上にある場合のみ可能です。

なりすましは、一定の条件を満たした最小限のケースでしか機能しません。そのため、攻撃者は囮を使うことで、ピンポイントで発見されることを防ぐことができます。コンセプトは簡単で、多くのIPアドレスからスキャンが行われているように見せかけ、攻撃者のIPアドレスがその中に紛れ込むようにするのです。下図のように、ターゲットマシンのスキャンは3つの異なるソースから送られているように見え、その結果、返信は囮にも送られることになります。


-D の後に特定またはランダムな IP アドレスを指定することで、おとりスキャンを起動することができます。例えば、nmap -D 10.10.0.1,10.10.0.2,ME MACHINE_IPは、MACHINE_IPのスキャンがIPアドレス10.10.0.1, 10.10.0.2 から来るように見せ、さらにMEで自分のIPアドレスを3番目に表示すべきことを指示します。別のコマンド例としては、nmap -D 10.10.0.1,10.10.0.2,RND,RND,ME MACHINE_IPがあり、3番目と4番目のソースIPアドレスはランダムに割り当てられ、5番目のソースは攻撃者のIPアドレスになる予定であることがわかります。つまり、後者のコマンドを実行するたびに、2つの新しいランダムなIPアドレスが3番目と4番目のおとりソースになると予想されます。

■question

What do you need to add to the command sudo nmap MACHINE_IP to make the scan appear as if coming from the source IP address 10.10.10.11 instead of your IP address?
-S 10.10.10.11

What do you need to add to the command sudo nmap MACHINE_IP to make the scan appear as if coming from the source IP addresses 10.10.20.21 and 10.10.20.28 in addition to your IP address?
-D 10.10.20.21,10.10.20.28

Task 6  Fragmented Packets

Firewall

ファイアウォールとは、パケットの通過を許可したり、遮断したりするソフトウェアやハードウェアのことです。ファイアウォールのルールに基づいて機能し、例外を除いてすべてのトラフィックをブロックしたり、例外を除いてすべてのトラフィックを許可したりすることができます。例えば、Webサーバーへのトラフィックを除き、サーバーへのトラフィックをすべてブロックすることができます。従来のファイアウォールは、少なくともIPヘッダーとトランスポート層ヘッダーを検査します。より高度なファイアウォールは、トランスポート層で運ばれるデータも検査しようとします。

IDS

侵入検知システム(IDS)は、ネットワークパケットを検査し、特定の行動パターンや特定のコンテンツシグネチャを検出します。IDSは、悪意のあるルールに合致した場合に警告を発します。IDSは、IPヘッダーとトランスポート層のヘッダーに加え、トランスポート層のデータコンテンツを検査し、悪意のあるパターンに一致するかどうかをチェックします。従来のファイアウォール/IDSがNmapの活動を検出する可能性を低くするには、どうすればよいのでしょうか。これに答えるのは簡単ではありません。しかし、ファイアウォール/IDSの種類によっては、パケットをより小さなパケットに分割することでうまくいく場合があります。

Fragmented Packets

Nmapには、パケットを断片化するためのオプション-fが用意されています。一度選択すると、IPデータは8バイト以下に分割されます。さらに-fを追加すると(-f -fまたは-ff)、データは8バイトではなく16バイトの断片に分割されます。デフォルト値は--mtuを使用して変更できますが、常に8の倍数を選択する必要があります。

フラグメンテーションを正しく理解するためには、下図のIPヘッダを見る必要があります。最初は複雑に見えるかもしれませんが、ほとんどのフィールドがわかっていることに気がつきます。特に、送信元アドレスは4行目に32ビット(4バイト)、宛先アドレスは5行目にさらに4バイトを占めていることに注目してください。複数のパケットに分割されるデータは、赤でハイライトされています。受信側での再組み立てを支援するために、IPは下図の2行目に示す識別(ID)とフラグメントオフセットを使用します。


sudo nmap -sS -p80 10.20.30.144 と sudo nmap -sS -p80 -f 10.20.30.144 を実行して比較してみましょう。もうお分かりのように、これはポート80でステルスTCP SYNスキャンを使用します。しかし、2番目のコマンドでは、NmapにIPパケットの断片化を要求しています。

最初の2行では、ARPクエリと応答が確認できます。ターゲットが同じイーサネット上にあるため、NmapはARPクエリを発行しました。2行目には、TCP SYN pingとその応答が示されています。5行目はポートスキャンの始まりで、Nmapはポート80にTCP SYNパケットを送信しています。この場合、IPヘッダは20バイト、TCPヘッダは24バイトである。TCPヘッダの最小サイズは20バイトであることに注意してください。


-f でフラグメントを要求すると、TCPヘッダーの24バイトは8バイトの倍数に分割され、最後のフラグメントにはTCPヘッダーの8バイト以下が含まれます。24は8で割り切れるので、3つのIPフラグメントが得られました。それぞれが20バイトのIPヘッダーと8バイトのTCPヘッダーを持ちます。5行目から7行目にかけて、3つのフラグメントが確認できます。


なお、-ff(または-f -f)を付けた場合、データの断片化は16の倍数になります。つまり、この場合、TCPヘッダーの24バイトは、2つのIPフラグメントに分割され、最初のフラグメントは16バイト、2番目のフラグメントはTCPヘッダーの8バイトを含みます。

一方、パケットのサイズを大きくして無難に見せたい場合は、オプション --data-length NUM を使用することができ、num にはパケットに追加したいバイト数を指定します。

■question

If the TCP segment has a size of 64, and -ff option is being used, how many IP fragments will you get?
4

Task 7  Idle/Zombie Scan

送信元IPアドレスを偽装することは、ステルススキャンを行う上で非常に有効な手段です。ただし、スプーフィングが機能するのは、特定のネットワーク設定に限られます。また、トラフィックを監視できる位置にいることが必要です。これらの制限を考慮すると、IPアドレスのスプーフィングはほとんど役に立ちませんが、アイドルスキャンでこの方法をアップグレードすることは可能です。

アイドルスキャン(ゾンビスキャン)には、ネットワークに接続され、通信可能なアイドルシステムが必要です。実際、Nmapは各プローブをアイドル(ゾンビ)ホストから発信されているように見せかけ、ゾンビホストが偽装されたプローブに対して何らかの応答を受け取ったかどうかを指標にチェックします。これは、IPヘッダーのIP識別(IP ID)値をチェックすることで実現されます。nmap -sI ZOMBIE_IP MACHINE_IP(ZOMBIE_IPはゾンビのIPアドレス)を使用して、アイドルスキャンを実行することができます。

アイドル(ゾンビ)スキャンでは、ポートが開いているかどうかを発見するために、次の3つのステップが必要です:
  1. アイドルホストの現在のIP IDを記録できるように、アイドルホストが応答するようにトリガーをかける。
  2. ターゲットのTCPポートにSYNパケットを送信する。このパケットは、アイドルホスト(ゾンビ)のIPアドレスから送信されているように見えるように偽装する必要があります。
  3. アイドルマシンを再度トリガーして応答させ、新しいIP IDと先に受信したIP IDを比較できるようにする。
図を使って説明しましょう。下の図では、攻撃者システムがアイドル状態のマシンであるマルチファンクションプリンターを探っているところです。SYN/ACKを送信すると、新たにインクリメントされたIP IDを含むRSTパケットで応答しています。


攻撃者は、次のステップでターゲットマシンのチェックしたいTCPポートにSYNパケットを送信します。ただし、このパケットは、アイドルホスト(ゾンビ)のIPアドレスを送信元として使用します。このとき、3つのシナリオが発生します。下図に示す最初のシナリオでは、TCPポートが閉じられているため、ターゲットマシンはRSTパケットでアイドルホストに応答します。アイドルホストは応答しないので、そのIP IDはインクリメントされません。


2番目のシナリオでは、以下に示すように、TCPポートが開いているため、ターゲットマシンはアイドルホスト(ゾンビ)に対してSYN/ACKで応答します。アイドルホストはこの予期せぬパケットにRSTパケットで応答し、IP IDをインクリメントします。


3つ目のシナリオでは、ファイアウォールルールによりターゲットマシンが全く応答しない。この応答の欠如は、閉じたポートの場合と同じ結果を招きます。アイドルホストはIP IDを増加させません。

最後のステップとして、攻撃者はアイドルホストに再度SYN/ACKを送信する。アイドルホストはRSTパケットで応答し、IP IDを再び1つ増加させる。攻撃者は、最初のステップで受信したRSTパケットのIP IDと、この3番目のステップで受信したRSTパケットのIP IDを比較する必要があります。その差が1であれば、ターゲットマシンのポートが閉じられたかフィルタリングされたことを意味します。しかし、その差が2であれば、ターゲットのポートが開いていたことを意味します。

このスキャンがアイドルスキャンと呼ばれるのは、スキャンの精度を上げるためにはアイドルホストの選択が不可欠であるためです。繰り返し述べておきます。もし「アイドルホスト」がビジーであれば、返されたIP IDはすべて無駄になってしまいます。

■question

You discovered a rarely-used network printer with the IP address 10.10.5.5, and you decide to use it as a zombie in your idle scan. What argument should you add to your Nmap command?
-sI 10.10.5.5

Task 8  Getting More Details

Nmapにその理由と結論に関する詳細を提供させたい場合は、--reasonの追加を検討することができます。後者の例では--reasonを追加しています。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sS 10.10.252.27

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 10:39 BST
Nmap scan report for ip-10-10-252-27.eu-west-1.compute.internal (10.10.252.27)
Host is up (0.0020s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
110/tcp open  pop3
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sS --reason 10.10.252.27

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 10:40 BST
Nmap scan report for ip-10-10-252-27.eu-west-1.compute.internal (10.10.252.27)
Host is up, received arp-response (0.0020s latency).
Not shown: 994 closed ports
Reason: 994 resets
PORT    STATE SERVICE REASON
22/tcp  open  ssh     syn-ack ttl 64
25/tcp  open  smtp    syn-ack ttl 64
80/tcp  open  http    syn-ack ttl 64
110/tcp open  pop3    syn-ack ttl 64
111/tcp open  rpcbind syn-ack ttl 64
143/tcp open  imap    syn-ack ttl 64
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.59 seconds

--reason フラグを指定すると、Nmap がシステムが稼働している、または特定のポートが開いていると結論づけた明確な理由が表示されます。上のコンソール出力では、Nmapが「arp-responseを受信した」ため、このシステムがオンラインと判断されたことがわかります。一方、Nmapが "syn-ack "パケットを受信して戻ってきたため、SSHポートが開いていると判断されたことがわかります。

より詳細な出力を得るには、-vで冗長な出力を、-vvでさらに冗長な出力が可能です。

Pentester Terminal
pentester@TryHackMe$ sudo nmap -sS -vv 10.10.252.27

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 10:41 BST
Initiating ARP Ping Scan at 10:41
Scanning 10.10.252.27 [1 port]
Completed ARP Ping Scan at 10:41, 0.22s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:41
Completed Parallel DNS resolution of 1 host. at 10:41, 0.00s elapsed
Initiating SYN Stealth Scan at 10:41
Scanning ip-10-10-252-27.eu-west-1.compute.internal (10.10.252.27) [1000 ports]
Discovered open port 22/tcp on 10.10.252.27
Discovered open port 25/tcp on 10.10.252.27
Discovered open port 80/tcp on 10.10.252.27
Discovered open port 110/tcp on 10.10.252.27
Discovered open port 111/tcp on 10.10.252.27
Discovered open port 143/tcp on 10.10.252.27
Completed SYN Stealth Scan at 10:41, 1.25s elapsed (1000 total ports)
Nmap scan report for ip-10-10-252-27.eu-west-1.compute.internal (10.10.252.27)
Host is up, received arp-response (0.0019s latency).
Scanned at 2021-08-30 10:41:02 BST for 1s
Not shown: 994 closed ports
Reason: 994 resets
PORT    STATE SERVICE REASON
22/tcp  open  ssh     syn-ack ttl 64
25/tcp  open  smtp    syn-ack ttl 64
80/tcp  open  http    syn-ack ttl 64
110/tcp open  pop3    syn-ack ttl 64
111/tcp open  rpcbind syn-ack ttl 64
143/tcp open  imap    syn-ack ttl 64
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 1.59 seconds
           Raw packets sent: 1002 (44.072KB) | Rcvd: 1002 (40.092KB)

もし、-vvで満足できない場合は、-dでデバッグの詳細を、-ddでさらに詳細な情報を得ることができます。dを使えば、1画面を超える出力が得られます。

■question

Launch the AttackBox if you haven't done so already. After you make sure that you have terminated the VM from Task 4, start the VM for this task. Wait for it to load completely, then open the terminal on the AttackBox and use Nmap with nmap -sS -F --reason MACHINE_IP to scan the VM. What is the reason provided for the stated port(s) being open?(AttackBoxのターミナルを開き、Nmapをnmap -sS -F --reason MACHINE_IPで使用して、VMをスキャンします。指定されたポートが開いている理由は何ですか?)
syn-ack

Task 9  Summary

ここでは、次のようなスキャンの種類を扱いました。

Port Scan TypeExample Command
TCP Null Scansudo nmap -sN MACHINE_IP
TCP FIN Scansudo nmap -sF MACHINE_IP
TCP Xmas Scansudo nmap -sX MACHINE_IP
TCP Maimon Scansudo nmap -sM MACHINE_IP
TCP ACK Scansudo nmap -sA MACHINE_IP
TCP Window Scansudo nmap -sW MACHINE_IP
Custom TCP Scansudo nmap --scanflags URGACKPSHRSTSYNFIN MACHINE_IP
Spoofed Source IPsudo nmap -S SPOOFED_IP MACHINE_IP
Spoofed MAC Address--spoof-mac SPOOFED_MAC
Decoy Scannmap -D DECOY_IP,ME MACHINE_IP
Idle (Zombie) Scansudo nmap -sI ZOMBIE_IP MACHINE_IP
Fragment IP data into 8 bytes-f
Fragment IP data into 16 bytes-ff
オプション目的

--source-port PORT_NUM

specify source port number

--data-length NUM

append random data to reach given length
これらのスキャンタイプは、TCPフラグを予期せぬ方法で設定し、ポートに応答を促すことに依存しています。Null、FIN、Xmasスキャンは閉じたポートからの応答を、Maimon、ACK、Windowスキャンは開いたポートおよび閉じたポートからの応答を誘発します。

オプション目的
--reasonexplains how Nmap made its conclusion
-vverbose
-vvvery verbose
-ddebugging
-ddmore details for debugging

■question(無し)