Nadia Heninger

94 papers A* 20A 5C 1Journal 49Unranked 17
YearRankTypeTitle / Venue / Authors
2025 A* conf
CCS
Wenyi Morty Zhang, Annie Dai, Keegan Ryan, Dave Levin, Nadia Heninger, Aaron Schulman
2025 conf
WOOT
Chengsong Diao, Danielle Dang, Sierra Lira, Angela Tsai, Miro Haller, Nadia Heninger
2025 J jnl
IACR Cryptol. ePrint Arch.
Eugene Lau, Laura Shea, Nadia Heninger
2024 A* conf
USENIX Security Symposium
Harry Eldridge, Gabrielle Beck, Matthew Green, Nadia Heninger, Abhishek Jain
2024 conf
Public Key Cryptography (1)
Hannah Davis, Matthew D. Green, Nadia Heninger, Keegan Ryan, Adam Suhl
2024 conf
ASIACRYPT (8)
Christopher Battarbee, Giacomo Borin, Julian Brough, Ryann Cartor, Tobias Hemmert, Nadia Heninger, David Jao, Delaram Kahrobaei, Laura Maddison, Edoardo Persichetti, Angela Robinson, Daniel Smith-Tone, Rainer Steinwandt
2024 J jnl
IACR Cryptol. ePrint Arch.
Christopher Battarbee, Giacomo Borin, Ryann Cartor, Nadia Heninger, David Jao, Laura Maddison, Edoardo Persichetti, Angela Robinson, Daniel Smith-Tone, Rainer Steinwandt
2024 A* conf
USENIX Security Symposium
Sharon Goldberg, Miro Haller, Nadia Heninger, Mike Milano, Dan Shumow, Marc Stevens, Adam Suhl
2024 J jnl
IACR Commun. Cryptol.
Gabrielle De Micheli, Nadia Heninger
2023 J jnl
IACR Cryptol. ePrint Arch.
Gabrielle Beck, Harry Eldridge, Matthew Green, Nadia Heninger, Abhishek Jain
2023 conf
CRYPTO (3)
Keegan Ryan, Nadia Heninger
2023 J jnl
IACR Cryptol. ePrint Arch.
Keegan Ryan, Nadia Heninger
2023 J jnl
IACR Cryptol. ePrint Arch.
Hannah Davis, Matthew Green, Nadia Heninger, Keegan Ryan, Adam Suhl
2023 A* conf
CCS
Keegan Ryan, Kaiwen He, George Arnold Sullivan, Nadia Heninger
2023 J jnl
IACR Cryptol. ePrint Arch.
Keegan Ryan, Kaiwen He, George Arnold Sullivan, Nadia Heninger
2023 conf
AFRICACRYPT
Dylan Rowe, Joachim Breitner, Nadia Heninger
2023 conf
Public Key Cryptography (1)
Nadia Heninger, Keegan Ryan
2023 J jnl
IACR Cryptol. ePrint Arch.
Dylan Rowe, Joachim Breitner, Nadia Heninger
2022 J jnl
IACR Cryptol. ePrint Arch.
Keegan Ryan, Nadia Heninger
2022 A* conf
USENIX Security Symposium
George Arnold Sullivan, Jackson Sippe, Nadia Heninger, Eric Wustrow
2022 J jnl
IACR Cryptol. ePrint Arch.
Nadia Heninger
2022 J jnl
IEEE Secur. Priv.
Fabrice Boudot, Pierrick Gaudry, Aurore Guillevic, Nadia Heninger, Emmanuel Thomé, Paul Zimmermann
2021 conf
EUROCRYPT (1)
Martin R. Albrecht, Nadia Heninger
2020 J jnl
J. Math. Cryptol.
Gabrielle De Micheli, Nadia Heninger, Barak Shani
2020 conf
CRYPTO (2)
Fabrice Boudot, Pierrick Gaudry, Aurore Guillevic, Nadia Heninger, Emmanuel Thomé, Paul Zimmermann
2020 J jnl
CoRR
Fabrice Boudot, Pierrick Gaudry, Aurore Guillevic, Nadia Heninger, Emmanuel Thomé, Paul Zimmermann
2020 J jnl
IACR Cryptol. ePrint Arch.
Fabrice Boudot, Pierrick Gaudry, Aurore Guillevic, Nadia Heninger, Emmanuel Thomé, Paul Zimmermann
2020 J jnl
CoRR
Daniel Moghimi, Jo Van Bulck, Nadia Heninger, Frank Piessens, Berk Sunar
2020 A* conf
USENIX Security Symposium
Daniel Moghimi, Jo Van Bulck, Nadia Heninger, Frank Piessens, Berk Sunar
2020 ed.
Financial Cryptography
Joseph Bonneau, Nadia Heninger
2020 J jnl
IACR Cryptol. ePrint Arch.
Martin R. Albrecht, Nadia Heninger
2020 J jnl
Des. Codes Cryptogr.
Brett Hemenway Falk, Nadia Heninger, Michael Rudow
2020 A* conf
SP
Shaanan Cohney, Andrew Kwong, Shahar Paz, Daniel Genkin, Nadia Heninger, Eyal Ronen, Yuval Yarom
2020 J jnl
IACR Cryptol. ePrint Arch.
Gabrielle De Micheli, Nadia Heninger
2020 A* conf
USENIX Security Symposium
Daniel Moghimi, Berk Sunar, Thomas Eisenbarth, Nadia Heninger
2019 A* ed.
USENIX Security Symposium
Nadia Heninger, Patrick Traynor
2019 conf
Financial Cryptography
Joachim Breitner, Nadia Heninger
2019 J jnl
IACR Cryptol. ePrint Arch.
Joachim Breitner, Nadia Heninger
2019 J jnl
Commun. ACM
David Adrian, Karthikeyan Bhargavan, Zakir Durumeric, Pierrick Gaudry, Matthew Green, J. Alex Halderman, Nadia Heninger, Drew Springall, Emmanuel Thomé, Luke Valenta, Benjamin VanderSloot, Eric Wustrow, Santiago Zanella-Béguelin, Paul Zimmermann
2019 J jnl
IACR Cryptol. ePrint Arch.
Shaanan Cohney, Andrew Kwong, Shahar Paz, Daniel Genkin, Nadia Heninger, Eyal Ronen, Yuval Yarom
2019 conf
Financial Cryptography
Marcella Hastings, Nadia Heninger, Eric Wustrow
2019 J jnl
CoRR
Daniel Moghimi, Berk Sunar, Thomas Eisenbarth, Nadia Heninger
2018 J jnl
IACR Trans. Cryptogr. Hardw. Embed. Syst.
Fergus Dall, Gabrielle De Micheli, Thomas Eisenbarth, Daniel Genkin, Nadia Heninger, Ahmad Moghimi, Yuval Yarom
2018 J jnl
IACR Cryptol. ePrint Arch.
Gabrielle De Micheli, Nadia Heninger, Barak Shani
2018 A conf
EuroS&P
Luke Valenta, Nick Sullivan, Antonio Sanso, Nadia Heninger
2018 J jnl
IACR Cryptol. ePrint Arch.
Luke Valenta, Nick Sullivan, Antonio Sanso, Nadia Heninger
2018 A* conf
CCS
Shaanan N. Cohney, Matthew D. Green, Nadia Heninger
2018 J jnl
CoRR
Brett Hemenway Falk, Nadia Heninger, Michael Rudow
2018 J jnl
IACR Cryptol. ePrint Arch.
Marcella Hastings, Nadia Heninger, Eric Wustrow
2018 J jnl
Commun. ACM
Stephen Checkoway, Jacob Maskiewicz, Christina Garman, Joshua Fried, Shaanan Cohney, Matthew Green, Nadia Heninger, Ralf-Philipp Weinmann, Eric Rescorla, Hovav Shacham
2017 conf
EUROCRYPT (1)
Joshua Fried, Pierrick Gaudry, Nadia Heninger, Emmanuel Thomé
2017 J jnl
J. Cryptogr. Eng.
Yuval Yarom, Daniel Genkin, Nadia Heninger
2017 A* conf
NDSS
Luke Valenta, David Adrian, Antonio Sanso, Shaanan Cohney, Joshua Fried, Marcella Hastings, J. Alex Halderman, Nadia Heninger
2017 C conf
PQCrypto
Daniel J. Bernstein, Nadia Heninger, Paul Lou, Luke Valenta
2017 J jnl
IACR Cryptol. ePrint Arch.
Daniel J. Bernstein, Nadia Heninger, Paul Lou, Luke Valenta
2017 A conf
CHES
Daniel J. Bernstein, Joachim Breitner, Daniel Genkin, Leon Groot Bruinderink, Nadia Heninger, Tanja Lange, Christine van Vredendaal, Yuval Yarom
2017 J jnl
IACR Cryptol. ePrint Arch.
Daniel J. Bernstein, Joachim Breitner, Daniel Genkin, Leon Groot Bruinderink, Nadia Heninger, Tanja Lange, Christine van Vredendaal, Yuval Yarom
2016 A* conf
CCS
Stephen Checkoway, Jacob Maskiewicz, Christina Garman, Joshua Fried, Shaanan Cohney, Matthew Green, Nadia Heninger, Ralf-Philipp Weinmann, Eric Rescorla, Hovav Shacham
2016 J jnl
IACR Cryptol. ePrint Arch.
Stephen Checkoway, Shaanan Cohney, Christina Garman, Matthew Green, Nadia Heninger, Jacob Maskiewicz, Eric Rescorla, Hovav Shacham, Ralf-Philipp Weinmann
2016 J jnl
CoRR
Joshua Fried, Pierrick Gaudry, Nadia Heninger, Emmanuel Thomé
2016 J jnl
IACR Cryptol. ePrint Arch.
Joshua Fried, Pierrick Gaudry, Nadia Heninger, Emmanuel Thomé
2016 A conf
CHES
Yuval Yarom, Daniel Genkin, Nadia Heninger
2016 J jnl
IACR Cryptol. ePrint Arch.
Yuval Yarom, Daniel Genkin, Nadia Heninger
2016 conf
ASIACRYPT (1)
Ted Chinburg, Brett Hemenway, Nadia Heninger, Zachary Scherr
2016 J jnl
CoRR
Ted Chinburg, Brett Hemenway, Nadia Heninger, Zachary Scherr
2016 J jnl
IACR Cryptol. ePrint Arch.
Ted Chinburg, Brett Hemenway, Nadia Heninger, Zachary Scherr
2016 A* conf
USENIX Security Symposium
Nimrod Aviram, Sebastian Schinzel, Juraj Somorovsky, Nadia Heninger, Maik Dankel, Jens Steube, Luke Valenta, David Adrian, J. Alex Halderman, Viktor Dukhovni, Emilia Käsper, Shaanan Cohney, Susanne Engels, Christof Paar, Yuval Shavitt
2016 conf
Financial Cryptography
Luke Valenta, Shaanan Cohney, Alex Liao, Joshua Fried, Satya Bodduluri, Nadia Heninger
2016 J jnl
IACR Cryptol. ePrint Arch.
Luke Valenta, David Adrian, Antonio Sanso, Shaanan Cohney, Joshua Fried, Marcella Hastings, J. Alex Halderman, Nadia Heninger
2016 A conf
Internet Measurement Conference
Marcella Hastings, Joshua Fried, Nadia Heninger
2015 J jnl
IACR Cryptol. ePrint Arch.
Luke Valenta, Shaanan Cohney, Alex Liao, Joshua Fried, Satya Bodduluri, Nadia Heninger
2015 J jnl
Adv. Math. Commun.
Henry Cohn, Nadia Heninger
2015 A* conf
CCS
David Adrian, Karthikeyan Bhargavan, Zakir Durumeric, Pierrick Gaudry, Matthew Green, J. Alex Halderman, Nadia Heninger, Drew Springall, Emmanuel Thomé, Luke Valenta, Benjamin VanderSloot, Eric Wustrow, Santiago Zanella-Béguelin, Paul Zimmermann
2014 conf
Financial Cryptography
Joppe W. Bos, J. Alex Halderman, Nadia Heninger, Jonathan Moore, Michael Naehrig, Eric Wustrow
2013 J jnl
IACR Cryptol. ePrint Arch.
Joppe W. Bos, J. Alex Halderman, Nadia Heninger, Jonathan Moore, Michael Naehrig, Eric Wustrow
2013 conf
ASIACRYPT (2)
Daniel J. Bernstein, Yun-An Chang, Chen-Mou Cheng, Li-Ping Chou, Nadia Heninger, Tanja Lange, Nicko van Someren
2013 J jnl
IACR Cryptol. ePrint Arch.
Daniel J. Bernstein, Yun-An Chang, Chen-Mou Cheng, Li-Ping Chou, Nadia Heninger, Tanja Lange, Nicko van Someren
2012 A* conf
USENIX Security Symposium
Nadia Heninger, Zakir Durumeric, Eric Wustrow, J. Alex Halderman
2012 A* conf
USENIX Security Symposium
Casey Devet, Ian Goldberg, Nadia Heninger
2012 J jnl
IACR Cryptol. ePrint Arch.
Casey Devet, Ian Goldberg, Nadia Heninger
2012 conf
WPES
Deepika Gopal, Nadia Heninger
2011 J jnl
CoRR
Henry Cohn, Nadia Heninger
2011 J jnl
IACR Cryptol. ePrint Arch.
Henry Cohn, Nadia Heninger
2011 ch.
Encyclopedia of Cryptography and Security (2nd Ed.)
Nadia Heninger
2011 A conf
ICS
Henry Cohn, Nadia Heninger
2010 conf
EVT/WOTE
Nadia Heninger
2010 A* conf
NDSS
Scott Wolchok, Owen S. Hofmann, Nadia Heninger, Edward W. Felten, J. Alex Halderman, Christopher J. Rossbach, Brent Waters, Emmett Witchel
2010 J jnl
CoRR
Henry Cohn, Nadia Heninger
2009 A* conf
SP
William Clarkson, Tim Weyrich, Adam Finkelstein, Nadia Heninger, J. Alex Halderman, Edward W. Felten
2009 J jnl
Commun. ACM
J. Alex Halderman, Seth D. Schoen, Nadia Heninger, William Clarkson, William Paul, Joseph A. Calandrino, Ariel J. Feldman, Jacob Appelbaum, Edward W. Felten
2009 A* conf
CRYPTO
Nadia Heninger, Hovav Shacham
2008 A* conf
USENIX Security Symposium
J. Alex Halderman, Seth D. Schoen, Nadia Heninger, William Clarkson, William Paul, Joseph A. Calandrino, Ariel J. Feldman, Jacob Appelbaum, Edward W. Felten
2008 J jnl
IACR Cryptol. ePrint Arch.
Nadia Heninger, Hovav Shacham
2006 J jnl
J. Comb. Theory A
Nadia Heninger, Eric M. Rains, Neil J. A. Sloane
redb/extractors/js_extractors/js_suspicious_apis.py
← Index redb/extractors/js_extractors/js_suspicious_apis.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.js_extractor import JSExtractor
from redb.extractors.js_extractors.js_patterns import CATEGORIES, PATTERNS


# Backwards-compatible export: `{category: [(raw_pattern_string, api_name), ...]}`
# in canonical PATTERNS insertion order (code_execution, network, filesystem,
# process, registry, crypto_encoding, dom_manipulation). Kept so external
# callers (notably JSDeobfuscationExtractor pre-cleanup) keep working until
# they are migrated to PATTERNS directly.
SUSPICIOUS_APIS: "dict[str, list[tuple[str, str]]]" = {}
for _name, _compiled in PATTERNS.items():
    SUSPICIOUS_APIS.setdefault(CATEGORIES[_name], []).append((_compiled.pattern, _name))


class JSSuspiciousAPIsExtractor(JSExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False, source=None, context=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, source, context=context,
        )
        self.api_findings = None
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _get_context_snippet(self, line, max_len=200):
        """Get a truncated context snippet around a match."""
        line = line.strip()
        if len(line) > max_len:
            return line[:max_len] + "..."
        return line

    def extract(self):
        src = self.js_source
        if not src:
            return None

        # Pass 1: shared per-sample scan over the raw source. The dict contains
        # entries for both PATTERNS and FEATURE_PATTERNS; the loop below only
        # consults PATTERNS keys, so feature-only entries are ignored.
        raw_scan = self._context.scan or {}
        raw_lines = self.lines

        # Pass 2: same patterns over the deobfuscated text, when the
        # deobfuscator produced something meaningfully different. APIs hidden
        # behind one obfuscation layer (Vjw0rm-style array.join + eval,
        # Dean-Edwards packers, jjencode, ...) only surface here. The scan is
        # cached on JSContext so JSDeobfuscationExtractor (which computes the
        # new_apis_found diff) reuses the same result.
        deobf_scan = self._context.scan_deobfuscated
        if deobf_scan:
            deobf_text, _ = self._context.deobfuscated
            deobf_lines = deobf_text.splitlines()
        else:
            deobf_lines = []

        findings = []
        # Iterate PATTERNS in canonical order so output is deterministic and
        # matches the historical category/pattern ordering. For each api_name,
        # raw findings take precedence; if an API is found only in the
        # deobfuscated text, we surface it as a row tagged revealed_by_deobf=1
        # with line numbers / snippets pulled from the deobfuscated source.
        for api_name in PATTERNS:
            raw_info = raw_scan.get(api_name)
            if raw_info:
                line_numbers = raw_info["lines"]
                lines_for_snippets = raw_lines
                revealed_by_deobf = 0
            else:
                deobf_info = deobf_scan.get(api_name)
                if not deobf_info:
                    continue
                line_numbers = deobf_info["lines"]
                lines_for_snippets = deobf_lines
                revealed_by_deobf = 1

            snippets = [
                self._get_context_snippet(lines_for_snippets[ln - 1])
                for ln in line_numbers[:3]
                if 0 < ln <= len(lines_for_snippets)
            ]
            findings.append({
                "api_name": api_name,
                "api_category": CATEGORIES[api_name],
                # Historical semantics: count = number of unique lines with a
                # match, not total in-source match count.
                "call_count": len(line_numbers),
                "line_numbers": line_numbers,
                "context_snippet": " | ".join(snippets),
                "revealed_by_deobf": revealed_by_deobf,
            })

        if not findings:
            return None

        self.api_findings = findings
        return findings

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.api_findings:
                return None

            current_time = datetime.now(timezone.utc)
            data = []
            for f in self.api_findings:
                data.append([
                    self.sha256,
                    f['api_name'],
                    f['api_category'],
                    f['call_count'],
                    f['line_numbers'],
                    f['context_snippet'],
                    f['revealed_by_deobf'],
                    current_time,
                ])

            column_names = [
                "sha256", "api_name", "api_category",
                "call_count", "line_numbers", "context_snippet",
                "revealed_by_deobf",
                "analysis_date",
            ]

            column_type_names = [
                "FixedString(64)", "String", "LowCardinality(String)",
                "UInt32", "Array(UInt32)", "String",
                "UInt8",
                "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

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