|
@@ -1918,18 +1918,12 @@ func (sshClient *sshClient) run(
|
|
|
|
|
|
|
|
var osshPrefixEnableFragmentor bool = false
|
|
var osshPrefixEnableFragmentor bool = false
|
|
|
var serverOsshPrefixSpecs transforms.Specs = nil
|
|
var serverOsshPrefixSpecs transforms.Specs = nil
|
|
|
- var serverOsshPrefixSplitConfig *obfuscator.OSSHPrefixSplitConfig = nil
|
|
|
|
|
|
|
+ var minDelay, maxDelay time.Duration
|
|
|
if !p.IsNil() {
|
|
if !p.IsNil() {
|
|
|
osshPrefixEnableFragmentor = p.Bool(parameters.OSSHPrefixEnableFragmentor)
|
|
osshPrefixEnableFragmentor = p.Bool(parameters.OSSHPrefixEnableFragmentor)
|
|
|
serverOsshPrefixSpecs = p.ProtocolTransformSpecs(parameters.ServerOSSHPrefixSpecs)
|
|
serverOsshPrefixSpecs = p.ProtocolTransformSpecs(parameters.ServerOSSHPrefixSpecs)
|
|
|
- serverOsshPrefixSplitConfig, err = parameters.NewOSSHPrefixSplitConfig(p)
|
|
|
|
|
-
|
|
|
|
|
- // Log error, but continue.
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- log.WithTraceFields(LogFields{"error": errors.Trace(err)}).Warning(
|
|
|
|
|
- "NewOSSHPrefixSplitConfig failed")
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ minDelay = p.Duration(parameters.OSSHPrefixSplitMinDelay)
|
|
|
|
|
+ maxDelay = p.Duration(parameters.OSSHPrefixSplitMaxDelay)
|
|
|
// Allow garbage collection.
|
|
// Allow garbage collection.
|
|
|
p.Close()
|
|
p.Close()
|
|
|
}
|
|
}
|
|
@@ -1941,7 +1935,6 @@ func (sshClient *sshClient) run(
|
|
|
sshClient.sshServer.support.Config.ObfuscatedSSHKey,
|
|
sshClient.sshServer.support.Config.ObfuscatedSSHKey,
|
|
|
sshClient.sshServer.obfuscatorSeedHistory,
|
|
sshClient.sshServer.obfuscatorSeedHistory,
|
|
|
serverOsshPrefixSpecs,
|
|
serverOsshPrefixSpecs,
|
|
|
- serverOsshPrefixSplitConfig,
|
|
|
|
|
func(clientIP string, err error, logFields common.LogFields) {
|
|
func(clientIP string, err error, logFields common.LogFields) {
|
|
|
logIrregularTunnel(
|
|
logIrregularTunnel(
|
|
|
sshClient.sshServer.support,
|
|
sshClient.sshServer.support,
|
|
@@ -1958,6 +1951,16 @@ func (sshClient *sshClient) run(
|
|
|
conn = result.obfuscatedSSHConn
|
|
conn = result.obfuscatedSSHConn
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // Set the OSSH prefix split config.
|
|
|
|
|
+ if err == nil && result.obfuscatedSSHConn.IsOSSHPrefixStream() {
|
|
|
|
|
+ err = result.obfuscatedSSHConn.SetOSSHPrefixSplitConfig(minDelay, maxDelay)
|
|
|
|
|
+ // Log error, but continue.
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ log.WithTraceFields(LogFields{"error": errors.Trace(err)}).Warning(
|
|
|
|
|
+ "SetOSSHPrefixSplitConfig failed")
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// Seed the fragmentor, when present, with seed derived from initial
|
|
// Seed the fragmentor, when present, with seed derived from initial
|
|
|
// obfuscator message. See tactics.Listener.Accept. This must preceed
|
|
// obfuscator message. See tactics.Listener.Accept. This must preceed
|
|
|
// ssh.NewServerConn to ensure fragmentor is seeded before downstream bytes
|
|
// ssh.NewServerConn to ensure fragmentor is seeded before downstream bytes
|
|
@@ -1975,7 +1978,7 @@ func (sshClient *sshClient) run(
|
|
|
|
|
|
|
|
// Stops the fragmentor if disabled for prefixed OSSH streams.
|
|
// Stops the fragmentor if disabled for prefixed OSSH streams.
|
|
|
if !osshPrefixEnableFragmentor && result.obfuscatedSSHConn.IsOSSHPrefixStream() {
|
|
if !osshPrefixEnableFragmentor && result.obfuscatedSSHConn.IsOSSHPrefixStream() {
|
|
|
- fragmentor.Stop()
|
|
|
|
|
|
|
+ fragmentor.StopFragmenting()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|