Ejemplo n.º 1
0
 private static void appendAttackPatternAttributes(StringBuilder sb, AttackPattern attackPattern)
 {
     if (attackPattern.custom.severity != null)
     {
         sb.AppendLine(
             buildAttributeText(
                 "Severity",
                 EnumHelper.GetEnumMemberAttributeValue((Scale)attackPattern.custom.severity)));
     }
     if (attackPattern.custom.likelihood != null)
     {
         sb.AppendLine(
             buildAttributeText(
                 "Likelihood",
                 EnumHelper.GetEnumMemberAttributeValue((Scale)attackPattern.custom.likelihood)));
     }
     sb.AppendLine(
         buildAttributeText(
             "Injection Vector",
             buildInjectionVectorText(attackPattern.custom.injection_vector)));
     sb.AppendLine(buildAttributeText("Payload", attackPattern.custom.payload));
     sb.AppendLine(
         buildAttributeText("Activation Zone", buildActivationZoneText(attackPattern.custom.activation_zone)));
     sb.AppendLine(buildAttributeText("Impact", buildImpactText(attackPattern.custom.impact)));
 }
Ejemplo n.º 2
0
        public static AttackPattern WithReferenceToMitigatedByCategories(
            this AttackPattern attackPattern,
            IEnumerable <CourseOfAction> courseOfActions,
            IEnumerable <Relationship> relationships)
        {
            // TODO
            var categories = new List <string>();

            foreach (var relationship in relationships)
            {
                foreach (var courseOfAction in courseOfActions)
                {
                    if (relationship.relationship_type == StixRelationshipType.Mitigates &&
                        relationship.source_ref == courseOfAction.id &&
                        relationship.target_ref == attackPattern.id)
                    {
                        categories.Add(courseOfAction.custom.category);
                    }
                }
            }

            attackPattern.MitigatedByCategories = categories.Distinct().ToArray();

            return(attackPattern);
        }
Ejemplo n.º 3
0
        public void Initialize(AttackPattern attackPattern)
        {
            Label.text = attackPattern.name;

            ClickableBehaviour.Title = attackPattern.name;
            ClickableBehaviour.Text  = Formatter.BuildStixDataEntityDescription(attackPattern);

            ClickableBehaviour.HasSecondaryAction = ReferencesHelper.AddReferencesAsAction(attackPattern, ClickableBehaviour);
        }
Ejemplo n.º 4
0
        public static float CalculateDamageToAssetFromImpact(this AttackPattern attackPattern, float baseValue)
        {
            if (attackPattern.custom.impact == null)
            {
                return(baseValue);
            }

            var averageScale = (attackPattern.custom.impact.availability.AsPart()
                                + attackPattern.custom.impact.confidentiality.AsPart()
                                + attackPattern.custom.impact.integrity.AsPart())
                               / 3f;

            return(baseValue + averageScale * 9f);
        }
Ejemplo n.º 5
0
        public static float CalculateSpawnLikelihoodFromLikelihood(
            this AttackPattern attackPattern,
            float baseValue,
            float minChance = 0f,
            float maxChance = 1f)
        {
            if (attackPattern.custom.likelihood == null)
            {
                return(baseValue);
            }

            var likelihoodPart = attackPattern.custom.likelihood.AsPart();

            return(MathHelper.Rangify(likelihoodPart, minChance, maxChance));
        }
Ejemplo n.º 6
0
        public void Initialize(AttackPattern attackPattern)
        {
            AttackPattern = attackPattern;

            InjectionVector    = attackPattern.custom.injection_vector.categories.TakeRandom();
            ActivationZone     = attackPattern.custom.activation_zone.categories.TakeRandom();
            TargetedAssetIndex = AssetSockets.Assets.Select((a, i) => a.WithAssetSocketIndex(i))
                                 .Where((a) => a != null && a.custom.category == ActivationZone)
                                 .TakeRandom()
                                 .AssetSocketIndex;
            SpawnPoint = SpawnPoints.GetSpawnPoint(InjectionVector);

            transform.position = SpawnPoint.position;

            StartHealth   = Health = attackPattern.CalculateHealthFromSeverity(StartHealth);
            Health       *= State.I.PlayConfiguration.Difficulty;
            DamageToAsset = attackPattern.CalculateDamageToAssetFromImpact(DamageToAsset);

            value = StartValue + WaveSpawner.I.WaveIndex;

            // Tweak scale and speed after value to indicate which attacks are more important
            Model.localScale *= Mathf.Pow(DamageToAsset / 30f, 2f);
            Speed            *= Mathf.Pow(DamageToAsset / 30f, 2f);

            // Hover and click actions
            ClickableBehaviour.Title = attackPattern.name;
            ClickableBehaviour.Text  = Formatter.BuildStixDataEntityDescription(attackPattern);

            ClickableBehaviour.ActionText    = "select";
            ClickableBehaviour.PrimaryAction = () => {
                SelectionHelper.DeselectAllMitigations();

                var title       = attackPattern.name;
                var description = Formatter.BuildStixDataEntityDescription(attackPattern, false, false);
                SelectedAction[] selectedActions = ReferencesHelper.HasExternalReferences(attackPattern)
                    ? new SelectedAction[] {
                    new SelectedAction(
                        ActionType.OpenExternalReferences,
                        () => ReferencesHelper.OpenExternalReferences(attackPattern))
                } : null;
                HelperObjects.SelectedInfoBar.SelectEntity(title, "Mitigation", description, selectedActions);
            };
            ClickableBehaviour.HasSecondaryAction =
                ReferencesHelper.AddReferencesAsAction(attackPattern, ClickableBehaviour);
        }
Ejemplo n.º 7
0
        private void spawnAttack(AttackPattern attackPattern)
        {
            var attack = UnityHelper.Instantiate(AttackPrefab).GetComponent <AttackBehaviour>();

            attack.Initialize(attackPattern);
        }
Ejemplo n.º 8
0
 public static float CalculateHealthFromSeverity(this AttackPattern attackPattern, float baseValue)
 {
     return(baseValue + attackPattern.custom.severity.AsFloat() * baseValue);
 }
Ejemplo n.º 9
0
 public static AttackPattern WithReferenceToParentAsset(this AttackPattern attackPattern, StixId assetId)
 {
     attackPattern.ParentAssetId = assetId;
     return(attackPattern);
 }