assemblyline-core 4.4.1.dev399__tar.gz → 4.4.2.dev5__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.

Potentially problematic release.


This version of assemblyline-core might be problematic. Click here for more details.

Files changed (84) hide show
  1. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/PKG-INFO +4 -4
  2. assemblyline-core-4.4.2.dev5/assemblyline_core/VERSION +1 -0
  3. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +71 -14
  4. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core.egg-info/PKG-INFO +4 -4
  5. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/setup.py +3 -0
  6. assemblyline-core-4.4.1.dev399/assemblyline_core/VERSION +0 -1
  7. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/LICENCE.md +0 -0
  8. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/README.md +0 -0
  9. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/__init__.py +0 -0
  10. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/alerter/__init__.py +0 -0
  11. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/alerter/processing.py +0 -0
  12. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/alerter/run_alerter.py +0 -0
  13. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/archiver/__init__.py +0 -0
  14. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/archiver/run_archiver.py +0 -0
  15. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/badlist_client.py +0 -0
  16. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/dispatching/__init__.py +0 -0
  17. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/dispatching/__main__.py +0 -0
  18. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/dispatching/client.py +0 -0
  19. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/dispatching/dispatcher.py +0 -0
  20. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/dispatching/schedules.py +0 -0
  21. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/dispatching/timeout.py +0 -0
  22. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/expiry/__init__.py +0 -0
  23. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/expiry/run_expiry.py +0 -0
  24. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/ingester/__init__.py +0 -0
  25. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/ingester/__main__.py +0 -0
  26. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/ingester/constants.py +0 -0
  27. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/ingester/ingester.py +0 -0
  28. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/metrics/__init__.py +0 -0
  29. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/metrics/es_metrics.py +0 -0
  30. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
  31. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/metrics/helper.py +0 -0
  32. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/metrics/metrics_server.py +0 -0
  33. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
  34. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
  35. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
  36. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/plumber/__init__.py +0 -0
  37. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/plumber/run_plumber.py +0 -0
  38. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/replay/__init__.py +0 -0
  39. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/replay/client.py +0 -0
  40. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/replay/creator/__init__.py +0 -0
  41. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/replay/creator/run.py +0 -0
  42. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/replay/creator/run_worker.py +0 -0
  43. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/replay/loader/__init__.py +0 -0
  44. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/replay/loader/run.py +0 -0
  45. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/replay/loader/run_worker.py +0 -0
  46. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/replay/replay.py +0 -0
  47. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/safelist_client.py +0 -0
  48. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/scaler/__init__.py +0 -0
  49. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/scaler/collection.py +0 -0
  50. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/scaler/controllers/__init__.py +0 -0
  51. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
  52. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/scaler/controllers/interface.py +0 -0
  53. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/scaler/run_scaler.py +0 -0
  54. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/scaler/scaler_server.py +0 -0
  55. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/server_base.py +0 -0
  56. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/submission_client.py +0 -0
  57. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/tasking_client.py +0 -0
  58. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/updater/__init__.py +0 -0
  59. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/updater/helper.py +0 -0
  60. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/updater/run_updater.py +0 -0
  61. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/vacuum/__init__.py +0 -0
  62. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/vacuum/crawler.py +0 -0
  63. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/vacuum/department_map.py +0 -0
  64. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/vacuum/safelist.py +0 -0
  65. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/vacuum/stream_map.py +0 -0
  66. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/vacuum/worker.py +0 -0
  67. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/workflow/__init__.py +0 -0
  68. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core/workflow/run_workflow.py +0 -0
  69. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core.egg-info/SOURCES.txt +0 -0
  70. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core.egg-info/dependency_links.txt +0 -0
  71. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core.egg-info/requires.txt +0 -0
  72. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/assemblyline_core.egg-info/top_level.txt +0 -0
  73. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/setup.cfg +0 -0
  74. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_alerter.py +0 -0
  75. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_dispatcher.py +0 -0
  76. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_expiry.py +0 -0
  77. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_plumber.py +0 -0
  78. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_replay.py +0 -0
  79. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_scaler.py +0 -0
  80. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_scheduler.py +0 -0
  81. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_simulation.py +0 -0
  82. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_vacuum.py +0 -0
  83. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_worker_ingest.py +0 -0
  84. {assemblyline-core-4.4.1.dev399 → assemblyline-core-4.4.2.dev5}/test/test_worker_submit.py +0 -0
@@ -1,13 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: assemblyline-core
3
- Version: 4.4.1.dev399
3
+ Version: 4.4.2.dev5
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
7
7
  Author-email: assemblyline@cyber.gc.ca
8
8
  License: MIT
9
9
  Keywords: assemblyline automated malware analysis gc canada cse-cst cse cst cyber cccs
10
- Platform: UNKNOWN
11
10
  Classifier: Development Status :: 5 - Production/Stable
12
11
  Classifier: Intended Audience :: Developers
13
12
  Classifier: Topic :: Software Development :: Libraries
@@ -15,6 +14,9 @@ Classifier: License :: OSI Approved :: MIT License
15
14
  Classifier: Programming Language :: Python :: 3.7
16
15
  Classifier: Programming Language :: Python :: 3.8
17
16
  Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
18
20
  Description-Content-Type: text/markdown
19
21
  Provides-Extra: test
20
22
  License-File: LICENCE.md
@@ -56,5 +58,3 @@ Make sure the different services get their latest update files.
56
58
  ##### Workflow
57
59
 
58
60
  Run the different workflows in the system and apply their labels, priority and status.
59
-
60
-
@@ -0,0 +1 @@
1
+ 4.4.2.dev5
@@ -8,12 +8,16 @@ import threading
8
8
  import weakref
9
9
  import urllib3
10
10
 
11
+ from base64 import b64encode
12
+ from cryptography import x509
13
+ from cryptography.hazmat.primitives.asymmetric import rsa
14
+ from cryptography.hazmat.primitives import serialization, hashes
11
15
  from collections import OrderedDict, defaultdict
16
+ from datetime import datetime, timedelta
12
17
  from typing import List, Optional, Tuple
13
18
  from time import sleep
14
19
  from assemblyline.odm.models.config import Selector
15
20
 
16
-
17
21
  from kubernetes import client, config, watch
18
22
  from kubernetes.client import V1Deployment, V1DeploymentSpec, V1PodTemplateSpec, V1DeploymentStrategy, \
19
23
  V1PodSpec, V1PodOS, V1ObjectMeta, V1Volume, V1Container, V1VolumeMount, V1EnvVar, V1ConfigMapVolumeSource, \
@@ -41,6 +45,7 @@ UNPRIVILEGED_SERVICE_ACCOUNT_NAME = os.environ.get('UNPRIVILEGED_SERVICE_ACCOUNT
41
45
  PRIVILEGED_SERVICE_ACCOUNT_NAME = os.environ.get('PRIVILEGED_SERVICE_ACCOUNT_NAME', None)
42
46
 
43
47
  AL_ROOT_CA = os.environ.get('AL_ROOT_CA', '/etc/assemblyline/ssl/al_root-ca.crt')
48
+ AL_ROOT_CA_PK = os.environ.get('AL_ROOT_CA_PK', '/etc/assemblyline/ssl/al_root-ca.key')
44
49
 
45
50
  _exponents = {
46
51
  'ki': 2**10,
@@ -1071,19 +1076,71 @@ class KubernetesController(ControllerInterface):
1071
1076
  List[V1VolumeMount]]:
1072
1077
  volumes, mounts = [], []
1073
1078
  deployment_strategy = V1DeploymentStrategy() # Default strategy should be RollingUpdate
1074
- if container_name == 'updates':
1075
- # Since we reserved containers named 'updates' to be service updaters, they will always 'Recreate'
1076
- deployment_strategy = V1DeploymentStrategy(type='Recreate')
1077
-
1078
- if os.path.exists(AL_ROOT_CA):
1079
- # Specifically for service updaters when internal encryption is enabled on the cluster
1080
- update_cert_dir = "/etc/assemblyline/ssl/al_updates"
1081
- volumes.append(V1Volume(name='updates-cert', secret=V1SecretVolumeSource(secret_name='updates-cert')))
1082
- mounts.append(V1VolumeMount(name="updates-cert", mount_path=update_cert_dir, read_only=True))
1083
-
1084
- # Pass gunicorn settings via env
1085
- spec.container.environment.append({'name': 'CERTFILE', 'value': os.path.join(update_cert_dir, 'tls.crt')})
1086
- spec.container.environment.append({'name': 'KEYFILE', 'value': os.path.join(update_cert_dir, 'tls.key')})
1079
+
1080
+ # Since we reserved containers named 'updates' to be service updaters, they will always 'Recreate'
1081
+ deployment_strategy = V1DeploymentStrategy(type='Recreate')
1082
+
1083
+ if os.path.exists(AL_ROOT_CA):
1084
+ # Specifically for service updaters when internal encryption is enabled on the cluster
1085
+ dep_cert_dir = f"/etc/assemblyline/ssl/al_{container_name}"
1086
+
1087
+ cert_secret_name = f"{deployment_name}-cert"
1088
+ try:
1089
+ self.api.read_namespaced_secret(
1090
+ name=cert_secret_name, namespace=self.namespace, _request_timeout=API_TIMEOUT)
1091
+ except ApiException as error:
1092
+ if error.status != 404:
1093
+ raise
1094
+
1095
+ # Certificate pair doesn't exist for this dependency, create it
1096
+ with open(AL_ROOT_CA, 'rb') as root_ca:
1097
+ rootca_cert = x509.load_pem_x509_certificate(root_ca.read())
1098
+ with open(AL_ROOT_CA_PK, 'rb') as root_ca_pk:
1099
+ rootca_pk = serialization.load_pem_private_key(root_ca_pk.read(), None)
1100
+
1101
+ cert_key = rsa.generate_private_key(65537, 2048)
1102
+ cert = x509.CertificateBuilder(issuer_name=rootca_cert.issuer,
1103
+ subject_name=x509.Name([
1104
+ x509.NameAttribute(x509.OID_COMMON_NAME, deployment_name)
1105
+ ]),
1106
+ not_valid_before=(datetime.utcnow() - timedelta(days=1)),
1107
+ not_valid_after=(datetime.utcnow() + timedelta(days=36500)),
1108
+ public_key=cert_key.public_key(),
1109
+ serial_number=x509.random_serial_number(),
1110
+ ).add_extension(
1111
+ x509.SubjectAlternativeName([x509.DNSName(deployment_name)]),
1112
+ critical=False
1113
+ ).sign(rootca_pk, hashes.SHA256())
1114
+
1115
+ # Push the key pair into namespace as a secret
1116
+ self.api.create_namespaced_secret(namespace=self.namespace,
1117
+ _request_timeout=API_TIMEOUT,
1118
+ body=V1Secret(
1119
+ metadata=V1ObjectMeta(name=cert_secret_name,
1120
+ namespace=self.namespace),
1121
+ type='kubernetes.io/tls',
1122
+ data={
1123
+ 'tls.crt': b64encode(
1124
+ cert.public_bytes(serialization.Encoding.PEM)
1125
+ ).decode(),
1126
+ 'tls.key': b64encode(
1127
+ cert_key.private_bytes(
1128
+ encoding=serialization.Encoding.PEM,
1129
+ format=serialization.PrivateFormat.PKCS8,
1130
+ encryption_algorithm=serialization.NoEncryption()
1131
+ )
1132
+ ).decode()
1133
+ }
1134
+ ))
1135
+
1136
+ finally:
1137
+ volumes.append(V1Volume(name=cert_secret_name,
1138
+ secret=V1SecretVolumeSource(secret_name=cert_secret_name)))
1139
+ mounts.append(V1VolumeMount(name=cert_secret_name, mount_path=dep_cert_dir, read_only=True))
1140
+
1141
+ # Pass gunicorn settings via env
1142
+ spec.container.environment.append({'name': 'CERTFILE', 'value': os.path.join(dep_cert_dir, 'tls.crt')})
1143
+ spec.container.environment.append({'name': 'KEYFILE', 'value': os.path.join(dep_cert_dir, 'tls.key')})
1087
1144
 
1088
1145
  for volume_name, volume_spec in spec.volumes.items():
1089
1146
  mount_name = f'{deployment_name}-{volume_name}'
@@ -1,13 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: assemblyline-core
3
- Version: 4.4.1.dev399
3
+ Version: 4.4.2.dev5
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
7
7
  Author-email: assemblyline@cyber.gc.ca
8
8
  License: MIT
9
9
  Keywords: assemblyline automated malware analysis gc canada cse-cst cse cst cyber cccs
10
- Platform: UNKNOWN
11
10
  Classifier: Development Status :: 5 - Production/Stable
12
11
  Classifier: Intended Audience :: Developers
13
12
  Classifier: Topic :: Software Development :: Libraries
@@ -15,6 +14,9 @@ Classifier: License :: OSI Approved :: MIT License
15
14
  Classifier: Programming Language :: Python :: 3.7
16
15
  Classifier: Programming Language :: Python :: 3.8
17
16
  Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
18
20
  Description-Content-Type: text/markdown
19
21
  Provides-Extra: test
20
22
  License-File: LICENCE.md
@@ -56,5 +58,3 @@ Make sure the different services get their latest update files.
56
58
  ##### Workflow
57
59
 
58
60
  Run the different workflows in the system and apply their labels, priority and status.
59
-
60
-
@@ -33,6 +33,9 @@ setup(
33
33
  'Programming Language :: Python :: 3.7',
34
34
  'Programming Language :: Python :: 3.8',
35
35
  'Programming Language :: Python :: 3.9',
36
+ 'Programming Language :: Python :: 3.10',
37
+ 'Programming Language :: Python :: 3.11',
38
+ 'Programming Language :: Python :: 3.12',
36
39
  ],
37
40
  keywords="assemblyline automated malware analysis gc canada cse-cst cse cst cyber cccs",
38
41
  packages=find_packages(exclude=['deployment/*', 'test/*']),
@@ -1 +0,0 @@
1
- 4.4.1.dev399