/** * 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.fuzzer; import com.beust.jcommander.JCommander; import de.rub.nds.tlsattacker.attacks.config.BleichenbacherCommandConfig; import de.rub.nds.tlsattacker.attacks.config.DtlsPaddingOracleAttackCommandConfig; import de.rub.nds.tlsattacker.attacks.config.HeartbleedCommandConfig; import de.rub.nds.tlsattacker.attacks.config.InvalidCurveAttackCommandConfig; import de.rub.nds.tlsattacker.attacks.config.InvalidCurveAttackFullCommandConfig; import de.rub.nds.tlsattacker.attacks.config.PaddingOracleCommandConfig; import de.rub.nds.tlsattacker.attacks.config.PoodleCommandConfig; import de.rub.nds.tlsattacker.attacks.config.WinshockCommandConfig; import de.rub.nds.tlsattacker.attacks.impl.BleichenbacherAttack; import de.rub.nds.tlsattacker.attacks.impl.DtlsPaddingOracleAttack; import de.rub.nds.tlsattacker.attacks.impl.HeartbleedAttack; import de.rub.nds.tlsattacker.attacks.impl.InvalidCurveAttack; import de.rub.nds.tlsattacker.attacks.impl.InvalidCurveAttackFull; import de.rub.nds.tlsattacker.attacks.impl.PaddingOracleAttack; import de.rub.nds.tlsattacker.attacks.impl.PoodleAttack; import de.rub.nds.tlsattacker.attacks.impl.WinshockAttack; import de.rub.nds.tlsattacker.fuzzer.config.MultiFuzzerConfig; import de.rub.nds.tlsattacker.fuzzer.impl.MultiFuzzer; import de.rub.nds.tlsattacker.tls.Attacker; import de.rub.nds.tlsattacker.tls.config.CommandConfig; 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.exceptions.ConfigurationException; /** * * @author Juraj Somorovsky <juraj.somorovsky@rub.de> */ public class Main { public static void main(String[] args) throws Exception { GeneralConfig generalConfig = new GeneralConfig(); JCommander jc = new JCommander(generalConfig); MultiFuzzerConfig cmconfig = new MultiFuzzerConfig(); jc.addCommand(MultiFuzzerConfig.COMMAND, cmconfig); BleichenbacherCommandConfig bleichenbacherTest = new BleichenbacherCommandConfig(); jc.addCommand(BleichenbacherCommandConfig.ATTACK_COMMAND, bleichenbacherTest); DtlsPaddingOracleAttackCommandConfig dtlsPaddingOracleAttackTest = new DtlsPaddingOracleAttackCommandConfig(); jc.addCommand(DtlsPaddingOracleAttackCommandConfig.ATTACK_COMMAND, dtlsPaddingOracleAttackTest); // EarlyCCSCommandConfig earlyCCS = new EarlyCCSCommandConfig(); // jc.addCommand(EarlyCCSCommandConfig.COMMAND, earlyCCS); InvalidCurveAttackCommandConfig ellipticTest = new InvalidCurveAttackCommandConfig(); jc.addCommand(InvalidCurveAttackCommandConfig.ATTACK_COMMAND, ellipticTest); InvalidCurveAttackFullCommandConfig elliptic = new InvalidCurveAttackFullCommandConfig(); jc.addCommand(InvalidCurveAttackFullCommandConfig.ATTACK_COMMAND, elliptic); HeartbleedCommandConfig heartbleed = new HeartbleedCommandConfig(); jc.addCommand(HeartbleedCommandConfig.ATTACK_COMMAND, heartbleed); PaddingOracleCommandConfig paddingOracle = new PaddingOracleCommandConfig(); jc.addCommand(PaddingOracleCommandConfig.ATTACK_COMMAND, paddingOracle); PoodleCommandConfig poodle = new PoodleCommandConfig(); jc.addCommand(PoodleCommandConfig.ATTACK_COMMAND, poodle); // SniTestCommandConfig sniTest = new SniTestCommandConfig(); // jc.addCommand(SniTestCommandConfig.COMMAND, sniTest); WinshockCommandConfig winshock = new WinshockCommandConfig(); jc.addCommand(WinshockCommandConfig.ATTACK_COMMAND, winshock); jc.parse(args); if (generalConfig.isHelp() || jc.getParsedCommand() == null) { jc.usage(); return; } Attacker<? extends CommandConfig> attacker; switch (jc.getParsedCommand()) { case MultiFuzzerConfig.COMMAND: startMultiFuzzer(cmconfig, generalConfig, jc); return; case BleichenbacherCommandConfig.ATTACK_COMMAND: attacker = new BleichenbacherAttack(bleichenbacherTest); break; // case EarlyCCSCommandConfig.COMMAND: // attacker = new EarlyCCSAttack(earlyCCS); // break; case InvalidCurveAttackCommandConfig.ATTACK_COMMAND: attacker = new InvalidCurveAttack(ellipticTest); break; case InvalidCurveAttackFullCommandConfig.ATTACK_COMMAND: attacker = new InvalidCurveAttackFull(elliptic); break; case HeartbleedCommandConfig.ATTACK_COMMAND: attacker = new HeartbleedAttack(heartbleed); break; case PoodleCommandConfig.ATTACK_COMMAND: attacker = new PoodleAttack(poodle); break; case PaddingOracleCommandConfig.ATTACK_COMMAND: attacker = new PaddingOracleAttack(paddingOracle); break; case WinshockCommandConfig.ATTACK_COMMAND: attacker = new WinshockAttack(winshock); break; case DtlsPaddingOracleAttackCommandConfig.ATTACK_COMMAND: attacker = new DtlsPaddingOracleAttack(dtlsPaddingOracleAttackTest); break; // case SniTestCommandConfig.COMMAND: // attacker = new SniTest(sniTest); // break; default: throw new ConfigurationException("No command found"); } ConfigHandler configHandler = ConfigHandlerFactory.createConfigHandler("client"); configHandler.initialize(generalConfig); if (configHandler.printHelpForCommand(jc, attacker.getConfig())) { return; } attacker.executeAttack(configHandler); } private static void startMultiFuzzer(MultiFuzzerConfig fuzzerConfig, GeneralConfig generalConfig, JCommander jc) { MultiFuzzer fuzzer = new MultiFuzzer(fuzzerConfig, generalConfig); if (fuzzerConfig.isHelp()) { jc.usage(MultiFuzzerConfig.COMMAND); return; } fuzzer.startFuzzer(); } }