assemblyline 4.8.1.dev0__tar.gz → 4.8.1.dev2__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 (181) hide show
  1. {assemblyline-4.8.1.dev0/assemblyline.egg-info → assemblyline-4.8.1.dev2}/PKG-INFO +4 -7
  2. assemblyline-4.8.1.dev2/assemblyline/VERSION +1 -0
  3. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/cachestore/__init__.py +1 -1
  4. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/identify.py +29 -7
  5. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/tag_safelist.yml +9 -11
  6. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/filestore/transport/sftp.py +6 -11
  7. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2/assemblyline.egg-info}/PKG-INFO +4 -7
  8. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline.egg-info/requires.txt +3 -6
  9. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/pyproject.toml +3 -6
  10. assemblyline-4.8.1.dev0/assemblyline/VERSION +0 -1
  11. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/LICENCE.md +0 -0
  12. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/MANIFEST.in +0 -0
  13. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/README.md +0 -0
  14. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/__init__.py +0 -0
  15. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/__init__.py +0 -0
  16. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/archiving.py +0 -0
  17. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/attack_map.py +0 -0
  18. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/backupmanager.py +0 -0
  19. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/banner.py +0 -0
  20. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/bundling.py +0 -0
  21. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/caching.py +0 -0
  22. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/chunk.py +0 -0
  23. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/classification.py +0 -0
  24. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/classification.yml +0 -0
  25. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/cleanup_filestore.py +0 -0
  26. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/codec.py +0 -0
  27. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/comms.py +0 -0
  28. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/constants.py +0 -0
  29. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/custom.magic +0 -0
  30. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/custom.yara +0 -0
  31. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/dict_utils.py +0 -0
  32. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/digests.py +0 -0
  33. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/dispatcher.py +0 -0
  34. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/entropy.py +0 -0
  35. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/exceptions.py +0 -0
  36. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/file.py +0 -0
  37. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/forge.py +0 -0
  38. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/heuristics.py +0 -0
  39. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/hexdump.py +0 -0
  40. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/identify_defaults.py +0 -0
  41. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/importing.py +0 -0
  42. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/iprange.py +0 -0
  43. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/isotime.py +0 -0
  44. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/log.py +0 -0
  45. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/logformat.py +0 -0
  46. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/lucene.lark +0 -0
  47. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/memory_zip.py +0 -0
  48. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/metrics.py +0 -0
  49. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/net.py +0 -0
  50. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/net_static.py +0 -0
  51. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/null.py +0 -0
  52. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/path.py +0 -0
  53. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/postprocess.py +0 -0
  54. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/random_user.py +0 -0
  55. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/safe_archive.py +0 -0
  56. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/security.py +0 -0
  57. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/signaturing.py +0 -0
  58. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/str_utils.py +0 -0
  59. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/tagging.py +0 -0
  60. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/threading.py +0 -0
  61. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/uid.py +0 -0
  62. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/common/version.py +0 -0
  63. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datasource/__init__.py +0 -0
  64. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datasource/al.py +0 -0
  65. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datasource/alert.py +0 -0
  66. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datasource/common.py +0 -0
  67. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datastore/__init__.py +0 -0
  68. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datastore/bulk.py +0 -0
  69. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datastore/collection.py +0 -0
  70. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datastore/exceptions.py +0 -0
  71. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datastore/helper.py +0 -0
  72. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datastore/store.py +0 -0
  73. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datastore/support/__init__.py +0 -0
  74. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datastore/support/build.py +0 -0
  75. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/datastore/support/schemas.py +0 -0
  76. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/filestore/__init__.py +0 -0
  77. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/filestore/transport/__init__.py +0 -0
  78. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/filestore/transport/azure.py +0 -0
  79. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/filestore/transport/base.py +0 -0
  80. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/filestore/transport/ftp.py +0 -0
  81. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/filestore/transport/http.py +0 -0
  82. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/filestore/transport/local.py +0 -0
  83. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/filestore/transport/s3.py +0 -0
  84. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/__init__.py +0 -0
  85. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/base.py +0 -0
  86. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/common.py +0 -0
  87. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/__init__.py +0 -0
  88. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/alert.py +0 -0
  89. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/alerter_heartbeat.py +0 -0
  90. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/archive_heartbeat.py +0 -0
  91. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/changes.py +0 -0
  92. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/dispatcher_heartbeat.py +0 -0
  93. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/dispatching.py +0 -0
  94. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/elastic_heartbeat.py +0 -0
  95. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/expiry_heartbeat.py +0 -0
  96. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/ingest_heartbeat.py +0 -0
  97. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/metrics.py +0 -0
  98. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/retrohunt_heartbeat.py +0 -0
  99. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/scaler_heartbeat.py +0 -0
  100. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/scaler_status_heartbeat.py +0 -0
  101. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/service_heartbeat.py +0 -0
  102. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/service_timing_heartbeat.py +0 -0
  103. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/submission.py +0 -0
  104. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/task.py +0 -0
  105. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/messages/vacuum_heartbeat.py +0 -0
  106. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/__init__.py +0 -0
  107. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/actions.py +0 -0
  108. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/alert.py +0 -0
  109. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/apikey.py +0 -0
  110. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/badlist.py +0 -0
  111. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/cached_file.py +0 -0
  112. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/config.py +0 -0
  113. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/emptyresult.py +0 -0
  114. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/error.py +0 -0
  115. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/file.py +0 -0
  116. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/filescore.py +0 -0
  117. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/heuristic.py +0 -0
  118. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/__init__.py +0 -0
  119. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/file.py +0 -0
  120. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/filetypes/__init__.py +0 -0
  121. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/filetypes/pe.py +0 -0
  122. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/ontology.py +0 -0
  123. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/results/__init__.py +0 -0
  124. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/results/antivirus.py +0 -0
  125. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/results/http.py +0 -0
  126. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/results/malware_config.py +0 -0
  127. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/results/network.py +0 -0
  128. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/results/process.py +0 -0
  129. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/results/sandbox.py +0 -0
  130. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/ontology/results/signature.py +0 -0
  131. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/replay.py +0 -0
  132. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/result.py +0 -0
  133. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/retrohunt.py +0 -0
  134. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/safelist.py +0 -0
  135. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/service.py +0 -0
  136. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/service_delta.py +0 -0
  137. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/signature.py +0 -0
  138. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/statistics.py +0 -0
  139. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/submission.py +0 -0
  140. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/submission_summary.py +0 -0
  141. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/submission_tree.py +0 -0
  142. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/tagging.py +0 -0
  143. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/user.py +0 -0
  144. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/user_favorites.py +0 -0
  145. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/user_settings.py +0 -0
  146. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/models/workflow.py +0 -0
  147. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/random_data/__init__.py +0 -0
  148. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/random_data/create_test_data.py +0 -0
  149. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/random_data/sample_rules.yar +0 -0
  150. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/random_data/sample_suricata.rules +0 -0
  151. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/odm/randomizer.py +0 -0
  152. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/py.typed +0 -0
  153. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/__init__.py +0 -0
  154. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/__init__.py +0 -0
  155. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/cache.py +0 -0
  156. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/counters.py +0 -0
  157. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/daily_quota_tracker.py +0 -0
  158. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/events.py +0 -0
  159. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/exporting_counter.py +0 -0
  160. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/hash.py +0 -0
  161. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/lock.py +0 -0
  162. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/queues/__init__.py +0 -0
  163. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/queues/comms.py +0 -0
  164. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/queues/multi.py +0 -0
  165. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/queues/named.py +0 -0
  166. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/queues/priority.py +0 -0
  167. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/set.py +0 -0
  168. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/remote/datatypes/user_quota_tracker.py +0 -0
  169. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/run/__init__.py +0 -0
  170. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/run/cli.py +0 -0
  171. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/run/pubsub_reader.py +0 -0
  172. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/run/suricata_importer.py +0 -0
  173. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline/run/yara_importer.py +0 -0
  174. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline.egg-info/SOURCES.txt +0 -0
  175. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline.egg-info/dependency_links.txt +0 -0
  176. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline.egg-info/entry_points.txt +0 -0
  177. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/assemblyline.egg-info/top_level.txt +0 -0
  178. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/dev/core/config/classification.yml +0 -0
  179. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/external/generate_attack_map.py +0 -0
  180. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/external/generate_tlds.py +0 -0
  181. {assemblyline-4.8.1.dev0 → assemblyline-4.8.1.dev2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline
3
- Version: 4.8.1.dev0
3
+ Version: 4.8.1.dev2
4
4
  Summary: Assemblyline 4 - Automated malware analysis framework
5
5
  Author-email: CCCS Assemblyline development team <assemblyline@cyber.gc.ca>
6
6
  License-Expression: MIT
@@ -17,12 +17,10 @@ Requires-Python: >=3.11
17
17
  Description-Content-Type: text/markdown
18
18
  License-File: LICENCE.md
19
19
  Requires-Dist: arrow
20
- Requires-Dist: aiohttp
21
20
  Requires-Dist: lark
22
- Requires-Dist: urllib3>=2.6.0
23
21
  Requires-Dist: python-baseconv
24
22
  Requires-Dist: boto3
25
- Requires-Dist: pysftp
23
+ Requires-Dist: sftpretty
26
24
  Requires-Dist: redis
27
25
  Requires-Dist: requests[socks]
28
26
  Requires-Dist: elasticsearch<9.0.0,>=8.0.0
@@ -35,7 +33,6 @@ Requires-Dist: assemblyline-toolbox>=0.4.0
35
33
  Requires-Dist: python-magic
36
34
  Requires-Dist: pytz
37
35
  Requires-Dist: apscheduler
38
- Requires-Dist: websocket_client<1.0.0
39
36
  Requires-Dist: elastic-apm[flask]>=6.13.0
40
37
  Requires-Dist: notifications-python-client
41
38
  Requires-Dist: rstr
@@ -46,13 +43,13 @@ Requires-Dist: chardet<6
46
43
  Requires-Dist: yara-python
47
44
  Requires-Dist: hauntedhouse==0.1.10
48
45
  Requires-Dist: magika
49
- Requires-Dist: paramiko<4
50
46
  Provides-Extra: test
51
47
  Requires-Dist: pytest; extra == "test"
52
48
  Requires-Dist: retrying; extra == "test"
53
49
  Requires-Dist: pytest-mock; extra == "test"
54
50
  Requires-Dist: pyftpdlib; extra == "test"
55
- Requires-Dist: pyopenssl==23.3.0; extra == "test"
51
+ Requires-Dist: pyopenssl; extra == "test"
52
+ Requires-Dist: cryptography; extra == "test"
56
53
  Dynamic: license-file
57
54
 
58
55
  [![Discord](https://img.shields.io/badge/chat-on%20discord-7289da.svg?sanitize=true)](https://discord.gg/GUAy9wErNu)
@@ -0,0 +1 @@
1
+ 4.8.1.dev2
@@ -49,7 +49,7 @@ class CacheStore(object):
49
49
  new_key = f"{self.component}_{cache_key}" if self.component else cache_key
50
50
 
51
51
  self.datastore.cached_file.save(new_key, {'expiry_ts': now_as_iso(ttl), 'component': self.component})
52
- self.filestore.upload(new_key, path, force=True)
52
+ self.filestore.upload(path, new_key, force=True)
53
53
 
54
54
  def touch(self, cache_key: str, ttl=DEFAULT_CACHE_LEN):
55
55
  if not COMPONENT_VALIDATOR.match(cache_key):
@@ -41,6 +41,10 @@ CUSTOM_PS1_ID = b"#!/usr/bin/env pwsh\n"
41
41
  CUSTOM_BATCH_ID = b"REM Batch extracted by Assemblyline\n"
42
42
  CUSTOM_URI_ID = "# Assemblyline URI file\n"
43
43
 
44
+ PDF_ENCRYPT_MARKER = b"/Encrypt"
45
+ PDF_PORTFOLIO_MARKER = b"/Type/Catalog/Collection"
46
+ PDF_SCAN_BLOCKSIZE = 1048576
47
+
44
48
 
45
49
  class Identify:
46
50
  def __init__(self, use_cache: bool = True, config=None, datastore=None, log=None) -> None:
@@ -452,13 +456,9 @@ class Identify:
452
456
  # - Check for encryption
453
457
  # - Check for PDF collection (portfolio)
454
458
  if data["type"] == "document/pdf":
455
- # Password protected documents typically contain '/Encrypt'
456
- pdf_content = open(path, "rb").read()
457
- if re.search(b"/Encrypt", pdf_content):
458
- data["type"] = "document/pdf/passwordprotected"
459
- # Portfolios typically contain '/Type/Catalog/Collection
460
- elif re.search(b"/Type/Catalog/Collection", pdf_content):
461
- data["type"] = "document/pdf/portfolio"
459
+ refined_type = pdf_ident(path)
460
+ if refined_type:
461
+ data["type"] = refined_type
462
462
 
463
463
  return data
464
464
 
@@ -640,6 +640,28 @@ def uri_ident(path: str, info: Dict) -> str:
640
640
  return f"uri/{u.scheme}"
641
641
 
642
642
 
643
+ def pdf_ident(path: str) -> Optional[str]:
644
+ # The file is scanned in fixed-size blocks (with a small overlap so markers straddling a
645
+ # block boundary are still found) to keep memory usage flat no matter the file size.
646
+ overlap = len(PDF_PORTFOLIO_MARKER) - 1
647
+ saw_portfolio = False
648
+ tail = b""
649
+ with open(path, "rb") as fh:
650
+ while block := fh.read(PDF_SCAN_BLOCKSIZE):
651
+ boundary = tail + block[:overlap]
652
+ # Password protected documents typically contain '/Encrypt'
653
+ # '/Encrypt' anywhere in the file takes precedence over the portfolio marker.
654
+ if PDF_ENCRYPT_MARKER in block or PDF_ENCRYPT_MARKER in boundary:
655
+ return "document/pdf/passwordprotected"
656
+ # Portfolios typically contain '/Type/Catalog/Collection'
657
+ if not saw_portfolio and (PDF_PORTFOLIO_MARKER in block or PDF_PORTFOLIO_MARKER in boundary):
658
+ saw_portfolio = True
659
+ tail = block[-overlap:]
660
+
661
+ if saw_portfolio:
662
+ return "document/pdf/portfolio"
663
+ return None
664
+
643
665
  def shell_main():
644
666
  from pprint import pprint
645
667
 
@@ -92,11 +92,10 @@ regex:
92
92
  - https?://schemas\.android\.com/apk/res(-auto|/android)
93
93
  - https?://xmlpull\.org/v1/doc/features\.html(?:$|.*)
94
94
  - https?://android\.googlesource\.com/toolchain/llvm-project
95
- - https?://schemas\.openxmlformats\.org/officeDocument/2006/relationships/(image|attachedTemplate|header|footnotes|fontTable|customXml|endnotes|theme|settings|webSettings|glossaryDocument|numbering|footer|styles)
95
+ - ^https?://schemas\.openxmlformats\.org/officeDocument/2006/(?:math|relationships(?:/[\w./-]+)?)$
96
96
  - https?://schemas\.openxmlformats\.org/drawingml/2006/(main|wordprocessingDrawing)
97
- - https?://schemas\.openxmlformats\.org/package/2006/relationships
97
+ - ^https?://schemas\.openxmlformats\.org/package/2006/relationships(?:/[\w./-]+)?$
98
98
  - https?://schemas\.openxmlformats\.org/markup-compatibility/2006
99
- - https?://schemas\.openxmlformats\.org/officeDocument/2006/(relationships|math)
100
99
  - https?://schemas\.openxmlformats\.org/word/2010/wordprocessingShape
101
100
  - https?://schemas\.openxmlformats\.org/wordprocessingml/2006/main
102
101
  - https?://www\.verisign\.com/(rpa0|rpa|cps0)
@@ -117,9 +116,9 @@ regex:
117
116
  # Azure
118
117
  - https?://wpad\..*/wpad\.dat
119
118
  # Google
120
- - https?://www\.google\.c(om|a)
119
+ - ^https?://www\.google\.c(?:om|a)/?$
121
120
  # Adobe
122
- - (?:https?://)?files\.acrobat\.com(?:(?::443)|/?$)
121
+ - ^(?:https?://)?files\.acrobat\.com(?::443)?/?$
123
122
  network.static.uri:
124
123
  - ^(\w{2,5}:\/\/)?[^:\/]*\.verisign\.com(:([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[1-5]))?\/[^:]*$
125
124
  - ^(\w{2,5}:\/\/)?[^:\/]*\.bootstrapcdn\.com(:([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[1-5]))?\/[^:]*$
@@ -129,16 +128,15 @@ regex:
129
128
  - https?://schemas\.android\.com/apk/res(-auto|/android)
130
129
  - https?://xmlpull\.org/v1/doc/features\.html(?:$|.*)
131
130
  - https?://android\.googlesource\.com/toolchain/llvm-project
132
- - https?://schemas\.openxmlformats\.org/officeDocument/2006/relationships/(image|attachedTemplate|header|footnotes|fontTable|customXml|endnotes|theme|settings|webSettings|glossaryDocument|numbering|footer|styles)
131
+ - ^https?://schemas\.openxmlformats\.org/officeDocument/2006/(?:math|relationships(?:/[\w./-]+)?)$
133
132
  - https?://schemas\.microsoft\.com/office/word/2010/(wordml|wordprocessingCanvas|wordprocessingInk|wordprocessingGroup|wordprocessingDrawing)
134
133
  - https?://schemas\.microsoft\.com/office/word/(2012|2006)/wordml
135
134
  - https?://schemas\.microsoft\.com/office/word/2015/wordml/symex
136
135
  - https?://schemas\.microsoft\.com/office/drawing/2014/chartex
137
136
  - https?://schemas\.microsoft\.com/office/drawing/2015/9/8/chartex
138
137
  - https?://schemas\.openxmlformats\.org/drawingml/2006/(main|wordprocessingDrawing)
139
- - https?://schemas\.openxmlformats\.org/package/2006/relationships
138
+ - ^https?://schemas\.openxmlformats\.org/package/2006/relationships(?:/[\w./-]+)?$
140
139
  - https?://schemas\.openxmlformats\.org/markup-compatibility/2006
141
- - https?://schemas\.openxmlformats\.org/officeDocument/2006/(relationships|math)
142
140
  - https?://schemas\.openxmlformats\.org/word/2010/wordprocessingShape
143
141
  - https?://schemas\.openxmlformats\.org/wordprocessingml/2006/main
144
142
  - https?://www\.verisign\.com/(rpa0|rpa|cps0)
@@ -247,9 +245,9 @@ regex:
247
245
  - ((api|www|platform)\.)?bing\.com$
248
246
  # Azure
249
247
  - md-ssd-.+\.blob\.core\.windows\.net$
250
- - .+\.table\.core\.windows\.net
251
- - .+\.blob\.core\.windows\.net
252
- - .+\.opinsights\.azure\.com
248
+ - .+\.table\.core\.windows\.net$
249
+ - .+\.blob\.core\.windows\.net$
250
+ - .+\.opinsights\.azure\.com$
253
251
  - agentserviceapi\.azure-automation\.net$
254
252
  - agentserviceapi\.guestconfiguration\.azure\.com$
255
253
  - .+\.blob\.storage\.azure\.net$
@@ -4,11 +4,7 @@ import posixpath
4
4
  import tempfile
5
5
  import warnings
6
6
 
7
- # Stop Blowfish deprecation warning
8
- with warnings.catch_warnings():
9
- warnings.simplefilter("ignore")
10
-
11
- import pysftp
7
+ import sftpretty
12
8
 
13
9
  from io import BytesIO
14
10
 
@@ -30,7 +26,7 @@ def reconnect_retry_on_fail(func):
30
26
 
31
27
  try:
32
28
  if not self.sftp:
33
- self.sftp = pysftp.Connection(self.host,
29
+ self.sftp = sftpretty.Connection(self.host,
34
30
  username=self.user,
35
31
  password=self.password,
36
32
  private_key=self.private_key,
@@ -47,7 +43,7 @@ def reconnect_retry_on_fail(func):
47
43
  self.sftp.close() # Just best effort.
48
44
 
49
45
  # The original func will reconnect automatically.
50
- self.sftp = pysftp.Connection(self.host,
46
+ self.sftp = sftpretty.Connection(self.host,
51
47
  username=self.user,
52
48
  password=self.password,
53
49
  private_key=self.private_key,
@@ -80,13 +76,12 @@ class TransportSFTP(Transport):
80
76
  self.private_key = private_key
81
77
  self.private_key_pass = private_key_pass
82
78
  if not validate_host:
83
- self.cnopts = pysftp.CnOpts()
84
- self.cnopts.hostkeys = None
79
+ self.cnopts = sftpretty.CnOpts(knownhosts=None)
85
80
  else:
86
81
  self.cnopts = None
87
82
 
88
83
  # Connect on create
89
- self.sftp = pysftp.Connection(self.host,
84
+ self.sftp = sftpretty.Connection(self.host,
90
85
  username=self.user,
91
86
  password=self.password,
92
87
  private_key=self.private_key,
@@ -131,7 +126,7 @@ class TransportSFTP(Transport):
131
126
  @reconnect_retry_on_fail
132
127
  def makedirs(self, path):
133
128
  path = self.normalize(path)
134
- self.sftp.makedirs(path)
129
+ self.sftp.mkdir_p(path)
135
130
 
136
131
  # File based functions
137
132
  @reconnect_retry_on_fail
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline
3
- Version: 4.8.1.dev0
3
+ Version: 4.8.1.dev2
4
4
  Summary: Assemblyline 4 - Automated malware analysis framework
5
5
  Author-email: CCCS Assemblyline development team <assemblyline@cyber.gc.ca>
6
6
  License-Expression: MIT
@@ -17,12 +17,10 @@ Requires-Python: >=3.11
17
17
  Description-Content-Type: text/markdown
18
18
  License-File: LICENCE.md
19
19
  Requires-Dist: arrow
20
- Requires-Dist: aiohttp
21
20
  Requires-Dist: lark
22
- Requires-Dist: urllib3>=2.6.0
23
21
  Requires-Dist: python-baseconv
24
22
  Requires-Dist: boto3
25
- Requires-Dist: pysftp
23
+ Requires-Dist: sftpretty
26
24
  Requires-Dist: redis
27
25
  Requires-Dist: requests[socks]
28
26
  Requires-Dist: elasticsearch<9.0.0,>=8.0.0
@@ -35,7 +33,6 @@ Requires-Dist: assemblyline-toolbox>=0.4.0
35
33
  Requires-Dist: python-magic
36
34
  Requires-Dist: pytz
37
35
  Requires-Dist: apscheduler
38
- Requires-Dist: websocket_client<1.0.0
39
36
  Requires-Dist: elastic-apm[flask]>=6.13.0
40
37
  Requires-Dist: notifications-python-client
41
38
  Requires-Dist: rstr
@@ -46,13 +43,13 @@ Requires-Dist: chardet<6
46
43
  Requires-Dist: yara-python
47
44
  Requires-Dist: hauntedhouse==0.1.10
48
45
  Requires-Dist: magika
49
- Requires-Dist: paramiko<4
50
46
  Provides-Extra: test
51
47
  Requires-Dist: pytest; extra == "test"
52
48
  Requires-Dist: retrying; extra == "test"
53
49
  Requires-Dist: pytest-mock; extra == "test"
54
50
  Requires-Dist: pyftpdlib; extra == "test"
55
- Requires-Dist: pyopenssl==23.3.0; extra == "test"
51
+ Requires-Dist: pyopenssl; extra == "test"
52
+ Requires-Dist: cryptography; extra == "test"
56
53
  Dynamic: license-file
57
54
 
58
55
  [![Discord](https://img.shields.io/badge/chat-on%20discord-7289da.svg?sanitize=true)](https://discord.gg/GUAy9wErNu)
@@ -1,10 +1,8 @@
1
1
  arrow
2
- aiohttp
3
2
  lark
4
- urllib3>=2.6.0
5
3
  python-baseconv
6
4
  boto3
7
- pysftp
5
+ sftpretty
8
6
  redis
9
7
  requests[socks]
10
8
  elasticsearch<9.0.0,>=8.0.0
@@ -17,7 +15,6 @@ assemblyline-toolbox>=0.4.0
17
15
  python-magic
18
16
  pytz
19
17
  apscheduler
20
- websocket_client<1.0.0
21
18
  elastic-apm[flask]>=6.13.0
22
19
  notifications-python-client
23
20
  rstr
@@ -28,11 +25,11 @@ chardet<6
28
25
  yara-python
29
26
  hauntedhouse==0.1.10
30
27
  magika
31
- paramiko<4
32
28
 
33
29
  [test]
34
30
  pytest
35
31
  retrying
36
32
  pytest-mock
37
33
  pyftpdlib
38
- pyopenssl==23.3.0
34
+ pyopenssl
35
+ cryptography
@@ -36,12 +36,10 @@ classifiers = [
36
36
  ]
37
37
  dependencies = [
38
38
  "arrow",
39
- "aiohttp",
40
39
  "lark",
41
- "urllib3>=2.6.0",
42
40
  "python-baseconv",
43
41
  "boto3",
44
- "pysftp",
42
+ "sftpretty",
45
43
  "redis",
46
44
  "requests[socks]",
47
45
  "elasticsearch>=8.0.0,<9.0.0",
@@ -54,7 +52,6 @@ dependencies = [
54
52
  "python-magic",
55
53
  "pytz",
56
54
  "apscheduler",
57
- "websocket_client<1.0.0",
58
55
  "elastic-apm[flask]>=6.13.0",
59
56
  "notifications-python-client",
60
57
  "rstr",
@@ -66,7 +63,6 @@ dependencies = [
66
63
  "yara-python",
67
64
  "hauntedhouse==0.1.10",
68
65
  "magika",
69
- "paramiko<4",
70
66
  ]
71
67
 
72
68
  [project.urls]
@@ -78,7 +74,8 @@ test = [
78
74
  "retrying",
79
75
  "pytest-mock",
80
76
  "pyftpdlib",
81
- "pyopenssl==23.3.0",
77
+ "pyopenssl",
78
+ "cryptography",
82
79
  ]
83
80
 
84
81
  [project.scripts]
@@ -1 +0,0 @@
1
- 4.8.1.dev0