Kambiz Ghazinour

54 papers A 2B 4C 5Misc 1Journal 11Unranked 30
YearRankTypeTitle / Venue / Authors
2025 C conf
ICCE
Shahrokh Sani, Kambiz Ghazinour
2025 conf
FICC (3)
Shivani Battu, Likhitha Marrapu, Chandini Karrothu, Anuranjani Thota, Hanan Muhajab, Areej Muhajab, Kambiz Ghazinour, Stacy Miner, Betis Baheri, Safa Shubbar
2025 conf
FICC (3)
Abdullah Amberkhani, Harshitha Bolisetty, Ranjith Narasimhaiah, Ghulam Jilani, Betis Baheri, Hanan Muhajab, Areej Muhajab, Kambiz Ghazinour, Safa Shubbar
2024 conf
ICICT
Mehdi Ghayoumi, Kambiz Ghazinour
2024 conf
ICICT
Sangeeta Kumawat, Gideon Sodipo, Deepak Palei, Safa Shubbar, Kambiz Ghazinour
2024 C conf
SEKE
Safa Shubbar, Shivani Ganta, Thejeswar Reddy Timmapuram, Lakshmi Poojitha Vangapalli, Komal Jilkara, Hanan Muhajab, Areej Muhajab, Kambiz Ghazinour, Stacy Miner
2023 J jnl
IEEE Trans. Knowl. Data Eng.
Weilong Ren, Kambiz Ghazinour, Xiang Lian
2023 conf
IWSPA@CODASPY
Jeremy McHatton, Kambiz Ghazinour
2022 B conf
ICCP
Bhaskar Thadisetty, Kambiz Ghazinour, Preoyati Khan
2022 conf
SmartWorld/UIC/ScalCom/DigitalTwin/PriComp/Meta
Zhengyong Ren, Kambiz Ghazinour, Qiang Guan, Sara Bayramzadeh, Yuxin Yang
2022 Misc conf
SEC
Zhengyong Ren, Yuxin Yang, Kambiz Ghazinour, Sara Bayramzadeh, Qiang Guan
2022 J jnl
CoRR
Weilong Ren, Kambiz Ghazinour, Xiang Lian
2021 conf
CCWC
Srikanth Tadisetty, Kambiz Ghazinour
2021 B ed.
DBSec
Ken Barker, Kambiz Ghazinour
2021 J jnl
Inf. Sci.
Weilong Ren, Xiang Lian, Kambiz Ghazinour
2021 J jnl
CoRR
Weilong Ren, Xiang Lian, Kambiz Ghazinour
2021 conf
SIGMOD Conference
Weilong Ren, Xiang Lian, Kambiz Ghazinour
2020 conf
EUSPN/ICTH
Kambiz Ghazinour, Sean Scarnecchia, Jake Rabideau, Blake Pecore
2020 conf
EUSPN/ICTH
Paweena Manotipya, Kambiz Ghazinour
2020 J jnl
CoRR
Roba Darwish, Kambiz Ghazinour
2019 conf
FPS
Muhammad Mohzary, Srikanth Tadisetty, Kambiz Ghazinour
2019 conf
WPES@CCS
Kambiz Ghazinour, Ken Messner, Sean Scarnecchia, David Selinger
2019 J jnl
CoRR
Weilong Ren, Xiang Lian, Kambiz Ghazinour
2019 A conf
CIKM
Weilong Ren, Xiang Lian, Kambiz Ghazinour
2019 conf
BICS
Tahani Albalawi, Kambiz Ghazinour, Austin Melton
2019 J jnl
CoRR
Weilong Ren, Xiang Lian, Kambiz Ghazinour
2019 J jnl
VLDB J.
Weilong Ren, Xiang Lian, Kambiz Ghazinour
2019 conf
FPS
Emil Shirima, Kambiz Ghazinour
2018 J jnl
CoRR
Tahani Albalawi, Kambiz Ghazinour, Austin Melton
2017 conf
EUSPN/ICTH
Kambiz Ghazinour, Emil Shirima, Vijayasimha Reddy Parne, Abhilash BhoomReddy
2017 conf
EUSPN/ICTH
Kambiz Ghazinour, John Ponchak
2017 conf
EUSPN/ICTH
Jayakrishnan Ajayakumar, Kambiz Ghazinour
2017 conf
CCWC
Omar Alaql, Kambiz Ghazinour, Cheng-Chang Lu
2016 conf
EUSPN/ICTH
Kambiz Ghazinour, Wesley Delp, Jimmy Gross, Ali Taheri Moghadam, Timothy Strawbridge, Jake Tobin
2016 conf
DASC/PiCom/DataCom/CyberSciTech
Kambiz Ghazinour, Tahani Albalawi
2016 C conf
ISM
Omar Alaql, Kambiz Ghazinour, Cheng Chang
2016 J jnl
CoRR
Kambiz Ghazinour, Stan Matwin, Marina Sokolova
2015 conf
IPAC
Kambiz Ghazinour, Mehdi Ghayoumi
2015 C conf
ICIS
Mehdi Ghayoumi, Kambiz Ghazinour
2015 C conf
ICIS
Kambiz Ghazinour, Mehdi Ghayoumi
2015 J jnl
CoRR
Kambiz Ghazinour, Mehdi Ghayoumi
2014 conf
EUSPN/ICTH
Kambiz Ghazinour, Amir Hossein Razavi, Ken Barker
2013 conf
EDBT/ICDT Workshops
Kambiz Ghazinour, Ken Barker
2013 conf
Canadian AI
Kambiz Ghazinour, Marina Sokolova, Stan Matwin
2013 conf
EDBT/ICDT Workshops
Kambiz Ghazinour, Stan Matwin, Marina Sokolova
2013 B conf
CBMS
Amir Hossein Razavi, Kambiz Ghazinour
2011 conf
PAIS
Kambiz Ghazinour, Ken Barker
2010 conf
EDBT/ICDT Workshops
Leanne Wu, Maryam Majedi, Kambiz Ghazinour, Ken Barker
2010 ch.
From Sociology to Computing in Social Networks
Kambiz Ghazinour, Sampson Pun, Maryam Majedi, Amir H. Chinaei, Ken Barker
2009 conf
BNCOD
Ken Barker, Mina Askari, Mishtu Banerjee, Kambiz Ghazinour, Brenan Mackas, Maryam Majedi, Sampson Pun, Adepele Williams
2009 conf
CSE (3)
Kambiz Ghazinour, Maryam Majedi, Ken Barker
2009 conf
COMPSAC (2)
Kambiz Ghazinour, Maryam Majedi, Ken Barker
2009 B conf
ASONAM
Maryam Majedi, Kambiz Ghazinour, Amir H. Chinaei, Ken Barker
2008 A conf
IPDPS
Kambiz Ghazinour, Ruth E. Shaw, Eric E. Aubanel, Lawrence E. Garey
redb/extractors/elf_extractors/elf_dependencies.py
← Index redb/extractors/elf_extractors/elf_dependencies.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Dict

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFDependency


class ELFDependencyExtractor(ELFExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        elf=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            elf,
        )
        self.elf_dependencies = []
        self.elastic_index = self.index_prefix + "-elf_dependencies"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _map_dependency_type(self, dt_tag_str: str) -> int:
        """Map dynamic tag string to enum value."""
        type_map = {
            'DT_NEEDED': 1,
            'DT_SONAME': 14,
            'DT_RPATH': 15,
            'DT_RUNPATH': 29
        }
        return type_map.get(dt_tag_str, 0)

    def _extract_dynamic_dependencies(self, elf) -> List[Dict]:
        """Extract dependencies from the dynamic section."""
        dependencies = []

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                self.log.debug("No .dynamic section found")
                return dependencies

            # Iterate through dynamic tags
            for tag in dynamic_section.iter_tags():
                dt_tag = tag.entry.d_tag

                # Handle different dependency types
                if dt_tag == 'DT_NEEDED':
                    # Required library
                    dependency_name = tag.needed
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_NEEDED'),
                        dependency_type_str='NEEDED'
                    ))

                elif dt_tag == 'DT_SONAME':
                    # Shared object name
                    dependency_name = tag.soname
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_SONAME'),
                        dependency_type_str='SONAME'
                    ))

                elif dt_tag == 'DT_RPATH':
                    # Runtime library search path
                    dependency_name = tag.rpath
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_RPATH'),
                        dependency_type_str='RPATH'
                    ))

                elif dt_tag == 'DT_RUNPATH':
                    # Runtime library search path (newer)
                    dependency_name = tag.runpath
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_RUNPATH'),
                        dependency_type_str='RUNPATH'
                    ))

        except Exception as e:
            self.log.error(f"Error extracting dynamic dependencies: {e}")

        return dependencies

    def tag(self):
        return Tag.ELF_DEPENDENCIES.value if hasattr(Tag, 'ELF_DEPENDENCIES') else "elf_dependencies"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_data(elf):
                # Extract dependencies - returns list of ELFDependency dataclasses
                dependencies = self._extract_dynamic_dependencies(elf)
                return dependencies

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_dependencies = result
            return self.elf_dependencies

        except Exception as e:
            self.log.error(f"Error extracting ELF dependencies {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_dependencies
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no dependencies (e.g., statically linked binary)
                # None is reserved for actual errors

                # Prepare data arrays for all dependencies
                data = []
                current_time = datetime.now(timezone.utc)
                for dep in self.elf_dependencies:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        dep.dependency_name,
                        dep.dependency_type,
                        dep.dependency_type_str,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'dependency_name', 'dependency_type', 'dependency_type_str',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'LowCardinality(String)',
                    "Enum8('NEEDED'=1, 'SONAME'=14, 'RPATH'=15, 'RUNPATH'=29)",
                    'LowCardinality(String)',
                    'DateTime64(3, \'UTC\')'
                ]

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

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