Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)