bpf study
XDR type
typedef enum _XDR_EVENT_TYPE {
XDR_EVENT_TYPE_XDR_EVENT_NONE = 0,
XDR_EVENT_TYPE_XDR_EVENT_PROCESS = 1,
XDR_EVENT_TYPE_XDR_EVENT_FILE = 2,
XDR_EVENT_TYPE_XDR_EVENT_CONNECTION = 3,
XDR_EVENT_TYPE_XDR_EVENT_DNS = 4,
XDR_EVENT_TYPE_XDR_EVENT_ACCOUNT = 6,
XDR_EVENT_TYPE_XDR_EVENT_INTERNET = 7,
XDR_EVENT_TYPE_XDR_EVENT_MODIFIED_PROCESS = 8,
XDR_EVENT_TYPE_XDR_EVENT_MEMORY = 13,
XDR_EVENT_TYPE_XDR_EVENT_BM = 14
} XDR_EVENT_TYPE;
typedef enum _XDR_ACCESS_TYPE {
XDR_ACCESS_TYPE_XDR_NONE = 0,
XDR_ACCESS_TYPE_XDR_PROCESS_OPEN = 1,
XDR_ACCESS_TYPE_XDR_PROCESS_CREATE = 2,
XDR_ACCESS_TYPE_XDR_PROCESS_TERMINATE = 3,
XDR_ACCESS_TYPE_XDR_PROCESS_LOAD_IMAGE = 4,
XDR_ACCESS_TYPE_XDR_PROCESS_EXECUTE = 5,
XDR_ACCESS_TYPE_XDR_PROCESS_CONNECT = 6,
XDR_ACCESS_TYPE_XDR_PROCESS_TRACME = 7,
XDR_ACCESS_TYPE_XDR_FILE_CREATE = 101,
XDR_ACCESS_TYPE_XDR_FILE_OPEN = 102,
XDR_ACCESS_TYPE_XDR_FILE_DELETE = 103,
XDR_ACCESS_TYPE_XDR_FILE_SET_SECURITY = 104,
XDR_ACCESS_TYPE_XDR_FILE_COPY = 105,
XDR_ACCESS_TYPE_XDR_FILE_MOVE = 106,
XDR_ACCESS_TYPE_XDR_FILE_CLOSE = 107,
XDR_ACCESS_TYPE_XDR_FILE_MODIFY_TIMESTAMP = 108,
XDR_ACCESS_TYPE_XDR_FILE_MODIFY = 109,
XDR_ACCESS_TYPE_XDR_CONNECTION_CONNECT = 201,
XDR_ACCESS_TYPE_XDR_CONNECTION_LISTEN = 202,
XDR_ACCESS_TYPE_XDR_CONNECTION_CONNECT_INBOUND = 203,
XDR_ACCESS_TYPE_XDR_CONNECTION_CONNECT_OUTBOUND = 204,
XDR_ACCESS_TYPE_XDR_DNS_QUERY = 301,
XDR_ACCESS_TYPE_XDR_ACCOUNT_ADD = 501,
XDR_ACCESS_TYPE_XDR_ACCOUNT_DELETE = 502,
XDR_ACCESS_TYPE_XDR_ACCOUNT_IMPERSONATE = 503,
XDR_ACCESS_TYPE_XDR_ACCOUNT_MODIFY = 504,
XDR_ACCESS_TYPE_XDR_INTERNET_OPEN = 601,
XDR_ACCESS_TYPE_XDR_INTERNET_CONNECT = 602,
XDR_ACCESS_TYPE_XDR_INTERNET_DOWNLOAD = 603,
XDR_ACCESS_TYPE_XDR_MODIFIED_PROCESS_WRITE_MEMORY = 702,
XDR_ACCESS_TYPE_XDR_MODIFIED_PROCESS_WRITE_PROCESS = 703,
XDR_ACCESS_TYPE_XDR_MODIFIED_PROCESS_READ_PROCESS = 704,
XDR_ACCESS_TYPE_XDR_MODIFIED_PROCESS_WRITE_PROCESS_NAME = 705,
XDR_ACCESS_TYPE_XDR_MEMORY_MODIFY = 1001,
XDR_ACCESS_TYPE_XDR_MEMORY_MODIFY_PERMISSION = 1002,
XDR_ACCESS_TYPE_XDR_MEMORY_READ = 1003,
XDR_ACCESS_TYPE_XDR_BM_INVOKE = 1101,
XDR_ACCESS_TYPE_XDR_BM_INVOKE_API = 1102
} XDR_ACCESS_TYPE;
typedef enum _XDR_CONNECTION_TYPE {
XDR_CONNECTION_TYPE_XDR_CONNECTION_NONE = 0,
XDR_CONNECTION_TYPE_XDR_CONNECTION_TCP = 1,
XDR_CONNECTION_TYPE_XDR_CONNECTION_UDP = 2
} XDR_CONNECTION_TYPE;
Code references
- Kernel space (
selenium.ko
driver module)
- Act event utilities:
projs/lithium/kmod/selenium/src/act_event/...
- Event source (hooks):
projs/lithium/kmod/selenium/src/hook/hooks.c
- User space code
- Act event utilities:
- Act event (activity object):
lib/nanopb/xdr/act_event/ActEvent.h
- Event IPC helpers:
lib/nanopb/xdr/act_event/ActIPC.h
- Aggregation
seleniumd
- Daemon process:
projs/lithium/src/selenium/seleniumd/seleniumd.cpp
- Footprint generator:
projs/lithium/src/selenium/seleniumd/FootprintGenerator.cpp
- Sender example
libhe7.so
(who send network event)
projs/helium/src/libhe7/He7Tracker.cpp
Note that we use PbUtils
protobuf utility which wrapper nanppb
3rd party library. You would like to reference the test code in quark:
- PbUtils:
lib/quark/src/down/util/nanopb/PbUtils.h
- unit test code:
lib/quark/unit_test/ut_util/test_nanopb_Pb2Utils.cpp
Where we had already use libbpf
:
- Start agent (currently just start it in offline mode)
- Extract the .gpbz file with json format.
- Check the full function in command line



);