Turn on ASLR via /DYNAMICBASE and DEP via SetProcessDEPPolicy().
authorgerald <gerald@f5534014-38df-0310-8fa8-9805f1628bb7>
Thu, 16 Sep 2010 19:20:06 +0000 (19:20 +0000)
committergerald <gerald@f5534014-38df-0310-8fa8-9805f1628bb7>
Thu, 16 Sep 2010 19:20:06 +0000 (19:20 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@34137 f5534014-38df-0310-8fa8-9805f1628bb7

capinfos.c
config.nmake
dftest.c
dumpcap.c
editcap.c
gtk/main.c
rawshark.c
tshark.c
wsutil/libwsutil.def
wsutil/privileges.c
wsutil/privileges.h

index 97d852cfef2666e1abde07514966c961c269e841..08017999b4e4306a3c74ab97995f0e359b65d88d 100644 (file)
@@ -816,7 +816,7 @@ main(int argc, char *argv[])
   /*
    * Get credential information for later use.
    */
-  get_credential_info();
+  init_process_policies();
 
 #ifdef HAVE_PLUGINS
   /* Register wiretap plugins */
index eaa3eced3b33da1c6e2c79a08b732231f7afecd9..f6e7885fe82232bb1331d19184a22e5d5dee0e01 100644 (file)
@@ -780,6 +780,7 @@ LOCAL_CFLAGS=$(LOCAL_CFLAGS) /D_BIND_TO_CURRENT_CRT_VERSION=1
 !IF "$(MSVC_VARIANT)" == "MSVC2008" || "$(MSVC_VARIANT)" == "MSVC2008EE" || "$(MSVC_VARIANT)" == "MSVC2010" || "$(MSVC_VARIANT)" == "MSVC2010EE"
 LOCAL_CFLAGS= $(LOCAL_CFLAGS) /MP
 !ENDIF
+
 # Linker flags:
 # /DEBUG  generate debug info
 # /PROFILE generate map file(s) for profiling
@@ -792,6 +793,15 @@ DLL_LDFLAGS =
 DLL_LDFLAGS = /MANIFEST:no
 !ENDIF
 
+# Enable ASLR. Requires VS2008 or later.
+# http://blogs.msdn.com/b/vcblog/archive/2009/05/21/dynamicbase-and-nxcompat.aspx
+# DEP is handled in init_process_policies()
+
+# ASLR http://msdn.microsoft.com/en-us/library/bb384887.aspx
+!IF $(MSC_VER_REQUIRED) >= 1500
+LOCAL_LDFLAGS= $(LOCAL_LDFLAGS) /DYNAMICBASE
+!ENDIF
+
 PLUGIN_LDFLAGS = /NOLOGO /INCREMENTAL:no $(LOCAL_LDFLAGS) $(DLL_LDFLAGS)
 
 #
index a9ed86458899105a3c45e2ed30ac5c68312a0516..5d82b6374b4a90ad0f7f48c7f7f4bf44dc66031d 100644 (file)
--- a/dftest.c
+++ b/dftest.c
@@ -68,7 +68,7 @@ main(int argc, char **argv)
        /*
         * Get credential information for later use.
         */
-       get_credential_info();
+       init_process_policies();
 
        /*
         * Attempt to get the pathname of the executable file.
index e89094d8a54a08c1097ecabde070404833d52ae1..4cb1b6c944d1fa5e2dae71b27fa4f579561d6033 100644 (file)
--- a/dumpcap.c
+++ b/dumpcap.c
@@ -3569,7 +3569,7 @@ main(int argc, char *argv[])
   /*                                                                   */
   /* ----------------------------------------------------------------- */
 
-  get_credential_info();
+  init_process_policies();
 
 #ifdef HAVE_LIBCAP
   /* If 'started with special privileges' (and using libcap)  */
index 33201c4e185af72c48f578ea98fd09ef23759b08..53c39beb86730e046ba52656f2038225a60c34bc 100644 (file)
--- a/editcap.c
+++ b/editcap.c
@@ -383,9 +383,9 @@ set_strict_time_adj(char *optarg_str_p)
       optarg_str_p++;
   }
 
-  /* 
-   * check for a negative adjustment 
-   * A negative strict adjustment value is a flag 
+  /*
+   * check for a negative adjustment
+   * A negative strict adjustment value is a flag
    * to adjust all frames by the specifed delta time.
    */
   if (*optarg_str_p == '-') {
@@ -807,7 +807,7 @@ main(int argc, char *argv[])
   /*
    * Get credential information for later use.
    */
-  get_credential_info();
+  init_process_policies();
 
 #ifdef HAVE_PLUGINS
   /* Register wiretap plugins */
@@ -1226,9 +1226,9 @@ main(int argc, char *argv[])
                 phdr = &snap_phdr;
               }
             } else {
-              /* 
-               * A negative strict time adjustment is requested. 
-               * Unconditionally set each timestamp to previous 
+              /*
+               * A negative strict time adjustment is requested.
+               * Unconditionally set each timestamp to previous
                * packet's timestamp plus delta.
                */
               snap_phdr = *phdr;
index 7c52b8f13b298c24c367d327d08bf19b72376bb6..d70880e382d3ce436cc6de9b18077b12e2d04f83 100644 (file)
@@ -2116,7 +2116,7 @@ main(int argc, char *argv[])
    * before doing anything else.
    * Let the user know if anything happened.
    */
-  get_credential_info();
+  init_process_policies();
   relinquish_special_privs_perm();
 
   /*
index 05eba3c3ea00836d2ebba08f0048cef3cbfa8cca..4218941eca71369f94812a8d56d66135e7b44415 100644 (file)
@@ -453,7 +453,7 @@ main(int argc, char *argv[])
     /*
      * Get credential information for later use.
      */
-    get_credential_info();
+    init_process_policies();
 
     /*
      * Clear the filters arrays
@@ -480,7 +480,7 @@ main(int argc, char *argv[])
     /*
      * Get credential information for later use.
      */
-    get_credential_info();
+    init_process_policies();
 
     /* nothing more than the standard GLib handler, but without a warning */
     log_flags =
index 5c63d2c7ef99c418ef78f87b4b2d11f6a336ab00..475d6a3bf6a11eaeb2f21386df15a9a37781c184 100644 (file)
--- a/tshark.c
+++ b/tshark.c
@@ -824,7 +824,7 @@ main(int argc, char *argv[])
   /*
    * Get credential information for later use.
    */
-  get_credential_info();
+  init_process_policies();
 
   /*
    * Attempt to get the pathname of the executable file.
index 1dff793519ffe7ccd31a353d26204ae363a00139..a0d4ed1b47175cdb2a72cdc1b5a9c1b7cf2bb416 100644 (file)
@@ -42,7 +42,7 @@ mpa_samples
 mpa_version
 
 ; privileges.c
-get_credential_info
+init_process_policies
 get_cur_groupname
 get_cur_username
 npf_sys_is_running
index 19adbd3d70c0e9ab655466c9bf90162489bc077e..4cd1ae4adbed22651ac3a0ed15a709918be272a3 100644 (file)
  * we'll need later.
  */
 void
-get_credential_info(void)
+init_process_policies(void)
 {
+       typedef BOOL (*SetProcessDEPPolicyHandler)(DWORD);
+       SetProcessDEPPolicyHandler PSetProcessDEPPolicy;
+
+#ifndef PROCESS_DEP_ENABLE
+#define PROCESS_DEP_ENABLE 1
+#endif
+
+       if (PSetProcessDEPPolicy = (SetProcessDEPPolicyHandler) GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "SetProcessDEPPolicy")) {
+               PSetProcessDEPPolicy(PROCESS_DEP_ENABLE);
+       }
+
        npf_sys_is_running();
 }
 
@@ -149,7 +160,7 @@ npf_sys_is_running() {
 
 static uid_t ruid, euid;
 static gid_t rgid, egid;
-static gboolean get_credential_info_called = FALSE;
+static gboolean init_process_polices_called = FALSE;
 
 /*
  * Called when the program starts, to save whatever credential information
@@ -157,14 +168,14 @@ static gboolean get_credential_info_called = FALSE;
  * That'd be the real and effective UID and GID on UNIX.
  */
 void
-get_credential_info(void)
+init_process_polices(void)
 {
        ruid = getuid();
        euid = geteuid();
        rgid = getgid();
        egid = getegid();
 
-       get_credential_info_called = TRUE;
+       init_process_polices_called = TRUE;
 }
 
 /*
@@ -174,7 +185,7 @@ get_credential_info(void)
 gboolean
 started_with_special_privs(void)
 {
-       g_assert(get_credential_info_called);
+       g_assert(init_process_polices_called);
 #ifdef HAVE_ISSETUGID
        return issetugid();
 #else
index e45b77807fb498af7a4204069122ce48d4c3cb4f..7526a8ce754d3518098d915564407168247ead5d 100644 (file)
  */
 
 /**
- * Called when the program starts, to save whatever credential information
- * we'll need later.
+ * Called when the program starts, to enable security features and save
+ * whatever credential information we'll need later.
  */
-extern void get_credential_info(void);
+extern void init_process_policies(void);
 
 /**
  * Was this program started with special privileges?  get_credential_info()