Indra Rajasingh

73 papers B 2C 2Misc 1Journal 63Unranked 5
YearRankTypeTitle / Venue / Authors
2025 J jnl
RAIRO Theor. Informatics Appl.
J. Anitha, Indra Rajasingh, Hossein Rashmanlou
2025 J jnl
RAIRO Oper. Res.
J. Anitha, Indra Rajasingh, R. Sundara Rajan, Hossein Rashmanlou
2025 J jnl
J. Interconnect. Networks
R. Stalin Mary, Indra Rajasingh
2024 J jnl
J. Comb. Optim.
Debajyoti Mondal, N. Parthiban, Indra Rajasingh
2023 J jnl
RAIRO Oper. Res.
R. Sundara Rajan, S. Arulanand, Savari Prabhu, Indra Rajasingh
2022 J jnl
Theor. Comput. Sci.
Debajyoti Mondal, Angelin Jemima Rajasingh, N. Parthiban, Indra Rajasingh
2022 Misc conf
FAW
Debajyoti Mondal, N. Parthiban, Indra Rajasingh
2022 J jnl
CoRR
Debajyoti Mondal, N. Parthiban, Indra Rajasingh
2021 B conf
WALCOM
Debajyoti Mondal, N. Parthiban, V. Kavitha, Indra Rajasingh
2021 J jnl
Fundam. Informaticae
G. Jessy Sujana, T. M. Rajalaxmi, Indra Rajasingh, R. Sundara Rajan
2021 J jnl
Int. J. Comput. Math. Comput. Syst. Theory
S. Maria Jesu Raja, Indra Rajasingh, Antony Xavier
2021 J jnl
Int. J. Comput. Math. Comput. Syst. Theory
R. Stalin Mary, N. Parthiban, Indra Rajasingh, Paul D. Manuel
2021 J jnl
Appl. Math. Comput.
Jane Olive Sharon, T. M. Rajalaxmi, Sandi Klavzar, R. Sundara Rajan, Indra Rajasingh
2020 J jnl
Appl. Math. Comput.
Sandi Klavzar, Indra Rajasingh, D. Ahima Emilet
2020 J jnl
CoRR
Debajyoti Mondal, N. Parthiban, V. Kavitha, Indra Rajasingh
2020 J jnl
Discret. Appl. Math.
Indra Rajasingh, R. Jayagopal, R. Sundara Rajan
2020 J jnl
Symmetry
G. Kirithiga Nandini, R. Sundara Rajan, A. Arul Shantrinal, T. M. Rajalaxmi, Indra Rajasingh, Krishnan Balasubramanian
2018 J jnl
Appl. Math. Comput.
Sandi Klavzar, D. Azubha Jemilet, Indra Rajasingh, Paul D. Manuel, N. Parthiban
2017 J jnl
Discuss. Math. Graph Theory
R. Sundara Rajan, R. Jayagopal, Paul D. Manuel, Mirka Miller, Indra Rajasingh
2017 J jnl
Int. J. Netw. Virtual Organisations
A. Berin Greeni, Indra Rajasingh
2017 J jnl
Ars Comb.
R. Sundara Rajan, Indra Rajasingh, Micheal Arockiaraj, T. M. Rajalaxmi, B. Mahavir
2017 J jnl
Ars Comb.
Indra Rajasingh, R. Sundara Rajan
2017 J jnl
Int. J. Netw. Virtual Organisations
N. Parthiban, Joe Ryan, Indra Rajasingh, R. Sundara Rajan, L. Nirmala Rani
2017 J jnl
Int. J. Comput. Math. Comput. Syst. Theory
S. Maria Jesu Raja, Antony Xavier, Indra Rajasingh
2016 conf
CALDAM
R. Jayagopal, Indra Rajasingh, R. Sundara Rajan
2016 J jnl
Math. Comput. Sci.
P. Sivagami, Indra Rajasingh
2016 J jnl
Ars Comb.
Indra Rajasingh, Bharati Rajan, Joice Punitha, Paul D. Manuel
2016 J jnl
Comput. J.
Indra Rajasingh, Paul D. Manuel, N. Parthiban, D. Azubha Jemilet, R. Sundara Rajan
2015 J jnl
Parallel Process. Lett.
Indra Rajasingh, R. Sundara Rajan, Paul D. Manuel
2015 J jnl
Comput. J.
R. Sundara Rajan, Paul D. Manuel, Indra Rajasingh, N. Parthiban, Mirka Miller
2015 conf
CALDAM
Paul D. Manuel, Indra Rajasingh, R. Sundara Rajan, N. Parthiban, T. M. Rajalaxmi
2015 J jnl
J. Discrete Algorithms
Indra Rajasingh, R. Sundara Rajan, N. Parthiban, T. M. Rajalaxmi
2015 J jnl
Discret. Optim.
Micheal Arockiaraj, Jasintha Quadras, Indra Rajasingh, Arul Jeya Shalini
2015 J jnl
J. Graph Algorithms Appl.
R. Sundara Rajan, Paul D. Manuel, Indra Rajasingh
2015 J jnl
J. Discrete Algorithms
Indra Rajasingh, A. S. Shanthi, Albert Muthumalai
2015 J jnl
Math. Comput. Sci.
Mirka Miller, Bharati Rajan, Indra Rajasingh
2015 J jnl
Math. Comput. Sci.
Indra Rajasingh, Micheal Arockiaraj, Jasintha Quadras, Arul Jeya Shalini
2015 J jnl
Discret. Math. Algorithms Appl.
R. Sundara Rajan, Indra Rajasingh, Paul D. Manuel, Mirka Miller, T. M. Rajalaxmi
2015 J jnl
Comput. J.
Mirka Miller, R. Sundara Rajan, N. Parthiban, Indra Rajasingh
2015 J jnl
Math. Comput. Sci.
Indra Rajasingh, V. Annamma
2014 J jnl
Theor. Comput. Sci.
R. Sundara Rajan, Indra Rajasingh, N. Parthiban, T. M. Rajalaxmi
2014 C conf
IWOCA
R. Sundara Rajan, Indra Rajasingh, Paul D. Manuel, T. M. Rajalaxmi, N. Parthiban
2014 J jnl
Discret. Appl. Math.
Micheal Arockiaraj, Jasintha Quadras, Indra Rajasingh, Arul Jeya Shalini
2014 J jnl
CoRR
Tanmay Sinha, Indra Rajasingh
2014 J jnl
Int. J. Comput. Math.
Bharati Rajan, Indra Rajasingh, Jude Annie Cynthia, Paul D. Manuel
2014 J jnl
Ars Comb.
Bharati Rajan, Indra Rajasingh, P. Venugopal, Chris Monica M.
2013 J jnl
J. Comb. Optim.
Indra Rajasingh, Paul D. Manuel, Micheal Arockiaraj, Bharati Rajan
2013 J jnl
Discret. Math. Theor. Comput. Sci.
Paul D. Manuel, Bharati Rajan, Indra Rajasingh, P. Vasanthi Beulah
2013 J jnl
J. Interconnect. Networks
Indra Rajasingh, Micheal Arockiaraj
2013 J jnl
Theor. Comput. Sci.
Indra Rajasingh, Bharati Rajan, Albert Muthumalai, A. S. Shanthi
2012 J jnl
J. Interconnect. Networks
Paul D. Manuel, Indra Rajasingh, R. Sundara Rajan
2012 J jnl
Inf. Process. Lett.
Indra Rajasingh, Bharati Rajan, R. Sundara Rajan
2012 J jnl
Int. J. Comput. Math.
Indra Rajasingh, Bharati Rajan, R. Sundara Rajan
2012 conf
DICTAP
Bharati Rajan, Indra Rajasingh, Cyriac Grigorious, Sudeep Stephen
2012 J jnl
Inf. Process. Lett.
Indra Rajasingh, Micheal Arockiaraj, Bharati Rajan, Paul D. Manuel
2012 conf
DICTAP
Bharati Rajan, Indra Rajasingh, Sudeep Stephen, Cyriac Grigorious
2012 J jnl
Discret. Appl. Math.
Indra Rajasingh, Paul D. Manuel, Bharati Rajan, Micheal Arockiaraj
2011 J jnl
J. Interconnect. Networks
Indra Rajasingh, Micheal Arockiaraj, Bharati Rajan, Paul D. Manuel
2011 J jnl
Discret. Appl. Math.
Paul D. Manuel, Micheal Arockiaraj, Indra Rajasingh, Bharati Rajan
2011 J jnl
Ars Comb.
Paul D. Manuel, Bharati Rajan, Indra Rajasingh, Chris Monica M.
2011 J jnl
Math. Comput. Sci.
Indra Rajasingh, Micheal Arockiaraj
2011 J jnl
Ars Comb.
Paul D. Manuel, Indra Rajasingh
2011 J jnl
Inf. Process. Lett.
Micheal Arockiaraj, Paul D. Manuel, Indra Rajasingh, Bharati Rajan
2009 J jnl
Discret. Appl. Math.
Paul D. Manuel, Indra Rajasingh, Bharati Rajan, Helda Mercy
2009 C conf
IWOCA
Paul D. Manuel, Indra Rajasingh, Bharati Rajan, Joice Punitha
2008 J jnl
J. Discrete Algorithms
Paul D. Manuel, Mostafa I. Abd-El-Barr, Indra Rajasingh, Bharati Rajan
2008 J jnl
J. Discrete Algorithms
Paul D. Manuel, Bharati Rajan, Indra Rajasingh, Chris Monica M.
2006 conf
FCS
Paul D. Manuel, Indra Rajasingh, Bharati Rajan, Albert Muthumalai
2004 J jnl
Networks
Indra Rajasingh, Albert William, Jasintha Quadras, Paul D. Manuel
2004 J jnl
Ars Comb.
S. Arumugam, Indra Rajasingh, P. Roushini Leely Pushpam
2003 J jnl
Electron. Notes Discret. Math.
Albert William, Indra Rajasingh, Jasintha Quadras, Paul D. Manuel
2003 B conf
WG
Paul D. Manuel, Bharati Rajan, Indra Rajasingh, Amutha Alaguvel
2001 J jnl
Discret. Math.
S. Arumugam, Indra Rajasingh, P. Roushini Leely Pushpam
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