Nah, don't worry. If no firewalls are present, UDP spoofing is trivial anyway, so you are not making the UDP gmond comms materially less secure.
kind regards, richard -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Adeyemi Adesanya Sent: 08 May 2006 18:32 To: [EMAIL PROTECTED] Cc: ganglia-developers@lists.sourceforge.net; Steven A. DuChene; Yaroslav Halchenko Subject: Re: [Ganglia-developers] Host spoofing for SNMP Positive response from folks so far! Sounds like we should see this feature in an upcoming release. Does anyone have any concerns regarding possible abuse of this feature? Maybe I'm worrying over nothing. Gmond already has decent access controls to accept/deny messages from hosts. I'd probably pay greater attention to this in my configuration files to ensure that unauthorized spoof messages don't get processed. ------- Yemi On May 8, 2006, at 3:20 AM, Martin Knoblauch wrote: > Yemi, > > COOL. I have seen others to comment on it. When you are ready with > the > "final" patch just open an bugzilla entry and attach the patch to it > (diff -udpr). Post the bugzilla # and someone will take care of the > thing. > > Martin > > --- Adeyemi Adesanya <[EMAIL PROTECTED]> wrote: > >> >> OK, >> >> To those of you who have been waiting for my Ganglia host spoofing >> mod/hack - I'm sorry! Time to put the powers of open source >> development to work. This modification of mine will allow you to send >> >> gmetric messages on behalf of another host. This host may be real or >> >> imaginary. No steps are taken to verify the host name and IP you >> provide to gmetric!!! >> >> Example: >> >> gmetric --conf=/var/ganglia/gmond.conf -- >> spoof=123.456.678.901:YemiAbstractDevice --name=speed --value=35 -- >> units=mph --type=uint8 >> >> Will cause recipient gmond daemons to insert the metric update under >> >> the host name "YemiAbstractDevice" with the IP address >> 123.456.678.901 . >> >> This may prove to be invaluable for monitoring SNMP devices or >> anything else you cannot run gmond on directly. >> >> To implement this feature I added a spoof gmetric message structure >> to the xdr protocol. The spoof data consists of the fake name and IP >> >> address along with the regular gmetric data. Nothing fancy. When >> gmond gets this message it uses the spoof data instead of taking the >> >> info from the IP header. Once the data is inserted into the gmond >> hash table it is indistinguishable. You can see this by querying the >> >> XML port. >> >> This is a first attempt and I hope that we can revise and improve >> this code in order to get it into a future release. We should >> consider the security implications of this feature. I suggest you >> restrict your user's access to this patched implementation for now. >> >> >> Below are patches for the ganglia-3.0.3 source code files: >> >> lib/protocol.x >> lib/libgmond.c >> lib/ganglia.h >> gmond/gmond.c >> gmetric/gmetric.c >> >> Save the patches to patchfiles and use the patch command: >> >> patch <originalfile> <patchfile> >> >> The only other mod required is to gmetric/cmdline.sh . Just add the >> following option line to this file and run gengetopt: >> option "spoof" S "IP address and name of host/device (colon >> separated) we are spoofing" string default="" no >> >> I think gmetric/cmdline.sh may only be available from the CVS source >> >> tree. >> >> That's it. recompile and try sending a spoof message to a modified >> gmond. I look forward to your feedback. Let's see if we can get this >> >> (or something like it) in an upcoming release. >> >> ------- >> Yemi >> >> >> >> >> ===== Use the following to patch lib/protocol.x ========== 26a27,33 >>> /* Yemi */ >>> struct Ganglia_spoof_message { >>> string spoofName<>; >>> string spoofIP<>; >>> struct Ganglia_gmetric_message gmetric; >>> }; >>> >> 95c102,104 >> < GANGLIA_NUM_25_METRICS /* this should always directly follow the >> >> last 25 metric_* */ >> --- >>> GANGLIA_NUM_25_METRICS, /* this should always directly follow >> the last 25 metric_* */ >>> /* Yemi */ >>> spoof_metric >> 100a110,112 >>> /* Yemi */ >>> case spoof_metric: >>> Ganglia_spoof_message spmetric; >> ===== Use the following to patch lib/libgmond.c ========== >> 702a703,750 >>> // Yemi >>> int >>> Ganglia_gmetric_send_spoof( Ganglia_gmetric gmetric, >> Ganglia_udp_send_channels send_channels, char* spoof_info) >>> { >>> int len; >>> XDR x; >>> char gmetricmsg[1500]; >>> Ganglia_message msg; >>> char *spoofName; >>> char *spoofIP; >>> char *buff; >>> int spoof_info_len; >>> int result; >>> >>> spoof_info_len = strlen(spoof_info); >>> buff = malloc(spoof_info_len+1); >>> strcpy(buff,spoof_info); >>> spoofIP = buff; >>> if( !(spoofName = strchr(buff+1,':')) ){ >>> fprintf(stderr,"Incorrect format for spoof argument. >> exiting. >> \n"); >>> exit(1); >>> } >>> *spoofName = 0; >>> spoofName++; >>> if(!(*spoofName)){ >>> fprintf(stderr,"Incorrect format for spoof argument. >> exiting. >> \n"); >>> exit(1); >>> } >>> printf(" spoofName: %s spoofIP: %s \n",spoofName,spoofIP); >>> >>> msg.id = spoof_metric; >>> >>> msg.Ganglia_message_u.spmetric.spoofName = spoofName; >>> msg.Ganglia_message_u.spmetric.spoofIP = spoofIP; >>> msg.Ganglia_message_u.spmetric.gmetric = *(gmetric->msg); >>> >>> // memcpy( &(msg.Ganglia_message_u.gmetric), gmetric->msg, >> sizeof >> (Ganglia_gmetric_message)); >>> >>> /* Send the message */ >>> xdrmem_create(&x, gmetricmsg, 1500, XDR_ENCODE); >>> xdr_Ganglia_message(&x, &msg); >>> len = xdr_getpos(&x); >>> result = Ganglia_udp_send_message( send_channels, gmetricmsg, >> len); >>> free(buff); >>> return result; >>> >>> } >>> >> ===== Use the following to patch lib/ganglia.h ========== 60a61,62 >>> // Yemi >>> int Ganglia_gmetric_send_spoof( Ganglia_gmetric gmetric, >> Ganglia_udp_send_channels send_channels, char* spoof_info); ===== Use >> the following to patch gmond/gmond.c ========== 581c581 >> < >> --- >>> // Yemi >> 583c583 >> < Ganglia_host_get( char *remoteip, apr_sockaddr_t *sa, >> Ganglia_message *fullmsg) >> --- >>> Ganglia_host_get( char *remIP, apr_sockaddr_t *sa, Ganglia_message >> >> *fullmsg) >> 589c589,590 >> < >> --- >>> char *remoteip = remIP; >>> >> 593a595,599 >>> >>> if(fullmsg->id == spoof_metric){ >>> hostname = fullmsg->Ganglia_message_u.spmetric.spoofName; >>> remoteip = fullmsg->Ganglia_message_u.spmetric.spoofIP; >>> } >> 741a748,756 >>> // Yemi >>> static Ganglia_metric * >>> Ganglia_message_find_spmetric( Ganglia_host *host, Ganglia_message >> >> *message) >>> { >>> /* Keyed on the name element of the gmetric sent */ >>> return (Ganglia_metric *)apr_hash_get( host->gmetrics, >>> message- >>> Ganglia_message_u.spmetric.gmetric.name, >>> APR_HASH_KEY_STRING); >>> } >> 756c771 >> < >> --- >>> >> 764a780,784 >>> // Yemi >>> else if(message->id == spoof_metric) >>> { >>> metric = Ganglia_message_find_spmetric( host, message); >>> } >> 787a808,812 >>> // Yemi >>> if(message->id == spoof_metric) >>> { >>> metric->name = apr_pstrdup( metric->pool, message- >>> Ganglia_message_u.spmetric.gmetric.name ); >>> } >> 796c821,823 >> < memcpy(&(metric->message), message, sizeof(Ganglia_message)); >> --- >>> // Yemi >>> if(message->id == spoof_metric){ >>> // Store data as regular gmetric in hash table!! >> 798c825,833 >> < if(message->id == metric_user_defined) >> --- >>> metric->message.id = metric_user_defined; >>> metric->message.Ganglia_message_u.gmetric = message- >>> Ganglia_message_u.spmetric.gmetric; >>> >>> >>> }else{ >>> memcpy(&(metric->message), message, >> sizeof(Ganglia_message)); >>> } >>> >>> if(message->id == metric_user_defined || message->id == >> spoof_metric) >> ===== Use the following to patch gmetric/gmetric.c ========== >> 75c75,81 >> < rval = Ganglia_gmetric_send(gmetric, send_channels); >> --- >>> //Yemi >>> if(!strlen(args_info.spoof_arg)) >>> { >>> rval = Ganglia_gmetric_send(gmetric, send_channels); >>> }else{ >>> rval = Ganglia_gmetric_send_spoof(gmetric, >> send_channels,args_info.spoof_arg); >>> } >> ==== end of patches ======= >> >> >> >> ------------------------------------------------------- >> Using Tomcat but need to do more? Need to support web services, >> security? Get stuff done quickly with pre-integrated technology to >> make your job easier >> Download IBM WebSphere Application Server v.1.0.1 based on Apache >> Geronimo >> > http://sel.as-us.falkag.net/sel? > cmd=lnk&kid=120709&bid=263057&dat=121642 >> _______________________________________________ >> Ganglia-developers mailing list >> Ganglia-developers@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/ganglia-developers >> >> > > ------------------------------------------------------ > Martin Knoblauch > email: k n o b i AT knobisoft DOT de > www: http://www.knobisoft.de > > > ------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, > security? > Get stuff done quickly with pre-integrated technology to make your > job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache > Geronimo > http://sel.as-us.falkag.net/sel? > cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Ganglia-developers mailing list > Ganglia-developers@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ganglia-developers ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Ganglia-developers mailing list Ganglia-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ganglia-developers ------------------------------------------------------------------------ For more information about Barclays Capital, please visit our web site at http://www.barcap.com. Internet communications are not secure and therefore the Barclays Group does not accept legal responsibility for the contents of this message. Although the Barclays Group operates anti-virus programmes, it does not accept responsibility for any damage whatsoever that is caused by viruses being passed. Any views or opinions presented are solely those of the author and do not necessarily represent those of the Barclays Group. Replies to this email may be monitored by the Barclays Group for operational or business reasons. ------------------------------------------------------------------------