Skip to content

Conversation

@c-southwest
Copy link
Collaborator

openssl 1.1.1k client learn logs.txt

I ran the learning for about 4 hours, generated 39 hypotheses, and it was terminated by NonDeterminismException

I will remove context.addStepContext() and run learning again, tomorrow I will update what happend.

@c-southwest
Copy link
Collaborator Author

c-southwest commented May 30, 2025

This time terminated by another exception after generated 19 hypothesis (90 minutes):

03:12:49 [main] ERROR : statefuzzer.core.StateFuzzerStandard - Exception generated during learning
java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
Index 1 out of bounds for length 1
03:12:49 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Finished Experiment
03:12:49 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Number of refinement rounds: 19
03:12:49 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Results stored in output/openssl-1.1.1k_client_dhe_ecdhe_rsa_cert_reneg
java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
	at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
	at java.base/java.util.Objects.checkIndex(Objects.java:361)
	at java.base/java.util.ArrayList.get(ArrayList.java:427)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsStepContext.lambda$getReceivedMessageRecordPairs$2(TlsStepContext.java:91)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.IntPipeline$1$1.accept(IntPipeline.java:180)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:104)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:711)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsStepContext.getReceivedMessageRecordPairs(TlsStepContext.java:92)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsExecutionContext.lambda$getReceivedMessagesAndRecords$5(TlsExecutionContext.java:93)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsExecutionContext.getReceivedMessagesAndRecords(TlsExecutionContext.java:94)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsExecutionContext.getReceivedMessagesAndRecords(TlsExecutionContext.java:98)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.symbols.inputs.ServerHelloInput.postReceiveUpdate(ServerHelloInput.java:93)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.symbols.inputs.ServerHelloInput.postReceiveUpdate(ServerHelloInput.java:18)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper.postReceive(InputMapper.java:92)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer.doExecute(MapperComposer.java:116)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer.execute(MapperComposer.java:96)
	at se.uu.it.dtlsfuzzer.components.sul.core.TlsSul.executeInput(TlsSul.java:310)
	at se.uu.it.dtlsfuzzer.components.sul.core.TlsSul.step(TlsSul.java:281)
	at se.uu.it.dtlsfuzzer.components.sul.core.TlsSul.step(TlsSul.java:48)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.SulProcessWrapper.step(SulProcessWrapper.java:97)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.SulLivenessWrapper.step(SulLivenessWrapper.java:71)
	at de.learnlib.filter.statistic.sul.CounterSUL.step(CounterSUL.java:54)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.TimeoutWrapper.step(TimeoutWrapper.java:68)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.LoggingWrapper.step(LoggingWrapper.java:61)
	at de.learnlib.oracle.membership.SULOracle.answerQuery(SULOracle.java:59)
	at de.learnlib.oracle.membership.SULOracle.answerQuery(SULOracle.java:31)
	at de.learnlib.oracle.MembershipOracle.answerQuery(MembershipOracle.java:40)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.learner.oracles.NonDeterminismRetryingSULOracle.processQuery(NonDeterminismRetryingSULOracle.java:49)
	at de.learnlib.oracle.MembershipOracle.answerQuery(MembershipOracle.java:46)
	at de.learnlib.oracle.MembershipOracle.answerQuery(MembershipOracle.java:40)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.learner.oracles.CachingSULOracle.processQueries(CachingSULOracle.java:75)
	at de.learnlib.oracle.MembershipOracle.processQuery(MembershipOracle.java:62)
	at com.github.protocolfuzzing.protocolstatefuzzer.components.learner.oracles.LoggingSULOracle.processQueries(LoggingSULOracle.java:71)
	at de.learnlib.algorithm.ttt.mealy.TTTLearnerMealy.initTransitions(TTTLearnerMealy.java:84)
	at de.learnlib.algorithm.ttt.base.AbstractTTTLearner.initializeState(AbstractTTTLearner.java:200)
	at de.learnlib.algorithm.ttt.base.AbstractTTTLearner.makeTree(AbstractTTTLearner.java:872)
	at de.learnlib.algorithm.ttt.base.AbstractTTTLearner.addNewStates(AbstractTTTLearner.java:860)
	at de.learnlib.algorithm.ttt.base.AbstractTTTLearner.closeTransitions(AbstractTTTLearner.java:791)
	at de.learnlib.algorithm.ttt.base.AbstractTTTLearner.refineHypothesisSingle(AbstractTTTLearner.java:242)
	at de.learnlib.algorithm.ttt.mealy.TTTLearnerMealy.refineHypothesisSingle(TTTLearnerMealy.java:92)
	at de.learnlib.algorithm.ttt.base.AbstractTTTLearner.refineHypothesis(AbstractTTTLearner.java:177)
	at com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerStandard.inferStateMachine(StateFuzzerStandard.java:164)
	at com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerStandard.startFuzzing(StateFuzzerStandard.java:84)
	at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.executeCommand(CommandLineParser.java:355)
	at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.parseAndExecuteCommand(CommandLineParser.java:226)
	at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.parse(CommandLineParser.java:168)
	at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.parse(CommandLineParser.java:212)
	at se.uu.it.dtlsfuzzer.Main.main(Main.java:20)

@c-southwest
Copy link
Collaborator Author

c-southwest commented May 30, 2025

@kostis I checked out the commit da2466b, which commit is just before we merge DTLS 1.3 related code, and still have the same Exception. (I deleted PSF and TLS-Attacker folder, executed ./install.sh again)

I will run experiments again, for before and after key commits, such as

15:12:39 [main] WARN  : record.cipher.RecordBlockCipher - Setting clean bytes to protocol message bytes.
15:12:39 [main] WARN  : record.crypto.RecordDecryptor - Failed to decrypt record, will try to process with previous cipher
15:12:39 [main] WARN  : record.cipher.RecordBlockCipher - Could not find all components (plaintext, mac, padding) in plaintext record.
15:12:39 [main] WARN  : record.cipher.RecordBlockCipher - This is probably us having the wrong keys. Depending on the application this may be fine.
15:12:39 [main] WARN  : record.cipher.RecordBlockCipher - Setting clean bytes to protocol message bytes.
15:12:39 [main] ERROR : statefuzzer.core.StateFuzzerStandard - Exception generated during learning
java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
Index 1 out of bounds for length 1
15:12:39 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Finished Experiment
15:12:39 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Number of refinement rounds: 16
15:12:39 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Results stored in output/openssl-1.1.1k_client_dhe_ecdhe_rsa_cert_reneg
java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
	at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
	at java.base/java.util.Objects.checkIndex(Objects.java:361)
	at java.base/java.util.ArrayList.get(ArrayList.java:427)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsStepContext.lambda$getReceivedMessageRecordPairs$2(TlsStepContext.java:91)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.IntPipeline$1$1.accept(IntPipeline.java:180)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:104)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:711)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsStepContext.getReceivedMessageRecordPairs(TlsStepContext.java:92)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsExecutionContext.lambda$getReceivedMessagesAndRecords$5(TlsExecutionContext.java:93)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsExecutionContext.getReceivedMessagesAndRecords(TlsExecutionContext.java:94)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.TlsExecutionContext.getReceivedMessagesAndRecords(TlsExecutionContext.java:98)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.symbols.inputs.ServerHelloInput.postReceiveUpdate(ServerHelloInput.java:76)
	at se.uu.it.dtlsfuzzer.components.sul.mapper.symbols.inputs.ServerHelloInput.postReceiveUpdate(ServerHelloInput.java:18)

@c-southwest
Copy link
Collaborator Author

c-southwest commented May 30, 2025

I checked out very early commit 8893778, just before we upgrade TLS-Attacker version from 5.3.0 to 6.3.4, and still has exception after 85 minutes with 14 hypotheses.

Before I run ./install.sh, I deleted maven local cache rm -rf ~/.m2/repository and deleted PSF and TLS-Attacker folder, so the environment should be clean.

20:16:49 [main] WARN  : record.crypto.RecordDecryptor - Failed to decrypt record, will try to process with previous cipher
20:16:50 [main] WARN  : record.crypto.RecordDecryptor - Failed to decrypt record, will try to process with previous cipher
20:16:50 [main] ERROR : statefuzzer.core.StateFuzzerStandard - Exception generated during learning
java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
20:16:50 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Finished Experiment
20:16:50 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Number of refinement rounds: 14
20:16:50 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Results stored in output/openssl-1.1.1k_client_dhe_ecdhe_rsa_cert_reneg

@c-southwest
Copy link
Collaborator Author

I checked out commit d9515f9, and still get exception after 3 hours with 36 hypotheses.

23:54:15 [main] WARN  : record.crypto.RecordDecryptor - Failed to decrypt record, will try to process with previous cipher
23:54:15 [main] ERROR : statefuzzer.core.StateFuzzerStandard - Exception generated during learning
java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
23:54:15 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Finished Experiment
23:54:15 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Number of refinement rounds: 36
23:54:15 [main] INFO  : statefuzzer.core.StateFuzzerStandard - Results stored in output/openssl-1.1.1k_client_dhe_ecdhe_rsa_cert_reneg

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant