/**
* 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.ManInTheMiddleAttackCommandConfig;
import de.rub.nds.tlsattacker.attacks.mitm.MitMWorkflowExecutor;
import de.rub.nds.tlsattacker.attacks.mitm.RSAExampleMitMWorkflowConfiguration;
import de.rub.nds.tlsattacker.tls.Attacker;
import de.rub.nds.tlsattacker.tls.config.ConfigHandler;
import de.rub.nds.tlsattacker.tls.config.ConfigHandlerFactory;
import de.rub.nds.tlsattacker.tls.config.GeneralConfig;
import de.rub.nds.tlsattacker.tls.config.ServerCommandConfig;
import de.rub.nds.tlsattacker.tls.workflow.TlsContext;
import de.rub.nds.tlsattacker.transport.TransportHandler;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Executes a generic Man in the Middle attack against a target server and a
* client.
*
* @author Philip Riese <philip.riese@rub.de>
*/
public class ManInTheMiddleAttack extends Attacker<ManInTheMiddleAttackCommandConfig> {
public static Logger LOGGER = LogManager.getLogger(ManInTheMiddleAttack.class);
public ManInTheMiddleAttack(ManInTheMiddleAttackCommandConfig config) {
super(config);
}
@Override
public void executeAttack(ConfigHandler clientConfigHandler) {
// create server objects
ServerCommandConfig serverCommandConfig = new ServerCommandConfig();
serverCommandConfig.setPort(config.getPort());
serverCommandConfig.setCipherSuites(config.getCipherSuites());
serverCommandConfig.setKeystore(config.getKeystore());
serverCommandConfig.setPassword(config.getPassword());
serverCommandConfig.setAlias(config.getAlias());
serverCommandConfig.setWorkflowTraceType(config.getWorkflowTraceType());
GeneralConfig generalConfig = new GeneralConfig();
ConfigHandler serverConfigHandler = ConfigHandlerFactory.createConfigHandler("server");
serverConfigHandler.initialize(generalConfig);
TransportHandler serverTransportHandler = serverConfigHandler.initializeTransportHandler(serverCommandConfig);
TlsContext serverTlsContext = serverConfigHandler.initializeTlsContext(serverCommandConfig);
// create client objects
TransportHandler clientTransportHandler = clientConfigHandler.initializeTransportHandler(config);
TlsContext clientTlsContext = clientConfigHandler.initializeTlsContext(config);
// load workflow into the tlsContext objects
RSAExampleMitMWorkflowConfiguration clientwf = new RSAExampleMitMWorkflowConfiguration(clientTlsContext, config);
clientwf.createWorkflow();
RSAExampleMitMWorkflowConfiguration serverwf = new RSAExampleMitMWorkflowConfiguration(serverTlsContext, config);
serverwf.createWorkflow();
// should the whole workflow trace be modified
boolean mod = config.isModify();
MitMWorkflowExecutor mitmWorkflowExecutor = new MitMWorkflowExecutor(clientTransportHandler,
serverTransportHandler, clientTlsContext, serverTlsContext, mod);
mitmWorkflowExecutor.executeWorkflow();
clientTransportHandler.closeConnection();
serverTransportHandler.closeConnection();
}
}