Пример #1
0
 def __init__(self):
     self.db = DBManager_django()
     self.running_emulators = set()
Пример #2
0
 def __init__(self):
     self.db = DBManager_django()
     self.running_emulators = set()
Пример #3
0
class VMManager(object):
    __vmm = None

    def __init__(self):
        self.db = DBManager_django()
        self.running_emulators = set()

    @staticmethod
    def get_vmm():
        if not VMManager.__vmm:
            VMManager.__vmm = VMManager()
        return VMManager.__vmm

    def restore_vm(self, ip):
        thread.start_new_thread(self.one_restore_vm, (ip,))

    def one_restore_vm(self, ip):
        self.restore_host_to_snapshot(self.get_vm_id_from_ip(ip))

    def get_vm_id_from_ip(self, ip):
        xml_response = Utils.run_get_output(
            'java -jar ONE-API/network_info.jar %s %s %s' % (settings.ONE_CREDS, settings.ONE_IP, settings.NET_ID))
        et = ET.fromstring(xml_response)
        for lease in et.iter("LEASE"):
            if lease.find("IP") is not None and lease.find("IP").text == ip:
                return int(lease.find("VM").text)
        raise Exception("NO VM ID found for %s" % ip)

    def restore_host_to_snapshot(self, vm_emulator_id):
        # hardcoding snapshot ID to 1
        return Utils.run_get_output(
            'java -jar ONE-API/restore.jar %s %s %d %d' % (settings.ONE_CREDS, settings.ONE_IP, vm_emulator_id, 0))

    def save_report(self, vm_client_id, content):
        print content
        status = content['status']
        extras = content['description']
        if status == 'SUCCESS':
            self.db.update_success(vm_client_id, extras)
        else:
            # there was an error in the report
            self.db.log_failure(vm_client_id, status, extras)

    def find_target_for_VM_client(self,vm_client_id):
        return self.db.pick_dynamic_test_with_status_unknown(vm_client_id)

    def add_running_emulator(self, emulator):
        self.running_emulators.add(emulator)

    def remove_running_emulator(self, emulator):
        self.running_emulators.remove(emulator)

    def find_emulator_for(self, vulnerability_type):
        possibleEmulators = settings.ANDROID_VM_POOL
        if "SSL" in vulnerability_type:
            key = "SSL"
        elif vulnerability_type in ["PHONEGAP_JS_INJECTION", "JAVASCRIPTINTERFACE"]:
            key = "JAVASCRIPTINTERFACE"
        else:
            key = "NONSSL"
        print set(possibleEmulators[key]) - self.running_emulators
        return random.sample(set(possibleEmulators[key]) - self.running_emulators, 1)[0]

    def get_VMManager_request_handler(self):
        return VMManagerRequestHandler
Пример #4
0
class VMManager(object):
    __vmm = None

    def __init__(self):
        self.db = DBManager_django()
        self.running_emulators = set()

    @staticmethod
    def get_vmm():
        if not VMManager.__vmm:
            VMManager.__vmm = VMManager()
        return VMManager.__vmm

    def restore_vm(self, ip):
        thread.start_new_thread(self.one_restore_vm, (ip, ))

    def one_restore_vm(self, ip):
        self.restore_host_to_snapshot(self.get_vm_id_from_ip(ip))

    def get_vm_id_from_ip(self, ip):
        xml_response = Utils.run_get_output(
            'java -jar ONE-API/network_info.jar %s %s %s' %
            (settings.ONE_CREDS, settings.ONE_IP, settings.NET_ID))
        et = ET.fromstring(xml_response)
        for lease in et.iter("LEASE"):
            if lease.find("IP") is not None and lease.find("IP").text == ip:
                return int(lease.find("VM").text)
        raise Exception("NO VM ID found for %s" % ip)

    def restore_host_to_snapshot(self, vm_emulator_id):
        # hardcoding snapshot ID to 1
        return Utils.run_get_output(
            'java -jar ONE-API/restore.jar %s %s %d %d' %
            (settings.ONE_CREDS, settings.ONE_IP, vm_emulator_id, 0))

    def save_report(self, vm_client_id, content):
        print content
        status = content['status']
        extras = content['description']
        if status == 'SUCCESS':
            self.db.update_success(vm_client_id, extras)
        else:
            # there was an error in the report
            self.db.log_failure(vm_client_id, status, extras)

    def find_target_for_VM_client(self, vm_client_id):
        return self.db.pick_dynamic_test_with_status_unknown(vm_client_id)

    def add_running_emulator(self, emulator):
        self.running_emulators.add(emulator)

    def remove_running_emulator(self, emulator):
        self.running_emulators.remove(emulator)

    def find_emulator_for(self, vulnerability_type):
        possibleEmulators = settings.ANDROID_VM_POOL
        if "SSL" in vulnerability_type:
            key = "SSL"
        elif vulnerability_type in [
                "PHONEGAP_JS_INJECTION", "JAVASCRIPTINTERFACE"
        ]:
            key = "JAVASCRIPTINTERFACE"
        else:
            key = "NONSSL"
        print set(possibleEmulators[key]) - self.running_emulators
        return random.sample(
            set(possibleEmulators[key]) - self.running_emulators, 1)[0]

    def get_VMManager_request_handler(self):
        return VMManagerRequestHandler