Example #1
0
    def run(self):
        try:
            self.agent_port = int(
                self.config.get('network', 'agent-port', '9099'))
            self.debug_mode = self.config.getboolean('system', 'debug')
            self.multi_thread = self.config.getboolean('system',
                                                       'multi-thread')
            # 不用注册远程方法了
            # self.tell_online_services()

            # 暂时不用
            # self.post_ip()
            # self.post_host_info()
            result = post_url('%s/openStack/initRegister' % remote_base_url,
                              payload=get_nfs_disk())
            post_url('%s/openStack/nodeRegister' % remote_base_url,
                     payload=get_sytem_info())
            print('register result: ', result)
            self.app.run(host='0.0.0.0',
                         port=self.agent_port,
                         debug=self.debug_mode,
                         use_reloader=self.debug_mode,
                         threaded=self.multi_thread)
        except Exception as e:
            print_exception(__name__, e)
Example #2
0
    def run(self):
        try:
            #读取配置文件
            self.agent_port = int(
                self.config.get('network', 'agent-port', '9099'))
            self.debug_mode = self.config.getboolean('system', 'debug')
            self.multi_thread = self.config.getboolean('system',
                                                       'multi-thread')

            # Tell switch server about what service is online
            # self.tell_online_services()
            # self.post_ip()
            # 获取磁盘信息保存到全局变量中
            self.post_host_info()
            # vmpath=self.global_wrapper('json@storage:disk')
            vmpath = {
                'disk': [get_vm_disks_for_enc(),
                         getip(), self.agent_port]
            }
            post_url('%s/oVirt/initRegister' % remote_base_url, payload=vmpath)
            post_url('%s/oVirt/nodeRegister' % remote_base_url,
                     payload=get_sytem_info())
            print 'value: ', vmpath
            print 'system: ', get_sytem_info()
            # vmpath.write()
            # Run services
            self.app.run(host='0.0.0.0',
                         port=self.agent_port,
                         debug=self.debug_mode,
                         use_reloader=self.debug_mode,
                         threaded=self.multi_thread)
        except Exception, e:
            print_exception(__name__, e)
Example #3
0
def unregister_service(service_name, version):
    try:
        with connection.connect_db() as (db):
            db.execute_and_commit(
                ['DELETE FROM servtag_table WHERE name=? AND version=?'],
                [[(service_name, version)]])
    except Exception as e:
        print_exception(__name__, e)
Example #4
0
def register_service(service_name, version):
    try:
        with connection.connect_db() as (db):
            # print '%s %s '% (service_name, version)
            res = db.query(
                "SELECT name FROM servtag_table WHERE name='%s' AND version='%s'"
                % (service_name, version))
            if not res:
                db.execute_and_commit(
                    ['INSERT INTO servtag_table VALUES (?, ?)'],
                    [[(service_name, version)]])
    except Exception as e:
        print_exception(__name__, e)
Example #5
0
    def __init__(self, module_name):
        self.module_name = module_name
        self.modules = None
        self.local_key = None
        # Agent port
        self.agent_port = None
        # Debug mode switch
        self.debug_mode = True
        # Multi-thread mode switch
        self.multi_thread = False
        # Servtag online table
        self.services_online = []

        global server_port
        global agent_version
        global remote_base_url

        # Load configuration
        try:
            config_name = '%s.conf' % __name__
            self.config = ConfigParser()
            self.config.read(config_name)
            self.agent_port = int(
                self.config.get('network', 'agent-port', '9099'))

            server_port = int(self.config.get('network', 'server-port',
                                              '8083'))
            db_filename = self.config.get('database', 'file', ':memory:')
            agent_version = self.config.get('system', 'version', '1.0.3')
            remote_base_url = self.config.get('network', 'server-base',
                                              'http://localhost:8083')
            self.local_key = self.config.get('module', 'local-key',
                                             'agent_path')
            paths = self.config.get('module', 'path', '')
            if paths:
                self.modules = str(paths).split(';')

            # Prepare database
            connection(db_filename).prepare()

            # Load Server Base URL
            # load_remote_base_url_from_local()

            # Initialize service
            self.app = Flask(self.module_name)
            # register_api_resources(Api(self.app), API_MAP, '/switch/agent')
            register_api_resources(Api(self.app), API_MAP, '')

        except Exception, e:
            print 'Error on initialization.\nPlease check if the config file name is "%s"' % config_name
            print_exception(__name__, e)
Example #6
0
def openvas_version(args):
    from lib.utility import print_exception

    try:
        from vas.openvas import omp_wrapper

        RESPONSE_FAILURE = 'Unknown'

        omp = omp_wrapper(agent.global_wrapper)
        if omp is None:
            return RESPONSE_FAILURE

        version_info = omp.get_version()

        return version_info if version_info else RESPONSE_FAILURE
    except BaseException, e:
        print_exception(__name__, e)
Example #7
0
def openvas_available(args):
    from lib.utility import print_exception

    try:
        from vas.openvas import omp_wrapper

        RESPONSE_FAILURE = {'status': 0}
        RESPONSE_SUCCESS = {'status': 1}

        omp = omp_wrapper(agent.global_wrapper)
        if omp is None:
            return RESPONSE_FAILURE

        available = omp.ping()

        return RESPONSE_SUCCESS if available else RESPONSE_FAILURE
    except BaseException, e:
        print_exception(__name__, e)
Example #8
0
    def run(self):
        try:
            self.agent_port = int(
                self.config.get('network', 'agent-port', '9099'))
            self.debug_mode = self.config.getboolean('system', 'debug')
            self.multi_thread = self.config.getboolean('system',
                                                       'multi-thread')
            # 不用注册远程方法了
            # self.tell_online_services()

            # 暂时不用
            # self.post_ip()
            # self.post_host_info()
            self.app.run(host='0.0.0.0',
                         port=self.agent_port,
                         debug=self.debug_mode,
                         use_reloader=self.debug_mode,
                         threaded=self.multi_thread)
        except Exception as e:
            print_exception(__name__, e)
Example #9
0
    def __init__(self, module_name):
        global agent_version
        global remote_base_url
        global server_port
        self.module_name = module_name
        self.modules = None
        self.local_key = None
        self.agent_port = None
        self.debug_mode = True
        self.multi_thread = False
        self.services_online = []
        try:
            config_name = '%s.conf' % __name__
            self.config = ConfigParser()
            self.config.read(config_name)
            server_port = int(self.config.get('network', 'server-port',
                                              '5000'))
            db_filename = self.config.get('database', 'file', ':memory:')
            agent_version = self.config.get('system', 'version', '1.0.3')
            #remote base url
            remote_base_url = self.config.get('network', 'server-base',
                                              'http://localhost:5000')
            self.local_key = self.config.get('module', 'local-key',
                                             'agent_path')
            paths = self.config.get('module', 'path', '')
            if paths:
                self.modules = str(paths).split(';')
                # connection database
            connection(db_filename).prepare()
            self.app = Flask(self.module_name)
            # register_api_resources(Api(self.app), API_MAP, '/switch/agent/')
            register_api_resources(Api(self.app), API_MAP, '')
        except Exception as e:
            print 'Error on initialization.\nPlease check if the config file name is "%s"' % config_name
            print_exception(__name__, e)

        return
Example #10
0
def openvas_testcase(subtask_id, args):
    from lib.utility import uuid, print_exception
    from time import sleep

    TASK_WAIT_INTERVAL = 10

    try:
        if not args:
            raise BaseException('openvas_testcase(): argument is invalid')

        from vas.openvas import omp_wrapper

        omp = omp_wrapper(agent.global_wrapper)
        if omp is None:
            raise BaseException('openvas_testcase(): can not open openvas-cli')

        config_name = args['config']
        task_name = args['name']
        task_comment = args['comment']
        targets = args['targets']

        target_id = None
        targets_got, xml_root = omp.get_targets()
        if targets_got:
            hosts_set = set(targets)
            for target in targets_got:
                hosts1 = set(target['hosts'])
                if hosts_set == hosts1:
                    target_id = target['id']

        if not target_id:
            target_id = omp.create_target(name='Target for %s [%s]' % (task_name, uuid()), ip_list=targets)

        if not target_id:
            raise BaseException('openvas_testcase(): target create failed')

        configs, xml_root = omp.get_configs(name=config_name)
        if not configs:
            raise BaseException('openvas_testcase(): can not find scan config')

        config = configs[0]
        config_id = config['id']

        task_id = omp.create_task(name='%s [%s]' % (task_name, uuid()),
                                  comment=task_comment,
                                  config_id=config_id,
                                  target_id=target_id)
        if not task_id:
            raise BaseException('openvas_testcase(): task create failed')

        if not omp.start_task(task_id=task_id):
            raise BaseException('openvas_testcase(): task start failed')

        bad_count = 0
        report_id = None
        while True:
            sleep(TASK_WAIT_INTERVAL)
            tasks, xml_root = omp.get_tasks(task_id=task_id)
            if tasks:
                task = tasks[0]
                status = task['status']
                if status and status == 'Done':
                    report_id = task['last_report_id']
                    break
            else:
                bad_count += 1
            if bad_count > 2:
                raise BaseException('openvas_testcase(): can not read task info')

        if not report_id:
            raise BaseException('openvas_testcase(): bad report id')

        reports, xml_root = omp.get_reports(report_id=report_id)
        if not reports:
            raise BaseException('openvas_testcase(): can not read report by report id: %s' % report_id)

        report = reports[0]

        brief = ''
        detail = ''
        severity = 0.0
        vulns_count = report['vulns_count']
        results = report['results']
        if results:
            for result in results:
                try:
                    current_severity = result['severity']
                    if current_severity > severity:
                        severity = current_severity
                except:
                    pass

        agent.post_report(subtask_id,
                        severity=severity,
                        result=1 if vulns_count else 0,
                        brief=brief,
                        detail=detail,
                        json_data=report)

    except BaseException, e:
        print_exception(__name__, e)
        agent.post_failure(subtask_id=subtask_id)