Detection rules › Sigma

Potential JLI.dll Side-Loading

Status
experimental
Severity
high
Log source
product windows, category image_load
Author
Swachchhanda Shrawan Poudel (Nextron Systems)
Source
github.com/SigmaHQ/sigma

Detects potential DLL side-loading of jli.dll. JLI.dll has been observed being side-loaded by Java processes by various threat actors, including APT41, XWorm, and others in order to load malicious payloads in context of legitimate Java processes.

MITRE ATT&CK coverage

Event coverage

ProviderEventTitle
SysmonEvent ID 7Image loaded

Rule body yaml

title: Potential JLI.dll Side-Loading
id: 7a3b6d1f-4a2b-4f8c-9d7e-e9f8cbf21a35
status: experimental
description: |
    Detects potential DLL side-loading of jli.dll.
    JLI.dll has been observed being side-loaded by Java processes by various threat actors, including APT41, XWorm,
    and others in order to load malicious payloads in context of legitimate Java processes.
references:
    - https://securelist.com/apt41-in-africa/116986/
    - https://lab52.io/blog/snake-keylogger-in-geopolitical-affairs-abuse-of-trusted-java-utilities-in-cybercrime-operations/
    - https://hijacklibs.net/entries/3rd_party/oracle/jli.html
    - https://www.proofpoint.com/us/blog/threat-insight/phish-china-aligned-espionage-actors-ramp-up-taiwan-semiconductor-targeting
author: Swachchhanda Shrawan Poudel (Nextron Systems)
date: 2025-07-25
modified: 2025-10-06
tags:
    - attack.persistence
    - attack.privilege-escalation
    - attack.execution
    - attack.stealth
    - attack.t1574.001
logsource:
    category: image_load
    product: windows
detection:
    selection:
        ImageLoaded|endswith: '\jli.dll'
    filter_main_legitimate_install_paths:
        ImageLoaded|startswith:
            # Keeping the paths generic as jli.dll was found inside various directories of installed software
            - 'C:\Program Files\'
            - 'C:\Program Files (x86)\'
        Description: 'OpenJDK Platform binary'
        OriginalFileName: 'jli.dll'
        Product|startswith: 'OpenJDK Platform'
        Signed: 'true'
    filter_optional_eclipse:
        ImageLoaded|startswith: 'C:\eclipse\plugins\'
    condition: selection and not 1 of filter_main_* and not 1 of filter_optional_*
falsepositives:
    - Unknown
level: high

Stages and Predicates

Stage 0: condition

selection and not 1 of filter_main_* and not 1 of filter_optional_*

Stage 1: selection

selection:
    ImageLoaded|endswith: '\jli.dll'

Stage 2: not filter_main_legitimate_install_paths

filter_main_legitimate_install_paths:
    ImageLoaded|startswith:
        - 'C:\Program Files\'
        - 'C:\Program Files (x86)\'
    Description: 'OpenJDK Platform binary'
    OriginalFileName: 'jli.dll'
    Product|startswith: 'OpenJDK Platform'
    Signed: 'true'

Stage 3: not filter_optional_eclipse

filter_optional_eclipse:
    ImageLoaded|startswith: 'C:\eclipse\plugins\'

Exclusions

Top-level NOT(...) conjuncts: predicates this rule actively suppresses.

FieldKindExcluded values
ImageLoadedstarts_withC:\Program Files (x86)\
ImageLoadedstarts_withC:\Program Files\
DescriptioneqOpenJDK Platform binary
OriginalFileNameeqjli.dll
Productstarts_withOpenJDK Platform
Signedeqtrue
ImageLoadedstarts_withC:\eclipse\plugins\

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
ImageLoadedends_with
  • \jli.dll