stix_schema_spy 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 (482) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +24 -0
  5. data/README.md +41 -0
  6. data/Rakefile +3 -0
  7. data/config/1.0.1/stix/README.md +20 -0
  8. data/config/1.0.1/stix/campaign.xsd +210 -0
  9. data/config/1.0.1/stix/course_of_action.xsd +166 -0
  10. data/config/1.0.1/stix/cybox/README.md +13 -0
  11. data/config/1.0.1/stix/cybox/cybox_common.xsd +2319 -0
  12. data/config/1.0.1/stix/cybox/cybox_core.xsd +1095 -0
  13. data/config/1.0.1/stix/cybox/cybox_default_vocabularies.xsd +3326 -0
  14. data/config/1.0.1/stix/cybox/extensions/platform/README.txt +1 -0
  15. data/config/1.0.1/stix/cybox/extensions/platform/cpe-language_2.3.xsd +234 -0
  16. data/config/1.0.1/stix/cybox/extensions/platform/cpe-naming_2.3.xsd +45 -0
  17. data/config/1.0.1/stix/cybox/extensions/platform/cpe2.3.xsd +40 -0
  18. data/config/1.0.1/stix/cybox/extensions/platform/xml.xsd +145 -0
  19. data/config/1.0.1/stix/cybox/objects/API_Object.xsd +55 -0
  20. data/config/1.0.1/stix/cybox/objects/Account_Object.xsd +50 -0
  21. data/config/1.0.1/stix/cybox/objects/Address_Object.xsd +122 -0
  22. data/config/1.0.1/stix/cybox/objects/Artifact_Object.xsd +206 -0
  23. data/config/1.0.1/stix/cybox/objects/Code_Object.xsd +417 -0
  24. data/config/1.0.1/stix/cybox/objects/Custom_Object.xsd +43 -0
  25. data/config/1.0.1/stix/cybox/objects/DNS_Cache_Object.xsd +53 -0
  26. data/config/1.0.1/stix/cybox/objects/DNS_Query_Object.xsd +159 -0
  27. data/config/1.0.1/stix/cybox/objects/DNS_Record_Object.xsd +87 -0
  28. data/config/1.0.1/stix/cybox/objects/Device_Object.xsd +55 -0
  29. data/config/1.0.1/stix/cybox/objects/Disk_Object.xsd +117 -0
  30. data/config/1.0.1/stix/cybox/objects/Disk_Partition_Object.xsd +199 -0
  31. data/config/1.0.1/stix/cybox/objects/Email_Message_Object.xsd +273 -0
  32. data/config/1.0.1/stix/cybox/objects/File_Object.xsd +359 -0
  33. data/config/1.0.1/stix/cybox/objects/GUI_Dialogbox_Object.xsd +41 -0
  34. data/config/1.0.1/stix/cybox/objects/GUI_Object.xsd +40 -0
  35. data/config/1.0.1/stix/cybox/objects/GUI_Window_Object.xsd +46 -0
  36. data/config/1.0.1/stix/cybox/objects/HTTP_Session_Object.xsd +623 -0
  37. data/config/1.0.1/stix/cybox/objects/Library_Object.xsd +114 -0
  38. data/config/1.0.1/stix/cybox/objects/Link_Object.xsd +36 -0
  39. data/config/1.0.1/stix/cybox/objects/Linux_Package_Object.xsd +119 -0
  40. data/config/1.0.1/stix/cybox/objects/Memory_Object.xsd +70 -0
  41. data/config/1.0.1/stix/cybox/objects/Mutex_Object.xsd +40 -0
  42. data/config/1.0.1/stix/cybox/objects/Network_Connection_Object.xsd +609 -0
  43. data/config/1.0.1/stix/cybox/objects/Network_Flow_Object.xsd +1559 -0
  44. data/config/1.0.1/stix/cybox/objects/Network_Packet_Object.xsd +2948 -0
  45. data/config/1.0.1/stix/cybox/objects/Network_Route_Entry_Object.xsd +155 -0
  46. data/config/1.0.1/stix/cybox/objects/Network_Route_Object.xsd +93 -0
  47. data/config/1.0.1/stix/cybox/objects/Network_Socket_Object.xsd +524 -0
  48. data/config/1.0.1/stix/cybox/objects/Network_Subnet_Object.xsd +64 -0
  49. data/config/1.0.1/stix/cybox/objects/PDF_File_Object.xsd +601 -0
  50. data/config/1.0.1/stix/cybox/objects/Pipe_Object.xsd +40 -0
  51. data/config/1.0.1/stix/cybox/objects/Port_Object.xsd +74 -0
  52. data/config/1.0.1/stix/cybox/objects/Process_Object.xsd +197 -0
  53. data/config/1.0.1/stix/cybox/objects/Product_Object.xsd +60 -0
  54. data/config/1.0.1/stix/cybox/objects/Semaphore_Object.xsd +50 -0
  55. data/config/1.0.1/stix/cybox/objects/Socket_Address_Object.xsd +42 -0
  56. data/config/1.0.1/stix/cybox/objects/System_Object.xsd +409 -0
  57. data/config/1.0.1/stix/cybox/objects/URI_Object.xsd +62 -0
  58. data/config/1.0.1/stix/cybox/objects/Unix_File_Object.xsd +164 -0
  59. data/config/1.0.1/stix/cybox/objects/Unix_Network_Route_Entry_Object.xsd +56 -0
  60. data/config/1.0.1/stix/cybox/objects/Unix_Pipe_Object.xsd +36 -0
  61. data/config/1.0.1/stix/cybox/objects/Unix_Process_Object.xsd +143 -0
  62. data/config/1.0.1/stix/cybox/objects/Unix_User_Account_Object.xsd +78 -0
  63. data/config/1.0.1/stix/cybox/objects/Unix_Volume_Object.xsd +41 -0
  64. data/config/1.0.1/stix/cybox/objects/User_Account_Object.xsd +110 -0
  65. data/config/1.0.1/stix/cybox/objects/User_Session_Object.xsd +60 -0
  66. data/config/1.0.1/stix/cybox/objects/Volume_Object.xsd +235 -0
  67. data/config/1.0.1/stix/cybox/objects/Whois_Object.xsd +456 -0
  68. data/config/1.0.1/stix/cybox/objects/Win_Computer_Account_Object.xsd +135 -0
  69. data/config/1.0.1/stix/cybox/objects/Win_Critical_Section_Object.xsd +40 -0
  70. data/config/1.0.1/stix/cybox/objects/Win_Driver_Object.xsd +269 -0
  71. data/config/1.0.1/stix/cybox/objects/Win_Event_Log_Object.xsd +137 -0
  72. data/config/1.0.1/stix/cybox/objects/Win_Event_Object.xsd +80 -0
  73. data/config/1.0.1/stix/cybox/objects/Win_Executable_File_Object.xsd +1333 -0
  74. data/config/1.0.1/stix/cybox/objects/Win_File_Object.xsd +269 -0
  75. data/config/1.0.1/stix/cybox/objects/Win_Handle_Object.xsd +186 -0
  76. data/config/1.0.1/stix/cybox/objects/Win_Kernel_Hook_Object.xsd +109 -0
  77. data/config/1.0.1/stix/cybox/objects/Win_Kernel_Object.xsd +128 -0
  78. data/config/1.0.1/stix/cybox/objects/Win_Mailslot_Object.xsd +56 -0
  79. data/config/1.0.1/stix/cybox/objects/Win_Memory_Page_Region_Object.xsd +198 -0
  80. data/config/1.0.1/stix/cybox/objects/Win_Mutex_Object.xsd +42 -0
  81. data/config/1.0.1/stix/cybox/objects/Win_Network_Route_Entry_Object.xsd +200 -0
  82. data/config/1.0.1/stix/cybox/objects/Win_Network_Share_Object.xsd +205 -0
  83. data/config/1.0.1/stix/cybox/objects/Win_Pipe_Object.xsd +73 -0
  84. data/config/1.0.1/stix/cybox/objects/Win_Prefetch_Object.xsd +113 -0
  85. data/config/1.0.1/stix/cybox/objects/Win_Process_Object.xsd +167 -0
  86. data/config/1.0.1/stix/cybox/objects/Win_Registry_Key_Object.xsd +290 -0
  87. data/config/1.0.1/stix/cybox/objects/Win_Semaphore_Object.xsd +42 -0
  88. data/config/1.0.1/stix/cybox/objects/Win_Service_Object.xsd +287 -0
  89. data/config/1.0.1/stix/cybox/objects/Win_System_Object.xsd +126 -0
  90. data/config/1.0.1/stix/cybox/objects/Win_System_Restore_Object.xsd +199 -0
  91. data/config/1.0.1/stix/cybox/objects/Win_Task_Object.xsd +755 -0
  92. data/config/1.0.1/stix/cybox/objects/Win_Thread_Object.xsd +146 -0
  93. data/config/1.0.1/stix/cybox/objects/Win_User_Account_Object.xsd +73 -0
  94. data/config/1.0.1/stix/cybox/objects/Win_Volume_Object.xsd +161 -0
  95. data/config/1.0.1/stix/cybox/objects/Win_Waitable_Timer_Object.xsd +90 -0
  96. data/config/1.0.1/stix/cybox/objects/X509_Certificate_Object.xsd +270 -0
  97. data/config/1.0.1/stix/data_marking.xsd +92 -0
  98. data/config/1.0.1/stix/exploit_target.xsd +224 -0
  99. data/config/1.0.1/stix/extensions/address/ciq_address_3.0.xsd +27 -0
  100. data/config/1.0.1/stix/extensions/address/readme.txt +1 -0
  101. data/config/1.0.1/stix/extensions/attack_pattern/capec_2.6.1.xsd +31 -0
  102. data/config/1.0.1/stix/extensions/attack_pattern/readme.txt +1 -0
  103. data/config/1.0.1/stix/extensions/identity/ciq_identity_3.0.xsd +108 -0
  104. data/config/1.0.1/stix/extensions/identity/readme.txt +1 -0
  105. data/config/1.0.1/stix/extensions/malware/maec_4.0.1.xsd +31 -0
  106. data/config/1.0.1/stix/extensions/malware/readme.txt +1 -0
  107. data/config/1.0.1/stix/extensions/marking/simple_marking.xsd +30 -0
  108. data/config/1.0.1/stix/extensions/marking/tlp.xsd +39 -0
  109. data/config/1.0.1/stix/extensions/structured_coa/generic.xsd +46 -0
  110. data/config/1.0.1/stix/extensions/test_mechanism/generic.xsd +46 -0
  111. data/config/1.0.1/stix/extensions/test_mechanism/open_ioc_2010.xsd +32 -0
  112. data/config/1.0.1/stix/extensions/test_mechanism/oval_5.10.xsd +37 -0
  113. data/config/1.0.1/stix/extensions/test_mechanism/snort.xsd +36 -0
  114. data/config/1.0.1/stix/extensions/test_mechanism/yara.xsd +36 -0
  115. data/config/1.0.1/stix/extensions/vulnerability/cvrf_1.1.xsd +33 -0
  116. data/config/1.0.1/stix/extensions/vulnerability/readme.txt +1 -0
  117. data/config/1.0.1/stix/external/capec_2.6.1/ap_schema_v2.6.1.xsd +3618 -0
  118. data/config/1.0.1/stix/external/cvrf_1.1/common.xsd +176 -0
  119. data/config/1.0.1/stix/external/cvrf_1.1/cpe-language_2.2a.xsd +182 -0
  120. data/config/1.0.1/stix/external/cvrf_1.1/cvrf.xsd +487 -0
  121. data/config/1.0.1/stix/external/cvrf_1.1/cvss-v2_0.9.xsd +415 -0
  122. data/config/1.0.1/stix/external/cvrf_1.1/dc.xsd +118 -0
  123. data/config/1.0.1/stix/external/cvrf_1.1/prod.xsd +292 -0
  124. data/config/1.0.1/stix/external/cvrf_1.1/scap-core_0.9.xsd +170 -0
  125. data/config/1.0.1/stix/external/cvrf_1.1/vuln.xsd +631 -0
  126. data/config/1.0.1/stix/external/cvrf_1.1/xml.xsd +287 -0
  127. data/config/1.0.1/stix/external/maec_4.0.1/maec_bundle_schema.xsd +1139 -0
  128. data/config/1.0.1/stix/external/maec_4.0.1/maec_package_schema.xsd +938 -0
  129. data/config/1.0.1/stix/external/maec_4.0.1/metadataSharing.xsd +1712 -0
  130. data/config/1.0.1/stix/external/oasis_ciq_3.0/CommonTypes.xsd +104 -0
  131. data/config/1.0.1/stix/external/oasis_ciq_3.0/xAL-types.xsd +511 -0
  132. data/config/1.0.1/stix/external/oasis_ciq_3.0/xAL.xsd +672 -0
  133. data/config/1.0.1/stix/external/oasis_ciq_3.0/xNAL-types.xsd +36 -0
  134. data/config/1.0.1/stix/external/oasis_ciq_3.0/xNAL.xsd +126 -0
  135. data/config/1.0.1/stix/external/oasis_ciq_3.0/xNL-types.xsd +222 -0
  136. data/config/1.0.1/stix/external/oasis_ciq_3.0/xNL.xsd +284 -0
  137. data/config/1.0.1/stix/external/oasis_ciq_3.0/xPIL-types.xsd +854 -0
  138. data/config/1.0.1/stix/external/oasis_ciq_3.0/xPIL.xsd +1621 -0
  139. data/config/1.0.1/stix/external/oasis_ciq_3.0/xlink-2003-12-31.xsd +90 -0
  140. data/config/1.0.1/stix/external/open_ioc_2010/ioc-TR.xsd +25 -0
  141. data/config/1.0.1/stix/external/open_ioc_2010/ioc.xsd +105 -0
  142. data/config/1.0.1/stix/external/oval_5.10/oval-common-schema.xsd +781 -0
  143. data/config/1.0.1/stix/external/oval_5.10/oval-definitions-schema.xsd +1608 -0
  144. data/config/1.0.1/stix/external/oval_5.10/oval-variables-schema.xsd +84 -0
  145. data/config/1.0.1/stix/external/oval_5.10/xmldsig-core-schema.xsd +309 -0
  146. data/config/1.0.1/stix/incident.xsd +787 -0
  147. data/config/1.0.1/stix/indicator.xsd +310 -0
  148. data/config/1.0.1/stix/stix_common.xsd +762 -0
  149. data/config/1.0.1/stix/stix_core.xsd +218 -0
  150. data/config/1.0.1/stix/stix_default_vocabularies.xsd +1684 -0
  151. data/config/1.0.1/stix/threat_actor.xsd +174 -0
  152. data/config/1.0.1/stix/ttp.xsd +341 -0
  153. data/config/1.0/stix/campaign.xsd +209 -0
  154. data/config/1.0/stix/course_of_action.xsd +165 -0
  155. data/config/1.0/stix/cybox/cybox_common.xsd +2319 -0
  156. data/config/1.0/stix/cybox/cybox_core.xsd +1090 -0
  157. data/config/1.0/stix/cybox/cybox_default_vocabularies.xsd +3106 -0
  158. data/config/1.0/stix/cybox/extensions/platform/README.txt +1 -0
  159. data/config/1.0/stix/cybox/extensions/platform/cpe2.3.xsd +40 -0
  160. data/config/1.0/stix/cybox/objects/API_Object.xsd +55 -0
  161. data/config/1.0/stix/cybox/objects/Account_Object.xsd +50 -0
  162. data/config/1.0/stix/cybox/objects/Address_Object.xsd +122 -0
  163. data/config/1.0/stix/cybox/objects/Artifact_Object.xsd +206 -0
  164. data/config/1.0/stix/cybox/objects/Code_Object.xsd +417 -0
  165. data/config/1.0/stix/cybox/objects/Custom_Object.xsd +43 -0
  166. data/config/1.0/stix/cybox/objects/DNS_Cache_Object.xsd +53 -0
  167. data/config/1.0/stix/cybox/objects/DNS_Query_Object.xsd +159 -0
  168. data/config/1.0/stix/cybox/objects/DNS_Record_Object.xsd +87 -0
  169. data/config/1.0/stix/cybox/objects/Device_Object.xsd +55 -0
  170. data/config/1.0/stix/cybox/objects/Disk_Object.xsd +117 -0
  171. data/config/1.0/stix/cybox/objects/Disk_Partition_Object.xsd +199 -0
  172. data/config/1.0/stix/cybox/objects/Email_Message_Object.xsd +273 -0
  173. data/config/1.0/stix/cybox/objects/File_Object.xsd +359 -0
  174. data/config/1.0/stix/cybox/objects/GUI_Dialogbox_Object.xsd +41 -0
  175. data/config/1.0/stix/cybox/objects/GUI_Object.xsd +40 -0
  176. data/config/1.0/stix/cybox/objects/GUI_Window_Object.xsd +46 -0
  177. data/config/1.0/stix/cybox/objects/HTTP_Session_Object.xsd +623 -0
  178. data/config/1.0/stix/cybox/objects/Library_Object.xsd +114 -0
  179. data/config/1.0/stix/cybox/objects/Link_Object.xsd +24 -0
  180. data/config/1.0/stix/cybox/objects/Linux_Package_Object.xsd +119 -0
  181. data/config/1.0/stix/cybox/objects/Memory_Object.xsd +70 -0
  182. data/config/1.0/stix/cybox/objects/Mutex_Object.xsd +40 -0
  183. data/config/1.0/stix/cybox/objects/Network_Connection_Object.xsd +609 -0
  184. data/config/1.0/stix/cybox/objects/Network_Flow_Object.xsd +1559 -0
  185. data/config/1.0/stix/cybox/objects/Network_Packet_Object.xsd +2948 -0
  186. data/config/1.0/stix/cybox/objects/Network_Route_Entry_Object.xsd +155 -0
  187. data/config/1.0/stix/cybox/objects/Network_Route_Object.xsd +93 -0
  188. data/config/1.0/stix/cybox/objects/Network_Socket_Object.xsd +524 -0
  189. data/config/1.0/stix/cybox/objects/Network_Subnet_Object.xsd +64 -0
  190. data/config/1.0/stix/cybox/objects/PDF_File_Object.xsd +601 -0
  191. data/config/1.0/stix/cybox/objects/Pipe_Object.xsd +40 -0
  192. data/config/1.0/stix/cybox/objects/Port_Object.xsd +74 -0
  193. data/config/1.0/stix/cybox/objects/Process_Object.xsd +197 -0
  194. data/config/1.0/stix/cybox/objects/Product_Object.xsd +60 -0
  195. data/config/1.0/stix/cybox/objects/Semaphore_Object.xsd +50 -0
  196. data/config/1.0/stix/cybox/objects/Socket_Address_Object.xsd +42 -0
  197. data/config/1.0/stix/cybox/objects/System_Object.xsd +409 -0
  198. data/config/1.0/stix/cybox/objects/URI_Object.xsd +62 -0
  199. data/config/1.0/stix/cybox/objects/Unix_File_Object.xsd +164 -0
  200. data/config/1.0/stix/cybox/objects/Unix_Network_Route_Entry_Object.xsd +56 -0
  201. data/config/1.0/stix/cybox/objects/Unix_Pipe_Object.xsd +36 -0
  202. data/config/1.0/stix/cybox/objects/Unix_Process_Object.xsd +143 -0
  203. data/config/1.0/stix/cybox/objects/Unix_User_Account_Object.xsd +78 -0
  204. data/config/1.0/stix/cybox/objects/Unix_Volume_Object.xsd +41 -0
  205. data/config/1.0/stix/cybox/objects/User_Account_Object.xsd +110 -0
  206. data/config/1.0/stix/cybox/objects/User_Session_Object.xsd +60 -0
  207. data/config/1.0/stix/cybox/objects/Volume_Object.xsd +235 -0
  208. data/config/1.0/stix/cybox/objects/Whois_Object.xsd +456 -0
  209. data/config/1.0/stix/cybox/objects/Win_Computer_Account_Object.xsd +135 -0
  210. data/config/1.0/stix/cybox/objects/Win_Critical_Section_Object.xsd +40 -0
  211. data/config/1.0/stix/cybox/objects/Win_Driver_Object.xsd +269 -0
  212. data/config/1.0/stix/cybox/objects/Win_Event_Log_Object.xsd +137 -0
  213. data/config/1.0/stix/cybox/objects/Win_Event_Object.xsd +80 -0
  214. data/config/1.0/stix/cybox/objects/Win_Executable_File_Object.xsd +1333 -0
  215. data/config/1.0/stix/cybox/objects/Win_File_Object.xsd +269 -0
  216. data/config/1.0/stix/cybox/objects/Win_Handle_Object.xsd +186 -0
  217. data/config/1.0/stix/cybox/objects/Win_Kernel_Hook_Object.xsd +109 -0
  218. data/config/1.0/stix/cybox/objects/Win_Kernel_Object.xsd +128 -0
  219. data/config/1.0/stix/cybox/objects/Win_Mailslot_Object.xsd +56 -0
  220. data/config/1.0/stix/cybox/objects/Win_Memory_Page_Region_Object.xsd +198 -0
  221. data/config/1.0/stix/cybox/objects/Win_Mutex_Object.xsd +42 -0
  222. data/config/1.0/stix/cybox/objects/Win_Network_Route_Entry_Object.xsd +200 -0
  223. data/config/1.0/stix/cybox/objects/Win_Network_Share_Object.xsd +205 -0
  224. data/config/1.0/stix/cybox/objects/Win_Pipe_Object.xsd +73 -0
  225. data/config/1.0/stix/cybox/objects/Win_Prefetch_Object.xsd +113 -0
  226. data/config/1.0/stix/cybox/objects/Win_Process_Object.xsd +167 -0
  227. data/config/1.0/stix/cybox/objects/Win_Registry_Key_Object.xsd +290 -0
  228. data/config/1.0/stix/cybox/objects/Win_Semaphore_Object.xsd +42 -0
  229. data/config/1.0/stix/cybox/objects/Win_Service_Object.xsd +287 -0
  230. data/config/1.0/stix/cybox/objects/Win_System_Object.xsd +126 -0
  231. data/config/1.0/stix/cybox/objects/Win_System_Restore_Object.xsd +199 -0
  232. data/config/1.0/stix/cybox/objects/Win_Task_Object.xsd +755 -0
  233. data/config/1.0/stix/cybox/objects/Win_Thread_Object.xsd +146 -0
  234. data/config/1.0/stix/cybox/objects/Win_User_Account_Object.xsd +73 -0
  235. data/config/1.0/stix/cybox/objects/Win_Volume_Object.xsd +161 -0
  236. data/config/1.0/stix/cybox/objects/Win_Waitable_Timer_Object.xsd +90 -0
  237. data/config/1.0/stix/cybox/objects/X509_Certificate_Object.xsd +270 -0
  238. data/config/1.0/stix/data_marking.xsd +92 -0
  239. data/config/1.0/stix/exploit_target.xsd +223 -0
  240. data/config/1.0/stix/extensions/address/ciq_address_3.0.xsd +27 -0
  241. data/config/1.0/stix/extensions/address/readme.txt +1 -0
  242. data/config/1.0/stix/extensions/attack_pattern/capec_2.5.xsd +31 -0
  243. data/config/1.0/stix/extensions/identity/ciq_identity_3.0.xsd +108 -0
  244. data/config/1.0/stix/extensions/identity/readme.txt +1 -0
  245. data/config/1.0/stix/extensions/malware/maec_4.0.xsd +32 -0
  246. data/config/1.0/stix/extensions/malware/readme.txt +3 -0
  247. data/config/1.0/stix/extensions/marking/simple_marking.xsd +30 -0
  248. data/config/1.0/stix/extensions/marking/tlp.xsd +39 -0
  249. data/config/1.0/stix/extensions/structured_coa/generic.xsd +46 -0
  250. data/config/1.0/stix/extensions/test_mechanism/generic.xsd +46 -0
  251. data/config/1.0/stix/extensions/test_mechanism/open_ioc_2010.xsd +32 -0
  252. data/config/1.0/stix/extensions/test_mechanism/oval_5.10.xsd +37 -0
  253. data/config/1.0/stix/extensions/test_mechanism/snort.xsd +36 -0
  254. data/config/1.0/stix/extensions/test_mechanism/yara.xsd +36 -0
  255. data/config/1.0/stix/extensions/vulnerability/cvrf_1.1.xsd +33 -0
  256. data/config/1.0/stix/extensions/vulnerability/readme.txt +1 -0
  257. data/config/1.0/stix/external/capec_2.5/ap_schema_v2.5.xsd +2671 -0
  258. data/config/1.0/stix/external/cvrf_1.1/common.xsd +176 -0
  259. data/config/1.0/stix/external/cvrf_1.1/cpe-language_2.2a.xsd +182 -0
  260. data/config/1.0/stix/external/cvrf_1.1/cvrf.xsd +487 -0
  261. data/config/1.0/stix/external/cvrf_1.1/cvss-v2_0.9.xsd +415 -0
  262. data/config/1.0/stix/external/cvrf_1.1/dc.xsd +118 -0
  263. data/config/1.0/stix/external/cvrf_1.1/prod.xsd +292 -0
  264. data/config/1.0/stix/external/cvrf_1.1/scap-core_0.9.xsd +170 -0
  265. data/config/1.0/stix/external/cvrf_1.1/vuln.xsd +631 -0
  266. data/config/1.0/stix/external/cvrf_1.1/xml.xsd +287 -0
  267. data/config/1.0/stix/external/oasis_ciq_3.0/CommonTypes.xsd +104 -0
  268. data/config/1.0/stix/external/oasis_ciq_3.0/xAL-types.xsd +511 -0
  269. data/config/1.0/stix/external/oasis_ciq_3.0/xAL.xsd +672 -0
  270. data/config/1.0/stix/external/oasis_ciq_3.0/xNAL-types.xsd +36 -0
  271. data/config/1.0/stix/external/oasis_ciq_3.0/xNAL.xsd +126 -0
  272. data/config/1.0/stix/external/oasis_ciq_3.0/xNL-types.xsd +222 -0
  273. data/config/1.0/stix/external/oasis_ciq_3.0/xNL.xsd +284 -0
  274. data/config/1.0/stix/external/oasis_ciq_3.0/xPIL-types.xsd +854 -0
  275. data/config/1.0/stix/external/oasis_ciq_3.0/xPIL.xsd +1621 -0
  276. data/config/1.0/stix/external/oasis_ciq_3.0/xlink-2003-12-31.xsd +90 -0
  277. data/config/1.0/stix/external/open_ioc_2010/ioc-TR.xsd +25 -0
  278. data/config/1.0/stix/external/open_ioc_2010/ioc.xsd +105 -0
  279. data/config/1.0/stix/external/oval_5.10/oval-common-schema.xsd +781 -0
  280. data/config/1.0/stix/external/oval_5.10/oval-definitions-schema.xsd +1608 -0
  281. data/config/1.0/stix/external/oval_5.10/oval-variables-schema.xsd +84 -0
  282. data/config/1.0/stix/external/oval_5.10/xmldsig-core-schema.xsd +309 -0
  283. data/config/1.0/stix/incident.xsd +786 -0
  284. data/config/1.0/stix/indicator.xsd +309 -0
  285. data/config/1.0/stix/stix_common.xsd +762 -0
  286. data/config/1.0/stix/stix_core.xsd +217 -0
  287. data/config/1.0/stix/stix_default_vocabularies.xsd +1578 -0
  288. data/config/1.0/stix/threat_actor.xsd +173 -0
  289. data/config/1.0/stix/ttp.xsd +340 -0
  290. data/config/1.1/stix/campaign.xsd +223 -0
  291. data/config/1.1/stix/course_of_action.xsd +190 -0
  292. data/config/1.1/stix/cybox/cybox_common.xsd +2700 -0
  293. data/config/1.1/stix/cybox/cybox_core.xsd +1145 -0
  294. data/config/1.1/stix/cybox/cybox_default_vocabularies.xsd +5180 -0
  295. data/config/1.1/stix/cybox/extensions/location/ciq_address_3.0.xsd +27 -0
  296. data/config/1.1/stix/cybox/extensions/platform/README.txt +1 -0
  297. data/config/1.1/stix/cybox/extensions/platform/cpe2.3.xsd +34 -0
  298. data/config/1.1/stix/cybox/external/cpe_2.3/cpe-language_2.3.xsd +234 -0
  299. data/config/1.1/stix/cybox/external/cpe_2.3/cpe-naming_2.3.xsd +45 -0
  300. data/config/1.1/stix/cybox/external/cpe_2.3/xml.xsd +145 -0
  301. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/CommonTypes.xsd +104 -0
  302. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/xAL-types.xsd +511 -0
  303. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/xAL.xsd +672 -0
  304. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/xNAL-types.xsd +36 -0
  305. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/xNAL.xsd +126 -0
  306. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/xNL-types.xsd +222 -0
  307. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/xNL.xsd +284 -0
  308. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/xPIL-types.xsd +854 -0
  309. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/xPIL.xsd +1621 -0
  310. data/config/1.1/stix/cybox/external/oasis_ciq_3.0/xlink-2003-12-31.xsd +90 -0
  311. data/config/1.1/stix/cybox/objects/API_Object.xsd +55 -0
  312. data/config/1.1/stix/cybox/objects/ARP_Cache_Object.xsd +98 -0
  313. data/config/1.1/stix/cybox/objects/AS_Object.xsd +50 -0
  314. data/config/1.1/stix/cybox/objects/Account_Object.xsd +501 -0
  315. data/config/1.1/stix/cybox/objects/Address_Object.xsd +127 -0
  316. data/config/1.1/stix/cybox/objects/Archive_File_Object.xsd +134 -0
  317. data/config/1.1/stix/cybox/objects/Artifact_Object.xsd +212 -0
  318. data/config/1.1/stix/cybox/objects/Code_Object.xsd +417 -0
  319. data/config/1.1/stix/cybox/objects/Custom_Object.xsd +42 -0
  320. data/config/1.1/stix/cybox/objects/DNS_Cache_Object.xsd +53 -0
  321. data/config/1.1/stix/cybox/objects/DNS_Query_Object.xsd +164 -0
  322. data/config/1.1/stix/cybox/objects/DNS_Record_Object.xsd +92 -0
  323. data/config/1.1/stix/cybox/objects/Device_Object.xsd +65 -0
  324. data/config/1.1/stix/cybox/objects/Disk_Object.xsd +117 -0
  325. data/config/1.1/stix/cybox/objects/Disk_Partition_Object.xsd +199 -0
  326. data/config/1.1/stix/cybox/objects/Domain_Name_Object.xsd +57 -0
  327. data/config/1.1/stix/cybox/objects/Email_Message_Object.xsd +278 -0
  328. data/config/1.1/stix/cybox/objects/File_Object.xsd +397 -0
  329. data/config/1.1/stix/cybox/objects/GUI_Dialogbox_Object.xsd +41 -0
  330. data/config/1.1/stix/cybox/objects/GUI_Object.xsd +40 -0
  331. data/config/1.1/stix/cybox/objects/GUI_Window_Object.xsd +46 -0
  332. data/config/1.1/stix/cybox/objects/HTTP_Session_Object.xsd +633 -0
  333. data/config/1.1/stix/cybox/objects/Hostname_Object.xsd +45 -0
  334. data/config/1.1/stix/cybox/objects/Image_File_Object.xsd +124 -0
  335. data/config/1.1/stix/cybox/objects/Library_Object.xsd +114 -0
  336. data/config/1.1/stix/cybox/objects/Link_Object.xsd +36 -0
  337. data/config/1.1/stix/cybox/objects/Linux_Package_Object.xsd +75 -0
  338. data/config/1.1/stix/cybox/objects/Memory_Object.xsd +141 -0
  339. data/config/1.1/stix/cybox/objects/Mutex_Object.xsd +40 -0
  340. data/config/1.1/stix/cybox/objects/Network_Connection_Object.xsd +540 -0
  341. data/config/1.1/stix/cybox/objects/Network_Flow_Object.xsd +1559 -0
  342. data/config/1.1/stix/cybox/objects/Network_Packet_Object.xsd +2934 -0
  343. data/config/1.1/stix/cybox/objects/Network_Route_Entry_Object.xsd +155 -0
  344. data/config/1.1/stix/cybox/objects/Network_Route_Object.xsd +93 -0
  345. data/config/1.1/stix/cybox/objects/Network_Socket_Object.xsd +529 -0
  346. data/config/1.1/stix/cybox/objects/Network_Subnet_Object.xsd +64 -0
  347. data/config/1.1/stix/cybox/objects/PDF_File_Object.xsd +595 -0
  348. data/config/1.1/stix/cybox/objects/Pipe_Object.xsd +40 -0
  349. data/config/1.1/stix/cybox/objects/Port_Object.xsd +40 -0
  350. data/config/1.1/stix/cybox/objects/Process_Object.xsd +199 -0
  351. data/config/1.1/stix/cybox/objects/Product_Object.xsd +65 -0
  352. data/config/1.1/stix/cybox/objects/SMS_Message_Object.xsd +79 -0
  353. data/config/1.1/stix/cybox/objects/Semaphore_Object.xsd +50 -0
  354. data/config/1.1/stix/cybox/objects/Socket_Address_Object.xsd +50 -0
  355. data/config/1.1/stix/cybox/objects/System_Object.xsd +410 -0
  356. data/config/1.1/stix/cybox/objects/URI_Object.xsd +62 -0
  357. data/config/1.1/stix/cybox/objects/URL_History_Object.xsd +104 -0
  358. data/config/1.1/stix/cybox/objects/Unix_File_Object.xsd +164 -0
  359. data/config/1.1/stix/cybox/objects/Unix_Network_Route_Entry_Object.xsd +56 -0
  360. data/config/1.1/stix/cybox/objects/Unix_Pipe_Object.xsd +36 -0
  361. data/config/1.1/stix/cybox/objects/Unix_Process_Object.xsd +143 -0
  362. data/config/1.1/stix/cybox/objects/Unix_User_Account_Object.xsd +78 -0
  363. data/config/1.1/stix/cybox/objects/Unix_Volume_Object.xsd +41 -0
  364. data/config/1.1/stix/cybox/objects/User_Account_Object.xsd +110 -0
  365. data/config/1.1/stix/cybox/objects/User_Session_Object.xsd +60 -0
  366. data/config/1.1/stix/cybox/objects/Volume_Object.xsd +235 -0
  367. data/config/1.1/stix/cybox/objects/Whois_Object.xsd +430 -0
  368. data/config/1.1/stix/cybox/objects/Win_Computer_Account_Object.xsd +135 -0
  369. data/config/1.1/stix/cybox/objects/Win_Critical_Section_Object.xsd +40 -0
  370. data/config/1.1/stix/cybox/objects/Win_Driver_Object.xsd +270 -0
  371. data/config/1.1/stix/cybox/objects/Win_Event_Log_Object.xsd +137 -0
  372. data/config/1.1/stix/cybox/objects/Win_Event_Object.xsd +80 -0
  373. data/config/1.1/stix/cybox/objects/Win_Executable_File_Object.xsd +1311 -0
  374. data/config/1.1/stix/cybox/objects/Win_File_Object.xsd +269 -0
  375. data/config/1.1/stix/cybox/objects/Win_Filemapping_Object.xsd +175 -0
  376. data/config/1.1/stix/cybox/objects/Win_Handle_Object.xsd +351 -0
  377. data/config/1.1/stix/cybox/objects/Win_Hook_Object.xsd +152 -0
  378. data/config/1.1/stix/cybox/objects/Win_Kernel_Hook_Object.xsd +109 -0
  379. data/config/1.1/stix/cybox/objects/Win_Kernel_Object.xsd +128 -0
  380. data/config/1.1/stix/cybox/objects/Win_Mailslot_Object.xsd +56 -0
  381. data/config/1.1/stix/cybox/objects/Win_Memory_Page_Region_Object.xsd +198 -0
  382. data/config/1.1/stix/cybox/objects/Win_Mutex_Object.xsd +42 -0
  383. data/config/1.1/stix/cybox/objects/Win_Network_Route_Entry_Object.xsd +200 -0
  384. data/config/1.1/stix/cybox/objects/Win_Network_Share_Object.xsd +205 -0
  385. data/config/1.1/stix/cybox/objects/Win_Pipe_Object.xsd +73 -0
  386. data/config/1.1/stix/cybox/objects/Win_Prefetch_Object.xsd +113 -0
  387. data/config/1.1/stix/cybox/objects/Win_Process_Object.xsd +174 -0
  388. data/config/1.1/stix/cybox/objects/Win_Registry_Key_Object.xsd +290 -0
  389. data/config/1.1/stix/cybox/objects/Win_Semaphore_Object.xsd +42 -0
  390. data/config/1.1/stix/cybox/objects/Win_Service_Object.xsd +287 -0
  391. data/config/1.1/stix/cybox/objects/Win_System_Object.xsd +126 -0
  392. data/config/1.1/stix/cybox/objects/Win_System_Restore_Object.xsd +207 -0
  393. data/config/1.1/stix/cybox/objects/Win_Task_Object.xsd +755 -0
  394. data/config/1.1/stix/cybox/objects/Win_Thread_Object.xsd +146 -0
  395. data/config/1.1/stix/cybox/objects/Win_User_Account_Object.xsd +73 -0
  396. data/config/1.1/stix/cybox/objects/Win_Volume_Object.xsd +161 -0
  397. data/config/1.1/stix/cybox/objects/Win_Waitable_Timer_Object.xsd +90 -0
  398. data/config/1.1/stix/cybox/objects/X509_Certificate_Object.xsd +275 -0
  399. data/config/1.1/stix/data_marking.xsd +96 -0
  400. data/config/1.1/stix/exploit_target.xsd +323 -0
  401. data/config/1.1/stix/extensions/address/ciq_3.0_address.xsd +27 -0
  402. data/config/1.1/stix/extensions/address/readme.txt +1 -0
  403. data/config/1.1/stix/extensions/attack_pattern/capec_2.7_attack_pattern.xsd +31 -0
  404. data/config/1.1/stix/extensions/attack_pattern/readme.txt +1 -0
  405. data/config/1.1/stix/extensions/identity/ciq_3.0_identity.xsd +113 -0
  406. data/config/1.1/stix/extensions/identity/readme.txt +1 -0
  407. data/config/1.1/stix/extensions/malware/maec_4.1_malware.xsd +31 -0
  408. data/config/1.1/stix/extensions/malware/readme.txt +1 -0
  409. data/config/1.1/stix/extensions/marking/simple_marking.xsd +31 -0
  410. data/config/1.1/stix/extensions/marking/terms_of_use_marking.xsd +31 -0
  411. data/config/1.1/stix/extensions/marking/tlp_marking.xsd +40 -0
  412. data/config/1.1/stix/extensions/structured_coa/generic_structured_coa.xsd +46 -0
  413. data/config/1.1/stix/extensions/test_mechanism/generic_test_mechanism.xsd +46 -0
  414. data/config/1.1/stix/extensions/test_mechanism/open_ioc_2010_test_mechanism.xsd +32 -0
  415. data/config/1.1/stix/extensions/test_mechanism/oval_5.10_test_mechanism.xsd +37 -0
  416. data/config/1.1/stix/extensions/test_mechanism/snort_test_mechanism.xsd +56 -0
  417. data/config/1.1/stix/extensions/test_mechanism/yara_test_mechanism.xsd +36 -0
  418. data/config/1.1/stix/extensions/vulnerability/cvrf_1.1_vulnerability.xsd +33 -0
  419. data/config/1.1/stix/extensions/vulnerability/readme.txt +1 -0
  420. data/config/1.1/stix/external/capec_2.7/ap_schema_v2.7.xsd +3618 -0
  421. data/config/1.1/stix/external/cvrf_1.1/common.xsd +176 -0
  422. data/config/1.1/stix/external/cvrf_1.1/cpe-language_2.2a.xsd +182 -0
  423. data/config/1.1/stix/external/cvrf_1.1/cvrf.xsd +487 -0
  424. data/config/1.1/stix/external/cvrf_1.1/cvss-v2_0.9.xsd +415 -0
  425. data/config/1.1/stix/external/cvrf_1.1/dc.xsd +118 -0
  426. data/config/1.1/stix/external/cvrf_1.1/prod.xsd +292 -0
  427. data/config/1.1/stix/external/cvrf_1.1/scap-core_0.9.xsd +170 -0
  428. data/config/1.1/stix/external/cvrf_1.1/vuln.xsd +631 -0
  429. data/config/1.1/stix/external/cvrf_1.1/xml.xsd +287 -0
  430. data/config/1.1/stix/external/maec_4.1/maec_bundle_schema.xsd +1228 -0
  431. data/config/1.1/stix/external/maec_4.1/maec_container_schema.xsd +62 -0
  432. data/config/1.1/stix/external/maec_4.1/maec_default_vocabularies.xsd +5325 -0
  433. data/config/1.1/stix/external/maec_4.1/maec_package_schema.xsd +1095 -0
  434. data/config/1.1/stix/external/maec_4.1/metadataSharing.xsd +1712 -0
  435. data/config/1.1/stix/external/oasis_ciq_3.0/CommonTypes.xsd +104 -0
  436. data/config/1.1/stix/external/oasis_ciq_3.0/xAL-types.xsd +511 -0
  437. data/config/1.1/stix/external/oasis_ciq_3.0/xAL.xsd +672 -0
  438. data/config/1.1/stix/external/oasis_ciq_3.0/xNAL-types.xsd +36 -0
  439. data/config/1.1/stix/external/oasis_ciq_3.0/xNAL.xsd +126 -0
  440. data/config/1.1/stix/external/oasis_ciq_3.0/xNL-types.xsd +222 -0
  441. data/config/1.1/stix/external/oasis_ciq_3.0/xNL.xsd +284 -0
  442. data/config/1.1/stix/external/oasis_ciq_3.0/xPIL-types.xsd +854 -0
  443. data/config/1.1/stix/external/oasis_ciq_3.0/xPIL.xsd +1621 -0
  444. data/config/1.1/stix/external/oasis_ciq_3.0/xlink-2003-12-31.xsd +90 -0
  445. data/config/1.1/stix/external/open_ioc_2010/ioc-TR.xsd +25 -0
  446. data/config/1.1/stix/external/open_ioc_2010/ioc.xsd +105 -0
  447. data/config/1.1/stix/external/oval_5.10/oval-common-schema.xsd +781 -0
  448. data/config/1.1/stix/external/oval_5.10/oval-definitions-schema.xsd +1608 -0
  449. data/config/1.1/stix/external/oval_5.10/oval-variables-schema.xsd +84 -0
  450. data/config/1.1/stix/external/oval_5.10/xmldsig-core-schema.xsd +309 -0
  451. data/config/1.1/stix/incident.xsd +759 -0
  452. data/config/1.1/stix/indicator.xsd +367 -0
  453. data/config/1.1/stix/stix_common.xsd +932 -0
  454. data/config/1.1/stix/stix_core.xsd +253 -0
  455. data/config/1.1/stix/stix_default_vocabularies.xsd +2015 -0
  456. data/config/1.1/stix/threat_actor.xsd +181 -0
  457. data/config/1.1/stix/ttp.xsd +429 -0
  458. data/config/1.1/uber_schema.xsd +149 -0
  459. data/config/mappings.json +30 -0
  460. data/lib/stix_schema_spy.rb +18 -0
  461. data/lib/stix_schema_spy/models/attribute.rb +20 -0
  462. data/lib/stix_schema_spy/models/complex_type.rb +50 -0
  463. data/lib/stix_schema_spy/models/element.rb +26 -0
  464. data/lib/stix_schema_spy/models/external_type.rb +48 -0
  465. data/lib/stix_schema_spy/models/has_children.rb +83 -0
  466. data/lib/stix_schema_spy/models/node.rb +71 -0
  467. data/lib/stix_schema_spy/models/schema.rb +217 -0
  468. data/lib/stix_schema_spy/models/simple_type.rb +47 -0
  469. data/lib/stix_schema_spy/models/special_field.rb +21 -0
  470. data/lib/stix_schema_spy/models/type.rb +106 -0
  471. data/lib/stix_schema_spy/util/schema_naming.rb +106 -0
  472. data/lib/stix_schema_spy/util/tasks.rb +69 -0
  473. data/lib/stix_schema_spy/version.rb +3 -0
  474. data/spec/lib/schema_naming_spec.rb +190 -0
  475. data/spec/models/complex_type_spec.rb +68 -0
  476. data/spec/models/node_spec.rb +47 -0
  477. data/spec/models/schema_spec.rb +63 -0
  478. data/spec/models/simple_type_spec.rb +38 -0
  479. data/spec/models/type_spec.rb +43 -0
  480. data/spec/spec_helper.rb +8 -0
  481. data/stix_schema_spy.gemspec +27 -0
  482. metadata +602 -0
@@ -0,0 +1,217 @@
1
+ # A STIX/CybOX/etc XML Schema
2
+ # This is the centerpiece of most of the parsing
3
+
4
+ require 'json'
5
+
6
+ module StixSchemaSpy
7
+ class Schema
8
+
9
+ include StixSchemaSpy::HasChildren
10
+ include StixSchemaSpy::Util::SchemaNaming
11
+
12
+ @@schemas = {}
13
+ @@schemas_by_file = {}
14
+ @@config = JSON.parse(File.read(File.join(File.dirname(File.expand_path(__FILE__)), '..', '..', '..', 'config', 'mappings.json')))
15
+ attr_reader :doc, :prefix, :types, :namespace, :filename
16
+
17
+ @schema_root = {
18
+ stix: 'http://stix.mitre.org/XMLSchema',
19
+ cybox: 'http://cybox.mitre.org/XMLSchema'
20
+ }
21
+
22
+ def initialize(schema_location)
23
+ # Open the schema
24
+ @filename = schema_location.split(/[\/\\]/).last
25
+ @doc = Nokogiri::XML(open(schema_location))
26
+
27
+ @elements = {}
28
+ @attributes = {}
29
+ @types = {}
30
+ @special_fields = []
31
+
32
+ # Find this document's prefix (if any)
33
+ @namespace = doc.root.attributes['targetNamespace'].value
34
+ @prefix = find_prefix(doc)
35
+ @@schemas[prefix] = self
36
+
37
+ # First, process any schemas that this schema imports (unless they're blacklisted)
38
+ path = schema_location.split('/')[0...-1].join('/')
39
+ doc.xpath('//xs:import', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).each do |import|
40
+ if self.class.config['schemas'][import.attributes['namespace'].value] && lp = Schema.config['schemas'][import.attributes['namespace'].value]['localPath']
41
+ schema_location = "config/schemas/#{lp}"
42
+ else
43
+ schema_location = import.attributes['schemaLocation'].value
44
+ schema_location = "#{path}/#{schema_location}" unless (schema_location =~ /http/)
45
+ end
46
+ self.class.build(schema_location) unless self.class.blacklisted?(import.attributes['namespace'].value)
47
+ end
48
+
49
+ doc.xpath('//xs:include', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).each do |include_elem|
50
+ schema_location = include_elem.attributes['schemaLocation'].value
51
+ schema_location = "#{path}/#{schema_location}" unless (schema_location =~ /http/)
52
+ @@schemas_by_file[schema_location.split('/').last] = :imported
53
+ process_doc(Nokogiri::XML(open(schema_location)))
54
+ end
55
+
56
+ process_doc(@doc)
57
+ end
58
+
59
+ def process_doc(doc)
60
+ doc.xpath('/xs:schema/*', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).each do |field|
61
+ process_field(field)
62
+ end
63
+ end
64
+
65
+ # Get the configuration entry for this schema
66
+ def config
67
+ @@config['schemas'][namespace] || {}
68
+ end
69
+
70
+ # This makes the has_children module work a little easier (doesn't have to know the difference)
71
+ # between schemas and types.
72
+ def schema
73
+ self
74
+ end
75
+
76
+ # Again, just for compatibility with Type
77
+ def extension
78
+ nil
79
+ end
80
+
81
+ # More compatibility with type
82
+ def load!
83
+ # Schemas are automatically loaded, so do nothing
84
+ end
85
+
86
+ # Find the version of this schema by looking at the version attribute
87
+ def version
88
+ doc.root.attributes['version'].value || "Unknown"
89
+ end
90
+
91
+ # Find the namespace prefix by searching through the namespaces for the TNS
92
+ def find_prefix(doc)
93
+ return config['prefix'] if config && config['prefix']
94
+
95
+ # Loop through the attributes until we see one with the same value
96
+ ns_prefix_attribute = doc.namespaces.find do |prefix, ns|
97
+ ns.to_s == namespace.to_s && prefix != 'xmlns'
98
+ end
99
+
100
+ # If the attribute was found, return it, otherwise return nil
101
+ ns_prefix_attribute ? ns_prefix_attribute[0].split(':').last : "Unknown"
102
+ end
103
+
104
+ # Find a type in this schema by name
105
+ def find_type(name)
106
+ @types[name]
107
+ end
108
+
109
+ # Returns the path to the documentation, just by looking it up in the config
110
+ def doc_path
111
+ config['docs']
112
+ end
113
+
114
+ # Returns whether the schema is a CybOX object
115
+ def is_cybox_object?
116
+ namespace =~ /objects#/
117
+ end
118
+
119
+ def complex_types
120
+ @types.values.select {|t| t.kind_of?(ComplexType)}
121
+ end
122
+
123
+ def simple_types
124
+ @types.values.select {|t| t.kind_of?(SimpleType)}
125
+ end
126
+
127
+ # Build a new schema, cache it
128
+ def self.build(schema_location)
129
+ filename = schema_location.split('/').last
130
+ if filename == 'generic.xsd'
131
+ filename = schema_location.split('/')[-2..-1].join('/')
132
+ end
133
+ @@schemas_by_file[filename] ||= self.new(schema_location)
134
+ end
135
+
136
+ def self.schemas_by_file
137
+ @@schemas_by_file
138
+ end
139
+
140
+ # Return the schemas configuration hash
141
+ def self.config
142
+ @@config
143
+ end
144
+
145
+ # Get all schemas
146
+ def self.all
147
+ @@schemas.values
148
+ end
149
+
150
+ # Find a schema by prefix
151
+ def self.find(prefix_or_ns)
152
+ if @@schemas[prefix_or_ns]
153
+ @@schemas[prefix_or_ns]
154
+ elsif schema_mapping = self.config['schemas'][prefix_or_ns]
155
+ @@schemas[schema_mapping['prefix']]
156
+ end
157
+ end
158
+
159
+ def self.namespaces
160
+ self.all.inject({'xs' => 'http://www.w3.org/2001/XMLSchema'}) {|coll, schema| coll[schema.prefix] = schema.namespace; coll}
161
+ end
162
+
163
+ def self.schema_dir
164
+ File.join(File.dirname(File.expand_path(__FILE__)), '..', '..', '..', 'config', self.version)
165
+ end
166
+
167
+ def self.version
168
+ "1.1"
169
+ end
170
+
171
+ # Don't process non STIX or CybOX schemas
172
+ def self.blacklisted?(namespace)
173
+ blacklist_enabled? && (namespace =~ /(stix)|(cybox)|(data-marking)/).nil?
174
+ end
175
+
176
+ def self.blacklist_enabled?
177
+ !!@blacklist_enabled
178
+ end
179
+
180
+ def self.blacklist_enabled=(val)
181
+ @blacklist_enabled = val
182
+ end
183
+
184
+ def preload!
185
+ 100.times do
186
+ schema.elements.map(&:type)
187
+ schema.attributes.map(&:type)
188
+ schema.complex_types.each {|t| t.elements.each(&:type)}
189
+ end
190
+ end
191
+
192
+ def self.preload!
193
+ return if @preloaded
194
+ @preloaded = true
195
+ Dir.glob("#{schema_dir}/stix/cybox/*.xsd").each {|f| self.build(f)}
196
+ Dir.glob("#{schema_dir}/stix/cybox/objects/*.xsd").each {|f| self.build(f)}
197
+ Dir.glob("#{schema_dir}/stix/cybox/extensions/*.xsd").each {|f| self.build(f)}
198
+ Dir.glob("#{schema_dir}/stix/*.xsd").each {|f| self.build(f)}
199
+ Dir.glob("#{schema_dir}/stix/extensions/**/*.xsd").each {|f| self.build(f)}
200
+ @uber_schema = Dir.chdir(schema_dir) {Nokogiri::XML::Schema.new(File.read('uber_schema.xsd'))}
201
+ end
202
+
203
+ def self.schema_root
204
+ @schema_root
205
+ end
206
+
207
+ def self.schema_root=(value)
208
+ @schema_root = value
209
+ end
210
+
211
+ def blacklisted?
212
+ self.class.blacklisted?(self.namespace)
213
+ end
214
+
215
+ self.blacklist_enabled = true
216
+ end
217
+ end
@@ -0,0 +1,47 @@
1
+ # Representation of a simple type
2
+
3
+ module StixSchemaSpy
4
+ class SimpleType < StixSchemaSpy::Type
5
+
6
+ def self.build(xml, schema)
7
+ self.new(xml, schema)
8
+ end
9
+
10
+ # Returns whether or not this simple type is an enumeration
11
+ def enumeration?
12
+ @is_enumeration ||= @xml.xpath('./xs:restriction/xs:enumeration', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).length > 0
13
+ end
14
+
15
+ # Returns the list of values for this enumeration
16
+ def enumeration_values
17
+ enumeration = @xml.xpath('./xs:restriction/xs:enumeration', {'xs' => 'http://www.w3.org/2001/XMLSchema'})
18
+ if enumeration.length > 0
19
+ return enumeration.map {|elem| [elem.attributes['value'].value, elem.xpath('./xs:annotation/xs:documentation', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).text]}
20
+ else
21
+ raise "Not an enumeration"
22
+ end
23
+ end
24
+
25
+ # A shortcut to checking whether there's an example because simple types never have examples
26
+ def has_example?
27
+ false
28
+ end
29
+
30
+ # Not a complex type
31
+ def complex?
32
+ false
33
+ end
34
+
35
+ def fields
36
+ []
37
+ end
38
+
39
+ def own_fields
40
+ []
41
+ end
42
+
43
+ def elements
44
+ []
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,21 @@
1
+ # Represents some weird XML construct we don't handle (xs:any, xs:anyAttribute primarily)
2
+
3
+ module StixSchemaSpy
4
+ class SpecialField
5
+
6
+ attr_accessor :name, :type, :documentation
7
+
8
+ def initialize(name)
9
+ @name = name
10
+ @type = ExternalType.new("", "")
11
+ end
12
+
13
+ def attribute?
14
+ false
15
+ end
16
+
17
+ def element?
18
+ true
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,106 @@
1
+ # Generic Type (ComplexType, SimpleType, or ExternalType)
2
+
3
+ module StixSchemaSpy
4
+ class Type
5
+
6
+ attr_reader :name, :documentation, :extension, :schema, :inline
7
+
8
+ def initialize(xml, schema, inline = false)
9
+ @inline = !!inline
10
+ @schema = schema
11
+ @xml = xml
12
+ @name = xml.attributes['name'] ? xml.attributes['name'].value : "#{inline}InlineType"
13
+ @documentation = xml.xpath('./xs:annotation/xs:documentation', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).to_a.map {|node| node.text}.join("\n")
14
+ @extension = get_extension(xml)
15
+ end
16
+
17
+ def full_name
18
+ @inline ? name : "#{prefix}:#{name}"
19
+ end
20
+
21
+ def get_extension(type)
22
+ if node = type.xpath('xs:complexContent/xs:extension | xs:simpleContent/xs:extension | xs:complexContent/xs:restriction | xs:simpleContent/xs:restriction', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).first
23
+ base = node.attributes['base'].value
24
+ schema.find_type(base) || Type.find(base)
25
+ else
26
+ nil
27
+ end
28
+ end
29
+
30
+ def abstract?
31
+ !!(@xml.attributes['abstract'] && @xml.attributes['abstract'].value == "true")
32
+ end
33
+
34
+ def parent_type
35
+ @extension
36
+ end
37
+
38
+ # URL is just the prefix/type
39
+ # TODO: This should really go in a helper....
40
+ def url
41
+ "#{prefix}/#{name}"
42
+ end
43
+
44
+ # This may be overriden by classes that inherit this. Otherwise it just checks to see if a template exists
45
+ def has_example?
46
+ File.exists?("views/examples/#{prefix}/#{name}.erb")
47
+ end
48
+
49
+ # This may be overriden by classes that inherit this. Otherwise it just renders the template
50
+ def example(configuration)
51
+ ERB.new(File.read("views/examples/#{prefix}/#{name}.erb")).result(configuration.get_binding)
52
+ end
53
+
54
+ def doc_path
55
+ @schema.doc_path ? @schema.doc_path + "##{name}" : nil
56
+ end
57
+
58
+ # Returns whether or not this type is a vocabulary
59
+ def vocab?
60
+ @is_vocab ||= full_name =~ /Vocab-\d\.\d$/
61
+ end
62
+
63
+ def self.inline(xml, schema, name)
64
+ type = if complex_type = xml.xpath('xs:complexType', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).first
65
+ ComplexType.new(complex_type, schema, name)
66
+ elsif simple_type = xml.xpath('xs:simpleType', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).first
67
+ SimpleType.new(simple_type, schema, name)
68
+ else
69
+ $logger.warn "Unable to find type for #{xml.attributes['name'].value}" if defined?($logger)
70
+ ExternalType.new("", "")
71
+ end
72
+ schema.types[type.name] = type
73
+ type
74
+ end
75
+
76
+ def self.find(prefix, name = nil)
77
+ if name.nil?
78
+ if prefix.split(':').length == 2
79
+ prefix, name = prefix.split(':')
80
+ else
81
+ name = prefix
82
+ prefix = nil
83
+ end
84
+ end
85
+
86
+ if schema = Schema.find(prefix)
87
+ schema.find_type(name)
88
+ else
89
+ ExternalType.new(prefix, name)
90
+ end
91
+ end
92
+
93
+ def prefix
94
+ @schema.prefix
95
+ end
96
+
97
+ def self.counter
98
+ @counter ||= 0
99
+ @counter += 1
100
+ end
101
+
102
+ def inspect
103
+ "#<#{self.class.to_s}:#{object_id} @name=\"#{full_name}\">"
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,106 @@
1
+ # SchemaIdentifier is a set of methods added to the schema class that help identify
2
+ # the type of schema: is it a STIX component, STIX extension, CybOX object, etc.
3
+
4
+ module StixSchemaSpy
5
+ module Util
6
+ module SchemaNaming
7
+
8
+ PROJECT_NAMES = {
9
+ cybox: 'CybOX',
10
+ stix: 'STIX'
11
+ }
12
+
13
+ EXTENSION_TYPE = {
14
+ 'ap' => 'attack_pattern',
15
+ 'structuredcoa' => 'structured_coa',
16
+ 'testmechanism' => 'test_mechanism',
17
+ 'markingstructure' => 'marking'
18
+ }
19
+
20
+ # Returns a symbol indicating the type of schema:
21
+ # One of: core, common, vocabularies, component, object, extension, nil (external)
22
+ def type
23
+ case namespace
24
+ when /stix-\d/, /cybox-\d/
25
+ :core
26
+ when /common/
27
+ :common
28
+ when /vocabularies/
29
+ :vocabularies
30
+ when /cybox\.mitre\.org\/objects#/
31
+ :object
32
+ when /\.mitre\.org\/extensions\//
33
+ :extension
34
+ when /stix\.mitre\.org/ # If it's STIX and not core, common, vocabs, or extensions, it's a component
35
+ :component
36
+ when 'http://data-marking.mitre.org/Marking-1'
37
+ :marking
38
+ else
39
+ nil
40
+ end
41
+ end
42
+
43
+ # Returns a symbol indicating whether the schema is STIX or CybOX
44
+ # One of: stix, cybox, nil
45
+ def project
46
+ case namespace
47
+ when /cybox/
48
+ :cybox
49
+ when /stix/, /data-marking/
50
+ :stix
51
+ else
52
+ nil
53
+ end
54
+ end
55
+
56
+ def title
57
+ return config['title'] if config['title']
58
+ case type
59
+ when :core, :common, :vocabularies
60
+ "#{PROJECT_NAMES[project]} #{type.to_s.capitalize}"
61
+ when :object, :component
62
+ name = xpath_name.gsub("STIX ", "").gsub("CybOX ", "").gsub("_", " ")
63
+ name == "COA" ? "Course of Action" : name
64
+ when :extension
65
+ match = (xpath_name || "").match(/- ([\w \.]+)( Instance)?/)
66
+ match ? match[1] : nil
67
+ when :marking
68
+ "Data Markings"
69
+ else
70
+ prefix.capitalize
71
+ end
72
+ end
73
+
74
+ def schema_location
75
+ return config['schemaLocation'] if config['schemaLocation']
76
+ root = Schema.schema_root[project]
77
+ case type
78
+ when :core, :common
79
+ "#{root}/#{type}/#{version}/#{project}_#{type}.xsd"
80
+ when :vocabularies
81
+ "#{root}/default_#{type}/#{version}/#{project}_default_#{type}.xsd"
82
+ when :component
83
+ component = title.downcase.gsub(' ', '_').downcase
84
+ "#{root}/#{component}/#{version}/#{component}.xsd"
85
+ when :object
86
+ object_name = namespace.match(/#(.+)Object/)[1].gsub(/([^ ])([A-Z][a-z])/, '\1_\2')
87
+ "#{root}/objects/#{object_name}/#{version}/#{object_name}_Object.xsd"
88
+ when :marking
89
+ "#{root}/data_marking/#{version}/data_marking.xsd"
90
+ when :extension
91
+ extension_type = namespace.match(/\/(\w+)#/)[1].downcase
92
+ extension_type = EXTENSION_TYPE[extension_type] if EXTENSION_TYPE[extension_type]
93
+ extension_name = self.filename.gsub("_" + extension_type, '').gsub('.xsd', '')
94
+ "#{root}/extensions/#{extension_type}/#{extension_name}/#{version}/#{extension_name}_#{extension_type}.xsd"
95
+ else
96
+ nil # Fail condition
97
+ end
98
+ end
99
+
100
+ def xpath_name
101
+ element = @doc.xpath('/xs:schema/xs:annotation[1]/xs:appinfo/schema', {'xs' => 'http://www.w3.org/2001/XMLSchema'}).first
102
+ element ? element.text : nil
103
+ end
104
+ end
105
+ end
106
+ end