Python-penetration-testing-network-packet-sniffing
ネットワークパケットスニッフィング
スニッフィングまたはネットワークパケットスニッフィングは、スニッフィングツールを使用して、特定のネットワークを通過するすべてのパケットを監視およびキャプチャするプロセスです。 これは、「電話線をタップ」して会話を知ることができる形式です。 *盗聴*とも呼ばれ、コンピューターネットワークに適用できます。
エンタープライズスイッチポートのセットが開いていると、従業員の1人がネットワークのトラフィック全体を傍受できる可能性が非常に高くなります。 物理的に同じ場所にいる人なら誰でも、イーサネットケーブルを使用してネットワークに接続したり、そのネットワークにワイヤレスで接続して、トラフィック全体を盗聴したりできます。
つまり、スニッフィングを使用すると、保護されているトラフィックと保護されていないトラフィックの両方を見ることができます。 適切な条件で適切なプロトコルを使用すると、攻撃者は、さらなる攻撃に使用できる情報を収集したり、ネットワークまたはシステムの所有者に他の問題を引き起こす可能性があります。
何を盗聴できますか?
ネットワークから次の機密情報を盗聴できます-
- メールトラフィック
- FTPパスワード
- Webトラフィック
- Telnetパスワード
- ルーターの構成
- チャットセッション
- DNSトラフィック
スニッフィングはどのように機能しますか?
スニッファーは通常、システムのNICを無差別モードに切り替えて、そのセグメントで送信されるすべてのデータをリッスンします。
プロミスキャスモードは、イーサネットハードウェア、特にネットワークインターフェイスカード(NIC)のユニークな方法を指します。これにより、NICは、このNICにアドレス指定されていなくても、ネットワーク上のすべてのトラフィックを受信できます。 デフォルトでは、NICは、アドレス指定されていないすべてのトラフィックを無視します。これは、イーサネットパケットの宛先アドレスをデバイスのハードウェアアドレス(MAC)と比較することにより行われます。 これはネットワーキングには完全に理にかなっていますが、非混合モードでは、ネットワークの監視および分析ソフトウェアを使用して接続の問題またはトラフィックアカウンティングを診断することは困難です。
スニファーは、データパケットにカプセル化された情報をデコードすることにより、NICを介してコンピューターへのすべてのトラフィックを継続的に監視できます。
スニッフィングの種類
スニッフィングは、本質的にアクティブまたはパッシブのいずれかです。 次に、さまざまな種類のスニッフィングについて学習します。
受動スニッフィング
パッシブスニッフィングでは、トラフィックはロックされますが、いかなる方法でも変更されません。 パッシブスニッフィングでは、リスニングのみが許可されます。 ハブデバイスで動作します。 ハブデバイスでは、トラフィックはすべてのポートに送信されます。 ハブを使用してシステムを接続するネットワークでは、ネットワーク上のすべてのホストがトラフィックを見ることができます。 したがって、攻撃者は通過するトラフィックを簡単にキャプチャできます。
幸いなことに、最近ではハブはほとんど使用されなくなっています。 最新のネットワークのほとんどはスイッチを使用しています。 したがって、受動的スニッフィングはもはや効果的ではありません。
アクティブスニッフィング
アクティブスニッフィングでは、トラフィックはロックおよび監視されるだけでなく、攻撃によって決定される何らかの方法で変更される可能性があります。 アクティブスニッフィングは、スイッチベースのネットワークのスニッフィングに使用されます。 これには、アドレス解決パケット(ARP)をターゲットネットワークに注入して、スイッチのContent Addressable Memory(CAM)テーブルをフラッディングすることが含まれます。 CAMは、どのホストがどのポートに接続されているかを追跡します。
アクティブスニッフィングテクニックは次のとおりです-
- MACフラッディング
- DHCP攻撃
- DNSポイズニング
- なりすまし攻撃
- ARP中毒
プロトコルに対するスニッフィング効果
- 試行済みの真のTCP/IP *などのプロトコルは、セキュリティを考慮して設計されたことはありません。 そのようなプロトコルは、潜在的な侵入者に対してあまり抵抗しません。 以下は、簡単なスニッフィングに役立つさまざまなプロトコルです-
HTTP
暗号化せずにクリアテキストで情報を送信するために使用されるため、実際のターゲットになります。
SMTP(簡易メール転送プロトコル)
SMTPは電子メールの転送に使用されます。 このプロトコルは効率的ですが、スニッフィングに対する保護は含まれていません。
NNTP(ネットワークニュース転送プロトコル)
すべてのタイプの通信に使用されます。 これの大きな欠点は、データとパスワードさえもクリアテキストとしてネットワーク経由で送信されることです。
POP(郵便局プロトコル)
POPは、サーバーからメールを受信するために厳密に使用されます。 このプロトコルにはトラップされる可能性があるため、スニッフィングに対する保護は含まれていません。
FTP(ファイル転送プロトコル)
FTPはファイルの送受信に使用されますが、セキュリティ機能は提供しません。 すべてのデータは、簡単に盗聴できるクリアテキストとして送信されます。
IMAP(インターネットメッセージアクセスプロトコル)
IMAPの機能はSMTPと同じですが、スニッフィングに対して非常に脆弱です。
Telnet
Telnetはすべて(ユーザー名、パスワード、キーストローク)をクリアテキストとしてネットワーク経由で送信するため、簡単に盗聴できます。
スニファーは、ライブトラフィックのみを表示できるダムユーティリティではありません。 各パケットを本当に分析したい場合は、キャプチャを保存し、時間が許す限りそれを確認してください。
Pythonを使用した実装
生のソケットスニファーを実装する前に、以下に説明するように struct メソッドを理解しましょう-
struct.pack(fmt、a1、a2、…)
名前が示すように、このメソッドは、指定された形式に従ってパックされた文字列を返すために使用されます。 文字列には、値a1、a2などが含まれます。
struct.unpack(fmt、string)
名前が示すように、このメソッドは指定された形式に従って文字列を展開します。
パケットの次の20バイトである未加工のソケットスニッファーIPヘッダーの次の例では、これらの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)
次のコード行は、 binascii モジュールの hexify によって変換された3つの16進値を持つタプルを返します-
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ヘッダーも解析できます。