これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド ssldump です。
プログラム:
NAME
ssldump - ネットワーク上の SSL トラフィックをダンプします
SYNOPSIS
ssldump [ -vTshVq -aAdeHnNqTxXvy ] [ -i インタフェース ]
[ -k キーファイル ] [ -p password ] [ -r ダンプファイル ]
[ -S [クリプト|d|ht|H|ンロフ]] [ 表現 ]
DESCRIPTION
ssldump SSL/TLS ネットワーク プロトコル アナライザーです。 上の TCP 接続を識別します。
選択されたネットワーク インターフェイスを選択し、それらを SSL/TLS トラフィックとして解釈しようとします。 それがいつ
SSL/TLS トラフィックを識別し、レコードをデコードしてテキスト形式で表示します。
標準出力。 適切な鍵マテリアルが提供されている場合は、暗号化も解除されます。
接続を確認し、アプリケーションのデータ トラフィックを表示します。
ssldump は、FreeBSD、Linux、Solaris、および HP/UX でテストされています。 PCAPベースなので、
ほとんどのプラットフォームで動作するはずです。 ただし、tcpdump とは異なり、ssldump は
データ送信の両側で行われるため、ネットワークタップで使用すると問題が発生する可能性があります
SunOS nit など、送信されたデータの表示を許可しないもの。 SunOSの 寄生虫の卵 or
血圧: 走る tcpdump への読み取りアクセス権が必要です /dev/nit or / dev / bpf *. ソラリス
dlpi: ネットワーク疑似デバイスへの読み取りアクセスが必要です。たとえば、 /dev/le.
HP-UX dlpi: root であるか、setuid を root にインストールする必要があります。 IRIX
詮索: root であるか、setuid を root にインストールする必要があります。 Linux: あなたがでなければなりません
root であるか、setuid を root にインストールする必要があります。 ウルトリックス デジタル UNIX: 一度
スーパーユーザーは、次を使用して無差別モード操作を有効にしました pfconfig(8)、どのユーザーも実行できます
ssldump BSD: への読み取りアクセス権が必要です / dev / bpf *.
OPTIONS
-a ベア TCP ACK を出力します (Nagle の動作を観察するのに役立ちます)
-A すべてのレコードフィールドを印刷します (デフォルトでは、ssldump は最も興味深いフィールドを選択します)
-d アプリケーションのデータトラフィックを表示します。 これは通常、復号化することを意味しますが、-d の場合
ssldump が使用され、アプリケーション データ トラフィックもデコードされます SSLセッション
を開始します。 これにより、HTTPS CONNECT の動作と SMTP STARTTLS を確認できるようになります。
副作用として、ssldump は平文がトラフィックであるかどうかを識別できないため、
SSL 接続または通常の TCP 接続の開始により、
ssldump を使用して TCP 接続を傍受します。 ssldump が自動的に検出します
ASCII データを取得して画面に直接表示します。 非 ASCII データは次のように表示されます。
XNUMX進ダンプ。 -X も参照してください。
-e 相対タイムスタンプではなく絶対タイムスタンプを出力する
-H 完全な SSL パケット ヘッダーを出力します。
-n IP アドレスからホスト名を解決しようとしないでください
-N 証明書や DN などに ASN.1 が表示された場合は、ASN.XNUMX の解析を試みます。
-p password SSL キーファイルのパスワードとして。
-P インターフェイスを無差別モードにしないでください。
-q 単一の概要行を超えてレコード フィールドをデコードしないでください。 (静音モード)。
-T TCP ヘッダーを出力します。
-v バージョンと著作権情報を表示します。
-x 各レコードを XNUMX 進数で出力し、デコードします。
-X -d オプションを使用すると、バイナリ データが自動的に XNUMX 列に出力されます。
左側に XNUMX 進ダンプ、右側に印刷可能な文字があります。 -バツ
印刷可能な文字の表示を抑制し、カットしやすくします。
そして、XNUMX 進データを他のプログラムに貼り付けます。
-y nroff/troff で処理するために出力を修飾します。 にとってはあまり役に立たない
一般的なユーザー。
-i インタフェース
インタフェース SSL/TLS トラフィックをスニッフィングするネットワーク インターフェイスとして使用します。
-k キーファイル
キーファイル SSL キーファイル (OpenSSL 形式) の場所として使用 以前のバージョン
ssldump の ./server.pem が自動的に検索されます。 次に、キーファイルを指定する必要があります
毎回。
-p password
password SSL キーファイルのパスワードとして。
-r file
データの読み取り元 file ネットワークからではなく。 古い -f オプションはまだ機能しますが、
は非推奨であり、おそらく次のバージョンで削除されるでしょう。
-S [ クリプト | d | ht | H ]
ssldumpにSSLフラグを指定します。 これらのフラグには次のものが含まれます。
クリプト 暗号化情報を出力します。
d デコードされたフィールドを印刷します。
ht ハンドシェイクのタイプを出力します。
H ハンドシェイクのタイプとハイライトを印刷します。
表現
ssldump が検査するパケットを選択します。 技術的に言えば、ssldump はサポートしています
PCAP および tcpdump からの完全な式構文。 実は、ここでの説明は、
tcpdump のマニュアルページから抜粋しました。 ただし、ssldump は完全な TCP を調べる必要があるため、
ストリームの場合、ほとんどの tcpdump 式は、ssldump を実行するトラフィック ミックスを選択します。
単に無視します。 不完全な TCP にならない式のみ
ストリームはここにリストされています。
当学校区の 表現 XNUMX つ以上で構成されます プリミティブ。 プリミティブは通常、次のもので構成されます
an id (名前または番号) の前に XNUMX つ以上の修飾子が続きます。 XNUMXつあります
さまざまな種類の修飾子:
type 修飾子は、ID 名または番号がどのようなものを指すかを示します。 可能
タイプは host, net ポート。 例: 「ホスト foo」、「ネット 128.3」、「ポート 20」。 もしも
型修飾子はありません。 host 想定されます。
DIR 修飾子は、特定の転送方向を指定します。 id。
可能な方向は次のとおりです SRC, DST, SRC or DST SRC DST。 例: `src
foo'、'dst net 128.3'、'src または dst port ftp-data'。 ディレクトリがない場合
予選、 SRC or DST と想定されます。 「null」リンク層の場合 (つまり、
スリップなどのポイントプロトコル) 本国行きの 外国行きの 修飾子は次のとおりです
希望の方向を指定するために使用します。
より複雑なフィルター式は、単語を使用して構築されます。 , or 〜へ
プリミティブを組み合わせます。 たとえば、「ホスト foo であり、ポート ftp ではなく、ポート ftp-data ではありません」。 に
型を保存するため、同一の修飾子リストは省略できます。 例: `tcp dst port ftp または
ftp-data またはドメイン' は、'tcp dst port ftp または tcp dst port ftp- とまったく同じです。
データまたは tcp dst ポート ドメイン」。
許容されるプリミティブは次のとおりです。
DST host host
パケットの IPv4/v6 宛先フィールドが次の場合は True host、それは
住所か名前のどちらかです。
SRC host host
パケットの IPv4/v6 ソース フィールドが次の場合は True host.
host host
パケットの IPv4/v6 送信元または宛先が次の場合は True host。 どれか
上記のホスト式の先頭にキーワードを付けることができます。 ip, arp,
ラップまたは ip6 のように:
ip host host
これは次と同等です:
エーテル プロト \ip host host
If host 複数の IP アドレスを持つ名前である場合、各アドレスがチェックされます
試合のために。
エーテル DST イーホスト
イーサネット宛先アドレスが次の場合は True イーホスト. イーホスト のいずれかである可能性があります
/etc/ethers の名前または番号 (「 エーテル(3N) 数値形式の場合)。
エーテル SRC イーホスト
イーサネット送信元アドレスが次の場合は True イーホスト.
エーテル host イーホスト
イーサネット送信元アドレスまたは宛先アドレスのいずれかが イーホスト.
ゲートウェイ host
パケットが使用された場合は True host ゲートウェイとして。 つまり、イーサネット ソースまたは
宛先アドレスは host ただし、IP ソースも IP もありません
目的地は host. 主催者 名前である必要があり、両方に存在する必要があります
/etc/hosts および/etc/ethers。 (同等の表現は
エーテル host イーホスト host host
これは、名前または番号とともに使用できます。 host / イーホスト。) この
現時点では、この構文は IPv6 対応の構成では機能しません。
DST net net
パケットの IPv4/v6 宛先アドレスにネットワーク番号がある場合は True
of net. ネット からの名前のいずれかである可能性があります / etc / networks またはネットワーク番号 (「
ネットワーク(4) 詳細については)。
SRC net net
パケットの IPv4/v6 送信元アドレスのネットワーク番号が次の場合は True
net.
net net
パケットの IPv4/v6 送信元アドレスまたは宛先アドレスのいずれかに
のネットワーク番号 net.
net net mask mask
IP アドレスが一致する場合は True net 特定のネットマスクを使用します。 多分
資格を持った SRC or DST。 この構文は IPv6 では無効であることに注意してください。 net.
net net/LEN
IPv4/v6 アドレスが一致する場合は True net ネットマスク LEN ビット幅が広い。 多分
資格を持った SRC or DST.
DST ポート ポート
パケットが ip/tcp、ip/udp、ip6/tcp、または ip6/udp であり、
宛先ポートの値 ポートを選択します。 ポート で使用される番号または名前を指定できます
/etc/services (参照してください TCP(4P)と UDP(4P))。 名前が使用される場合、両方のポート
番号とプロトコルがチェックされます。 数字や曖昧な名前が使用されている場合、
ポート番号のみがチェックされます (例: DST ポート 513 両方を印刷します
tcp/login トラフィックと udp/who トラフィック、および ポート ドメイン 両方を印刷します
tcp/domain および udp/domain トラフィック)。
SRC ポート ポート
パケットの送信元ポート値が次の場合は true ポート.
ポート ポート
パケットの送信元ポートまたは宛先ポートのいずれかが ポート。 のいずれか
上記のポート表現の前にキーワードを追加できます。 TCP or UDP,
のように:
TCP SRC ポート ポート
これは、送信元ポートが次の tcp パケットのみに一致します。 ポート.
プリミティブは以下を使用して組み合わせることができます。
括弧で囲まれたプリミティブと演算子のグループ (括弧は特殊です)
シェルに送られるため、エスケープする必要があります)。
否定 (`!'または ` ')。
連結 (`&&'または ` ')。
交互(`||'または `or')。
否定が最も優先されます。 交互と連結は等しい
優先順位を付けて左から右に関連付けます。 明示的であることに注意してください トークンではなく、
連結には並列が必要になりました。
キーワードを指定せずに識別子を指定した場合は、最新のキーワードが想定されます。
たとえば、
host vs エース
略です
host vs host エース
混同すべきではありません
( host vs or エース )
式の引数は、単一の引数または引数として ssldump に渡すことができます。
複数の引数のうち、都合のよい方を指定します。 一般に、次の式の場合、
シェルのメタ文字が含まれている場合は、単一の引用符として渡す方が簡単です
口論。 複数の引数は、解析される前にスペースで連結されます。
例
インターフェイス上のトラフィックをリッスンするには le0 ポート 443
ssldump -i le0 ポート 443
サーバーへのトラフィックをリッスンするには ロミオ ポート上 443.
ssldump -i le0 ポート 443 host ロミオ
ホストへのトラフィックを復号するには ロミオ サーバー.pem とパスワード foobar
ssldump -広告 -k ~/server.pem -p foobar -i le0 host ロミオ
出力 FORMAT
すべての出力は標準出力に出力されます。
ssldump は、次のような行を使用して、すべての新しい TCP 接続の表示を出力します。
New TCP 接続 #2: iromeo.rtfm.com(2302) <-> sr1.rtfm.com(4433)
最初の SYN を送信したホストは左側に表示され、応答したホストは
右側に印刷されています。 通常、これは、SSL クライアントが
左側がSSLサーバーで右側です。 この場合、からの接続があります
iromeo.rtfm.com (港 2303)へ sr1.rtfm.com (港 4433)。 ユーザーがもつれを解くことができるようにするには
さまざまな接続からのトラフィックには、各接続に番号が付けられます。 これがつながりです 2.
各 SSL レコードの出力はレコード行で始まります。 この行には、
次のような、接続とレコード番号、タイムスタンプ、およびレコード タイプ。
2 3 0.2001 (0.0749) S>C ハンドシェーク 認証
これは記録です 3 接続時 2。 最初のタイムスタンプは、開始からの時間です。
接続。 XNUMX 番目は前回の記録からの時間です。 どちらも秒単位です。
レコード行の次のフィールドは、レコードの進行方向です。 C>S
クライアントからサーバーに送信されるレコードを示します。 S>C 送信されたレコードを示します
サーバーからクライアントへ。 ssldump は、最初の SYN を送信するホストが SSL であると想定します。
クライアント (これはほぼ常に正しいです)。
次のフィールドはレコード タイプで、次のいずれかです。 ハンドシェーク, Iアラート, 暗号仕様の変更または
アプリケーションデータ。 最後に、ssldump は行の残りの部分にレコード固有のデータを出力する場合があります。
ハンドシェーク 記録すると、ハンドシェイク メッセージが出力されます。 したがって、この記録は、 認証
メッセージ。
ssldump は、さらにデコードするために特定のレコード タイプを選択します。 これらは、
デバッグに最も役立つことが証明されています。
クライアントこんにちは - バージョン、提供されている暗号スイート、セッション ID
提供されている場合)
サーバーこんにちは - バージョン、session_id、選択した暗号スイート、
圧縮方法
警告 - 種類とレベル(入手可能な場合)
さまざまなレコードをより完全にデコードするには、 -A , -d , -k -p
フラグ。
記述
次の XNUMX つの条件が満たされる場合、ssldump は XNUMX つのホスト間のトラフィックを復号化できます。
1. ssldump にはキーがあります。
2. 静的 RSA が使用されました。
それ以外の場合、暗号化が開始されると、ssldump は、
レコードタイプ。 トレースの次のセクションを考えてみましょう。
1 5 0.4129 (0.1983) C>S ハンドシェーク クライアントキー交換
1 6 0.4129 (0.0000) C>S 暗号仕様の変更
1 7 0.4129 (0.0000) C>S ハンドシェーク
1 8 0.5585 (0.1456) S>C 暗号仕様の変更
1 9 0.6135 (0.0550) S>C ハンドシェーク
1 10 2.3121 (1.6986) C>S アプリケーションデータ
1 11 2.5336 (0.2214) C>S アプリケーションデータ
1 12 2.5545 (0.0209) S>C アプリケーションデータ
1 13 2.5592 (0.0046) S>C アプリケーションデータ
1 14 2.5592 (0.0000) S>C 警告
なお、 クライアントキー交換 メッセージタイプは出力されますが、残りの部分は ハンドシェーク
メッセージにはタイプがありません。 これらは、 完成しました メッセージですが、
暗号化された ssldump は、それらが次のタイプであることのみを認識します。 ハンドシェーク。 同様に、 警告 in
レコード 14 がハンドシェイク中に発生した場合、そのタイプとレベルが出力されるはずです。
ただし、暗号化されているため、それがアラートであることしかわかりません。
onworks.net サービスを使用してオンラインで ssldump を使用する
