TLS-Attacker icon indicating copy to clipboard operation
TLS-Attacker copied to clipboard

DTLS Issue

Open dautovicalan opened this issue 1 year ago • 3 comments

Hello everyone, I have problems when I want to test around with DTLS. When I start the TLS-Server with DTLS parameter nothing shows but it is running. Then I am starting the TLS-Client to connect to the running server, but I always get exception that could not initialise TCP Transport Handler even though I am pretty sure that the TLS-Client successfully loaded DTLS parameter.

Am I missing something or could you provide me with some additional steps required for the newest version of TLS-Attacker.

Thank you in advance for help.

dautovicalan avatar Jun 01 '23 19:06 dautovicalan

TLS-Attacker allows you to do wild things like sending DTLS parameters in a TLS connection to try to confuse the peer. Right now, it seems like you are running these tools with TCP as the underlying layer. To change the underlying layer, you have to change the "TransportHandler" - which is the TLS-Attackers interface for "anything below TLS".

-transport_handler_type UDP

ic0ns avatar Jun 02 '23 05:06 ic0ns

I also did it with the arguments and also tried it with defining config and loading it as config, but still no success. Those are the calls that I made in seperate terminals which are leading me to exception:

java -jar TLS-Server.jar -port 2000 -transport_handler_type UDP - Works fine, but I do not receive any output from the server that is waiting on host and port

java -jar TLS-Client.jar -connect localhost:2000 -transport_handler_type UDP - this one is causing the following exception after I run the command: 08:58:59 [main] INFO : SendAction - Sending messages (client): CLIENT_HELLO, 08:59:00 [main] ERROR: WorkflowExecutor - Unexpected fatal error during action execution, stopping execution: java.lang.RuntimeException: Trying to set TCP layer with non TCP TransportHandler at de.rub.nds.tlsattacker.core.layer.impl.TcpLayer.getTransportHandler(TcpLayer.java:85) at de.rub.nds.tlsattacker.core.layer.impl.TcpLayer.sendData(TcpLayer.java:55) at de.rub.nds.tlsattacker.core.layer.impl.RecordLayer.sendData(RecordLayer.java:205) at de.rub.nds.tlsattacker.core.layer.impl.RecordLayer.sendData(RecordLayer.java:51) at de.rub.nds.tlsattacker.core.layer.impl.MessageLayer.flushCollectedMessages(MessageLayer.java:112) at de.rub.nds.tlsattacker.core.layer.impl.MessageLayer.processMessage(MessageLayer.java:100) at de.rub.nds.tlsattacker.core.layer.impl.MessageLayer.sendConfiguration(MessageLayer.java:79) at de.rub.nds.tlsattacker.core.layer.LayerStack.sendData(LayerStack.java:103) at de.rub.nds.tlsattacker.core.workflow.action.MessageAction.send(MessageAction.java:243) at de.rub.nds.tlsattacker.core.workflow.action.SendAction.execute(SendAction.java:95) at de.rub.nds.tlsattacker.core.workflow.WorkflowExecutor.executeAction(WorkflowExecutor.java:133) at de.rub.nds.tlsattacker.core.workflow.DefaultWorkflowExecutor.executeWorkflow(DefaultWorkflowExecutor.java:70) at de.rub.nds.tlsattacker.client.main.TlsClient.startTlsClient(TlsClient.java:86) at de.rub.nds.tlsattacker.client.main.TlsClient.main(TlsClient.java:58) 08:59:00 [main] WARN : TlsClient - The TLS protocol flow was not executed completely, follow the debug messages for more information.

dautovicalan avatar Jun 02 '23 11:06 dautovicalan

Internally, TLS-Attacker uses different ProtocolLayers to reflect the individual parts of a protocol stack. By default, the stack of layers contains a TcpLayer. If you want to use DTLS, you can add -version DTLS12 to your CLI flags. This should prepare the layer stack as required for DTLS and automatically set the transport handler to UDP.

mmaehren avatar Jul 07 '23 07:07 mmaehren