Не удается прочитать раздел tls даже после вызова load_layer ('tls') в scapy - PullRequest
1 голос
/ 07 октября 2019

Этот вопрос объясняет, как читать раздел TLS пакета, используя scapy.

Однако моя программа не может его прочитать. Все, что он возвращает, это набор шестнадцатеричных символов

>>> from scapy.all import *
>>> load_layer('tls')
>>> cap = rdpcap('tls.pcap')
>>> p1=cap[0]
>>> p1
<Ether  dst=14:cc:20:51:33:ea src=f4:f2:6d:93:51:f1 type=0x800 |<IP  version=4 ihl=5 tos=0x0 len=146 id=62970 flags=DF frag=0 ttl=64 proto=tcp chksum=0x50a0 src=192.168.1.143 dst=54.254.250.149 |<TCP  sport=49335 dport=50443 seq=549695462 ack=200962336 dataofs=5 reserved=0 flags=PA window=4380 chksum=0xb0ac urgptr=0 |<Raw  load="\x17\x03\x01\x00 \xf2\x10\xfd\x95N'\xf2\xaf\x99tp\x93\xbc\xe9\x81w\x91\x1b\xe0\xc9M:\x9a!]\xb0!\xae\xd2\x86\xb0>\x17\x03\x01\x00@d>\x0b\xee\xf0\xab\xded\x02E)\x0e0\xbb\xe6\x82uU\xb22\x87\xd6\xe4n[\x1d\x18\xe8\xd6\x1c\x00N_C\xe6\xdd\xbe\x89@6p\xd9\xaf\x19\xb3s\x07H\xdeF\x88\xdar\x0f\x8a\n!4\xeb\xd3F\xefgH" |>>>>

Я хочу получить версию записи tls, длину записи tls и тип содержимого записи tls.

Это скриншот открытого пакетав проволочной акуле. enter image description here

Может кто-нибудь показать, пожалуйста, что я делаю неправильно и как правильно читать содержимое tls?

Я использую Python3.6, и поэтомуне может использовать стабильный scapy-ssl_tls, который в настоящее время ограничен Python 2.

1 Ответ

0 голосов
/ 07 октября 2019

Вы так близко. Вам просто нужно использовать TLS(pkt.load).

Скачать TLS Capture

Для этого примера используйте этот захват tls из Bugzilla Wireshark.

Мывидно, что пакет 4 является клиентом TLS Здравствуйте:

tshark -r DNS-over-TLS.pcapng -Y "frame.number==4"
    4   0.122267 133.93.28.45 → li280-151.members.linode.com TLSv1  384 Client 
Hello 00:00:5e:00:01:18 ← 48:d7:05:df:86:0b

Загрузка с Scapy

Убедитесь, что у вас установлена ​​библиотека криптографии, поскольку это требуется для загрузки перехватов TLS.

>>> import cryptography
>>> # No errors

Воспроизведение того, что у вас есть, с этим снимком:

>>> from scapy.all import *
>>> load_layer('tls')
>>> cap = rdpcap('DNS-over-TLS.pcapng')
>>> tls_client_hello=cap[3] # Wireshark numbers packets starting at 1, scapy at 0
>>> tls_client_hello
<Ether  dst=14:cc:20:51:33:ea src=f4:f2:6d:93:51:f1 type=0x800 |<IP  version=4 
ihl=5 tos=0x0 len=146 id=62970 flags=DF frag=0 ttl=64 proto=tcp chksum=0x50a0 
src=192.168.1.143 dst=54.254.250.149 |<TCP  sport=49335 dport=50443 seq=549695462 
ack=200962336 dataofs=5 reserved=0 flags=PA window=4380 chksum=0xb0ac urgptr=0 |
<Raw  load="\x17\x03\x01\x00 
\xf2\x10\xfd\x95N'\xf2\xaf\x99tp\x93\xbc\xe9\x81w\x91\x1b\xe0\xc9M:\x9a!]\xb0!\xa
e\xd2\x86\xb0>\x17\x03\x01\x00@d>\x0b\xee\xf0\xab\xded\x02E)\x0e0\xbb\xe6\x82uU\x
b22\x87\xd6\xe4n[\x1d\x18\xe8\xd6\x1c\x00N_C\xe6\xdd\xbe\x89@6p\xd9\xaf\x19\xb3s\
x07H\xdeF\x88\xdar\x0f\x8a\n!4\xeb\xd3F\xefgH" |>>>>

Обратите внимание, что часть, которую мы хотим просмотреть, называется Raw load. Для доступа к этой части пакета вы используете tls_client_hello.load. Помните, что TLS будет принимать байтовый объект, который содержит данные, но не весь пакет.

>>> TLS(tls_client_hello.load)
<TLS  type=handshake version=TLS 1.0 len=313 iv=b'' msg=[<TLSClientHello  
msgtype=client_hello msglen=309 version=TLS 1.2 gmt_unix_time=Tue, 18 May 2077 
23:20:52 +0000 (3388605652) 
random_bytes=d6d533aca04dca42db8b123b0a143dcd580079147122e4de095c15cf sidlen=0 
sid='' cipherslen=182 ciphers=[TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 
< TLS output truncated ... >

Дальнейшее чтение

Я настоятельно рекомендую посмотреть Scapy TLS Notebooks , которые хорошо справляются с документированием использования scapy + TLS.

...