Skip to content

Commit 3ef01da

Browse files
authored
Merge pull request #390 from RUB-NDS/PaddingOracleWIP
Padding oracle wip
2 parents 2148311 + e5a5a59 commit 3ef01da

File tree

53 files changed

+1213
-461
lines changed

Some content is hidden

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

53 files changed

+1213
-461
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
import de.rub.nds.tlsattacker.attacks.config.PoodleCommandConfig;
2121
import de.rub.nds.tlsattacker.attacks.config.SimpleMitmProxyCommandConfig;
2222
import de.rub.nds.tlsattacker.attacks.config.TLSPoodleCommandConfig;
23-
import de.rub.nds.tlsattacker.attacks.config.TokenBindingMitmCommandConfig;
2423
import de.rub.nds.tlsattacker.attacks.config.TooManyAlgorithmsAttackConfig;
2524
import de.rub.nds.tlsattacker.attacks.config.WinshockCommandConfig;
25+
import de.rub.nds.tlsattacker.attacks.config.delegate.GeneralAttackDelegate;
2626
import de.rub.nds.tlsattacker.attacks.impl.Attacker;
2727
import de.rub.nds.tlsattacker.attacks.impl.BleichenbacherAttacker;
2828
import de.rub.nds.tlsattacker.attacks.impl.PskBruteForcerAttackServer;
@@ -35,7 +35,6 @@
3535
import de.rub.nds.tlsattacker.attacks.impl.PoodleAttacker;
3636
import de.rub.nds.tlsattacker.attacks.impl.SimpleMitmProxy;
3737
import de.rub.nds.tlsattacker.attacks.impl.TLSPoodleAttacker;
38-
import de.rub.nds.tlsattacker.attacks.impl.TokenBindingMitm;
3938
import de.rub.nds.tlsattacker.attacks.impl.TooManyAlgorithmsAttacker;
4039
import de.rub.nds.tlsattacker.attacks.impl.WinshockAttacker;
4140
import de.rub.nds.tlsattacker.core.config.TLSDelegateConfig;
@@ -49,7 +48,7 @@ public class Main {
4948
private static Logger LOGGER = LogManager.getLogger(Main.class.getName());
5049

5150
public static void main(String[] args) {
52-
GeneralDelegate generalDelegate = new GeneralDelegate();
51+
GeneralDelegate generalDelegate = new GeneralAttackDelegate();
5352
JCommander jc = new JCommander(generalDelegate);
5453
BleichenbacherCommandConfig bleichenbacherTest = new BleichenbacherCommandConfig(generalDelegate);
5554
jc.addCommand(BleichenbacherCommandConfig.ATTACK_COMMAND, bleichenbacherTest);
@@ -165,10 +164,10 @@ public static void main(String[] args) {
165164
} else {
166165

167166
if (attacker.getConfig().isExecuteAttack()) {
168-
attacker.executeAttack();
167+
attacker.checkVulnerability();
169168
} else {
170169
try {
171-
Boolean result = attacker.isVulnerable();
170+
Boolean result = attacker.checkVulnerability();
172171
LOGGER.info("Vulnerable:" + (result == null ? "Uncertain" : result.toString()));
173172
} catch (UnsupportedOperationException E) {
174173
LOGGER.info("The selected attacker is currently not implemented");

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

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

11+
import com.beust.jcommander.Parameter;
1112
import de.rub.nds.tlsattacker.core.config.TLSDelegateConfig;
1213
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
1314

1415
public abstract class AttackConfig extends TLSDelegateConfig {
1516

17+
@Parameter(names = "-skipConnectionCheck", description = "If set to true the Attacker will not check if the target is reachable.")
18+
private boolean skipConnectionCheck = false;
19+
1620
public AttackConfig(GeneralDelegate delegate) {
1721
super(delegate);
1822
}
1923

2024
public abstract boolean isExecuteAttack();
25+
26+
public boolean isSkipConnectionCheck() {
27+
return skipConnectionCheck;
28+
}
29+
30+
public void setSkipConnectionCheck(boolean skipConnectionCheck) {
31+
this.skipConnectionCheck = skipConnectionCheck;
32+
}
2133
}

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

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@
1717
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
1818
import de.rub.nds.tlsattacker.core.config.delegate.HostnameExtensionDelegate;
1919
import de.rub.nds.tlsattacker.core.config.delegate.ProtocolVersionDelegate;
20+
import de.rub.nds.tlsattacker.core.constants.AlgorithmResolver;
2021
import de.rub.nds.tlsattacker.core.constants.CipherSuite;
22+
import de.rub.nds.tlsattacker.core.constants.KeyExchangeAlgorithm;
23+
import de.rub.nds.tlsattacker.transport.TransportHandlerType;
2124
import java.util.LinkedList;
2225
import java.util.List;
23-
import org.apache.logging.log4j.Level;
24-
import org.apache.logging.log4j.core.config.Configurator;
2526

2627
public class BleichenbacherCommandConfig extends AttackConfig {
2728

@@ -37,17 +38,12 @@ public class BleichenbacherCommandConfig extends AttackConfig {
3738
private ProtocolVersionDelegate protocolVersionDelegate;
3839
@ParametersDelegate
3940
private AttackDelegate attackDelegate;
40-
@Parameter(names = "-valid_response", description = "Bleichenbacher oracle responds with true if the last server "
41-
+ "message contains this string")
42-
private String validResponseContent;
43-
@Parameter(names = "-invalid_response", description = "Bleichenbacher oracle responds with false if the last server "
44-
+ "message contains this string")
45-
private String invalidResponseContent;
4641
@Parameter(names = "-encrypted_premaster_secret", description = "Encrypted premaster secret from the RSA client key "
4742
+ "exchange message. You can retrieve this message from the Wireshark traffic. Find the client key exchange "
4843
+ "message, right click on the \"EncryptedPremaster\" value and copy this value as a Hex Stream.")
4944
private String encryptedPremasterSecret;
50-
@Parameter(names = "-type", description = "Type of the Bleichenbacher Test results in a different number of server test quries")
45+
@Parameter(names = "-type", description = "Type of the Bleichenbacher test. FAST contains only basic server test queries. "
46+
+ "FULL results in a comprehensive server evaluation.")
5147
private Type type = Type.FAST;
5248
@Parameter(names = "-msgPkcsConform", description = "Used by the real Bleichenbacher attack. Indicates whether the original "
5349
+ "message that we are going to decrypt is PKCS#1 conform or not (more precisely, whether it starts with 0x00 0x02.")
@@ -65,10 +61,6 @@ public BleichenbacherCommandConfig(GeneralDelegate delegate) {
6561
addDelegate(ciphersuiteDelegate);
6662
addDelegate(protocolVersionDelegate);
6763
addDelegate(attackDelegate);
68-
69-
if (delegate.getLogLevel() != Level.ALL && delegate.getLogLevel() != Level.TRACE) {
70-
Configurator.setAllLevels("de.rub.nds.tlsattacker.core", Level.ERROR);
71-
}
7264
}
7365

7466
public Type getType() {
@@ -84,17 +76,20 @@ public Config createConfig() {
8476
Config config = super.createConfig();
8577
if (ciphersuiteDelegate.getCipherSuites() == null) {
8678
List<CipherSuite> cipherSuites = new LinkedList<>();
87-
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA);
88-
cipherSuites.add(CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA);
89-
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256);
90-
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA);
91-
cipherSuites.add(CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256);
92-
cipherSuites.add(CipherSuite.TLS_RSA_WITH_RC4_128_MD5);
93-
cipherSuites.add(CipherSuite.TLS_RSA_WITH_RC4_128_SHA);
79+
for (CipherSuite suite : CipherSuite.getImplemented()) {
80+
if (AlgorithmResolver.getKeyExchangeAlgorithm(suite) == KeyExchangeAlgorithm.RSA
81+
|| AlgorithmResolver.getKeyExchangeAlgorithm(suite) == KeyExchangeAlgorithm.RSA_PSK) {
82+
cipherSuites.add(suite);
83+
}
84+
}
9485
config.setDefaultClientSupportedCiphersuites(cipherSuites);
9586
}
9687
config.setQuickReceive(true);
9788
config.setEarlyStop(true);
89+
config.setAddSignatureAndHashAlgrorithmsExtension(true);
90+
config.setStopActionsAfterFatal(true);
91+
config.setAddECPointFormatExtension(false);
92+
config.setAddEllipticCurveExtension(false);
9893
return config;
9994
}
10095

@@ -103,14 +98,6 @@ public boolean isExecuteAttack() {
10398
return attackDelegate.isExecuteAttack();
10499
}
105100

106-
public String getValidResponseContent() {
107-
return validResponseContent;
108-
}
109-
110-
public String getInvalidResponseContent() {
111-
return invalidResponseContent;
112-
}
113-
114101
public String getEncryptedPremasterSecret() {
115102
return encryptedPremasterSecret;
116103
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import de.rub.nds.tlsattacker.core.constants.CipherSuite;
1919
import de.rub.nds.tlsattacker.core.constants.ProtocolVersion;
2020
import de.rub.nds.tlsattacker.core.exceptions.ConfigurationException;
21+
import de.rub.nds.tlsattacker.transport.TransportHandlerType;
2122
import java.util.Collections;
2223
import java.util.LinkedList;
2324
import java.util.List;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
1616
import de.rub.nds.tlsattacker.core.config.delegate.HostnameExtensionDelegate;
1717
import de.rub.nds.tlsattacker.core.config.delegate.ProtocolVersionDelegate;
18+
import de.rub.nds.tlsattacker.transport.TransportHandlerType;
1819

1920
public class EarlyCCSCommandConfig extends AttackConfig {
2021
public static final String ATTACK_COMMAND = "early_ccs";
@@ -47,7 +48,8 @@ public boolean isExecuteAttack() {
4748

4849
@Override
4950
public Config createConfig() {
50-
return super.createConfig();
51+
Config config = super.createConfig();
52+
return config;
5153
}
5254

5355
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import de.rub.nds.tlsattacker.core.config.delegate.ProtocolVersionDelegate;
1919
import de.rub.nds.tlsattacker.core.constants.HeartbeatMode;
2020
import de.rub.nds.tlsattacker.core.workflow.factory.WorkflowTraceType;
21+
import de.rub.nds.tlsattacker.transport.TransportHandlerType;
2122

2223
public class HeartbleedCommandConfig extends AttackConfig {
2324

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,6 @@ public InvalidCurveAttackConfig(GeneralDelegate delegate) {
9393
addDelegate(ciphersuiteDelegate);
9494
addDelegate(protocolVersionDelegate);
9595
addDelegate(attackDelegate);
96-
if (delegate.getLogLevel() != Level.ALL && delegate.getLogLevel() != Level.TRACE) {
97-
Configurator.setAllLevels("de.rub.nds.tlsattacker.core", Level.ERROR);
98-
}
99-
100-
if (delegate.getLogLevel() == Level.TRACE) {
101-
Configurator.setAllLevels("de.rub.nds.tlsattacker.core", Level.TRACE);
102-
}
103-
10496
}
10597

10698
public BigInteger getPremasterSecret() {

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,6 @@ public PskBruteForcerAttackClientCommandConfig(GeneralDelegate delegate) {
6565
addDelegate(ciphersuiteDelegate);
6666
addDelegate(protocolVersionDelegate);
6767
addDelegate(attackDelegate);
68-
69-
if (delegate.getLogLevel() != Level.ALL && delegate.getLogLevel() != Level.TRACE) {
70-
Configurator.setAllLevels("de.rub.nds.tlsattacker.core", Level.ERROR);
71-
}
7268
}
7369

7470
@Override

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,6 @@ public PskBruteForcerAttackServerCommandConfig(GeneralDelegate delegate) {
7575
addDelegate(ciphersuiteDelegate);
7676
addDelegate(protocolVersionDelegate);
7777
addDelegate(attackDelegate);
78-
79-
if (delegate.getLogLevel() != Level.ALL && delegate.getLogLevel() != Level.TRACE) {
80-
Configurator.setAllLevels("de.rub.nds.tlsattacker.core", Level.ERROR);
81-
}
8278
}
8379

8480
@Override
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
3+
*
4+
* Copyright 2014-2017 Ruhr University Bochum / Hackmanit GmbH
5+
*
6+
* Licensed under Apache License 2.0
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*/
9+
package de.rub.nds.tlsattacker.attacks.config.delegate;
10+
11+
import de.rub.nds.tlsattacker.core.config.Config;
12+
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
13+
import de.rub.nds.tlsattacker.util.UnlimitedStrengthEnabler;
14+
import java.security.Provider;
15+
import java.security.Security;
16+
import org.apache.logging.log4j.Level;
17+
import org.apache.logging.log4j.core.config.Configurator;
18+
import org.bouncycastle.jce.provider.BouncyCastleProvider;
19+
20+
public class GeneralAttackDelegate extends GeneralDelegate {
21+
22+
public GeneralAttackDelegate() {
23+
}
24+
25+
@Override
26+
public void applyDelegate(Config config) {
27+
Security.addProvider(new BouncyCastleProvider());
28+
if (isDebug()) {
29+
setLogLevel(Level.DEBUG);
30+
}
31+
Configurator.setRootLevel(getLogLevel());
32+
Configurator.setAllLevels("de.rub.nds.modifiablevariable", Level.FATAL);
33+
if (getLogLevel() == Level.ALL) {
34+
Configurator.setAllLevels("de.rub.nds.tlsattacker.core", Level.ALL);
35+
Configurator.setAllLevels("de.rub.nds.tlsattacker.transport", Level.DEBUG);
36+
} else if (getLogLevel() == Level.TRACE) {
37+
Configurator.setAllLevels("de.rub.nds.tlsattacker.core", Level.DEBUG);
38+
Configurator.setAllLevels("de.rub.nds.tlsattacker.transport", Level.DEBUG);
39+
} else {
40+
Configurator.setAllLevels("de.rub.nds.tlsattacker.core", Level.OFF);
41+
}
42+
LOGGER.debug("Using the following security providers");
43+
for (Provider p : Security.getProviders()) {
44+
LOGGER.debug("Provider {}, version, {}", p.getName(), p.getVersion());
45+
}
46+
47+
// remove stupid Oracle JDK security restriction (otherwise, it is not
48+
// possible to use strong crypto with Oracle JDK)
49+
UnlimitedStrengthEnabler.enable();
50+
}
51+
}

0 commit comments

Comments
 (0)