Я пытаюсь подделать несколько пакетов SSL/TLS, но пока не нашел никаких библиотек в Scapy. Существуют ли общедоступные библиотеки SSL/TLS для Scapy или эквивалентов?
Если его нет в Scapy, есть ли эквивалентная программа Scapy, которая помогла бы выполнить те же задачи?
Он должен иметь возможность создавать пакеты записей, рукопожатий и ошибок, в том смысле, что я имею в виду все виды содержимого SSL/TLS.
OpenSource и свободные программы были бы великолепны, или свободные программы, если их на самом деле нет. Можно ли, например, связать Scapy с OpenSSL?
Существует Scapy TLS, который реализует некоторые части протокола TLS, такие как:
Пример кода:
import scapy
from scapy.layers.ssl_tls import *
import socket
target = ('target.local',443)
# create tcp socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(target)
p = TLSRecord(version="TLS_1_1")/TLSHeartBeat(length=2**14-1,data='bleed...')
s.sendall(p)
resp = s.recv(1024)
print "resp: %s"%repr(resp)
s.close()
Расширение можно найти здесь:
Вы можете попробовать tls_prober (точнее, pytls ). Он утверждает, что может создавать различные сообщения TLS, хотя я обнаружил, что код в презентации не работает так, как рекламируется. Однако такой код работает:
def make_heartbeat():
heartbeat = HeartbeatMessage.create(HeartbeatMessage.HeartbeatRequest,
'X', 0x4000)
record = TLSRecord.create(content_type=TLSRecord.Heartbeat,
version=TLSRecord.TLS1_0,
message=heartbeat.bytes)
#hexdump(record.bytes)
return record.bytes
Существует tlsfuzzer , который не только имеет генераторы для различных сообщений [ 1 , 2 ], он также может проверять, соответствуют ли ответы сервера ожидаемым [ 3 , 4 ] (отправленные сообщения, их содержимое, наличие предупреждений и т. д.), он имеет поддержка согласования (и повторного согласования) [ 5 ] полного сеанса TLS, а также его возобновления [ 6 ].
Из основных функций TLS не поддерживаются только ECDSA и билеты сеанса, все остальное, например, сам протокол от SSLv3 до TLSv1.2, ECDHE, RSA, DHE, AES-GCM, ChaCha20, клиентские сертификаты и многие другие, работает должным образом. В то же время он не зависит от внешних криптографических библиотек, поэтому все эти функции поддерживаются как в старых дистрибутивах, таких как RHEL/CentOS 5 (при условии, что установлен Python 2.6 от EPEL), так и в новых, как текущий Archlinux с Python 3.5.
Чтобы генерировать совершенно произвольные сообщения, вы можете использовать RawMessageGenerator
, например:
node = Connection('example.com', 443) # TCP level connection
node.add_child(RawMessageGenerator(ContentType.application_data,
bytearray(b'Raw data in message')))
runner = Runner(node)
runner.run()
Полное раскрытие: я основной разработчик tlsfuzzer.
Ник Дикинсон-Уайлд
вишенка