Skip to content

Commit a37c486

Browse files
committed
Merge origin/master into GUIRework
Conflicts: src/main/java/de/rub/nds/tlsscanner/MultiThreadedScanJobExecutor.java
2 parents fd4543a + 70b3ddb commit a37c486

Some content is hidden

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

52 files changed

+1673
-537
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
target/
22
apps/
3+
log/
34
pom.xml.tag
45
pom.xml.releaseBackup
56
pom.xml.versionsBackup

nbactions.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
1111
</goals>
1212
<properties>
13-
<exec.args>-classpath %classpath de.rub.nds.tlsscanner.Main -connect 127.0.0.1:4433</exec.args>
13+
<exec.args>-classpath %classpath de.rub.nds.tlsscanner.Main -connect scotthelme.co.uk -threads 20 -danger 0</exec.args>
1414
<exec.executable>java</exec.executable>
1515
</properties>
1616
</action>
@@ -24,7 +24,7 @@
2424
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
2525
</goals>
2626
<properties>
27-
<exec.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath de.rub.nds.tlsscanner.Main -connect 127.0.0.1:4433</exec.args>
27+
<exec.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath de.rub.nds.tlsscanner.Main -connect scotthelme.co.uk -threads 20 -danger 0</exec.args>
2828
<exec.executable>java</exec.executable>
2929
<jpda.listen>true</jpda.listen>
3030
</properties>
@@ -39,7 +39,7 @@
3939
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
4040
</goals>
4141
<properties>
42-
<exec.args>-classpath %classpath de.rub.nds.tlsscanner.Main -connect 127.0.0.1:4433</exec.args>
42+
<exec.args>-classpath %classpath de.rub.nds.tlsscanner.Main -connect scotthelme.co.uk -threads 20 -danger 0</exec.args>
4343
<exec.executable>java</exec.executable>
4444
</properties>
4545
</action>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<artifactId>TLS-Scanner</artifactId>
55
<groupId>de.rub.nds.tlsscanner</groupId>
6-
<version>2.3</version>
6+
<version>2.4</version>
77
<packaging>jar</packaging>
88
<dependencies>
99
<dependency>

src/main/java/de/rub/nds/tlsscanner/Main.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,10 @@
1010

1111
import com.beust.jcommander.JCommander;
1212
import com.beust.jcommander.ParameterException;
13-
import de.rub.nds.tlsattacker.core.config.Config;
1413
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
1514
import de.rub.nds.tlsattacker.core.exceptions.ConfigurationException;
1615
import de.rub.nds.tlsscanner.config.ScannerConfig;
1716
import de.rub.nds.tlsscanner.report.SiteReport;
18-
import java.io.BufferedReader;
19-
import java.io.File;
20-
import java.io.FileNotFoundException;
21-
import java.io.FileReader;
2217
import java.io.IOException;
2318
import org.apache.logging.log4j.LogManager;
2419
import org.apache.logging.log4j.Logger;
@@ -58,18 +53,4 @@ public static void main(String[] args) throws IOException {
5853
commander.usage();
5954
}
6055
}
61-
62-
public static void scanFile(File f) throws FileNotFoundException, IOException {
63-
GeneralDelegate delegate = new GeneralDelegate();
64-
delegate.applyDelegate(Config.createConfig());
65-
BufferedReader reader = new BufferedReader(new FileReader(f));
66-
String line = null;
67-
line = reader.readLine();
68-
while ((line = reader.readLine()) != null) {
69-
String host = line.split(",")[2];
70-
TlsScanner scanner = new TlsScanner(host, false);
71-
scanner.scan();
72-
}
73-
System.exit(0);
74-
}
7556
}

src/main/java/de/rub/nds/tlsscanner/MultiThreadedScanJobExecutor.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*/
99
package de.rub.nds.tlsscanner;
1010

11+
import de.rub.nds.tlsattacker.core.workflow.NamedThreadFactory;
1112
import de.rub.nds.tlsattacker.core.config.delegate.ClientDelegate;
1213
import de.rub.nds.tlsscanner.config.ScannerConfig;
1314
import de.rub.nds.tlsscanner.constants.ProbeType;
@@ -37,8 +38,8 @@ public class MultiThreadedScanJobExecutor extends ScanJobExecutor {
3738

3839
private final ExecutorService executor;
3940

40-
public MultiThreadedScanJobExecutor(int threadCount) {
41-
executor = Executors.newFixedThreadPool(threadCount);
41+
public MultiThreadedScanJobExecutor(int threadCount, String prefix) {
42+
executor = Executors.newFixedThreadPool(threadCount, new NamedThreadFactory(prefix));
4243
}
4344

4445
public MultiThreadedScanJobExecutor(ExecutorService executor) {
@@ -159,4 +160,9 @@ private void checkProbesDone(List<Future<ProbeResult>> futureResults, ProgressBa
159160
}
160161
}
161162
}
163+
164+
@Override
165+
public void shutdown() {
166+
executor.shutdown();
167+
}
162168
}

src/main/java/de/rub/nds/tlsscanner/ScanJob.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
import de.rub.nds.tlsscanner.probe.TlsProbe;
1212
import de.rub.nds.tlsscanner.report.after.AfterProbe;
13-
import java.util.LinkedList;
1413
import java.util.List;
1514

1615
/**

src/main/java/de/rub/nds/tlsscanner/ScanJobExecutor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@
1515
public abstract class ScanJobExecutor {
1616

1717
public abstract SiteReport execute(ScannerConfig config, ScanJob scanJob);
18+
19+
public abstract void shutdown();
1820
}
Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,15 @@
1-
/*
2-
* To change this license header, choose License Headers in Project Properties.
3-
* To change this template file, choose Tools | Templates
4-
* and open the template in the editor.
5-
*/
61
package de.rub.nds.tlsscanner;
72

83
import de.rub.nds.tlsscanner.config.ScannerConfig;
94

10-
/**
11-
*
12-
* @author robert
13-
*/
145
public class ScanJobExecutorFactory {
156

167
public static ScanJobExecutor getScanJobExecutor(ScannerConfig config) {
178
switch (config.getThreads()) {
189
case 1:
1910
return new SingleThreadedScanJobExecutor();
2011
default:
21-
return new MultiThreadedScanJobExecutor(config.getThreads());
12+
return new MultiThreadedScanJobExecutor(config.getThreads(), config.getClientDelegate().getHost());
2213
}
2314
}
2415
}

src/main/java/de/rub/nds/tlsscanner/SingleThreadedScanJobExecutor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,8 @@ public SiteReport execute(ScannerConfig config, ScanJob scanJob) {
128128
return report;
129129
}
130130
}
131+
132+
@Override
133+
public void shutdown() {
134+
}
131135
}

src/main/java/de/rub/nds/tlsscanner/TlsScanner.java

Lines changed: 115 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,22 @@
1010

1111
import de.rub.nds.tlsattacker.attacks.connectivity.ConnectivityChecker;
1212
import de.rub.nds.tlsattacker.core.config.Config;
13-
import de.rub.nds.tlsattacker.core.config.delegate.ClientDelegate;
14-
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
13+
import de.rub.nds.tlsattacker.core.workflow.NamedThreadFactory;
14+
import de.rub.nds.tlsattacker.core.workflow.ParallelExecutor;
1515
import de.rub.nds.tlsscanner.config.ScannerConfig;
1616
import de.rub.nds.tlsscanner.constants.ProbeType;
1717
import de.rub.nds.tlsscanner.probe.BleichenbacherProbe;
1818
import de.rub.nds.tlsscanner.probe.CertificateProbe;
1919
import de.rub.nds.tlsscanner.probe.CiphersuiteOrderProbe;
2020
import de.rub.nds.tlsscanner.probe.CiphersuiteProbe;
21+
import de.rub.nds.tlsscanner.probe.CommonBugProbe;
2122
import de.rub.nds.tlsscanner.probe.CompressionsProbe;
2223
import de.rub.nds.tlsscanner.probe.Cve20162107Probe;
2324
import de.rub.nds.tlsscanner.probe.DrownProbe;
2425
import de.rub.nds.tlsscanner.probe.EarlyCcsProbe;
2526
import de.rub.nds.tlsscanner.probe.ExtensionProbe;
2627
import de.rub.nds.tlsscanner.probe.HeartbleedProbe;
28+
import de.rub.nds.tlsscanner.probe.HttpHeaderProbe;
2729
import de.rub.nds.tlsscanner.probe.InvalidCurveProbe;
2830
import de.rub.nds.tlsscanner.probe.MacProbe;
2931
import de.rub.nds.tlsscanner.probe.NamedCurvesProbe;
@@ -40,83 +42,148 @@
4042
import de.rub.nds.tlsscanner.probe.TokenbindingProbe;
4143
import de.rub.nds.tlsscanner.report.after.AfterProbe;
4244
import de.rub.nds.tlsscanner.report.after.FreakAfterProbe;
45+
import de.rub.nds.tlsscanner.report.after.LogjamAfterprobe;
4346
import de.rub.nds.tlsscanner.report.after.Sweet32AfterProbe;
4447
import java.util.LinkedList;
4548
import java.util.List;
46-
import org.apache.logging.log4j.Level;
47-
import org.apache.logging.log4j.core.config.Configurator;
49+
import org.apache.logging.log4j.LogManager;
50+
import org.apache.logging.log4j.Logger;
4851

4952
/**
5053
*
5154
* @author Robert Merget - [email protected]
5255
*/
5356
public class TlsScanner {
5457

58+
private final Logger LOGGER = LogManager.getLogger();
59+
5560
private final ScanJobExecutor executor;
61+
private final ParallelExecutor parallelExecutor;
5662
private final ScannerConfig config;
57-
58-
public TlsScanner(String websiteHost, boolean attackingScans) {
59-
config = new ScannerConfig(new GeneralDelegate());
60-
this.executor = ScanJobExecutorFactory.getScanJobExecutor(config);
61-
ClientDelegate clientDelegate = (ClientDelegate) config.getDelegateList().get(1);
62-
clientDelegate.setHost(websiteHost);
63-
Configurator.setAllLevels("de.rub.nds.tlsattacker", Level.WARN);
64-
}
63+
private final boolean closeAfterFinish;
64+
private final boolean closeAfterFinishParallel;
65+
private final List<TlsProbe> phaseOneTestList;
66+
private final List<TlsProbe> phaseTwoTestList;
67+
private final List<AfterProbe> afterList;
6568

6669
public TlsScanner(ScannerConfig config) {
6770
this.executor = ScanJobExecutorFactory.getScanJobExecutor(config);
6871
this.config = config;
72+
closeAfterFinish = true;
73+
closeAfterFinishParallel = true;
74+
parallelExecutor = new ParallelExecutor(config.getAggroLevel(), 3, new NamedThreadFactory(config.getClientDelegate().getHost() + "-Worker"));
75+
this.phaseOneTestList = new LinkedList<>();
76+
this.phaseTwoTestList = new LinkedList<>();
77+
this.afterList = new LinkedList<>();
78+
fillDefaultProbeLists();
6979
}
7080

7181
public TlsScanner(ScannerConfig config, ScanJobExecutor executor) {
7282
this.config = config;
7383
this.executor = executor;
84+
closeAfterFinish = false;
85+
closeAfterFinishParallel = true;
86+
parallelExecutor = new ParallelExecutor(config.getAggroLevel(), 3, new NamedThreadFactory(config.getClientDelegate().getHost() + "-Worker"));
87+
this.phaseOneTestList = new LinkedList<>();
88+
this.phaseTwoTestList = new LinkedList<>();
89+
this.afterList = new LinkedList<>();
90+
fillDefaultProbeLists();
7491
}
7592

76-
public SiteReport scan() {
77-
List<TlsProbe> phaseOneTestList = new LinkedList<>();
78-
List<TlsProbe> phaseTwoTestList = new LinkedList<>();
93+
public TlsScanner(ScannerConfig config, ScanJobExecutor executor, ParallelExecutor parallelExecutor) {
94+
this.config = config;
95+
this.executor = executor;
96+
this.parallelExecutor = parallelExecutor;
97+
closeAfterFinish = false;
98+
closeAfterFinishParallel = false;
99+
this.phaseOneTestList = new LinkedList<>();
100+
this.phaseTwoTestList = new LinkedList<>();
101+
this.afterList = new LinkedList<>();
102+
fillDefaultProbeLists();
103+
}
79104

80-
if (prechecks()) {
81-
phaseOneTestList.add(new SniProbe(config));
82-
phaseOneTestList.add(new CompressionsProbe(config));
83-
phaseOneTestList.add(new NamedCurvesProbe(config));
84-
phaseOneTestList.add(new CertificateProbe(config));
85-
phaseOneTestList.add(new ProtocolVersionProbe(config));
86-
phaseOneTestList.add(new CiphersuiteProbe(config));
87-
phaseOneTestList.add(new CiphersuiteOrderProbe(config));
88-
phaseOneTestList.add(new ExtensionProbe(config));
89-
phaseOneTestList.add(new Tls13Probe(config));
90-
phaseOneTestList.add(new TokenbindingProbe(config));
105+
public TlsScanner(ScannerConfig config, ScanJobExecutor executor, ParallelExecutor parallelExecutor, List<TlsProbe> phaseOneTestList, List<TlsProbe> phaseTwoTestList, List<AfterProbe> afterList) {
106+
this.executor = executor;
107+
this.parallelExecutor = parallelExecutor;
108+
this.config = config;
109+
this.phaseOneTestList = phaseOneTestList;
110+
this.phaseTwoTestList = phaseTwoTestList;
111+
this.afterList = afterList;
112+
closeAfterFinish = false;
113+
closeAfterFinishParallel = false;
114+
}
91115

92-
phaseTwoTestList.add(new ResumptionProbe(config));
93-
phaseTwoTestList.add(new RenegotiationProbe(config));
94-
phaseTwoTestList.add(new HeartbleedProbe(config));
95-
phaseTwoTestList.add(new PaddingOracleProbe(config));
96-
phaseTwoTestList.add(new BleichenbacherProbe(config));
97-
phaseTwoTestList.add(new PoodleProbe(config));
98-
phaseTwoTestList.add(new TlsPoodleProbe(config));
99-
phaseTwoTestList.add(new Cve20162107Probe(config));
100-
phaseTwoTestList.add(new InvalidCurveProbe(config));
101-
phaseTwoTestList.add(new DrownProbe(config));
102-
phaseTwoTestList.add(new EarlyCcsProbe(config));
103-
phaseTwoTestList.add(new MacProbe(config));
116+
private void fillDefaultProbeLists() {
117+
phaseOneTestList.add(new CommonBugProbe(config, parallelExecutor));
118+
phaseOneTestList.add(new SniProbe(config, parallelExecutor));
119+
phaseOneTestList.add(new CompressionsProbe(config, parallelExecutor));
120+
phaseOneTestList.add(new NamedCurvesProbe(config, parallelExecutor));
121+
phaseOneTestList.add(new CertificateProbe(config, parallelExecutor));
122+
phaseOneTestList.add(new ProtocolVersionProbe(config, parallelExecutor));
123+
phaseOneTestList.add(new CiphersuiteProbe(config, parallelExecutor));
124+
phaseOneTestList.add(new CiphersuiteOrderProbe(config, parallelExecutor));
125+
phaseOneTestList.add(new ExtensionProbe(config, parallelExecutor));
126+
phaseOneTestList.add(new Tls13Probe(config, parallelExecutor));
127+
phaseOneTestList.add(new TokenbindingProbe(config, parallelExecutor));
128+
phaseOneTestList.add(new HttpHeaderProbe(config, parallelExecutor));
129+
phaseTwoTestList.add(new ResumptionProbe(config, parallelExecutor));
130+
phaseTwoTestList.add(new RenegotiationProbe(config, parallelExecutor));
131+
phaseTwoTestList.add(new HeartbleedProbe(config, parallelExecutor));
132+
phaseTwoTestList.add(new PaddingOracleProbe(config, parallelExecutor));
133+
phaseTwoTestList.add(new BleichenbacherProbe(config, parallelExecutor));
134+
phaseTwoTestList.add(new PoodleProbe(config, parallelExecutor));
135+
phaseTwoTestList.add(new TlsPoodleProbe(config, parallelExecutor));
136+
phaseTwoTestList.add(new Cve20162107Probe(config, parallelExecutor));
137+
phaseTwoTestList.add(new InvalidCurveProbe(config, parallelExecutor));
138+
phaseTwoTestList.add(new DrownProbe(config, parallelExecutor));
139+
phaseTwoTestList.add(new EarlyCcsProbe(config, parallelExecutor));
140+
phaseTwoTestList.add(new MacProbe(config, parallelExecutor));
141+
afterList.add(new Sweet32AfterProbe());
142+
afterList.add(new FreakAfterProbe());
143+
afterList.add(new LogjamAfterprobe());
144+
}
145+
146+
public SiteReport scan() {
147+
boolean isConnectable = false;
148+
try {
149+
if (isConnectable()) {
150+
LOGGER.debug(config.getClientDelegate().getHost() + " is connectable");
151+
if (speaksTls()) {
152+
LOGGER.debug(config.getClientDelegate().getHost() + " is connectable");
153+
ScanJob job = new ScanJob(phaseOneTestList, phaseTwoTestList, afterList);
154+
SiteReport report = executor.execute(config, job);
155+
return report;
156+
} else {
157+
isConnectable = true;
158+
}
159+
}
160+
SiteReport report = new SiteReport(config.getClientDelegate().getHost(), new LinkedList<ProbeType>(), config.isNoColor());
161+
report.setServerIsAlive(isConnectable);
162+
report.setSupportsSslTls(false);
163+
return report;
164+
} finally {
165+
closeExecutorsIfNeeded();
166+
}
167+
}
104168

105-
List<AfterProbe> afterList = new LinkedList<>();
106-
afterList.add(new Sweet32AfterProbe());
107-
afterList.add(new FreakAfterProbe());
108-
ScanJob job = new ScanJob(phaseOneTestList, phaseTwoTestList, afterList);
109-
return executor.execute(config, job);
169+
private void closeExecutorsIfNeeded() {
170+
if (closeAfterFinish) {
171+
executor.shutdown();
172+
}
173+
if (closeAfterFinishParallel) {
174+
parallelExecutor.shutdown();
110175
}
111-
// testList.add(new SignatureAndHashAlgorithmProbe(websiteHost));
112-
SiteReport report = new SiteReport(config.getClientDelegate().getHost(), new LinkedList<ProbeType>(), config.isNoColor());
113-
report.setServerIsAlive(false);
114-
return report;
115176
}
116177

117-
public boolean prechecks() {
178+
public boolean isConnectable() {
118179
Config tlsConfig = config.createConfig();
119180
ConnectivityChecker checker = new ConnectivityChecker(tlsConfig.getDefaultClientConnection());
120181
return checker.isConnectable();
121182
}
183+
184+
private boolean speaksTls() {
185+
Config tlsConfig = config.createConfig();
186+
ConnectivityChecker checker = new ConnectivityChecker(tlsConfig.getDefaultClientConnection());
187+
return checker.speaksTls(tlsConfig);
188+
}
122189
}

0 commit comments

Comments
 (0)