Python-penetration-testing-primer-on-network-communication

提供:Dev Guides
移動先:案内検索

ネットワーク通信の入門書

侵入テストを実行するために、ペンテスターはIPアドレス、クラスフルサブネット化、クラスレスサブネット化、ポート、ブロードキャストネットワークなどの基本的なネットワークの概念を認識する必要があることを常に聞いています。 一番最初の理由は、承認された範囲内にあるホストや、ホストがオープンで応答するサービス、ポート、機能などのアクティビティによって、評価者が侵入テストで実行するアクティビティの種類が決まるためです。 環境は変化し続け、システムはしばしば再割り当てされます。 したがって、古い脆弱性が再び発生する可能性が高く、ネットワークのスキャンに関する十分な知識がなければ、最初のスキャンをやり直す必要が生じる可能性があります。 以降のセクションでは、ネットワーク通信の基本について説明します。

参照モデル

参照モデルは標準化の手段を提供します。これは、コンピューターネットワークを使用する人々が広い物理範囲に位置しており、ネットワークデバイスのアーキテクチャが異なる可能性があるため、世界中で受け入れられています。 異種デバイス間の通信を提供するには、標準化されたモデル、つまりこれらのデバイスが通信できる方法を提供する参照モデルが必要です。

OSIモデルやTCP/IP参照モデルなど、2つの参照モデルがあります。 ただし、OSIモデルは仮想モデルですが、TCP/IPは実用的なモデルです。

OSIモデル

Open System Interfaceは、国際標準化機構(ISO)によって設計されたため、ISO-OSIモデルとも呼ばれます。

OSIモデルは、次の図に示すように7つの層で構成されています。 各層には特定の機能がありますが、各層は上の層にサービスを提供します。

OSIモデル

物理層

物理層は、次のアクティビティを担当しています-

  • 物理接続のアクティブ化、メンテナンス、および非アクティブ化。
  • 送信に必要な電圧とデータレートの定義。
  • デジタルビットを電気信号に変換します。
  • 接続がシンプレックス、半二重、または全二重のいずれであるかを決定します。

データリンク層

データリンク層は、次の機能を実行します-

  • 物理リンクを介して送信される情報の同期およびエラー制御を実行します。
  • エラー検出を有効にし、送信するデータにエラー検出ビットを追加します。

ネットワーク層

ネットワーク層は、次の機能を実行します-

  • 信号をさまざまなチャネルを介してもう一方の端にルーティングします。
  • どのルートデータを使用するかを決定することにより、ネットワークコントローラーとして機能します。
  • 送信メッセージをパケットに分割し、受信パケットを高レベルのメッセージに組み立てます。

トランスポート層

トランスポート層は、次の機能を実行します-

  • データ送信をパラレルパスで行うかシングルパスで行うかを決定します。
  • データの多重化、分割を実行します。
  • データ層がより小さな単位に分割されるため、ネットワーク層でより効率的に処理されます。

トランスポート層は、一端から他端へのデータの送信を保証します。

セッション層

セッション層は、次の機能を実行します-

  • メッセージを管理し、2つの異なるアプリケーション間の会話を同期します。
  • ログオンとログオフ、ユーザー識別、請求、セッション管理を制御します。

プレゼンテーション層

プレゼンテーション層は、次の機能を実行します-

  • この層は、受信システムがそれを理解して使用するような形式で情報が配信されることを保証します。

アプリケーション層

アプリケーション層は、次の機能を実行します-

  • さまざまな方法での情報の操作、情報ファイルの再転送、結果の配信など、さまざまなサービスを提供します。
  • LOGINやパスワードチェックなどの機能も、アプリケーション層によって実行されます。

TCP/IPモデル

伝送制御プロトコルおよびインターネットプロトコル(TCP/IP)モデルは実用的なモデルであり、インターネットで使用されています。

TCP/IPモデルは、2つの層(物理層とデータリンク層)を1つの層(ホストからネットワークへの層)に結合します。 次の図は、TCP/IPモデルのさまざまな層を示しています-

TCP/IPモデル

アプリケーション層

この層はOSIモデルと同じであり、次の機能を実行します-

  • さまざまな方法での情報の操作、情報ファイルの再転送、結果の配信など、さまざまなサービスを提供します。
  • アプリケーション層は、ログインやパスワードチェックなどの機能も実行します。
  • 以下は、アプリケーション層で使用されるさまざまなプロトコルです-
  • TELNET
  • FTP
  • SMTP
  • DN
  • HTTP
  • NNTP

トランスポート層

OSIモデルのトランスポート層と同じ機能を実行します。 トランスポート層に関連する次の重要な点を考慮してください-

  • エンドツーエンドの伝送にTCPおよびUDPプロトコルを使用します。
  • TCPは、信頼性の高い接続指向のプロトコルです。
  • TCPはフロー制御も処理します。
  • UDPは信頼性が低く、接続の少ないプロトコルはフロー制御を実行しません。
  • この層では、TCP/IPおよびUDPプロトコルが採用されています。

インターネット層

この層の機能は、ホストがパケットをネットワークに挿入できるようにすることです。そして、パケットを独立して宛先に移動させます。 ただし、パケットを受信する順序は、送信された順序とは異なる場合があります。

インターネット層でインターネットプロトコル(IP)が採用されています。

ホストからネットワーク層

これは、TCP/IPモデルの最下層です。 ホストは、IPパケットを送信できるように、何らかのプロトコルを使用してネットワークに接続する必要があります。 このプロトコルは、ホストごと、ネットワークごとに異なります。

この層で使用される異なるプロトコルは-

  • アルパネット
  • SATNET
  • LAN
  • パケットラジオ

便利なアーキテクチャ

以下は、ネットワーク通信で使用されるいくつかの便利なアーキテクチャです-

イーサネットフレームアーキテクチャ

Robert Metcalfeというエンジニアは、1973年にIEEE標準802.3で定義されたイーサネットネットワークを最初に発明しました。 ワークステーションとプリンター間でデータを相互接続して送信するために最初に使用されました。 LANの80%以上が、速度、低コスト、および設置の容易さのためにイーサネット標準を使用しています。 一方、フレームについて話すと、データはホストからホストへと移動します。 フレームは、MACアドレス、IPヘッダー、開始および終了デリミターなどのさまざまなコンポーネントで構成されます。

イーサネットフレームは、プリアンブルとSFDで始まります。 イーサネットヘッダーにはソースMACアドレスと宛先MACアドレスの両方が含まれ、その後にフレームのペイロードが存在します。 最後のフィールドはCRCで、エラーの検出に使用されます。 基本的なイーサネットフレーム構造は、IEEE 802.3規格で定義されています。

イーサネット(IEEE 802.3)フレーム形式

イーサネットパケットは、ペイロードとしてイーサネットフレームを転送します。 以下は、各フィールドの説明と一緒にイーサネットフレームのグラフィカルな表現です-

Field Name Preamble SFD(Start of frame delimiter) Destination MAC Source MAC Type Data CRC
Size(in bytes) 7 1 6 6 2 46-1500 4

前文

イーサネットフレームの前には7バイトのサイズのプリアンブルがあり、フレームが開始していることを受信側システムに通知し、送信側と受信側がビット同期を確立できるようにします。

SFD(フレーム区切りの開始)

これは、宛先MACアドレスフィールドが次のバイトで始まることを示すために使用される1バイトのフィールドです。 SFDフィールドはプリアンブルの一部と見なされる場合があります。 そのため、多くの場所でプリアンブルが8バイトと見なされます。

  • *宛先MAC *-これは6バイトのフィールドで、受信システムのアドレスがあります。
  • *送信元MAC *-これは6バイトのフィールドで、送信システムのアドレスがあります。
  • タイプ-フレーム内のプロトコルのタイプを定義します。 たとえば、IPv4またはIPv6。 サイズは2バイトです。
  • データ-これはペイロードとも呼ばれ、実際のデータがここに挿入されます。 その長さは46〜1500バイトでなければなりません。 長さが46バイト未満の場合、可能な最小長、つまり46を満たすために0のパディングが追加されます。
  • * CRC(巡回冗長検査)*-これは32ビットCRCを含む4バイトのフィールドであり、破損したデータの検出を可能にします。

拡張イーサネットフレーム(イーサネットIIフレーム)フォーマット

以下は、1500バイトを超えるペイロードを取得できる拡張イーサネットフレームのグラフィック表示です-

Field Name Destination MAC Source MAC Type DSAP SSAP Ctrl Data CRC
Size(in bytes) 6 6 2 1 1 1 >46 4

IEEE 802.3イーサネットフレームとは異なるフィールドの説明は、次のとおりです-

DSAP(宛先サービスアクセスポイント)

DSAPは、メッセージを受信することを目的としたネットワーク層エンティティの論理アドレスを表す1バイトの長いフィールドです。

SSAP(ソースサービスアクセスポイント)

SSAPは、メッセージを作成したネットワーク層エンティティの論理アドレスを表す1バイトの長いフィールドです。

Ctrl

これは1バイトの制御フィールドです。

IPパケットアーキテクチャ

インターネットプロトコルは、TCP/IPプロトコルスイートの主要なプロトコルの1つです。 このプロトコルは、OSIモデルのネットワーク層およびTCP/IPモデルのインターネット層で機能します。 したがって、このプロトコルには、論理アドレスに基づいてホストを識別し、基盤となるネットワークを介してホスト間でデータをルーティングする責任があります。 IPは、IPアドレッシングスキームによってホストを一意に識別するメカニズムを提供します。 IPはベストエフォート配信を使用します。つまり、パケットが宛先ホストに配信されることを保証しませんが、宛先に到達するために最善を尽くします。

以降のセクションでは、IPの2つの異なるバージョンについて学習します。

IPv4

これは、32ビット論理アドレスを使用するインターネットプロトコルバージョン4です。 以下は、フィールドの説明とともにIPv4ヘッダーの図です-

IPv4

バージョン

これは、使用されているインターネットプロトコルのバージョンです。たとえば、IPv4。

IHL

インターネットヘッダーの長さ。 IPヘッダー全体の長さ。

DSCP

差別化サービスコードポイント。これはサービスの種類です。

ECN

明示的な輻輳通知。ルートで見られる混雑に関する情報を伝達します。

全長

IPパケット全体の長さ(IPヘッダーとIPペイロードを含む)。

識別

送信中にIPパケットがフラグメント化された場合、すべてのフラグメントには同じ識別番号が含まれます。

フラグ

ネットワークリソースの要求に応じて、IPパケットが大きすぎて処理できない場合、これらの「フラグ」は断片化できるかどうかを示します。 この3ビットフラグでは、MSBは常に「0」に設定されます。

フラグメントオフセット

このオフセットは、元のIPパケット内のフラグメントの正確な位置を示します。

有効期間

ネットワークでのループを回避するために、すべてのパケットはTTL値が設定されて送信されます。これにより、このパケットが通過できるルーター(ホップ)の数がネットワークに通知されます。 各ホップで、その値は1ずつ減少し、値がゼロに達すると、パケットは破棄されます。

プロトコル

宛先ホストのネットワーク層に、このパケットが属するプロトコル、つまり次のレベルのプロトコルを伝えます。 たとえば、ICMPのプロトコル番号は1、TCPは6、UDPは17です。

ヘッダーチェックサム

このフィールドは、ヘッダー全体のチェックサム値を保持するために使用され、パケットがエラーなしで受信されたかどうかを確認するために使用されます。

送信元アドレス

パケットの送信者(または送信元)の32ビットアドレス。

宛先住所

パケットの受信者(または宛先)の32ビットアドレス。

オプション

これはオプションのフィールドで、IHLの値が5より大きい場合に使用されます。 これらのオプションには、セキュリティ、ルートの記録、タイムスタンプなどのオプションの値が含まれる場合があります。

IPv4の詳細については、こちらのリンクを参照してください-link:/ipv4/index [www.finddevguides.com/ipv4/index]

IPv6

インターネットプロトコルバージョン6は最新の通信プロトコルであり、その前身であるIPv4はネットワーク層(レイヤー3)で動作します。 膨大な量の論理アドレス空間の提供に加えて、このプロトコルには十分な機能があり、IPv4の欠点に対処しています。 以下は、フィールドの説明とともにIPv4ヘッダーの図です-

IPv6

バージョン(4ビット)

インターネットプロトコルのバージョンを表します— 0110。

トラフィッククラス(8ビット)

これらの8ビットは2つの部分に分かれています。 最上位の6ビットは、サービスの種類に使用され、このパケットに提供されるサービスをルーターに知らせます。 最下位2ビットは、明示的輻輳通知(ECN)に使用されます。

フローラベル(20ビット)

このラベルは、通信に属するパケットのシーケンシャルフローを維持するために使用されます。 ソースはシーケンスにラベルを付け、特定のパケットが特定の情報フローに属していることをルーターが識別できるようにします。 このフィールドは、データパケットの並べ替えを回避するのに役立ちます。 ストリーミング/リアルタイムメディア用に設計されています。

ペイロード長(16ビット)

このフィールドは、特定のパケットのペイロードに含まれる情報量をルーターに伝えるために使用されます。 ペイロードは、拡張ヘッダーと上位層データで構成されます。 16ビットでは、最大65535バイトを指定できます。ただし、拡張ヘッダーにホップバイホップ拡張ヘッダーが含まれている場合、ペイロードは65535バイトを超えることがあり、このフィールドは0に設定されます。

次のヘッダー(8ビット)

このフィールドは、拡張ヘッダーのタイプを示すために使用されるか、拡張ヘッダーが存在しない場合は上位層PDUを示します。 上位層PDUのタイプの値は、IPv4のものと同じです。

ホップ制限(8ビット)

このフィールドは、パケットを停止してネットワーク内で無限にループするために使用されます。 これは、IPv4のTTLと同じです。 ホップ制限フィールドの値は、リンク(ルーター/ホップ)を通過するときに1ずつ減少します。 フィールドが0に達すると、パケットは破棄されます。

送信元アドレス(128ビット)

このフィールドは、パケットの発信者のアドレスを示します。

宛先アドレス(128ビット)

このフィールドは、パケットの対象受信者のアドレスを提供します。

IPv6の詳細については、こちらのリンクを参照してください— link:/ipv6/index [www.finddevguides.com/ipv6/index]

TCP(伝送制御プロトコル)ヘッダーアーキテクチャ

TCPは接続指向のプロトコルであり、通信を開始する前に2つのシステム間でセッションが確立されることがわかっています。 通信が完了すると、接続が閉じられます。 TCPは、3つの方法のハンドシェイク技術を使用して、2つのシステム間の接続ソケットを確立します。 スリーウェイハンドシェイクとは、2つのシステム間でSYN、SYN-ACK、ACKの3つのメッセージが送受信されることを意味します。 2つのシステム、開始およびターゲットシステム間で作業する手順は次のとおりです-

ステップ1-SYNフラグが設定されたパケット

まず、接続を開始しようとしているシステムは、SYNフラグが設定されたパケットで開始します。

ステップ2-SYN-ACKフラグが設定されたパケット

現在、このステップでは、ターゲットシステムはSYNフラグとACKフラグが設定されたパケットを返します。

ステップ3-ACKフラグが設定されたパケット

最後に、開始システムは、ACKフラグが設定された元のターゲットシステムにパケットを返します。

以下は、TCPヘッダーの図とフィールドの説明です-

ACKフラグが設定されたTCPパケット

送信元ポート(16ビット)

送信デバイス上のアプリケーションプロセスのソースポートを識別します。

宛先ポート(16ビット)

受信デバイスのアプリケーションプロセスの宛先ポートを識別します。

シーケンス番号(32ビット)

セッション内のセグメントのデータバイトのシーケンス番号。

確認番号(32ビット)

ACKフラグが設定されている場合、この番号には予想されるデータバイトの次のシーケンス番号が含まれ、受信した以前のデータの確認応答として機能します。

データオフセット(4ビット)

このフィールドは、TCPヘッダーのサイズ(32ビットワード)と、TCPセグメント全体の現在のパケットのデータのオフセットの両方を意味します。

予約済み(3ビット)

将来の使用のために予約されており、デフォルトでゼロに設定されています。

フラグ(各1ビット)

*NS* -明示的な輻輳通知シグナリングプロセスは、このNonce Sumビットを使用します。
*CWR* -ホストがECEビットが設定されたパケットを受信すると、ECEが受信されたことを確認するためにCongestion Windows Reducedを設定します。
*ECE* -2つの意味があります-
  • SYNビットが0にクリアされている場合、ECEは、IPパケットにCE(輻輳エクスペリエンス)ビットが設定されていることを意味します。

  • SYNビットが1に設定されている場合、ECEはデバイスがECT対応であることを意味します。

    *URG* -緊急ポインタフィールドに重要なデータがあり、処理する必要があることを示します。
    *ACK* -確認フィールドに重要性があることを示します。 ACKが0にクリアされている場合、パケットに確認応答が含まれていないことを示します。
    *PSH* -設定されている場合、受信ステーションへの要求であり、データをバッファリングせずに受信アプリケーションにプッシュします(データが到着するとすぐに)。
    *RST* -リセットフラグには次の機能があります-
  • 着信接続を拒否するために使用されます。

  • セグメントを拒否するために使用されます。

  • 接続を再開するために使用されます。

    *SYN* -このフラグは、ホスト間の接続を設定するために使用されます。
    *FIN* -このフラグは接続を解除するために使用され、それ以降はデータは交換されません。 SYNおよびFINフラグを持つパケットにはシーケンス番号があるため、正しい順序で処理されます。

Windowsサイズ

このフィールドは、2つのステーション間のフロー制御に使用され、レシーバーがセグメントに割り当てたバッファーの量(バイト単位)、つまりレシーバーが予想するデータ量を示します。

  • チェックサム-このフィールドには、ヘッダー、データ、および疑似ヘッダーのチェックサムが含まれます。
  • 緊急ポインタ-URGフラグが1に設定されている場合、緊急データバイトを指します。
  • オプション-追加オプションを容易にしますが、通常のヘッダーではカバーされません。 オプションフィールドは常に32ビットワードで記述されます。 このフィールドに32ビット未満のデータが含まれる場合、32ビット境界に達するまで残りのビットをカバーするためにパディングが使用されます。

TCPについて詳しく知りたい場合は、このリンクを参照してください— link:/data_communication_computer_network/transmission_control_protocol [https://www.finddevguides.com/data_communication_computer_network/transmission_control_protocol]

UDP(ユーザーデータグラムプロトコル)ヘッダーアーキテクチャ

UDPは、接続指向のプロトコルであるTCPとは異なり、単純なコネクションレスプロトコルです。 最小限の通信メカニズムが含まれます。 UDPでは、受信者は受信したパケットの確認応答を生成せず、送信者は送信されたパケットの確認応答を待機しません。 この欠点により、このプロトコルは信頼性が低くなり、処理が容易になります。 以下は、フィールドの説明と一緒にUDPヘッダーの図です-

UPD

送信元ポート

この16ビットの情報は、パケットの送信元ポートを識別するために使用されます。

宛先ポート

この16ビットの情報は、宛先マシン上のアプリケーションレベルのサービスを識別するために使用されます。

長さ

長さフィールドは、UDPパケットの全長(ヘッダーを含む)を指定します。 これは16ビットのフィールドであり、最小値は8バイト、つまりUDPヘッダー自体のサイズです。

チェックサム

このフィールドには、送信前に送信者が生成したチェックサム値が格納されます。 IPv4にはこのフィールドがオプションであるため、チェックサムフィールドに値が含まれていない場合は0になり、そのビットはすべてゼロに設定されます。

TCPの詳細については、こちらのリンクを参照してください— link:/data_communication_computer_network/user_datagram_protocol [User Datagram Protocol]