Errore di crittografia CredSSP

Se avete provato a connettervi a un server remoto tramite il protocollo RDP (Remote Desktop Protocol) e avete ricevuto il seguente messaggio di errore:

Errore di crittografia CredSSP

“Impossibile connettersi al computer remoto a causa di un errore di crittografia CredSSP (Credential Security Support Provider). Questo potrebbe essere dovuto alla configurazione del criterio di crittografia CredSSP sul server. Per ulteriori informazioni, consultare la documentazione del server o contattare l’amministratore del sistema.”

Allora siete incappati in un problema noto come “errore CredSSP Encryption Oracle Remediation”. L’errore di crittografia CredSSP si verifica quando il client e il server hanno una versione diversa del protocollo CredSSP, che è usato per autenticare le credenziali degli utenti e crittografare i dati trasmessi tra le due parti.

CredSSP è un protocollo che consente al client RDP di delegare le proprie credenziali al server remoto per eseguire operazioni che richiedono privilegi elevati, come l’installazione di software o la modifica delle impostazioni di sistema. Tuttavia, questo protocollo è vulnerabile ad un attacco di tipo “man-in-the-middle” in cui un malintenzionato può intercettare le credenziali del client e usarle per eseguire operazioni non autorizzate sul server remoto.

Il problema è stato introdotto da un aggiornamento di sicurezza di Windows rilasciato a marzo 2018, che ha modificato il comportamento di CredSSP per prevenire un tipo di attacco chiamato “oracle padding”.

Per risolvere questo errore, ci sono due possibili soluzioni:

  1. Aggiornare il client e il server allo stesso livello di patch di sicurezza. Questa è la soluzione più consigliata, in quanto garantisce la massima protezione contro gli attacchi basati su CredSSP. Per verificare se il vostro sistema è aggiornato, potete usare lo strumento Windows Update o consultare il sito web Microsoft Update Catalog.
  2. Modificare le impostazioni del registro di sistema del client per consentire la connessione RDP anche se il server non è aggiornato. Questa è una soluzione temporanea, che comporta un rischio di sicurezza maggiore, in quanto espone il client agli attacchi basati su CredSSP. Per applicare questa soluzione, dovete seguire questi passi:
    • Aprire l’editor del registro di sistema (regedit.exe) e navigare alla chiave HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters
    • Creare un nuovo valore DWORD (32 bit) chiamato AllowEncryptionOracle e impostarlo a 2
    • Riavviare il computer
    • Tentare nuovamente la connessione RDP al server remoto
  3. Modificare il criterio di gruppo sul client o sul server per consentire la connessione con una versione precedente di CredSSP. Questa è una soluzione temporanea, che può esporre il sistema a rischi di sicurezza. Per modificare il criterio di gruppo, seguire questi passaggi:
    • Aprire l’editor dei criteri di gruppo locale (gpedit.msc) sul client o sul server.
    • Navigare fino a Configurazione computer > Modelli amministrativi > Sistema > Delega credenziali.
    • Fare doppio clic sulla voce “Correzione oracolo crittografia CredSSP” e impostarla su “Abilitata”.
    • Scegliere “Vulnerabile”o “Mitigato” tra le opzioni disponibili nel menu a discesa “Protezione oracolo crittografia CredSSP”. Le opzioni sono:
      • Forza aggiornamento: richiede che il server sia aggiornato alla stessa versione del client. Se il server non è aggiornato, la connessione viene rifiutata. Questa è l’opzione predefinita dopo l’aggiornamento di sicurezza.
      • Mitigato: consente la connessione con un server non aggiornato, ma solo se il client è protetto da un firewall o da un gateway RDP. Questa opzione riduce il rischio di attacco, ma non lo elimina completamente.
      • Vulnerabile: consente la connessione con qualsiasi server, indipendentemente dalla sua versione. Questa opzione espone il client a un alto rischio di attacco e dovrebbe essere usata solo in casi eccezionali.
    • Fare clic su OK per salvare le modifiche.
    • Riavviare il client o il server per applicare le modifiche.
Modificare il criterio di gruppo

Spero che questa guida vi sia stata utile per risolvere l’errore CredSSP Encryption Oracle Remediation.

Ricevimento merci, sospensione e giacenza di magazzino

Nei giorni scorsi un cliente che utilizza la logistica sul palmare, ha sottoposto la seguente problematica inerente il ricevimento merci, sospensione e giacenza di magazzino :

“In fase di ricevimento merci da ordine al fornitore, quando si sospende l’operazione di riscontro, anche se il ddt risulta sospeso sul palmare, l’ordine risulta totalmente caricato a magazzino.
Spesso, però, non tutta la merce ordinata viene spedita, e in questo caso, se l’operatore è costretto a sospendere il riscontro, tutta la merce risulta disponibile fino a quando non viene completato il riscontro e gestiti i residui. Ciò comporta notevoli difficoltà agli addetti alle vendite che più volte forniscono ai clienti informazioni errate su disponibilità e tempi di consegna”.

Nel tentativo di dare una risposta in tempi brevi, ho girato la problematica all’assistenza che mi ha così risposto:

“Salve Massimiliano, confermo che finché non viene concluso il ricevimento merce, l’ordine di partenza viene considerato evaso (in quanto il ricevimento lavora sul ddt ricevuto che viene creato), solo alla sua conclusione vengono aggiornati il ddt e la qta evasa sull’ordine. Non è presente l’aggiornamento della quantità evasa in tempo reale sull’ordine, ma si può avere una consultazione dello stato del ricevimento in monitor picking”

Per poi concludere così:

“Gentile Partner, la funzionalità da lei richiesta non è prevista dalle nostre procedure software.
Se, a suo parere, tale funzionalità riveste particolare importanza e può rappresentare un plus per il prodotto……ecc. ecc.”

Preso atto della risposta ho cercato un modo per risolvere il problema buttando giù qualche riga di codice.

Ovviamente ero convinto che non esistessero opzioni di alcun tipo per risolvere il problema.

Mentre leggevo il codice per capire dove poter intervenire, mi sono imbattuto in una funzione nella BERCRICM.

La funzione richiamava delle opzioni di registro, una che modifica il tipo b/f al momento del riscontro, e l’altra che lo reimposta alla chiusura.

Le opzioni in questione sono “TipoBfGenerazioneDDT” e “TipoBfCompletamentoDDT”

Ho pensato di creare un tipo bolla/fattura “neutro”, cioè che non facesse movimenti di magazzino, e di assegnarlo all’opzione TipoBfGenerazioneDDT, mentre all’opzione TipoBfCompletamentoDDT ho assegnato il tipo legato al carico per acquisto. A questo punto, però, mi sono chiesto: perché l’assistenza ha affermato che la funzionalità richiesta non è prevista dalle procedure software?

Così ho posto la mia attenzione sulle altre opzioni di registro ed ho trovato quest’altra “TipoBfCompletamentoRipristinaOrdine”. Questa opzione l’ho utilizzata al posto della “TipoBfCompletamentoDDT” in modo da ripristinare il tipo bolla fattura originale presente sull’ordine.

Ricevimento merci opzioni registro BSRMRICM

Assegnate le opzioni, ho cominciato a testare la procedura e sembrava andare tutto alla perfezione.

  • Al momento di iniziare il riscontro, si è generato un ddt con tipo b/f neutra.
  • Nel momento in cui il riscontro si completava, il tipo b/f assumeva il valore assegnato all’ordine fornitore.

Il problema è sorto quando si è creato un ordine che prevedeva il reverse charge.

In quel caso il tipo b/f doveva essere di tipo reverse ma impostandolo in quel modo o come misto, quando l’acquisto era normale si aveva il massaggio bloccante dell’assenza di righe con iva in reverse.

A quel punto ho supposto che la risposta dell’assistenza avesse tenuto conto di questa situazione.

Continuavo però a non capire la presenza delle altre opzioni.

Rimettendo mano al codice è stata analizzata la dll BNMGDOCU, cercando il punto in cui il controllo delle righe in reverse veniva fatto per poterlo bypassare.

Il controllo è all’interno della funzione “TestPreSalvaSTD” dove, con mio stupore, ho scoperto che il controllo è sottoposto ad una opzione in BNVEBOLL, non presente nell’elenco delle opzioni.

Ricevimento merci TestPreSalvaSTD

L’opzione in questione è “NoMsgAssenzaCodiciIvaReverseCharge”, che impostata a -1 salta il controllo della presenza delle righe in reverse

Ricevimento merci opzioni registro BNVEBOLL

In questo modo, senza intervenire sul codice, ma utilizzando solo le opzioni esistenti, si è messo in condizione il cliente di lavorare senza problemi in quanto se il fornitore è in reverse, questo è dichiarato già dall’ordine, senza correre il rischio di generare buchi nella numerazione del registro iva.

Rimappare unità rete al riavvio di SQL Server

La volta precedente abbiamo visto come mappare un’unità di rete in Sql Server in modo da poter effettuare backup o posizionare i database in unità di rete. Ora vedremo come fare per rimappare le unità di rete al riavvio di SQL Server

Questa operazione può essere utile se hai dei database o dei file di backup su unità di rete e vuoi assicurarti che siano sempre accessibili dopo un riavvio del server.

Una stored procedure è un gruppo di istruzioni SQL che viene compilato una volta e può essere eseguito più volte. Le stored procedure possono accettare dei parametri di input e restituire dei valori di output. Le stored procedure possono anche essere impostate per l’esecuzione automatica all’avvio di un’istanza di SQL Server, usando l’opzione sp_procoption.

Per creare una stored procedure per rimappare le unità di rete al riavvio di SQL Server, segui questi passi:

  1. Apri SQL Server Management Studio e connettiti al server dove vuoi creare la stored procedure
  2. Espandi il nodo Programmabilità e fai clic con il pulsante destro del mouse su Stored Procedure. Seleziona Nuova stored procedure dal menu contestuale
Rimappare le unità di rete al riavvio di SQL Server
  • Nella finestra di query, sostituisci il testo predefinito con il seguente codice:
    • CREATE PROCEDURE sp_RemapNetworkDrives
      AS
      BEGIN
      — Rimuove le eventuali unità di rete già mappate
      EXEC xp_cmdshell ‘net use * /delete /y’
      — Mappa le unità di rete desiderate con i percorsi e le credenziali corrette
      EXEC xp_cmdshell ‘net use Z: \\ServerName\ShareName /user:DomainName\UserName Password’
      — Ripete il passo precedente per ogni unità di rete da mappare
      END
  • Modifica il codice sostituendo i nomi delle unità, i percorsi e le credenziali con quelli effettivi che vuoi usare
  • Esegui il codice premendo F5 o facendo clic sul pulsante Esegui nella barra degli strumenti. Dovresti vedere un messaggio che conferma la creazione della stored procedure
  • Per impostare la stored procedure per l’esecuzione automatica all’avvio di SQL Server, esegui il seguente codice:
    • EXEC sp_procoption ‘sp_RemapNetworkDrives’, ‘startup’, ‘on’
  • Per verificare che la stored procedure funzioni correttamente, riavvia il server e controlla che le unità di rete siano mappate correttamente.

Come mappare unità di rete su SQL Server

Mappare un’unità di rete su SQL Server è un’operazione utile per accedere a file o cartelle condivise da altri computer o server nella stessa rete. In questo modo si può sfruttare la potenza e la flessibilità di SQL Server per gestire e manipolare i dati presenti in queste risorse esterne. In altre parole avremmo la possibilità di posizionare i file del database su unità di rete (ad esempio un NAS)

Per mappare un’unità di rete su SQL Server, ci sono due metodi principali: usare il comando xp_cmdshell o creare una stored procedure con il codice Transact-SQL appropriato.

Metodo 1: usare il comando xp_cmdshell

Il comando xp_cmdshell è una funzione integrata di SQL Server che consente di eseguire comandi del sistema operativo direttamente da una query SQL, tuttavia, per usare questo comando, bisogna avere i permessi necessari e abilitare l’opzione xp_cmdshell nella configurazione di SQL Server.

Per abilitare l’opzione xp_cmdshell, si può usare il seguente codice:

EXEC sp_configure ‘show advanced options’, 1
RECONFIGURE
EXEC sp_configure ‘xp_cmdshell’, 1
RECONFIGURE

Dopo l’esecuzione del comando si dovrebbe ottnere un messaggio simile a questo:

L’impostazione 0 dell’opzione di configurazione ‘show advanced options’ è stata sostituita con 1. Per eseguire l’installazione, utilizzare RECONFIGURE.
L’impostazione 0 dell’opzione di configurazione ‘xp_cmdshell’ è stata sostituita con 1. Per eseguire l’installazione, utilizzare RECONFIGURE.

mappare unità di rete su SQL Server con comando xp_cmdshell

Una volta abilitata l’opzione xp_cmdshell, si può usare il comando NET USE per mappare un’unità di rete su SQL Server. Il comando NET USE ha la seguente sintassi:

NET USE [driveletter:] [\\computername\sharename] [password | *] [/USER:[domainname\]username] [/PERSISTENT:{YES | NO}]
Dove:

– driveletter: è la lettera dell’unità di rete da creare (ad esempio Z:)
– computername: è il nome del computer o del server che condivide la risorsa (ad esempio SERVER01)
– sharename: è il nome della risorsa condivisa (ad esempio una cartella)
– password: è la password per accedere alla risorsa condivisa (se richiesta)
– /USER: è il nome utente per accedere alla risorsa condivisa (se richiesto)
– /PERSISTENT: è l’opzione per rendere permanente o meno la mappatura dell’unità di rete

Per esempio, per mappare un’unità di rete Z: che punta alla cartella condivisa \\SERVER01\DATA, si può usare il seguente codice:

EXEC xp_cmdshell ‘NET USE Z: \\SERVER01\DATA’

Se la mappatura ha avuto successo, si dovrebbe ottenere un messaggio simile a questo:

The command completed successfully.

Se invece si verifica un errore, si dovrebbe ottenere un messaggio simile a questo:

System error 53 has occurred.
The network path was not found.

In questo caso, bisogna verificare che il nome del computer o del server sia corretto, e che la risorsa condivisa sia accessibile e che le credenziali fornite siano valide.

Per verificare che l’unità di rete sia stata mappata correttamente, si può usare il comando DIR per elencare i file e le cartelle presenti nell’unità di rete, per esempio

EXEC xp_cmdshell ‘DIR Z:’

In conclusione, se l’unità di rete è stata mappata correttamente, si dovrebbe ottenere un output simile a questo:

Volume in drive Z is DATA
Volume Serial Number is 1234-5678

Directory of Z:\

01/01/2020 12:00 <DIR> .
01/01/2020 12:00 <DIR> ..

La prossima volta vi mostrerò come mappare le unità di rete tramite una stored procedure, dopodiché come fare per rimapparle auomaticamente al riavvio di SQL Server