How checks work
Profile
Jibril profiles every process spawn, network connection, and file access during the workflow run via eBPF.
Current checks
Known bad egress
| ID | no_known_bad_egress |
| Category | Network |
| Invariant | No contacted domain appears on Garnet threat intelligence lists. |
| Pass | No contacted domains matched known threats. |
| Fail | A contacted domain was found in Garnet threat intel — used in past supply-chain attacks, C2 infrastructure, or cryptominer pools. |
| Evidence | Domain, remote IP, protocol, full process ancestry chain. |
Code injection via /proc memory
| ID | no_code_injection_via_proc_memory |
| Category | Defense evasion · Credential access |
| Invariant | No process reads or modifies another process’s memory via /proc/<pid>/mem. |
| Pass | No process initiated code injection via /proc/<pid>/mem access. |
| Fail | A process read or modified another process’s memory via /proc/<pid>/mem. |
| Evidence | Target PID, accessor process, full ancestry chain, accessed path. |
/proc/<pid>/mem reads to scrape CI runner secrets from memory, encrypt the haul, and exfiltrate it. This is invisible to static analysis and workflow logs — only the runtime lineage shows the access.
Detection signals:
code_modification_through_procfs— process memory modified via procfsenviron_read_from_procfs— environment variables read via/proc/<pid>/environ
@tanstack/* npm packages via a compromised CI release pipeline. When consumed in CI, the malicious router_init.js spawned a daemonized child process that scraped runner secrets from /proc/<pid>/mem — the same /proc technique used in the TeamPCP and tj-actions attacks. The access is invisible in workflow logs but Garnet’s eBPF-level profiling captures the /proc read in the process lineage.
/proc memory scrape ran in a detached child of the same tree. Only the runtime lineage shows both.
Binary execution and deletion
| ID | no_binary_execution_and_deletion |
| Category | Execution · Defense evasion |
| Invariant | No process executes a binary and then deletes it from disk. |
| Pass | No program was executed and then deleted. |
| Fail | A program was executed, and then its file was deleted. |
| Evidence | Binary path, executor process, deletion timestamp, full ancestry chain. |
binary_self_deletion— executable deleted itself after runninghidden_elf_exec— execution of a hidden (dot-prefixed) ELF binaryexec_from_unusual_dir— process executed from a non-standard directory (e.g./tmp,/dev/shm)
Upcoming checks
The check suite is expanding. Checks below are in development and will roll out progressively — your runs will start receiving results as each ships, with no workflow changes required.Credential file access
| ID | no_credential_access |
| Category | Credential access |
| What it checks | Whether processes accessed files containing stored credentials, SSH keys, SSL certificates, or authentication tokens outside of expected patterns. |
| Detections | credentials_files_access — process accessed credential files. ssl_certificate_access — process accessed SSL/TLS certificate or key files. passwd_usage — process accessed the system password file. auth_logs_tamper — authentication logs modified (covering tracks). |
Hidden binary execution
| ID | no_hidden_binary_execution |
| Category | Execution |
| What it checks | Whether a hidden or dot-prefixed ELF binary was executed — a common evasion technique for dropping and running malicious tooling without appearing in standard directory listings. |
| Detections | hidden_elf_exec — execution of a hidden (dot-prefixed) ELF binary. exec_from_unusual_dir — process executed from a non-standard directory (e.g. /tmp, /dev/shm). |
Detection signals
Checks are built on top of Jibril’s detection engine, which identifies individual signals during a run. A single check may combine multiple detection signals into one pass/fail verdict. Below is the full detection taxonomy grouped by MITRE ATT&CK category.Network peers
Network peers
| Detection | What it means |
|---|---|
flow | Outbound network flow observed |
dropip / dropdomain | Connection matched threat intelligence (domain or IP) |
threat_domain_access | Connection to a domain flagged as a known threat |
plaintext_communication | Sensitive data transmitted over an unencrypted channel |
dyndns_domain_access | Connection to a dynamic DNS domain (often used by attackers) |
vpnlike_domain_access | Connection to a VPN or proxy service |
Execution
Execution
| Detection | What it means |
|---|---|
hidden_elf_exec | Hidden or dot-prefixed ELF binary executed |
exec_from_unusual_dir | Process executed from /tmp, /dev/shm, or similar |
interpreter_shell_spawn | Interpreter process launched an interactive shell |
binary_executed_by_loader | Binary executed via dynamic loader (indirect execution) |
code_on_the_fly | Dynamic code generation and execution |
crypto_miner_execution | Process matching known cryptocurrency mining software |
data_encoder_exec | Encoding tool executed (potential exfiltration staging) |
runc_suspicious_exec | Unexpected process execution within the container runtime |
Defense evasion
Defense evasion
| Detection | What it means |
|---|---|
code_modification_through_procfs | Process memory modified through the /proc filesystem |
environ_read_from_procfs | Environment variables read via /proc/<pid>/environ |
binary_self_deletion | Executable deleted itself after running |
Credential access
Credential access
| Detection | What it means |
|---|---|
credentials_files_access | Process accessed stored credential files |
ssl_certificate_access | Process accessed SSL/TLS certificate or key files |
passwd_usage | Process accessed the system password file |
auth_logs_tamper | Authentication logs modified |
Privilege escalation
Privilege escalation
| Detection | What it means |
|---|---|
sudoers_modification | Sudoers configuration modified |
capabilities_modification | Linux capabilities modified (privilege escalation) |
Persistence
Persistence
| Detection | What it means |
|---|---|
shell_config_modification | Shell startup files modified |
package_repo_config_modification | Package manager config altered (malicious sources) |
pam_config_modification | Pluggable authentication module config altered |
global_shlib_modification | Globally shared library modified (code injection) |
Network tools
Network tools
| Detection | What it means |
|---|---|
net_filecopy_tool_exec | File transfer utility executed |
net_scan_tool_exec | Network or port scanner executed |
net_sniff_tool_exec | Packet capture tool executed |
net_mitm_tool_exec | Traffic interception tool executed |
net_suspicious_tool_exec | Suspicious network reconnaissance tool executed |
Using check results
In workflows
The action outputsprofile_result (pass or fail), which you can use in subsequent steps:
In the dashboard
Navigate to any run at app.garnet.ai to see:- Check results — pass/fail per check with evidence
- Process tree — full lineage from init to leaf, with flagged connections highlighted
- Egress summary — every outbound domain with protocol, IP, and process attribution