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):