active_stix 0.1.21

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 (289) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/config/active_stix_manifest.js +2 -0
  6. data/app/assets/javascripts/active_stix/application.js +15 -0
  7. data/app/assets/javascripts/active_stix/artifacts.js +2 -0
  8. data/app/assets/javascripts/active_stix/attack_patterns.js +2 -0
  9. data/app/assets/javascripts/active_stix/bcc_refs.js +2 -0
  10. data/app/assets/javascripts/active_stix/bundled_objects.js +2 -0
  11. data/app/assets/javascripts/active_stix/bundles.js +2 -0
  12. data/app/assets/javascripts/active_stix/campaigns.js +2 -0
  13. data/app/assets/javascripts/active_stix/course_of_actions.js +2 -0
  14. data/app/assets/javascripts/active_stix/cyber_observables.js +2 -0
  15. data/app/assets/javascripts/active_stix/email_messages.js +2 -0
  16. data/app/assets/javascripts/active_stix/external_references.js +2 -0
  17. data/app/assets/javascripts/active_stix/files.js +2 -0
  18. data/app/assets/javascripts/active_stix/identities.js +2 -0
  19. data/app/assets/javascripts/active_stix/indicator_labels.js +2 -0
  20. data/app/assets/javascripts/active_stix/indicators.js +2 -0
  21. data/app/assets/javascripts/active_stix/intrusion_sets.js +2 -0
  22. data/app/assets/javascripts/active_stix/kill_chain_phases.js +2 -0
  23. data/app/assets/javascripts/active_stix/kill_chains.js +2 -0
  24. data/app/assets/javascripts/active_stix/malwares.js +2 -0
  25. data/app/assets/javascripts/active_stix/marking_definitions.js +2 -0
  26. data/app/assets/javascripts/active_stix/observed_data.js +2 -0
  27. data/app/assets/javascripts/active_stix/open_vocabularies.js +2 -0
  28. data/app/assets/javascripts/active_stix/phases.js +2 -0
  29. data/app/assets/javascripts/active_stix/recipients.js +2 -0
  30. data/app/assets/javascripts/active_stix/relationships.js +2 -0
  31. data/app/assets/javascripts/active_stix/reports.js +2 -0
  32. data/app/assets/javascripts/active_stix/threat_actors.js +2 -0
  33. data/app/assets/javascripts/active_stix/tools.js +2 -0
  34. data/app/assets/javascripts/active_stix/urls.js +2 -0
  35. data/app/assets/javascripts/active_stix/users.js +2 -0
  36. data/app/assets/stylesheets/active_stix/application.css +15 -0
  37. data/app/assets/stylesheets/active_stix/artifacts.css +4 -0
  38. data/app/assets/stylesheets/active_stix/attack_patterns.css +4 -0
  39. data/app/assets/stylesheets/active_stix/bcc_refs.css +4 -0
  40. data/app/assets/stylesheets/active_stix/bundled_objects.css +4 -0
  41. data/app/assets/stylesheets/active_stix/bundles.css +4 -0
  42. data/app/assets/stylesheets/active_stix/campaigns.css +4 -0
  43. data/app/assets/stylesheets/active_stix/course_of_actions.css +4 -0
  44. data/app/assets/stylesheets/active_stix/cyber_observables.css +4 -0
  45. data/app/assets/stylesheets/active_stix/email_messages.css +4 -0
  46. data/app/assets/stylesheets/active_stix/external_references.css +4 -0
  47. data/app/assets/stylesheets/active_stix/files.css +4 -0
  48. data/app/assets/stylesheets/active_stix/identities.css +4 -0
  49. data/app/assets/stylesheets/active_stix/indicator_labels.css +4 -0
  50. data/app/assets/stylesheets/active_stix/indicators.css +4 -0
  51. data/app/assets/stylesheets/active_stix/intrusion_sets.css +4 -0
  52. data/app/assets/stylesheets/active_stix/kill_chain_phases.css +4 -0
  53. data/app/assets/stylesheets/active_stix/kill_chains.css +4 -0
  54. data/app/assets/stylesheets/active_stix/malwares.css +4 -0
  55. data/app/assets/stylesheets/active_stix/marking_definitions.css +4 -0
  56. data/app/assets/stylesheets/active_stix/observed_data.css +4 -0
  57. data/app/assets/stylesheets/active_stix/open_vocabularies.css +4 -0
  58. data/app/assets/stylesheets/active_stix/phases.css +4 -0
  59. data/app/assets/stylesheets/active_stix/recipients.css +4 -0
  60. data/app/assets/stylesheets/active_stix/relationships.css +4 -0
  61. data/app/assets/stylesheets/active_stix/reports.css +4 -0
  62. data/app/assets/stylesheets/active_stix/threat_actors.css +4 -0
  63. data/app/assets/stylesheets/active_stix/tools.css +4 -0
  64. data/app/assets/stylesheets/active_stix/urls.css +4 -0
  65. data/app/assets/stylesheets/active_stix/users.css +4 -0
  66. data/app/assets/stylesheets/scaffold.css +80 -0
  67. data/app/controllers/active_stix/application_controller.rb +5 -0
  68. data/app/controllers/active_stix/artifacts_controller.rb +62 -0
  69. data/app/controllers/active_stix/attack_patterns_controller.rb +27 -0
  70. data/app/controllers/active_stix/bcc_refs_controller.rb +62 -0
  71. data/app/controllers/active_stix/bundled_objects_controller.rb +62 -0
  72. data/app/controllers/active_stix/bundles_controller.rb +11 -0
  73. data/app/controllers/active_stix/campaigns_controller.rb +74 -0
  74. data/app/controllers/active_stix/course_of_actions_controller.rb +62 -0
  75. data/app/controllers/active_stix/cyber_observables_controller.rb +62 -0
  76. data/app/controllers/active_stix/email_addresses_controller.rb +74 -0
  77. data/app/controllers/active_stix/email_messages_controller.rb +26 -0
  78. data/app/controllers/active_stix/external_references_controller.rb +62 -0
  79. data/app/controllers/active_stix/files_controller.rb +74 -0
  80. data/app/controllers/active_stix/identities_controller.rb +128 -0
  81. data/app/controllers/active_stix/indicator_labels_controller.rb +62 -0
  82. data/app/controllers/active_stix/indicators_controller.rb +62 -0
  83. data/app/controllers/active_stix/intrusion_sets_controller.rb +62 -0
  84. data/app/controllers/active_stix/kill_chain_phases_controller.rb +62 -0
  85. data/app/controllers/active_stix/kill_chains_controller.rb +62 -0
  86. data/app/controllers/active_stix/malwares_controller.rb +62 -0
  87. data/app/controllers/active_stix/marking_definitions_controller.rb +62 -0
  88. data/app/controllers/active_stix/observed_data_controller.rb +62 -0
  89. data/app/controllers/active_stix/open_vocabularies_controller.rb +62 -0
  90. data/app/controllers/active_stix/phases_controller.rb +62 -0
  91. data/app/controllers/active_stix/recipients_controller.rb +62 -0
  92. data/app/controllers/active_stix/relationships_controller.rb +62 -0
  93. data/app/controllers/active_stix/reports_controller.rb +62 -0
  94. data/app/controllers/active_stix/threat_actors_controller.rb +75 -0
  95. data/app/controllers/active_stix/tools_controller.rb +62 -0
  96. data/app/controllers/active_stix/urls_controller.rb +62 -0
  97. data/app/controllers/active_stix/user_accounts_controller.rb +74 -0
  98. data/app/controllers/active_stix/users_controller.rb +62 -0
  99. data/app/helpers/active_stix/application_helper.rb +4 -0
  100. data/app/helpers/active_stix/artifacts_helper.rb +4 -0
  101. data/app/helpers/active_stix/attack_patterns_helper.rb +4 -0
  102. data/app/helpers/active_stix/bcc_refs_helper.rb +4 -0
  103. data/app/helpers/active_stix/bundled_objects_helper.rb +4 -0
  104. data/app/helpers/active_stix/bundles_helper.rb +4 -0
  105. data/app/helpers/active_stix/campaigns_helper.rb +4 -0
  106. data/app/helpers/active_stix/course_of_actions_helper.rb +4 -0
  107. data/app/helpers/active_stix/cyber_observables_helper.rb +4 -0
  108. data/app/helpers/active_stix/email_messages_helper.rb +4 -0
  109. data/app/helpers/active_stix/external_references_helper.rb +4 -0
  110. data/app/helpers/active_stix/files_helper.rb +4 -0
  111. data/app/helpers/active_stix/identities_helper.rb +4 -0
  112. data/app/helpers/active_stix/indicator_labels_helper.rb +4 -0
  113. data/app/helpers/active_stix/indicators_helper.rb +4 -0
  114. data/app/helpers/active_stix/intrusion_sets_helper.rb +4 -0
  115. data/app/helpers/active_stix/kill_chain_phases_helper.rb +4 -0
  116. data/app/helpers/active_stix/kill_chains_helper.rb +4 -0
  117. data/app/helpers/active_stix/malwares_helper.rb +4 -0
  118. data/app/helpers/active_stix/marking_definitions_helper.rb +4 -0
  119. data/app/helpers/active_stix/observed_data_helper.rb +4 -0
  120. data/app/helpers/active_stix/open_vocabularies_helper.rb +4 -0
  121. data/app/helpers/active_stix/phases_helper.rb +4 -0
  122. data/app/helpers/active_stix/recipients_helper.rb +4 -0
  123. data/app/helpers/active_stix/relationships_helper.rb +4 -0
  124. data/app/helpers/active_stix/reports_helper.rb +4 -0
  125. data/app/helpers/active_stix/threat_actors_helper.rb +4 -0
  126. data/app/helpers/active_stix/tools_helper.rb +4 -0
  127. data/app/helpers/active_stix/urls_helper.rb +4 -0
  128. data/app/helpers/active_stix/users_helper.rb +4 -0
  129. data/app/jobs/active_stix/application_job.rb +4 -0
  130. data/app/mailers/active_stix/application_mailer.rb +6 -0
  131. data/app/models/active_stix/application_record.rb +5 -0
  132. data/app/models/active_stix/artifact.rb +23 -0
  133. data/app/models/active_stix/attack_pattern.rb +150 -0
  134. data/app/models/active_stix/bcc_ref.rb +6 -0
  135. data/app/models/active_stix/bundle.rb +108 -0
  136. data/app/models/active_stix/bundled_object.rb +4 -0
  137. data/app/models/active_stix/campaign.rb +65 -0
  138. data/app/models/active_stix/cc_ref.rb +6 -0
  139. data/app/models/active_stix/course_of_action.rb +54 -0
  140. data/app/models/active_stix/cyber_observable.rb +4 -0
  141. data/app/models/active_stix/email_address.rb +27 -0
  142. data/app/models/active_stix/email_message.rb +339 -0
  143. data/app/models/active_stix/external_reference.rb +48 -0
  144. data/app/models/active_stix/file.rb +2 -0
  145. data/app/models/active_stix/identity.rb +141 -0
  146. data/app/models/active_stix/indicator.rb +58 -0
  147. data/app/models/active_stix/indicator_label.rb +4 -0
  148. data/app/models/active_stix/intrusion_set.rb +69 -0
  149. data/app/models/active_stix/kill_chain.rb +7 -0
  150. data/app/models/active_stix/kill_chain_phase.rb +6 -0
  151. data/app/models/active_stix/label.rb +17 -0
  152. data/app/models/active_stix/label_malware.rb +4 -0
  153. data/app/models/active_stix/label_report.rb +4 -0
  154. data/app/models/active_stix/label_tool.rb +4 -0
  155. data/app/models/active_stix/malware.rb +98 -0
  156. data/app/models/active_stix/marking_definition.rb +21 -0
  157. data/app/models/active_stix/markup.rb +6 -0
  158. data/app/models/active_stix/object_marking.rb +11 -0
  159. data/app/models/active_stix/observed_datum.rb +67 -0
  160. data/app/models/active_stix/open_vocabulary.rb +8 -0
  161. data/app/models/active_stix/phase.rb +41 -0
  162. data/app/models/active_stix/recipient.rb +4 -0
  163. data/app/models/active_stix/reference_item.rb +4 -0
  164. data/app/models/active_stix/relationship.rb +95 -0
  165. data/app/models/active_stix/report.rb +93 -0
  166. data/app/models/active_stix/report_object.rb +9 -0
  167. data/app/models/active_stix/threat_actor.rb +139 -0
  168. data/app/models/active_stix/to_ref.rb +6 -0
  169. data/app/models/active_stix/tool.rb +112 -0
  170. data/app/models/active_stix/url.rb +15 -0
  171. data/app/models/active_stix/user.rb +4 -0
  172. data/app/models/active_stix/user_account.rb +3 -0
  173. data/app/views/active_stix/artifacts/_form.html.erb +57 -0
  174. data/app/views/active_stix/artifacts/edit.html.erb +6 -0
  175. data/app/views/active_stix/artifacts/index.html.erb +41 -0
  176. data/app/views/active_stix/artifacts/new.html.erb +5 -0
  177. data/app/views/active_stix/artifacts/show.html.erb +44 -0
  178. data/app/views/active_stix/attack_patterns/_form.html.erb +37 -0
  179. data/app/views/active_stix/attack_patterns/edit.html.erb +2 -0
  180. data/app/views/active_stix/attack_patterns/index.html.erb +2 -0
  181. data/app/views/active_stix/attack_patterns/new.html.erb +2 -0
  182. data/app/views/active_stix/attack_patterns/show.html.erb +140 -0
  183. data/app/views/active_stix/bcc_refs/_form.html.erb +27 -0
  184. data/app/views/active_stix/bcc_refs/edit.html.erb +6 -0
  185. data/app/views/active_stix/bcc_refs/index.html.erb +29 -0
  186. data/app/views/active_stix/bcc_refs/new.html.erb +5 -0
  187. data/app/views/active_stix/bcc_refs/show.html.erb +14 -0
  188. data/app/views/active_stix/bundles/index.html.erb +1 -0
  189. data/app/views/active_stix/bundles/show.html.erb +7 -0
  190. data/app/views/active_stix/campaigns/_form.html.erb +42 -0
  191. data/app/views/active_stix/campaigns/_stix_campaign.json.jbuilder +2 -0
  192. data/app/views/active_stix/campaigns/edit.html.erb +6 -0
  193. data/app/views/active_stix/campaigns/index.html.erb +35 -0
  194. data/app/views/active_stix/campaigns/index.json.jbuilder +1 -0
  195. data/app/views/active_stix/campaigns/new.html.erb +5 -0
  196. data/app/views/active_stix/campaigns/show.html.erb +29 -0
  197. data/app/views/active_stix/campaigns/show.json.jbuilder +1 -0
  198. data/app/views/active_stix/email_messages/_form.html.erb +62 -0
  199. data/app/views/active_stix/email_messages/_stix_email_message.json.jbuilder +2 -0
  200. data/app/views/active_stix/email_messages/edit.html.erb +6 -0
  201. data/app/views/active_stix/email_messages/index.html.erb +43 -0
  202. data/app/views/active_stix/email_messages/index.json.jbuilder +1 -0
  203. data/app/views/active_stix/email_messages/new.html.erb +5 -0
  204. data/app/views/active_stix/email_messages/show.html.erb +165 -0
  205. data/app/views/active_stix/email_messages/show.json.jbuilder +1 -0
  206. data/app/views/active_stix/files/_form.html.erb +92 -0
  207. data/app/views/active_stix/files/_stix_file.json.jbuilder +2 -0
  208. data/app/views/active_stix/files/edit.html.erb +6 -0
  209. data/app/views/active_stix/files/index.html.erb +55 -0
  210. data/app/views/active_stix/files/index.json.jbuilder +1 -0
  211. data/app/views/active_stix/files/new.html.erb +5 -0
  212. data/app/views/active_stix/files/show.html.erb +79 -0
  213. data/app/views/active_stix/files/show.json.jbuilder +1 -0
  214. data/app/views/active_stix/identities/_form.html.erb +27 -0
  215. data/app/views/active_stix/identities/_individual.html.erb +100 -0
  216. data/app/views/active_stix/identities/_organization.html.erb +72 -0
  217. data/app/views/active_stix/identities/_received_email_messages.html.erb +27 -0
  218. data/app/views/active_stix/identities/_sent_email_messages.html.erb +27 -0
  219. data/app/views/active_stix/identities/_threat_icons.html.erb +3 -0
  220. data/app/views/active_stix/identities/edit.html.erb +2 -0
  221. data/app/views/active_stix/identities/index.html.erb +37 -0
  222. data/app/views/active_stix/identities/new.html.erb +5 -0
  223. data/app/views/active_stix/identities/show.html.erb +15 -0
  224. data/app/views/active_stix/layouts/active_stix/application.html.erb +16 -0
  225. data/app/views/active_stix/recipients/_form.html.erb +27 -0
  226. data/app/views/active_stix/recipients/edit.html.erb +6 -0
  227. data/app/views/active_stix/recipients/index.html.erb +29 -0
  228. data/app/views/active_stix/recipients/new.html.erb +5 -0
  229. data/app/views/active_stix/recipients/show.html.erb +14 -0
  230. data/app/views/active_stix/threat_actors/_form.html.erb +32 -0
  231. data/app/views/active_stix/threat_actors/_stix_threat_actor.json.jbuilder +2 -0
  232. data/app/views/active_stix/threat_actors/edit.html.erb +6 -0
  233. data/app/views/active_stix/threat_actors/flags.html.erb +184 -0
  234. data/app/views/active_stix/threat_actors/index.html.erb +26 -0
  235. data/app/views/active_stix/threat_actors/index.json.jbuilder +1 -0
  236. data/app/views/active_stix/threat_actors/new.html.erb +5 -0
  237. data/app/views/active_stix/threat_actors/show.html.erb +4 -0
  238. data/app/views/active_stix/threat_actors/show.json.jbuilder +1 -0
  239. data/app/views/layouts/active_stix/application.html.erb +16 -0
  240. data/config/routes.rb +39 -0
  241. data/db/migrate/20191204200025_create_active_stix_bundled_objects.rb +11 -0
  242. data/db/migrate/20191204213707_create_active_stix_bundles.rb +10 -0
  243. data/db/migrate/20191204213802_create_active_stix_campaigns.rb +15 -0
  244. data/db/migrate/20191204213926_create_active_stix_course_of_actions.rb +12 -0
  245. data/db/migrate/20191204214020_create_active_stix_cyber_observables.rb +11 -0
  246. data/db/migrate/20191204214955_create_active_stix_email_messages.rb +20 -0
  247. data/db/migrate/20191204215029_create_active_stix_external_references.rb +12 -0
  248. data/db/migrate/20191204215302_create_active_stix_files.rb +23 -0
  249. data/db/migrate/20191204215419_create_active_stix_identities.rb +13 -0
  250. data/db/migrate/20191204215542_create_active_stix_indicator_labels.rb +10 -0
  251. data/db/migrate/20191204215637_create_active_stix_indicators.rb +16 -0
  252. data/db/migrate/20191204215849_create_active_stix_intrusion_sets.rb +15 -0
  253. data/db/migrate/20191204215929_create_active_stix_kill_chain_phases.rb +10 -0
  254. data/db/migrate/20191204215951_create_active_stix_kill_chains.rb +9 -0
  255. data/db/migrate/20191204220149_create_active_stix_malwares.rb +12 -0
  256. data/db/migrate/20191204220539_create_active_stix_marking_definitions.rb +12 -0
  257. data/db/migrate/20191204220853_create_active_stix_observed_data.rb +12 -0
  258. data/db/migrate/20191204220917_create_active_stix_open_vocabularies.rb +9 -0
  259. data/db/migrate/20191204220952_create_active_stix_phases.rb +11 -0
  260. data/db/migrate/20191204221129_create_active_stix_recipients.rb +10 -0
  261. data/db/migrate/20191204221227_create_active_stix_relationships.rb +16 -0
  262. data/db/migrate/20191204221323_create_active_stix_report_objects.rb +11 -0
  263. data/db/migrate/20191204221359_create_active_stix_reports.rb +14 -0
  264. data/db/migrate/20191204221425_create_active_stix_threat_actors.rb +11 -0
  265. data/db/migrate/20191204221454_create_active_stix_tools.rb +12 -0
  266. data/db/migrate/20191204221639_create_active_stix_urls.rb +9 -0
  267. data/db/migrate/20191204221849_create_active_stix_users.rb +22 -0
  268. data/db/migrate/20191205182234_create_active_stix_bcc_refs.rb +10 -0
  269. data/db/migrate/20191205182255_create_active_stix_cc_refs.rb +10 -0
  270. data/db/migrate/20191205182316_create_active_stix_to_refs.rb +10 -0
  271. data/db/migrate/20191212203611_add_spec_version_to_bundles.rb +5 -0
  272. data/db/migrate/20191212215136_create_active_stix_attack_patterns.rb +12 -0
  273. data/db/migrate/20191212220222_create_active_stix_reference_items.rb +11 -0
  274. data/db/migrate/20191213135204_create_active_stix_labels.rb +10 -0
  275. data/db/migrate/20191213140951_create_active_stix_markups.rb +11 -0
  276. data/db/migrate/20191221210537_fix_observed_data.rb +6 -0
  277. data/db/migrate/20191221223602_create_active_stix_artifacts.rb +16 -0
  278. data/db/migrate/20191223075550_change_artifact_ref_to_string.rb +5 -0
  279. data/db/migrate/20191223154000_add_stix_id_to_email_messages.rb +5 -0
  280. data/db/migrate/20200114162245_add_labels_to_active_stix_identities.rb +5 -0
  281. data/db/migrate/20200404223006_add_aliases_to_tools.rb +5 -0
  282. data/db/migrate/20200404223047_add_aliases_to_attack_patterns.rb +5 -0
  283. data/db/migrate/20200404223158_add_aliases_to_malwares.rb +5 -0
  284. data/db/migrate/20200404223210_add_aliases_to_threat_actors.rb +5 -0
  285. data/lib/active_stix.rb +8 -0
  286. data/lib/active_stix/engine.rb +13 -0
  287. data/lib/active_stix/version.rb +3 -0
  288. data/lib/tasks/active_stix_tasks.rake +4 -0
  289. metadata +358 -0
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module ArtifactsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module AttackPatternsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module BccRefsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module BundledObjectsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module BundlesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module CampaignsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module CourseOfActionsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module CyberObservablesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module EmailMessagesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module ExternalReferencesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module FilesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module IdentitiesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module IndicatorLabelsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module IndicatorsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module IntrusionSetsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module KillChainPhasesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module KillChainsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module MalwaresHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module MarkingDefinitionsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module ObservedDataHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module OpenVocabulariesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module PhasesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module RecipientsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module RelationshipsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module ReportsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module ThreatActorsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module ToolsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module UrlsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ module UsersHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveStix
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module ActiveStix
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: 'from@example.com'
4
+ layout 'mailer'
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module ActiveStix
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ module ActiveStix
2
+ class Artifact < ApplicationRecord
3
+
4
+ before_create do
5
+ self.stix_id = "#{self.type}--#{SecureRandom.uuid}" if stix_id.blank?
6
+ end
7
+
8
+ def type
9
+ return "artifact"
10
+ end
11
+
12
+
13
+
14
+ def self.create_from_eml(eml)
15
+ mail = Mail.new(eml)
16
+ artifact = Artifact.new
17
+ artifact.mime_type = mail.mime_type
18
+ artifact.payload_bin = eml
19
+ artifact.save
20
+ artifact
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,150 @@
1
+ class ActiveStix::AttackPattern < ApplicationRecord
2
+ has_many :reference_items, as: 'referrer'
3
+ has_many :external_references, class_name: 'ActiveStix::ExternalReference', through: :reference_items
4
+
5
+ has_many :kill_chain_phases, class_name: 'ActiveStix::KillChainPhase', foreign_key: 'attack_pattern_ref', primary_key: 'stix_id'
6
+ has_many :phases, class_name: 'ActiveStix::Phase', through: :kill_chain_phases
7
+
8
+ # has_many :marking_definitions, as: 'markable' todo
9
+
10
+ has_many :source_relationships, class_name: 'ActiveStix::Relationship', primary_key: 'stix_id', foreign_key: 'source_ref' #relationships where this class is the source
11
+ has_many :target_relationships, class_name: 'ActiveStix::Relationship', primary_key: 'stix_id', foreign_key: 'target_ref' #relationships where this class is the target
12
+
13
+ before_create do
14
+ self.stix_id = "#{type}--#{SecureRandom.uuid}" if stix_id.blank?
15
+ end
16
+
17
+
18
+ def type
19
+ 'attack-pattern'
20
+ end
21
+
22
+ def targets?(identity)
23
+ ActiveStix::Relationship.where(source: self, target: identity).any?
24
+ end
25
+
26
+ def self.expected_keys
27
+ [
28
+ 'external_references',
29
+ 'kill_chain_phases',
30
+ 'object_marking_refs'
31
+ ]
32
+ end
33
+
34
+ def self.ingest_json(obj)
35
+ attack_pattern = find_or_create_by(stix_id: obj['id'], name: obj['name'], description: obj['description'])
36
+
37
+ expected_keys.each do |expected_key|
38
+ if obj.has_key?(expected_key)
39
+ send(expected_key, *[attack_pattern, obj])
40
+ end
41
+ end
42
+
43
+ attack_pattern.save
44
+ attack_pattern
45
+ end
46
+
47
+ def self.external_references(attack_pattern, obj)
48
+ obj['external_references'].each do |er|
49
+ external_reference = ActiveStix::ExternalReference.ingest_json(er, obj['id'])
50
+ attack_pattern.external_references << external_reference unless ActiveStix::ReferenceItem.find_by(external_reference_id: external_reference.id, referrer_id: attack_pattern.id)
51
+ end
52
+ end
53
+
54
+ def self.kill_chain_phases(attack_pattern, obj)
55
+ obj['kill_chain_phases'].each do |kc|
56
+ phase = ActiveStix::Phase.ingest_json(kc)
57
+ attack_pattern.phases << phase unless ActiveStix::KillChainPhase.find_by(attack_pattern_ref: attack_pattern.stix_id, phase_id: phase.id)
58
+ end
59
+ end
60
+
61
+ def self.object_marking_refs(attack_pattern, obj)
62
+ # obj['object_marking_refs'].each do |mr|
63
+ # marking_definition = ActiveStix::MarkingDefinition.create_by_id(mr)
64
+ #
65
+ # #ensure no duplicate entries
66
+ # attack_pattern.marking_definitions << marking_definition unless ActiveStix::ReferenceObjectMarkingAttack.find_by(marking_definition_id: marking_definition.id, attack_pattern_id: attack_pattern.id)
67
+ #
68
+ # end todo
69
+ end
70
+
71
+
72
+ def indicator_relationships
73
+ relationships = []
74
+ ActiveStix::Relationship.where(target: self, relationship_type: "uses", source_type: "ActiveStix::Indicator").or(
75
+ ActiveStix::Relationship.where(target: self, relationship_type: "indicates", source_type: "ActiveStix::Indicator")
76
+ ).each do |rel|
77
+ relationships << rel
78
+ end
79
+ relationships
80
+ end
81
+
82
+ def indicators
83
+ indicator_relationships.collect {|rel| rel.source}
84
+ end
85
+
86
+
87
+ def convert_to_json
88
+ external_refs_arr = []
89
+ external_references.each do |x|
90
+ external_refs_arr << x.convert_to_json
91
+ end
92
+
93
+ phase_arr = []
94
+ phases.each do |x|
95
+ phase_arr << x.convert_to_json
96
+ end
97
+
98
+ # marking_def_arr = []
99
+ # marking_definitions.each do |x|
100
+ # marking_def_arr << x.convert_to_json
101
+ # end todo
102
+
103
+ data_sources_arr = []
104
+ data_sources.each do |x|
105
+ data_sources_arr << x.convert_to_json
106
+ end
107
+
108
+ platform_arr = []
109
+ platforms.each do |x|
110
+ platform_arr << x.convert_to_json
111
+ end
112
+
113
+
114
+ perm_arr = []
115
+ permissions_requireds.each do |x|
116
+ perm_arr << x.convert_to_json
117
+ end
118
+
119
+ {
120
+ :external_references => external_refs_arr,
121
+ :object_marking_refs => marking_def_arr,
122
+ :modified => updated_at.to_s,
123
+ :kill_chain_phases => phase_arr,
124
+ :id => stix_id,
125
+ :name => name,
126
+ :x_mitre_version => versions.first.convert_to_json,
127
+ :type => "attack-pattern",
128
+ :description => description,
129
+ }
130
+ end
131
+
132
+
133
+ def as_stix
134
+ as_json(only: []).tap do |hash|
135
+ hash["id"] = stix_id
136
+ hash["type"] = type
137
+ hash["created"] = created_at.rfc3339(3)
138
+ hash["modified"] = updated_at.rfc3339(3)
139
+ hash["external_references"] = external_references.collect {|ref| ref.as_stix}
140
+ hash["name"] = name
141
+ hash["description"] = description
142
+ hash["kill_chain_phases"] = phases.collect {|phase| phase.as_stix}
143
+ end
144
+ end
145
+
146
+ def targets(identity)
147
+ ActiveStix::Relationship.relate(self, identity, "targets")
148
+ end
149
+
150
+ end
@@ -0,0 +1,6 @@
1
+ module ActiveStix
2
+ class BccRef < ActiveStix::Recipient
3
+ belongs_to :email_message
4
+ belongs_to :email_address
5
+ end
6
+ end
@@ -0,0 +1,108 @@
1
+ module ActiveStix
2
+ class Bundle < ApplicationRecord
3
+
4
+ has_many :bundled_objects, primary_key: 'stix_id', foreign_key: 'bundle_ref'
5
+
6
+ @@stix_map = {
7
+ 'bundle' => ActiveStix::Bundle,
8
+ 'attack-pattern' => ActiveStix::AttackPattern,
9
+ 'relationship' => ActiveStix::Relationship,
10
+ 'course-of-action' => ActiveStix::CourseOfAction,
11
+ 'identity' => ActiveStix::Identity,
12
+ 'intrusion-set' => ActiveStix::IntrusionSet,
13
+ 'malware' => ActiveStix::Malware,
14
+ 'tool' => ActiveStix::Tool,
15
+ 'marking-definition' => ActiveStix::MarkingDefinition,
16
+ 'report' => ActiveStix::Report,
17
+ 'campaign' => ActiveStix::Campaign,
18
+ 'indicator' => ActiveStix::Indicator
19
+ }
20
+
21
+ before_create do
22
+ self.stix_id = "#{self.type}--#{SecureRandom.uuid}" if stix_id.blank?
23
+ end
24
+
25
+ def type
26
+ 'bundle'
27
+ end
28
+
29
+ def self.ingest(filename)
30
+ file_handle = ::File.open(filename, "r")
31
+ file_data = file_handle.read
32
+ json_file_data = JSON.parse(file_data)
33
+ bundle = ingest_json(json_file_data, nil)
34
+ bundle
35
+ end
36
+
37
+ def self.ingest_json(obj, parent)
38
+ #first create all the objects and then create the relationships to simplify associations
39
+ # first create all objects then reference object_refs in reports
40
+ list_relationships = []
41
+ list_reports = []
42
+ bundle = ActiveStix::Bundle.find_or_create_by(stix_id: obj['id'], spec_version: obj['spec_version'])
43
+ objects = obj['objects'].collect do |o|
44
+ #puts "Loc A: #{o['type']}"
45
+ if o['type'] == 'relationship'
46
+ list_relationships << o
47
+ else
48
+ begin
49
+ #puts o['type']
50
+ if o['type'].starts_with?("x-") and !ActiveStix.process_x_attrs?
51
+ else
52
+ bundle.add(@@stix_map[o['type']].ingest_json(o))
53
+ end
54
+ if o['type'] == 'report'
55
+ #add all report object_refs after all objects are created
56
+ list_reports << o
57
+ end
58
+ rescue
59
+ Rails.logger.info "Failed trying to ingest type #{o['type']}"
60
+ raise
61
+ end
62
+ end
63
+ end
64
+ list_relationships.each do |rel|
65
+ bundle.add(ActiveStix::Relationship.ingest_json(rel))
66
+ end
67
+
68
+ list_reports.each do |rep|
69
+ ActiveStix::Report.add_obj_refs(rep)
70
+ end
71
+ bundle
72
+ end
73
+
74
+ def add(stix_object)
75
+ if stix_object.is_a? Enumerable
76
+ stix_object.each do |so|
77
+ add(so)
78
+ end
79
+ else
80
+ unless bundled_objects.where(object_ref: stix_object.stix_id).any?
81
+ bundled_objects.create(stix_object: stix_object)
82
+ end
83
+ end
84
+ end
85
+
86
+ def includes?(stix_object)
87
+ bundled_objects.where(object_ref: stix_object.stix_id).any?
88
+ end
89
+
90
+ def as_stix
91
+ {
92
+ "type" => type,
93
+ "id" => stix_id,
94
+ "spec_version" => "2.0",
95
+ "objects" => bundled_objects.collect {|bo| bo.stix_object.as_stix}
96
+ }
97
+ end
98
+
99
+ def convert_to_json
100
+ {
101
+ :type => "bundle",
102
+ :id => stix_id,
103
+ :spec_version => spec_version,
104
+ :objects => bundled_objects.collect {|bo| bo.stix_object.convert_to_json}
105
+ }.to_json
106
+ end
107
+ end
108
+ end