def configure_honeypot(drone_id): config_dict = send_database_request('{0} {1}'.format(Messages.DRONE_CONFIG.value, drone_id)) config_obj = DictWrapper(config_dict) form = HoneypotConfigurationForm(obj=config_obj) if not form.validate_on_submit(): return render_template('configure-honeypot.html', form=form, mode_name='Honeypot', user=current_user) else: # TODO: We really need to user protobuf, thrift or something like that for stuff like this. honeypot_config = { 'name': form.general__name.data, 'mode': 'honeypot', 'certificate': { 'common_name': form.certificate_info__common_name.data, 'country': form.certificate_info__country.data, 'state': form.certificate_info__state.data, 'locality': form.certificate_info__locality.data, 'organization': form.certificate_info__organization.data, 'organization_unit': form.certificate_info__organization_unit.data }, 'capabilities': {} } if form.capabilities__ftp__enabled.data: honeypot_config['capabilities']['ftp'] = { 'port': form.capabilities__ftp__port.data, 'protocol_specific_data': { 'max_attempts': form.capabilities__ftp__protocol_specific_data__max_attempts.data, 'banner': form.capabilities__ftp__protocol_specific_data__banner.data, 'syst_type': form.capabilities__ftp__protocol_specific_data__syst_type.data }} if form.capabilities__telnet__enabled.data: honeypot_config['capabilities']['telnet'] = { 'port': form.capabilities__telnet__port.data, 'protocol_specific_data': { 'max_attempts': form.capabilities__telnet__protocol_specific_data__max_attempts.data, }} if form.capabilities__pop3__enabled.data: honeypot_config['capabilities']['pop3'] = { 'port': form.capabilities__pop3__port.data, 'protocol_specific_data': { 'max_attempts': form.capabilities__pop3__protocol_specific_data__max_attempts.data, }} if form.capabilities__pop3s__enabled.data: honeypot_config['capabilities']['pop3s'] = { 'port': form.capabilities__pop3s__port.data, 'protocol_specific_data': { 'max_attempts': form.capabilities__pop3s__protocol_specific_data__max_attempts.data, }} if form.capabilities__ssh__enabled.data: honeypot_config['capabilities']['ssh'] = { 'port': form.capabilities__ssh__port.data } if form.capabilities__http__enabled.data: honeypot_config['capabilities']['http'] = { 'port': form.capabilities__http__port.data, 'protocol_specific_data': { 'banner': form.capabilities__http__protocol_specific_data__banner.data, } } if form.capabilities__https__enabled.data: honeypot_config['capabilities']['https'] = { 'port': form.capabilities__https__port.data, 'protocol_specific_data': { 'banner': form.capabilities__https__protocol_specific_data__banner.data, } } if form.capabilities__smtp__enabled.data: honeypot_config['capabilities']['smtp'] = { 'port': form.capabilities__smtp__port.data, 'protocol_specific_data': { 'banner': form.capabilities__smtp__protocol_specific_data__banner.data } } if form.capabilities__vnc__enabled.data: honeypot_config['capabilities']['vnc'] = { 'port': form.capabilities__vnc__port.data, 'protocol_specific_data': {} } send_database_request('{0} {1} {2}'.format(Messages.CONFIG_DRONE.value, drone_id, json.dumps(honeypot_config))) return render_template('finish-config-honeypot.html', drone_id=drone_id, user=current_user)
def configure_honeypot(drone_id): config_dict = send_database_request('{0} {1}'.format( Messages.DRONE_CONFIG.value, drone_id)) config_obj = DictWrapper(config_dict) form = HoneypotConfigurationForm(obj=config_obj) if not form.validate_on_submit(): return render_template('configure-honeypot.html', form=form, mode_name='Honeypot', user=current_user) else: # TODO: We really need to user protobuf, thrift or something like that for stuff like this. honeypot_config = { 'name': form.general__name.data, 'mode': 'honeypot', 'certificate': { 'common_name': form.certificate_info__common_name.data, 'country': form.certificate_info__country.data, 'state': form.certificate_info__state.data, 'locality': form.certificate_info__locality.data, 'organization': form.certificate_info__organization.data, 'organization_unit': form.certificate_info__organization_unit.data }, 'capabilities': {} } if form.capabilities__ftp__enabled.data: honeypot_config['capabilities']['ftp'] = { 'port': form.capabilities__ftp__port.data, 'protocol_specific_data': { 'max_attempts': form. capabilities__ftp__protocol_specific_data__max_attempts. data, 'banner': form.capabilities__ftp__protocol_specific_data__banner. data, 'syst_type': form.capabilities__ftp__protocol_specific_data__syst_type. data } } if form.capabilities__telnet__enabled.data: honeypot_config['capabilities']['telnet'] = { 'port': form.capabilities__telnet__port.data, 'protocol_specific_data': { 'max_attempts': form. capabilities__telnet__protocol_specific_data__max_attempts. data, } } if form.capabilities__pop3__enabled.data: honeypot_config['capabilities']['pop3'] = { 'port': form.capabilities__pop3__port.data, 'protocol_specific_data': { 'max_attempts': form. capabilities__pop3__protocol_specific_data__max_attempts. data, } } if form.capabilities__pop3s__enabled.data: honeypot_config['capabilities']['pop3s'] = { 'port': form.capabilities__pop3s__port.data, 'protocol_specific_data': { 'max_attempts': form. capabilities__pop3s__protocol_specific_data__max_attempts. data, } } if form.capabilities__ssh__enabled.data: honeypot_config['capabilities']['ssh'] = { 'port': form.capabilities__ssh__port.data } if form.capabilities__http__enabled.data: honeypot_config['capabilities']['http'] = { 'port': form.capabilities__http__port.data, 'protocol_specific_data': { 'banner': form.capabilities__http__protocol_specific_data__banner. data, } } if form.capabilities__https__enabled.data: honeypot_config['capabilities']['https'] = { 'port': form.capabilities__https__port.data, 'protocol_specific_data': { 'banner': form.capabilities__https__protocol_specific_data__banner. data, } } if form.capabilities__smtp__enabled.data: honeypot_config['capabilities']['smtp'] = { 'port': form.capabilities__smtp__port.data, 'protocol_specific_data': { 'banner': form.capabilities__smtp__protocol_specific_data__banner. data } } if form.capabilities__vnc__enabled.data: honeypot_config['capabilities']['vnc'] = { 'port': form.capabilities__vnc__port.data, 'protocol_specific_data': {} } send_database_request( '{0} {1} {2}'.format(Messages.CONFIG_DRONE.value, drone_id, json.dumps(honeypot_config))) return render_template('finish-config-honeypot.html', drone_id=drone_id, user=current_user)
def configure_honeypot(id): db_session = database_setup.get_session() honeypot = db_session.query(Honeypot).filter(Drone.id == id).one() if honeypot.discriminator != 'honeypot' or honeypot is None: abort(404, 'Drone with id {0} not found or invalid.'.format(id)) config_dict = send_config_request('{0} {1}'.format(Messages.DRONE_CONFIG, id)) config_obj = DictWrapper(config_dict) form = HoneypotConfigurationForm(obj=config_obj) if not form.validate_on_submit(): return render_template('configure-honeypot.html', form=form, mode_name='Honeypot', user=current_user) else: honeypot.cert_common_name = form.certificate_info__common_name.data honeypot.cert_country = form.certificate_info__country.data honeypot.cert_state = form.certificate_info__state.data honeypot.cert_locality = form.certificate_info__locality.data honeypot.cert_organization = form.certificate_info__organization.data honeypot.cert_organization_unit = form.certificate_info__organization_unit.data # clear all capabilities honeypot.capabilities = [] if form.capabilities__ftp__enabled.data: honeypot.add_capability('ftp', form.capabilities__ftp__port.data, { 'max_attempts': form.capabilities__ftp__protocol_specific_data__max_attempts.data, 'banner': form.capabilities__ftp__protocol_specific_data__banner.data, 'syst_type': form.capabilities__ftp__protocol_specific_data__syst_type.data }) if form.capabilities__telnet__enabled.data: honeypot.add_capability('telnet', form.capabilities__telnet__port.data, { 'max_attempts': form.capabilities__telnet__protocol_specific_data__max_attempts.data, }) if form.capabilities__pop3__enabled.data: honeypot.add_capability('pop3', form.capabilities__pop3__port.data, { 'max_attempts': form.capabilities__pop3__protocol_specific_data__max_attempts.data, }) if form.capabilities__pop3s__enabled.data: honeypot.add_capability('pop3s', form.capabilities__pop3s__port.data, { 'max_attempts': form.capabilities__pop3s__protocol_specific_data__max_attempts.data, }) if form.capabilities__ssh__enabled.data: honeypot.add_capability('ssh', form.capabilities__ssh__port.data, {}) if form.capabilities__http__enabled.data: honeypot.add_capability('http', form.capabilities__http__port.data, { 'banner': form.capabilities__http__protocol_specific_data__banner.data, }) if form.capabilities__https__enabled.data: honeypot.add_capability('https', form.capabilities__https__port.data, { 'banner': form.capabilities__https__protocol_specific_data__banner.data, }) if form.capabilities__smtp__enabled.data: honeypot.add_capability('smtp', form.capabilities__smtp__port.data, { 'banner': form.capabilities__smtp__protocol_specific_data__banner.data, }) if form.capabilities__vnc__enabled.data: honeypot.add_capability('vnc', form.capabilities__vnc__port.data, {}) honeypot.name = form.general__name.data db_session.add(honeypot) db_session.commit() # advise config actor that we have change something on a given drone id # TODO: make entity itself know if it has changed and then poke the config actor. send_config_request('{0} {1}'.format(Messages.DRONE_CONFIG_CHANGED, honeypot.id)) return render_template('finish-config-honeypot.html', drone_id=honeypot.id, user=current_user)
def configure_honeypot(id): db_session = database_setup.get_session() honeypot = db_session.query(Honeypot).filter(Drone.id == id).one() if honeypot.discriminator != 'honeypot' or honeypot is None: abort(404, 'Drone with id {0} not found or invalid.'.format(id)) config_dict = send_config_request('{0} {1}'.format(Messages.DRONE_CONFIG, id)) config_obj = DictWrapper(config_dict) form = HoneypotConfigurationForm(obj=config_obj) if not form.validate_on_submit(): return render_template('configure-honeypot.html', form=form, mode_name='Honeypot', user=current_user) else: honeypot.cert_common_name = form.certificate_info__common_name.data honeypot.cert_country = form.certificate_info__country.data honeypot.cert_state = form.certificate_info__state.data honeypot.cert_locality = form.certificate_info__locality.data honeypot.cert_organization = form.certificate_info__organization.data honeypot.cert_organization_unit = form.certificate_info__organization_unit.data # clear all capabilities honeypot.capabilities = [] if form.capabilities__ftp__enabled.data: honeypot.add_capability( 'ftp', form.capabilities__ftp__port.data, { 'max_attempts': form. capabilities__ftp__protocol_specific_data__max_attempts. data, 'banner': form.capabilities__ftp__protocol_specific_data__banner. data, 'syst_type': form.capabilities__ftp__protocol_specific_data__syst_type. data }) if form.capabilities__telnet__enabled.data: honeypot.add_capability( 'telnet', form.capabilities__telnet__port.data, { 'max_attempts': form. capabilities__telnet__protocol_specific_data__max_attempts. data, }) if form.capabilities__pop3__enabled.data: honeypot.add_capability( 'pop3', form.capabilities__pop3__port.data, { 'max_attempts': form. capabilities__pop3__protocol_specific_data__max_attempts. data, }) if form.capabilities__pop3s__enabled.data: honeypot.add_capability( 'pop3s', form.capabilities__pop3s__port.data, { 'max_attempts': form. capabilities__pop3s__protocol_specific_data__max_attempts. data, }) if form.capabilities__ssh__enabled.data: honeypot.add_capability('ssh', form.capabilities__ssh__port.data, {}) if form.capabilities__http__enabled.data: honeypot.add_capability( 'http', form.capabilities__http__port.data, { 'banner': form.capabilities__http__protocol_specific_data__banner. data, }) if form.capabilities__https__enabled.data: honeypot.add_capability( 'https', form.capabilities__https__port.data, { 'banner': form.capabilities__https__protocol_specific_data__banner. data, }) if form.capabilities__smtp__enabled.data: honeypot.add_capability( 'smtp', form.capabilities__smtp__port.data, { 'banner': form.capabilities__smtp__protocol_specific_data__banner. data, }) if form.capabilities__vnc__enabled.data: honeypot.add_capability('vnc', form.capabilities__vnc__port.data, {}) honeypot.name = form.general__name.data db_session.add(honeypot) db_session.commit() # advise config actor that we have change something on a given drone id # TODO: make entity itself know if it has changed and then poke the config actor. send_config_request('{0} {1}'.format(Messages.DRONE_CONFIG_CHANGED, honeypot.id)) return render_template('finish-config-honeypot.html', drone_id=honeypot.id, user=current_user)