ネットワークパケットスニッフィング

スニッフィングまたはネットワークパケットスニッフィングは、スニッフィングツールを使用して、特定のネットワークを通過するすべてのパケットを監視およびキャプチャするプロセスです。「電話線をタップ」して会話を知ることができる形です。とも呼ばれますwiretapping コンピュータネットワークに適用できます。

エンタープライズスイッチポートのセットが開いている場合、従業員の1人がネットワークのトラフィック全体を盗聴する可能性が非常に高くなります。同じ物理的な場所にいる人は誰でも、イーサネットケーブルを使用してネットワークに接続するか、そのネットワークにワイヤレスで接続して、トラフィック全体をスニッフィングできます。

つまり、スニッフィングを使用すると、保護されているトラフィックと保護されていないトラフィックの両方を含むあらゆる種類のトラフィックを確認できます。適切な条件で適切なプロトコルを使用すると、攻撃側は、さらなる攻撃に使用したり、ネットワークやシステムの所有者に他の問題を引き起こしたりする可能性のある情報を収集できる可能性があります。

何を盗聴できますか?

ネットワークから次の機密情報を盗聴することができます-

  • メールトラフィック
  • FTPパスワード
  • Webトラフィック
  • Telnetパスワード
  • ルーター構成
  • チャットセッション
  • DNSトラフィック

スニッフィングはどのように機能しますか?

スニファは通常、システムのNICを無差別モードに切り替えて、そのセグメントで送信されるすべてのデータをリッスンします。

プロミスキャスモードとは、イーサネットハードウェア、特にネットワークインターフェイスカード(NIC)の独自の方法を指します。これにより、NICは、このNICにアドレス指定されていなくても、ネットワーク上のすべてのトラフィックを受信できます。デフォルトでは、NICは、アドレス指定されていないすべてのトラフィックを無視します。これは、イーサネットパケットの宛先アドレスをデバイスのハードウェアアドレス(MAC)と比較することによって行われます。これはネットワーキングには完全に理にかなっていますが、無差別モードでは、接続の問題やトラフィックアカウンティングを診断するためにネットワーク監視および分析ソフトウェアを使用することは困難です。

スニファは、データパケットにカプセル化された情報をデコードすることにより、NICを介してコンピュータへのすべてのトラフィックを継続的に監視できます。

スニッフィングの種類

スニッフィングは、本質的にアクティブまたはパッシブのいずれかになります。次に、さまざまなタイプのスニッフィングについて学習します。

パッシブスニッフィング

パッシブスニッフィングでは、トラフィックはロックされますが、変更されることはありません。パッシブスニッフィングでは、リスニングのみが可能です。ハブデバイスで動作します。ハブデバイスでは、トラフィックはすべてのポートに送信されます。ハブを使用してシステムを接続するネットワークでは、ネットワーク上のすべてのホストがトラフィックを確認できます。したがって、攻撃者は通過するトラフィックを簡単にキャプチャできます。

幸いなことに、ハブは最近ほとんど時代遅れになっています。最近のほとんどのネットワークはスイッチを使用しています。したがって、パッシブスニッフィングはもはや効果的ではありません。

アクティブスニッフィング

アクティブスニッフィングでは、トラフィックはロックおよび監視されるだけでなく、攻撃によって決定されるように何らかの方法で変更される可能性があります。アクティブスニッフィングは、スイッチベースのネットワークをスニッフィングするために使用されます。これには、アドレス解決パケット(ARP)をターゲットネットワークに挿入して、スイッチの連想メモリ(CAM)テーブルにフラッディングすることが含まれます。CAMは、どのホストがどのポートに接続されているかを追跡します。

以下はアクティブスニッフィングテクニックです-

  • MACフラッディング
  • DHCP攻撃
  • DNSポイズニング
  • なりすまし攻撃
  • ARPポイズニング

プロトコルに対するスニッフィングの影響

などのプロトコル tried and true TCP/IPセキュリティを念頭に置いて設計されたことはありません。このようなプロトコルは、潜在的な侵入者に対してあまり抵抗力を提供しません。以下は、簡単にスニッフィングするのに役立つさまざまなプロトコルです。

HTTP

これは、暗号化せずにクリアテキストで情報を送信するために使用されるため、実際のターゲットになります。

SMTP(シンプルメール転送プロトコル)

SMTPは電子メールの転送に利用されます。このプロトコルは効率的ですが、スニッフィングに対する保護は含まれていません。

NNTP(ネットワークニュース転送プロトコル)

あらゆる種類の通信に使用されます。これの主な欠点は、データやパスワードでさえもクリアテキストとしてネットワーク経由で送信されることです。

POP(ポストオフィスプロトコル)

POPは、サーバーからの電子メールの受信に厳密に使用されます。このプロトコルには、トラップされる可能性があるため、スニッフィングに対する保護は含まれていません。

FTP(ファイル転送プロトコル)

FTPはファイルの送受信に使用されますが、セキュリティ機能は提供していません。すべてのデータは、簡単に盗聴できるクリアテキストとして送信されます。

IMAP(インターネットメッセージアクセスプロトコル)

IMAPは、その機能がSMTPと同じですが、スニッフィングに対して非常に脆弱です。

Telnet

Telnetは、すべて(ユーザー名、パスワード、キーストローク)をクリアテキストとしてネットワーク経由で送信するため、簡単に盗聴できます。

スニファは、ライブトラフィックのみを表示できるダムユーティリティではありません。本当に各パケットを分析したい場合は、キャプチャを保存して、時間の許す限り確認してください。

Pythonを使用した実装

rawソケットスニファを実装する前に、 struct 以下に説明する方法-

struct.pack(fmt、a1、a2、…)

名前が示すように、このメソッドは、指定された形式に従ってパックされた文字列を返すために使用されます。文字列には、値a1、a2などが含まれます。

struct.unpack(fmt、string)

名前が示すように、このメソッドは指定された形式に従って文字列を解凍します。

次のrawソケットスニファIPヘッダーの例では、パケットの次の20バイトであり、これらの20バイトのうち最後の8バイトに関心があります。後者のバイトは、送信元と宛先のIPアドレスが解析されているかどうかを示します-

ここで、次のようにいくつかの基本モジュールをインポートする必要があります-

import socket
import struct
import binascii

次に、3つのパラメーターを持つソケットを作成します。最初のパラメーターは、パケットインターフェイスについて教えてくれます— Linux固有の場合はPF_PACKET、Windowsの場合はAF_INET。2番目のパラメーターはそれがrawソケットであることを示し、3番目のパラメーターはIPプロトコルに使用される-0x0800に関心のあるプロトコルについて示します。

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))

今、私たちは呼び出す必要があります recvfrom() パケットを受信する方法。

while True:
   packet = s.recvfrom(2048)

次のコード行では、イーサネットヘッダーをリッピングしています-

ethernet_header = packet[0][0:14]

次のコード行で、ヘッダーを解析して解凍しています。 struct 方法−

eth_header = struct.unpack("!6s6s2s", ethernet_header)

次のコード行は、次のように変換された3つの16進値を持つタプルを返します。 hexify の中に binascii モジュール-

print "Destination MAC:" + binascii.hexlify(eth_header[0]) + " Source MAC:" + binascii.hexlify(eth_header[1]) + " Type:" + binascii.hexlify(eth_header[2])

これで、次のコード行を実行してIPヘッダーを取得できます-

ipheader = pkt[0][14:34]
ip_header = struct.unpack("!12s4s4s", ipheader)
print "Source IP:" + socket.inet_ntoa(ip_header[1]) + " Destination IP:" + socket.inet_ntoa(ip_header[2])

同様に、TCPヘッダーを解析することもできます。