Malte Schilling

76 papers A* 2A 3B 13Journal 30Unranked 24
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Victoria Hankemeier, Malte Schilling
2025 conf
FLLM
Elias-Leander Ahlers, Malte Schilling
2025 J jnl
CoRR
Elias-Leander Ahlers, Witold Brunsmann, Malte Schilling
2025 conf
FLLM
Jens Wienkamp, Malte Schilling
2025 B conf
IJCNN
Victoria Hankemeier, Malte Schilling
2025 J jnl
CoRR
Victoria Hankemeier, Malte Schilling
2024 conf
CLAWAR (2)
Matthias Hering, Simon Höving, Malte Schilling
2024 J jnl
CoRR
Sebastian Kahl, Felix Löffler, Martin Maciol, Fabian Ridder, Marius Schmitz, Jennifer Spanagel, Jens Wienkamp, Christopher Burgahn, Malte Schilling
2024 J jnl
Cogn. Comput.
Malte Schilling, Barbara Hammer, Frank W. Ohl, Helge J. Ritter, Laurenz Wiskott
2024 J jnl
CoRR
Fabian Ridder, Malte Schilling
2023 conf
xAI (1)
Dimitry Mindlin, Malte Schilling, Philipp Cimiano
2023 B conf
IJCNN
Luca Hermes, Aleksei Liuliakov, Malte Schilling
2023 J jnl
PLoS Comput. Biol.
Malte Schilling, Holk Cruse
2022 B conf
IJCNN
Luca Hermes, Barbara Hammer, Andrew Melnik, Riza Velioglu, Markus Vieth, Malte Schilling
2022 J jnl
CoRR
Luca Hermes, Barbara Hammer, Andrew Melnik, Riza Velioglu, Markus Vieth, Malte Schilling
2022 conf
CLAWAR
Janneke Simmering, Luca Hermes, Axel Schneider, Malte Schilling
2022 J jnl
IEEE Trans. Robotics
Malte Schilling, Jan Paskarbeit, Helge J. Ritter, Axel Schneider, Holk Cruse
2022 conf
LOD (2)
Wadhah Zai El Amri, Luca Hermes, Malte Schilling
2022 J jnl
CoRR
Wadhah Zai El Amri, Luca Hermes, Malte Schilling
2022 J jnl
CoRR
Christian Eichenberger, Moritz Neun, Henry Martin, Pedro Herruzo, Markus Spanring, Yichao Lu, Sungbin Choi, Vsevolod Konyakhin, Nina Lukashina, Aleksei Shpilman, Nina Wiedemann, Martin Raubal, Bo Wang, Hai Le Vu, Reza Mohajerpoor, Chen Cai, Inhi Kim, Luca Hermes, Andrew Melnik, Riza Velioglu, Markus Vieth, Malte Schilling, Alabi Bojesomo, Hasan Al-Marzouqi, Panos Liatsis, Jay Santokhi, Dylan Hillier, Yiming Yang, Joned Sarwar, Anna Jordan, Emil Hewage, David Jonietz, Fei Tang, Aleksandra Gruca, Michael Kopp, David P. Kreil, Sepp Hochreiter
2021 B conf
ESANN
Luca Hermes, Barbara Hammer, Malte Schilling
2021 J jnl
CoRR
Luca Hermes, Barbara Hammer, Malte Schilling
2021 conf
ICANN (4)
Malte Schilling
2021
Malte Schilling
2021 J jnl
Neural Networks
Malte Schilling, Andrew Melnik, Frank W. Ohl, Helge J. Ritter, Barbara Hammer
2021 conf
SSCI
André Artelt, Valerie Vaquet, Riza Velioglu, Fabian Hinder, Johannes Brinkrolf, Malte Schilling, Barbara Hammer
2021 conf
SSCI
Malte Schilling, Christopher Burgahn, Rebecca Fortmann
2021 conf
OLA
Luca Lach, Timo Korthals, Francesco Ferro, Helge J. Ritter, Malte Schilling
2021 conf
NeurIPS (Competition and Demos)
Christian Eichenberger, Moritz Neun, Henry Martin, Pedro Herruzo, Markus Spanring, Yichao Lu, Sungbin Choi, Vsevolod Konyakhin, Nina Lukashina, Aleksei Shpilman, Nina Wiedemann, Martin Raubal, Bo Wang, Hai Le Vu, Reza Mohajerpoor, Chen Cai, Inhi Kim, Luca Hermes, Andrew Melnik, Riza Velioglu, Markus Vieth, Malte Schilling, Alabi Bojesomo, Hasan Al-Marzouqi, Panos Liatsis, Jay Santokhi, Dylan Hillier, Yiming Yang, Joned Sarwar, Anna Jordan, Emil Hewage, David Jonietz, Fei Tang, Aleksandra Gruca, Michael Kopp, David P. Kreil, Sepp Hochreiter
2020 A conf
IROS
Malte Schilling, Kai Konen, Frank W. Ohl, Timo Korthals
2020 J jnl
CoRR
Malte Schilling, Kai Konen, Frank W. Ohl, Timo Korthals
2020 J jnl
PLoS Comput. Biol.
Malte Schilling, Holk Cruse
2020 J jnl
Frontiers Artif. Intell.
Sharada Prasanna Mohanty, Jakub Czakon, Kamil A. Kaczmarek, Andrzej Pyskir, Piotr Tarasiewicz, Saket Kunwar, Janick Rohrbach, Dave Luo, Manjunath Prasad, Sascha Fleer, Jan Philip Göpfert, Akshat Tandon, Guillaume Mollard, Nikhil Rayaprolu, Marcel Salathé, Malte Schilling
2020 J jnl
IEEE Trans. Cogn. Dev. Syst.
Malte Schilling, Katharina J. Rohlfing, Paul Vogt, Chen Yu, Michael Spranger
2020 conf
LOD (2)
Nicolas Bach, Andrew Melnik, Malte Schilling, Timo Korthals, Helge J. Ritter
2020 conf
BioRob
Malte Schilling, Kai Konen, Timo Korthals
2019 J jnl
CoRR
Timo Korthals, Malte Schilling, Jürgen Leitner
2019 J jnl
Frontiers Neurorobotics
Malte Schilling, Wolfram Burgard, Katharina Muelling, Britta Wrede, Helge J. Ritter
2019 B conf
SMC
Malte Schilling, Helge J. Ritter, Frank W. Ohl
2019 J jnl
CoRR
Malte Schilling, Helge J. Ritter, Frank W. Ohl
2019 B conf
IJCNN
Malte Schilling
2019 J jnl
Frontiers Neurorobotics
Volker Dürr, Paolo Arena, Holk Cruse, Chris J. Dallmann, Alin Drimus, Thierry Hoinville, Tammo Krause, Stefan Mátéfi-Tempfli, Jan Paskarbeit, Luca Patanè, Mattias Schäffersmann, Malte Schilling, Josef Schmitz, Roland Strauss, Leslie Theunissen, Alessandra Vitanza, Axel Schneider
2019 J jnl
CoRR
Andrew Melnik, Sascha Fleer, Malte Schilling, Helge J. Ritter
2019 B conf
IJCNN
Malte Schilling
2019 J jnl
CoRR
Malte Schilling
2018 J jnl
CoRR
Lukasz Kidzinski, Sharada Prasanna Mohanty, Carmichael F. Ong, Zhewei Huang, Shuchang Zhou, Anton Pechenko, Adam Stelmaszczyk, Piotr Jarosik, Mikhail Pavlov, Sergey Kolesnikov, Sergey M. Plis, Zhibo Chen, Zhizheng Zhang, Jiale Chen, Jun Shi, Zhuobin Zheng, Chun Yuan, Zhihui Lin, Henryk Michalewski, Piotr Milos, Blazej Osinski, Andrew Melnik, Malte Schilling, Helge J. Ritter, Sean F. Carroll, Jennifer L. Hicks, Sergey Levine, Marcel Salathé, Scott L. Delp
2018 J jnl
Frontiers Comput. Neurosci.
Volker Dürr, Malte Schilling
2017 J jnl
Frontiers Neurorobotics
Malte Schilling, Holk Cruse
2016 conf
BICA
Malte Schilling
2016 conf
ICDL-EPIROB
Phillip Lücking, Katharina J. Rohlfing, Britta Wrede, Malte Schilling
2016 conf
Living Machines
Jan Paskarbeit, Marc Otto, Malte Schilling, Axel Schneider
2016 conf
AAAI Fall Symposia
Malte Schilling, Stefan Kopp, Sven Wachsmuth, Britta Wrede, Helge J. Ritter, Thomas Brox, Bernhard Nebel, Wolfram Burgard
2015 A* conf
ICRA
Jan Paskarbeit, Malte Schilling, Josef Schmitz, Axel Schneider
2015 B conf
IJCNN
Manuel Baum, Martin Meier, Malte Schilling
2014 conf
Living Machines
Holk Cruse, Malte Schilling
2014 conf
Living Machines
Axel Schneider, Jan Paskarbeit, Malte Schilling, Josef Schmitz
2013 J jnl
Frontiers Comput. Neurosci.
Malte Schilling, Jan Paskarbeit, Thierry Hoinville, Arne Hüffmeier, Axel Schneider, Josef Schmitz, Holk Cruse
2013 conf
AAAI Spring Symposium: Designing Intelligent Robots
Malte Schilling, Srini Narayanan
2013 J jnl
Biol. Cybern.
Malte Schilling, Thierry Hoinville, Josef Schmitz, Holk Cruse
2012 B conf
IJCNN
Malte Schilling, Jan Paskarbeit, Axel Schneider, Holk Cruse
2012 ch.
Language Grounding in Robots
Malte Schilling
2012 A conf
IROS
Malte Schilling, Jan Paskarbeit, Josef Schmitz, Axel Schneider, Holk Cruse
2011 conf
ECAL
Holk Cruse, Malte Schilling
2011 B conf
IJCNN
Malte Schilling
2011 conf
ECAL
Malte Schilling
2011 J jnl
Auton. Robots
Malte Schilling
2010 B conf
IJCNN
Malte Schilling
2010 B conf
IJCNN
Holk Cruse, Malte Schilling
2009 ch.
Spatial Temporal Patterns for Action-Oriented Perception in Roving Robots
Holk Cruse, Volker Dürr, Malte Schilling, Josef Schmitz
2009 ch.
Spatial Temporal Patterns for Action-Oriented Perception in Roving Robots
Holk Cruse, Volker Dürr, Malte Schilling, Josef Schmitz
2008 A conf
IROS
Malte Schilling, Axel Schneider, Holk Cruse, Josef Schmitz
2007 J jnl
Biol. Cybern.
Malte Schilling, Holk Cruse, Paolo Arena
2007 B conf
IJCNN
Malte Schilling, Holk Cruse
2006 conf
ZiF Workshop
Malte Schilling, Holk Cruse
2005 A* conf
VR
Guido Heumer, Malte Schilling, Marc Erich Latoschik
2003 conf
Computer Graphics and Imaging
Marc Erich Latoschik, Malte Schilling
redb/extractors/malcontent.py
← Index redb/extractors/malcontent.py python
import inspect
import json
import subprocess
from typing import Any
from datetime import datetime, timezone

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

load_dotenv(override=True)


class MalcontentExtractor(Extractor):
    """
    Extractor for malcontent tool from chainguard-dev/malcontent.

    Malcontent discovers supply-chain compromises through context, differential
    analysis, and 14,000+ YARA rules. It analyzes binaries and code to detect
    malicious content and suspicious behavioral patterns.

    Binary can be extracted from Docker image:
        docker cp $(docker create cgr.dev/chainguard/malcontent:latest):/usr/bin/mal /usr/local/bin/mal

    Stores full JSON output for materialized view extraction.
    """

    # Cache version at class level to avoid repeated subprocess calls
    _cached_version = None

    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.malcontent = None

    @classmethod
    def _get_malcontent_version(cls, log) -> str:
        """Get malcontent version, cached at class level."""
        if cls._cached_version is not None:
            return cls._cached_version

        malcontent_path = os.getenv("MALCONTENT_PATH", "/usr/local/bin/mal")
        try:
            result = subprocess.run(
                [malcontent_path, "--version"],
                capture_output=True,
                text=True,
                timeout=10
            )
            version_output = result.stdout.strip()
            if result.returncode == 0 and version_output:
                # Parse "malcontent version v1.21.5" -> "1.21.5"
                if version_output.startswith("malcontent version v"):
                    version_output = version_output[len("malcontent version v"):]
                elif version_output.startswith("malcontent version "):
                    version_output = version_output[len("malcontent version "):]
                cls._cached_version = version_output
            else:
                cls._cached_version = "unknown"
        except Exception as e:
            log.warning(f"Could not get malcontent version: {e}")
            cls._cached_version = "unknown"

        return cls._cached_version

    def _extract_malcontent(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        TIMEOUT = int(os.getenv("MALCONTENT_TIMEOUT", "300"))
        malcontent_path = os.getenv("MALCONTENT_PATH", "/usr/local/bin/mal")

        malcontent_command = [malcontent_path, "analyze", "--format=json", self.filepath]

        import signal

        try:
            process = subprocess.Popen(
                malcontent_command,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid
            )

            try:
                stdout, stderr = process.communicate(timeout=TIMEOUT)
                if process.returncode != 0:
                    self.log.error(f"Error running malcontent, return code: {process.returncode}, stderr: {stderr}")
                    return {}
            except subprocess.TimeoutExpired:
                self.log.warning(f"The malcontent command timed out after {TIMEOUT} seconds, terminating process group")
                try:
                    os.killpg(process.pid, signal.SIGTERM)
                    try:
                        process.wait(timeout=3)
                    except subprocess.TimeoutExpired:
                        self.log.warning("Process didn't terminate with SIGTERM, sending SIGKILL")
                        os.killpg(process.pid, signal.SIGKILL)
                    process.wait()
                except (ProcessLookupError, OSError) as e:
                    self.log.warning(f"Error while killing process: {e}")
                return {}

            try:
                malcontent_output = json.loads(stdout)
            except json.JSONDecodeError as e:
                self.log.error(f"Error parsing malcontent output: {e}")
                return {}

            # Unwrap the Files/<path> structure to get the inner content
            # Structure is: {"Files": {"/path/to/file": {<actual content>}}}
            files_dict = malcontent_output.get("Files", {})
            if not files_dict:
                self.log.warning("Malcontent output has no 'Files' key")
                return {}

            # Get the first (and only) file's content
            file_content = next(iter(files_dict.values()), {})
            if not file_content:
                self.log.warning("Malcontent output has empty file content")
                return {}

            # Extract risk score and level from the unwrapped content
            risk_score = file_content.get("RiskScore", 0)
            risk_level = file_content.get("RiskLevel", "")

            version = self._get_malcontent_version(self.log)

            self.malcontent = Malcontent(
                malcontent_dump=json.dumps(file_content),
                version=version,
                risk_score=risk_score,
                risk_level=risk_level
            )
            self.log.debug(f"Malcontent analysis complete, version={version}, risk={risk_level}({risk_score})")

        except Exception as e:
            self.log.error(f"Unexpected error in malcontent extraction: {str(e)}")
            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 == "ClickHouseExporter":
            current_time = datetime.now(timezone.utc)

            data = [[
                self.sha256,
                current_time,
                self.malcontent.version,
                self.malcontent.risk_score,
                self.malcontent.risk_level,
                self.malcontent.malcontent_dump
            ]]

            column_names = [
                'sha256', 'analysis_date',
                'malcontent_version', 'malcontent_risk_score', 'malcontent_risk_level',
                'malcontent_json'
            ]

            column_type_names = [
                'FixedString(64)',
                'DateTime64(3, \'UTC\')',
                'LowCardinality(String)', 'UInt8', 'LowCardinality(String)',
                'JSON'
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_malcontent"

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            self._extract_malcontent()
            return self.malcontent
        except Exception as e:
            self.log.error(f"Error extracting malcontent: {e}")
            return None

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