Ran Libeskind-Hadas

63 papers A* 3A 5B 5C 1Journal 38Unranked 10
YearRankTypeTitle / Venue / Authors
2024 J jnl
Inroads
Carla E. Brodley, Valerie Barr, Elsa Gunter, Mark Guzdial, Ran Libeskind-Hadas, Bill Z. Manaris
2024 J jnl
J. Comput. Biol.
Ran Libeskind-Hadas
2023 J jnl
BMC Bioinform.
Nuo Liu, Tonatiuh A. Gonzalez, Jacob Fischer, Chan Hong, Michelle Johnson, Ross Mawhorter, Fabrizia Mugnatto, Rachael Soh, Shifa Somji, Joseph S. Wirth, Ran Libeskind-Hadas, Eliot C. Bush
2022 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Matthew LeMay, Ran Libeskind-Hadas, Yi-Chieh Wu
2022 conf
ISBRA
Jingyi Liu, I. Duan, Santi Santichaivekin, Ran Libeskind-Hadas
2021 A conf
SIGCSE
Zachary Dodds, Malia Morgan, Lindsay Popowski, Henry Coxe, Caroline Coxe, Kewei Zhou, Eliot C. Bush, Ran Libeskind-Hadas
2021 J jnl
BMC Bioinform.
Jingyi Liu, Ross Mawhorter, Nuo Liu, Santi Santichaivekin, Eliot C. Bush, Ran Libeskind-Hadas
2021 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Haoxing Du, Yi Sheng Ong, Marina Knittel, Ross Mawhorter, Nuo Liu, Gianluca Gross, Reiko Tojo, Ran Libeskind-Hadas, Yi-Chieh Wu
2021 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Melissa Grueter, Kalani Duran, Ramya Ramalingam, Ran Libeskind-Hadas
2021 C conf
WABI
Matthew LeMay, Yi-Chieh Wu, Ran Libeskind-Hadas
2021 J jnl
Bioinform.
Santi Santichaivekin, Qing Yang, Jingyi Liu, Ross Mawhorter, Justin Jiang, Trenton Wesley, Yi-Chieh Wu, Ran Libeskind-Hadas
2020 A conf
SIGCSE
Robert H. Sloan, Valerie Barr, Heather Bort, Mark Guzdial, Ran Libeskind-Hadas, Richard Warner
2020 J jnl
CoRR
Rajeev Alur, Richard G. Baraniuk, Rastislav Bodík, Ann W. Drobnis, Sumit Gulwani, Bjoern Hartmann, Yasmin B. Kafai, Jeff Karpicke, Ran Libeskind-Hadas, Debra J. Richardson, Armando Solar-Lezama, Candace Thille, Moshe Y. Vardi
2019 J jnl
BMC Bioinform.
Santi Santichaivekin, Ross Mawhorter, Ran Libeskind-Hadas
2019 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Jordan Haack, Eli Zupke, Andrew Ramirez, Yi-Chieh Wu, Ran Libeskind-Hadas
2019 J jnl
BMC Bioinform.
Ross Mawhorter, Ran Libeskind-Hadas
2019 J jnl
BMC Bioinform.
Ross Mawhorter, Nuo Liu, Ran Libeskind-Hadas, Yi-Chieh Wu
2018 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Weiyun Ma, Dmitriy Smirnov, Juliet Forman, A. Schweickart, C. Slocum, S. Srinivasan, Ran Libeskind-Hadas
2018 conf
AlCoB
Ricson Cheng, Matthew Dohlen, Chen Pekker, Gabriel Quiroz, Jincheng Wang, Ran Libeskind-Hadas, Yi-Chieh Wu
2017 conf
AlCoB
Alex Ozdemir, Michael Sheely, Daniel Bork, Ricson Cheng, Reyna Hulett, Jean Sung, Jincheng Wang, Ran Libeskind-Hadas
2017 J jnl
BMC Bioinform.
Weiyun Ma, Dmitriy Smirnov, Ran Libeskind-Hadas
2017 J jnl
Algorithms Mol. Biol.
Daniel Bork, Ricson Cheng, Jincheng Wang, Jean Sung, Ran Libeskind-Hadas
2015 J jnl
J. Comput. Sci. Coll.
Eliot C. Bush, Ran Libeskind-Hadas
2015 conf
CSCW Companion
Nancy M. Amato, Ran Libeskind-Hadas, Panagiotis Takis Metaxas
2015 J jnl
Computer
Susanne E. Hambrusch, Ran Libeskind-Hadas
2015 J jnl
Commun. ACM
Susanne E. Hambrusch, Ran Libeskind-Hadas, Eric Aaron
2014 J jnl
Bioinform.
Ran Libeskind-Hadas, Yi-Chieh Wu, Mukul S. Bansal, Manolis Kellis
2013 A conf
SIGCSE
Ran Libeskind-Hadas
2013 J jnl
Briefings Bioinform.
Ran Libeskind-Hadas, Eliot C. Bush
2013 A conf
SIGCSE
Andrea Danyluk, Nancy M. Amato, Ran Libeskind-Hadas, Lori L. Pollock, Susan H. Rodger
2012 B conf
ITiCSE
Zachary Dodds, Ran Libeskind-Hadas, Eliot C. Bush
2012 J jnl
Inroads
Christine Alvarado, Zachary Dodds, Ran Libeskind-Hadas
2011 J jnl
J. Comput. Sci. Coll.
Zachary Dodds, Ran Libeskind-Hadas, Eliot C. Bush
2011 J jnl
J. Comput. Biol.
Yaniv Ovadia, Daniel Fielder, Chris Conow, Ran Libeskind-Hadas
2010 J jnl
Algorithms Mol. Biol.
Chris Conow, Daniel Fielder, Yaniv Ovadia, Ran Libeskind-Hadas
2010 B conf
ITiCSE
Zachary Dodds, Ran Libeskind-Hadas, Eliot C. Bush
2009 conf
ICC
Kevin Corcoran, Seth R. Flaxman, Mark Neyer, Peter Scherpelz, Craig Weidert, Ran Libeskind-Hadas
2009 J jnl
J. Comput. Biol.
Ran Libeskind-Hadas, Michael A. Charleston
2008 J jnl
IEEE/ACM Trans. Netw.
Karyn Benson, Benjamin E. Birnbaum, Esteban Molina-Estolano, Ran Libeskind-Hadas
2008 A conf
SIGCSE
Zachary Dodds, Ran Libeskind-Hadas, Christine Alvarado, Geoff Kuenning
2007 B conf
ITiCSE
Zachary Dodds, Christine Alvarado, Geoff Kuenning, Ran Libeskind-Hadas
2006 J jnl
IEEE/ACM Trans. Netw.
Ian Ferrel, Adrian Mettler, Edward Miller, Ran Libeskind-Hadas
2005 conf
ICC
David Buchfuhrer, Timothy Carnes, Brian Tagiku, Laura Celis, Ran Libeskind-Hadas
2004 J jnl
IEEE J. Sel. Areas Commun.
Edward Miller, Ran Libeskind-Hadas, D. Barnard, W. Chang, Kurt M. Dresner, W. M. Turner, Jeffrey R. K. Hartline
2004 J jnl
IEEE/ACM Trans. Netw.
Jeffrey R. K. Hartline, Ran Libeskind-Hadas, Kurt M. Dresner, Ethan W. Drucker, Katrina J. Ray
2003 J jnl
SIAM Rev.
Jeffrey R. K. Hartline, Ran Libeskind-Hadas
2002 J jnl
IEEE/ACM Trans. Netw.
Ran Libeskind-Hadas, Rami G. Melhem
2002 B conf
ICCCN
Ran Libeskind-Hadas, Jeffrey R. K. Hartline, Kurt M. Dresner, Ethan W. Drucker, Katrina J. Ray
2001 conf
ICN (1)
Ran Libeskind-Hadas, Rami G. Melhem
2001 J jnl
J. Parallel Distributed Comput.
Ran Libeskind-Hadas, Jeffrey R. K. Hartline, Peter Boothe, Greg Rae, Jascha Swisher
2000 conf
ICPP Workshops
Ran Libeskind-Hadas, Jeffrey R. K. Hartline
2000 B conf
ICCCN
Ran Libeskind-Hadas
1999 J jnl
Inf. Process. Lett.
Benjamin Barden, Ran Libeskind-Hadas, Janet Davis, William Williams
1998 J jnl
IEEE Trans. Computers
Ran Libeskind-Hadas
1998 conf
IPPS/SPDP
Ran Libeskind-Hadas, Dominic Mazzoni, Ranjith Rajagopalan
1998 conf
IPPS/SPDP
Ran Libeskind-Hadas, Dominic Mazzoni, Ranjith Rajagopalan
1996 A* conf
HPCA
Ran Libeskind-Hadas, Kevin Watkins, Thomas Hehre
1995 J jnl
IEEE Trans. Parallel Distributed Syst.
Ran Libeskind-Hadas, Nimish Shrivastava, Rami G. Melhem, C. L. Liu
1995 A* conf
HPCA
Ran Libeskind-Hadas, Eli Brandt
1995 J jnl
Future Gener. Comput. Syst.
Ran Libeskind-Hadas, Eli Brandt
1993
Ran Libeskind-Hadas
1991 J jnl
SIAM J. Discret. Math.
Philip K. McKinley, Nany Hasan, Ran Libeskind-Hadas, C. L. Liu
1989 A* conf
DAC
Ran Libeskind-Hadas, C. L. Liu
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"