%PDF- %PDF-
Direktori : /opt/imunify360/venv/lib/python3.8/site-packages/defence360agent/malwarelib/scan/mds/ |
Current File : //opt/imunify360/venv/lib/python3.8/site-packages/defence360agent/malwarelib/scan/mds/report.py |
""" This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Copyright © 2019 Cloud Linux Software Inc. This software is also available under ImunifyAV commercial license, see <https://www.imunify360.com/legal/eula> """ from __future__ import annotations from dataclasses import dataclass from typing import Collection, Iterable, Set, Tuple @dataclass(eq=True, frozen=True) class MalwareDatabaseHitError: code: int message: str @dataclass(eq=True, frozen=True) class MalwareDatabaseHitInfo: path: str signature: str app_name: str db_host: str db_name: str db_port: int errors: Tuple[MalwareDatabaseHitError, ...] user: int @classmethod def from_report(cls, report) -> MalwareDatabaseHitInfo: return cls( path=report["path"], signature=report["detailed_reports"][0]["sigid"] if report["detailed_reports"] else "BAD URL", app_name=report["app"], db_host=report["database_host"], db_name=report["database_name"], errors=tuple( MalwareDatabaseHitError(err["code"], err["message"]) for err in report["error_list"] ), db_port=report["database_port"], user=report["app_owner_uid"], ) @dataclass(eq=True, frozen=True) class MalwareDatabaseScanReport: hits: Set[MalwareDatabaseHitInfo] started: int completed: int total_resources: int total_malicious: int def _last_completed_time(reports: Iterable[dict]) -> int: return int( max( ( report["start_time"] + report["running_time"] for report in reports ), default=0, ) ) def _first_started_time(reports: Iterable[dict]) -> int: return int(min((report["start_time"] for report in reports), default=0)) def _found(reports: Iterable[dict]) -> Iterable[dict]: return iter(filter(lambda r: r["app"] is not None, reports)) def _malicious(reports: Iterable[dict]) -> Iterable[dict]: return iter( filter( lambda r: r["count_of_detected_malicious_entries"] > 0, reports, ) ) def scan_report( hit_report_list: Collection[dict], ) -> MalwareDatabaseScanReport: hits = { MalwareDatabaseHitInfo.from_report(report) for report in _malicious(_found(hit_report_list)) } started = _first_started_time(hit_report_list) completed = _last_completed_time(hit_report_list) total_resources = len(list(_found(hit_report_list))) total_malicious = len(hits) return MalwareDatabaseScanReport( hits, started, completed, total_resources, total_malicious )