Carsten Marr

98 papers A* 1A 1Journal 53Unranked 43
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Ferdinand Kapl, Amir Mohammad Karimi-Mamaghan, Maximilian Seitzer, Karl Henrik Johansson, Carsten Marr, Stefan Bauer, Andrea Dittadi
2026 J jnl
Trans. Mach. Learn. Res.
Salome Kazeminia, Carsten Marr, Bastian Rieck
2025 J jnl
CoRR
Rao Muhammad Umer, Daniel Sens, Jonathan Noll, Christian Matek, Lukas Wolfseher, Rainer Spang, Ralf Huss, Johannes Raffler, Sarah Reinke, Wolfram Klapper, Katja Steiger, Kristina Schwamborn, Carsten Marr
2025 J jnl
CoRR
Jan Carreras Boada, Rao Muhammad Umer, Carsten Marr
2025 J jnl
CoRR
Xudong Sun, Alex Markham, Pratik Misra, Carsten Marr
2025 conf
MLMI@MICCAI
Chen Yang, Michael Deutges, Jingsong Liu, Han Li, Nassir Navab, Carsten Marr, Ario Sadafi
2025 J jnl
CoRR
Chen Yang, Michael Deutges, Jingsong Liu, Han Li, Nassir Navab, Carsten Marr, Ario Sadafi
2025 conf
ISBI
Philipp Endres, Valentin Koch, Julia A. Schnabel, Carsten Marr
2025 conf
EMA4MICCAI
Zahra Ebrahimi, Raheleh Salehi, Nassir Navab, Carsten Marr, Ario Sadafi
2025 J jnl
CoRR
Zahra Ebrahimi, Raheleh Salehi, Nassir Navab, Carsten Marr, Ario Sadafi
2025 conf
ICCVW
Jan Carreras Boada, Rao Muhammad Umer, Carsten Marr
2025 conf
MICCAI (14)
Muhammed Furkan Dasdelen, Hyesu Lim, Michèle Buck, Katharina S. Götze, Carsten Marr, Steffen Schneider
2025 J jnl
CoRR
Muhammed Furkan Dasdelen, Hyesu Lim, Michèle Buck, Katharina S. Götze, Carsten Marr, Steffen Schneider
2025 J jnl
Int. J. Medical Informatics
Hussain Ahmad Madni, Rao Muhammad Umer, Silvia Zottin, Carsten Marr, Gian Luca Foresti
2025 A* conf
ICML
Henrik von Kleist, Joshua Wendland, Ilya Shpitser, Carsten Marr
2025 conf
IPMI (1)
Chen Yang, Michael Deutges, Nassir Navab, Ario Sadafi, Carsten Marr
2025 A conf
AISTATS
Xudong Sun, Nutan Chen, Alexej Gossmann, Yu Xing, Matteo Wohlrapp, Emilio Dorigatti, Carla Feistner, Felix Drost, Daniele Scarcella, Lisa Beer, Carsten Marr
2025 conf
EMA4MICCAI
Michael Deutges, Chen Yang, Raheleh Salehi, Nassir Navab, Carsten Marr, Ario Sadafi
2025 J jnl
CoRR
Michael Deutges, Chen Yang, Raheleh Salehi, Nassir Navab, Carsten Marr, Ario Sadafi
2025 J jnl
CoRR
Christian Grashei, Christian Brechenmacher, Rao Muhammad Umer, Jingsong Liu, Carsten Marr, Ewa Szczurek, Peter J. Schüffler
2025 conf
MICCAI (4)
Luca Zedda, Andrea Loddo, Cecilia Di Ruberto, Carsten Marr
2025 J jnl
CoRR
Luca Zedda, Andrea Loddo, Cecilia Di Ruberto, Carsten Marr
2025 J jnl
Comput. Biol. Medicine
Moritz Thomas, Ruben Brabenec, Lisa Gregor, David Andreu-Sanz, Emanuele Carlini, Philipp Jie Müller, Adrian Gottschlich, Donjete Simnica, Sebastian Kobold, Carsten Marr
2024 conf
ISBI
Salome Kazeminia, Miroslav Brezík, Sayedali Shetab Boushehri, Carsten Marr
2024 J jnl
CoRR
Philipp Endres, Valentin Koch, Julia A. Schnabel, Carsten Marr
2024 conf
MICCAI (12)
Valentin Koch, Sophia J. Wagner, Salome Kazeminia, Ece Sancar, Matthias Hehr, Julia A. Schnabel, Tingying Peng, Carsten Marr
2024 J jnl
CoRR
Valentin Koch, Sophia J. Wagner, Salome Kazeminia, Ece Sancar, Matthias Hehr, Julia A. Schnabel, Tingying Peng, Carsten Marr
2024 J jnl
CoRR
Xudong Sun, Carla Feistner, Alexej Gossmann, George Schwarz, Rao Muhammad Umer, Lisa Beer, Patrick Rockenschaub, Rahul Babu Shrestha, Armin Gruber, Nutan Chen, Sayedali Shetab Boushehri, Florian Buettner, Carsten Marr
2024 conf
MIUA (2)
Isabella Galter, Elida Schneltzer, Carsten Marr, IMPC Consortium, Nadine Spielmann, Martin Hrabé de Angelis
2024 conf
ISBI
Benedikt Roth, Valentin Koch, Sophia J. Wagner, Julia A. Schnabel, Carsten Marr, Tingying Peng
2024 J jnl
CoRR
Benedikt Roth, Valentin Koch, Sophia J. Wagner, Julia A. Schnabel, Carsten Marr, Tingying Peng
2024 J jnl
CoRR
Xudong Sun, Nutan Chen, Alexej Gossmann, Yu Xing, Carla Feistner, Emilio Dorigatt, Felix Drost, Daniele Scarcella, Lisa Beer, Carsten Marr
2024 J jnl
CoRR
Gizem Mert, Ario Sadafi, Raheleh Salehi, Nassir Navab, Carsten Marr
2024 conf
MICCAI (3)
Michael Deutges, Ario Sadafi, Nassir Navab, Carsten Marr
2024 J jnl
CoRR
Michael Deutges, Ario Sadafi, Nassir Navab, Carsten Marr
2024 J jnl
J. Open Source Softw.
Thomas Walzthoeni, Bom Bahadur Singiali, N. William Rayner, Francesco Paolo Casale, Christoph Feest, Carsten Marr, Alf Wachsmann
2024 J jnl
CoRR
Salome Kazeminia, Max Joosten, Dragan Bosnacki, Carsten Marr
2024 J jnl
CoRR
Valentin Koch, Sabine Bauer, Valerio Lupperger, Michael Joner, Heribert Schunkert, Julia A. Schnabel, Moritz von Scheidt, Carsten Marr
2023 conf
DART@MICCAI
Ario Sadafi, Raheleh Salehi, Armin Gruber, Sayedali Shetab Boushehri, Pascal Giehr, Nassir Navab, Carsten Marr
2023 J jnl
CoRR
Ario Sadafi, Raheleh Salehi, Armin Gruber, Sayedali Shetab Boushehri, Pascal Giehr, Nassir Navab, Carsten Marr
2023 conf
ISBI
Dominik Jens Elias Waibel, Ernst Röell, Bastian Rieck, Raja Giryes, Carsten Marr
2023 conf
CLIP/FAIMI/EPIMI@MICCAI
Ario Sadafi, Matthias Hehr, Nassir Navab, Carsten Marr
2023 J jnl
CoRR
Ario Sadafi, Matthias Hehr, Nassir Navab, Carsten Marr
2023 conf
ISBI
Ario Sadafi, Nassir Navab, Carsten Marr
2023 J jnl
CoRR
Ario Sadafi, Nassir Navab, Carsten Marr
2023 conf
ISBI
Daniel Sens, Ario Sadafi, Francesco Paolo Casale, Nassir Navab, Carsten Marr
2023 J jnl
CoRR
Daniel Sens, Ario Sadafi, Francesco Paolo Casale, Nassir Navab, Carsten Marr
2023 conf
MICCAI (8)
Yu Liu, Gesine Müller, Nassir Navab, Carsten Marr, Jan Huisken, Tingying Peng
2023 J jnl
CoRR
Yu Liu, Gesine Müller, Nassir Navab, Carsten Marr, Jan Huisken, Tingying Peng
2023 J jnl
CoRR
Rao Muhammad Umer, Armin Gruber, Sayedali Shetab Boushehri, Christian Metak, Carsten Marr
2023 conf
IPMI
Ario Sadafi, Oleksandra Adonkina, Ashkan Khakzar, Peter Lienemann, Rudolf Matthias Hehr, Daniel Rueckert, Nassir Navab, Carsten Marr
2023 J jnl
CoRR
Ario Sadafi, Oleksandra Adonkina, Ashkan Khakzar, Peter Lienemann, Rudolf Matthias Hehr, Daniel Rueckert, Nassir Navab, Carsten Marr
2023 J jnl
CoRR
Salome Kazeminia, Ario Sadafi, Asya Makhro, Anna Bogdanova, Carsten Marr, Bastian Rieck
2022 J jnl
CoRR
Dominik Jens Elias Waibel, Ernst Röell, Bastian Rieck, Raja Giryes, Carsten Marr
2022 conf
Bildverarbeitung für die Medizin
Christian Matek, Sebastian Krappe, Christian Münzenmayer, Torsten Haferlach, Carsten Marr
2022 J jnl
PLoS Comput. Biol.
Lea Schuh, Igor Kukhtevich, Poonam Bheda, Melanie Schulz, Maria Bordukova, Robert Schneider, Carsten Marr
2022 conf
MICCAI (8)
Salome Kazeminia, Ario Sadafi, Asya Makhro, Anna Bogdanova, Shadi Albarqouni, Carsten Marr
2022 J jnl
CoRR
Salome Kazeminia, Ario Sadafi, Asya Makhro, Anna Bogdanova, Shadi Albarqouni, Carsten Marr
2022 J jnl
CoRR
Dominik Jens Elias Waibel, Scott Atwell, Matthias Meier, Carsten Marr, Bastian Rieck
2022 conf
MICCAI (4)
Dominik Jens Elias Waibel, Scott Atwell, Matthias Meier, Carsten Marr, Bastian Rieck
2022 conf
MICCAI (4)
Yu Liu, Kurt Weiss, Nassir Navab, Carsten Marr, Jan Huisken, Tingying Peng
2022 J jnl
CoRR
Yu Liu, Kurt Weiss, Nassir Navab, Carsten Marr, Jan Huisken, Tingying Peng
2022 conf
ICANN (1)
Sayedali Shetab Boushehri, Ahmad Bin Qasim, Dominik Jens Elias Waibel, Fabian Schmich, Carsten Marr
2022 conf
MICCAI (3)
Raheleh Salehi, Ario Sadafi, Armin Gruber, Peter Lienemann, Nassir Navab, Shadi Albarqouni, Carsten Marr
2022 J jnl
CoRR
Raheleh Salehi, Ario Sadafi, Armin Gruber, Peter Lienemann, Nassir Navab, Shadi Albarqouni, Carsten Marr
2021 conf
ISBI
Ario Sadafi, Lucía María Moya Sans, Asya Makhro, Leonid Livshits, Nassir Navab, Anna Bogdanova, Shadi Albarqouni, Carsten Marr
2021 J jnl
CoRR
Ario Sadafi, Lucía María Moya Sans, Asya Makhro, Leonid Livshits, Nassir Navab, Anna Bogdanova, Shadi Albarqouni, Carsten Marr
2021 J jnl
BMC Bioinform.
Dominik Jens Elias Waibel, Sayedali Shetab Boushehri, Carsten Marr
2021 conf
DART/FAIR@MICCAI
Ario Sadafi, Asya Makhro, Leonid Livshits, Nassir Navab, Anna Bogdanova, Shadi Albarqouni, Carsten Marr
2021 J jnl
CoRR
Ario Sadafi, Asya Makhro, Leonid Livshits, Nassir Navab, Anna Bogdanova, Shadi Albarqouni, Carsten Marr
2021 J jnl
CoRR
Sophia J. Wagner, Nadieh Khalili, Raghav Sharma, Melanie Boxberg, Carsten Marr, Walter de Back, Tingying Peng
2021 conf
MICCAI (8)
Sophia J. Wagner, Nadieh Khalili, Raghav Sharma, Melanie Boxberg, Carsten Marr, Walter de Back, Tingying Peng
2020 conf
Bildverarbeitung für die Medizin
Christian Matek, Simone Schwarz, Karsten Spiekermann, Carsten Marr
2020 conf
MICCAI (5)
Ario Sadafi, Asya Makhro, Anna Bogdanova, Nassir Navab, Tingying Peng, Shadi Albarqouni, Carsten Marr
2020 J jnl
CoRR
Ario Sadafi, Asya Makhro, Anna Bogdanova, Nassir Navab, Tingying Peng, Shadi Albarqouni, Carsten Marr
2020 J jnl
Bioinform.
Philipp Angerer, David S. Fischer, Fabian J. Theis, Antonio Scialdone, Carsten Marr
2020 conf
MICCAI (5)
Tingying Peng, Lorenz Lamm, Dirk Loeffler, Nouraiz Ahmed, Nassir Navab, Timm Schroeder, Carsten Marr
2019 conf
ICANN (2)
Michael Schneider, Lichao Wang, Carsten Marr
2019 J jnl
Nat. Mach. Intell.
Christian Matek, Simone Schwarz, Karsten Spiekermann, Carsten Marr
2019 conf
ICANN (3)
Dominik Jens Elias Waibel, Ulf Tiemann, Valerio Lupperger, Henrik Semb, Carsten Marr
2019 conf
MICCAI (1)
Tingying Peng, Melanie Boxberg, Wilko Weichert, Nassir Navab, Carsten Marr
2019 conf
MICCAI (1)
Ario Sadafi, Niklas Koehler, Asya Makhro, Anna Bogdanova, Nassir Navab, Carsten Marr, Tingying Peng
2019 conf
ICANN (Workshop)
Manish Mishra, Sabine Schmitt, Hans Zischka, Michael K. Strasser, Nassir Navab, Carsten Marr, Tingying Peng
2018 conf
Bildverarbeitung für die Medizin
Christian Matek, Carsten Marr, Karsten Spiekermann
2018 conf
CMSB
Justin Feigelman, Daniel Weindl, Fabian J. Theis, Carsten Marr, Jan Hasenauer
2017 J jnl
Bioinform.
Oliver Hilsenbeck, Michael Schwarzfischer, Dirk Loeffler, Sotiris Dimopoulos, Simon Hastreiter, Carsten Marr, Fabian J. Theis, Timm Schroeder
2016 J jnl
Stat. Comput.
Sabine Hug, Michael Schwarzfischer, Jan Hasenauer, Carsten Marr, Fabian J. Theis
2016 conf
ISBI
Manish Mishra, Sabine Schmitt, Lichao Wang, Michael K. Strasser, Carsten Marr, Nassir Navab, Hans Zischka, Tingying Peng
2015 conf
ISBI
Lichao Wang, Vasileios Belagiannis, Carsten Marr, Fabian J. Theis, Guang-Zhong Yang, Nassir Navab
2015 conf
CMSB
Carolin Loos, Carsten Marr, Fabian J. Theis, Jan Hasenauer
2015 J jnl
BMC Syst. Biol.
Michael K. Strasser, Justin Feigelman, Fabian J. Theis, Carsten Marr
2014 conf
ITBAM
Valeriy Khakhutskyy, Michael Schwarzfischer, Nina C. Hubig, Claudia Plant, Carsten Marr, Michael A. Rieger, Timm Schroeder, Fabian J. Theis
2014 J jnl
BMC Bioinform.
Justin Feigelman, Fabian J. Theis, Carsten Marr
2014 J jnl
CoRR
Justin Feigelman, Fabian J. Theis, Carsten Marr
2013 J jnl
BMC Bioinform.
Felix Buggenthin, Carsten Marr, Michael Schwarzfischer, Philipp S. Hoppe, Oliver Hilsenbeck, Timm Schroeder, Fabian J. Theis
2012 J jnl
Entropy
Carsten Marr, Marc-Thorsten Hütt
2010 J jnl
PLoS Comput. Biol.
Carsten Marr, Fabian J. Theis, Larry S. Liebovitch, Marc-Thorsten Hütt
2008 J jnl
BMC Syst. Biol.
Carsten Marr, Marcel Geertz, Marc-Thorsten Hütt, Georgi Muskhelishvili
redb/extractors/capa.py
← Index redb/extractors/capa.py python
from dataclasses import asdict
import inspect
import json
import subprocess
import magic
from magika import Magika
from typing import Any, Dict, List, Tuple
from datetime import datetime, timezone

from redb.extractors.enum import Tag
from redb.models.dataclasses import CAPA
from redb.extractors.extractor import Extractor
from dotenv import load_dotenv
import os

load_dotenv(override=True)

class CAPAExtractor(Extractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
    ):
        super().__init__(
            filepath, 
            log, 
            exporters,
            index_prefix, 
            elastic_index, 
            known_benign, 
            known_malicious
        )
        self.capa = None
        self.elastic_index = self.index_prefix + "-capa"

    def _replace_empty_keys(self, dictionary, replacement="default_empty_key"):
        """
        Replace empty keys in a dictionary with a specified replacement.

        Args:
        dictionary (dict): The input dictionary
        replacement (str): The replacement for empty keys (default: 'empty_key')

        Returns:
        dict: A new dictionary with empty keys replaced
        """
        # tmp_dict = {}
        # for k, v in dictionary.items():
        #     if k == '':
        #         tmp_dict[replacement] = dictionary[k]
        #     else:
        #         tmp_dict[k] = dictionary[k]
        # return tmp_dict
        return {(replacement if k == "" else k): v for k, v in dictionary.items()}

    def _extract_capa(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        TIMEOUT = int(os.getenv("CAPA_TIMEOUT")) # 5 minutes in seconds
        capa_command = [os.getenv("CAPA_PATH"), "-j", self.filepath] # COMMENT FOR TESTING ON MAC

        import signal

        # try:
        #     result = subprocess.run(
        #         capa_command, capture_output=True, text=True, check=True, timeout=TIMEOUT
        #     )
        # except subprocess.TimeoutExpired:
        #     self.log.error(f"The capa command timed out after {TIMEOUT} seconds")
        #     return {}
        # except subprocess.CalledProcessError as e:
        #     self.log.error(f"Error running capa: {e}")
        #     return {}

        # try:
        #     capa_output = json.loads(result.stdout)
        # except json.JSONDecodeError as e:
        #     self.log.error("Error parsing capa output: {e}")
        #     return {}

        # Create a process group for easier termination of all child processes
        try:
            # Start the process in a new process group
            process = subprocess.Popen(
                capa_command,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid  # Use os.setsid() to create a new process group
            )
            
            # Implement timeout handling manually
            try:
                stdout, stderr = process.communicate(timeout=TIMEOUT)
                # Process completed within timeout
                if process.returncode != 0:
                    self.log.error(f"Error running capa, return code: {process.returncode}, stderr: {stderr}")
                    return {}
            except subprocess.TimeoutExpired:
                # Kill the entire process group on timeout
                self.log.warning(f"The capa command timed out after {TIMEOUT} seconds, terminating process group")
                
                try:
                    # Send SIGTERM to the entire process group
                    os.killpg(process.pid, signal.SIGTERM)
                    
                    # Give it a moment to terminate gracefully
                    try:
                        process.wait(timeout=3)
                    except subprocess.TimeoutExpired:
                        # If it's still running after 3 seconds, send SIGKILL
                        self.log.warning("Process didn't terminate with SIGTERM, sending SIGKILL")
                        os.killpg(process.pid, signal.SIGKILL)
                        
                    process.wait()  # Make sure process resources are fully cleaned up
                except (ProcessLookupError, OSError) as e:
                    self.log.warning(f"Error while killing process: {e}")
                    
                return {}
                
            try:
                capa_output = json.loads(stdout)
            except json.JSONDecodeError as e:
                self.log.error(f"Error parsing capa output: {e}")
                return {}

            capa_dump = {}  # dictionalry of capabilities
            capabilities = set()  # list of capabilities
            namespaces = set()  # list of namespaces
            attack_dump = {}  # dictionary of tuples [tactic](technique, technique_id)
            tactics = set()  # list of tactics
            techniques = set()  # list of techniques
            techniques_id = set()  # list of techniques_id
            mbc_dump = {}  # dictionary of tuples [objective](behavior, behavior_id)
            mbc_objectives = set()  # list of objectives
            mbc_behaviors = set()  # list of behaviors
            mbc_behaviors_id = set()  # list of behaviors_id

            if isinstance(capa_output, dict) and "rules" in capa_output:
                rules = capa_output["rules"]
                if isinstance(rules, dict):
                    for rule_name, rule_data in rules.items():
                        if isinstance(rule_data, dict) and "meta" in rule_data:
                            meta = rule_data["meta"]
                            if isinstance(meta, dict):
                                # Process capabilities
                                namespace = meta.get("namespace", "").lower()
                                # if namespace != 'lib':
                                if namespace not in capa_dump:
                                    capa_dump[namespace] = []
                                    namespaces.add(namespace)
                                capa_dump[namespace].append(rule_name)
                                capabilities.add(rule_name)

                                # Process ATTACK information
                                if "attack" in meta:
                                    for attack_entry in meta["attack"]:
                                        tactic = attack_entry.get("tactic", "")
                                        technique = attack_entry.get("technique", "")
                                        id = attack_entry.get("id", "")
                                        if tactic and technique:
                                            if tactic in attack_dump:
                                                attack_dump[tactic].append((technique, id))
                                            else:
                                                attack_dump[tactic] = [(technique, id)]
                                            tactics.add(tactic)
                                            techniques.add(technique)
                                            techniques_id.add(id)

                                # Process MBC information
                                if "mbc" in meta:
                                    for mbc_entry in meta["mbc"]:
                                        objective = mbc_entry.get("objective", "")
                                        behavior = mbc_entry.get("behavior", "")
                                        id = mbc_entry.get("id", "")
                                        if objective and behavior:
                                            if objective in mbc_dump:
                                                mbc_dump[objective].append((behavior, id))
                                            else:
                                                mbc_dump[objective] = [(behavior, id)]
                                            mbc_objectives.add(objective)
                                            mbc_behaviors.add(behavior)
                                            mbc_behaviors_id.add(id)

            # return {
            #     'capabilities_all': json.dumps(capabilities_all, indent=2),
            #     'capabilities': list(capabilities),
            #     'namespaces': list(namespaces),
            #     'attack': json.dumps(attack, indent=2),
            #     'tactics': list(tactics),
            #     'techniques': list(techniques),
            #     'techniques_id': list(techniques_id),
            #     'mbc': json.dumps(mbc, indent=2),
            #     'mbc_objectives': list(mbc_objectives),
            #     'mbc_behaviors': list(mbc_behaviors),
            #     'mbc_behaviors_id': list(mbc_behaviors_id)
            # }

            capa_dump = self._replace_empty_keys(capa_dump)
            attack_dump = self._replace_empty_keys(attack_dump)
            mbc_dump = self._replace_empty_keys(mbc_dump)
            self.capa = CAPA(
                json.dumps(capa_dump, indent=2),
                list(capabilities),
                list(namespaces),
                json.dumps(attack_dump, indent=2),
                list(tactics),
                list(techniques),
                list(techniques_id),
                json.dumps(mbc_dump, indent=2),
                list(mbc_objectives),
                list(mbc_behaviors),
                list(mbc_behaviors_id),
            )
            self.log.debug(f"CAPA dump: {self.capa})")
            
        except Exception as e:
            self.log.error(f"Unexpected error in CAPA extraction: {str(e)}")
            # Try to clean up any process if possible
            if 'process' in locals() and process.poll() is None:
                try:
                    os.killpg(process.pid, signal.SIGKILL)
                    process.wait()
                except:
                    pass
            return {}

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.capa
        elif exporter_type == "ClickHouseExporter":
            current_time = datetime.now(timezone.utc)
            
            # Prepare data for multiple tables
            tables_data = {
                'multi_table': True,  # Flag for multi-table export
                
                # Raw data table
                'raw': {
                    'table': 'redb_capa',
                    'data': [[
                        self.sha256,
                        self.md5,
                        self.sha1,
                        current_time,
                        self.capa.capa_dump,  # capa_dump
                        self.capa.attack_dump,            # attack_dump
                        self.capa.mbc_dump                # mbc_dump
                    ]],
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'analysis_date',
                        'capa_dump', 'attack_dump', 'mbc_dump'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'DateTime64(3, \'UTC\')',
                        'JSON', 'JSON', 'JSON'
                    ]
                },
                
                # Capabilities table
                'capabilities': {
                    'table': 'redb_capa_capabilities',
                    'data': [
                        [self.sha256, self.md5, self.sha1, current_time, namespace, capability]
                        for namespace, capabilities in json.loads(self.capa.capa_dump).items()
                        for capability in capabilities
                    ],
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'analysis_date',
                        'namespace', 'capability'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'DateTime64(3, \'UTC\')',
                        'LowCardinality(String)', 'LowCardinality(String)'
                    ]
                },
                
                # MITRE ATT&CK table
                'attack': {
                    'table': 'redb_capa_attack',
                    'data': [
                        [self.sha256, self.md5, self.sha1, current_time, 
                         tactic, technique[0], technique[1]]  # technique[0] is the name, technique[1] is the ID
                        for tactic, techniques in json.loads(self.capa.attack_dump).items()
                        for technique in techniques
                    ],
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'analysis_date',
                        'tactic', 'technique', 'technique_id'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'DateTime64(3, \'UTC\')',
                        'LowCardinality(String)', 'LowCardinality(String)', 
                        'LowCardinality(String)'
                    ]
                },
                
                # MBC table
                'mbc': {
                    'table': 'redb_capa_mbc',
                    'data': [
                        [self.sha256, self.md5, self.sha1, current_time,
                         objective, behavior[0], behavior[1]]  # behavior[0] is the name, behavior[1] is the ID
                        for objective, behaviors in json.loads(self.capa.mbc_dump).items()
                        for behavior in behaviors
                    ],
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'analysis_date',
                        'objective', 'behavior', 'behavior_id'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'DateTime64(3, \'UTC\')',
                        'LowCardinality(String)', 'LowCardinality(String)',
                        'LowCardinality(String)'
                    ]
                }
            }
            
            return tables_data

    def get_clickhouse_table(self) -> str:
        return "redb_capa"  # Return the main table name

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            self._extract_capa()
            return self.capa  # Return the extracted data instead of exporting directly
        except Exception as e:
            self.log.error(f"Error extracting CAPA: {e}")
            return None

    def tag(self):
        return Tag.CAPA.value