Raccogliere i log di BeyondTrust Remote Support

Supportato in:

Questo parser gestisce i messaggi syslog di BeyondTrust Remote Support, trasformandoli in formato UDM. Elabora i log con formato CEF e non CEF, estrae i campi, esegue trasformazioni dei dati e li mappa ai campi UDM appropriati, inclusi i dettagli relativi a principali, target e risultati di sicurezza.

Prima di iniziare

  • Assicurati di avere un'istanza Google Security Operations.
  • Assicurati di utilizzare Windows 2016 o versioni successive o un host Linux con systemd.
  • Se il servizio è in esecuzione dietro un proxy, assicurati che le porte del firewall siano aperte.

Recupera il file di autenticazione di importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'importazione.

Ottenere l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa BindPlane Agent

  1. Per l'installazione su Windows, esegui il seguente script:
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Per l'installazione di Linux, esegui il seguente script:
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Ulteriori opzioni di installazione sono disponibili in questa guida all'installazione.

Configurare l'agente BindPlane per importare i syslog e inviarli a Google SecOps

  1. Accedi al computer su cui è installato BindPlane.
  2. Modifica il file config.yaml come segue:

    receivers:
        tcplog:
            # Replace the below port <54525> and IP <0.0.0.0> with your specific values
            listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: BeyondTrust_Remote_Support
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Riavvia l'agente BindPlane per applicare le modifiche:

    sudo systemctl restart bindplane
    

Configurare l'esportazione di syslog da BeyondTrust Remote Support

  1. Accedi al tuo BeyondTrust Remote Support.
  2. Vai a Sicurezza > Amministrazione dell'appliance.
  3. Vai alla sezione Syslog e imposta i seguenti valori:
    • Server syslog remoto: inserisci il nome host o l'indirizzo IP del server host syslog (Bindplane). In questo campo puoi aggiungere fino a tre server syslog.
    • Formato messaggio: seleziona RFC 5424.
    • Porta: inserisci la porta del server host syslog (Bindplane).
  4. Fai clic su Invia.

Mappatura UDM

Campo log Mappatura UDM Logica
account:expiration read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "account:expiration" nel log non elaborato.
account:email:locale read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "account:email:locale" nel log non elaborato.
command_shell_is_whitelist read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "ssions:command_shell_is_whitelist" nel log non elaborato.
dataora read_only_udm.metadata.event_timestamp.seconds Il valore viene analizzato dal campo "data/ora" nel log non elaborato e convertito in un timestamp Unix.
dtPostTime read_only_udm.metadata.event_timestamp.seconds Il valore viene analizzato dal campo "dtPostTime" nel log non elaborato e convertito in un timestamp Unix.
event read_only_udm.metadata.product_event_type Il valore viene preso dal campo "event" nel log non elaborato.
host read_only_udm.principal.hostname Il valore viene preso dal campo "host" nel log non elaborato.
ID read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "id" nel log non elaborato.
license_pool:id read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "license_pool:id" nel log non elaborato.
login_schedule:timezone read_only_udm.target.location.country_or_region Il valore viene preso dal campo "login_schedule:timezone" nel log non elaborato.
old_account:email:address read_only_udm.target.user.email_addresses Il valore viene preso dal campo "old_account:email:address" nel log non elaborato.
old_account:failed_logins read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_account:failed_logins" nel log non elaborato.
old_display_number read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_display_number" nel log non elaborato.
old_login_schedule:timezone read_only_udm.target.location.country_or_region Il valore viene preso dal campo "old_login_schedule:timezone" nel log non elaborato.
old_permissions:api:reporting read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:api:reporting" nel log non elaborato.
old_permissions:jump_item_role:default:id read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:jump_item_role:default:id" nel log non elaborato.
old_permissions:jump_item_role:default:name read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:jump_item_role:default:name" nel log non elaborato.
old_permissions:jump_item_role:teams:id read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:jump_item_role:teams:id" nel log non elaborato.
old_permissions:jump_item_role:teams:name read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:jump_item_role:teams:name" nel log non elaborato.
old_permissions:presentations:control:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:presentations:control:status" nel log non elaborato.
old_permissions:public_sites:templates:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:public_sites:templates:status" nel log non elaborato.
old_permissions:reporting:presentation_reports read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:reporting:presentation_reports" nel log non elaborato.
old_permissions:reporting:support_reports read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:reporting:support_reports" nel log non elaborato.
old_permissions:reporting:vault_reports read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:reporting:vault_reports" nel log non elaborato.
old_permissions:support read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support" nel log non elaborato.
old_permissions:support:accept_team_sessions:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:accept_team_sessions:status" nel log non elaborato.
old_permissions:support:bomgar_button:change_public_sites:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:bomgar_button:change_public_sites:status" nel log non elaborato.
old_permissions:support:bomgar_button:personal:deploy:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:bomgar_button:personal:deploy:status" nel log non elaborato.
old_permissions:support:bomgar_button:team:manage read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:bomgar_button:team:manage" nel log non elaborato.
old_permissions:support:bomgar_button:team:manage:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:bomgar_button:team:manage:status" nel log non elaborato.
old_permissions:support:ios_content read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:ios_content" nel log non elaborato.
old_permissions:support:jump:local read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:jump:local" nel log non elaborato.
old_permissions:support:jump:local:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:jump:local:status" nel log non elaborato.
old_permissions:support:jump:remote read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:jump:remote" nel log non elaborato.
old_permissions:support:jump:remote:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:jump:remote:status" nel log non elaborato.
old_permissions:support:rdp:local read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:rdp:local" nel log non elaborato.
old_permissions:support:rdp:local:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:rdp:local:status" nel log non elaborato.
old_permissions:support:rdp:remote read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:rdp:remote" nel log non elaborato.
old_permissions:support:rdp:remote:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:rdp:remote:status" nel log non elaborato.
old_permissions:support:session_assignment:idle_timeout read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:session_assignment:idle_timeout" nel log non elaborato.
old_permissions:support:session_assignment:idle_timeout:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:session_assignment:idle_timeout:status" nel log non elaborato.
old_permissions:support:session_assignment:session_limit read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:session_assignment:session_limit" nel log non elaborato.
old_permissions:support:session_assignment:session_limit:status=forbid_override read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:session_assignment:session_limit:status=forbid_override" nel log non elaborato.
old_permissions:support:session_keys read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:session_keys" nel log non elaborato.
old_permissions:support:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:status" nel log non elaborato.
old_permissions:support:team_share read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:team_share" nel log non elaborato.
old_permissions:support:team_transfer read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:team_transfer" nel log non elaborato.
old_permissions:support:vnc:local read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:vnc:local" nel log non elaborato.
old_permissions:support:vnc:local:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:vnc:local:status" nel log non elaborato.
old_permissions:support:vnc:remote read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:vnc:remote" nel log non elaborato.
old_permissions:support:vnc:remote:status read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_permissions:support:vnc:remote:status" nel log non elaborato.
old_private_display_name read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_private_display_name" nel log non elaborato.
old_provider:id read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_provider:id" nel log non elaborato.
old_provider:name read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "old_provider:name" nel log non elaborato.
permissions:jump_item_role:default:id read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "permissions:jump_item_role:default:id" nel log non elaborato.
permissions:jump_item_role:default:name read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "permissions:jump_item_role:default:name" nel log non elaborato.
permissions:jump_item_role:teams:id read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "permissions:jump_item_role:teams:id" nel log non elaborato.
permissions:jump_item_role:teams:name read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "permissions:jump_item_role:teams:name" nel log non elaborato.
provider:id read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "provider:id" nel log non elaborato.
provider:name read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "provider:name" nel log non elaborato.
motivo read_only_udm.security_result.description Il valore viene preso dal campo "reason" nel log non elaborato e aggiunto al campo della descrizione con il prefisso " - Motivo:".
sEventID read_only_udm.metadata.product_event_type Il valore viene preso dal campo "sEventID" nel log non elaborato.
sIpAddress read_only_udm.principal.ip Il valore viene preso dal campo "sIpAddress" nel log non elaborato.
sLoginName read_only_udm.principal.user.userid Il valore viene analizzato dal campo "sLoginName" nel log non elaborato. Se il campo contiene un dominio, questo viene estratto e mappato a read_only_udm.principal.namespace.
sMessage read_only_udm.security_result.description Il valore viene preso dal campo "sMessage" nel log non elaborato. Il parser estrae il testo tra virgolette e lo mappa al campo della descrizione.
sOriginatingAccount read_only_udm.principal.user.userid Il valore viene analizzato dal campo "sOriginatingAccount" nel log non elaborato. Se il campo contiene un dominio, questo viene estratto e mappato a read_only_udm.principal.namespace.
sOriginatingApplicationComponent read_only_udm.principal.application Il valore viene preso dal campo "sOriginatingApplicationComponent" nel log non elaborato e aggiunto al campo dell'applicazione tra parentesi dopo il valore di sOriginatingApplicationName.
sOriginatingApplicationName read_only_udm.principal.application Il valore viene preso dal campo "sOriginatingApplicationName" nel log non elaborato.
sOriginatingSystem read_only_udm.principal.hostname Il valore viene preso dal campo "sOriginatingSystem" nel log non elaborato.
session_policy:id read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "session_policy:id" nel log non elaborato.
session_policy:name read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "session_policy:name" nel log non elaborato.
session_policy:purpose read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "session_policy:purpose" nel log non elaborato.
sito read_only_udm.target.hostname Il valore viene preso dal campo "site" nel log non elaborato.
stato read_only_udm.security_result.summary Il valore viene preso dal campo "status" nel log non elaborato e aggiunto al campo di riepilogo.
support:jump:local read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:jump:local" nel log non elaborato.
support:permissions:allow_pinned_clients read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:allow_pinned_clients" nel log non elaborato.
support:permissions:allow_users read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:allow_users" nel log non elaborato.
support:permissions:canned_scripts read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:canned_scripts" nel log non elaborato.
support:permissions:chat read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:chat" nel log non elaborato.
support:permissions:chat:push_url read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:chat:push_url" nel log non elaborato.
support:permissions:chat:send_file read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:chat:send_file" nel log non elaborato.
support:permissions:command_shell read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:command_shell" nel log non elaborato.
support:permissions:deploy_callback_button read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:deploy_callback_button" nel log non elaborato.
support:permissions:elevation read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:elevation" nel log non elaborato.
support:permissions:file_transfers:cust read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:file_transfers:cust" nel log non elaborato.
support:permissions:file_transfers:download read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:file_transfers:download" nel log non elaborato.
support:permissions:file_transfers:rep read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:file_transfers:rep" nel log non elaborato.
support:permissions:file_transfers:upload read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:file_transfers:upload" nel log non elaborato.
support:permissions:registry_access read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:registry_access" nel log non elaborato.
support:permissions:request_pin_unpin read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:request_pin_unpin" nel log non elaborato.
support:permissions:screen_sharing read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:screen_sharing" nel log non elaborato.
support:permissions:screen_sharing:allow_elevated_tools read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:screen_sharing:allow_elevated_tools" nel log non elaborato.
support:permissions:screen_sharing:annotations read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:screen_sharing:annotations" nel log non elaborato.
support:permissions:screen_sharing:application_restriction read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:screen_sharing:application_restriction" nel log non elaborato.
support:permissions:screen_sharing:application_sharing read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:screen_sharing:application_sharing" nel log non elaborato.
support:permissions:screen_sharing:clipboard_direction read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:screen_sharing:clipboard_direction" nel log non elaborato.
support:permissions:screen_sharing:cobrowse read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:screen_sharing:cobrowse" nel log non elaborato.
support:permissions:screen_sharing:privacy_mode read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:screen_sharing:privacy_mode" nel log non elaborato.
support:permissions:screen_sharing:show_screen read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:screen_sharing:show_screen" nel log non elaborato.
support:permissions:system_info read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:system_info" nel log non elaborato.
support:permissions:system_info:actions read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:permissions:system_info:actions" nel log non elaborato.
support:prompting:command_shell read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:prompting:command_shell" nel log non elaborato.
support:prompting:default read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:prompting:default" nel log non elaborato.
support:prompting:deploy_callback_button read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:prompting:deploy_callback_button" nel log non elaborato.
support:prompting:elevate read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:prompting:elevate" nel log non elaborato.
support:prompting:file_transfer read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:prompting:file_transfer" nel log non elaborato.
support:prompting:registry read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:prompting:registry" nel log non elaborato.
support:prompting:screen_sharing:cobrowse read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:prompting:screen_sharing:cobrowse" nel log non elaborato.
support:prompting:screen_sharing:full_access read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "support:prompting:screen_sharing:full_access" nel log non elaborato.
target read_only_udm.target.application Il valore viene preso dal campo "target" nel log non elaborato. Il parser sostituisce "rep_client" con "Representative Console" e "web/login" con "Web/Login".
two_factor_auth:app read_only_udm.principal.user.attribute.labels.value Il valore viene preso dal campo "two_factor_auth:app" nel log non elaborato.
quando read_only_udm.metadata.product_log_id Il valore viene preso dal campo "when" nel log non elaborato.
quando read_only_udm.metadata.event_timestamp.seconds Il valore viene analizzato dal campo "when" nel log non elaborato e convertito in un timestamp Unix.
che read_only_udm.principal.user.userid Il valore viene analizzato dal campo "who" nel log non elaborato. Il parser estrae il testo tra parentesi.
che read_only_udm.principal.user.user_display_name Il valore viene analizzato dal campo "who" nel log non elaborato. Il parser estrae il testo prima delle parentesi.
who_ip read_only_udm.principal.ip Il valore viene preso dal campo "who_ip" nel log non elaborato.
read_only_udm.metadata.vendor_name Il valore viene impostato su "BeyondTrust" dall'analizzatore.
read_only_udm.metadata.product_name Il valore viene impostato su "BeyondTrust Remote Support" dall'analizzatore.
read_only_udm.metadata.log_type Il valore viene impostato su "BOMGAR" dall'analizzatore.
read_only_udm.extensions.auth.type Il valore viene impostato su "MACHINE" se la destinazione è "rep_client", su "SSO" se la destinazione è "web/login" e su "AUTHTYPE_UNSPECIFIED" in caso contrario dal parser.
read_only_udm.extensions.auth.mechanism Il valore viene impostato su "USERNAME_PASSWORD" se il metodo è "using password", su "REMOTE" se il metodo è "using elevate" e viene lasciato vuoto in caso contrario dal parser.
read_only_udm.security_result.action Il valore è impostato su "ALLOW" se lo stato non è "failure", il motivo non è "failed" o "user not found" e il messaggio sMessage non contiene "failed login to app web". In caso contrario, il valore viene impostato su "BLOCK" dal parser.
read_only_udm.security_result.summary Il valore viene impostato su "Accesso utente " o "Uscita utente " in base a eventName, seguito dallo stato se non è vuoto dal parser.
read_only_udm.security_result.description Il valore è impostato su "Utente" seguito da userid, indirizzo IP, stato, eventName, connettore ("to" per l'accesso e "from" per la disconnessione), target e metodo. Se il motivo non è vuoto e non è "failed", viene aggiunto alla descrizione con il prefisso " - Motivo:" dal parser.

Modifiche

2024-01-12

  • Miglioramento della gestione degli eventi di stato "challenge".
  • Mappatura degli indirizzi email migliorata per una maggiore precisione.

2022-11-24

  • È stato corretto un bug nell'analisi delle informazioni utente, come nome visualizzato, ID e metodo.
  • Miglioramento dell'accuratezza della classificazione del tipo di autenticazione per gli eventi di accesso utente.

2022-10-13

  • È stato integrato un parser specifico del cliente nel parser predefinito per un'applicabilità più ampia.

2022-09-26

  • È stato integrato un parser specifico del cliente nel parser predefinito per un'applicabilità più ampia.

2022-08-19

  • I parser personalizzati sono stati raggruppati nel parser predefinito per una maggiore manutenibilità e prestazioni.