Ora Lassila

40 papers A 1B 1C 3Misc 4Journal 7Unranked 21
YearRankTypeTitle / Venue / Authors
2024 conf
ESWC Satellite Events (1)
Olaf Hartig, Gregory Todd Williams, Michael Schmidt, Ora Lassila, Carlos Manuel López Enríquez, Bryan Thompson
2024 conf
ISWC (Posters/Demos/Industry)
Willem Broekema, Mohamed Elzarei, Ora Lassila, Carlos-Manuel López-Enríquez, Marcin Neyman, Florian Schmedding, Michael Schmidt, Andreas Steigmiller, Geo Varkey, Gregory Todd Williams, Amanda Xiang
2023 J jnl
Semantic Web
Ora Lassila, Michael Schmidt, Olaf Hartig, Brad Bebee, Dave Bechberger, Willem Broekema, Ankesh Khandelwal, Kelvin Lawrence, Carlos Manuel López Enríquez, Ronak Sharda, Bryan B. Thompson
2023 ch.
Linking the World's Information
Tim Berners-Lee, James A. Hendler, Ora Lassila
2022 conf
GRADES-NDA@SIGMOD
Renzo Angles, Aidan Hogan, Ora Lassila, Carlos Rojas, Daniel Schwabe, Pedro A. Szekely, Domagoj Vrgoc
2021 book
Juan Sequeda, Ora Lassila
2021 J jnl
CoRR
Ora Lassila, Michael Schmidt, Brad Bebee, Dave Bechberger, Willem Broekema, Ankesh Khandelwal, Kelvin Lawrence, Ronak Sharda, Bryan B. Thompson
2013 A conf
RecSys
Marco de Gemmis, Tommaso Di Noia, Ora Lassila, Pasquale Lops, Thomas Lukasiewicz, Giovanni Semeraro
2012 C conf
CLOSER
Sergey Boldyrev, Dmitry Kolesnikov, Ora Lassila, Ian Oliver
2009 B conf
Mobile Data Management
Mikko Perttunen, Max Van Kleek, Ora Lassila, Jukka Riekki
2009 J jnl
IEEE Pervasive Comput.
Alessandra Toninelli, Rebecca Montanari, Ora Lassila, Deepali Khushraj
2008 conf
ICSC
Ora Lassila
2008 conf
SDoW@ISWC
Alessandra Toninelli, Deepali Khushraj, Ora Lassila, Rebecca Montanari
2007 J jnl
IEEE Internet Comput.
Ora Lassila, James A. Hendler
2007
Ora Lassila
2007 conf
POLICY
Alessandra Toninelli, Rebecca Montanari, Lalana Kagal, Ora Lassila
2006 Misc conf
ISWC
Alessandra Toninelli, Rebecca Montanari, Lalana Kagal, Ora Lassila
2006 conf
DEXA Workshops
Ora Lassila
2006 conf
RuleML
Ora Lassila
2006 conf
SemDesk
Ora Lassila, Deepali Khushraj, Ralph R. Swick
2006 conf
CCNC
Sadhna Ahuja, Tao Wu, Ora Lassila
2005 C conf
MobiQuitous
Ora Lassila, Deepali Khushraj
2005 Misc conf
ISWC
Deepali Khushraj, Ora Lassila
2005 conf
PerCom Workshops
Jari Forstadius, Ora Lassila, Tapio Seppänen
2005 conf
Designing Ubiquitous Information Environments
Dick Braley, Andy Fano, Ora Lassila, John Light, Matt Germonprez
2005 conf
IFIP IASW
Ora Lassila
2004 J jnl
IEEE Intell. Syst.
Terry R. Payne, Ora Lassila
2004 C conf
MobiQuitous
Deepali Khushraj, Ora Lassila, Timothy W. Finin
2003 conf
Spinning the Semantic Web
Ora Lassila, Mark Adler
2002 Misc conf
ISWC
Mark H. Burstein, Jerry R. Hobbs, Ora Lassila, David L. Martin, Drew V. McDermott, Sheila A. McIlraith, Srini Narayanan, Massimo Paolucci, Terry R. Payne, Katia P. Sycara
2002 Misc conf
ISWC
Ora Lassila
2001 conf
SWWS
Anupriya Ankolekar, Mark H. Burstein, Jerry R. Hobbs, Ora Lassila, David L. Martin, Sheila A. McIlraith, Srini Narayanan, Massimo Paolucci, Terry R. Payne, Katia P. Sycara, Honglei Zeng
2001 conf
The Emerging Semantic Web
Anupriya Ankolekar, Mark H. Burstein, Jerry R. Hobbs, Ora Lassila, David L. Martin, Sheila A. McIlraith, Srini Narayanan, Massimo Paolucci, Terry R. Payne, Katia P. Sycara, Honglei Zeng
2001 conf
SWWS
Ora Lassila
1998 conf
QL
Ramanathan V. Guha, Ora Lassila, Eric Miller, Dan Brickley
1998 J jnl
IEEE Internet Comput.
Ora Lassila
1993 conf
VCHCI
Marja-Riitta Koivunen, Ora Lassila, Juha Ahvo, Minna Rankinen, Sirpa Riihiaho, Bodil Riihinen
1993 conf
Knowledge-Based Reactive Scheduling
Stephen F. Smith, Ora Lassila
1989 conf
SCAI
Juha Hynynen, Ora Lassila
1989 J jnl
AI Commun.
Juha Hynynen, Ora Lassila
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"