assemblyline 4.7.2.1__tar.gz → 4.7.3.dev1__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.2.1/assemblyline.egg-info → assemblyline-4.7.3.dev1}/PKG-INFO +2 -8
  2. assemblyline-4.7.3.dev1/assemblyline/VERSION +1 -0
  3. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/digests.py +11 -16
  4. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/entropy.py +2 -40
  5. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/logformat.py +1 -1
  6. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/net.py +0 -92
  7. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/postprocess.py +0 -288
  8. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/config.py +0 -1
  9. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/submission.py +1 -1
  10. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1/assemblyline.egg-info}/PKG-INFO +2 -8
  11. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline.egg-info/SOURCES.txt +0 -1
  12. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline.egg-info/requires.txt +1 -7
  13. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/setup.py +3 -16
  14. assemblyline-4.7.2.1/assemblyline/VERSION +0 -1
  15. assemblyline-4.7.2.1/assemblyline/common/frequency.pyx +0 -39
  16. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/LICENCE.md +0 -0
  17. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/MANIFEST.in +0 -0
  18. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/README.md +0 -0
  19. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/__init__.py +0 -0
  20. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/cachestore/__init__.py +0 -0
  21. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/__init__.py +0 -0
  22. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/archiving.py +0 -0
  23. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/attack_map.py +0 -0
  24. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/backupmanager.py +0 -0
  25. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/banner.py +0 -0
  26. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/bundling.py +0 -0
  27. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/caching.py +0 -0
  28. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/chunk.py +0 -0
  29. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/classification.py +0 -0
  30. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/classification.yml +0 -0
  31. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/cleanup_filestore.py +0 -0
  32. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/codec.py +0 -0
  33. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/comms.py +0 -0
  34. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/constants.py +0 -0
  35. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/custom.magic +0 -0
  36. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/custom.yara +0 -0
  37. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/dict_utils.py +0 -0
  38. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/dispatcher.py +0 -0
  39. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/exceptions.py +0 -0
  40. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/file.py +0 -0
  41. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/forge.py +0 -0
  42. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/heuristics.py +0 -0
  43. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/hexdump.py +0 -0
  44. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/identify.py +0 -0
  45. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/identify_defaults.py +0 -0
  46. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/importing.py +0 -0
  47. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/iprange.py +0 -0
  48. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/isotime.py +0 -0
  49. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/log.py +0 -0
  50. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/lucene.lark +0 -0
  51. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/memory_zip.py +0 -0
  52. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/metrics.py +0 -0
  53. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/net_static.py +0 -0
  54. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/null.py +0 -0
  55. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/path.py +0 -0
  56. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/random_user.py +0 -0
  57. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/security.py +0 -0
  58. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/signaturing.py +0 -0
  59. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/str_utils.py +0 -0
  60. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/tag_safelist.yml +0 -0
  61. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/tagging.py +0 -0
  62. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/threading.py +0 -0
  63. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/uid.py +0 -0
  64. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/common/version.py +0 -0
  65. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datasource/__init__.py +0 -0
  66. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datasource/al.py +0 -0
  67. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datasource/alert.py +0 -0
  68. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datasource/common.py +0 -0
  69. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datastore/__init__.py +0 -0
  70. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datastore/bulk.py +0 -0
  71. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datastore/collection.py +0 -0
  72. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datastore/exceptions.py +0 -0
  73. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datastore/helper.py +0 -0
  74. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datastore/store.py +0 -0
  75. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datastore/support/__init__.py +0 -0
  76. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datastore/support/build.py +0 -0
  77. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/datastore/support/schemas.py +0 -0
  78. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/filestore/__init__.py +0 -0
  79. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/filestore/transport/__init__.py +0 -0
  80. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/filestore/transport/azure.py +0 -0
  81. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/filestore/transport/base.py +0 -0
  82. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/filestore/transport/ftp.py +0 -0
  83. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/filestore/transport/http.py +0 -0
  84. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/filestore/transport/local.py +0 -0
  85. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/filestore/transport/s3.py +0 -0
  86. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/filestore/transport/sftp.py +0 -0
  87. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/__init__.py +0 -0
  88. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/base.py +0 -0
  89. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/common.py +0 -0
  90. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/__init__.py +0 -0
  91. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/alert.py +0 -0
  92. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/alerter_heartbeat.py +0 -0
  93. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/archive_heartbeat.py +0 -0
  94. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/changes.py +0 -0
  95. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/dispatcher_heartbeat.py +0 -0
  96. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/dispatching.py +0 -0
  97. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/elastic_heartbeat.py +0 -0
  98. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/expiry_heartbeat.py +0 -0
  99. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/ingest_heartbeat.py +0 -0
  100. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/metrics.py +0 -0
  101. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/retrohunt_heartbeat.py +0 -0
  102. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/scaler_heartbeat.py +0 -0
  103. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/scaler_status_heartbeat.py +0 -0
  104. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/service_heartbeat.py +0 -0
  105. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/service_timing_heartbeat.py +0 -0
  106. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/submission.py +0 -0
  107. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/task.py +0 -0
  108. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/messages/vacuum_heartbeat.py +0 -0
  109. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/__init__.py +0 -0
  110. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/actions.py +0 -0
  111. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/alert.py +0 -0
  112. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/apikey.py +0 -0
  113. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/badlist.py +0 -0
  114. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/cached_file.py +0 -0
  115. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/emptyresult.py +0 -0
  116. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/error.py +0 -0
  117. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/file.py +0 -0
  118. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/filescore.py +0 -0
  119. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/heuristic.py +0 -0
  120. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/__init__.py +0 -0
  121. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/file.py +0 -0
  122. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/filetypes/__init__.py +0 -0
  123. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/filetypes/pe.py +0 -0
  124. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/ontology.py +0 -0
  125. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/results/__init__.py +0 -0
  126. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/results/antivirus.py +0 -0
  127. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/results/http.py +0 -0
  128. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/results/malware_config.py +0 -0
  129. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/results/network.py +0 -0
  130. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/results/process.py +0 -0
  131. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/results/sandbox.py +0 -0
  132. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/ontology/results/signature.py +0 -0
  133. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/replay.py +0 -0
  134. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/result.py +0 -0
  135. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/retrohunt.py +0 -0
  136. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/safelist.py +0 -0
  137. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/service.py +0 -0
  138. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/service_delta.py +0 -0
  139. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/signature.py +0 -0
  140. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/statistics.py +0 -0
  141. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/submission_summary.py +0 -0
  142. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/submission_tree.py +0 -0
  143. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/tagging.py +0 -0
  144. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/user.py +0 -0
  145. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/user_favorites.py +0 -0
  146. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/user_settings.py +0 -0
  147. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/models/workflow.py +0 -0
  148. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/random_data/__init__.py +0 -0
  149. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/random_data/create_test_data.py +0 -0
  150. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/random_data/sample_rules.yar +0 -0
  151. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/random_data/sample_suricata.rules +0 -0
  152. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/odm/randomizer.py +0 -0
  153. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/py.typed +0 -0
  154. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/__init__.py +0 -0
  155. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/__init__.py +0 -0
  156. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/cache.py +0 -0
  157. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/counters.py +0 -0
  158. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/daily_quota_tracker.py +0 -0
  159. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/events.py +0 -0
  160. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/exporting_counter.py +0 -0
  161. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/hash.py +0 -0
  162. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/lock.py +0 -0
  163. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/queues/__init__.py +0 -0
  164. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/queues/comms.py +0 -0
  165. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/queues/multi.py +0 -0
  166. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/queues/named.py +0 -0
  167. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/queues/priority.py +0 -0
  168. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/set.py +0 -0
  169. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/remote/datatypes/user_quota_tracker.py +0 -0
  170. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/run/__init__.py +0 -0
  171. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/run/cli.py +0 -0
  172. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/run/pubsub_reader.py +0 -0
  173. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/run/suricata_importer.py +0 -0
  174. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline/run/yara_importer.py +0 -0
  175. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline.egg-info/dependency_links.txt +0 -0
  176. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline.egg-info/entry_points.txt +0 -0
  177. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/assemblyline.egg-info/top_level.txt +0 -0
  178. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/pyproject.toml +0 -0
  179. {assemblyline-4.7.2.1 → assemblyline-4.7.3.dev1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline
3
- Version: 4.7.2.1
3
+ Version: 4.7.3.dev1
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
@@ -24,25 +24,20 @@ Requires-Dist: urllib3>=2.6.0
24
24
  Requires-Dist: python-baseconv
25
25
  Requires-Dist: boto3
26
26
  Requires-Dist: pysftp
27
- Requires-Dist: netifaces
28
- Requires-Dist: pyroute2.core
29
27
  Requires-Dist: redis
30
28
  Requires-Dist: requests[socks]
31
29
  Requires-Dist: elasticsearch<9.0.0,>=8.0.0
32
30
  Requires-Dist: python-datemath!=3.0.2
33
31
  Requires-Dist: packaging
34
- Requires-Dist: tabulate
35
32
  Requires-Dist: PyYAML
36
- Requires-Dist: easydict
37
33
  Requires-Dist: bcrypt
38
34
  Requires-Dist: cart
39
- Requires-Dist: cccs-ssdeep
35
+ Requires-Dist: assemblyline-toolbox==0.3.0
40
36
  Requires-Dist: python-magic
41
37
  Requires-Dist: pytz
42
38
  Requires-Dist: apscheduler
43
39
  Requires-Dist: websocket_client<1.0.0
44
40
  Requires-Dist: elastic-apm[flask]>=6.13.0
45
- Requires-Dist: cython
46
41
  Requires-Dist: docker
47
42
  Requires-Dist: kubernetes>18
48
43
  Requires-Dist: notifications-python-client
@@ -52,7 +47,6 @@ Requires-Dist: azure-identity
52
47
  Requires-Dist: msoffcrypto-tool
53
48
  Requires-Dist: chardet<6
54
49
  Requires-Dist: yara-python
55
- Requires-Dist: python-tlsh
56
50
  Requires-Dist: hauntedhouse==0.1.10
57
51
  Requires-Dist: magika
58
52
  Requires-Dist: paramiko<4
@@ -0,0 +1 @@
1
+ 4.7.3.dev1
@@ -1,10 +1,8 @@
1
1
  import hashlib
2
- import ssdeep
3
- import tlsh
4
2
  from typing import Dict
5
3
 
6
4
  from assemblyline.common import entropy
7
-
5
+ from assemblyline_toolbox import SsdeepHasher, TlshHasher
8
6
  DEFAULT_BLOCKSIZE = 65536
9
7
 
10
8
 
@@ -14,10 +12,7 @@ def get_digests_for_file(path: str, blocksize: int = DEFAULT_BLOCKSIZE, calculat
14
12
  """ Generate digests for file reading only 'blocksize bytes at a time."""
15
13
  bc = None
16
14
  if calculate_entropy:
17
- try:
18
- bc = entropy.BufferedCalculator()
19
- except Exception:
20
- pass
15
+ bc = entropy.BufferedCalculator()
21
16
 
22
17
  result = {}
23
18
 
@@ -25,7 +20,9 @@ def get_digests_for_file(path: str, blocksize: int = DEFAULT_BLOCKSIZE, calculat
25
20
  sha1 = hashlib.sha1()
26
21
  sha256 = hashlib.sha256()
27
22
  if not skip_fuzzy_hashes:
28
- th = tlsh.Tlsh()
23
+ th = TlshHasher()
24
+ ssdeep = SsdeepHasher()
25
+
29
26
  size = 0
30
27
 
31
28
  with open(path, 'rb') as f:
@@ -37,12 +34,13 @@ def get_digests_for_file(path: str, blocksize: int = DEFAULT_BLOCKSIZE, calculat
37
34
 
38
35
  while length > 0:
39
36
  if bc is not None:
40
- bc.update(data, length)
37
+ bc.update(data)
41
38
  md5.update(data)
42
39
  sha1.update(data)
43
40
  sha256.update(data)
44
41
  if not skip_fuzzy_hashes:
45
42
  th.update(data)
43
+ ssdeep.update(data)
46
44
  size += length
47
45
 
48
46
  data = f.read(blocksize)
@@ -58,13 +56,10 @@ def get_digests_for_file(path: str, blocksize: int = DEFAULT_BLOCKSIZE, calculat
58
56
  result['size'] = size
59
57
 
60
58
  if not skip_fuzzy_hashes:
61
- result["ssdeep"] = ssdeep.hash_from_file(path)
62
- # Try to finalise the TLSH Hash and add it to the results
63
- try:
64
- th.final()
65
- result['tlsh'] = th.hexdigest()
66
- except Exception:
67
- pass
59
+ result["ssdeep"] = ssdeep.digest()
60
+ thash = th.digest()
61
+ if thash:
62
+ result['tlsh'] = thash
68
63
 
69
64
  return result
70
65
 
@@ -1,9 +1,8 @@
1
1
  import io
2
+ from typing import Tuple, List, BinaryIO
2
3
 
3
- from math import log
4
- from typing import Tuple, List, BinaryIO, AnyStr
4
+ from assemblyline_toolbox import BufferedCalculator
5
5
 
6
- frequency = None
7
6
 
8
7
  # The minimum partition size should be 256 bytes as the keyspace
9
8
  # for a char is 256 bytes
@@ -52,40 +51,3 @@ def calculate_partition_entropy(fin: BinaryIO, num_partitions: int = 50) -> Tupl
52
51
  full_entropy_calculator.update(partition)
53
52
  return full_entropy_calculator.entropy(), p_entropies
54
53
 
55
-
56
- class BufferedCalculator(object):
57
- def __init__(self):
58
- global frequency
59
- import pyximport
60
- pyximport.install()
61
- # noinspection PyUnresolvedReferences
62
- from assemblyline.common import frequency
63
-
64
- self.c = {}
65
- self.length = 0
66
-
67
- def entropy(self) -> float:
68
- if self.length == 0:
69
- return 0.0
70
-
71
- length = float(self.length)
72
-
73
- entropy = 0.0
74
- for v in self.c.values():
75
- prob = float(v) / length
76
- entropy += prob * log(prob, 2)
77
-
78
- entropy *= -1
79
-
80
- # Make sure we don't return -0.0.
81
- if not entropy:
82
- entropy = 0.0
83
-
84
- return entropy
85
-
86
- def update(self, data: AnyStr, length: int = 0):
87
- if not length:
88
- length = len(data)
89
-
90
- self.length += length
91
- self.c = frequency.counts(data, length, self.c)
@@ -10,7 +10,7 @@ except Exception: # pylint:disable=W0702
10
10
  ip = 'x.x.x.x'
11
11
  # noinspection PyBroadException
12
12
  try:
13
- from assemblyline.common.net import get_hostip
13
+ from assemblyline_toolbox import get_hostip
14
14
  ip = get_hostip()
15
15
  except Exception: # pylint:disable=W0702
16
16
  pass
@@ -1,14 +1,8 @@
1
1
  from ipaddress import ip_address, IPv4Network
2
2
  import socket
3
- import subprocess
4
- import sys
5
3
  import os
6
- import uuid
7
4
  import functools
8
- from random import randint
9
5
 
10
- import netifaces as nif
11
- import pr2modules.iproute as iproute
12
6
 
13
7
  from assemblyline.common.net_static import TLDS_ALPHA_BY_DOMAIN, TLDS_SPECIAL_BY_DOMAIN
14
8
  SYSTEM_LOCAL_TLD = os.getenv('SYSTEM_LOCAL_TLD', '')
@@ -135,89 +129,3 @@ def is_valid_email(email: str) -> bool:
135
129
 
136
130
  def get_hostname() -> str:
137
131
  return socket.gethostname()
138
-
139
-
140
- def get_mac_address() -> str:
141
- return "".join(["{0:02x}".format((uuid.getnode() >> i) & 0xff) for i in range(0, 8 * 6, 8)][::-1]).upper()
142
-
143
-
144
- def get_mac_for_ip(ip: str) -> str:
145
- for i in nif.interfaces():
146
- addrs = nif.ifaddresses(i)
147
- try:
148
- if_mac = addrs[nif.AF_LINK][0]['addr']
149
- if_ip = addrs[nif.AF_INET][0]['addr']
150
- except (IndexError, KeyError):
151
- if_mac = if_ip = None
152
-
153
- if if_mac and if_ip == ip:
154
- return if_mac.replace(':', '').upper()
155
-
156
- # If we couldn't match on IP just use the old uuid based approach.
157
- return get_mac_address()
158
-
159
-
160
- def get_random_mac(separator: str = ':') -> str:
161
- oui = [0x52, 0x54, 0x00]
162
- mac = oui + [randint(0, 0xff), randint(0, 0xff), randint(0, 0xff)]
163
- return separator.join("%02x" % x for x in mac).upper()
164
-
165
-
166
- def get_route_to(dst: str) -> str:
167
- ret_val = None
168
- try:
169
- with iproute.IPRoute() as ipr:
170
- for k, v in ipr.route('get', dst=dst)[0]['attrs']:
171
- if k == "RTA_PREFSRC":
172
- ret_val = v
173
- break
174
- except (ImportError, KeyError, ValueError):
175
- if sys.platform.startswith('linux'):
176
- cmdline = 'ip route get to {dst} | sed -e "s/.*src //" | head -n 1 | sed -e "s/ .*//"'.format(dst=dst)
177
- p = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
178
- stdout, stderr = p.communicate()
179
- if stdout:
180
- ret_val = stdout.strip()
181
- finally:
182
- return ret_val
183
-
184
-
185
- def get_hostip() -> str:
186
- ip = None
187
- try:
188
- from assemblyline.common import forge
189
- config = forge.get_config()
190
- ip = get_route_to(config.datastore.hosts[0])
191
- except Exception:
192
- pass
193
-
194
- return ip or get_default_gateway_ip()
195
-
196
-
197
- def get_default_gateway_ip() -> str:
198
- # fetch the nic serving up the default gateway
199
- if_default = nif.gateways().get('default')
200
- (ip, nic) = if_default.get(nif.AF_INET)
201
- # Fetch the IP of that nic
202
- try:
203
- ip = nif.ifaddresses(nic).get(nif.AF_INET)[0].get('addr')
204
- except (IndexError, KeyError):
205
- subnet = ip.split(".")[0]
206
- if sys.platform.startswith('win'):
207
- proc = subprocess.Popen('ipconfig', stdout=subprocess.PIPE, text=True)
208
- output = proc.stdout.read()
209
- for line in output.split('\n'):
210
- if "IP Address" in line and ": %s" % subnet in line:
211
- ip = line.split(": ")[1].replace('\r', '')
212
- break
213
-
214
- else:
215
- proc = subprocess.Popen('ifconfig', stdout=subprocess.PIPE, text=True)
216
- output = proc.stdout.read()
217
-
218
- for line in output.split('\n'):
219
- if "addr:%s" % subnet in line:
220
- ip = line.split("addr:")[1].split(" ")[0]
221
- break
222
-
223
- return ip
@@ -570,291 +570,3 @@ class SubmissionFilter:
570
570
  return '<SubmissionFilter ' + str(self.expression) + '>'
571
571
 
572
572
 
573
- def should_resubmit(score: float, shift: float = 500) -> bool:
574
-
575
- # Resubmit:
576
- #
577
- # 100% with a score above 400.
578
- # 10% with a score of 301 to 400.
579
- # 1% with a score of 201 to 300.
580
- # 0.1% with a score of 101 to 200.
581
- # 0.01% with a score of 1 to 100.
582
- # 0.001% with a score of 0.
583
- # 0% with a score below 0.
584
-
585
- if score < 0:
586
- return False
587
-
588
- if score >= shift:
589
- return True
590
-
591
- resubmit_probability = 1.0 / 10 ** ((shift - score) / 100)
592
-
593
- return random.random() < resubmit_probability
594
-
595
-
596
- class ActionWorker:
597
- def __init__(self, cache: bool, config, datastore, redis_persist) -> None:
598
- # Store parameters
599
- self.running_cache_tasks = cache
600
-
601
- # Setup dependencies
602
- self.config = config
603
- self.datastore = datastore
604
-
605
- # Submissions that should have alerts generated
606
- self.alert_queue: NamedQueue[dict] = NamedQueue(ALERT_QUEUE_NAME, redis_persist)
607
- self.unique_queue: PriorityQueue[dict] = PriorityQueue('m-unique', redis_persist)
608
- self.config_hash: Hash[str] = Hash(CONFIG_HASH, redis_persist)
609
-
610
- # Archive manager (late import due to circular import)
611
- from assemblyline.common.archiving import ArchiveManager
612
- self.archive_manager: ArchiveManager = ArchiveManager(self.config, self.datastore)
613
-
614
- # Load actions
615
- self.actions: dict[str, tuple[SubmissionFilter, PostprocessAction]] = {}
616
- self._load_actions()
617
-
618
- # Make sure we load any changed actions
619
- self.reload_watcher: EventWatcher[str] = EventWatcher()
620
- self.reload_watcher.register('system.postprocess', self._load_actions)
621
- self.reload_watcher.start()
622
-
623
- # Create an event loop to handle highly parallel webhook calls
624
- self.loop = asyncio.new_event_loop()
625
- threading.Thread(target=self.loop.run_forever, name='webhook_caller', daemon=True).start()
626
-
627
- def stop(self):
628
- self.reload_watcher.stop()
629
- while self.loop.is_running():
630
- if len(asyncio.all_tasks(self.loop)) == 0:
631
- break
632
- time.sleep(0.1)
633
- self.loop.call_soon_threadsafe(self.loop.stop)
634
-
635
- def _load_actions(self, _path: Optional[str] = None):
636
- # Load the action data from redis
637
- data = self.config_hash.get(POST_PROCESS_CONFIG_KEY)
638
-
639
- # If nothing is in redis, fall back to legacy storage
640
- if data is None:
641
- try:
642
- with CacheStore('system', config=self.config, datastore=self.datastore) as cache:
643
- byte_data = cache.get('postprocess_actions')
644
- if byte_data:
645
- data = byte_data.decode()
646
- except Exception:
647
- logger.warn("Couldn't access system files")
648
-
649
- # Decode data
650
- objects = DEFAULT_POSTPROCESS_ACTIONS
651
- if data:
652
- try:
653
- raw: dict[str, Any] = yaml.safe_load(data)
654
- objects = {
655
- key: PostprocessAction(data)
656
- for key, data in raw.items()
657
- }
658
- except Exception:
659
- logger.exception("Couldn't load stored actions")
660
-
661
- # Check which ones can be active
662
- ready_objects: dict[str, tuple[SubmissionFilter, PostprocessAction]] = {}
663
- for key, action in objects.items():
664
- if not action.enabled:
665
- continue
666
-
667
- try:
668
- fltr = SubmissionFilter(action.filter)
669
- except Exception:
670
- logger.exception("Failed to load submission filter")
671
- continue
672
-
673
- if self.running_cache_tasks and action.run_on_cache:
674
- if not fltr.cache_safe:
675
- logger.error("Tried to apply non-cache-safe filter to cached submissions.")
676
- continue
677
- ready_objects[key] = fltr, action
678
-
679
- if not self.running_cache_tasks and action.run_on_completed:
680
- ready_objects[key] = fltr, action
681
-
682
- # Swap in the new actions
683
- self.actions = ready_objects
684
-
685
- def process_submission(self, submission: Submission, tags: list[dict[str, Any]]) -> bool:
686
- return self.process(submission=submission, tags=tags, score=submission.max_score)
687
-
688
- def process_cachehit(self, submission: SubmissionMessage, score: float) -> bool:
689
- return self.process(submission=submission, tags=None, score=score)
690
-
691
- def process(self, submission: Union[Submission, SubmissionMessage],
692
- score: float, tags: Optional[list[dict[str, Any]]]) -> bool:
693
- """ Handle any postprocessing events for a submission.
694
-
695
- Return bool indicating if a resubmission action has happened.
696
- """
697
- archive_submission = submission.params.auto_archive
698
- use_archive_alternate_dtl = submission.params.use_archive_alternate_dtl
699
- create_alert = False
700
- resubmit: Optional[set[str]] = None
701
- webhooks = []
702
-
703
- for fltr, action in self.actions.values():
704
- if not fltr.test(submission, score=score, tags=tags):
705
- continue
706
-
707
- # Check if we need to launch an alert
708
- create_alert |= action.raise_alert
709
-
710
- # Check if we need to archive the submission
711
- archive_submission |= action.archive_submission
712
- use_archive_alternate_dtl |= action.use_archive_alternate_dtl
713
-
714
- # Accumulate resubmit services
715
- if action.resubmit is not None:
716
- do_resubmit = True
717
- if action.resubmit.random_below is not None:
718
- do_resubmit = should_resubmit(score, action.resubmit.random_below)
719
-
720
- if do_resubmit:
721
- if resubmit is None:
722
- resubmit = set()
723
- resubmit.update(set(action.resubmit.additional_services))
724
-
725
- # Accumulate hooks
726
- if action.webhook is not None and action.webhook not in webhooks:
727
- webhooks.append(action.webhook)
728
-
729
- # Bail early if nothing is to be done
730
- if resubmit is None and not create_alert and not webhooks and not archive_submission:
731
- return False
732
-
733
- # Prepare a message formatted submission
734
- if isinstance(submission, Submission):
735
- submission_msg = from_datastore_submission(submission)
736
- else:
737
- submission_msg = submission
738
-
739
- # Default values
740
- extended_scan = 'skipped'
741
- did_resubmit = False
742
- submit_to = []
743
-
744
- # Check if we resubmit
745
- if resubmit is not None:
746
- selected = set(submission.params.services.selected)
747
- resubmit_to = set(submission.params.services.resubmit) | resubmit
748
-
749
- if not selected.issuperset(resubmit_to):
750
- submit_to = sorted(selected | resubmit_to)
751
- extended_scan = 'submitted'
752
-
753
- # Raise alert
754
- if submission.params.generate_alert and create_alert:
755
- logger.info(f"[{submission_msg.sid} :: {submission_msg.files[0].sha256}] Notifying alerter to "
756
- "create or update an alert")
757
-
758
- self.alert_queue.push(dict(
759
- submission=submission_msg.as_primitives(),
760
- score=score,
761
- extended_scan=extended_scan,
762
- ingest_id=submission_msg.metadata.get('ingest_id', None)
763
- ))
764
-
765
- if submit_to:
766
- logger.info(f"[{submission.sid} :: {submission.files[0].sha256}] Resubmitted for extended analysis")
767
- resubmission = SubmissionMessage(submission_msg.as_primitives())
768
- resubmission.params.psid = submission.sid
769
- resubmission.sid = get_random_id()
770
- resubmission.scan_key = None
771
- resubmission.params.services.resubmit = []
772
- resubmission.params.services.selected = submit_to
773
-
774
- self.unique_queue.push(submission.params.priority, dict(
775
- score=score,
776
- extended_scan=extended_scan,
777
- ingest_id=submission.metadata.get('ingest_id', None),
778
- submission=resubmission.as_primitives(),
779
- ))
780
- did_resubmit = True
781
-
782
- # Archive the submission
783
- if archive_submission:
784
- if self.config.datastore.archive.enabled:
785
- logger.info(f"[{submission_msg.sid} :: {submission_msg.files[0].sha256}] Evaluating if the file can"
786
- " be moved to the malware archive")
787
-
788
- if self.archive_manager.archive_submission(
789
- submission_msg.as_primitives(),
790
- submission_msg.params.delete_after_archive,
791
- use_alternate_dtl=use_archive_alternate_dtl)['action'] == "archive":
792
- logger.info(f"[{submission_msg.sid} :: {submission_msg.files[0].sha256}] Archiver was notified "
793
- "to copy the file in the malware archive")
794
- else:
795
- logger.info(f"[{submission_msg.sid} :: {submission_msg.files[0].sha256}] The file was "
796
- "re-submitted for analysis because it does not meet the minimum service requirement")
797
-
798
- else:
799
- logger.warning(f"[{submission_msg.sid} :: {submission_msg.files[0].sha256}] Trying to archive a "
800
- "submission on a system where archiving is disabled")
801
-
802
- # Trigger webhooks
803
- for hook in webhooks:
804
- asyncio.run_coroutine_threadsafe(self._process_hook(hook, submission, score), self.loop)
805
-
806
- return did_resubmit
807
-
808
- async def _process_hook(self, hook: Webhook, submission: Union[Submission, SubmissionMessage], score: float):
809
- backoff = 0.0
810
- cafile = None
811
-
812
- try:
813
- is_cache = isinstance(submission, SubmissionMessage)
814
- payload = json.dumps({
815
- 'is_cache': is_cache,
816
- 'score': score,
817
- 'submission': submission.as_primitives()
818
- })
819
-
820
- # Setup auth headers and other headers
821
- auth = None
822
- if hook.username and hook.password:
823
- auth = aiohttp.BasicAuth(login=hook.username, password=hook.password)
824
- headers = {head.name: head.value for head in hook.headers}
825
- headers.setdefault('Content-Type', 'application/json')
826
-
827
- # Setup ssl details
828
- sslcontext: Union[None, bool, ssl.SSLContext] = None
829
- if hook.ssl_ignore_errors:
830
- sslcontext = False
831
- if hook.ca_cert:
832
- cafile = tempfile.NamedTemporaryFile()
833
- cafile.write(hook.ca_cert.encode())
834
- cafile.flush()
835
- sslcontext = ssl.create_default_context(cafile=cafile.name)
836
-
837
- # Setup setup http query details
838
- async with aiohttp.ClientSession(auth=auth, headers=headers) as session:
839
- # Loop up to retry limit
840
- for _ in range(hook.retries):
841
- # Wait before retrying, 0 first time, so we can have this before the post
842
- # and not wait after the final failure
843
- await asyncio.sleep(backoff)
844
- backoff = min(RETRY_MAX_BACKOFF, backoff * 2) + 0.1
845
-
846
- # Try posting to the webhook once. If it succeeds return and let
847
- # the withs and finallys finish all the cleanup
848
- try:
849
- resp = await session.request(hook.method, hook.uri, data=payload,
850
- ssl=sslcontext, proxy=hook.proxy)
851
- resp.raise_for_status()
852
- return
853
- except Exception:
854
- logger.exception(f"Error pushing to webhook: {hook}")
855
-
856
- except Exception:
857
- logger.exception(f"Error reading webhook configuration: {hook}")
858
- finally:
859
- if cafile is not None:
860
- cafile.close()
@@ -113,7 +113,6 @@ class LDAP(odm.Model):
113
113
  enabled: bool = odm.Boolean(description="Should LDAP be enabled or not?")
114
114
  ip_filter: List[str] = odm.Optional(odm.List(odm.ValidatedKeyword(CIDR_REGEX)),
115
115
  description="List of CIDRs allowed to access internal authentication")
116
- admin_dn: str = odm.Optional(odm.Keyword(), description="DN of the group or the user who will get admin privileges")
117
116
  bind_user: str = odm.Optional(odm.Keyword(), description="User use to query the LDAP server")
118
117
  bind_pass: str = odm.Optional(odm.Keyword(), description="Password used to query the LDAP server")
119
118
  auto_create: bool = odm.Boolean(description="Auto-create users if they are missing")
@@ -49,7 +49,7 @@ class SubmissionParams(odm.Model):
49
49
  description="Original classification of the submission.")
50
50
  deep_scan = odm.Boolean(default=False, description="Select to perform a deep scan.")
51
51
  description = odm.Text(store=True, copyto="__text__", description="User-supplied information applied to Submission Details.")
52
- filetype_override = odm.Optional(odm.Text(),
52
+ filetype_override = odm.Optional(odm.Keyword(),
53
53
  description="Override the system's identification of the submitted file")
54
54
  generate_alert = odm.Boolean(default=False, description="Generate alert upon completion of analysis.")
55
55
  groups = odm.List(odm.Keyword(), default=[], description="List relevant group or organization related to this scan.")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline
3
- Version: 4.7.2.1
3
+ Version: 4.7.3.dev1
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
@@ -24,25 +24,20 @@ Requires-Dist: urllib3>=2.6.0
24
24
  Requires-Dist: python-baseconv
25
25
  Requires-Dist: boto3
26
26
  Requires-Dist: pysftp
27
- Requires-Dist: netifaces
28
- Requires-Dist: pyroute2.core
29
27
  Requires-Dist: redis
30
28
  Requires-Dist: requests[socks]
31
29
  Requires-Dist: elasticsearch<9.0.0,>=8.0.0
32
30
  Requires-Dist: python-datemath!=3.0.2
33
31
  Requires-Dist: packaging
34
- Requires-Dist: tabulate
35
32
  Requires-Dist: PyYAML
36
- Requires-Dist: easydict
37
33
  Requires-Dist: bcrypt
38
34
  Requires-Dist: cart
39
- Requires-Dist: cccs-ssdeep
35
+ Requires-Dist: assemblyline-toolbox==0.3.0
40
36
  Requires-Dist: python-magic
41
37
  Requires-Dist: pytz
42
38
  Requires-Dist: apscheduler
43
39
  Requires-Dist: websocket_client<1.0.0
44
40
  Requires-Dist: elastic-apm[flask]>=6.13.0
45
- Requires-Dist: cython
46
41
  Requires-Dist: docker
47
42
  Requires-Dist: kubernetes>18
48
43
  Requires-Dist: notifications-python-client
@@ -52,7 +47,6 @@ Requires-Dist: azure-identity
52
47
  Requires-Dist: msoffcrypto-tool
53
48
  Requires-Dist: chardet<6
54
49
  Requires-Dist: yara-python
55
- Requires-Dist: python-tlsh
56
50
  Requires-Dist: hauntedhouse==0.1.10
57
51
  Requires-Dist: magika
58
52
  Requires-Dist: paramiko<4
@@ -37,7 +37,6 @@ assemblyline/common/entropy.py
37
37
  assemblyline/common/exceptions.py
38
38
  assemblyline/common/file.py
39
39
  assemblyline/common/forge.py
40
- assemblyline/common/frequency.pyx
41
40
  assemblyline/common/heuristics.py
42
41
  assemblyline/common/hexdump.py
43
42
  assemblyline/common/identify.py
@@ -5,25 +5,20 @@ urllib3>=2.6.0
5
5
  python-baseconv
6
6
  boto3
7
7
  pysftp
8
- netifaces
9
- pyroute2.core
10
8
  redis
11
9
  requests[socks]
12
10
  elasticsearch<9.0.0,>=8.0.0
13
11
  python-datemath!=3.0.2
14
12
  packaging
15
- tabulate
16
13
  PyYAML
17
- easydict
18
14
  bcrypt
19
15
  cart
20
- cccs-ssdeep
16
+ assemblyline-toolbox==0.3.0
21
17
  python-magic
22
18
  pytz
23
19
  apscheduler
24
20
  websocket_client<1.0.0
25
21
  elastic-apm[flask]>=6.13.0
26
- cython
27
22
  docker
28
23
  kubernetes>18
29
24
  notifications-python-client
@@ -33,7 +28,6 @@ azure-identity
33
28
  msoffcrypto-tool
34
29
  chardet<6
35
30
  yara-python
36
- python-tlsh
37
31
  hauntedhouse==0.1.10
38
32
  magika
39
33
  paramiko<4