From fd33e0812c6f11595e511a1ceefad1f290c9a0c0 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 2 Nov 2015 15:31:57 -0800 Subject: [PATCH] Added checks for bad service connection. --- netcon/Intercept.c | 26 ++++++++++++++++---------- netcon/README.md | 1 + netcon/libintercept.so.1.0 | Bin 0 -> 57416 bytes 3 files changed, 17 insertions(+), 10 deletions(-) create mode 100755 netcon/libintercept.so.1.0 diff --git a/netcon/Intercept.c b/netcon/Intercept.c index a124ccb6e..d7855c61f 100755 --- a/netcon/Intercept.c +++ b/netcon/Intercept.c @@ -126,7 +126,7 @@ void handle_error(char *name, char *info, int err) } #endif #ifdef VERBOSE - dwr("%s()=%d\n", name, err); + //dwr("%s()=%d\n", name, err); #endif } @@ -156,13 +156,15 @@ int checkpid() { /* * Sends an RPC command to the service */ -void send_command(int rpc_fd, char *cmd) +int send_command(int rpc_fd, char *cmd) { int n_write = write(rpc_fd, cmd, BUF_SZ); if(n_write < 0){ dwr("Error writing command to service (CMD = %d)\n", cmd[0]); errno = 0; + return -1; } + return 0; } /* @@ -198,7 +200,8 @@ int is_mapped_to_service(int sockfd) memset(cmd, '\0', BUF_SZ); cmd[0] = RPC_MAP_REQ; memcpy(&cmd[1], &sockfd, sizeof(sockfd)); - send_command(fdret_sock, cmd); + if(send_command(fdret_sock, cmd) < 0) + return -1; return get_retval(); } @@ -330,16 +333,16 @@ void set_up_intercept() int setsockopt(SETSOCKOPT_SIG) { dwr("setsockopt(%d)\n", socket); + if(is_mapped_to_service(socket) < 0) { // First, check if the service manages this + return realsetsockopt(socket, level, option_name, option_value, option_len); + } //return(realsetsockopt(socket, level, option_name, option_value, option_len)); if(level == SOL_IPV6 && option_name == IPV6_V6ONLY) return 0; - if(level == SOL_IP && option_name == IP_TTL) return 0; - - if(level == IPPROTO_TCP || (level == SOL_SOCKET && option_name == SO_KEEPALIVE)){ + if(level == IPPROTO_TCP || (level == SOL_SOCKET && option_name == SO_KEEPALIVE)) return 0; - } /* make sure we don't touch any standard outputs */ if(socket == STDIN_FILENO || socket == STDOUT_FILENO || socket == STDERR_FILENO) return(realsetsockopt(socket, level, option_name, option_value, option_len)); @@ -359,6 +362,9 @@ int setsockopt(SETSOCKOPT_SIG) int getsockopt(GETSOCKOPT_SIG) { dwr("getsockopt(%d)\n", sockfd); + if(is_mapped_to_service(sockfd) < 0) { // First, check if the service manages this + return realgetsockopt(sockfd, level, optname, optval, optlen); + } int err = realgetsockopt(sockfd, level, optname, optval, optlen); // FIXME: this condition will need a little more intelligence later on // -- we will need to know if this fd is a local we are spoofing, or a true local @@ -760,7 +766,7 @@ int accept(ACCEPT_SIG) } pthread_mutex_unlock(&lock); errno = ERR_OK; - dwr("accept()=%d\n", new_conn_socket); + dwr("*accept()=%d\n", new_conn_socket); handle_error("accept", "", new_conn_socket); return new_conn_socket; // OK } @@ -770,7 +776,7 @@ int accept(ACCEPT_SIG) return -1; } } - errno = EBADF; /* necessary? */ + errno = EBADF; handle_error("accept", "EBADF - Error reading signal byte from service", -1); return -1; } @@ -813,7 +819,7 @@ int listen(LISTEN_SIG) if(sockfd == STDIN_FILENO || sockfd == STDOUT_FILENO || sockfd == STDERR_FILENO) return(reallisten(sockfd, backlog)); - if(!is_mapped_to_service(sockfd)) { + if(is_mapped_to_service(sockfd) < 0) { // We now know this socket is not one of our socketpairs int err = reallisten(sockfd, backlog); dwr("reallisten()=%d\n", err); diff --git a/netcon/README.md b/netcon/README.md index 79c358617..9bb8dbdb4 100644 --- a/netcon/README.md +++ b/netcon/README.md @@ -160,5 +160,6 @@ To Test: ### Alpha Unaddressed bug log - Possible CPU max-out during sshd kill or multiple ssh connect/disconnects + - sshd will enter an infinite accept loop maxing out CPU if service dies diff --git a/netcon/libintercept.so.1.0 b/netcon/libintercept.so.1.0 new file mode 100755 index 0000000000000000000000000000000000000000..9c4b8d4c5eef6654ddc6236215dfe0ede7355857 GIT binary patch literal 57416 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 O8|h`9xUSeSR{sL``!|dL literal 0 HcmV?d00001