Devo eseguire la sicurezza sui socket in C ++?

0

Stavo leggendo su come far dialogare due programmi sulla mia macchina, e ho visto l'opzione di usare i socket. Un sito web ha suggerito che i socket sono interamente interni, quindi sembrava suggerire che non è necessaria alcuna sicurezza perché i socket non sono visibili al di fuori della mia macchina.

Ma poi stavo leggendo su SSL. Ora sono confuso, si riferiscono allo stesso tipo di socket? Ho bisogno di sicurezza?

Grazie in anticipo.

    
posta hidden 02.06.2017 - 22:00
fonte

3 risposte

2

Secure Sockets Layer fa effettivamente riferimento al concetto di socket dei sistemi operativi.

I socket sono una forma generalizzata di comunicazione tra processi. Al livello più elementare un socket consente di leggere e scrivere dati da e verso il socket come se stessi leggendo o scrivendo un file, la differenza è solo che l'origine e la destinazione delle comunicazioni socket è un altro processo del computer piuttosto che un file .

I socket possono essere utilizzati per connettere diversi processi sulla stessa macchina o diversi processi su macchine diverse. L'interfaccia è astratta in base alla progettazione, in modo che il programmatore finale (tu) non debba preoccuparsi se i tuoi messaggi vengono o meno passati attraverso la memoria a un altro processo su un socket locale di dominio Unix o se stanno andando oltre un IP rete o se stanno usando UDP o TCP, ecc.

Tuttavia, il modello di socket tradizionale non ti consente di sapere chi sta leggendo e scrivendo l'altra estremità del canale di comunicazione. Anche all'interno di una singola macchina non puoi essere sicuro che non ci sia alcun malware collegato all'altro capo del tuo canale di comunicazione. Questo è molto più vero per i socket abilitati a Internet, che potrebbero leggere / scrivere dati da chiunque nel mondo. Inoltre, ogni volta che i tuoi dati viaggiano su un supporto fisico, sia che si tratti della RAM all'interno di una macchina o di un filo di rame, c'è la possibilità che un avversario stia tentando di intercettare o modificare le tue comunicazioni.

Pertanto, i socket forniscono il meccanismo di comunicazione, ma non garantiscono l' autenticità delle diverse parti di una comunicazione o la riservatezza dei dati trasmessi attraverso il meccanismo dei socket.

Transport Layer Security (TLS) e il suo predecessore Secure Sockets Layer (SSL) sono le soluzioni ai problemi di cui sopra. Il protocollo TLS può utilizzare soluzioni crittografiche a chiave pubblica (ad esempio certificati firmati e terze parti fidate) per garantire che il processo all'altra estremità di un socket appartenga effettivamente alle persone che dichiarano di possedere il socket e può utilizzare la crittografia normale per eseguire la crittografia end-to-end tra gli endpoint del socket.

La differenza tra un socket normale e un socket sicuro in pratica è che un socket regolare è racchiuso in un'interfaccia sicura, quindi la tecnologia socket non cambia ma il wrapper garantisce che tutte le comunicazioni inviate tramite il socket regolare siano correttamente crittografate e decifrati.

link

    
risposta data 02.06.2017 - 23:03
fonte
0

Gli zoccoli forniscono un modo in cui due processi potrebbero comunicare tra loro. Ora questa comunicazione potrebbe essere una macchina per la comunicazione della macchina o all'interno di un sistema.

Solitamente, i socket vengono utilizzati per le comunicazioni da processo a processo attraverso la rete poiché vi sono altri modi in cui i processi possono comunicare sulla stessa macchina (ad esempio, memoria condivisa).

Si noti che "proteggere un socket" è un termine generico e non solo sull'utilizzo di SSL. In generale, la riservatezza è una parte importante della sicurezza della tua applicazione che puoi ottenere usando SSL. Tuttavia, c'è più sicurezza rispetto alla semplice riservatezza, specialmente per codice non gestito come C ++.

Parte di "sicurezza in esecuzione sul programma" consiste nel filtrare i dati che passano indietro e in quarta sui socket.

Dal punto di vista della sicurezza, quando il tuo programma è composto da più componenti (es. server e client), è sempre consigliabile proteggere / filtrare / disinfettare qualsiasi input in entrata e uscita in uscita tra quei componenti anche se tali dati non sono venendo direttamente dall'utente (nell'ultima perdita di Vault7 c'è stato un exploit che ha sfruttato lo scambio di dati non protetti / filtrati tra switch Cisco che consentiva il DOS o non autorizzati accesso)

Nel caso che stai descrivendo, ci sono molti scenari in cui le cose potrebbero essere sbagliate a causa di un socket non protetto locale.

Ad esempio, se quel socket era in esecuzione con privilegi elevati, potrebbe essere sfruttato dagli hacker per eseguire " escalation di privilegi "dopo aver ottenuto l'accesso sulla macchina.

Il fatto che il socket non sia esposto alla rete, significa che il socket e i dati non sono vulnerabili agli attacchi "remoti" (attacchi che potrebbero essere condotti sulla rete) ma è ancora possibile per loro essere abusato tramite attacchi locali (exploit locali e payload dannosi) e durante il processo di post-exploitation.

    
risposta data 02.06.2017 - 22:51
fonte
0

One website suggested that sockets are entirely internal, so that seemed to suggest to me that no security is necessary because the sockets are not visible outside my machine

Il socket di dominio Unix è interamente interno alla macchina, tuttavia l'implementazione della sicurezza è ancora necessaria per ridurre la superficie di attacco. È possibile impostare l'autorizzazione sul file socket, per limitare i processi che possono utilizzare il socket per interagire con il programma.

Secure Socket Layer o Transport Layer Security è uno schema di autenticazione e crittografia, solitamente utilizzato per socket esterni come TCP e talvolta UDP (con DTLS). In genere, ha poco senso eseguire SSL / TLS su socket di dominio Unix (SSL / TLS ha un sovraccarico, e si può avere un controllo migliore usando le autorizzazioni socket).

    
risposta data 03.07.2017 - 04:13
fonte

Leggi altre domande sui tag