Expand monitoring for credential theft and covert protocols
This commit is contained in:
parent
3e5f8fc3f7
commit
cb334c0c94
17 changed files with 675 additions and 25 deletions
22
README.md
22
README.md
|
|
@ -56,6 +56,9 @@ EDRs are built on:
|
|||
| `reverse_shell` | An interpreter with a **network socket on fd 0/1/2** | Interactive shells get a pty and daemons get unix sockets — a *network* socket on stdio is `nc -e` / `bash -i >& /dev/tcp/...` |
|
||||
| `ld_preload` | Non-empty `/etc/ld.so.preload`, or `LD_PRELOAD` into a writable dir | Injecting into processes needs the library to exist somewhere |
|
||||
| `deleted_exe` | A process running from a **deleted / `memfd:`** binary | Fileless malware deletes its dropper; the kernel still names the inode `(deleted)` |
|
||||
| `input_snooper` | A non-allowlisted process holding `/dev/input`, `/dev/uinput`, or HID raw devices open | Keyloggers have to read keystroke/event devices somewhere; expected compositors/remappers are tunable |
|
||||
| `credential_access` | A non-allowlisted process with shadow files, private SSH keys, browser stores, or secret profiles open | Credential harvesters have to open the material they steal; legitimate auth/keyring/browser readers are tunable |
|
||||
| `stealth_network` | Raw, SCTP, DCCP, packet, MPTCP, TIPC, XDP, or vsock activity | Covert channels often avoid ordinary TCP/UDP paths; expected network managers/sniffers are tunable |
|
||||
| `new_listener` | A listening port absent from the startup baseline | Bind shells/backdoors have to listen somewhere |
|
||||
| `new_suid` | A new SUID/SGID binary (critical in a writable dir) | A SUID `/tmp` binary is a textbook privesc trick |
|
||||
| `persistence` | Changes to cron, systemd units, `authorized_keys`, rc files | Persistence has to write somewhere that survives reboot |
|
||||
|
|
@ -220,9 +223,14 @@ enodia-sentinel.service`. Every key is optional. Highlights:
|
|||
|---|---|---|
|
||||
| `sample_interval` | 4 | seconds between sweeps |
|
||||
| `cooldown` | 60 | min seconds before re-alerting a signature |
|
||||
| `detectors` | all 7 | the enabled detector list |
|
||||
| `detectors` | all 10 | the enabled detector list |
|
||||
| `interpreters` | bash sh … | process names treated as shells |
|
||||
| `egress_allow_cidrs` | [] | trusted public ranges (won't trip egress) |
|
||||
| `input_snooper_allow_comms` | desktop input stack | comm names allowed to hold input devices |
|
||||
| `credential_access_allow_comms` | auth/keyring/browsers | comm names allowed to read credential stores |
|
||||
| `credential_access_extra_paths` | [] | extra exact paths or directory prefixes treated as secrets |
|
||||
| `stealth_network_allow_comms` | network managers/sniffers | comm names allowed to own special protocol sockets |
|
||||
| `stealth_network_allow_kinds` | [] | socket families to ignore entirely |
|
||||
| `suid_hot_dirs` | /tmp … | dirs where a SUID binary is CRITICAL |
|
||||
| `suid_scan_extra_dirs` | /tmp … | writable mounts always scanned (tmpfs-safe) |
|
||||
| `capture_execve_bpftrace` | false | add a bpftrace execve trace to snapshots |
|
||||
|
|
@ -371,6 +379,9 @@ compare the answers.** A discrepancy is the hiding artifact.
|
|||
| `/sys/module/*/taint` | out-of-tree/proprietary/unsigned loaded modules needing review | 100029 |
|
||||
| `/proc/sys/kernel/tainted` | global kernel taint: forced loads/unloads, unsigned modules, warnings | 100030 |
|
||||
| `/proc/net/udp` vs `ss -u` | a UDP socket a hooked `ss` won't report | 100031 |
|
||||
| `/proc/net/raw` vs `ss -w` | a raw socket protocol a hooked `ss` won't report | 100034 |
|
||||
| `/proc/net/raw` ICMP protocols | persistent raw ICMP sockets used by knockers/sniffers | 100035 |
|
||||
| `/proc/net` special families vs `ss` | SCTP/DCCP/packet/TIPC/XDP sockets a hooked `ss` won't report | 100037 |
|
||||
|
||||
```bash
|
||||
enodia-sentinel rootcheck # one-shot cross-view scan
|
||||
|
|
@ -493,11 +504,18 @@ regression suite for both.
|
|||
|
||||
## Project status
|
||||
|
||||
v0.8-dev — expands security monitoring for Gonzalo/Peopleswar-style samples:
|
||||
`input_snooper` catches direct keyboard/HID event access, `credential_access`
|
||||
catches live credential harvesting against shadow files, SSH keys, browser
|
||||
stores, and secret profiles, `stealth_network` watches SCTP/DCCP/raw/packet and
|
||||
other special protocol families, and rootcheck now covers raw ICMP plus hidden
|
||||
SCTP/DCCP/packet-family sockets.
|
||||
|
||||
v0.7 — closes the tamper-evidence loop with the **independent anchor**:
|
||||
signed-package verification (compares on-disk files to the `.MTREE` in the signed
|
||||
cache package, surviving a rewritten checksum DB) plus a `SigLevel`-downgrade
|
||||
check, and an **anti-rootkit cross-view** layer (hidden processes, modules,
|
||||
TCP/UDP ports, promiscuous interfaces, known LKM rootkit names, and
|
||||
TCP/UDP sockets, promiscuous interfaces, known LKM rootkit names, and
|
||||
kernel/module taint — each caught by asking independent views and diffing the
|
||||
answers).
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue