/** * TLS-Attacker - A Modular Penetration Testing Framework for TLS * * Copyright 2014-2016 Ruhr University Bochum / Hackmanit GmbH * * Licensed under Apache License 2.0 * http://www.apache.org/licenses/LICENSE-2.0 */ package de.rub.nds.tlsattacker.attacks.impl; import de.rub.nds.tlsattacker.attacks.config.SniTestCommandConfig; import de.rub.nds.tlsattacker.tls.Attacker; import de.rub.nds.tlsattacker.tls.config.ConfigHandler; import de.rub.nds.tlsattacker.tls.constants.NameType; import de.rub.nds.tlsattacker.tls.protocol.ProtocolMessage; import de.rub.nds.tlsattacker.tls.protocol.extension.ServerNameIndicationExtensionMessage; import de.rub.nds.tlsattacker.tls.protocol.handshake.CertificateMessage; import de.rub.nds.tlsattacker.tls.protocol.handshake.ClientHelloMessage; import de.rub.nds.tlsattacker.tls.protocol.handshake.ServerHelloMessage; import de.rub.nds.tlsattacker.tls.workflow.TlsContext; import de.rub.nds.tlsattacker.tls.workflow.WorkflowExecutor; import de.rub.nds.tlsattacker.tls.workflow.WorkflowTrace; import de.rub.nds.tlsattacker.transport.TransportHandler; import de.rub.nds.tlsattacker.util.UnoptimizedDeepCopy; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * Sends different server names in the SNI extension in the ClientHello * messages. * * @author Juraj Somorovsky <juraj.somorovsky@rub.de> */ public class SniTest extends Attacker<SniTestCommandConfig> { private static final Logger LOGGER = LogManager.getLogger(SniTest.class); public SniTest(SniTestCommandConfig config) { super(config); } @Override public void executeAttack(ConfigHandler configHandler) { TransportHandler transportHandler = configHandler.initializeTransportHandler(config); TlsContext tlsContext = configHandler.initializeTlsContext(config); WorkflowExecutor workflowExecutor = configHandler.initializeWorkflowExecutor(transportHandler, tlsContext); WorkflowTrace trace = tlsContext.getWorkflowTrace(); List<ProtocolMessage> messages = trace.getProtocolMessages(); ServerNameIndicationExtensionMessage sni = new ServerNameIndicationExtensionMessage(); sni.setServerNameConfig(config.getServerName2()); sni.setNameTypeConfig(NameType.HOST_NAME); ClientHelloMessage ch2 = (ClientHelloMessage) UnoptimizedDeepCopy.copy(messages.get(0)); ch2.addExtension(sni); messages.add(ch2); messages.add(new ServerHelloMessage()); messages.add(new CertificateMessage()); workflowExecutor.executeWorkflow(); transportHandler.closeConnection(); } }