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))); }
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); }
public void Initialize(AttackPattern attackPattern) { Label.text = attackPattern.name; ClickableBehaviour.Title = attackPattern.name; ClickableBehaviour.Text = Formatter.BuildStixDataEntityDescription(attackPattern); ClickableBehaviour.HasSecondaryAction = ReferencesHelper.AddReferencesAsAction(attackPattern, ClickableBehaviour); }
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); }
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)); }
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); }
private void spawnAttack(AttackPattern attackPattern) { var attack = UnityHelper.Instantiate(AttackPrefab).GetComponent <AttackBehaviour>(); attack.Initialize(attackPattern); }
public static float CalculateHealthFromSeverity(this AttackPattern attackPattern, float baseValue) { return(baseValue + attackPattern.custom.severity.AsFloat() * baseValue); }
public static AttackPattern WithReferenceToParentAsset(this AttackPattern attackPattern, StixId assetId) { attackPattern.ParentAssetId = assetId; return(attackPattern); }