assemblyline 4.7.4.dev7__tar.gz → 4.7.4.dev9__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 (178) hide show
  1. {assemblyline-4.7.4.dev7/assemblyline.egg-info → assemblyline-4.7.4.dev9}/PKG-INFO +1 -1
  2. assemblyline-4.7.4.dev9/assemblyline/VERSION +1 -0
  3. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/forge.py +2 -1
  4. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datastore/collection.py +1 -1
  5. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/filestore/__init__.py +39 -8
  6. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/filestore/transport/azure.py +19 -12
  7. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/filestore/transport/base.py +2 -1
  8. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/filestore/transport/ftp.py +12 -8
  9. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/filestore/transport/http.py +8 -3
  10. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/filestore/transport/local.py +8 -4
  11. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/filestore/transport/s3.py +11 -7
  12. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/filestore/transport/sftp.py +8 -4
  13. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9/assemblyline.egg-info}/PKG-INFO +1 -1
  14. assemblyline-4.7.4.dev7/assemblyline/VERSION +0 -1
  15. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/LICENCE.md +0 -0
  16. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/MANIFEST.in +0 -0
  17. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/README.md +0 -0
  18. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/__init__.py +0 -0
  19. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/cachestore/__init__.py +0 -0
  20. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/__init__.py +0 -0
  21. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/archiving.py +0 -0
  22. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/attack_map.py +0 -0
  23. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/backupmanager.py +0 -0
  24. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/banner.py +0 -0
  25. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/bundling.py +0 -0
  26. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/caching.py +0 -0
  27. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/chunk.py +0 -0
  28. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/classification.py +0 -0
  29. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/classification.yml +0 -0
  30. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/cleanup_filestore.py +0 -0
  31. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/codec.py +0 -0
  32. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/comms.py +0 -0
  33. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/constants.py +0 -0
  34. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/custom.magic +0 -0
  35. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/custom.yara +0 -0
  36. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/dict_utils.py +0 -0
  37. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/digests.py +0 -0
  38. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/dispatcher.py +0 -0
  39. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/entropy.py +0 -0
  40. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/exceptions.py +0 -0
  41. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/file.py +0 -0
  42. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/heuristics.py +0 -0
  43. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/hexdump.py +0 -0
  44. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/identify.py +0 -0
  45. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/identify_defaults.py +0 -0
  46. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/importing.py +0 -0
  47. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/iprange.py +0 -0
  48. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/isotime.py +0 -0
  49. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/log.py +0 -0
  50. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/logformat.py +0 -0
  51. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/lucene.lark +0 -0
  52. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/memory_zip.py +0 -0
  53. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/metrics.py +0 -0
  54. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/net.py +0 -0
  55. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/net_static.py +0 -0
  56. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/null.py +0 -0
  57. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/path.py +0 -0
  58. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/postprocess.py +0 -0
  59. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/random_user.py +0 -0
  60. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/security.py +0 -0
  61. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/signaturing.py +0 -0
  62. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/str_utils.py +0 -0
  63. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/tag_safelist.yml +0 -0
  64. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/tagging.py +0 -0
  65. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/threading.py +0 -0
  66. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/uid.py +0 -0
  67. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/common/version.py +0 -0
  68. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datasource/__init__.py +0 -0
  69. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datasource/al.py +0 -0
  70. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datasource/alert.py +0 -0
  71. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datasource/common.py +0 -0
  72. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datastore/__init__.py +0 -0
  73. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datastore/bulk.py +0 -0
  74. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datastore/exceptions.py +0 -0
  75. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datastore/helper.py +0 -0
  76. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datastore/store.py +0 -0
  77. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datastore/support/__init__.py +0 -0
  78. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datastore/support/build.py +0 -0
  79. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/datastore/support/schemas.py +0 -0
  80. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/filestore/transport/__init__.py +0 -0
  81. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/__init__.py +0 -0
  82. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/base.py +0 -0
  83. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/common.py +0 -0
  84. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/__init__.py +0 -0
  85. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/alert.py +0 -0
  86. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/alerter_heartbeat.py +0 -0
  87. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/archive_heartbeat.py +0 -0
  88. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/changes.py +0 -0
  89. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/dispatcher_heartbeat.py +0 -0
  90. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/dispatching.py +0 -0
  91. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/elastic_heartbeat.py +0 -0
  92. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/expiry_heartbeat.py +0 -0
  93. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/ingest_heartbeat.py +0 -0
  94. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/metrics.py +0 -0
  95. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/retrohunt_heartbeat.py +0 -0
  96. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/scaler_heartbeat.py +0 -0
  97. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/scaler_status_heartbeat.py +0 -0
  98. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/service_heartbeat.py +0 -0
  99. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/service_timing_heartbeat.py +0 -0
  100. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/submission.py +0 -0
  101. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/task.py +0 -0
  102. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/messages/vacuum_heartbeat.py +0 -0
  103. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/__init__.py +0 -0
  104. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/actions.py +0 -0
  105. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/alert.py +0 -0
  106. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/apikey.py +0 -0
  107. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/badlist.py +0 -0
  108. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/cached_file.py +0 -0
  109. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/config.py +0 -0
  110. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/emptyresult.py +0 -0
  111. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/error.py +0 -0
  112. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/file.py +0 -0
  113. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/filescore.py +0 -0
  114. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/heuristic.py +0 -0
  115. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/__init__.py +0 -0
  116. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/file.py +0 -0
  117. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/filetypes/__init__.py +0 -0
  118. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/filetypes/pe.py +0 -0
  119. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/ontology.py +0 -0
  120. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/results/__init__.py +0 -0
  121. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/results/antivirus.py +0 -0
  122. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/results/http.py +0 -0
  123. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/results/malware_config.py +0 -0
  124. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/results/network.py +0 -0
  125. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/results/process.py +0 -0
  126. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/results/sandbox.py +0 -0
  127. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/ontology/results/signature.py +0 -0
  128. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/replay.py +0 -0
  129. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/result.py +0 -0
  130. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/retrohunt.py +0 -0
  131. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/safelist.py +0 -0
  132. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/service.py +0 -0
  133. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/service_delta.py +0 -0
  134. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/signature.py +0 -0
  135. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/statistics.py +0 -0
  136. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/submission.py +0 -0
  137. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/submission_summary.py +0 -0
  138. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/submission_tree.py +0 -0
  139. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/tagging.py +0 -0
  140. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/user.py +0 -0
  141. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/user_favorites.py +0 -0
  142. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/user_settings.py +0 -0
  143. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/models/workflow.py +0 -0
  144. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/random_data/__init__.py +0 -0
  145. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/random_data/create_test_data.py +0 -0
  146. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/random_data/sample_rules.yar +0 -0
  147. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/random_data/sample_suricata.rules +0 -0
  148. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/odm/randomizer.py +0 -0
  149. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/py.typed +0 -0
  150. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/__init__.py +0 -0
  151. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/__init__.py +0 -0
  152. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/cache.py +0 -0
  153. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/counters.py +0 -0
  154. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/daily_quota_tracker.py +0 -0
  155. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/events.py +0 -0
  156. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/exporting_counter.py +0 -0
  157. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/hash.py +0 -0
  158. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/lock.py +0 -0
  159. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/queues/__init__.py +0 -0
  160. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/queues/comms.py +0 -0
  161. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/queues/multi.py +0 -0
  162. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/queues/named.py +0 -0
  163. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/queues/priority.py +0 -0
  164. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/set.py +0 -0
  165. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/remote/datatypes/user_quota_tracker.py +0 -0
  166. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/run/__init__.py +0 -0
  167. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/run/cli.py +0 -0
  168. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/run/pubsub_reader.py +0 -0
  169. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/run/suricata_importer.py +0 -0
  170. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline/run/yara_importer.py +0 -0
  171. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline.egg-info/SOURCES.txt +0 -0
  172. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline.egg-info/dependency_links.txt +0 -0
  173. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline.egg-info/entry_points.txt +0 -0
  174. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline.egg-info/requires.txt +0 -0
  175. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/assemblyline.egg-info/top_level.txt +0 -0
  176. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/pyproject.toml +0 -0
  177. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/setup.cfg +0 -0
  178. {assemblyline-4.7.4.dev7 → assemblyline-4.7.4.dev9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline
3
- Version: 4.7.4.dev7
3
+ Version: 4.7.4.dev9
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.4.dev9
@@ -9,10 +9,11 @@ from typing import TYPE_CHECKING, Optional
9
9
 
10
10
  import elasticapm
11
11
  import yaml
12
+ from hauntedhouse import Client
13
+
12
14
  from assemblyline.common.constants import service_queue_name
13
15
  from assemblyline.common.dict_utils import recursive_update
14
16
  from assemblyline.common.importing import load_module_by_path
15
- from hauntedhouse import Client
16
17
 
17
18
  if TYPE_CHECKING:
18
19
  from assemblyline.odm.models.config import Config
@@ -1224,7 +1224,7 @@ class ESCollection(Generic[ModelType]):
1224
1224
  """
1225
1225
  if self.model_class:
1226
1226
  fields = self.model_class.flat_fields(show_compound=True)
1227
- if 'classification in fields':
1227
+ if 'classification' in fields:
1228
1228
  fields.update({"__access_lvl__": Integer(),
1229
1229
  "__access_req__": List(Keyword()),
1230
1230
  "__access_grp1__": List(Keyword()),
@@ -2,10 +2,12 @@ from __future__ import annotations
2
2
 
3
3
  import json
4
4
  import logging
5
+ import time
5
6
  from typing import TYPE_CHECKING, AnyStr, Optional, Tuple
6
7
  from urllib.parse import parse_qs, unquote, urlparse
7
8
 
8
9
  import elasticapm
10
+
9
11
  from assemblyline.common.exceptions import get_stacktrace_info
10
12
  from assemblyline.filestore.transport.azure import TransportAzure
11
13
  from assemblyline.filestore.transport.base import TransportException
@@ -77,7 +79,7 @@ def create_transport(url, connection_attempts=None):
77
79
  sftp: private_key (string), private_key_pass (string), validate_host (bool)
78
80
  s3: aws_region (string), s3_bucket (string), use_ssl (bool), verify (bool)
79
81
  file: normalize (bool)
80
- azure: access_key (string), tenant_id (string), client_id (string), client_secret (string),
82
+ azure: access_key (string), tenant_id (string), client_id (string), client_secret (string),
81
83
  allow_directory_access (bool), use_default_credentials (bool), initalize_container (bool)
82
84
 
83
85
  """
@@ -97,7 +99,7 @@ def create_transport(url, connection_attempts=None):
97
99
 
98
100
  scheme = parsed.scheme.lower()
99
101
  if scheme == 'ftp' or scheme == 'ftps':
100
- valid_bool_keys = ['use_tls']
102
+ valid_bool_keys = ['use_tls', 'read_only']
101
103
  extras = _get_extras(parse_qs(parsed.query), valid_bool_keys=valid_bool_keys)
102
104
  if scheme == 'ftps':
103
105
  extras['use_tls'] = True
@@ -106,27 +108,27 @@ def create_transport(url, connection_attempts=None):
106
108
 
107
109
  elif scheme == "sftp":
108
110
  valid_str_keys = ['private_key', 'private_key_pass']
109
- valid_bool_keys = ['validate_host']
111
+ valid_bool_keys = ['validate_host', 'read_only']
110
112
  extras = _get_extras(parse_qs(parsed.query), valid_str_keys=valid_str_keys, valid_bool_keys=valid_bool_keys)
111
113
 
112
114
  t = TransportSFTP(base=base, host=host, password=password, user=user, port=port, **extras)
113
115
 
114
116
  elif scheme == 'http' or scheme == 'https':
115
117
  valid_str_keys = ['pki']
116
- valid_bool_keys = ['verify']
118
+ valid_bool_keys = ['verify', 'read_only']
117
119
  extras = _get_extras(parse_qs(parsed.query), valid_str_keys=valid_str_keys, valid_bool_keys=valid_bool_keys)
118
120
 
119
121
  t = TransportHTTP(scheme=scheme, base=base, host=host, password=password, user=user, port=port, **extras)
120
122
 
121
123
  elif scheme == 'file':
122
- valid_bool_keys = ['normalize']
124
+ valid_bool_keys = ['normalize', 'read_only']
123
125
  extras = _get_extras(parse_qs(parsed.query), valid_bool_keys=valid_bool_keys)
124
126
 
125
127
  t = TransportLocal(base=base, **extras)
126
128
 
127
129
  elif scheme == 's3':
128
130
  valid_str_keys = ['aws_region', 's3_bucket']
129
- valid_bool_keys = ['use_ssl', 'verify', 'boto_defaults']
131
+ valid_bool_keys = ['use_ssl', 'verify', 'boto_defaults', 'read_only']
130
132
  extras = _get_extras(parse_qs(parsed.query), valid_str_keys=valid_str_keys, valid_bool_keys=valid_bool_keys)
131
133
 
132
134
  # If user/password not specified, access might be dictated by IAM roles
@@ -138,7 +140,7 @@ def create_transport(url, connection_attempts=None):
138
140
 
139
141
  elif scheme == 'azure':
140
142
  valid_str_keys = ['access_key', 'tenant_id', 'client_id', 'client_secret']
141
- valid_bool_keys = ['allow_directory_access', 'use_default_credentials', 'initalize_container']
143
+ valid_bool_keys = ['allow_directory_access', 'use_default_credentials', 'initalize_container', 'read_only']
142
144
  extras = _get_extras(parse_qs(parsed.query), valid_str_keys=valid_str_keys, valid_bool_keys=valid_bool_keys)
143
145
 
144
146
  t = TransportAzure(base=base, host=host, connection_attempts=connection_attempts, **extras)
@@ -150,6 +152,8 @@ def create_transport(url, connection_attempts=None):
150
152
 
151
153
 
152
154
  class FileStore(object):
155
+ SLOW_OP_THRESHOLD = 5.0 # Log warning when a single filestore operation exceeds this (seconds)
156
+
153
157
  def __init__(self, *transport_urls, connection_attempts=None):
154
158
  self.log = logging.getLogger('assemblyline.transport')
155
159
  self.transport_urls = transport_urls
@@ -168,7 +172,11 @@ class FileStore(object):
168
172
  self.close()
169
173
 
170
174
  def __str__(self):
171
- return ', '.join(str(t) for t in self.transports)
175
+ out = ', '.join(str(t) for t in self.transports)
176
+ read_only_transports = [str(t) for t in self.transports if t.read_only]
177
+ if read_only_transports:
178
+ out += " | read-only: {}".format(', '.join(read_only_transports))
179
+ return out
172
180
 
173
181
  def close(self):
174
182
  for t in self.transports:
@@ -182,6 +190,10 @@ class FileStore(object):
182
190
  def delete(self, path: str, location='all'):
183
191
  with elasticapm.capture_span(name='delete', span_type='filestore', labels={'path': path}):
184
192
  for t in self.slice(location):
193
+ if t.read_only:
194
+ # Don't attempt to delete from read only transports
195
+ continue
196
+
185
197
  try:
186
198
  t.delete(path)
187
199
  except Exception as ex:
@@ -193,6 +205,7 @@ class FileStore(object):
193
205
  successful = False
194
206
  transports = []
195
207
  download_errors = []
208
+ start = time.monotonic()
196
209
  for t in self.slice(location):
197
210
  try:
198
211
  t.download(src_path, dest_path)
@@ -202,6 +215,11 @@ class FileStore(object):
202
215
  except Exception as ex:
203
216
  download_errors.append((str(t), str(ex)))
204
217
 
218
+ elapsed = time.monotonic() - start
219
+ if elapsed > self.SLOW_OP_THRESHOLD:
220
+ self.log.warning("Slow filestore download: %s took %.2fs (transports tried: %d)",
221
+ src_path, elapsed, len(download_errors) + len(transports))
222
+
205
223
  if not successful:
206
224
  raise FileStoreException('No transport succeeded => %s' % json.dumps(download_errors))
207
225
  return transports
@@ -240,6 +258,10 @@ class FileStore(object):
240
258
  def put(self, dst_path: str, content: AnyStr, location='all', force=False) -> list[Transport]:
241
259
  transports = []
242
260
  for t in self.slice(location):
261
+ if t.read_only:
262
+ # Skip saving files to read-only transports
263
+ continue
264
+
243
265
  if force or not t.exists(dst_path):
244
266
  transports.append(t)
245
267
  t.put(dst_path, content)
@@ -263,13 +285,22 @@ class FileStore(object):
263
285
  @elasticapm.capture_span(span_type='filestore')
264
286
  def upload(self, src_path: str, dst_path: str, location='all', force=False, verify=False) -> list[Transport]:
265
287
  transports = []
288
+ start = time.monotonic()
266
289
  for t in self.slice(location):
290
+ if t.read_only:
291
+ # Skip saving files to read-only transports
292
+ continue
293
+
267
294
  if force or not t.exists(dst_path):
268
295
  transports.append(t)
269
296
  t.upload(src_path, dst_path)
270
297
  if verify and not t.exists(dst_path):
271
298
  raise FileStoreException('File transfer failed. Remote file does not '
272
299
  'exist for %s on %s (%s)' % (dst_path, location, t))
300
+ elapsed = time.monotonic() - start
301
+ if elapsed > self.SLOW_OP_THRESHOLD:
302
+ self.log.warning("Slow filestore upload: %s took %.2fs across %d transport(s)",
303
+ dst_path, elapsed, len(transports))
273
304
  return transports
274
305
 
275
306
  @elasticapm.capture_span(span_type='filestore')
@@ -4,8 +4,6 @@ import time
4
4
  from io import BytesIO
5
5
  from typing import Iterable, Optional
6
6
 
7
- from assemblyline.common.exceptions import ChainAll
8
- from assemblyline.filestore.transport.base import Transport, TransportException
9
7
  from azure.core.exceptions import (
10
8
  ClientAuthenticationError,
11
9
  DecodeError,
@@ -17,9 +15,16 @@ from azure.core.exceptions import (
17
15
  ServiceRequestError,
18
16
  TooManyRedirectsError,
19
17
  )
20
- from azure.identity import ClientSecretCredential, DefaultAzureCredential, WorkloadIdentityCredential
18
+ from azure.identity import (
19
+ ClientSecretCredential,
20
+ DefaultAzureCredential,
21
+ WorkloadIdentityCredential,
22
+ )
21
23
  from azure.storage.blob import BlobServiceClient
22
24
 
25
+ from assemblyline.common.exceptions import ChainAll
26
+ from assemblyline.filestore.transport.base import Transport, TransportException
27
+
23
28
  """
24
29
  This class assumes a flat file structure in the Azure storage blob.
25
30
  """
@@ -30,7 +35,7 @@ class TransportAzure(Transport):
30
35
 
31
36
  def __init__(self, base=None, access_key=None, tenant_id=None, client_id=None, client_secret=None,
32
37
  host=None, connection_attempts=None, allow_directory_access=False, use_default_credentials=False,
33
- initalize_container=True):
38
+ initalize_container=True, read_only=False):
34
39
  self.log = logging.getLogger('assemblyline.transport.azure')
35
40
  self.read_only = False
36
41
  self.connection_attempts: Optional[int] = connection_attempts
@@ -76,13 +81,15 @@ class TransportAzure(Transport):
76
81
  except TransportException as e:
77
82
  if not isinstance(e.cause, ResourceNotFoundError):
78
83
  raise
79
- try:
80
- self.with_retries(self.container_client.create_container)
81
- except TransportException as error:
82
- if not isinstance(error.cause, ResourceNotFoundError):
83
- raise
84
- self.log.info('Failed to create container, we\'re most likely in read only mode')
85
- self.read_only = True
84
+ if not read_only:
85
+ # Attempt to initialize the container if it doesn't exist if the transport is writable
86
+ try:
87
+ self.with_retries(self.container_client.create_container)
88
+ except TransportException as error:
89
+ if not isinstance(error.cause, ResourceNotFoundError):
90
+ raise
91
+ self.log.info('Failed to create container, we\'re most likely in read only mode')
92
+ read_only = True
86
93
 
87
94
  def azure_normalize(path):
88
95
  # flatten path to just the basename
@@ -94,7 +101,7 @@ class TransportAzure(Transport):
94
101
  else:
95
102
  return path
96
103
 
97
- super(TransportAzure, self).__init__(normalize=azure_normalize)
104
+ super(TransportAzure, self).__init__(normalize=azure_normalize, read_only=read_only)
98
105
 
99
106
  def __str__(self):
100
107
  return f"azure://{self.host}/{self.blob_container}/"
@@ -33,8 +33,9 @@ class Transport(object):
33
33
  TransportExceptions.
34
34
  """
35
35
 
36
- def __init__(self, normalize=normalize_srl_path):
36
+ def __init__(self, normalize=normalize_srl_path, read_only=False):
37
37
  self.normalize = normalize
38
+ self.read_only = read_only
38
39
 
39
40
  def close(self):
40
41
  pass
@@ -1,23 +1,27 @@
1
1
  from __future__ import annotations
2
+
3
+ import errno
2
4
  import ftplib
3
5
  import logging
4
6
  import os
5
7
  import os.path
6
8
  import posixpath
7
- import threading
9
+ import re
8
10
  import socket
11
+ import threading
9
12
  import time
10
- import errno
11
13
  import weakref
12
- import re
13
-
14
14
  from io import BytesIO
15
- from typing import Optional, Union, AnyStr, Iterable
15
+ from typing import AnyStr, Iterable, Optional, Union
16
16
 
17
17
  from assemblyline.common.exceptions import ChainAll
18
18
  from assemblyline.common.path import splitpath
19
19
  from assemblyline.common.uid import get_random_id
20
- from assemblyline.filestore.transport.base import Transport, TransportException, normalize_srl_path
20
+ from assemblyline.filestore.transport.base import (
21
+ Transport,
22
+ TransportException,
23
+ normalize_srl_path,
24
+ )
21
25
 
22
26
  NORMALIZED = re.compile('[a-z0-9]/[a-z0-9]/[a-z0-9]/[a-z0-9]/[a-z0-9]{64}')
23
27
 
@@ -105,7 +109,7 @@ class TransportFTP(Transport):
105
109
  FTP Transport class.
106
110
  """
107
111
 
108
- def __init__(self, base=None, host=None, password=None, user=None, port=None, use_tls=None):
112
+ def __init__(self, base=None, host=None, password=None, user=None, port=None, use_tls=None, read_only=False):
109
113
  self.log: logging.Logger = logging.getLogger('assemblyline.transport.ftp')
110
114
  self.base: str = base
111
115
  self.ftp_objects: weakref.WeakKeyDictionary[threading.Thread, ftplib.FTP] = weakref.WeakKeyDictionary()
@@ -127,7 +131,7 @@ class TransportFTP(Transport):
127
131
  self.log.debug('ftp normalized: %s -> %s', path, s)
128
132
  return s
129
133
 
130
- super(TransportFTP, self).__init__(normalize=ftp_normalize)
134
+ super(TransportFTP, self).__init__(normalize=ftp_normalize, read_only=read_only)
131
135
 
132
136
  @property
133
137
  def ftp(self) -> Union[ftplib.FTP, ftplib.FTP_TLS]:
@@ -1,10 +1,15 @@
1
1
  import logging
2
2
  import os
3
3
  import posixpath
4
+
4
5
  import requests
5
6
 
6
7
  from assemblyline.common.exceptions import ChainAll
7
- from assemblyline.filestore.transport.base import Transport, TransportException, normalize_srl_path
8
+ from assemblyline.filestore.transport.base import (
9
+ Transport,
10
+ TransportException,
11
+ normalize_srl_path,
12
+ )
8
13
 
9
14
 
10
15
  @ChainAll(TransportException)
@@ -13,7 +18,7 @@ class TransportHTTP(Transport):
13
18
  HTTP Transport class.
14
19
  """
15
20
 
16
- def __init__(self, scheme='http', base=None, host=None, password=None, user=None, pki=None, port=None, verify=None):
21
+ def __init__(self, scheme='http', base=None, host=None, password=None, user=None, pki=None, port=None, verify=None, read_only=False):
17
22
  self.log = logging.getLogger('assemblyline.transport.http')
18
23
  self.base = base
19
24
  self.host = host
@@ -45,7 +50,7 @@ class TransportHTTP(Transport):
45
50
 
46
51
  self._session = None
47
52
 
48
- super(TransportHTTP, self).__init__(normalize=http_normalize)
53
+ super(TransportHTTP, self).__init__(normalize=http_normalize, read_only=read_only)
49
54
 
50
55
  @property
51
56
  def session(self):
@@ -1,13 +1,17 @@
1
1
  import logging
2
2
  import os
3
- import shutil
4
3
  import re
4
+ import shutil
5
5
  from typing import AnyStr, Iterable, Optional
6
6
 
7
7
  from assemblyline.common.exceptions import ChainAll
8
8
  from assemblyline.common.path import strip_path_inclusion
9
9
  from assemblyline.common.uid import get_random_id
10
- from assemblyline.filestore.transport.base import Transport, TransportException, normalize_srl_path
10
+ from assemblyline.filestore.transport.base import (
11
+ Transport,
12
+ TransportException,
13
+ normalize_srl_path,
14
+ )
11
15
 
12
16
  NORMALIZED = re.compile('[a-z0-9]/[a-z0-9]/[a-z0-9]/[a-z0-9]/[a-z0-9]{64}')
13
17
 
@@ -18,7 +22,7 @@ class TransportLocal(Transport):
18
22
  Local file system Transport class.
19
23
  """
20
24
 
21
- def __init__(self, base=None, normalize=None):
25
+ def __init__(self, base=None, normalize=None, read_only=False):
22
26
  self.log = logging.getLogger('assemblyline.transport.local')
23
27
  self.base = base
24
28
  self.host = "localhost"
@@ -38,7 +42,7 @@ class TransportLocal(Transport):
38
42
  if not normalize:
39
43
  normalize = local_normalize
40
44
 
41
- super(TransportLocal, self).__init__(normalize=normalize)
45
+ super(TransportLocal, self).__init__(normalize=normalize, read_only=read_only)
42
46
 
43
47
  def delete(self, path):
44
48
  normal_path = self.normalize(path)
@@ -1,13 +1,16 @@
1
- import boto3
2
1
  import logging
3
2
  import os
4
3
  import tempfile
5
4
  import threading
6
-
5
+ from io import BytesIO
7
6
  from typing import Iterable, Optional
8
7
 
9
- from botocore.exceptions import ClientError, EndpointConnectionError, ConnectionClosedError
10
- from io import BytesIO
8
+ import boto3
9
+ from botocore.exceptions import (
10
+ ClientError,
11
+ ConnectionClosedError,
12
+ EndpointConnectionError,
13
+ )
11
14
 
12
15
  from assemblyline.common.exceptions import ChainAll
13
16
  from assemblyline.filestore.transport.base import Transport, TransportException
@@ -32,7 +35,7 @@ class TransportS3(Transport):
32
35
  DEFAULT_HOST = "s3.amazonaws.com"
33
36
 
34
37
  def __init__(self, base=None, accesskey=None, secretkey=None, aws_region=None, s3_bucket="al-storage",
35
- host=None, port=None, use_ssl=None, verify=True, connection_attempts=None, boto_defaults=False):
38
+ host=None, port=None, use_ssl=None, verify=True, connection_attempts=None, boto_defaults=False, read_only=False):
36
39
  self.log = logging.getLogger('assemblyline.transport.s3')
37
40
  self.base = base
38
41
  self.bucket = s3_bucket
@@ -88,7 +91,8 @@ class TransportS3(Transport):
88
91
  else:
89
92
  raise
90
93
 
91
- if not bucket_exist:
94
+ if not bucket_exist and not read_only:
95
+ # Only initialize the bucket if the transport has been deemed writable.
92
96
  try:
93
97
  self.with_retries(self.client.create_bucket, Bucket=self.bucket)
94
98
  except TransportException as e:
@@ -102,7 +106,7 @@ class TransportS3(Transport):
102
106
  # flatten path to just the basename
103
107
  return os.path.basename(path)
104
108
 
105
- super(TransportS3, self).__init__(normalize=s3_normalize)
109
+ super(TransportS3, self).__init__(normalize=s3_normalize, read_only=read_only)
106
110
 
107
111
  def __str__(self):
108
112
  out = "s3://"
@@ -4,7 +4,6 @@ import posixpath
4
4
  import tempfile
5
5
  import warnings
6
6
 
7
-
8
7
  # Stop Blowfish deprecation warning
9
8
  with warnings.catch_warnings():
10
9
  warnings.simplefilter("ignore")
@@ -12,11 +11,16 @@ with warnings.catch_warnings():
12
11
  import pysftp
13
12
 
14
13
  from io import BytesIO
14
+
15
15
  from paramiko import SSHException
16
16
 
17
17
  from assemblyline.common.exceptions import ChainAll
18
18
  from assemblyline.common.uid import get_random_id
19
- from assemblyline.filestore.transport.base import Transport, TransportException, normalize_srl_path
19
+ from assemblyline.filestore.transport.base import (
20
+ Transport,
21
+ TransportException,
22
+ normalize_srl_path,
23
+ )
20
24
 
21
25
 
22
26
  def reconnect_retry_on_fail(func):
@@ -63,7 +67,7 @@ class TransportSFTP(Transport):
63
67
  """
64
68
 
65
69
  def __init__(self, base=None, host=None, password=None, user=None, port=None, private_key=None,
66
- private_key_pass=None, validate_host=False):
70
+ private_key_pass=None, validate_host=False, read_only=False):
67
71
  self.log = logging.getLogger('assemblyline.transport.sftp')
68
72
  if base == "/":
69
73
  self.base = "./"
@@ -102,7 +106,7 @@ class TransportSFTP(Transport):
102
106
  self.log.debug('sftp normalized: %s -> %s', path, s)
103
107
  return s
104
108
 
105
- super(TransportSFTP, self).__init__(normalize=sftp_normalize)
109
+ super(TransportSFTP, self).__init__(normalize=sftp_normalize, read_only=read_only)
106
110
 
107
111
  def __str__(self):
108
112
  return 'sftp://{}@{}{}'.format(self.user, self.host, self.base)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline
3
- Version: 4.7.4.dev7
3
+ Version: 4.7.4.dev9
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.4.dev7