augure 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +136 -0
- data/LICENSE +21 -0
- data/README.md +217 -0
- data/exe/augure +181 -0
- data/exe/augure-benchmark +67 -0
- data/home/runner/work/augure/augure/docs/agent-snippet.md +31 -0
- data/home/runner/work/augure/augure/docs/auditability.md +160 -0
- data/home/runner/work/augure/augure/docs/build-format.md +119 -0
- data/home/runner/work/augure/augure/docs/explanation-architecture.md +74 -0
- data/home/runner/work/augure/augure/docs/how-to-swap-solver.md +73 -0
- data/home/runner/work/augure/augure/docs/how-to-write-rules.md +71 -0
- data/home/runner/work/augure/augure/docs/pack-format.md +137 -0
- data/home/runner/work/augure/augure/docs/reference.md +293 -0
- data/home/runner/work/augure/augure/docs/tutorial.md +108 -0
- data/home/runner/work/augure/augure/examples/ret2win.facts +11 -0
- data/home/runner/work/augure/augure/examples/split.facts +12 -0
- data/home/runner/work/augure/augure/exe/augure +181 -0
- data/home/runner/work/augure/augure/exe/augure-benchmark +67 -0
- data/home/runner/work/augure/augure/lib/augure/bandit.rb +118 -0
- data/home/runner/work/augure/augure/lib/augure/coverage.rb +56 -0
- data/home/runner/work/augure/augure/lib/augure/ctf_corpus.json +773 -0
- data/home/runner/work/augure/augure/lib/augure/engine.rb +128 -0
- data/home/runner/work/augure/augure/lib/augure/facts.rb +194 -0
- data/home/runner/work/augure/augure/lib/augure/kb_corpus.json +345 -0
- data/home/runner/work/augure/augure/lib/augure/knowledge_base.rb +109 -0
- data/home/runner/work/augure/augure/lib/augure/mcts.rb +178 -0
- data/home/runner/work/augure/augure/lib/augure/pack.rb +244 -0
- data/home/runner/work/augure/augure/lib/augure/pack_loader.rb +93 -0
- data/home/runner/work/augure/augure/lib/augure/parity.rb +69 -0
- data/home/runner/work/augure/augure/lib/augure/pipeline.rb +107 -0
- data/home/runner/work/augure/augure/lib/augure/priors.rb +32 -0
- data/home/runner/work/augure/augure/lib/augure/rules.rb +300 -0
- data/home/runner/work/augure/augure/lib/augure/smt_process.rb +48 -0
- data/home/runner/work/augure/augure/lib/augure/verifier.rb +40 -0
- data/home/runner/work/augure/augure/lib/augure/version.rb +5 -0
- data/home/runner/work/augure/augure/lib/augure.rb +25 -0
- data/home/runner/work/augure/augure/packs/banner_leak.yml +46 -0
- data/home/runner/work/augure/augure/packs/brop.yml +46 -0
- data/home/runner/work/augure/augure/packs/fastbin_hook.yml +45 -0
- data/home/runner/work/augure/augure/packs/got_partial_overwrite.yml +45 -0
- data/home/runner/work/augure/augure/packs/got_partial_overwrite_deref.yml +39 -0
- data/home/runner/work/augure/augure/packs/house_botcake.yml +38 -0
- data/home/runner/work/augure/augure/packs/house_force.yml +37 -0
- data/home/runner/work/augure/augure/packs/house_of_apple2.yml +45 -0
- data/home/runner/work/augure/augure/packs/house_orange.yml +38 -0
- data/home/runner/work/augure/augure/packs/jop.yml +39 -0
- data/home/runner/work/augure/augure/packs/large_bin_attack.yml +39 -0
- data/home/runner/work/augure/augure/packs/one_gadget.yml +38 -0
- data/home/runner/work/augure/augure/packs/orw.yml +55 -0
- data/home/runner/work/augure/augure/packs/ret2csu_v2.yml +55 -0
- data/home/runner/work/augure/augure/packs/ret2dlresolve_x86.yml +39 -0
- data/home/runner/work/augure/augure/packs/ret2partial_overwrite.yml +38 -0
- data/home/runner/work/augure/augure/packs/ret2vdso.yml +39 -0
- data/home/runner/work/augure/augure/packs/setcontext_srop.yml +46 -0
- data/home/runner/work/augure/augure/packs/uaf_tcache.yml +45 -0
- data/home/runner/work/augure/augure/packs/unsorted_bin_attack.yml +38 -0
- metadata +103 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
technique: uaf_tcache
|
|
2
|
+
author: Gregory Epp
|
|
3
|
+
source: https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/use-after-free/
|
|
4
|
+
|
|
5
|
+
rules:
|
|
6
|
+
- id: app_uaf_tcache
|
|
7
|
+
head: [applicable, uaf_tcache]
|
|
8
|
+
conditions:
|
|
9
|
+
- [fact, vuln, uaf]
|
|
10
|
+
- [fact, allocator, tcache]
|
|
11
|
+
|
|
12
|
+
kb:
|
|
13
|
+
- id: uaf_tcache_001
|
|
14
|
+
technique: uaf_tcache
|
|
15
|
+
description: >
|
|
16
|
+
Use-after-free meets the tcache: the freed chunk's key and fd sit
|
|
17
|
+
in writable memory nobody cleared. A stale pointer into a fresh
|
|
18
|
+
allocation is the whole primitive - poisoning the tcache entry
|
|
19
|
+
finishes it.
|
|
20
|
+
chain: [free_after_use, stale_reference, tcache_poison]
|
|
21
|
+
unlocks: [arb_write]
|
|
22
|
+
success_rate: 0.45
|
|
23
|
+
|
|
24
|
+
mcts:
|
|
25
|
+
requires: []
|
|
26
|
+
provides: [arb_write]
|
|
27
|
+
terminal: true
|
|
28
|
+
success: 0.45
|
|
29
|
+
|
|
30
|
+
priors: [6, 14]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# The defender side (the corpus read backwards): what this technique
|
|
34
|
+
# looks like to the defenses. Armored by check 9.
|
|
35
|
+
detection:
|
|
36
|
+
- channel: syscall
|
|
37
|
+
signature: "free followed by reuse WITHOUT an intervening allocation"
|
|
38
|
+
note: "the UAF window"
|
|
39
|
+
- channel: crash
|
|
40
|
+
signature: "call through a heap pointer after a free"
|
|
41
|
+
note: "the stale fn pointer firing"
|
|
42
|
+
|
|
43
|
+
# The ATT&CK mapping (the navigator export consumes it)
|
|
44
|
+
mitre:
|
|
45
|
+
- T1068
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
technique: unsorted_bin_attack
|
|
2
|
+
author: Gregory Epp
|
|
3
|
+
source: https://github.com/shellphint/how2heap (unsorted_bin_attack)
|
|
4
|
+
|
|
5
|
+
rules:
|
|
6
|
+
- id: app_unsorted_bin_attack
|
|
7
|
+
head: [applicable, unsorted_bin_attack]
|
|
8
|
+
conditions:
|
|
9
|
+
- [fact, vuln, heap]
|
|
10
|
+
- [fact, function_pointer_on_heap, true]
|
|
11
|
+
- [cmp, glibc_minor, lt, 26]
|
|
12
|
+
|
|
13
|
+
kb:
|
|
14
|
+
- id: unsorted_bin_attack_001
|
|
15
|
+
technique: unsorted_bin_attack
|
|
16
|
+
description: >
|
|
17
|
+
Write the unsorted-bin head (a libc address) over an arbitrary
|
|
18
|
+
word via a forged bk on free. One write, unknown value - enough
|
|
19
|
+
for a global variable that gates a win path. Patched 2.26+.
|
|
20
|
+
chain: [forged_bk, unsorted_removal_write]
|
|
21
|
+
unlocks: [arb_write]
|
|
22
|
+
success_rate: 0.35
|
|
23
|
+
|
|
24
|
+
mcts:
|
|
25
|
+
requires: []
|
|
26
|
+
provides: [arb_write]
|
|
27
|
+
terminal: true
|
|
28
|
+
success: 0.35
|
|
29
|
+
|
|
30
|
+
priors: [7, 13]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# The defender side (the corpus read backwards): what this technique
|
|
34
|
+
# looks like to the defenses. Armored by check 9.
|
|
35
|
+
detection:
|
|
36
|
+
- channel: syscall
|
|
37
|
+
signature: "unsorted-bin iteration writing a libc address into an attacker-chosen slot"
|
|
38
|
+
note: "the classic large-lib-pointer write"
|
metadata
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: augure
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Gregory Epp
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: Augure encodes exploitation technique selection as Datalog rules verified
|
|
13
|
+
by arithmetic and SMT checks, ranked by Beta-bandit priors and planned by MCTS.
|
|
14
|
+
Every decision is reproducible and explainable. Augure decides. It never executes.
|
|
15
|
+
email:
|
|
16
|
+
- log0u7@users.noreply.github.com
|
|
17
|
+
executables:
|
|
18
|
+
- augure
|
|
19
|
+
- augure-benchmark
|
|
20
|
+
extensions: []
|
|
21
|
+
extra_rdoc_files: []
|
|
22
|
+
files:
|
|
23
|
+
- "/home/runner/work/augure/augure/docs/agent-snippet.md"
|
|
24
|
+
- "/home/runner/work/augure/augure/docs/auditability.md"
|
|
25
|
+
- "/home/runner/work/augure/augure/docs/build-format.md"
|
|
26
|
+
- "/home/runner/work/augure/augure/docs/explanation-architecture.md"
|
|
27
|
+
- "/home/runner/work/augure/augure/docs/how-to-swap-solver.md"
|
|
28
|
+
- "/home/runner/work/augure/augure/docs/how-to-write-rules.md"
|
|
29
|
+
- "/home/runner/work/augure/augure/docs/pack-format.md"
|
|
30
|
+
- "/home/runner/work/augure/augure/docs/reference.md"
|
|
31
|
+
- "/home/runner/work/augure/augure/docs/tutorial.md"
|
|
32
|
+
- "/home/runner/work/augure/augure/examples/ret2win.facts"
|
|
33
|
+
- "/home/runner/work/augure/augure/examples/split.facts"
|
|
34
|
+
- "/home/runner/work/augure/augure/exe/augure"
|
|
35
|
+
- "/home/runner/work/augure/augure/exe/augure-benchmark"
|
|
36
|
+
- "/home/runner/work/augure/augure/lib/augure.rb"
|
|
37
|
+
- "/home/runner/work/augure/augure/lib/augure/bandit.rb"
|
|
38
|
+
- "/home/runner/work/augure/augure/lib/augure/coverage.rb"
|
|
39
|
+
- "/home/runner/work/augure/augure/lib/augure/ctf_corpus.json"
|
|
40
|
+
- "/home/runner/work/augure/augure/lib/augure/engine.rb"
|
|
41
|
+
- "/home/runner/work/augure/augure/lib/augure/facts.rb"
|
|
42
|
+
- "/home/runner/work/augure/augure/lib/augure/kb_corpus.json"
|
|
43
|
+
- "/home/runner/work/augure/augure/lib/augure/knowledge_base.rb"
|
|
44
|
+
- "/home/runner/work/augure/augure/lib/augure/mcts.rb"
|
|
45
|
+
- "/home/runner/work/augure/augure/lib/augure/pack.rb"
|
|
46
|
+
- "/home/runner/work/augure/augure/lib/augure/pack_loader.rb"
|
|
47
|
+
- "/home/runner/work/augure/augure/lib/augure/parity.rb"
|
|
48
|
+
- "/home/runner/work/augure/augure/lib/augure/pipeline.rb"
|
|
49
|
+
- "/home/runner/work/augure/augure/lib/augure/priors.rb"
|
|
50
|
+
- "/home/runner/work/augure/augure/lib/augure/rules.rb"
|
|
51
|
+
- "/home/runner/work/augure/augure/lib/augure/smt_process.rb"
|
|
52
|
+
- "/home/runner/work/augure/augure/lib/augure/verifier.rb"
|
|
53
|
+
- "/home/runner/work/augure/augure/lib/augure/version.rb"
|
|
54
|
+
- "/home/runner/work/augure/augure/packs/banner_leak.yml"
|
|
55
|
+
- "/home/runner/work/augure/augure/packs/brop.yml"
|
|
56
|
+
- "/home/runner/work/augure/augure/packs/fastbin_hook.yml"
|
|
57
|
+
- "/home/runner/work/augure/augure/packs/got_partial_overwrite.yml"
|
|
58
|
+
- "/home/runner/work/augure/augure/packs/got_partial_overwrite_deref.yml"
|
|
59
|
+
- "/home/runner/work/augure/augure/packs/house_botcake.yml"
|
|
60
|
+
- "/home/runner/work/augure/augure/packs/house_force.yml"
|
|
61
|
+
- "/home/runner/work/augure/augure/packs/house_of_apple2.yml"
|
|
62
|
+
- "/home/runner/work/augure/augure/packs/house_orange.yml"
|
|
63
|
+
- "/home/runner/work/augure/augure/packs/jop.yml"
|
|
64
|
+
- "/home/runner/work/augure/augure/packs/large_bin_attack.yml"
|
|
65
|
+
- "/home/runner/work/augure/augure/packs/one_gadget.yml"
|
|
66
|
+
- "/home/runner/work/augure/augure/packs/orw.yml"
|
|
67
|
+
- "/home/runner/work/augure/augure/packs/ret2csu_v2.yml"
|
|
68
|
+
- "/home/runner/work/augure/augure/packs/ret2dlresolve_x86.yml"
|
|
69
|
+
- "/home/runner/work/augure/augure/packs/ret2partial_overwrite.yml"
|
|
70
|
+
- "/home/runner/work/augure/augure/packs/ret2vdso.yml"
|
|
71
|
+
- "/home/runner/work/augure/augure/packs/setcontext_srop.yml"
|
|
72
|
+
- "/home/runner/work/augure/augure/packs/uaf_tcache.yml"
|
|
73
|
+
- "/home/runner/work/augure/augure/packs/unsorted_bin_attack.yml"
|
|
74
|
+
- CHANGELOG.md
|
|
75
|
+
- LICENSE
|
|
76
|
+
- README.md
|
|
77
|
+
- exe/augure
|
|
78
|
+
- exe/augure-benchmark
|
|
79
|
+
homepage: https://github.com/log0u7/augure
|
|
80
|
+
licenses:
|
|
81
|
+
- MIT
|
|
82
|
+
metadata:
|
|
83
|
+
homepage_uri: https://github.com/log0u7/augure
|
|
84
|
+
source_code_uri: https://github.com/log0u7/augure
|
|
85
|
+
changelog_uri: https://github.com/log0u7/augure/blob/main/CHANGELOG.md
|
|
86
|
+
rdoc_options: []
|
|
87
|
+
require_paths:
|
|
88
|
+
- lib
|
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
|
+
requirements:
|
|
91
|
+
- - ">="
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: '3.4'
|
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
|
+
requirements:
|
|
96
|
+
- - ">="
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '0'
|
|
99
|
+
requirements: []
|
|
100
|
+
rubygems_version: 3.6.9
|
|
101
|
+
specification_version: 4
|
|
102
|
+
summary: 'Auditable exploitation decision layer: propose, verify, explain.'
|
|
103
|
+
test_files: []
|