OpenSecurity/bin/vmmanager.pyw
changeset 143 36948a118f71
parent 141 ca6622112caa
child 149 cc7091df8c3f
     1.1 --- a/OpenSecurity/bin/vmmanager.pyw	Wed Apr 30 15:34:39 2014 +0100
     1.2 +++ b/OpenSecurity/bin/vmmanager.pyw	Fri May 09 13:21:59 2014 +0100
     1.3 @@ -21,7 +21,9 @@
     1.4  from opensecurity_util import logger, setupLogger, OpenSecurityException
     1.5  import ctypes
     1.6  import itertools
     1.7 -import _winreg
     1.8 +import win32api
     1.9 +import win32con
    1.10 +import win32security
    1.11  DEBUG = True
    1.12  
    1.13  class VMManagerException(Exception):
    1.14 @@ -174,16 +176,16 @@
    1.15      @staticmethod
    1.16      def isMassStorageDevice(device):
    1.17          keyname = 'SYSTEM\CurrentControlSet\Enum\USB' + '\VID_' + device.vendorid+'&'+'PID_'+ device.productid
    1.18 -        key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, keyname)
    1.19 +        key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, keyname)
    1.20          #subkeys = _winreg.QueryInfoKey(key)[0]
    1.21          #for i in range(0, subkeys):
    1.22          #    print _winreg.EnumKey(key, i)     
    1.23 -        devinfokeyname = _winreg.EnumKey(key, 0)
    1.24 -        _winreg.CloseKey(key)
    1.25 +        devinfokeyname = win32api.RegEnumKey(key, 0)
    1.26 +        win32api.RegCloseKey(key)
    1.27  
    1.28 -        devinfokey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, keyname+'\\'+devinfokeyname)
    1.29 -        value = _winreg.QueryValueEx(devinfokey, 'SERVICE')[0]
    1.30 -        _winreg.CloseKey(devinfokey)
    1.31 +        devinfokey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, keyname+'\\'+devinfokeyname)
    1.32 +        value = win32api.RegQueryValueEx(devinfokey, 'SERVICE')[0]
    1.33 +        win32api.RegCloseKey(devinfokey)
    1.34          
    1.35          return 'USBSTOR' in value
    1.36      
    1.37 @@ -479,7 +481,7 @@
    1.38          if user != None:
    1.39              command += ' ' + password + ' /User' + user
    1.40      
    1.41 -        result = checkResult(Cygwin.execute('C:\\Windows\\system32\\NET ', command))
    1.42 +        result = checkResult(Cygwin.execute('C:\\Windows\\system32\\NET', command))
    1.43          #result = checkResult(Cygwin.cmdExecute('NET ' + command))
    1.44          if string.find(result[1], 'successfully',) == -1:
    1.45              logger.error("Failed: NET " + command)
    1.46 @@ -560,6 +562,41 @@
    1.47          handler = BrowsingHandler(self)
    1.48          handler.start()
    1.49          return 'ok'
    1.50 +    
    1.51 +    def getActiveUserName(self):
    1.52 +        key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI')
    1.53 +        v = str(win32api.RegQueryValueEx(key, 'LastLoggedOnUser')[0])
    1.54 +        win32api.RegCloseKey(key)
    1.55 +        user_name = win32api.ExpandEnvironmentStrings(v)
    1.56 +        return user_name
    1.57 +        
    1.58 +    def getUserSID(self, user_name):
    1.59 +        account_name = win32security.LookupAccountName(None, user_name)
    1.60 +        sid = win32security.ConvertSidToStringSid(account_name[0])
    1.61 +        return sid
    1.62 +        
    1.63 +    def getAppDataDir(self, sid):    
    1.64 +        key = win32api.RegOpenKey(win32con.HKEY_USERS, sid + '\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
    1.65 +        value, type = win32api.RegQueryValueEx(key, "AppData")
    1.66 +        win32api.RegCloseKey(key)
    1.67 +        return value
    1.68 +        
    1.69 +        #key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' + '\\' + sid)
    1.70 +        #value, type = win32api.RegQueryValueEx(key, "ProfileImagePath")
    1.71 +        #print value
    1.72 +    
    1.73 +    def backupFile(self, src, dest):
    1.74 +        certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + self.browsingManager.vm_name + '/dvm_key'
    1.75 +        command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "osecuser@' + self.browsingManager.ip_addr + ':' + src + '" "' + dest + '"'
    1.76 +        return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False)
    1.77 +    
    1.78 +    def restoreFile(self, src, dest):
    1.79 +        certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + self.browsingManager.vm_name + '/dvm_key'
    1.80 +        #command = '-r -v -o StrictHostKeyChecking=no -i \"' + certificate + '\" \"' + src + '\" \"osecuser@' + self.browsingManager.ip_addr + ':' + dest + '\"'
    1.81 +        command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "' + src + '" "osecuser@' + self.browsingManager.ip_addr + ':' + dest + '"'
    1.82 +        return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False)    
    1.83 +        
    1.84 +    
    1.85  
    1.86  def checkResult(result):
    1.87      if result[0] != 0:
    1.88 @@ -586,17 +623,6 @@
    1.89               #logger.info(self.drive)
    1.90               if self.drive not in mappedDrives.keys():
    1.91                   self.running = False
    1.92 -    
    1.93 -
    1.94 -            #browser = '/usr/bin/iceweasel'
    1.95 -            #browser = '/usr/bin/midori'
    1.96 -            #browser = '/usr/bin/chromium '
    1.97 -            #if Cygwin.is_X11_running()==True:
    1.98 -            #result = checkResult(Cygwin.bashExecute('DISPLAY=:0 xhost '+new_ip))
    1.99 -            
   1.100 -            #browser = '\\\"/usr/bin/chromium; pidof dbus-launch | xargs kill\\\"'
   1.101 -            #Cygwin.start_X11()
   1.102 -            #result = checkResult(Cygwin.sshExecuteX11(browser, new_ip, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + new_sdvm + '/dvm_key'))
   1.103  
   1.104  #handles browsing session creation 
   1.105  class BrowsingHandler(threading.Thread):
   1.106 @@ -610,10 +636,12 @@
   1.107          if Cygwin.is_X11_running()==False:
   1.108              Cygwin.start_X11()
   1.109          try:
   1.110 -            self.vmm.browsingManager.started.wait()          
   1.111 +            self.vmm.browsingManager.started.wait() 
   1.112              result = checkResult(Cygwin.sshExecuteX11(browser, self.vmm.browsingManager.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vmm.browsingManager.vm_name + '/dvm_key'))
   1.113 +            #backup settings on vm
   1.114          except:
   1.115              logger.error("BrowsingHandler closing. Cleaning up")    
   1.116 +        self.vmm.backupFile('/home/osecuser/.config/chromium', self.vmm.browsingManager.appDataDir + '/OpenSecurity/')
   1.117          self.vmm.browsingManager.restart.set()
   1.118          
   1.119              
   1.120 @@ -625,6 +653,7 @@
   1.121      ip_addr = None
   1.122      vm_name = None
   1.123      drive = None
   1.124 +    appDataDir = None
   1.125      
   1.126      def __init__(self, vmmanager):
   1.127          threading.Thread.__init__(self)
   1.128 @@ -665,8 +694,18 @@
   1.129                  networkPath = '\\\\' + self.ip_addr + '\\Download'
   1.130                  self.vmm.mapNetworkDrive(self.drive, networkPath, None, None)
   1.131                  self.started.set()
   1.132 +                
   1.133 +                user = self.vmm.getActiveUserName()
   1.134 +                sid = self.vmm.getUserSID(user)
   1.135 +                path = self.vmm.getAppDataDir(sid)
   1.136 +                self.appDataDir = Cygwin.cygPath(path)
   1.137 +                # create chromium settings dir on local machine if not existing
   1.138 +                checkResult(Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + self.appDataDir + '/OpenSecurity\\\"'))
   1.139 +                # create chromium settings dir on remote machine if not existing
   1.140 +                checkResult(Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', self.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vm_name + '/dvm_key'))
   1.141 +                #restore settings on vm
   1.142 +                self.vmm.restoreFile(self.appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
   1.143                  self.restart.wait()
   1.144 -                
   1.145              except:
   1.146                  logger.error("BrowsingHandler failed. Cleaning up")
   1.147                  
   1.148 @@ -745,6 +784,8 @@
   1.149      print drives
   1.150      print VMManager.getDriveType("E")
   1.151      print VMManager.getVolumeInfo("E")
   1.152 +    
   1.153 +    #vmm.backupFile()
   1.154      #for device in devices.values():
   1.155      #    #print device
   1.156      #    if VMManager.isMassStorageDevice(device):