TheHive is a scalable, open source and free Security Incident Response Platform, tightly integrated with MISP (Open Source Threat Intelligence Platform), designed to make life easier for SOCs, CSIRTs, CERTs and any information security practitioner dealing with security incidents that need to be investigated and acted upon swiftly.
This module is responsible for the installation, configuration, and deployment of TheHive application.
For storing data, TheHive uses ElasticSearch (version 5.x) for which a Docker container is created.
The Puppet thehive
class provides a default installation of TheHive. Before importing the thehive
class, you should set up the secret key play_secret_key
, which is used internally by the Play framework. Its value can either be specified using Heira (recommended), or using a class parameter.
Note: This module does not handle a reverse proxy. An example for creating a reverse proxy using Apache is provided below.
The default parameters are present in the manifests/init.pp file, which one can override, if required. Since play_secret_key
is a required parameter, its value must be specified. To change the port on which TheHive instance is listening, update the port
variable in the Hiera configuration:
thehive::play_secret_key: '<secret key>'
thehive::port: 9999
Then include thehive
class in your manifest file.
include ::thehive
The secret key and port can also be provided as a parameter to the class declaration.
class thehive {
play_secret_key => '<secret key>',
port => 9999
}
Note: A random key of the required length can be generated with:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1
To serve the web interface on a custom server, create a reverse proxy for Apache. A skeleton for setting up the reverse proxy is shown below:
# Setup reverse proxy.
apache::vhost { $thehive_server_name:
port => $apache_https_port,
servername => $thehive_server_name,
{
'path' => '/',
'url' => "http://127.0.0.1:${::thehive::port}/",
'reverse_urls' => ["http://127.0.0.1:${::thehive::port}/"]
},
],
}
apache::vhost { $thehive_server_name:
port => $apache_https_port,
docroot => $apache_document_root,
serveradmin => $thehive_server_admin,
servername => $thehive_server_name,
ssl => true,
ssl_cert => $tls_cert,
ssl_key => $tls_key,
log_level => 'info',
access_log_format => 'combined',
ssl_proxyengine => true,
proxy_pass => [
{
'path' => '/',
'url' => "http://127.0.0.1:${::thehive::port}/",
'reverse_urls' => ["http://127.0.0.1:${::thehive::port}/"],
},
],
directories => [
{
provider => 'location',
path => '/',
options => '-Indexes',
allow_override => 'None',
auth_type => 'None',
},
],
rewrites => [
{
rewrite_rule => ['^/oauth/redirect$ /index.html [R,NE]']
}
],
require => [Certmgr::Certificate['TLS certificate for TheHive and Cortex'], Selinux::Port['Apache access to TheHive']],
}
For passing additional parameters, consult the documentation in: https://forge.puppet.com/puppetlabs/apache
The template for TheHive configuration file is present in templates/application.erb. The configurable parameters are listed below:
play_secret_key
: Play framework secret keyport
: The port on which TheHive instance should be listening (default:9000
)user
: User who owns the TheHive repository and configuration directory (default:thehive
)group
: Group who owns the TheHive repository and configuration directory (default:thehive
)config_dir
: The directory where TheHive should create its configuration file (default:'/etc/thehive'
)config_file
: Name of TheHive configuration file with its path (default:'application.conf'
)vm_max_map_count
: Used to Increase the limit of mmap count, so ElasticSearch doesn't throw a memory exception during startup (default:262144
)elasticsearch_enabled
: If true, configure the ElasticSearch Docker container (default:true
)elasticsearch_uid
: UID for elasticsearch user in Docker container (default:1000
)elasticsearch_index
: ElasticSearch index is similar to a database, which provides a type of data organisation mechanism (default:'the_hive'
)elasticsearch_cluster_name
: Elasticsearch cluster is a group of one or more Elasticsearch nodes instances that are connected together (default:'hive'
)elasticsearch_host_address
: Address where ElasticSearch is being hosted (default:'127.0.0.1'
)elasticsearch_host_port
: ElasticSearch host port (default:9300
)elasticsearch_transport_host_address
: ElasticSearch transport host is used for internal communication between nodes within the cluster (default:'0.0.0.0'
)elasticsearch_thread_pool_search_queue_size
: ElasticSearch thread pools are used to improve threads memory consumption. The queue size allow pending requests to be held instead of discarded (default:100000
)elasticsearch_docker_image
: Docker image used for ElasticSearch (default:'docker.elastic.co/elasticsearch/elasticsearch:5.6.14'
)elasticsearch_docker_volume_name
: Name of the Docker volume (default:'thehive'
)elasticsearch_docker_volume_path_parent
: Parent path for the Docker volume (default:'/usr/share/elasticsearch'
)elasticsearch_docker_volume_path
: Path where the Docker volume should be created (default:'/usr/share/elasticsearch/thehive'
)elasticsearch_scroll_keepalive
: How long Elasticsearch should keep the search context alive (default:'1m'
)elasticsearch_scroll_pagesize
: Indicates the number of results that should be returned (default:50
)elasticsearch_shards_count
: Elasticsearch index is made up of one or more shards. Each shard is a self-contained search engine that indexes and handles queries for a subset of the data in an Elasticsearch cluster (default:5
)elasticsearch_replicas_count
: If the node holding a primary shard dies, a replica is promoted to the role of primary (default:1
)elasticsearch_max_nested_fields
: Nested fields allow an array of objects to be indexed in a way that they can be queried independently of each other (default:100
)elasticsearch_xpack_enabled
: Specifiy whether Elastic Stack Features (formerly packaged as X-Pack) are enabled or not (default:false
)elasticsearch_xpack_username
: Username of XPack packageelasticsearch_xpack_password
: Password for XPack packageelasticsearch_ssl_enabled
: Enable SSL to connect to ElasticSearch (default:false
)elasticsearch_certificate_authority_path
: Path where the certificate authority file is presentelasticsearch_certificate_path
: Path where the certificate file is presentelasticsearch_ssl_key
: Path to SSL key fileelasticsearch_searchguard_enabled
: Search Guard can be used to secure the Elasticsearch cluster using different industry standard authentication techniques, like Kerberos, LDAP / Active Directory, JSON web tokens, TLS certificates, and Proxy authentication / SSO (default:false
)elasticsearch_searchguard_keystore_path
: Path to JKS file containing client certificateelasticsearch_searchguard_keystore_password
: Password of the keystoreelasticsearch_searchguard_truststore_path
: Path to JKS file containing certificate authoritieselasticsearch_searchguard_truststore_password
: Password of the truststoreelasticsearch_searchguard_host_verification
: Iffalse
, Search Guard will not enforce hostname verification (default:false
)elasticsearch_searchguard_host_verification_resolve_hostname
: If hostname verification is enabled, specify if hostname should be resolvedauth_providers
: List of authentication providers. Available providers are services,local
,oauth2, sso
,ad
,ldap
(default:['local']
)auth_basic_enabled
: Specify if basic authentication is enabled or not (default:false
)auth_active_directory_enabled
: Iftrue
, use ActiveDirectory to authenticate users (default:false
)auth_ad_domain_fqdn
: The Windows domain name in DNS format. This parameter is required if theauth_ad_server_names
is not usedauth_ad_server_names
: The Windows domain name(s) in DNS formatauth_ad_domain_name
: The Windows domain name using short format. If this parameter is not set, TheHive usesdomainFQDN
auth_ad_use_ssl
: Iftrue
, use SSL to connect to the domain controller (default:false
)auth_ldap_enabled
: Specify if LDAP authentication is enabled or not (default:false
)auth_ldap_server_names
: The LDAP server name(s) or address(es). The port can be specified using the 'host:port' syntaxauth_ldap_account_bind_dn
: Account to use to bind to the LDAP server [required]auth_ldap_account_bind_pw
: Password of the binding account [required]auth_ldap_account_base_dn
: Base distinguished name (DN) to search users [required]auth_ldap_filter
: Filter to search user in the directory server [required]auth_ldap_use_ssl
: Iftrue
, use SSL to connect to the LDAP directory server (default:false
)auth_oauth2_sso_enabled
: Specify if OAuth2 and SSO are enabled or not (default:false
)auth_oauth2_client_id
: The OAuth2 client ID is a public identifier for apps (default:'thehive'
)auth_oauth2_secret
: The OAuth2 key is a secret known only to the application and the authorization server. It must be sufficiently random to not be guessableauth_oauth2_client_redirect_uri
: After a user successfully authorizes an application, the authorization server will redirect the user back to the application with either an authorization code or access token in the URLauth_oauth2_response_type
: OAuth2 response type can be'code'
for requesting an authorization code, or'token'
for requesting an access token (implicit grant) (default:'code'
)auth_oauth2_grant_type
: OAuth2 grant types include Authorization Code, Implicit, Password, Client Credentials, Device Code, and Refresh Token (default:'authorization_code'
)auth_oauth2_auth_url
: URL of the authorization serverauth_oauth2_token_url
: URL from where to get the access tokenauth_oauth2_user_url
: User URL used for creating the request headerauth_oauth2_scope
: OAuth2 scope provides a way to limit the amount of access that is granted to an access token (default:'read:user'
)auth_sso_mapper
: Name of mapping class from user resource to backend user (default:'group'
)auth_sso_login
: SSO username for login (default:'username'
)auth_sso_name
: SSO name (default:'name'
)auth_sso_groups
: SSO groups (default:'groups'
)auth_sso_autocreate
: Iftrue
, the user will be auto created from SSO credentials (default:true
)auth_sso_default_roles
: List of default SSO roles, which can either be'admin'
,'limited_user'
,'user'
or'read_only_user'
auth_sso_autologin
: If set tofalse
, the user would have to manually login by pressing the "Sign in with SSO" button (default:true
)auth_sso_group_url
: SSO groups URLauth_sso_mappings
: Mappings used for assigning permissions to groups. It contains an array of hashes with the following keys:auth_sso_mapping_key
: SSO mapping key (default:['cert']
)auth_sso_mapping_permissions
: SSO mapping permissions (default:['admin']
)
session_authentication_warning
: Maximum warning time between two requests without requesting authentication (default:'5m'
)session_authentication_inactivity
: Maximum inactivity time between two requests without requesting authentication (default:'1h'
)http_parser_maxmemorybuffer
: Maximum textual content length (default:'1M'
)http_parser_maxdiskbuffer
: Text based body parsers (such as text, json, xml or formUrlEncoded) use a max content length because they have to load all the content into memory (default:'1G'
)cortex_enabled
: Specify if Cortex integration is enabled or not (default:false
)cortex_instances
: List of Cortex instances to be integrated with TheHive. It contains an array of hashes with the following keys:cortex_server_id
: Cortex server ID (default:'cortex'
)cortex_server_url
: Cortex server URL (default:'http://localhost:9001'
)cortex_server_key
: Cortex server key
misp_enabled
: Specify if MISP integration is enabled or not (default:false
)misp_interval
: Interval between consecutive MISP event imports in hours [h] or minutes [m] (default:'1h'
)misp_instances
: List of MISP instances to be integrated with TheHive. It contains an array of hashes with the following keys:misp_server_id
: MISP server ID (default:'misp'
)misp_api_key
: MISP API keymisp_server_url
: MISP server URLmisp_server_tags
: MISP server tags (default:'misp'
)misp_case_template
: Name of the case template in TheHive that shall be used to import MISP events as cases by defaultmisp_max_attributes_count
: MISP events number of attributes (default:1000
)misp_max_json_size
: The maximum size of JSON representation (default:'1 MiB'
)misp_max_last_publish_date
: The age of the last publish date (default:'7 days'
)misp_exclusion_organisations
: List of organisations that must be excluded from MISPmisp_exclusion_tags
: List of tags that must be excluded from MISPmisp_webserver_enabled
: Specify if MISP web server is enabled or not (default:false
)misp_webserver_truststore_path
: Truststore path to use to validate the X.509 certificate of MISPmisp_webserver_proxy
: MISP web server proxy to usemisp_webserver_port
: MISP web server port to usemisp_purpose
: MISP purpose defines if the instance can be used to import events (ImportOnly
), export cases (ExportOnly
) or both (ImportAndExport
) (default:'ImportAndExport'
)