/***************************************************************************** InterposeVIA.c: Interposition library to capture function calls from the libvipl.so and attack the system by corrupting the returned values of the functions By: Miguel Torres Computer Science, Mississippi State University July 2003 Based on: Profiling and tracind gynamic library usage via interposition (Timothy Curry) Generation of application level audit data via library interposition (Kuperman and Spafford, 1999) The Thesis work by German Florez at the CCSR at Mississippi State University ******************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include #include // For Random Generation #include "randomlib.h" // Sets the Seeds for the random generator #define RANDOM (double)random()/RAND_MAX //#define RANDOM (double)random((time(NULL))%31328)/RAND_MAX #define INIT_RANDS \ srand(time(NULL)); \ RandomInitialise((int)(time(NULL)*RANDOM)%31328,(int)(time(NULL)*RANDOM)%30081); // Probability of start an attack #define PERCENTAJE 2.0 #define FALSE 0 #define TRUE 1 #define VIALIBRABRY "/usr/lib/libgnivlp.so" static int DoProfile2=TRUE; static int first_time=TRUE; #ifdef ATTACK /****************MAIN FUNCTIONS**********************************************/ VIP_RETURN VipPostSend (VIP_VI_HANDLE ViHandle, VIP_DESCRIPTOR *DescriptorPtr, VIP_MEM_HANDLE MemoryHandle){ typedef VIP_RETURN (*function_type) (VIP_VI_HANDLE ViHandle, VIP_DESCRIPTOR *DescriptorPtr, VIP_MEM_HANDLE MemoryHandle); static function_type function=NULL; static char* function_name="VipPostSend"; VIP_RETURN retval; DoProfile2=FALSE; #ifdef PRINT_OUTPUT printf("VipPostSend Profiling\n"); fflush(stdout); #endif function = (function_type) dlsym(RTLD_NEXT,function_name); retval=((*function)(ViHandle,DescriptorPtr,MemoryHandle)); // Attack if( first_time ){ first_time = FALSE; // Random Generation INIT_RANDS } if(RandomDouble(0.0,100.0)< PERCENTAJE){ #ifdef PRINT_OUTPUT printf("_VIA_POSTSEND Attacking\n"); fflush(stdout); #endif retval = VIP_INVALID_PARAMETER; } DoProfile2 =TRUE; return retval; } VIP_RETURN VipPostRecv (VIP_VI_HANDLE ViHandle, VIP_DESCRIPTOR * DescriptorPtr, VIP_MEM_HANDLE MemoryHandle){ typedef VIP_RETURN (*function_type) (VIP_VI_HANDLE ViHandle, VIP_DESCRIPTOR *DescriptorPtr, VIP_MEM_HANDLE MemoryHandle); static function_type function=NULL; static char* function_name="VipPostRecv"; VIP_RETURN retval; DoProfile2=FALSE; #ifdef PRINT_OUTPUT printf("_VipPostRecv Profiling\n"); fflush(stdout); #endif function = (function_type) dlsym(RTLD_NEXT,function_name); retval=((*function)(ViHandle, DescriptorPtr,MemoryHandle)); // Attack if( first_time ){ first_time = FALSE; // Random Generation INIT_RANDS } if(RandomDouble(0.0,100.0)< PERCENTAJE){ #ifdef PRINT_OUTPUT printf("_VIA_POSTRECV Attacking\n"); fflush(stdout); #endif retval = VIP_INVALID_PARAMETER; } DoProfile2 =TRUE; return retval; } #endif