Changeset 180


Ignore:
Timestamp:
Sep 23, 2008, 6:55:45 PM (16 years ago)
Author:
katerina
Message:

Process lookup (Linux) for open ports (ticket #117). Also fix for minor dnmalloc bug (ticket #119).

Location:
trunk
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Makefile.in

    r171 r180  
    150150        $(srcsrc)/sh_userfiles.c $(srcsrc)/sh_prelude.c \
    151151        $(srcsrc)/sh_prelink.c $(srcsrc)/sh_static.c \
    152         $(srcsrc)/sh_portcheck.c \
     152        $(srcsrc)/sh_portcheck.c $(srcsrc)/sh_port2proc.c\
    153153        $(srcsrc)/sh_processcheck.c $(srcsrc)/sh_prelude_old.c \
    154154        $(srcsrc)/sh_pthread.c $(srcsrc)/sh_string.c \
     
    167167        zAVLTree.o sh_socket.o sh_ignore.o sh_prelude.o \
    168168        sh_mounts.o sh_userfiles.o sh_prelink.o sh_static.o \
    169         sh_processcheck.o sh_portcheck.o sh_prelude_old.o \
     169        sh_processcheck.o sh_portcheck.o sh_port2proc.o sh_prelude_old.o \
    170170        sh_pthread.o sh_string.o dnmalloc.o
    171171
     
    17141714dnmalloc.o: $(srcsrc)/dnmalloc.c Makefile config.h
    17151715t-test1.o: $(srcsrc)/t-test1.c Makefile config.h $(srcinc)/malloc.h
     1716sh_port2proc.o: $(srcsrc)/sh_port2proc.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_error_min.h $(srcinc)/sh_utils.h $(srcinc)/sh_pthread.h
  • trunk/depend.dep

    r172 r180  
    6868dnmalloc-portable.o: $(srcsrc)/dnmalloc-portable.c Makefile config.h
    6969dnmalloc.o: $(srcsrc)/dnmalloc.c Makefile config.h
     70sh_port2proc.o: $(srcsrc)/sh_port2proc.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_error_min.h $(srcinc)/sh_utils.h $(srcinc)/sh_pthread.h
  • trunk/depend.sum

    r172 r180  
    1 1366887748
     12749055739
  • trunk/docs/Changelog

    r177 r180  
    1 2.4.6a:
     12.4.7:
     2        * sh_forward.c: increase TIME_OUT_DEF to 900 secs
     3        * dnmalloc.c: initialize rc in dnmalloc_fork_child(),
     4          reported by B. Podlipnik
     5       
     62.4.6a (09-10-2008):
    27        * fix compile problem on Fedora 9 (reported by pierpaolo),
    38          'struct ucred' in sh_socket.c requires _GNU_SOURCE
  • trunk/src/dnmalloc.c

    r174 r180  
    15091509}
    15101510void dnmalloc_fork_child(void) {
    1511   int rc;
     1511  int rc = 0;
    15121512#ifdef __GLIBC__
    15131513  if (dnmalloc_use_mutex)
  • trunk/src/sh_cat.c

    r170 r180  
    135135#ifdef SH_USE_PORTCHECK
    136136  { MSG_PORT_MISS,   SH_ERR_SEVERE,  EVENT, N_("msg=\"POLICY [ServiceMissing] %s\"")},
    137   { MSG_PORT_NEW,    SH_ERR_SEVERE,  EVENT, N_("msg=\"POLICY [ServiceNew] %s\"")},
    138   { MSG_PORT_RESTART,SH_ERR_SEVERE,  EVENT, N_("msg=\"POLICY [ServiceRestarted] %s\"")},
    139   { MSG_PORT_NEWPORT,SH_ERR_SEVERE,  EVENT, N_("msg=\"POLICY [ServicePortSwitch] %s\"")},
     137  { MSG_PORT_NEW,    SH_ERR_SEVERE,  EVENT, N_("msg=\"POLICY [ServiceNew] %s\" path=\"%s\" userid=\"%s\"")},
     138  { MSG_PORT_RESTART,SH_ERR_SEVERE,  EVENT, N_("msg=\"POLICY [ServiceRestarted] %s\" path=\"%s\" userid=\"%s\"")},
     139  { MSG_PORT_NEWPORT,SH_ERR_SEVERE,  EVENT, N_("msg=\"POLICY [ServicePortSwitch] %s\" path=\"%s\" userid=\"%s\"")},
    140140#endif
    141141
     
    453453#ifdef SH_USE_PORTCHECK
    454454  { MSG_PORT_MISS,   SH_ERR_SEVERE,  EVENT, N_("msg=<POLICY [ServiceMissing] %s>")},
    455   { MSG_PORT_NEW,    SH_ERR_SEVERE,  EVENT, N_("msg=<POLICY [ServiceNew] %s>")},
    456   { MSG_PORT_RESTART,SH_ERR_SEVERE,  EVENT, N_("msg=<POLICY [ServiceRestarted] %s>")},
    457   { MSG_PORT_NEWPORT,SH_ERR_SEVERE,  EVENT, N_("msg=<POLICY [ServicePortSwitch] %s>")},
     455  { MSG_PORT_NEW,    SH_ERR_SEVERE,  EVENT, N_("msg=<POLICY [ServiceNew] %s> path=<%s> userid=<%s>")},
     456  { MSG_PORT_RESTART,SH_ERR_SEVERE,  EVENT, N_("msg=<POLICY [ServiceRestarted] %s> path=<%s> userid=<%s>")},
     457  { MSG_PORT_NEWPORT,SH_ERR_SEVERE,  EVENT, N_("msg=<POLICY [ServicePortSwitch] %s> path=<%s> userid=<%s>")},
    458458#endif
    459459
  • trunk/src/sh_portcheck.c

    r171 r180  
    135135
    136136static int sh_portchk_severity  = SH_ERR_SEVERE;
     137
     138extern char * sh_port2proc_query(int proto, struct in_addr * saddr, int sport,
     139                                 char * user, size_t userlen);
     140extern int sh_port2proc_prepare();
     141
    137142#endif
    138143
     
    509514      if (!portent)
    510515        {
     516          char * path;
     517          char   user[USER_MAX];
     518
    511519          snprintf (errbuf, sizeof(errbuf), _("port: %s:%d/%s (%s)"),
    512520                    inet_ntoa(haddr), port, SH_PROTO_STR(proto), service);
     
    515523                  inet_ntoa(haddr), port, SH_PROTO_STR(proto), service);
    516524#else
     525          path = sh_port2proc_query(proto, &haddr, port, user, sizeof(user));
    517526          SH_MUTEX_LOCK(mutex_thread_nolog);
    518527          sh_error_handle(sh_portchk_severity, FIL__, __LINE__, 0,
    519                           MSG_PORT_NEW, errbuf);
     528                          MSG_PORT_NEW, errbuf, path, user);
    520529          SH_MUTEX_UNLOCK(mutex_thread_nolog);
     530          SH_FREE(path);
    521531#endif
    522532          /*
     
    527537      else if (portent->status == SH_PORT_MISS && portent->flag != SH_PORT_IGN)
    528538        {
     539          char * path;
     540          char   user[USER_MAX];
     541
    529542          snprintf (errbuf, sizeof(errbuf), _("port: %s:%d/%s (%s), was %d/%s"),
    530543                    inet_ntoa(haddr), port, SH_PROTO_STR(proto), service, portent->port, SH_PROTO_STR(proto));
     
    532545          fprintf(stderr, _("service: %s\n"), errbuf);
    533546#else
     547          path = sh_port2proc_query(proto, &haddr, port, user, sizeof(user));
    534548          SH_MUTEX_LOCK(mutex_thread_nolog);
    535549          sh_error_handle(sh_portchk_severity, FIL__, __LINE__, 0,
    536                           MSG_PORT_RESTART, errbuf);
     550                          MSG_PORT_RESTART, errbuf, path, user);
    537551          SH_MUTEX_UNLOCK(mutex_thread_nolog);
     552          SH_FREE(path);
    538553#endif
    539554
     
    542557      else if (port != portent->port && (-1) != portent->port)
    543558        {
     559          char * path;
     560          char   user[USER_MAX];
     561
    544562          snprintf (errbuf, sizeof(errbuf), _("port: %s:%d/%s (%s), was %d/%s"),
    545563                    inet_ntoa(haddr), port, SH_PROTO_STR(proto), service, portent->port, SH_PROTO_STR(proto));
     
    547565          fprintf(stderr, _("service: %s\n"), errbuf);
    548566#else
     567          path = sh_port2proc_query(proto, &haddr, port, user, sizeof(user));
    549568          SH_MUTEX_LOCK(mutex_thread_nolog);
    550569          sh_error_handle(sh_portchk_severity, FIL__, __LINE__, 0,
    551                           MSG_PORT_NEWPORT, errbuf);
     570                          MSG_PORT_NEWPORT, errbuf, path, user);
    552571          SH_MUTEX_UNLOCK(mutex_thread_nolog);
     572          SH_FREE(path);
    553573#endif
    554574          portent->port   = port;
     
    564584      if (!portent)
    565585        {
     586          char * path;
     587          char   user[USER_MAX];
     588
    566589          snprintf (errbuf, sizeof(errbuf), _("port: %s:%d/%s (%s)"),
    567590                    inet_ntoa(haddr), port, SH_PROTO_STR(proto), check_services(port, proto));
     
    570593                  inet_ntoa(haddr), port, SH_PROTO_STR(proto), check_services(port, proto));
    571594#else
     595          path = sh_port2proc_query(proto, &haddr, port, user, sizeof(user));
    572596          SH_MUTEX_LOCK(mutex_thread_nolog);
    573597          sh_error_handle(sh_portchk_severity, FIL__, __LINE__, 0,
    574                           MSG_PORT_NEW, errbuf);
     598                          MSG_PORT_NEW, errbuf, path, user);
    575599          SH_MUTEX_UNLOCK(mutex_thread_nolog);
     600          SH_FREE(path);
    576601#endif
    577602
     
    582607      else if (portent->status == SH_PORT_MISS && portent->flag != SH_PORT_IGN)
    583608        {
     609          char * path;
     610          char   user[USER_MAX];
     611
    584612          snprintf (errbuf, sizeof(errbuf), _("port: %s:%d/%s (%s)"),
    585613                    inet_ntoa(haddr), port, SH_PROTO_STR(proto), check_services(port, proto));
     
    587615          fprintf(stderr, _("port   : %s\n"), errbuf);
    588616#else
     617          path = sh_port2proc_query(proto, &haddr, port, user, sizeof(user));
    589618          SH_MUTEX_LOCK(mutex_thread_nolog);
    590619          sh_error_handle(sh_portchk_severity, FIL__, __LINE__, 0,
    591                           MSG_PORT_RESTART, errbuf);
     620                          MSG_PORT_RESTART, errbuf, path, user);
    592621          SH_MUTEX_UNLOCK(mutex_thread_nolog);
     622          SH_FREE(path);
    593623#endif
    594624
     
    14821512#endif
    14831513        }
     1514
     1515      sh_port2proc_prepare();
     1516
    14841517      if (sh_portchk_check_udp == 1)
    14851518        sh_portchk_scan_ports_udp(min_port, -1);
    14861519      sh_portchk_scan_ports_tcp(min_port, -1);
     1520
     1521
    14871522      sh_portchk_check_list (&portlist_tcp, IPPROTO_TCP, SH_PORT_REPORT);
    14881523      if (sh_portchk_check_udp == 1)
    14891524        sh_portchk_check_list (&portlist_udp, IPPROTO_UDP, SH_PORT_REPORT);
     1525
    14901526    }
    14911527  SH_MUTEX_UNLOCK(mutex_port_check);
  • trunk/src/sh_prelude.c

    r170 r180  
    700700        idmef_address_t *address;
    701701        idmef_node_t *node;
     702        idmef_user_t *user;
     703        idmef_process_t *process;
    702704        idmef_service_t *service;
    703705        idmef_source_t *source = idmef_alert_get_next_source(alert, NULL);
     
    847849
    848850        SH_FREE( new );
     851
     852        ptr = get_value(msg, _("user"), NULL);
     853
     854        if ( ptr ) {
     855
     856                ret = idmef_source_new_user(source, &user);
     857                if ( ret < 0 ) {
     858                        free(ptr);
     859                        return ret;
     860                }
     861
     862                ret = idmef_user_new_ident(user, &str);
     863                if ( ret < 0 ) {
     864                        free(ptr);
     865                        return ret;
     866                }
     867                prelude_string_set_nodup(str, ptr);
     868        }
     869
     870        ptr = get_value(msg, _("path"), NULL);
     871
     872        if ( ptr ) {
     873
     874                /*
     875                 * In term of IDMEF, this is the full path,
     876                 * including the name.
     877                 */
     878                ret = idmef_source_new_process(source, &process);
     879                if ( ret < 0 ) {
     880                        free(ptr);
     881                        return ret;
     882                }
     883
     884                ret = idmef_process_new_path(process, &str);
     885                if ( ret < 0 ) {
     886                        free(ptr);
     887                        return ret;
     888                }
     889                prelude_string_set_nodup(str, ptr);
     890
     891                ptr = strrchr(ptr, '/');
     892                if ( ptr ) {
     893                        ret = idmef_process_new_name(process, &str);
     894                        if ( ret == 0 ) {
     895                                prelude_string_set_dup(str, ptr + 1);
     896                        }
     897                }
     898        }
    849899
    850900        return 0;
Note: See TracChangeset for help on using the changeset viewer.