зеркало из
				https://github.com/ceios/ceios.git
				synced 2025-10-30 12:36:04 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			214 строки
		
	
	
		
			9.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			214 строки
		
	
	
		
			9.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| Introduction
 | |
| ============
 | |
| 
 | |
| This chapter introduces the main concepts of Attack Flow with visual examples taken from
 | |
| the :doc:`Attack Flow Builder <builder>`. The example start with simple scenarios and
 | |
| work up to complex situations.
 | |
| 
 | |
| Action Objects
 | |
| --------------
 | |
| 
 | |
| An **action** represents an adversary executing a specific technique. For example,
 | |
| `T1566: Phishing <https://attack.mitre.org/techniques/T1566/>`__ is a common adversarial
 | |
| technique that captured in the ATT&CK knowledge base. If an adversary utilizes this behavior
 | |
| during a specific breach, then that is an action.
 | |
| 
 | |
| .. note::
 | |
| 
 | |
|    The examples here depict ATT&CK techniques, but Attack Flow does not require the use
 | |
|    of ATT&CK. You may use custom collections of techniques, e.g. created in `Workbench
 | |
|    <https://ctid.mitre-engenuity.org/our-work/attack-workbench/>`__, other knowledge
 | |
|    bases `such as VERIS <http://veriscommunity.net/>`__, or even create ad hoc actions
 | |
|    to describe techniques that are not part of any pre-existing taxonomy.
 | |
| 
 | |
| Adversary behavior is the focal point of the Attack Flow project, and actions are the
 | |
| backbone of any flow. Sequences of adversary behavior are represented by connecting
 | |
| actions together with an arrow.
 | |
| 
 | |
| .. figure:: _static/action.png
 | |
|    :alt: A spearphishing action connected to a user execution action.
 | |
|    :scale: 80%
 | |
|    :align: center
 | |
| 
 | |
|    An action connected to another action represents a dependency between them.
 | |
| 
 | |
| When two actions are connected together, it represents a dependency between them: the
 | |
| second action cannot be executed until the first action completes successfully. (The
 | |
| handling of failed actions is discussed later.) This is not equivalent to saying that
 | |
| one action happened before another! This is a more powerful concept that models how an
 | |
| adversary uses one behavior to create the preconditions they need to execute the next
 | |
| behavior.
 | |
| 
 | |
| Condition Objects
 | |
| -----------------
 | |
| 
 | |
| Sometimes the relationship between two actions is not immediately obvious to the reader,
 | |
| especially if the underlying techniques are especially obscure or rare. A **condition**
 | |
| describes the state of the world after the preceding action finishes. This can be used
 | |
| to clarify for the reader how two actions are related, i.e. what one action accomplishes
 | |
| that enables the next action to run.
 | |
| 
 | |
| .. figure:: _static/action-condition.png
 | |
|    :alt: LSASS dumping action leads to password cracking option, which leads to a condition, which leads to a registry run keys action.
 | |
|    :scale: 80%
 | |
|    :align: center
 | |
| 
 | |
|    A condition clarifies how the outcome of an action sets up the execution of another next
 | |
|    action.
 | |
| 
 | |
| In the example above, the reader may not know enough about LSASS, password hashes, or
 | |
| password cracking to understand how the first two actions lead to the third. The
 | |
| condition object fills this gap by succinctly describing the outcome (or *effect*) of
 | |
| the first two actions that enables the third action.
 | |
| 
 | |
| Parallel Attack Paths
 | |
| ---------------------
 | |
| 
 | |
| The adversary may have multiple available techniques to execute in a given scenario. In
 | |
| the next example, the attacker has used two different persistence mechanisms. Although
 | |
| the attacker is not literally executing these techniques simultaneously, it helps to
 | |
| think of these as "parallel" attack paths because neither technique depends on
 | |
| successful execution of the other.
 | |
| 
 | |
| .. figure:: _static/attack-paths.png
 | |
|    :scale: 80%
 | |
|    :alt: One action is connected to two other actions.
 | |
|    :align: center
 | |
| 
 | |
|    The attack branches out to show that the adversary has multiple persistence
 | |
|    techniques.
 | |
| 
 | |
| .. note::
 | |
| 
 | |
|    Flows can represent adversary behavior in different scopes, e.g. portraying a single
 | |
|    specific incident versus portraying an overall campaign. In a specific incident
 | |
|    scope, parallel attack paths indicate the attacker executing different techniques. On
 | |
|    the other hand, the campaign scope rolls up behavior across multiple incidents, so
 | |
|    parallel paths represent the different behaviors that have been observed across
 | |
|    multiple incidents.
 | |
| 
 | |
| Operator Objects
 | |
| ----------------
 | |
| 
 | |
| After a flow splits into parallel attack paths, **operators** combine them back
 | |
| together. An OR operator means that only of the incoming attack paths needs to succeed
 | |
| in order to continue the flow, while an AND operator means that all of the incoming
 | |
| attack paths must succeed in order to continue. The next example shows that the
 | |
| adversary has two different techniques for pivoting into a different user account. If
 | |
| either technique succeeds, then the attack can continue forward.
 | |
| 
 | |
| .. figure:: _static/operator.png
 | |
|    :scale: 80%
 | |
|    :alt: Two actions are connected to an OR operator, which is then connected to a third action.
 | |
|    :align: center
 | |
| 
 | |
|    An OR operator shows that the attacker has two different techniques for pivoting to a
 | |
|    local user account.
 | |
| 
 | |
| When multiple attack paths are combined, the logic can be difficult for the reader to
 | |
| follow. This is a great place to use conditions to clarify what the state of the world
 | |
| is at that point in the flow.
 | |
| 
 | |
| .. figure:: _static/operator-condition.png
 | |
|    :scale: 80%
 | |
|    :alt: Two actions are connected to an OR operator, which is then connected to a condition, which is then connected to a third action.
 | |
|    :align: center
 | |
| 
 | |
|    A condition object clarifies how the actions before the operator are related to
 | |
|    the action after the operator.
 | |
| 
 | |
| Perhap the reader does not understand the consequences of dumping LSASS memory or how it
 | |
| relates to the actions that come afterward. The condition clarifies that the adversary
 | |
| is now able to pivot into a different user account.
 | |
| 
 | |
| .. warning::
 | |
| 
 | |
|    It is possible to join paths together without using an operator by simplying pointing
 | |
|    two arrows at a single action or condition. This approach is ambiguous because it's
 | |
|    not clear how the sucess or failure of those paths affects the outcome of the flow,
 | |
|    but ambiguity may be appropriate in some circumstances, e.g. if the underlying CTI is
 | |
|    itself ambiguous.
 | |
| 
 | |
| Asset Objects
 | |
| -------------
 | |
| 
 | |
| Each action can potentially have some outcome or *effect* on the world. It is often
 | |
| informative to describe the effect in terms of some object in the world that has been
 | |
| impacted. Actions can point to *assets* to indicate which objects are impacted as well
 | |
| as which objects are used in subsequent techniques.
 | |
| 
 | |
| .. figure:: _static/asset.png
 | |
|    :scale: 80%
 | |
|    :alt: One action connects to another; both are connected to the same asset, which is in turn connected to a user account object.
 | |
|    :align: center
 | |
| 
 | |
|    An asset clarifies how actions modify the state of the world or depend on the state
 | |
|    of the world.
 | |
| 
 | |
| In this example, the asset shows which particular password hash was disclosed by LSASS
 | |
| memory dumping. Later in the flow, the adversary cracks that password hash. An asset can
 | |
| also point to another object to provide additional structured data.
 | |
| 
 | |
| .. attention::
 | |
| 
 | |
|    The **user account** object in this example is one of the many available STIX
 | |
|    objects. This aspect of Attack Flow is covered in depth later in this chapter.
 | |
| 
 | |
| Success and Failure
 | |
| -------------------
 | |
| 
 | |
| When modeling complex adversary behavior, **conditions** can also depict how the
 | |
| attacker handles branches that are only feasible in specific circumstances.
 | |
| 
 | |
| .. figure:: _static/condition-true.png
 | |
|    :scale: 80%
 | |
|    :alt: An actions points at two conditions. Each condition points to a separate action.
 | |
|    :align: center
 | |
| 
 | |
|    Conditions model when different branches of the attack can be taken.
 | |
| 
 | |
| In this example (an excerpt from the NotPetya flow), the malware has two different
 | |
| privilege escalation techniques. Each technique depends on the host process having a
 | |
| specific Windows privilege. The conditions depict what state is required for each path
 | |
| to continue executing. The attack can go down one path, both paths, or neither path
 | |
| depending on the state of the host process.
 | |
| 
 | |
| Conditions can also model how the adversary handles failure. All the examples up to this
 | |
| point have used the *true* branch of each condition to represent what happens when the
 | |
| underlying condition is true. But conditions also have a *false* branch that is
 | |
| activated when the condition is not true.
 | |
| 
 | |
| .. figure:: _static/condition-false.png
 | |
|    :scale: 80%
 | |
|    :alt: An action points to a condition. The true and false branches of a condition point at separate actions.
 | |
|    :align: center
 | |
| 
 | |
|    The "false" branch portrays what happens when a technique fails.
 | |
| 
 | |
| In this example, the adversary attempts to steal a targeted user's credentials via
 | |
| spearphishing. Since this technique relies evading email filtering and tricking users,
 | |
| it is inherently unreliable. The condition object after spearphishing shows a decision
 | |
| point for the adversary: if they obtained a credential then they can move on to logging
 | |
| in with it. But if the spearphshing fails, then the adversary falls back to a password
 | |
| spraying technique in another attempt to obtain a valid credential.
 | |
| 
 | |
| Additional STIX Objects
 | |
| -----------------------
 | |
| 
 | |
| This introduction focuses on the core Attack Flow objects, but Attack Flow is based on
 | |
| the STIX industry standard, so you can also use any available STIX object in your flows!
 | |
| STIX contains a variety of useful objects to enrich your flow with including IOCs and
 | |
| contextual details. This next example shows the standard STIX **process** object being
 | |
| used to provide details about how the file discovery technique was executed.
 | |
| 
 | |
| .. figure:: _static/stix-sdo.png
 | |
|    :scale: 80%
 | |
|    :alt: An action points to a process object.
 | |
|    :align: center
 | |
| 
 | |
|    The process object provides technical details regarding how the action was executed.
 | |
| 
 | |
| Now that you are familiar with the central concepts, continue reading to review the
 | |
| corpus of example flows and how to use the Attack Flow Builder to start creating your
 | |
| own flows.
 | 
