diff --git a/api_app/analyzers_manager/file_analyzers/capa_info.py b/api_app/analyzers_manager/file_analyzers/capa_info.py index 6c95976afa..7d7db2a806 100644 --- a/api_app/analyzers_manager/file_analyzers/capa_info.py +++ b/api_app/analyzers_manager/file_analyzers/capa_info.py @@ -1,6 +1,7 @@ # This file is a part of IntelOwl https://github.com/intelowlproject/IntelOwl # See the file 'LICENSE' for copying permission. +import pwd, grp import json import logging import os @@ -12,6 +13,19 @@ import requests from django.conf import settings +def run(self): + try: + cache_dir = Path(os.getenv("XDG_CACHE_HOME", "/opt/intelowl/.cache")) + + if not cache_dir.exists(): + cache_dir.mkdir(parents=True, exist_ok=True) + try: + uid = pwd.getpwnam("intelowl").pw_uid + gid = grp.getgrnam("intelowl").gr_gid + os.chown(cache_dir, uid, gid) + except Exception: + pass + from api_app.analyzers_manager.classes import FileAnalyzer from api_app.analyzers_manager.exceptions import AnalyzerRunException from api_app.analyzers_manager.models import PythonModule @@ -41,6 +55,7 @@ def _download_signatures(cls) -> None: shutil.rmtree(SIGNATURE_LOCATION) os.makedirs(SIGNATURE_LOCATION) + logger.info(f"Created fresh signatures directory at {SIGNATURE_LOCATION}") signatures_url = "https://api.github.com/repos/mandiant/capa/contents/sigs" @@ -97,6 +112,11 @@ def update(cls, anayzer_module: PythonModule) -> bool: def run(self): try: + cache_dir = Path(settings.MEDIA_ROOT) / "capa_cache" + cache_dir.mkdir(parents=True, exist_ok=True) + os.environ["XDG_CACHE_HOME"] = str(cache_dir) + + response = requests.get( "https://api.github.com/repos/mandiant/capa-rules/releases/latest" )