Skip to content

Commit 158e472

Browse files
authored
Merge pull request #89 from trailofbits/basic-theory
add sast and fuzzing info
2 parents 33395b9 + 88f6e70 commit 158e472

File tree

6 files changed

+92
-0
lines changed

6 files changed

+92
-0
lines changed

content/docs/crypto/_index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ For each tool, we cover topics such as:
1313
- Installation and basic use
1414
- Provide examples
1515

16+
## Sections
17+
1618
{{< section >}}

content/docs/dynamic-analysis/_index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ Here we present several dynamic analysis tools. For each tool, we cover topics s
1313
- Advanced configuration
1414
- Usage in continuous integration pipelines
1515

16+
## Sections
17+
1618
{{< section >}}

content/docs/fuzzing/_index.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,3 +215,28 @@ Many techniques can be leveraged when writing harnesses; we discuss these in the
215215
**Instrumentation runtime:** Instrumentations like [AddressSanitizer]({{% relref 03-asan %}}) or [UndefinedBehaviorSanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html) come with a runtime. A fuzzer must be compatible with the sanitizer for bugs to be detected reliably and feedback implemented efficiently. In memory-safe languages like Go or Rust you are less likely to need sanitizers.
216216

217217
Note, that the two just mentioned sanitizers introduce instrumentation with the goal of finding more bugs. There is also a different class of instrumentations (e.g., [SanitizerCoverage](https://clang.llvm.org/docs/SanitizerCoverage.html)) that provides feedback to the fuzzer during execution. The runtime of the feedback-based instrumentation is usually part of the fuzzer runtime.
218+
219+
## What to fuzz
220+
221+
What type of issues fuzzing can find?
222+
223+
* Crashes and panics
224+
* Memory corruption issues: UAFs, integer overflows, undefined behaviors, buffer overflows, memory leaks, etc.
225+
226+
* Invariant violations: business logic bugs
227+
* State invariants violations: properties that require stateful fuzzing
228+
229+
* Differentials: cross testing between different implementations of the same functionality
230+
* Cross-platform differentials: testing the same code on different architectures
231+
* Regressions: between different versions of the same code
232+
* Cross-implementation: between different libraries or tools implementing similar functionality
233+
234+
* Broken logical properties
235+
* Round-trip: `decode(encode(x)) == x`
236+
* Idempotence: `f(f(x)) == f(x)`
237+
* Monotonicity: `x < y → f(x) ≤ f(y)`
238+
* Identity: `f(x, identity) == x`
239+
* Commutativity: `f(x, y) == f(y, x)`
240+
* Associativity: `f(f(x, y), z) == f(x, f(y, z))`
241+
242+
* Race conditions

content/docs/static-analysis/_index.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,63 @@ This section presents several static analysis tools. For each tool, we cover top
1212
- Advanced configuration
1313
- Usage in continuous integration pipelines
1414

15+
## Sections
16+
1517
{{< section >}}
18+
19+
## Basic theory
20+
21+
Below is an overview of techniques implemented in static analysis tools.
22+
23+
Usually, tools support only a subset of the following analyses, with varying degrees of precision and completeness. Knowing what a tool's capabilities are is important in determining its usefulness.
24+
25+
### Views on a code
26+
27+
- Abstract Syntax Tree (AST)
28+
- Control Flow Graph (CFG)
29+
- Data Flow Graph (DFG)
30+
- Call Graph
31+
- Intermediate Representation (IR)
32+
- Single Static Assignment Form (SSA)
33+
- Use-Definition Chain (use-def)
34+
35+
### Analyses
36+
37+
- AST traversal
38+
- Abstract Interpretation
39+
- Constant Propagation
40+
- Value Range analysis
41+
- Data-Flow analysis
42+
- Train Tracking
43+
- Control-Flow analysis
44+
- Domination relationship
45+
- Reachability
46+
- Hoare logic
47+
- Model checking
48+
- Symbolic execution
49+
- Concolic execution
50+
- Type analysis
51+
- Alias/Pointer/points-to analysis
52+
- Program slicing
53+
- Global value numbering
54+
- Hash consing
55+
56+
### Precision
57+
58+
- Intraprocedural
59+
- Flow-sensitivity (order of statements)
60+
- Path-sensitivity (conditional branches)
61+
62+
- Interprocedural
63+
- Context-sensitivity (Polyvariance)
64+
- Call-site
65+
- Type
66+
- Object
67+
- Context-insensitive
68+
69+
### Properties
70+
71+
- Soundness
72+
- Precision
73+
- Completeness
74+
- Execution time

content/docs/web/_index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ This section presents web application security tools. For each tool, we cover to
1212
- Advanced configuration
1313
- Usage in continuous integration pipelines
1414

15+
## Sections
16+
1517
{{< section >}}

content/docs/web/burp/stepbystep/02-workingmanually/_index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ standpoint—you can choose appropriate requests from the **Proxy** tab and try
1313
For example, requests that reflect user-provided values in the response and API calls that handle authentication
1414
are worth investigating in this manner. To support yourself with semi-automatic methods, use the following Burp tools.
1515

16+
## Sections
17+
1618
{{< section >}}

0 commit comments

Comments
 (0)