mirror of
https://github.com/ghndrx/prowler.git
synced 2026-02-10 06:45:08 +00:00
116 lines
3.2 KiB
Python
116 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import argparse
|
|
import importlib
|
|
import pkgutil
|
|
|
|
from lib.banner import print_banner, print_version
|
|
from lib.logger import logger, logging_levels
|
|
from lib.outputs import report
|
|
from providers.aws.aws_provider import provider_set_profile
|
|
|
|
|
|
def run_check(check):
|
|
print(f"\nCheck Name: {check.CheckName}")
|
|
findings = check.execute()
|
|
report(findings)
|
|
|
|
|
|
def import_check(check_path):
|
|
lib = importlib.import_module(f"{check_path}")
|
|
return lib
|
|
|
|
|
|
def recover_modules_from_provider(provider):
|
|
modules = []
|
|
for module_name in pkgutil.walk_packages(
|
|
importlib.import_module(f"providers.{provider}.services").__path__,
|
|
importlib.import_module(f"providers.{provider}.services").__name__ + ".",
|
|
):
|
|
if module_name.name.count(".") == 5:
|
|
modules.append(module_name.name)
|
|
return modules
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# start_time = time.time()
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("provider", help="Specify Provider: AWS")
|
|
parser.add_argument(
|
|
"-c", "--checks", nargs="*", help="Comma separated list of checks"
|
|
)
|
|
parser.add_argument(
|
|
"-b", "--no-banner", action="store_false", help="Hide Prowler Banner"
|
|
)
|
|
parser.add_argument(
|
|
"-v", "--version", action="store_true", help="Show Prowler version"
|
|
)
|
|
parser.add_argument(
|
|
"--log-level",
|
|
choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
|
|
default="CRITICAL",
|
|
help="Select Log Level",
|
|
)
|
|
parser.add_argument(
|
|
"-p",
|
|
"--profile",
|
|
nargs="?",
|
|
const="default",
|
|
help="AWS profile to launch prowler with",
|
|
)
|
|
# Parse Arguments
|
|
args = parser.parse_args()
|
|
provider = args.provider
|
|
checks = args.checks
|
|
profile = args.profile
|
|
|
|
if args.version:
|
|
print_version()
|
|
quit()
|
|
|
|
if args.no_banner:
|
|
print_banner()
|
|
|
|
# Set Logger
|
|
logger.setLevel(logging_levels.get(args.log_level))
|
|
|
|
logger.info("Test info")
|
|
logger.debug("Test debug")
|
|
|
|
# Setting profile
|
|
provider_set_profile(profile)
|
|
|
|
# libreria para generar la lista de checks
|
|
checks_to_execute = set()
|
|
|
|
# LOADER
|
|
# Handle if there are checks passed using -c/--checks
|
|
if checks:
|
|
for check_name in checks:
|
|
checks_to_execute.add(check_name)
|
|
|
|
# If there are no checks passed as argument
|
|
else:
|
|
# Get all check modules to run with the specifie provider
|
|
modules = recover_modules_from_provider(provider)
|
|
for check_module in modules:
|
|
# Recover check name from import path (last part)
|
|
check_name = check_module.split(".")[5]
|
|
checks_to_execute.add(check_name)
|
|
|
|
# Execute checks
|
|
for check_name in checks_to_execute:
|
|
# Recover service from check name
|
|
service = check_name.split("_")[0]
|
|
# Import check module
|
|
# Validate check in service and provider
|
|
lib = import_check(
|
|
f"providers.{provider}.services.{service}.{check_name}.{check_name}"
|
|
)
|
|
# Recover functions from check
|
|
check_to_execute = getattr(lib, check_name)
|
|
c = check_to_execute()
|
|
# Run check
|
|
run_check(c)
|