見出し画像

TWPCAP: TLSレポートに暗号スイートの情報を追加した

今朝は猫が4時前に起こしにきました。「復刻版のTWSNMPの質問きてるよ!」とのこと

の記事のコメントです。回答書いておきました。

さて、TLS 1.3に検知に成功した手法を応用してTLSの通信で使っている暗号スイートを取得する処理を昨日の夜から考えていました。
どうやらTLSのServer Helloのパケットは分割されているため、ほとんどデコードエラーになっているようです。デコードできないパケットでTLSのServer Helloの特徴を持つものは力技で解析する処理に統一しました。
作ってみた結果、

 type=TLSFlow,cl=192.168.5.2,sv=20.54.24.148,serv=HTTPS,count=23,handshake=7,alert=0,minver=TLS 1.2,maxver=TLS 1.2,cipher=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,ft=2021-07-14T21:32:17Z,lt=2021-07-14T21:32:17Z

のようにTLS通信時の暗号スイートの名前をレポートに含めることができました。
暗号スイートの数値IDから名前に変換するのは、

に定義がありました。ソースコードは

var cipherSuiteMap = make(map[uint16]string)

// マップを変換
for _, cs := range tls.CipherSuites() {
	cipherSuiteMap[cs.ID] = cs.Name
}


//使う時
cs, ok := cipherSuiteMap[e.CipherSuite]
if !ok {
	cs = "Unknown"
}

のようにしました。この方法は、TWSNMP FCにも応用できそうです。

IMAP4のSTARTTLSの時に暗号スイートが取得できませんが、だいたい取得できています。
最初に考えていたサーバー証明書をTLSのパケットから取得するのは複数のパケットを連結して処理する必要があるので諦めました。TWSNMP FCにポーリングで取得する方法があるので良しとします。
考えていることは一通りできたので、v1.0.0としてリリースしようと思います。
明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。