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.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +136 -0
  3. data/LICENSE +21 -0
  4. data/README.md +217 -0
  5. data/exe/augure +181 -0
  6. data/exe/augure-benchmark +67 -0
  7. data/home/runner/work/augure/augure/docs/agent-snippet.md +31 -0
  8. data/home/runner/work/augure/augure/docs/auditability.md +160 -0
  9. data/home/runner/work/augure/augure/docs/build-format.md +119 -0
  10. data/home/runner/work/augure/augure/docs/explanation-architecture.md +74 -0
  11. data/home/runner/work/augure/augure/docs/how-to-swap-solver.md +73 -0
  12. data/home/runner/work/augure/augure/docs/how-to-write-rules.md +71 -0
  13. data/home/runner/work/augure/augure/docs/pack-format.md +137 -0
  14. data/home/runner/work/augure/augure/docs/reference.md +293 -0
  15. data/home/runner/work/augure/augure/docs/tutorial.md +108 -0
  16. data/home/runner/work/augure/augure/examples/ret2win.facts +11 -0
  17. data/home/runner/work/augure/augure/examples/split.facts +12 -0
  18. data/home/runner/work/augure/augure/exe/augure +181 -0
  19. data/home/runner/work/augure/augure/exe/augure-benchmark +67 -0
  20. data/home/runner/work/augure/augure/lib/augure/bandit.rb +118 -0
  21. data/home/runner/work/augure/augure/lib/augure/coverage.rb +56 -0
  22. data/home/runner/work/augure/augure/lib/augure/ctf_corpus.json +773 -0
  23. data/home/runner/work/augure/augure/lib/augure/engine.rb +128 -0
  24. data/home/runner/work/augure/augure/lib/augure/facts.rb +194 -0
  25. data/home/runner/work/augure/augure/lib/augure/kb_corpus.json +345 -0
  26. data/home/runner/work/augure/augure/lib/augure/knowledge_base.rb +109 -0
  27. data/home/runner/work/augure/augure/lib/augure/mcts.rb +178 -0
  28. data/home/runner/work/augure/augure/lib/augure/pack.rb +244 -0
  29. data/home/runner/work/augure/augure/lib/augure/pack_loader.rb +93 -0
  30. data/home/runner/work/augure/augure/lib/augure/parity.rb +69 -0
  31. data/home/runner/work/augure/augure/lib/augure/pipeline.rb +107 -0
  32. data/home/runner/work/augure/augure/lib/augure/priors.rb +32 -0
  33. data/home/runner/work/augure/augure/lib/augure/rules.rb +300 -0
  34. data/home/runner/work/augure/augure/lib/augure/smt_process.rb +48 -0
  35. data/home/runner/work/augure/augure/lib/augure/verifier.rb +40 -0
  36. data/home/runner/work/augure/augure/lib/augure/version.rb +5 -0
  37. data/home/runner/work/augure/augure/lib/augure.rb +25 -0
  38. data/home/runner/work/augure/augure/packs/banner_leak.yml +46 -0
  39. data/home/runner/work/augure/augure/packs/brop.yml +46 -0
  40. data/home/runner/work/augure/augure/packs/fastbin_hook.yml +45 -0
  41. data/home/runner/work/augure/augure/packs/got_partial_overwrite.yml +45 -0
  42. data/home/runner/work/augure/augure/packs/got_partial_overwrite_deref.yml +39 -0
  43. data/home/runner/work/augure/augure/packs/house_botcake.yml +38 -0
  44. data/home/runner/work/augure/augure/packs/house_force.yml +37 -0
  45. data/home/runner/work/augure/augure/packs/house_of_apple2.yml +45 -0
  46. data/home/runner/work/augure/augure/packs/house_orange.yml +38 -0
  47. data/home/runner/work/augure/augure/packs/jop.yml +39 -0
  48. data/home/runner/work/augure/augure/packs/large_bin_attack.yml +39 -0
  49. data/home/runner/work/augure/augure/packs/one_gadget.yml +38 -0
  50. data/home/runner/work/augure/augure/packs/orw.yml +55 -0
  51. data/home/runner/work/augure/augure/packs/ret2csu_v2.yml +55 -0
  52. data/home/runner/work/augure/augure/packs/ret2dlresolve_x86.yml +39 -0
  53. data/home/runner/work/augure/augure/packs/ret2partial_overwrite.yml +38 -0
  54. data/home/runner/work/augure/augure/packs/ret2vdso.yml +39 -0
  55. data/home/runner/work/augure/augure/packs/setcontext_srop.yml +46 -0
  56. data/home/runner/work/augure/augure/packs/uaf_tcache.yml +45 -0
  57. data/home/runner/work/augure/augure/packs/unsorted_bin_attack.yml +38 -0
  58. 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: []