assemblyline 4.7.5.dev77__tar.gz → 4.7.5.dev79__tar.gz

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 (179) hide show
  1. {assemblyline-4.7.5.dev77/assemblyline.egg-info → assemblyline-4.7.5.dev79}/PKG-INFO +1 -1
  2. assemblyline-4.7.5.dev79/assemblyline/VERSION +1 -0
  3. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datastore/helper.py +1 -300
  4. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79/assemblyline.egg-info}/PKG-INFO +1 -1
  5. assemblyline-4.7.5.dev77/assemblyline/VERSION +0 -1
  6. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/LICENCE.md +0 -0
  7. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/MANIFEST.in +0 -0
  8. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/README.md +0 -0
  9. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/__init__.py +0 -0
  10. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/cachestore/__init__.py +0 -0
  11. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/__init__.py +0 -0
  12. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/archiving.py +0 -0
  13. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/attack_map.py +0 -0
  14. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/backupmanager.py +0 -0
  15. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/banner.py +0 -0
  16. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/bundling.py +0 -0
  17. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/caching.py +0 -0
  18. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/chunk.py +0 -0
  19. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/classification.py +0 -0
  20. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/classification.yml +0 -0
  21. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/cleanup_filestore.py +0 -0
  22. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/codec.py +0 -0
  23. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/comms.py +0 -0
  24. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/constants.py +0 -0
  25. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/custom.magic +0 -0
  26. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/custom.yara +0 -0
  27. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/dict_utils.py +0 -0
  28. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/digests.py +0 -0
  29. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/dispatcher.py +0 -0
  30. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/entropy.py +0 -0
  31. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/exceptions.py +0 -0
  32. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/file.py +0 -0
  33. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/forge.py +0 -0
  34. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/heuristics.py +0 -0
  35. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/hexdump.py +0 -0
  36. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/identify.py +0 -0
  37. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/identify_defaults.py +0 -0
  38. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/importing.py +0 -0
  39. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/iprange.py +0 -0
  40. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/isotime.py +0 -0
  41. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/log.py +0 -0
  42. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/logformat.py +0 -0
  43. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/lucene.lark +0 -0
  44. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/memory_zip.py +0 -0
  45. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/metrics.py +0 -0
  46. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/net.py +0 -0
  47. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/net_static.py +0 -0
  48. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/null.py +0 -0
  49. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/path.py +0 -0
  50. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/postprocess.py +0 -0
  51. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/random_user.py +0 -0
  52. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/safe_archive.py +0 -0
  53. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/security.py +0 -0
  54. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/signaturing.py +0 -0
  55. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/str_utils.py +0 -0
  56. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/tag_safelist.yml +0 -0
  57. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/tagging.py +0 -0
  58. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/threading.py +0 -0
  59. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/uid.py +0 -0
  60. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/common/version.py +0 -0
  61. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datasource/__init__.py +0 -0
  62. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datasource/al.py +0 -0
  63. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datasource/alert.py +0 -0
  64. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datasource/common.py +0 -0
  65. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datastore/__init__.py +0 -0
  66. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datastore/bulk.py +0 -0
  67. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datastore/collection.py +0 -0
  68. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datastore/exceptions.py +0 -0
  69. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datastore/store.py +0 -0
  70. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datastore/support/__init__.py +0 -0
  71. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datastore/support/build.py +0 -0
  72. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/datastore/support/schemas.py +0 -0
  73. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/filestore/__init__.py +0 -0
  74. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/filestore/transport/__init__.py +0 -0
  75. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/filestore/transport/azure.py +0 -0
  76. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/filestore/transport/base.py +0 -0
  77. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/filestore/transport/ftp.py +0 -0
  78. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/filestore/transport/http.py +0 -0
  79. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/filestore/transport/local.py +0 -0
  80. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/filestore/transport/s3.py +0 -0
  81. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/filestore/transport/sftp.py +0 -0
  82. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/__init__.py +0 -0
  83. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/base.py +0 -0
  84. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/common.py +0 -0
  85. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/__init__.py +0 -0
  86. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/alert.py +0 -0
  87. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/alerter_heartbeat.py +0 -0
  88. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/archive_heartbeat.py +0 -0
  89. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/changes.py +0 -0
  90. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/dispatcher_heartbeat.py +0 -0
  91. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/dispatching.py +0 -0
  92. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/elastic_heartbeat.py +0 -0
  93. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/expiry_heartbeat.py +0 -0
  94. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/ingest_heartbeat.py +0 -0
  95. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/metrics.py +0 -0
  96. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/retrohunt_heartbeat.py +0 -0
  97. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/scaler_heartbeat.py +0 -0
  98. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/scaler_status_heartbeat.py +0 -0
  99. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/service_heartbeat.py +0 -0
  100. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/service_timing_heartbeat.py +0 -0
  101. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/submission.py +0 -0
  102. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/task.py +0 -0
  103. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/messages/vacuum_heartbeat.py +0 -0
  104. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/__init__.py +0 -0
  105. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/actions.py +0 -0
  106. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/alert.py +0 -0
  107. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/apikey.py +0 -0
  108. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/badlist.py +0 -0
  109. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/cached_file.py +0 -0
  110. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/config.py +0 -0
  111. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/emptyresult.py +0 -0
  112. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/error.py +0 -0
  113. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/file.py +0 -0
  114. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/filescore.py +0 -0
  115. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/heuristic.py +0 -0
  116. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/__init__.py +0 -0
  117. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/file.py +0 -0
  118. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/filetypes/__init__.py +0 -0
  119. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/filetypes/pe.py +0 -0
  120. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/ontology.py +0 -0
  121. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/results/__init__.py +0 -0
  122. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/results/antivirus.py +0 -0
  123. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/results/http.py +0 -0
  124. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/results/malware_config.py +0 -0
  125. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/results/network.py +0 -0
  126. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/results/process.py +0 -0
  127. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/results/sandbox.py +0 -0
  128. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/ontology/results/signature.py +0 -0
  129. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/replay.py +0 -0
  130. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/result.py +0 -0
  131. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/retrohunt.py +0 -0
  132. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/safelist.py +0 -0
  133. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/service.py +0 -0
  134. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/service_delta.py +0 -0
  135. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/signature.py +0 -0
  136. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/statistics.py +0 -0
  137. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/submission.py +0 -0
  138. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/submission_summary.py +0 -0
  139. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/submission_tree.py +0 -0
  140. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/tagging.py +0 -0
  141. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/user.py +0 -0
  142. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/user_favorites.py +0 -0
  143. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/user_settings.py +0 -0
  144. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/models/workflow.py +0 -0
  145. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/random_data/__init__.py +0 -0
  146. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/random_data/create_test_data.py +0 -0
  147. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/random_data/sample_rules.yar +0 -0
  148. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/random_data/sample_suricata.rules +0 -0
  149. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/odm/randomizer.py +0 -0
  150. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/py.typed +0 -0
  151. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/__init__.py +0 -0
  152. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/__init__.py +0 -0
  153. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/cache.py +0 -0
  154. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/counters.py +0 -0
  155. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/daily_quota_tracker.py +0 -0
  156. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/events.py +0 -0
  157. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/exporting_counter.py +0 -0
  158. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/hash.py +0 -0
  159. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/lock.py +0 -0
  160. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/queues/__init__.py +0 -0
  161. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/queues/comms.py +0 -0
  162. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/queues/multi.py +0 -0
  163. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/queues/named.py +0 -0
  164. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/queues/priority.py +0 -0
  165. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/set.py +0 -0
  166. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/remote/datatypes/user_quota_tracker.py +0 -0
  167. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/run/__init__.py +0 -0
  168. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/run/cli.py +0 -0
  169. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/run/pubsub_reader.py +0 -0
  170. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/run/suricata_importer.py +0 -0
  171. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline/run/yara_importer.py +0 -0
  172. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline.egg-info/SOURCES.txt +0 -0
  173. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline.egg-info/dependency_links.txt +0 -0
  174. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline.egg-info/entry_points.txt +0 -0
  175. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline.egg-info/requires.txt +0 -0
  176. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/assemblyline.egg-info/top_level.txt +0 -0
  177. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/pyproject.toml +0 -0
  178. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/setup.cfg +0 -0
  179. {assemblyline-4.7.5.dev77 → assemblyline-4.7.5.dev79}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline
3
- Version: 4.7.5.dev77
3
+ Version: 4.7.5.dev79
4
4
  Summary: Assemblyline 4 - Automated malware analysis framework
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-base
6
6
  Author: CCCS Assemblyline development team
@@ -0,0 +1 @@
1
+ 4.7.5.dev79
@@ -374,7 +374,7 @@ class AssemblylineDatastore(object):
374
374
  new_file_class = cl_engine.min_classification(new_file_class, c)
375
375
 
376
376
  # Find the results for that classification and alter them if the new classification does not match
377
- for item in self.result.stream_search(f"id:{f}*", fl="classification,id,_index", as_obj=False):
377
+ for item in self.result.stream_search(f"sha256:{f}", fl="classification,id,_index", as_obj=False):
378
378
  try:
379
379
  new_class = cl_engine.max_classification(
380
380
  item.get('classification', cl_engine.UNRESTRICTED), new_file_class)
@@ -404,119 +404,6 @@ class AssemblylineDatastore(object):
404
404
  # Proceed with plan
405
405
  self.multi_index_bulk([s_plan, st_plan, ss_plan, e_plan, er_plan, r_plan, f_plan, fscore_plan])
406
406
 
407
- @elasticapm.capture_span(span_type='datastore')
408
- def delete_submission_tree(
409
- self, sid: str, cl_engine: Classification = forge.get_classification(),
410
- cleanup: bool = True, transport: FileStore | None = None) -> None:
411
- submission = self.submission.get(sid, as_obj=False)
412
- if not submission:
413
- return
414
-
415
- # Gather file list
416
- errors = submission['errors']
417
- results = submission["results"]
418
- files_to_delete = set()
419
- fix_classification_files = set()
420
- supp_map: dict[str, set[str]] = {}
421
-
422
- temp_files = {x[:64] for x in errors}
423
- temp_files.update(x[:64] for x in results)
424
-
425
- # Gather all supplementary files and extracted files
426
- for result in self.result.search("response.supplementary.sha256:* OR response.extracted.sha256:*",
427
- fl="sha256,response.supplementary.sha256,response.extracted.sha256",
428
- rows=len(results), as_obj=False, key_space=results)['items']:
429
- sha256 = result['sha256']
430
- if sha256 not in supp_map:
431
- supp_map[sha256] = set()
432
- for supp in result['response'].get('supplementary', []):
433
- supp_map[sha256].add(supp['sha256'])
434
- for extracted in result['response'].get('extracted', []):
435
- temp_files.add(extracted['sha256'])
436
-
437
- # Inspect each files to see if they are reused
438
- for temp in temp_files:
439
- # Check if we delete the file or update the classification
440
- if self.submission.search(f"NOT sid:{sid} AND (errors:{temp}* OR results:{temp}*)", rows=0, as_obj=False)["total"] == 0:
441
- files_to_delete.add(temp)
442
- files_to_delete |= supp_map.pop(temp, set())
443
- else:
444
- fix_classification_files.add(temp)
445
-
446
- # Filter results and errors
447
- errors = [x for x in errors if x[:64] in files_to_delete]
448
- results = [x for x in results if x[:64] in files_to_delete]
449
-
450
- # Delete files, errors, results that were only used once
451
- for e in errors:
452
- self.error.delete(e)
453
- for r in results:
454
- if r.endswith(".e"):
455
- self.emptyresult.delete(r)
456
- else:
457
- self.result.delete(r)
458
- for f in files_to_delete:
459
- self.file.delete(f)
460
- if transport:
461
- transport.delete(f)
462
-
463
- if fix_classification_files and cleanup:
464
- # Fix classification for the files that remain in the system
465
- for f in fix_classification_files:
466
- cur_file = self.file.get(f, as_obj=False)
467
- if cur_file:
468
- # Find possible classification for the file in the system
469
- query = f"NOT id:{sid} AND (files.sha256:{f} OR results:{f}* OR errors:{f}*)"
470
- classifications = list(self.submission.facet('classification', query=query, size=100).keys())
471
-
472
- if len(classifications) > 0:
473
- new_file_class = classifications[0]
474
- else:
475
- new_file_class = cl_engine.UNRESTRICTED
476
-
477
- for c in classifications:
478
- new_file_class = cl_engine.min_classification(new_file_class, c)
479
-
480
- # Find the results for that classification and alter them if the new classification does not match
481
- for item in self.result.stream_search(f"id:{f}*", fl="classification,id", as_obj=False):
482
- try:
483
- new_class = cl_engine.max_classification(
484
- item.get('classification', cl_engine.UNRESTRICTED), new_file_class)
485
- except InvalidClassification:
486
- # If we can't find common grounds for reclassifying the results... we simply wont.
487
- continue
488
-
489
- if item.get('classification', cl_engine.UNRESTRICTED) != new_class:
490
- parts = cl_engine.get_access_control_parts(new_class)
491
- update_params = [(ESCollection.UPDATE_SET, 'classification', new_class)]
492
- update_params.extend([(ESCollection.UPDATE_SET, k, v) for k, v in parts.items()])
493
- self.result.update(item['id'], update_params)
494
-
495
- # Alter the file classification if the new classification does not match
496
- if cur_file['classification'] != new_file_class:
497
- parts = cl_engine.get_access_control_parts(new_file_class)
498
- update_params = [(ESCollection.UPDATE_SET, 'classification', new_file_class)]
499
- update_params.extend([(ESCollection.UPDATE_SET, k, v) for k, v in parts.items()])
500
- self.file.update(f, update_params)
501
-
502
- # Fix associated supplementary files
503
- for supp in supp_map.get(f, set()):
504
- cur_supp = self.file.get(supp, as_obj=False)
505
- if cur_supp:
506
- if cur_supp['classification'] != new_file_class:
507
- parts = cl_engine.get_access_control_parts(new_file_class)
508
- update_params = [(ESCollection.UPDATE_SET, 'classification', new_file_class)]
509
- update_params.extend([(ESCollection.UPDATE_SET, k, v) for k, v in parts.items()])
510
- self.file.update(supp, update_params)
511
-
512
- # Delete the submission and cached trees and summaries
513
- # NOTE: we will use the search operation because there should not be a lot of submission_tree or summary
514
- self.submission.delete(sid)
515
- for t in self.submission_tree.search(f"id:{sid}*", fl="id", rows=1000, as_obj=False)['items']:
516
- self.submission_tree.delete(t['id'])
517
- for s in self.submission_summary.search(f"id:{sid}*", fl="id", rows=1000, as_obj=False)['items']:
518
- self.submission_summary.delete(s['id'])
519
-
520
407
  @elasticapm.capture_span(span_type='datastore')
521
408
  def get_all_heuristics(self):
522
409
  return {h['id']: h for h in self.heuristic.stream_search("id:*", as_obj=False)}
@@ -1317,192 +1204,6 @@ class AssemblylineDatastore(object):
1317
1204
  except VersionConflictException as vce:
1318
1205
  log.info(f"Retrying save or freshen due to version conflict: {str(vce)}")
1319
1206
 
1320
- def _get_verdict_from_score(self, score):
1321
- if score >= config.submission.verdicts.malicious:
1322
- return "malicious"
1323
- elif score >= config.submission.verdicts.highly_suspicious:
1324
- return "highly suspicious"
1325
- elif score >= config.submission.verdicts.suspicious:
1326
- return "suspicious"
1327
- elif score >= config.submission.verdicts.info:
1328
- return "informative"
1329
- else:
1330
- return "safe"
1331
-
1332
- @elasticapm.capture_span(span_type='datastore')
1333
- def _fix_section_data(self, result, min_score):
1334
- new_sections = []
1335
- for section in result['result'].get('sections', []):
1336
- # Skip section with a small score
1337
- if section.get('heuristic', {}).get('score', -1) < min_score:
1338
- continue
1339
-
1340
- # Rewrite heuristic score as a verdict
1341
- if 'heuristic' in section:
1342
- heur_score = section['heuristic'].pop('score', 0)
1343
- section['heuristic']['verdict'] = self._get_verdict_from_score(heur_score)
1344
-
1345
- # Loading JSON formatted sections
1346
- body_format = section['body_format']
1347
- section_body = section.get('body')
1348
- if body_format in JSON_SECTIONS and isinstance(section_body, str):
1349
- try:
1350
- section['body'] = json.loads(section_body)
1351
- except ValueError:
1352
- pass
1353
-
1354
- # Changing tags to a list
1355
- section['tags'] = tag_dict_to_ai_list(flatten(section.get('tags', {})))
1356
- if not section['tags']:
1357
- section.pop('tags')
1358
-
1359
- # Add the section to the new section array
1360
- new_sections.append(section)
1361
-
1362
- # Update result sections
1363
- result['result']['sections'] = new_sections
1364
-
1365
- # Rewrite score as verdict
1366
- result_score = result['result'].pop('score', 0)
1367
- result['result']['verdict'] = self._get_verdict_from_score(result_score)
1368
-
1369
- return result
1370
-
1371
- @elasticapm.capture_span(span_type='datastore')
1372
- def get_ai_formatted_submission_data(self, sid, user_classification=None,
1373
- cl_engine=forge.get_classification(),
1374
- index_type=None):
1375
- # Get the submission data
1376
- submission = self.submission.get(sid, index_type=index_type)
1377
- if not submission or (user_classification and not cl_engine.is_accessible(
1378
- user_c12n=user_classification, c12n=submission.classification.value)):
1379
- return None
1380
-
1381
- # Auto adjust min_score
1382
- if submission.max_score < 0:
1383
- min_score = -1000000
1384
- else:
1385
- min_score = 300
1386
-
1387
- # Parse results
1388
- results = [
1389
- self._fix_section_data(r.as_primitives(strip_non_ai_fields=True, strip_null=True), min_score)
1390
- for r in self.result.multiget(
1391
- submission.results, as_dictionary=False, error_on_missing=False, index_type=index_type)
1392
- if min_score <= r.result.score and (not user_classification or cl_engine.is_accessible(
1393
- user_c12n=user_classification, c12n=r.classification.value))]
1394
-
1395
- # Create output
1396
- output = submission.as_primitives(strip_non_ai_fields=True, strip_null=True)
1397
- output['verdict'] = self._get_verdict_from_score(output.pop('max_score', 0))
1398
- output['results'] = results
1399
- return output
1400
-
1401
- @elasticapm.capture_span(span_type='datastore')
1402
- def get_ai_formatted_file_results_data(self, sha256, user_classification=None, user_access_control=None,
1403
- cl_engine=forge.get_classification(),
1404
- index_type=None):
1405
- # Get the submission data
1406
- file_obj = self.file.get(sha256, index_type=index_type)
1407
- if not file_obj or (user_classification and not cl_engine.is_accessible(
1408
- user_c12n=user_classification, c12n=file_obj.classification.value)):
1409
- return None
1410
-
1411
- # Check for the max service score
1412
- items = self.result.search(f"id:{sha256}*", fl="result.score", access_control=user_access_control,
1413
- as_obj=False, rows=1, sort="result.score desc", index_type=index_type)['items']
1414
- if items:
1415
- max_score = items[0]['result']['score']
1416
- else:
1417
- max_score = 0
1418
-
1419
- # Auto adjust min_score
1420
- if max_score < 0:
1421
- min_score = -1000000
1422
- else:
1423
- min_score = 300
1424
-
1425
- # Get the list of active result keys
1426
- active_keys, _ = self.list_file_active_keys(
1427
- sha256, user_access_control, min_score=min_score, index_type=index_type)
1428
-
1429
- # Parse results
1430
- results = [
1431
- self._fix_section_data(r.as_primitives(strip_non_ai_fields=True, strip_null=True), min_score)
1432
- for r in self.result.multiget(active_keys, as_dictionary=False,
1433
- error_on_missing=False, index_type=index_type)
1434
- if min_score <= r.result.score and (not user_classification or cl_engine.is_accessible(
1435
- user_c12n=user_classification, c12n=r.classification.value))]
1436
-
1437
- # Create output
1438
- output = file_obj.as_primitives(strip_non_ai_fields=True, strip_null=True)
1439
- output['verdict'] = self._get_verdict_from_score(max_score)
1440
- output['results'] = results
1441
- return output
1442
-
1443
- @elasticapm.capture_span(span_type='datastore')
1444
- def list_file_active_keys(self, sha256, access_control=None, min_score=None, index_type=None):
1445
- query = f"id:{sha256}*"
1446
- if min_score:
1447
- query += f" AND result.score:>={min_score}"
1448
-
1449
- item_list = list(self.result.stream_search(query, fl="id,created,response.service_name,result.score",
1450
- access_control=access_control, as_obj=False,
1451
- index_type=index_type))
1452
-
1453
- item_list.sort(key=lambda k: k["created"], reverse=True)
1454
-
1455
- active_found = set()
1456
- active_keys = []
1457
- alternates = []
1458
- for item in item_list:
1459
- if item['response']['service_name'] not in active_found:
1460
- active_keys.append(item['id'])
1461
- active_found.add(item['response']['service_name'])
1462
- else:
1463
- alternates.append(item)
1464
-
1465
- return active_keys, alternates
1466
-
1467
- @elasticapm.capture_span(span_type='datastore')
1468
- def list_file_childrens(self, sha256, access_control=None):
1469
- query = f'id:{sha256}* AND response.extracted.sha256:*'
1470
- service_resp = self.result.grouped_search("response.service_name", query=query, fl='*',
1471
- sort="created desc", access_control=access_control,
1472
- as_obj=False)
1473
-
1474
- output = []
1475
- processed_sha256 = []
1476
- for r in service_resp['items']:
1477
- for extracted in r['items'][0]['response']['extracted']:
1478
- if extracted['sha256'] not in processed_sha256:
1479
- processed_sha256.append(extracted['sha256'])
1480
- output.append({
1481
- 'name': extracted['name'],
1482
- 'sha256': extracted['sha256']
1483
- })
1484
- return output
1485
-
1486
- @elasticapm.capture_span(span_type='datastore')
1487
- def list_file_parents(self, sha256, access_control=None):
1488
- query = f"response.extracted.sha256:{sha256}"
1489
- processed_sha256 = []
1490
- output = []
1491
-
1492
- response = self.result.search(query, fl='id', sort="created desc",
1493
- access_control=access_control, as_obj=False)
1494
- for p in response['items']:
1495
- key = p['id']
1496
- sha256 = key[:64]
1497
- if sha256 not in processed_sha256:
1498
- output.append(key)
1499
- processed_sha256.append(sha256)
1500
-
1501
- if len(processed_sha256) >= 10:
1502
- break
1503
-
1504
- return output
1505
-
1506
1207
 
1507
1208
  class MetadataValidator:
1508
1209
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline
3
- Version: 4.7.5.dev77
3
+ Version: 4.7.5.dev79
4
4
  Summary: Assemblyline 4 - Automated malware analysis framework
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-base
6
6
  Author: CCCS Assemblyline development team
@@ -1 +0,0 @@
1
- 4.7.5.dev77