forked from p15670423/monkey
Split and moved zero trust service into pillar_service.py and principle_service.py
This commit is contained in:
parent
01feea905b
commit
e69c94ae50
|
@ -5,8 +5,9 @@ from flask import Response, jsonify
|
|||
|
||||
from monkey_island.cc.models.zero_trust.scoutsuite_data_json import ScoutSuiteDataJson
|
||||
from monkey_island.cc.resources.auth.auth import jwt_required
|
||||
from monkey_island.cc.services.zero_trust.report_data.finding_service import FindingService
|
||||
from monkey_island.cc.services.zero_trust.zero_trust_service import ZeroTrustService
|
||||
from monkey_island.cc.services.zero_trust.zero_trust_report.finding_service import FindingService
|
||||
from monkey_island.cc.services.zero_trust.zero_trust_report.pillar_service import PillarService
|
||||
from monkey_island.cc.services.zero_trust.zero_trust_report.principle_service import PrincipleService
|
||||
|
||||
REPORT_DATA_PILLARS = "pillars"
|
||||
REPORT_DATA_FINDINGS = "findings"
|
||||
|
@ -20,12 +21,12 @@ class ZeroTrustReport(flask_restful.Resource):
|
|||
def get(self, report_data=None):
|
||||
if report_data == REPORT_DATA_PILLARS:
|
||||
return jsonify({
|
||||
"statusesToPillars": ZeroTrustService.get_statuses_to_pillars(),
|
||||
"pillarsToStatuses": ZeroTrustService.get_pillars_to_statuses(),
|
||||
"grades": ZeroTrustService.get_pillars_grades()
|
||||
"statusesToPillars": PillarService.get_statuses_to_pillars(),
|
||||
"pillarsToStatuses": PillarService.get_pillars_to_statuses(),
|
||||
"grades": PillarService.get_pillars_grades()
|
||||
})
|
||||
elif report_data == REPORT_DATA_PRINCIPLES_STATUS:
|
||||
return jsonify(ZeroTrustService.get_principles_status())
|
||||
return jsonify(PrincipleService.get_principles_status())
|
||||
elif report_data == REPORT_DATA_FINDINGS:
|
||||
return jsonify(FindingService.get_all_findings())
|
||||
elif report_data == REPORT_DATA_SCOUTSUITE:
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
import common.common_consts.zero_trust_consts as zero_trust_consts
|
||||
from monkey_island.cc.models.zero_trust.finding import Finding
|
||||
|
||||
|
||||
class PillarService:
|
||||
|
||||
@staticmethod
|
||||
def get_pillars_grades():
|
||||
pillars_grades = []
|
||||
all_findings = Finding.objects()
|
||||
for pillar in zero_trust_consts.PILLARS:
|
||||
pillars_grades.append(PillarService.__get_pillar_grade(pillar, all_findings))
|
||||
return pillars_grades
|
||||
|
||||
@staticmethod
|
||||
def __get_pillar_grade(pillar, all_findings):
|
||||
pillar_grade = {
|
||||
"pillar": pillar,
|
||||
zero_trust_consts.STATUS_FAILED: 0,
|
||||
zero_trust_consts.STATUS_VERIFY: 0,
|
||||
zero_trust_consts.STATUS_PASSED: 0,
|
||||
zero_trust_consts.STATUS_UNEXECUTED: 0
|
||||
}
|
||||
|
||||
tests_of_this_pillar = zero_trust_consts.PILLARS_TO_TESTS[pillar]
|
||||
|
||||
test_unexecuted = {}
|
||||
for test in tests_of_this_pillar:
|
||||
test_unexecuted[test] = True
|
||||
|
||||
for finding in all_findings:
|
||||
test_unexecuted[finding.test] = False
|
||||
test_info = zero_trust_consts.TESTS_MAP[finding.test]
|
||||
if pillar in test_info[zero_trust_consts.PILLARS_KEY]:
|
||||
pillar_grade[finding.status] += 1
|
||||
|
||||
pillar_grade[zero_trust_consts.STATUS_UNEXECUTED] = list(test_unexecuted.values()).count(True)
|
||||
|
||||
return pillar_grade
|
||||
|
||||
@staticmethod
|
||||
def get_statuses_to_pillars():
|
||||
results = {
|
||||
zero_trust_consts.STATUS_FAILED: [],
|
||||
zero_trust_consts.STATUS_VERIFY: [],
|
||||
zero_trust_consts.STATUS_PASSED: [],
|
||||
zero_trust_consts.STATUS_UNEXECUTED: []
|
||||
}
|
||||
for pillar in zero_trust_consts.PILLARS:
|
||||
results[PillarService.__get_status_of_single_pillar(pillar)].append(pillar)
|
||||
|
||||
return results
|
||||
|
||||
@staticmethod
|
||||
def get_pillars_to_statuses():
|
||||
results = {}
|
||||
for pillar in zero_trust_consts.PILLARS:
|
||||
results[pillar] = PillarService.__get_status_of_single_pillar(pillar)
|
||||
|
||||
return results
|
||||
|
||||
@staticmethod
|
||||
def __get_status_of_single_pillar(pillar):
|
||||
all_findings = Finding.objects()
|
||||
grade = PillarService.__get_pillar_grade(pillar, all_findings)
|
||||
for status in zero_trust_consts.ORDERED_TEST_STATUSES:
|
||||
if grade[status] > 0:
|
||||
return status
|
||||
return zero_trust_consts.STATUS_UNEXECUTED
|
|
@ -2,40 +2,7 @@ import common.common_consts.zero_trust_consts as zero_trust_consts
|
|||
from monkey_island.cc.models.zero_trust.finding import Finding
|
||||
|
||||
|
||||
class ZeroTrustService:
|
||||
@staticmethod
|
||||
def get_pillars_grades():
|
||||
pillars_grades = []
|
||||
all_findings = Finding.objects()
|
||||
for pillar in zero_trust_consts.PILLARS:
|
||||
pillars_grades.append(ZeroTrustService.__get_pillar_grade(pillar, all_findings))
|
||||
return pillars_grades
|
||||
|
||||
@staticmethod
|
||||
def __get_pillar_grade(pillar, all_findings):
|
||||
pillar_grade = {
|
||||
"pillar": pillar,
|
||||
zero_trust_consts.STATUS_FAILED: 0,
|
||||
zero_trust_consts.STATUS_VERIFY: 0,
|
||||
zero_trust_consts.STATUS_PASSED: 0,
|
||||
zero_trust_consts.STATUS_UNEXECUTED: 0
|
||||
}
|
||||
|
||||
tests_of_this_pillar = zero_trust_consts.PILLARS_TO_TESTS[pillar]
|
||||
|
||||
test_unexecuted = {}
|
||||
for test in tests_of_this_pillar:
|
||||
test_unexecuted[test] = True
|
||||
|
||||
for finding in all_findings:
|
||||
test_unexecuted[finding.test] = False
|
||||
test_info = zero_trust_consts.TESTS_MAP[finding.test]
|
||||
if pillar in test_info[zero_trust_consts.PILLARS_KEY]:
|
||||
pillar_grade[finding.status] += 1
|
||||
|
||||
pillar_grade[zero_trust_consts.STATUS_UNEXECUTED] = list(test_unexecuted.values()).count(True)
|
||||
|
||||
return pillar_grade
|
||||
class PrincipleService:
|
||||
|
||||
@staticmethod
|
||||
def get_principles_status():
|
||||
|
@ -50,8 +17,8 @@ class ZeroTrustService:
|
|||
all_principles_statuses[pillar].append(
|
||||
{
|
||||
"principle": zero_trust_consts.PRINCIPLES[principle],
|
||||
"tests": ZeroTrustService.__get_tests_status(principle_tests),
|
||||
"status": ZeroTrustService.__get_principle_status(principle_tests)
|
||||
"tests": PrincipleService.__get_tests_status(principle_tests),
|
||||
"status": PrincipleService.__get_principle_status(principle_tests)
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -79,7 +46,7 @@ class ZeroTrustService:
|
|||
results.append(
|
||||
{
|
||||
"test": zero_trust_consts.TESTS_MAP[test][zero_trust_consts.TEST_EXPLANATION_KEY],
|
||||
"status": ZeroTrustService.__get_lcd_worst_status_for_test(test_findings)
|
||||
"status": PrincipleService.__get_lcd_worst_status_for_test(test_findings)
|
||||
}
|
||||
)
|
||||
return results
|
||||
|
@ -98,33 +65,3 @@ class ZeroTrustService:
|
|||
current_worst_status = finding.status
|
||||
|
||||
return current_worst_status
|
||||
|
||||
@staticmethod
|
||||
def get_statuses_to_pillars():
|
||||
results = {
|
||||
zero_trust_consts.STATUS_FAILED: [],
|
||||
zero_trust_consts.STATUS_VERIFY: [],
|
||||
zero_trust_consts.STATUS_PASSED: [],
|
||||
zero_trust_consts.STATUS_UNEXECUTED: []
|
||||
}
|
||||
for pillar in zero_trust_consts.PILLARS:
|
||||
results[ZeroTrustService.__get_status_of_single_pillar(pillar)].append(pillar)
|
||||
|
||||
return results
|
||||
|
||||
@staticmethod
|
||||
def get_pillars_to_statuses():
|
||||
results = {}
|
||||
for pillar in zero_trust_consts.PILLARS:
|
||||
results[pillar] = ZeroTrustService.__get_status_of_single_pillar(pillar)
|
||||
|
||||
return results
|
||||
|
||||
@staticmethod
|
||||
def __get_status_of_single_pillar(pillar):
|
||||
all_findings = Finding.objects()
|
||||
grade = ZeroTrustService.__get_pillar_grade(pillar, all_findings)
|
||||
for status in zero_trust_consts.ORDERED_TEST_STATUSES:
|
||||
if grade[status] > 0:
|
||||
return status
|
||||
return zero_trust_consts.STATUS_UNEXECUTED
|
Loading…
Reference in New Issue