Skip to content

Commit c48ab94

Browse files
committed
Merge origin/master into maven-deploy
2 parents 83a09d9 + 2112d1f commit c48ab94

File tree

962 files changed

+43195
-9756
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

962 files changed

+43195
-9756
lines changed

Attacks/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>de.rub.nds.tlsattacker</groupId>
66
<artifactId>TLS-Attacker</artifactId>
7-
<version>2.0Beta2</version>
7+
<version>2.0Beta4</version>
88
</parent>
99
<artifactId>Attacks</artifactId>
1010
<packaging>jar</packaging>

Attacks/src/main/java/de/rub/nds/tlsattacker/attacks/Main.java

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,28 @@
1111
import com.beust.jcommander.JCommander;
1212
import de.rub.nds.tlsattacker.attacks.config.BleichenbacherCommandConfig;
1313
import de.rub.nds.tlsattacker.attacks.config.Cve20162107CommandConfig;
14-
import de.rub.nds.tlsattacker.attacks.config.DtlsPaddingOracleAttackCommandConfig;
1514
import de.rub.nds.tlsattacker.attacks.config.EarlyCCSCommandConfig;
1615
import de.rub.nds.tlsattacker.attacks.config.HeartbleedCommandConfig;
1716
import de.rub.nds.tlsattacker.attacks.config.InvalidCurveAttackConfig;
1817
import de.rub.nds.tlsattacker.attacks.config.Lucky13CommandConfig;
1918
import de.rub.nds.tlsattacker.attacks.config.PaddingOracleCommandConfig;
2019
import de.rub.nds.tlsattacker.attacks.config.PoodleCommandConfig;
20+
import de.rub.nds.tlsattacker.attacks.config.SimpleMitmProxyCommandConfig;
2121
import de.rub.nds.tlsattacker.attacks.config.TLSPoodleCommandConfig;
22+
import de.rub.nds.tlsattacker.attacks.config.TokenBindingMitmCommandConfig;
2223
import de.rub.nds.tlsattacker.attacks.config.WinshockCommandConfig;
2324
import de.rub.nds.tlsattacker.attacks.impl.Attacker;
2425
import de.rub.nds.tlsattacker.attacks.impl.BleichenbacherAttacker;
2526
import de.rub.nds.tlsattacker.attacks.impl.Cve20162107Attacker;
26-
import de.rub.nds.tlsattacker.attacks.impl.DtlsPaddingOracleAttacker;
2727
import de.rub.nds.tlsattacker.attacks.impl.EarlyCCSAttacker;
2828
import de.rub.nds.tlsattacker.attacks.impl.HeartbleedAttacker;
2929
import de.rub.nds.tlsattacker.attacks.impl.InvalidCurveAttacker;
3030
import de.rub.nds.tlsattacker.attacks.impl.Lucky13Attacker;
3131
import de.rub.nds.tlsattacker.attacks.impl.PaddingOracleAttacker;
3232
import de.rub.nds.tlsattacker.attacks.impl.PoodleAttacker;
33+
import de.rub.nds.tlsattacker.attacks.impl.SimpleMitmProxy;
3334
import de.rub.nds.tlsattacker.attacks.impl.TLSPoodleAttacker;
35+
import de.rub.nds.tlsattacker.attacks.impl.TokenBindingMitm;
3436
import de.rub.nds.tlsattacker.attacks.impl.WinshockAttacker;
3537
import de.rub.nds.tlsattacker.core.config.TLSDelegateConfig;
3638
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
@@ -44,22 +46,25 @@
4446
*/
4547
public class Main {
4648

47-
private static Logger LOGGER = LogManager.getLogger("Attacks");
49+
private static Logger LOGGER = LogManager.getLogger(Main.class.getName());
4850

4951
public static void main(String[] args) {
5052
GeneralDelegate generalDelegate = new GeneralDelegate();
5153
JCommander jc = new JCommander(generalDelegate);
5254
BleichenbacherCommandConfig bleichenbacherTest = new BleichenbacherCommandConfig(generalDelegate);
5355
jc.addCommand(BleichenbacherCommandConfig.ATTACK_COMMAND, bleichenbacherTest);
54-
DtlsPaddingOracleAttackCommandConfig dtlsPaddingOracleAttackTest = new DtlsPaddingOracleAttackCommandConfig(
55-
generalDelegate);
56-
jc.addCommand(DtlsPaddingOracleAttackCommandConfig.ATTACK_COMMAND, dtlsPaddingOracleAttackTest);
56+
// DtlsPaddingOracleAttackCommandConfig dtlsPaddingOracleAttackTest =
57+
// new DtlsPaddingOracleAttackCommandConfig(
58+
// generalDelegate);
59+
// jc.addCommand(DtlsPaddingOracleAttackCommandConfig.ATTACK_COMMAND,
60+
// dtlsPaddingOracleAttackTest);
5761
InvalidCurveAttackConfig ellipticTest = new InvalidCurveAttackConfig(generalDelegate);
5862
jc.addCommand(InvalidCurveAttackConfig.ATTACK_COMMAND, ellipticTest);
5963
HeartbleedCommandConfig heartbleed = new HeartbleedCommandConfig(generalDelegate);
6064
jc.addCommand(HeartbleedCommandConfig.ATTACK_COMMAND, heartbleed);
61-
Lucky13CommandConfig lucky13 = new Lucky13CommandConfig(generalDelegate);
62-
jc.addCommand(Lucky13CommandConfig.ATTACK_COMMAND, lucky13);
65+
// Lucky13CommandConfig lucky13 = new
66+
// Lucky13CommandConfig(generalDelegate);
67+
// jc.addCommand(Lucky13CommandConfig.ATTACK_COMMAND, lucky13);
6368
PaddingOracleCommandConfig paddingOracle = new PaddingOracleCommandConfig(generalDelegate);
6469
jc.addCommand(PaddingOracleCommandConfig.ATTACK_COMMAND, paddingOracle);
6570
TLSPoodleCommandConfig tlsPoodle = new TLSPoodleCommandConfig(generalDelegate);
@@ -72,6 +77,12 @@ public static void main(String[] args) {
7277
jc.addCommand(EarlyCCSCommandConfig.ATTACK_COMMAND, earlyCCS);
7378
PoodleCommandConfig poodle = new PoodleCommandConfig(generalDelegate);
7479
jc.addCommand(PoodleCommandConfig.ATTACK_COMMAND, poodle);
80+
SimpleMitmProxyCommandConfig simpleMitmProxy = new SimpleMitmProxyCommandConfig(generalDelegate);
81+
jc.addCommand(SimpleMitmProxyCommandConfig.ATTACK_COMMAND, simpleMitmProxy);
82+
// TokenBindingMitmCommandConfig tokenBindingMitm = new
83+
// TokenBindingMitmCommandConfig(generalDelegate);
84+
// jc.addCommand(TokenBindingMitmCommandConfig.ATTACK_COMMAND,
85+
// tokenBindingMitm);
7586
jc.parse(args);
7687
if (generalDelegate.isHelp() || jc.getParsedCommand() == null) {
7788
if (jc.getParsedCommand() == null) {
@@ -92,9 +103,9 @@ public static void main(String[] args) {
92103
case HeartbleedCommandConfig.ATTACK_COMMAND:
93104
attacker = new HeartbleedAttacker(heartbleed);
94105
break;
95-
case Lucky13CommandConfig.ATTACK_COMMAND:
96-
attacker = new Lucky13Attacker(lucky13);
97-
break;
106+
// case Lucky13CommandConfig.ATTACK_COMMAND:
107+
// attacker = new Lucky13Attacker(lucky13);
108+
// break;
98109
case TLSPoodleCommandConfig.ATTACK_COMMAND:
99110
attacker = new TLSPoodleAttacker(tlsPoodle);
100111
break;
@@ -107,17 +118,24 @@ public static void main(String[] args) {
107118
case WinshockCommandConfig.ATTACK_COMMAND:
108119
attacker = new WinshockAttacker(winshock);
109120
break;
110-
case DtlsPaddingOracleAttackCommandConfig.ATTACK_COMMAND:
111-
attacker = new DtlsPaddingOracleAttacker(dtlsPaddingOracleAttackTest);
112-
break;
121+
// case DtlsPaddingOracleAttackCommandConfig.ATTACK_COMMAND:
122+
// attacker = new
123+
// DtlsPaddingOracleAttacker(dtlsPaddingOracleAttackTest);
124+
// break;
113125
case EarlyCCSCommandConfig.ATTACK_COMMAND:
114126
attacker = new EarlyCCSAttacker(earlyCCS);
115127
break;
116128
case PoodleCommandConfig.ATTACK_COMMAND:
117129
attacker = new PoodleAttacker(poodle);
118130
break;
131+
case SimpleMitmProxyCommandConfig.ATTACK_COMMAND:
132+
attacker = new SimpleMitmProxy(simpleMitmProxy);
133+
break;
134+
// case TokenBindingMitmCommandConfig.ATTACK_COMMAND:
135+
// attacker = new TokenBindingMitm(tokenBindingMitm);
136+
// break;
119137
default:
120-
throw new ConfigurationException("No command found");
138+
throw new ConfigurationException("Command not found");
121139
}
122140
if (attacker == null) {
123141
throw new ConfigurationException("Attacker not found");
@@ -133,7 +151,7 @@ public static void main(String[] args) {
133151
Boolean result = attacker.isVulnerable();
134152
LOGGER.info("Vulnerable:" + (result == null ? "Uncertain" : result.toString()));
135153
} catch (UnsupportedOperationException E) {
136-
LOGGER.info("The selection is currently not implemented");
154+
LOGGER.info("The selected attacker is currently not implemented");
137155
}
138156
}
139157
}

Attacks/src/main/java/de/rub/nds/tlsattacker/attacks/config/AttackConfig.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,18 @@
88
*/
99
package de.rub.nds.tlsattacker.attacks.config;
1010

11-
import com.beust.jcommander.Parameter;
1211
import de.rub.nds.tlsattacker.core.config.TLSDelegateConfig;
1312
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
1413

1514
/**
1615
*
1716
* @author robert
1817
*/
19-
public class AttackConfig extends TLSDelegateConfig {
20-
21-
@Parameter(names = "-executeAttack", description = "If this value is set the Attack is not only Tested, but also executed (WARNING)")
22-
private boolean executeAttack = false;
18+
public abstract class AttackConfig extends TLSDelegateConfig {
2319

2420
public AttackConfig(GeneralDelegate delegate) {
2521
super(delegate);
2622
}
2723

28-
public boolean isExecuteAttack() {
29-
return executeAttack;
30-
}
31-
32-
public void setExecuteAttack(boolean executeAttack) {
33-
this.executeAttack = executeAttack;
34-
}
24+
public abstract boolean isExecuteAttack();
3525
}

Attacks/src/main/java/de/rub/nds/tlsattacker/attacks/config/BleichenbacherCommandConfig.java

Lines changed: 57 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,18 @@
1010

1111
import com.beust.jcommander.Parameter;
1212
import com.beust.jcommander.ParametersDelegate;
13-
import de.rub.nds.tlsattacker.core.config.TLSDelegateConfig;
13+
import de.rub.nds.tlsattacker.attacks.config.delegate.AttackDelegate;
14+
import de.rub.nds.tlsattacker.core.config.Config;
1415
import de.rub.nds.tlsattacker.core.config.delegate.CiphersuiteDelegate;
1516
import de.rub.nds.tlsattacker.core.config.delegate.ClientDelegate;
1617
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
1718
import de.rub.nds.tlsattacker.core.config.delegate.HostnameExtensionDelegate;
1819
import de.rub.nds.tlsattacker.core.config.delegate.ProtocolVersionDelegate;
1920
import de.rub.nds.tlsattacker.core.constants.CipherSuite;
20-
import de.rub.nds.tlsattacker.core.workflow.TlsConfig;
2121
import java.util.LinkedList;
2222
import java.util.List;
23+
import org.apache.logging.log4j.Level;
24+
import org.apache.logging.log4j.core.config.Configurator;
2325

2426
/**
2527
*
@@ -30,27 +32,47 @@ public class BleichenbacherCommandConfig extends AttackConfig {
3032
public static final String ATTACK_COMMAND = "bleichenbacher";
3133

3234
@ParametersDelegate
33-
private final ClientDelegate clientDelegate;
35+
private ClientDelegate clientDelegate;
3436
@ParametersDelegate
35-
private final HostnameExtensionDelegate hostnameExtensionDelegate;
37+
private HostnameExtensionDelegate hostnameExtensionDelegate;
3638
@ParametersDelegate
37-
private final CiphersuiteDelegate ciphersuiteDelegate;
39+
private CiphersuiteDelegate ciphersuiteDelegate;
3840
@ParametersDelegate
39-
private final ProtocolVersionDelegate protocolVersionDelegate;
40-
41-
@Parameter(names = "-type", description = "Type of the Bleichenbacher Test results in a different number of server test quries (FAST/FULL)")
41+
private ProtocolVersionDelegate protocolVersionDelegate;
42+
@ParametersDelegate
43+
private AttackDelegate attackDelegate;
44+
@Parameter(names = "-valid_response", description = "Bleichenbacher oracle responds with true if the last server "
45+
+ "message contains this string")
46+
private String validResponseContent;
47+
@Parameter(names = "-invalid_response", description = "Bleichenbacher oracle responds with false if the last server "
48+
+ "message contains this string")
49+
private String invalidResponseContent;
50+
@Parameter(names = "-encrypted_premaster_secret", description = "Encrypted premaster secret from the RSA client key "
51+
+ "exchange message. You can retrieve this message from the Wireshark traffic. Find the client key exchange "
52+
+ "message, right click on the \"EncryptedPremaster\" value and copy this value as a Hex Stream.")
53+
private String encryptedPremasterSecret;
54+
@Parameter(names = "-type", description = "Type of the Bleichenbacher Test results in a different number of server test quries")
4255
private Type type = Type.FAST;
56+
@Parameter(names = "-msgPkcsConform", description = "Used by the real Bleichenbacher attack. Indicates whether the original "
57+
+ "message that we are going to decrypt is PKCS#1 conform or not (more precisely, whether it starts with 0x00 0x02.")
58+
private boolean msgPkcsConform = true;
4359

4460
public BleichenbacherCommandConfig(GeneralDelegate delegate) {
4561
super(delegate);
4662
clientDelegate = new ClientDelegate();
4763
hostnameExtensionDelegate = new HostnameExtensionDelegate();
4864
ciphersuiteDelegate = new CiphersuiteDelegate();
4965
protocolVersionDelegate = new ProtocolVersionDelegate();
66+
attackDelegate = new AttackDelegate();
5067
addDelegate(clientDelegate);
5168
addDelegate(hostnameExtensionDelegate);
5269
addDelegate(ciphersuiteDelegate);
5370
addDelegate(protocolVersionDelegate);
71+
addDelegate(attackDelegate);
72+
73+
if (delegate.getLogLevel() != Level.ALL && delegate.getLogLevel() != Level.TRACE) {
74+
Configurator.setAllLevels("de.rub.nds.tlsattacker.core", Level.ERROR);
75+
}
5476
}
5577

5678
public Type getType() {
@@ -62,8 +84,8 @@ public void setType(Type type) {
6284
}
6385

6486
@Override
65-
public TlsConfig createConfig() {
66-
TlsConfig config = super.createConfig();
87+
public Config createConfig() {
88+
Config config = super.createConfig();
6789
if (ciphersuiteDelegate.getCipherSuites() == null) {
6890
List<CipherSuite> cipherSuites = new LinkedList<>();
6991
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA);
@@ -73,14 +95,38 @@ public TlsConfig createConfig() {
7395
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256);
7496
cipherSuites.add(CipherSuite.TLS_RSA_WITH_RC4_128_MD5);
7597
cipherSuites.add(CipherSuite.TLS_RSA_WITH_RC4_128_SHA);
76-
config.setSupportedCiphersuites(cipherSuites);
98+
config.setDefaultClientSupportedCiphersuites(cipherSuites);
7799
}
100+
config.setQuickReceive(true);
101+
config.setEarlyStop(true);
78102
return config;
79103
}
80104

105+
@Override
106+
public boolean isExecuteAttack() {
107+
return attackDelegate.isExecuteAttack();
108+
}
109+
110+
public String getValidResponseContent() {
111+
return validResponseContent;
112+
}
113+
114+
public String getInvalidResponseContent() {
115+
return invalidResponseContent;
116+
}
117+
118+
public String getEncryptedPremasterSecret() {
119+
return encryptedPremasterSecret;
120+
}
121+
122+
public boolean isMsgPkcsConform() {
123+
return msgPkcsConform;
124+
}
125+
81126
public enum Type {
82127

83128
FULL,
84129
FAST
85130
}
131+
86132
}

Attacks/src/main/java/de/rub/nds/tlsattacker/attacks/config/Cve20162107CommandConfig.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010

1111
import com.beust.jcommander.Parameter;
1212
import com.beust.jcommander.ParametersDelegate;
13+
import de.rub.nds.tlsattacker.core.config.Config;
1314
import de.rub.nds.tlsattacker.core.config.delegate.CiphersuiteDelegate;
1415
import de.rub.nds.tlsattacker.core.config.delegate.ClientDelegate;
1516
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
1617
import de.rub.nds.tlsattacker.core.config.delegate.HostnameExtensionDelegate;
1718
import de.rub.nds.tlsattacker.core.constants.CipherSuite;
1819
import de.rub.nds.tlsattacker.core.constants.ProtocolVersion;
1920
import de.rub.nds.tlsattacker.core.exceptions.ConfigurationException;
20-
import de.rub.nds.tlsattacker.core.workflow.TlsConfig;
2121
import java.util.Collections;
2222
import java.util.LinkedList;
2323
import java.util.List;
@@ -33,11 +33,11 @@ public class Cve20162107CommandConfig extends AttackConfig {
3333
private List<ProtocolVersion> versions;
3434

3535
@ParametersDelegate
36-
private final ClientDelegate clientDelegate;
36+
private ClientDelegate clientDelegate;
3737
@ParametersDelegate
38-
private final CiphersuiteDelegate cipherSuiteDelegate;
38+
private CiphersuiteDelegate cipherSuiteDelegate;
3939
@ParametersDelegate
40-
private final HostnameExtensionDelegate hostnameExtensionDelegate;
40+
private HostnameExtensionDelegate hostnameExtensionDelegate;
4141

4242
public Cve20162107CommandConfig(GeneralDelegate delegate) {
4343
super(delegate);
@@ -63,18 +63,23 @@ public void setVersions(List<ProtocolVersion> versions) {
6363
}
6464

6565
@Override
66-
public TlsConfig createConfig() {
67-
TlsConfig config = super.createConfig();
66+
public boolean isExecuteAttack() {
67+
return false;
68+
}
69+
70+
@Override
71+
public Config createConfig() {
72+
Config config = super.createConfig();
6873
if (cipherSuiteDelegate.getCipherSuites() == null) {
6974
List<CipherSuite> cipherSuites = new LinkedList<>();
7075
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA);
7176
cipherSuites.add(CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA);
7277
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256);
7378
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA);
7479
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256);
75-
config.setSupportedCiphersuites(cipherSuites);
80+
config.setDefaultClientSupportedCiphersuites(cipherSuites);
7681
}
77-
for (CipherSuite suite : config.getSupportedCiphersuites()) {
82+
for (CipherSuite suite : config.getDefaultClientSupportedCiphersuites()) {
7883
if (!suite.isCBC()) {
7984
throw new ConfigurationException("This attack only works with CBC Ciphersuites");
8085
}

0 commit comments

Comments
 (0)