Changeset 375

Show
Ignore:
Timestamp:
08/27/08 15:24:52 (10 years ago)
Author:
cseifert
Message:

made terminate functionality of server configurable

Location:
capture-hpc/trunk
Files:
9 modified

Legend:

Unmodified
Added
Removed
  • capture-hpc/trunk/ReleaseNotes-HPC.txt

    r371 r375  
    1212+ upgraded vmware server to 1.0.6, java 6 update 7, NSIS 2.38, boost 1.35.0, visual studio 2008 (requires new VC++ Redist Libraries!) 
    1313+ removed timeout factor and added absolute timeout/delay config values (see documentation for description of each option) 
    14 + modified tailing of input file; if no more URLs after a specific timeout are detected, the client will stop. 
     14+ modified tailing of input file; if no more URLs after a specific timeout are detected, the capture server can configured to terminate or keep tailing the input file for new URLs. 
    1515+ implemented staggering revert of virtual machines. If server is configured with multiple VMs, they are not all reverted at the same time. 
    1616+ changed threading structure to be more stable (leads to less client inactivity errors) 
  • capture-hpc/trunk/TroubleShootingGuide-HPC.txt

    r367 r375  
    464612. I am getting a lot of VM stalled errors. 
    4747This might occur when running many client instances (e.g. 50 iexplorebulk) at the same time or when the box that runs the client VM is not very powerful or the connection to the Internet is slow. In those cases, simply increase the timeouts in the config.xml and try again. 
     48 
     4913. The revert of the virtual machine fails with error 136. 
     50This error can occur on linux if the revert binary can not be executed. This could be due to missing executable flag or due to OS/lib incompatibilities. If the revert binary can not be executed from the command line, it is recommended to recompile the capture-server from scratch. See compile_README.txt for details. 
  • capture-hpc/trunk/capture-client/ExclusionLists/ProcessMonitor.exl

    r365 r375  
    2929################################################### 
    3030+       iexplore.exe    .*      C:\\Program Files\\Internet Explorer\\iexplore.exe 
     31+       IEXPLORE.EXE    .*      C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE 
    3132#agent server is an activeX control that starts upon displaying multimedia content 
    3233+       agentsvr.exe    .*      C:\\WINDOWS\\msagent\\agentsvr.exe 
  • capture-hpc/trunk/capture-client/ExclusionLists/RegistryMonitor.exl

    r365 r375  
    9090+       SetValueKey     C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\Window_Placement 
    9191+       SetValueKey     C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\Fullscreen 
     92+       SetValueKey     C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\NotificationDownloadComplete 
    9293+       SetValueKey     C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\TypedURLs 
    9394+       SetValueKey     C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\Toolbar\\Locked 
     
    138139+       DeleteValueKey  C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\Window_Placement 
    139140+       DeleteValueKey  C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\Fullscreen 
     141+       DeleteValueKey  C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\NotificationDownloadComplete 
    140142+       DeleteValueKey  C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\TypedURLs 
    141143+       DeleteValueKey  C:\\Program Files\\Internet Explorer\\iexplore\.exe     HKCU\\Software\\Microsoft\\Internet Explorer\\Toolbar\\Locked 
  • capture-hpc/trunk/capture-server/Readme.txt

    r371 r375  
    2424 
    2525* Open up the config.xml 
    26 * Configure the global options, such as the time that is allowed to pass to retrieve a URL, the option to automatically retrieve malware or network captures (on benign and malicious URLs), and the directive to push the local exclusion list to the clients.  
     26* Configure the global options, such as the time that is allowed to pass to retrieve a URL, the option to automatically retrieve malware or network captures (on benign and malicious URLs), whether the capture-server should terminate or keep tailing the input file once all URLs are processed, and the directive to push the local exclusion list to the clients.  
    2727  Various timeout/delay options can also be configured via the global option (all in seconds): 
    2828  - client_inactivity_timeout: the capture client indicates that it is still alive via responding to a ping by the server. This happens every 10 seconds. If no pong is received by the client for the duration of the client_inactivity_timeout, the client inactivity error is thrown and the VM reverted. An example when this could happen is when a malicious site causes a blue screen. 
     
    5252                        capture-network-packets-benign="false" 
    5353                        send-exclusion-lists="false" 
    54                         group_size="50" 
    55                                 vm_stalled_after_revert_timeout="120" 
    56                 revert_timeout="120" 
    57                 client_inactivity_timeout="60" 
    58                 vm_stalled_during_operation_timeout="300" 
    59                 same_vm_revert_delay="6" 
    60                 different_vm_revert_delay="24" 
     54                        terminate="true" 
     55                group_size="50" 
     56                        vm_stalled_after_revert_timeout="120" 
     57            revert_timeout="120" 
     58            client_inactivity_timeout="60" 
     59            vm_stalled_during_operation_timeout="300" 
     60            same_vm_revert_delay="6" 
     61            different_vm_revert_delay="24" 
    6162        /> 
    6263 
  • capture-hpc/trunk/capture-server/capture/VMwareServer.java

    r364 r375  
    9191                try { 
    9292                    if (item.function.equals("revert")) { 
    93                         Stats.vmRevert++; 
    94                         item.vm.setState(VM_STATE.REVERTING); 
    95  
    96                         final String address = this.address; 
    97                         final String username = this.username; 
    98                         final String password = this.password; 
    99                         final String vmPath = item.vm.getPath(); 
    100                         final String guestUsername = item.vm.getUsername(); 
    101                         final String guestPassword = item.vm.getPassword(); 
    102                         final String guestCmd = "cmd.exe"; 
    103                         final String cmdOptions = "/K " + item.vm.getCaptureClientPath() + " -s " + (String) ConfigManager.getInstance().getConfigOption("server-listen-address") + " -p " + (String) ConfigManager.getInstance().getConfigOption("server-listen-port") + " -a " + uniqueId + " -b " + item.vm.getVmUniqueId(); 
    104  
    105                         final int vmUniqueId = item.vm.getVmUniqueId(); 
    106  
    107  
    108                         String cmd = ""; 
    109                         if (System.getProperty("os.name", "Windows").toLowerCase().contains("windows")) { 
    110                             cmd = "revert.exe"; 
    111                         } else { 
    112                             cmd = "./revert"; 
    113                         } 
    114                         final String[] revertCmd = {cmd, address, username, password, vmPath, guestUsername, guestPassword, guestCmd, cmdOptions}; 
    115  
    116                         //for(int i=0;i<revertCmd.length;i++) 
    117                         //System.out.println(revertCmd[i]); 
    118  
    119                         Date start = new Date(System.currentTimeMillis()); 
    120  
    121                         class VixThread extends Thread { 
    122                             public int returnCode = 1; 
    123                             Process vix = null; 
    124  
    125                             public void run() { 
    126                                 BufferedReader stdInput = null; 
    127                                 try { 
    128                                     vix = Runtime.getRuntime().exec(revertCmd); 
    129                                     stdInput = new BufferedReader(new InputStreamReader(vix.getInputStream())); 
    130                                     returnCode = vix.waitFor(); 
    131                                     String line = stdInput.readLine(); 
    132                                     while (line != null) { 
    133                                         System.out.println(line); 
    134                                         line = stdInput.readLine(); 
     93                        synchronized (item.vm) { 
     94                            Stats.vmRevert++; 
     95                            item.vm.setState(VM_STATE.REVERTING); 
     96 
     97                            final String address = this.address; 
     98                            final String username = this.username; 
     99                            final String password = this.password; 
     100                            final String vmPath = item.vm.getPath(); 
     101                            final String guestUsername = item.vm.getUsername(); 
     102                            final String guestPassword = item.vm.getPassword(); 
     103                            final String guestCmd = "cmd.exe"; 
     104                            final String cmdOptions = "/K " + item.vm.getCaptureClientPath() + " -s " + (String) ConfigManager.getInstance().getConfigOption("server-listen-address") + " -p " + (String) ConfigManager.getInstance().getConfigOption("server-listen-port") + " -a " + uniqueId + " -b " + item.vm.getVmUniqueId(); 
     105 
     106                            final int vmUniqueId = item.vm.getVmUniqueId(); 
     107 
     108 
     109                            String cmd = ""; 
     110                            if (System.getProperty("os.name", "Windows").toLowerCase().contains("windows")) { 
     111                                cmd = "revert.exe"; 
     112                            } else { 
     113                                cmd = "./revert"; 
     114                            } 
     115                            final String[] revertCmd = {cmd, address, username, password, vmPath, guestUsername, guestPassword, guestCmd, cmdOptions}; 
     116 
     117                            //for(int i=0;i<revertCmd.length;i++) 
     118                            //System.out.println(revertCmd[i]); 
     119 
     120                            Date start = new Date(System.currentTimeMillis()); 
     121 
     122                            class VixThread extends Thread { 
     123                                public int returnCode = 1; 
     124                                Process vix = null; 
     125 
     126                                public void run() { 
     127                                    BufferedReader stdInput = null; 
     128                                    try { 
     129                                        vix = Runtime.getRuntime().exec(revertCmd); 
     130                                        stdInput = new BufferedReader(new InputStreamReader(vix.getInputStream())); 
     131                                        returnCode = vix.waitFor(); 
     132                                        String line = stdInput.readLine(); 
     133                                        while (line != null) { 
     134                                            System.out.println(line); 
     135                                            line = stdInput.readLine(); 
     136                                        } 
     137                                    } catch (InterruptedException e) { 
     138                                        returnCode = 17; //VIX_TIMEOUT 
     139                                        if (vix != null) { 
     140                                            System.out.println("vix null"); 
     141                                            try { 
     142                                                String line = stdInput.readLine(); 
     143                                                while (line != null) { 
     144                                                    System.out.println("line"); 
     145                                                    System.out.println(line); 
     146                                                    line = stdInput.readLine(); 
     147                                                } 
     148                                                System.out.println("line null"); 
     149                                            } catch (Exception ef) { 
     150                                                System.out.println(ef.getMessage()); 
     151                                                ef.printStackTrace(System.out); 
     152                                            } 
     153                                            vix.destroy(); 
     154                                        } 
     155                                        System.out.println("[" + currentTime() + " " + address + ":" + port + "-" + vmUniqueId + "] Reverting VM timed out."); 
     156                                    } catch (IOException e) { 
     157                                        returnCode = 11; //VIX_ERROR 
     158                                        if (vix != null) { 
     159                                            try { 
     160                                                String line = stdInput.readLine(); 
     161                                                while (line != null) { 
     162                                                    System.out.println(line); 
     163                                                    line = stdInput.readLine(); 
     164                                                } 
     165                                            } catch (Exception ef) { 
     166                                                System.out.println(ef.getMessage()); 
     167                                                ef.printStackTrace(System.out); 
     168                                            } 
     169                                            vix.destroy(); 
     170                                        } 
     171                                        e.printStackTrace(System.out); 
     172                                        System.out.println("[" + currentTime() + " " + address + ":" + port + "-" + vmUniqueId + "] Unable to access external Vix library."); 
    135173                                    } 
    136                                 } catch (InterruptedException e) { 
    137                                     returnCode = 17; //VIX_TIMEOUT 
    138                                     if (vix != null) { 
    139                                         System.out.println("vix null"); 
    140                                         try { 
    141                                             String line = stdInput.readLine(); 
    142                                             while (line != null) { 
    143                                                 System.out.println("line"); 
    144                                                 System.out.println(line); 
    145                                                 line = stdInput.readLine(); 
    146                                             } 
    147                                             System.out.println("line null"); 
    148                                         } catch (Exception ef) { 
    149                                             System.out.println(ef.getMessage()); 
    150                                             ef.printStackTrace(System.out); 
    151                                         } 
    152                                         vix.destroy(); 
    153                                     } 
    154                                     System.out.println("[" + currentTime() + " " + address + ":" + port + "-" + vmUniqueId + "] Reverting VM timed out."); 
    155                                 } catch (IOException e) { 
    156                                     returnCode = 11; //VIX_ERROR 
    157                                     if (vix != null) { 
    158                                         try { 
    159                                             String line = stdInput.readLine(); 
    160                                             while (line != null) { 
    161                                                 System.out.println(line); 
    162                                                 line = stdInput.readLine(); 
    163                                             } 
    164                                         } catch (Exception ef) { 
    165                                             System.out.println(ef.getMessage()); 
    166                                             ef.printStackTrace(System.out); 
    167                                         } 
    168                                         vix.destroy(); 
    169                                     } 
    170                                     e.printStackTrace(System.out); 
    171                                     System.out.println("[" + currentTime() + " " + address + ":" + port + "-" + vmUniqueId + "] Unable to access external Vix library."); 
    172174                                } 
    173175                            } 
    174                         } 
    175  
    176                         VixThread vixThread = new VixThread(); 
    177                         vixThread.start(); 
    178                         for (int i = 0; i < REVERT_TIMEOUT; i++) { 
     176 
     177                            VixThread vixThread = new VixThread(); 
     178                            vixThread.start(); 
     179                            for (int i = 0; i < REVERT_TIMEOUT; i++) { 
     180                                if (vixThread.isAlive()) { 
     181                                    Thread.currentThread().sleep(1000); 
     182                                } else { 
     183                                    i = REVERT_TIMEOUT; //vix completed before timeout was reached 
     184                                } 
     185                            } 
    179186                            if (vixThread.isAlive()) { 
    180                                 Thread.currentThread().sleep(1000); 
    181                             } else { 
    182                                 i = REVERT_TIMEOUT; //vix completed before timeout was reached 
    183                             } 
    184                         } 
    185                         if (vixThread.isAlive()) { 
    186                             vixThread.interrupt(); 
    187                         } 
    188                         vixThread.join(1000); //wait for a chance of for thread to finish 
    189  
    190                         int error = vixThread.returnCode; 
    191  
    192                         synchronized (item.vm) { 
     187                                vixThread.interrupt(); 
     188                            } 
     189                            vixThread.join(1000); //wait for a chance of for thread to finish 
     190 
     191                            int error = vixThread.returnCode; 
     192 
     193 
    193194                            if (error == 0) { 
    194195                                item.vm.setLastContact(Calendar.getInstance().getTimeInMillis()); 
     
    221222                    queuedWorkItems.remove(item); 
    222223                } 
     224                System.out.println(item.vm.getLogHeader() + " Finished processing VM item: " + item.function); 
    223225            } else { 
    224226                try { 
     
    228230                } 
    229231            } 
     232 
    230233        } 
    231234    } 
  • capture-hpc/trunk/capture-server/capture/VirtualMachine.java

    r367 r375  
    3434        captureClientPath = cpath; 
    3535        lastContact = Calendar.getInstance().getTimeInMillis(); 
    36         if(System.getProperty("fixIds") != null && System.getProperty("fixIds").equals("true")) { 
     36        if (System.getProperty("fixIds") != null && System.getProperty("fixIds").equals("true")) { 
    3737            vmUniqueId = 1; 
    3838        } else { 
     
    8585     */ 
    8686    public void setState(VM_STATE newState) { 
    87             vmStateTimeChange = Calendar.getInstance().getTimeInMillis(); 
     87        vmStateTimeChange = Calendar.getInstance().getTimeInMillis(); 
    8888        synchronized (this) {  // so we dont trample onto vms that have been reverted and are in waiting state 
    8989            if (newState == vmState) { 
     
    160160 
    161161        return true; 
    162     }     
     162    } 
    163163} 
    164164 
     
    170170    WAITING_TO_BE_REVERTED, 
    171171    RUNNING, 
    172         STOPPED, 
    173         SAVING, 
    174         WAITING_TO_BE_SAVED, 
    175         ERROR 
     172    STOPPED, 
     173    SAVING, 
     174    WAITING_TO_BE_SAVED, 
     175    ERROR 
    176176} 
  • capture-hpc/trunk/capture-server/config.xml

    r371 r375  
    88                        capture-network-packets-benign="false" 
    99                        send-exclusion-lists="false" 
    10                 group_size="20" 
     10            terminate="true" 
     11            group_size="20" 
    1112                        vm_stalled_after_revert_timeout="120" 
    1213            revert_timeout="120" 
  • capture-hpc/trunk/capture-server/config.xsd

    r367 r375  
    5757                <xs:attribute name="capture-network-packets-malicious" type="xs:boolean" use="required"></xs:attribute> 
    5858                        <xs:attribute name="capture-network-packets-benign" type="xs:boolean" use="required"></xs:attribute> 
    59                 <xs:attribute name="send-exclusion-lists" type="xs:boolean" use="required"></xs:attribute> 
     59                <xs:attribute name="terminate" type="xs:boolean" use="required"></xs:attribute> 
     60            <xs:attribute name="send-exclusion-lists" type="xs:boolean" use="required"></xs:attribute> 
    6061            <xs:attribute name="group_size" type="xs:integer" use="required"></xs:attribute> 
    6162                        <xs:attribute name="client_inactivity_timeout" type="xs:integer" use="required"></xs:attribute>