| .. | |||
| Makefile | 5 years ago | ||
| README.md | 5 years ago | ||
| ftrace_helper.h | 5 years ago | ||
| rootkit.c | 5 years ago | ||
Most linux applications that search for local open ports (netstat included) use the /proc/net/tcp pseudo-file to do so. In particular, parsing this file is handled by tcp4_seq_show in net/ipv4/tcp_ipv4.c. By hooking this function, we can choose to hide a particular open port from userspace.
As far as the function hooking goes, it's quite simple. We give a function declaration for the original tcp4_seq_show(), then we define the function hook_tcp4_seq_show(). This hook simply checks to see if the local port number given by sk->sk_num is 8080 (0x1f90 in hex), and if so it just returns 0. Otherwise, we go ahead and pass the given arguments to the real tcp4_seq_show().
Note that because we aren't hooking a syscall this time, we don't have to worry about pt_regs because the arguments are passed on the stack rather than in registers!
To use:
makeinsmod rootkit.konc -lvnp 8080netstat -tunelprmmod rootkitnetstat -tunelp again and see that port 8080 now shows up!