sraverify 0.1.0__py3-none-any.whl

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 (261) hide show
  1. sraverify/__init__.py +36 -0
  2. sraverify/checks/__init__.py +56 -0
  3. sraverify/checks/accessanalyzer/SRA_IAA_1.py +188 -0
  4. sraverify/checks/accessanalyzer/SRA_IAA_2.py +162 -0
  5. sraverify/checks/accessanalyzer/SRA_IAA_3.py +260 -0
  6. sraverify/checks/accessanalyzer/SRA_IAA_4.py +207 -0
  7. sraverify/checks/accessanalyzer/__init__.py +3 -0
  8. sraverify/checks/cloudtrail/SRA-CT-1.py +220 -0
  9. sraverify/checks/cloudtrail/SRA-CT-10.py +229 -0
  10. sraverify/checks/cloudtrail/SRA-CT-11.py +242 -0
  11. sraverify/checks/cloudtrail/SRA-CT-12.py +163 -0
  12. sraverify/checks/cloudtrail/SRA-CT-13.py +279 -0
  13. sraverify/checks/cloudtrail/SRA-CT-2.py +218 -0
  14. sraverify/checks/cloudtrail/SRA-CT-3.py +196 -0
  15. sraverify/checks/cloudtrail/SRA-CT-4.py +161 -0
  16. sraverify/checks/cloudtrail/SRA-CT-5.py +200 -0
  17. sraverify/checks/cloudtrail/SRA-CT-6.py +161 -0
  18. sraverify/checks/cloudtrail/SRA-CT-7.py +194 -0
  19. sraverify/checks/cloudtrail/SRA-CT-8.py +226 -0
  20. sraverify/checks/cloudtrail/SRA-CT-9.py +226 -0
  21. sraverify/checks/cloudtrail/__init__.py +3 -0
  22. sraverify/checks/config/SRA-CONFIG-1.py +197 -0
  23. sraverify/checks/config/__init__.py +3 -0
  24. sraverify/core/__init__.py +3 -0
  25. sraverify/core/check.py +227 -0
  26. sraverify/core/logging.py +37 -0
  27. sraverify/core/session.py +47 -0
  28. sraverify/lib/__init__.py +4 -0
  29. sraverify/lib/audit_info.py +37 -0
  30. sraverify/lib/banner.py +42 -0
  31. sraverify/lib/check_loader.py +80 -0
  32. sraverify/lib/org_mgmt_checker.py +86 -0
  33. sraverify/lib/outputs.py +46 -0
  34. sraverify/lib/progress.py +75 -0
  35. sraverify/lib/regions.py +27 -0
  36. sraverify/lib/session.py +23 -0
  37. sraverify/main.py +350 -0
  38. sraverify/services/__init__.py +3 -0
  39. sraverify/services/accessanalyzer/__init__.py +15 -0
  40. sraverify/services/accessanalyzer/base.py +123 -0
  41. sraverify/services/accessanalyzer/checks/__init__.py +3 -0
  42. sraverify/services/accessanalyzer/checks/sra_accessanalyzer_01.py +82 -0
  43. sraverify/services/accessanalyzer/checks/sra_accessanalyzer_02.py +82 -0
  44. sraverify/services/accessanalyzer/checks/sra_accessanalyzer_03.py +103 -0
  45. sraverify/services/accessanalyzer/checks/sra_accessanalyzer_04.py +139 -0
  46. sraverify/services/accessanalyzer/client.py +123 -0
  47. sraverify/services/account/__init__.py +9 -0
  48. sraverify/services/account/base.py +56 -0
  49. sraverify/services/account/checks/__init__.py +1 -0
  50. sraverify/services/account/checks/sra_account_01.py +65 -0
  51. sraverify/services/account/checks/sra_account_02.py +63 -0
  52. sraverify/services/account/checks/sra_account_03.py +63 -0
  53. sraverify/services/account/client.py +51 -0
  54. sraverify/services/auditmanager/__init__.py +10 -0
  55. sraverify/services/auditmanager/base.py +72 -0
  56. sraverify/services/auditmanager/checks/__init__.py +1 -0
  57. sraverify/services/auditmanager/checks/sra_auditmanager_01.py +58 -0
  58. sraverify/services/auditmanager/checks/sra_auditmanager_02.py +80 -0
  59. sraverify/services/auditmanager/client.py +58 -0
  60. sraverify/services/cloudtrail/__init__.py +33 -0
  61. sraverify/services/cloudtrail/base.py +167 -0
  62. sraverify/services/cloudtrail/checks/__init__.py +1 -0
  63. sraverify/services/cloudtrail/checks/sra_cloudtrail_01.py +83 -0
  64. sraverify/services/cloudtrail/checks/sra_cloudtrail_02.py +99 -0
  65. sraverify/services/cloudtrail/checks/sra_cloudtrail_03.py +94 -0
  66. sraverify/services/cloudtrail/checks/sra_cloudtrail_04.py +92 -0
  67. sraverify/services/cloudtrail/checks/sra_cloudtrail_05.py +106 -0
  68. sraverify/services/cloudtrail/checks/sra_cloudtrail_06.py +93 -0
  69. sraverify/services/cloudtrail/checks/sra_cloudtrail_07.py +96 -0
  70. sraverify/services/cloudtrail/checks/sra_cloudtrail_08.py +145 -0
  71. sraverify/services/cloudtrail/checks/sra_cloudtrail_09.py +167 -0
  72. sraverify/services/cloudtrail/checks/sra_cloudtrail_10.py +162 -0
  73. sraverify/services/cloudtrail/checks/sra_cloudtrail_11.py +178 -0
  74. sraverify/services/cloudtrail/checks/sra_cloudtrail_12.py +77 -0
  75. sraverify/services/cloudtrail/checks/sra_cloudtrail_13.py +120 -0
  76. sraverify/services/cloudtrail/client.py +118 -0
  77. sraverify/services/config/__init__.py +25 -0
  78. sraverify/services/config/base.py +249 -0
  79. sraverify/services/config/checks/__init__.py +1 -0
  80. sraverify/services/config/checks/sra_config_01.py +123 -0
  81. sraverify/services/config/checks/sra_config_02.py +156 -0
  82. sraverify/services/config/checks/sra_config_03.py +149 -0
  83. sraverify/services/config/checks/sra_config_04.py +104 -0
  84. sraverify/services/config/checks/sra_config_05.py +104 -0
  85. sraverify/services/config/checks/sra_config_06.py +194 -0
  86. sraverify/services/config/checks/sra_config_07.py +162 -0
  87. sraverify/services/config/checks/sra_config_08.py +185 -0
  88. sraverify/services/config/checks/sra_config_09.py +177 -0
  89. sraverify/services/config/client.py +264 -0
  90. sraverify/services/ec2/__init__.py +8 -0
  91. sraverify/services/ec2/base.py +75 -0
  92. sraverify/services/ec2/checks/__init__.py +1 -0
  93. sraverify/services/ec2/checks/sra_ec2_01.py +83 -0
  94. sraverify/services/ec2/client.py +63 -0
  95. sraverify/services/firewallmanager/__init__.py +23 -0
  96. sraverify/services/firewallmanager/base.py +48 -0
  97. sraverify/services/firewallmanager/checks/__init__.py +1 -0
  98. sraverify/services/firewallmanager/checks/sra_firewallmanager_01.py +75 -0
  99. sraverify/services/firewallmanager/checks/sra_firewallmanager_02.py +57 -0
  100. sraverify/services/firewallmanager/checks/sra_firewallmanager_03.py +51 -0
  101. sraverify/services/firewallmanager/checks/sra_firewallmanager_04.py +51 -0
  102. sraverify/services/firewallmanager/checks/sra_firewallmanager_05.py +51 -0
  103. sraverify/services/firewallmanager/checks/sra_firewallmanager_06.py +51 -0
  104. sraverify/services/firewallmanager/checks/sra_firewallmanager_07.py +51 -0
  105. sraverify/services/firewallmanager/checks/sra_firewallmanager_08.py +61 -0
  106. sraverify/services/firewallmanager/checks/sra_firewallmanager_09.py +61 -0
  107. sraverify/services/firewallmanager/checks/sra_firewallmanager_10.py +71 -0
  108. sraverify/services/firewallmanager/client.py +40 -0
  109. sraverify/services/guardduty/__init__.py +58 -0
  110. sraverify/services/guardduty/base.py +207 -0
  111. sraverify/services/guardduty/checks/__init__.py +3 -0
  112. sraverify/services/guardduty/checks/sra_guardduty_01.py +51 -0
  113. sraverify/services/guardduty/checks/sra_guardduty_02.py +80 -0
  114. sraverify/services/guardduty/checks/sra_guardduty_03.py +77 -0
  115. sraverify/services/guardduty/checks/sra_guardduty_04.py +84 -0
  116. sraverify/services/guardduty/checks/sra_guardduty_05.py +84 -0
  117. sraverify/services/guardduty/checks/sra_guardduty_06.py +84 -0
  118. sraverify/services/guardduty/checks/sra_guardduty_07.py +85 -0
  119. sraverify/services/guardduty/checks/sra_guardduty_08.py +83 -0
  120. sraverify/services/guardduty/checks/sra_guardduty_09.py +84 -0
  121. sraverify/services/guardduty/checks/sra_guardduty_10.py +83 -0
  122. sraverify/services/guardduty/checks/sra_guardduty_11.py +93 -0
  123. sraverify/services/guardduty/checks/sra_guardduty_12.py +83 -0
  124. sraverify/services/guardduty/checks/sra_guardduty_13.py +90 -0
  125. sraverify/services/guardduty/checks/sra_guardduty_14.py +136 -0
  126. sraverify/services/guardduty/checks/sra_guardduty_15.py +94 -0
  127. sraverify/services/guardduty/checks/sra_guardduty_16.py +94 -0
  128. sraverify/services/guardduty/checks/sra_guardduty_17.py +91 -0
  129. sraverify/services/guardduty/checks/sra_guardduty_18.py +91 -0
  130. sraverify/services/guardduty/checks/sra_guardduty_19.py +91 -0
  131. sraverify/services/guardduty/checks/sra_guardduty_20.py +111 -0
  132. sraverify/services/guardduty/checks/sra_guardduty_21.py +112 -0
  133. sraverify/services/guardduty/checks/sra_guardduty_22.py +111 -0
  134. sraverify/services/guardduty/checks/sra_guardduty_23.py +154 -0
  135. sraverify/services/guardduty/checks/sra_guardduty_24.py +111 -0
  136. sraverify/services/guardduty/checks/sra_guardduty_25.py +111 -0
  137. sraverify/services/guardduty/client.py +107 -0
  138. sraverify/services/inspector/__init__.py +29 -0
  139. sraverify/services/inspector/base.py +233 -0
  140. sraverify/services/inspector/checks/__init__.py +3 -0
  141. sraverify/services/inspector/checks/sra_inspector_01.py +69 -0
  142. sraverify/services/inspector/checks/sra_inspector_02.py +68 -0
  143. sraverify/services/inspector/checks/sra_inspector_03.py +68 -0
  144. sraverify/services/inspector/checks/sra_inspector_04.py +70 -0
  145. sraverify/services/inspector/checks/sra_inspector_05.py +69 -0
  146. sraverify/services/inspector/checks/sra_inspector_06.py +115 -0
  147. sraverify/services/inspector/checks/sra_inspector_07.py +109 -0
  148. sraverify/services/inspector/checks/sra_inspector_08.py +69 -0
  149. sraverify/services/inspector/checks/sra_inspector_09.py +69 -0
  150. sraverify/services/inspector/checks/sra_inspector_10.py +69 -0
  151. sraverify/services/inspector/checks/sra_inspector_11.py +69 -0
  152. sraverify/services/inspector/client.py +99 -0
  153. sraverify/services/macie/__init__.py +27 -0
  154. sraverify/services/macie/base.py +271 -0
  155. sraverify/services/macie/checks/__init__.py +1 -0
  156. sraverify/services/macie/checks/sra_macie_01.py +100 -0
  157. sraverify/services/macie/checks/sra_macie_02.py +102 -0
  158. sraverify/services/macie/checks/sra_macie_03.py +152 -0
  159. sraverify/services/macie/checks/sra_macie_04.py +120 -0
  160. sraverify/services/macie/checks/sra_macie_05.py +85 -0
  161. sraverify/services/macie/checks/sra_macie_06.py +124 -0
  162. sraverify/services/macie/checks/sra_macie_07.py +138 -0
  163. sraverify/services/macie/checks/sra_macie_08.py +82 -0
  164. sraverify/services/macie/checks/sra_macie_09.py +103 -0
  165. sraverify/services/macie/checks/sra_macie_10.py +81 -0
  166. sraverify/services/macie/client.py +220 -0
  167. sraverify/services/s3/__init__.py +16 -0
  168. sraverify/services/s3/base.py +69 -0
  169. sraverify/services/s3/checks/__init__.py +1 -0
  170. sraverify/services/s3/checks/sra_s3_01.py +89 -0
  171. sraverify/services/s3/checks/sra_s3_02.py +89 -0
  172. sraverify/services/s3/checks/sra_s3_03.py +88 -0
  173. sraverify/services/s3/checks/sra_s3_04.py +88 -0
  174. sraverify/services/s3/client.py +52 -0
  175. sraverify/services/securityhub/__init__.py +27 -0
  176. sraverify/services/securityhub/base.py +349 -0
  177. sraverify/services/securityhub/checks/__init__.py +1 -0
  178. sraverify/services/securityhub/checks/sra_securityhub_01.py +115 -0
  179. sraverify/services/securityhub/checks/sra_securityhub_02.py +114 -0
  180. sraverify/services/securityhub/checks/sra_securityhub_03.py +136 -0
  181. sraverify/services/securityhub/checks/sra_securityhub_04.py +75 -0
  182. sraverify/services/securityhub/checks/sra_securityhub_05.py +102 -0
  183. sraverify/services/securityhub/checks/sra_securityhub_06.py +113 -0
  184. sraverify/services/securityhub/checks/sra_securityhub_07.py +121 -0
  185. sraverify/services/securityhub/checks/sra_securityhub_08.py +113 -0
  186. sraverify/services/securityhub/checks/sra_securityhub_09.py +100 -0
  187. sraverify/services/securityhub/checks/sra_securityhub_10.py +94 -0
  188. sraverify/services/securityhub/checks/sra_securityhub_11.py +73 -0
  189. sraverify/services/securityhub/client.py +249 -0
  190. sraverify/services/securityincidentresponse/__init__.py +13 -0
  191. sraverify/services/securityincidentresponse/base.py +95 -0
  192. sraverify/services/securityincidentresponse/checks/__init__.py +1 -0
  193. sraverify/services/securityincidentresponse/checks/sra_securityincidentresponse_01.py +77 -0
  194. sraverify/services/securityincidentresponse/checks/sra_securityincidentresponse_02.py +72 -0
  195. sraverify/services/securityincidentresponse/checks/sra_securityincidentresponse_03.py +86 -0
  196. sraverify/services/securityincidentresponse/checks/sra_securityincidentresponse_04.py +117 -0
  197. sraverify/services/securityincidentresponse/checks/sra_securityincidentresponse_05.py +55 -0
  198. sraverify/services/securityincidentresponse/client.py +71 -0
  199. sraverify/services/securitylake/__init__.py +39 -0
  200. sraverify/services/securitylake/base.py +461 -0
  201. sraverify/services/securitylake/checks/__init__.py +1 -0
  202. sraverify/services/securitylake/checks/sra_securitylake_01.py +98 -0
  203. sraverify/services/securitylake/checks/sra_securitylake_02.py +133 -0
  204. sraverify/services/securitylake/checks/sra_securitylake_03.py +116 -0
  205. sraverify/services/securitylake/checks/sra_securitylake_04.py +72 -0
  206. sraverify/services/securitylake/checks/sra_securitylake_05.py +116 -0
  207. sraverify/services/securitylake/checks/sra_securitylake_06.py +104 -0
  208. sraverify/services/securitylake/checks/sra_securitylake_07.py +108 -0
  209. sraverify/services/securitylake/checks/sra_securitylake_08.py +107 -0
  210. sraverify/services/securitylake/checks/sra_securitylake_09.py +107 -0
  211. sraverify/services/securitylake/checks/sra_securitylake_10.py +106 -0
  212. sraverify/services/securitylake/checks/sra_securitylake_11.py +109 -0
  213. sraverify/services/securitylake/checks/sra_securitylake_12.py +108 -0
  214. sraverify/services/securitylake/checks/sra_securitylake_13.py +108 -0
  215. sraverify/services/securitylake/checks/sra_securitylake_14.py +72 -0
  216. sraverify/services/securitylake/checks/sra_securitylake_15.py +120 -0
  217. sraverify/services/securitylake/checks/sra_securitylake_16.py +104 -0
  218. sraverify/services/securitylake/checks/sra_securitylake_17.py +103 -0
  219. sraverify/services/securitylake/client.py +247 -0
  220. sraverify/services/shield/__init__.py +33 -0
  221. sraverify/services/shield/base.py +199 -0
  222. sraverify/services/shield/checks/__init__.py +1 -0
  223. sraverify/services/shield/checks/sra_shield_01.py +68 -0
  224. sraverify/services/shield/checks/sra_shield_02.py +77 -0
  225. sraverify/services/shield/checks/sra_shield_03.py +84 -0
  226. sraverify/services/shield/checks/sra_shield_04.py +84 -0
  227. sraverify/services/shield/checks/sra_shield_05.py +84 -0
  228. sraverify/services/shield/checks/sra_shield_06.py +84 -0
  229. sraverify/services/shield/checks/sra_shield_07.py +84 -0
  230. sraverify/services/shield/checks/sra_shield_08.py +69 -0
  231. sraverify/services/shield/checks/sra_shield_09.py +86 -0
  232. sraverify/services/shield/checks/sra_shield_10.py +100 -0
  233. sraverify/services/shield/checks/sra_shield_11.py +71 -0
  234. sraverify/services/shield/checks/sra_shield_12.py +130 -0
  235. sraverify/services/shield/checks/sra_shield_13.py +112 -0
  236. sraverify/services/shield/checks/sra_shield_14.py +111 -0
  237. sraverify/services/shield/client.py +214 -0
  238. sraverify/services/waf/__init__.py +21 -0
  239. sraverify/services/waf/base.py +100 -0
  240. sraverify/services/waf/checks/__init__.py +1 -0
  241. sraverify/services/waf/checks/sra_waf_01.py +63 -0
  242. sraverify/services/waf/checks/sra_waf_02.py +82 -0
  243. sraverify/services/waf/checks/sra_waf_03.py +123 -0
  244. sraverify/services/waf/checks/sra_waf_04.py +94 -0
  245. sraverify/services/waf/checks/sra_waf_05.py +94 -0
  246. sraverify/services/waf/checks/sra_waf_06.py +91 -0
  247. sraverify/services/waf/checks/sra_waf_07.py +94 -0
  248. sraverify/services/waf/checks/sra_waf_08.py +66 -0
  249. sraverify/services/waf/checks/sra_waf_09.py +95 -0
  250. sraverify/services/waf/client.py +109 -0
  251. sraverify/utils/__init__.py +3 -0
  252. sraverify/utils/banner.py +65 -0
  253. sraverify/utils/outputs.py +57 -0
  254. sraverify/utils/progress.py +97 -0
  255. sraverify-0.1.0.dist-info/LICENSE +175 -0
  256. sraverify-0.1.0.dist-info/METADATA +516 -0
  257. sraverify-0.1.0.dist-info/NOTICE +1 -0
  258. sraverify-0.1.0.dist-info/RECORD +261 -0
  259. sraverify-0.1.0.dist-info/WHEEL +5 -0
  260. sraverify-0.1.0.dist-info/entry_points.txt +2 -0
  261. sraverify-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,84 @@
1
+ """
2
+ Check if GuardDuty has VPC flow logs enabled as a log source.
3
+ """
4
+ from typing import Dict, List, Any
5
+ from sraverify.services.guardduty.base import GuardDutyCheck
6
+
7
+
8
+ class SRA_GUARDDUTY_05(GuardDutyCheck):
9
+ """Check if GuardDuty has VPC flow logs enabled as a log source."""
10
+
11
+ def __init__(self):
12
+ """Initialize GuardDuty VPC flow logs check."""
13
+ super().__init__()
14
+ self.check_id = "SRA-GUARDDUTY-05"
15
+ self.check_name = "GuardDuty VPC flow logs enabled"
16
+ self.description = ("This check verifies that GuardDuty has VPC flow logs as one of the log sources, "
17
+ "enabled.GuardDuty analyzes your VPC flow logs from Amazon EC2 instances within your account. "
18
+ "It consumes VPC flow log events directly from the VPC Flow Logs feature through an independent "
19
+ "and duplicated stream of flow logs.")
20
+ self.severity = "MEDIUM"
21
+ self.check_logic = "Get detector details in each Region. Check if VPC Flow logs are enabled in the Features array."
22
+
23
+ def execute(self) -> List[Dict[str, Any]]:
24
+ """
25
+ Execute the check.
26
+
27
+ Returns:
28
+ List of findings
29
+ """
30
+ findings = []
31
+ # Check all regions
32
+ for region in self.regions:
33
+ detector_id = self.get_detector_id(region)
34
+
35
+ # Handle regions where we can't access GuardDuty
36
+ if not detector_id:
37
+ findings.append(self.create_finding(
38
+ status="ERROR",
39
+ region=region,
40
+ resource_id=f"guardduty:{region}",
41
+ actual_value="Unable to access GuardDuty in this region",
42
+ remediation="Check permissions or if GuardDuty is supported in this region"
43
+ ))
44
+ continue
45
+
46
+ # Get detector details
47
+ detector_details = self.get_detector_details(region)
48
+
49
+ if detector_details:
50
+ # Check if VPC flow logs are enabled in the Features array
51
+ vpc_logs_enabled = False
52
+ features = detector_details.get('Features', [])
53
+
54
+ for feature in features:
55
+ if feature.get('Name') == 'FLOW_LOGS' and feature.get('Status') == 'ENABLED':
56
+ vpc_logs_enabled = True
57
+ break
58
+
59
+ if vpc_logs_enabled:
60
+ findings.append(self.create_finding(
61
+ status="PASS",
62
+ region=region,
63
+ resource_id=f"guardduty:{region}:{detector_id}",
64
+ actual_value="VPC flow logs are enabled as a data source",
65
+ remediation=""
66
+ ))
67
+ else:
68
+ findings.append(self.create_finding(
69
+ status="FAIL",
70
+ region=region,
71
+ resource_id=f"guardduty:{region}:{detector_id}",
72
+ actual_value="VPC flow logs are not enabled as a data source",
73
+ remediation=f"Enable VPC flow logs as a data source for GuardDuty in {region}"
74
+ ))
75
+ else:
76
+ findings.append(self.create_finding(
77
+ status="FAIL",
78
+ region=region,
79
+ resource_id=f"guardduty:{region}:{detector_id}",
80
+ actual_value="Unable to retrieve detector details",
81
+ remediation="Check GuardDuty permissions and configuration"
82
+ ))
83
+
84
+ return findings
@@ -0,0 +1,84 @@
1
+ """
2
+ Check if GuardDuty has S3 protection enabled.
3
+ """
4
+ from typing import Dict, List, Any
5
+ from sraverify.services.guardduty.base import GuardDutyCheck
6
+
7
+
8
+ class SRA_GUARDDUTY_06(GuardDutyCheck):
9
+ """Check if GuardDuty has S3 protection enabled."""
10
+
11
+ def __init__(self):
12
+ """Initialize GuardDuty S3 protection check."""
13
+ super().__init__()
14
+ self.check_id = "SRA-GUARDDUTY-06"
15
+ self.check_name = "GuardDuty S3 protection enabled"
16
+ self.description = ("This check verifies that GuardDuty has S3 protection enabled. "
17
+ "GuardDuty provides enhanced visibility through S3 protection. "
18
+ "GuardDuty monitors both AWS CloudTrail management events and AWS CloudTrail "
19
+ "S3 data events to identify potential threats in your Amazon S3 resources.")
20
+ self.severity = "HIGH"
21
+ self.check_logic = "Get detector details in each Region. Check if S3 protection is enabled in the Features array."
22
+
23
+ def execute(self) -> List[Dict[str, Any]]:
24
+ """
25
+ Execute the check.
26
+
27
+ Returns:
28
+ List of findings
29
+ """
30
+ findings = []
31
+ # Check all regions
32
+ for region in self.regions:
33
+ detector_id = self.get_detector_id(region)
34
+
35
+ # Handle regions where we can't access GuardDuty
36
+ if not detector_id:
37
+ findings.append(self.create_finding(
38
+ status="ERROR",
39
+ region=region,
40
+ resource_id=f"guardduty:{region}",
41
+ actual_value="Unable to access GuardDuty in this region",
42
+ remediation="Check permissions or if GuardDuty is supported in this region"
43
+ ))
44
+ continue
45
+
46
+ # Get detector details
47
+ detector_details = self.get_detector_details(region)
48
+
49
+ if detector_details:
50
+ # Check if S3 protection is enabled in the Features array
51
+ s3_protection_enabled = False
52
+ features = detector_details.get('Features', [])
53
+
54
+ for feature in features:
55
+ if feature.get('Name') == 'S3_DATA_EVENTS' and feature.get('Status') == 'ENABLED':
56
+ s3_protection_enabled = True
57
+ break
58
+
59
+ if s3_protection_enabled:
60
+ findings.append(self.create_finding(
61
+ status="PASS",
62
+ region=region,
63
+ resource_id=f"guardduty:{region}:{detector_id}",
64
+ actual_value="S3 protection is enabled",
65
+ remediation=""
66
+ ))
67
+ else:
68
+ findings.append(self.create_finding(
69
+ status="FAIL",
70
+ region=region,
71
+ resource_id=f"guardduty:{region}:{detector_id}",
72
+ actual_value="S3 protection is not enabled",
73
+ remediation=f"Enable S3 protection for GuardDuty in {region} to monitor CloudTrail management and S3 data events"
74
+ ))
75
+ else:
76
+ findings.append(self.create_finding(
77
+ status="FAIL",
78
+ region=region,
79
+ resource_id=f"guardduty:{region}:{detector_id}",
80
+ actual_value="Unable to retrieve detector details",
81
+ remediation="Check GuardDuty permissions and configuration"
82
+ ))
83
+
84
+ return findings
@@ -0,0 +1,85 @@
1
+ """
2
+ Check if GuardDuty has EKS protection enabled.
3
+ """
4
+ from typing import Dict, List, Any
5
+ from sraverify.services.guardduty.base import GuardDutyCheck
6
+
7
+
8
+ class SRA_GUARDDUTY_07(GuardDutyCheck):
9
+ """Check if GuardDuty has EKS protection enabled."""
10
+
11
+ def __init__(self):
12
+ """Initialize GuardDuty EKS protection check."""
13
+ super().__init__()
14
+ self.check_id = "SRA-GUARDDUTY-07"
15
+ self.check_name = "GuardDuty EKS protection enabled"
16
+ self.description = ("This check verifies that GuardDuty has EKS protection enabled. "
17
+ "EKS Audit Log Monitoring helps you detect potentially suspicious activities "
18
+ "in your EKS clusters within Amazon Elastic Kubernetes Service. It consumes "
19
+ "Kubernetes audit log events directly from the Amazon EKS control plane logging "
20
+ "feature through an independent and duplicated stream of audit logs.")
21
+ self.severity = "HIGH"
22
+ self.check_logic = "Get detector details in each Region. Check if EKS protection is enabled in the Features array."
23
+
24
+ def execute(self) -> List[Dict[str, Any]]:
25
+ """
26
+ Execute the check.
27
+
28
+ Returns:
29
+ List of findings
30
+ """
31
+ findings = []
32
+ # Check all regions
33
+ for region in self.regions:
34
+ detector_id = self.get_detector_id(region)
35
+
36
+ # Handle regions where we can't access GuardDuty
37
+ if not detector_id:
38
+ findings.append(self.create_finding(
39
+ status="ERROR",
40
+ region=region,
41
+ resource_id=f"guardduty:{region}",
42
+ actual_value="Unable to access GuardDuty in this region",
43
+ remediation="Check permissions or if GuardDuty is supported in this region"
44
+ ))
45
+ continue
46
+
47
+ # Get detector details
48
+ detector_details = self.get_detector_details(region)
49
+
50
+ if detector_details:
51
+ # Check if EKS protection is enabled in the Features array
52
+ eks_protection_enabled = False
53
+ features = detector_details.get('Features', [])
54
+
55
+ for feature in features:
56
+ if feature.get('Name') == 'EKS_AUDIT_LOGS' and feature.get('Status') == 'ENABLED':
57
+ eks_protection_enabled = True
58
+ break
59
+
60
+ if eks_protection_enabled:
61
+ findings.append(self.create_finding(
62
+ status="PASS",
63
+ region=region,
64
+ resource_id=f"guardduty:{region}:{detector_id}",
65
+ actual_value="EKS protection is enabled",
66
+ remediation=""
67
+ ))
68
+ else:
69
+ findings.append(self.create_finding(
70
+ status="FAIL",
71
+ region=region,
72
+ resource_id=f"guardduty:{region}:{detector_id}",
73
+ actual_value="EKS protection is not enabled",
74
+ remediation=f"Enable EKS protection for GuardDuty in {region} to monitor Kubernetes audit logs for suspicious activities"
75
+ ))
76
+ else:
77
+ findings.append(self.create_finding(
78
+ status="FAIL",
79
+ region=region,
80
+ resource_id=f"guardduty:{region}:{detector_id}",
81
+ actual_value="Unable to retrieve detector details",
82
+ remediation="Check GuardDuty permissions and configuration"
83
+ ))
84
+
85
+ return findings
@@ -0,0 +1,83 @@
1
+ """
2
+ Check if GuardDuty has CloudTrail event and management logs enabled.
3
+ """
4
+ from typing import Dict, List, Any
5
+ from sraverify.services.guardduty.base import GuardDutyCheck
6
+
7
+
8
+ class SRA_GUARDDUTY_08(GuardDutyCheck):
9
+ """Check if GuardDuty has CloudTrail event and management logs enabled."""
10
+
11
+ def __init__(self):
12
+ """Initialize GuardDuty CloudTrail logs check."""
13
+ super().__init__()
14
+ self.check_id = "SRA-GUARDDUTY-08"
15
+ self.check_name = "GuardDuty CloudTrail logs enabled"
16
+ self.description = ("This check verifies that GuardDuty has CloudTrail event and management logs as one of the feature, enabled. "
17
+ "GuardDuty consumes CloudTrail management events directly from CloudTrail through an independent and "
18
+ "duplicated stream of events and analyzes the CloudTrail event logs.")
19
+ self.severity = "HIGH"
20
+ self.check_logic = "Get detector details in each Region. Check if CloudTrail logs are enabled in the Features array."
21
+
22
+ def execute(self) -> List[Dict[str, Any]]:
23
+ """
24
+ Execute the check.
25
+
26
+ Returns:
27
+ List of findings
28
+ """
29
+ findings = []
30
+ # Check all regions
31
+ for region in self.regions:
32
+ detector_id = self.get_detector_id(region)
33
+
34
+ # Handle regions where we can't access GuardDuty
35
+ if not detector_id:
36
+ findings.append(self.create_finding(
37
+ status="ERROR",
38
+ region=region,
39
+ resource_id=f"guardduty:{region}",
40
+ actual_value="Unable to access GuardDuty in this region",
41
+ remediation="Check permissions or if GuardDuty is supported in this region"
42
+ ))
43
+ continue
44
+
45
+ # Get detector details
46
+ detector_details = self.get_detector_details(region)
47
+
48
+ if detector_details:
49
+ # Check if CloudTrail logs are enabled in the Features array
50
+ cloudtrail_enabled = False
51
+ features = detector_details.get('Features', [])
52
+
53
+ for feature in features:
54
+ if feature.get('Name') == 'CLOUD_TRAIL' and feature.get('Status') == 'ENABLED':
55
+ cloudtrail_enabled = True
56
+ break
57
+
58
+ if cloudtrail_enabled:
59
+ findings.append(self.create_finding(
60
+ status="PASS",
61
+ region=region,
62
+ resource_id=f"guardduty:{region}:{detector_id}",
63
+ actual_value="CloudTrail event and management logs are enabled",
64
+ remediation=""
65
+ ))
66
+ else:
67
+ findings.append(self.create_finding(
68
+ status="FAIL",
69
+ region=region,
70
+ resource_id=f"guardduty:{region}:{detector_id}",
71
+ actual_value="CloudTrail event and management logs are not enabled",
72
+ remediation=f"Enable CloudTrail event and management logs for GuardDuty in {region} to monitor for suspicious API activity"
73
+ ))
74
+ else:
75
+ findings.append(self.create_finding(
76
+ status="FAIL",
77
+ region=region,
78
+ resource_id=f"guardduty:{region}:{detector_id}",
79
+ actual_value="Unable to retrieve detector details",
80
+ remediation="Check GuardDuty permissions and configuration"
81
+ ))
82
+
83
+ return findings
@@ -0,0 +1,84 @@
1
+ """
2
+ Check if GuardDuty has malware protection for EBS enabled.
3
+ """
4
+ from typing import Dict, List, Any
5
+ from sraverify.services.guardduty.base import GuardDutyCheck
6
+
7
+
8
+ class SRA_GUARDDUTY_09(GuardDutyCheck):
9
+ """Check if GuardDuty has malware protection for EBS enabled."""
10
+
11
+ def __init__(self):
12
+ """Initialize GuardDuty malware protection for EBS check."""
13
+ super().__init__()
14
+ self.check_id = "SRA-GUARDDUTY-09"
15
+ self.check_name = "GuardDuty malware protection for EBS enabled"
16
+ self.description = ("This check verifies that GuardDuty malware protection for EBS is enabled. "
17
+ "Malware Protection for EC2 helps you detect the potential presence of malware "
18
+ "by scanning the Amazon EBS volumes that are attached to the Amazon EC2 instances "
19
+ "and container workloads.")
20
+ self.severity = "HIGH"
21
+ self.check_logic = "Get detector details in each Region. Check if malware protection for EBS is enabled in the Features array."
22
+
23
+ def execute(self) -> List[Dict[str, Any]]:
24
+ """
25
+ Execute the check.
26
+
27
+ Returns:
28
+ List of findings
29
+ """
30
+ findings = []
31
+ # Check all regions
32
+ for region in self.regions:
33
+ detector_id = self.get_detector_id(region)
34
+
35
+ # Handle regions where we can't access GuardDuty
36
+ if not detector_id:
37
+ findings.append(self.create_finding(
38
+ status="ERROR",
39
+ region=region,
40
+ resource_id=f"guardduty:{region}",
41
+ actual_value="Unable to access GuardDuty in this region",
42
+ remediation="Check permissions or if GuardDuty is supported in this region"
43
+ ))
44
+ continue
45
+
46
+ # Get detector details
47
+ detector_details = self.get_detector_details(region)
48
+
49
+ if detector_details:
50
+ # Check if malware protection for EBS is enabled in the Features array
51
+ ebs_malware_protection_enabled = False
52
+ features = detector_details.get('Features', [])
53
+
54
+ for feature in features:
55
+ if feature.get('Name') == 'EBS_MALWARE_PROTECTION' and feature.get('Status') == 'ENABLED':
56
+ ebs_malware_protection_enabled = True
57
+ break
58
+
59
+ if ebs_malware_protection_enabled:
60
+ findings.append(self.create_finding(
61
+ status="PASS",
62
+ region=region,
63
+ resource_id=f"guardduty:{region}:{detector_id}",
64
+ actual_value="Malware protection for EBS is enabled",
65
+ remediation=""
66
+ ))
67
+ else:
68
+ findings.append(self.create_finding(
69
+ status="FAIL",
70
+ region=region,
71
+ resource_id=f"guardduty:{region}:{detector_id}",
72
+ actual_value="Malware protection for EBS is not enabled",
73
+ remediation=f"Enable malware protection for EBS in GuardDuty in {region} to scan EC2 instances and container workloads for malware"
74
+ ))
75
+ else:
76
+ findings.append(self.create_finding(
77
+ status="FAIL",
78
+ region=region,
79
+ resource_id=f"guardduty:{region}:{detector_id}",
80
+ actual_value="Unable to retrieve detector details",
81
+ remediation="Check GuardDuty permissions and configuration"
82
+ ))
83
+
84
+ return findings
@@ -0,0 +1,83 @@
1
+ """
2
+ Check if GuardDuty has RDS protection enabled.
3
+ """
4
+ from typing import Dict, List, Any
5
+ from sraverify.services.guardduty.base import GuardDutyCheck
6
+
7
+
8
+ class SRA_GUARDDUTY_10(GuardDutyCheck):
9
+ """Check if GuardDuty has RDS protection enabled."""
10
+
11
+ def __init__(self):
12
+ """Initialize GuardDuty RDS protection check."""
13
+ super().__init__()
14
+ self.check_id = "SRA-GUARDDUTY-10"
15
+ self.check_name = "GuardDuty RDS protection enabled"
16
+ self.description = ("This check verifies that GuardDuty RDS protection is enabled. "
17
+ "RDS Protection in Amazon GuardDuty analyzes and profiles RDS login activity "
18
+ "for potential access threats to Amazon Aurora databases and Amazon RDS for PostgreSQL.")
19
+ self.severity = "HIGH"
20
+ self.check_logic = "Get detector details in each Region. Check if RDS protection is enabled in the Features array."
21
+
22
+ def execute(self) -> List[Dict[str, Any]]:
23
+ """
24
+ Execute the check.
25
+
26
+ Returns:
27
+ List of findings
28
+ """
29
+ findings = []
30
+ # Check all regions
31
+ for region in self.regions:
32
+ detector_id = self.get_detector_id(region)
33
+
34
+ # Handle regions where we can't access GuardDuty
35
+ if not detector_id:
36
+ findings.append(self.create_finding(
37
+ status="ERROR",
38
+ region=region,
39
+ resource_id=f"guardduty:{region}",
40
+ actual_value="Unable to access GuardDuty in this region",
41
+ remediation="Check permissions or if GuardDuty is supported in this region"
42
+ ))
43
+ continue
44
+
45
+ # Get detector details
46
+ detector_details = self.get_detector_details(region)
47
+
48
+ if detector_details:
49
+ # Check if RDS protection is enabled in the Features array
50
+ rds_protection_enabled = False
51
+ features = detector_details.get('Features', [])
52
+
53
+ for feature in features:
54
+ if feature.get('Name') == 'RDS_LOGIN_EVENTS' and feature.get('Status') == 'ENABLED':
55
+ rds_protection_enabled = True
56
+ break
57
+
58
+ if rds_protection_enabled:
59
+ findings.append(self.create_finding(
60
+ status="PASS",
61
+ region=region,
62
+ resource_id=f"guardduty:{region}:{detector_id}",
63
+ actual_value="RDS protection is enabled",
64
+ remediation=""
65
+ ))
66
+ else:
67
+ findings.append(self.create_finding(
68
+ status="FAIL",
69
+ region=region,
70
+ resource_id=f"guardduty:{region}:{detector_id}",
71
+ actual_value="RDS protection is not enabled",
72
+ remediation=f"Enable RDS protection for GuardDuty in {region} to monitor login activity for potential threats to Aurora and RDS for PostgreSQL databases"
73
+ ))
74
+ else:
75
+ findings.append(self.create_finding(
76
+ status="FAIL",
77
+ region=region,
78
+ resource_id=f"guardduty:{region}:{detector_id}",
79
+ actual_value="Unable to retrieve detector details",
80
+ remediation="Check GuardDuty permissions and configuration"
81
+ ))
82
+
83
+ return findings
@@ -0,0 +1,93 @@
1
+ """
2
+ Check if GuardDuty has EKS runtime protection enabled.
3
+ """
4
+ from typing import Dict, List, Any
5
+ from sraverify.services.guardduty.base import GuardDutyCheck
6
+
7
+
8
+ class SRA_GUARDDUTY_11(GuardDutyCheck):
9
+ """Check if GuardDuty has EKS runtime protection enabled."""
10
+
11
+ def __init__(self):
12
+ """Initialize GuardDuty EKS runtime protection check."""
13
+ super().__init__()
14
+ self.check_id = "SRA-GUARDDUTY-11"
15
+ self.check_name = "GuardDuty EKS runtime protection enabled"
16
+ self.description = ("This check verifies that GuardDuty EKS runtime (original) or runtime protection is enabled. "
17
+ "Runtime Monitoring observes and analyzes operating system-level, networking, "
18
+ "and file events to help you detect potential threats in specific AWS workloads")
19
+ self.severity = "HIGH"
20
+ self.check_logic = "Get detector details in each Region. Check if EKS runtime monitoring or runtime monitoring is enabled in the Features array."
21
+
22
+ def execute(self) -> List[Dict[str, Any]]:
23
+ """
24
+ Execute the check.
25
+
26
+ Returns:
27
+ List of findings
28
+ """
29
+ findings = []
30
+ # Check all regions
31
+ for region in self.regions:
32
+ detector_id = self.get_detector_id(region)
33
+
34
+ # Handle regions where we can't access GuardDuty
35
+ if not detector_id:
36
+ findings.append(self.create_finding(
37
+ status="ERROR",
38
+ region=region,
39
+ resource_id=f"guardduty:{region}",
40
+ actual_value="Unable to access GuardDuty in this region",
41
+ remediation="Check permissions or if GuardDuty is supported in this region"
42
+ ))
43
+ continue
44
+
45
+ # Get detector details
46
+ detector_details = self.get_detector_details(region)
47
+
48
+ if detector_details:
49
+ # Check if EKS runtime protection is enabled in the Features array
50
+ # We need to check both EKS_RUNTIME_MONITORING (original) and RUNTIME_MONITORING features
51
+ eks_runtime_protection_enabled = False
52
+ runtime_monitoring_enabled = False
53
+ features = detector_details.get('Features', [])
54
+
55
+ for feature in features:
56
+ if feature.get('Name') == 'EKS_RUNTIME_MONITORING' and feature.get('Status') == 'ENABLED':
57
+ eks_runtime_protection_enabled = True
58
+ if feature.get('Name') == 'RUNTIME_MONITORING' and feature.get('Status') == 'ENABLED':
59
+ runtime_monitoring_enabled = True
60
+
61
+ # Consider the check passed if either of the runtime monitoring features is enabled
62
+ if eks_runtime_protection_enabled or runtime_monitoring_enabled:
63
+ enabled_features = []
64
+ if eks_runtime_protection_enabled:
65
+ enabled_features.append("EKS_RUNTIME_MONITORING")
66
+ if runtime_monitoring_enabled:
67
+ enabled_features.append("RUNTIME_MONITORING")
68
+
69
+ findings.append(self.create_finding(
70
+ status="PASS",
71
+ region=region,
72
+ resource_id=f"guardduty:{region}:{detector_id}",
73
+ actual_value=f"Runtime protection is enabled: {', '.join(enabled_features)}",
74
+ remediation=""
75
+ ))
76
+ else:
77
+ findings.append(self.create_finding(
78
+ status="FAIL",
79
+ region=region,
80
+ resource_id=f"guardduty:{region}:{detector_id}",
81
+ actual_value="Runtime protection is not enabled",
82
+ remediation=f"Enable Runtime Monitoring for GuardDuty in {region} to monitor operating system-level, networking, and file events in workloads"
83
+ ))
84
+ else:
85
+ findings.append(self.create_finding(
86
+ status="FAIL",
87
+ region=region,
88
+ resource_id=f"guardduty:{region}:{detector_id}",
89
+ actual_value="Unable to retrieve detector details",
90
+ remediation="Check GuardDuty permissions and configuration"
91
+ ))
92
+
93
+ return findings