示例#1
0
        public static ExperimentalConfiguration GetConfig(
            ExperimentalConfiguration.AttackStrategy attack = ExperimentalConfiguration.AttackStrategy.BreadthFirst,
            int pwToBan = 100,
            double fractionOfBenignIPsBehindProxies          = 0.1,
            double fractionOfMaliciousIPsToOverlapWithBenign = .01d,
            double fractionOfLoginAttemptsFromAttacker       = 0.5d,
            double extraTypoFactor = 1d,
            ulong scale            = 1,
            string addToName       = null)
        {
            ExperimentalConfiguration config = new ExperimentalConfiguration();

            // Scale of test
            config.AttackersStrategy = attack;
            config.PopularPasswordsToRemoveFromDistribution  = pwToBan;
            config.FractionOfBenignIPsBehindProxies          = fractionOfBenignIPsBehindProxies;
            config.FractionOfMaliciousIPsToOverlapWithBenign = fractionOfMaliciousIPsToOverlapWithBenign;

            ulong totalLoginAttempts = scale * Million;

            config.TestTimeSpan = new TimeSpan(7, 0, 0, 0); // 7 days
            double meanNumberOfLoginsPerBenignAccountDuringExperiment = 100d;
            double meanNumberOfLoginsPerAttackerControlledIP          = 1000d;

            DateTime now     = DateTime.Now;
            string   dirName = BasePath + "Run_" + totalLoginAttempts + "_" + now.Month + "_" + now.Day + "_" + now.Hour + "_" + now.Minute;

            Directory.CreateDirectory(dirName);
            config.OutputPath = dirName + @"\";

            config.OutputDirectoryName = string.Format("{0}_Strategy_{1}_Remove_{2}_Proxies_{3}_Overlap_{4}",
                                                       addToName == null ? "" : addToName + "_",
                                                       //(int)Math.Log10(totalLoginAttempts),
                                                       config.AttackersStrategy == ExperimentalConfiguration.AttackStrategy.BreadthFirst
                    ? "BreadthFirst"
                    : config.AttackersStrategy == ExperimentalConfiguration.AttackStrategy.Weighted
                        ? "Weighted"
                        : "Avoid",
                                                       config.PopularPasswordsToRemoveFromDistribution,
                                                       (int)1000 * config.FractionOfBenignIPsBehindProxies,
                                                       (int)1000 * config.FractionOfMaliciousIPsToOverlapWithBenign
                                                       );

            // Figure out parameters from scale
            double fractionOfLoginAttemptsFromBenign = 1d - fractionOfLoginAttemptsFromAttacker;

            double expectedNumberOfBenignAttempts = totalLoginAttempts * fractionOfLoginAttemptsFromBenign;
            double numberOfBenignAccounts         = expectedNumberOfBenignAttempts /
                                                    meanNumberOfLoginsPerBenignAccountDuringExperiment;

            double expectedNumberOfAttackAttempts = totalLoginAttempts * fractionOfLoginAttemptsFromAttacker;
            double numberOfAttackerIps            = expectedNumberOfAttackAttempts /
                                                    meanNumberOfLoginsPerAttackerControlledIP;

            // Make any changes to the config or the config.BlockingOptions within config here
            config.TotalLoginAttemptsToIssue = totalLoginAttempts;

            config.FractionOfLoginAttemptsFromAttacker = fractionOfLoginAttemptsFromAttacker;
            config.NumberOfBenignAccounts = (uint)numberOfBenignAccounts;

            // Scale of attackers resources
            config.NumberOfIpAddressesControlledByAttacker = (uint)numberOfAttackerIps;
            config.NumberOfAttackerControlledAccounts      = (uint)numberOfAttackerIps;

            // Additional sources of false positives/negatives
            config.ProxySizeInUniqueClientIPs = 1000;

            // Make typos almost entirely ignored
            config.ChanceOfBenignPasswordTypo *= extraTypoFactor;

            // Blocking parameters
            config.BlockingOptions.HeightOfBinomialLadder_H             = 48;
            config.BlockingOptions.NumberOfBitsInBinomialLadderFilter_N = 1 << 29;
            config.BlockingOptions.BinomialLadderFrequencyThreshdold_T  = 44;
            config.BlockingOptions.ExpensiveHashingFunctionIterations   = 1;
            return(config);
        }
示例#2
0
        public static ExperimentalConfiguration GetConfig(
            ExperimentalConfiguration.AttackStrategy attack = ExperimentalConfiguration.AttackStrategy.BreadthFirst,
            int pwToBan = 100,
            double fractionOfBenignIPsBehindProxies          = 0.1,
            double fractionOfMaliciousIPsToOverlapWithBenign = .1d,
            double fractionOfLoginAttemptsFromAttacker       = 0.5d,
            double extraTypoFactor = 1d,
            ulong scale            = 1,
            string addToName       = null)
        {
            ExperimentalConfiguration config = new ExperimentalConfiguration();

            config.AttackersStrategy = attack;
            config.PopularPasswordsToRemoveFromDistribution  = pwToBan;
            config.FractionOfBenignIPsBehindProxies          = fractionOfBenignIPsBehindProxies;
            config.FractionOfMaliciousIPsToOverlapWithBenign = fractionOfMaliciousIPsToOverlapWithBenign;

            ulong totalLoginAttempts = scale * Million;

            config.TestTimeSpan = new TimeSpan(7, 0, 0, 0);
            double meanNumberOfLoginsPerBenignAccountDuringExperiment = 100d;
            double meanNumberOfLoginsPerAttackerControlledIP          = 100d;

            DateTime now     = DateTime.Now;
            string   dirName = BasePath + "Run_" + now.Month + "_" + now.Day + "_" + now.Hour + "_" + now.Minute;

            Directory.CreateDirectory(dirName);
            config.OutputPath = dirName + @"\";

            config.OutputDirectoryName = string.Format("{0}_Strategy_{1}",
                                                       addToName == null ? "Other" : addToName + "_",
                                                       config.AttackersStrategy == ExperimentalConfiguration.AttackStrategy.BreadthFirst
                    ? "BreadthFirst"
                    : config.AttackersStrategy == ExperimentalConfiguration.AttackStrategy.Weighted
                        ? "Weighted"
                        : "Avoid"
                                                       );

            double fractionOfLoginAttemptsFromBenign = 1d - fractionOfLoginAttemptsFromAttacker;

            double expectedNumberOfBenignAttempts = totalLoginAttempts * fractionOfLoginAttemptsFromBenign;
            double numberOfBenignAccounts         = expectedNumberOfBenignAttempts /
                                                    meanNumberOfLoginsPerBenignAccountDuringExperiment;

            double expectedNumberOfAttackAttempts = totalLoginAttempts * fractionOfLoginAttemptsFromAttacker;
            double numberOfAttackerIps            = expectedNumberOfAttackAttempts /
                                                    meanNumberOfLoginsPerAttackerControlledIP;

            config.TotalLoginAttemptsToIssue = totalLoginAttempts;

            config.FractionOfLoginAttemptsFromAttacker = fractionOfLoginAttemptsFromAttacker;
            config.NumberOfBenignAccounts = (uint)numberOfBenignAccounts;

            config.NumberOfIpAddressesControlledByAttacker = (uint)numberOfAttackerIps;
            config.NumberOfAttackerControlledAccounts      = (uint)numberOfAttackerIps;

            config.ProxySizeInUniqueClientIPs = 1000;

            config.ChanceOfBenignPasswordTypo *= extraTypoFactor;

            config.BlockingOptions.HeightOfBinomialLadder_H             = 48;
            config.BlockingOptions.NumberOfBitsInBinomialLadderFilter_N = 1 << 29;
            config.BlockingOptions.BinomialLadderFrequencyThreshdold_T  = 44;
            config.BlockingOptions.ExpensiveHashingFunctionIterations   = 1;
            return(config);
        }