【pythonでリアルタイムパケット分析】pyshark LiveCapture()の使い方
先日投稿した記事(【PYTHONでパケットを分析できる】PYSHARKの基本的な使い方をご紹介)が、大変好評をいただいておりまして今回もpythonでパケットをキャプチャ、分析できるpysharkネタでいきたいと思います。
読者の皆様の分りみが深くなるように、平文でユーザーIDとパスワードやりとりするtelnetを例にpysharkでリアルタイムでパケット分析したいと思います。
今回の検証イメージは、以下の図の通りです。
ubuntu18.04 LTSにtelnetdをインストールし、クライアントはteratermでtelnet接続をします。
サーバー側で、pytharkを起動しリアルタイムでtelnetのユーザー名とパスワードを抜き取りましょうといった検証をしてみます。
pytharkのインストールは、先に説明した前回記事をご参照ください。
今回サーバー側に仕込むコードは、以下の通りです。
import pyshark
cap = pyshark.LiveCapture ('br0', bpf_filter='tcp port 23')
for pkt in cap:
if 'TELNET' in pkt:
try:
out = pkt.telnet
if 'Username' in str(out):
print('ユーザー名:')
elif 'Password' in str(out):
print('パスワード:')
if pkt.telnet.data:
print(out)
except:
pass
ここでポイントなのは、
cap = pyshark.LiveCapture ('br0', bpf_filter='tcp port 23')
の一行で、LiveCapture()の第一引数に、インターフェイス名、第二引数にBPFフィルタの設定をしています。
上記例では、インターフェイス br0をパケットキャプチャ対象とし、tcp 23(telnet)だけをキャプチャ対象にしているといった設定となります。
これを、pyshark_telnet.pyなどとして保存し、サーバー側で実行します。
$ sudo python3 pyshark_telnet.py
これで準備はできました。
クライアント側からtelnet接続をすると….
接続した瞬間に以下のような標準出力が表示されます。
$ sudo python3 pyshark_telnet.py
Layer TELNET:
Data: Ubuntu 18.04.5 LTS\r\n
Layer TELNET:
Data: apu4 login:
次に、クライアント側でユーザー名を入力してみてください。
Layer TELNET:
Data: apu4 login:
Layer TELNET:
Data: x
Layer TELNET:
Data: x
Layer TELNET:
Data: x
Layer TELNET:
Data: x
Layer TELNET:
Data: x
Layer TELNET:
Data:
Layer TELNET:
Data: x
Layer TELNET:
Data: x
Data: に続き、入力したユーザー名の文字列が表示されていきます。
パスワードに平文で表示されます。
pysharkのLiveCapture()を使えば、リアルタイムでパケット解析が実現できるといったイメージがついたのではないでしょうか。
Let’s Enjoy Packet Capture!!
最新記事 by 伊集院 (全て見る)
- 【暗号化通信(TLS)を復元できる】WIRESHARK達人への道 第二十五歩 暗号化通信(TLS)を復号する方法 - 1月 1, 2023
- 【詳細版】NSM(ネットワークセキュリティモニタ)、Zeekとは? - 9月 1, 2022
- 【簡易版】OSSネットワークセキュリティモニタZeekとは? - 8月 26, 2022