Un guscio completo di Turing significa uguale sicuro?

-1

Ho sentito che Linux è più sicuro di Windows. È vero? Penso che siano ugualmente sicuri perché entrambi hanno una shell completa di Turing, quindi se si fa del male a un sistema, c'è un metodo per fare lo stesso danno su un altro sistema. Il mio ragionamento è corretto?

    
posta junior 06.07.2017 - 18:28
fonte

4 risposte

2

Completezza e sicurezza di Turing sono indipendenti l'una dall'altra. Linux ha la reputazione di essere più sicuro grazie al suo modello di autorizzazione e al fatto che tutto è open source. Il motivo dietro il quale l'open source è più sicuro è che più persone sono in grado di rivedere il sistema operativo per le vulnerabilità della sicurezza.

    
risposta data 06.07.2017 - 21:13
fonte
12

Non è possibile determinare se Linux è più sicuro di Windows o viceversa. La completezza di Turing non è una metrica di sicurezza che può essere utilizzata per confrontare oggettivamente il grado di sicurezza di due sistemi.

Viste le differenze architetturali tra loro, Linux e Windows sono incommensurable costrutti astratti nel contesto della sicurezza. Cioè, date le loro considerevoli differenze, in assenza di uno standard o una rubrica oggettivi che possono essere utilizzati per valutare quanto sia misurabilmente sicuro un sistema, questi due sistemi non possono essere confrontati direttamente in termini di sicurezza / insicurezza.

  • Il termine "Linux" si riferisce in realtà al kernel di Linux. L'architettura del kernel Linux è monolitico , il che significa che il kernel implementa tutte le funzionalità che ci si aspetta da un sistema operativo. Questo non è il caso del sistema operativo Windows, la cui architettura è basata su kernel ibrido , piuttosto che basata su kernel monolitico.

    NT-based Windows is classified as a hybrid kernel (or a macrokernel) rather than a monolithic kernel because the emulation subsystems run in user-mode server processes, rather than in kernel mode as on a monolithic kernel, and further because of the large number of design goals which resemble design goals of Mach (in particular the separation of OS personalities from a general kernel design). Conversely, the reason NT is not a microkernel system is because most of the system components run in the same address space as the kernel, as would be the case with a monolithic design (in a traditional monolithic design, there would not be a microkernel per se, but the kernel would implement broadly similar functionality to NT's microkernel and kernel-mode subsystems).1

  • Anche se il kernel di Windows NT e il kernel Linux erano entrambi considerati monolitici nella progettazione, ci sono ancora differenze significative nell'implementazione e, per estensione, nella funzionalità. Un netto esempio di ciò sono le differenze nelle interfacce del kernel (system call APIs): mentre il numero di chiamate di sistema Linux è approssimativamente 340, ci sono molte altre chiamate di sistema Windows (da ~ 700 a oltre 1000 (ipotizzato), a seconda del kernel). In aggiunta a ciò, il modo in cui vengono chiamate syscalls differisce anche tra i sistemi.
  • Viste le differenze nella progettazione e nell'implementazione dei kernel di Windows e Linux, non dovrebbe sorprendere il fatto che il formato di un binario debba essere caricato per essere caricato in memoria ed eseguito diversamente tra i due sistemi - entrambi i kernel applicano diverse interfacce binarie di applicazioni (ABI) che descrivono come un processo deve essere creato nella memoria virtuale in base ai vari segmenti di un binario eseguibile. Affinché il programma di caricamento di Windows possa mappare in memoria ed eseguire un binario, il file binario deve essere conforme a Portable Executable (PE) formato, mentre i binari di Linux devono essere conformi al formato eseguibile e collegabile (ELF).

Perché questo è rilevante? A causa delle suddette differenze e molti altri ancora tra i kernel Windows e Linux, i processi Windows e Linux sono creati da binari formattati e progettati in modo diverso, mappati e caricati nella memoria virtuale da diversi kernel che impongono diversi ABI, hanno diversi ambienti di runtime, hanno differenti meccanismi di invocazione del kernel, hanno diverse concezioni di collegamento dinamico, ecc. Queste differenze impediscono confronti diretti tra i sistemi operativi che vengono fatti quando si tratta di sicurezza, poiché generalmente non condividono le stesse debolezze. Questo è ovviato quando si tenta di confrontare la shell di Windows con la shell Linux - anche il termine "shell" non ha un significato comune tra i due sistemi. Linux non ha un registro, COM, WMI, ASP.NET e così via. Un esempio concreto di questo è il tentativo di confrontare bash con PowerShell per determinare quale è "migliore" - non può essere fatto.

1. Utente in modalità kernel di MS Windows NT e Libro bianco GDI

    
risposta data 06.07.2017 - 21:17
fonte
3

La completezza di Turing non significa che puoi fare tutto. Significa che qualsiasi programma è espressivo nella lingua. Ciò non significa che il sistema sottostante consentirà effettivamente a quel programma di fare ciò che è espresso.

Ad esempio, in Linux, un programma a livello utente (cioè, non root), può infatti esprimere ed eseguire "rm -rf /" per rimuovere tutto sul computer. Tuttavia, non riuscirà in realtà poiché il programma a livello utente in esecuzione nella shell a livello utente non può semplicemente rimuovere file che l'utente non controlla.

    
risposta data 06.07.2017 - 21:16
fonte
1

Completezza di Turing significa che una macchina può eseguire qualsiasi calcolo che un'altra macchina completa di Turing possa fare. Questo non significa che possa fare qualsiasi altra cosa. Tutti i computer hanno capacità che vanno al di là di ciò che fa una macchina di Turing, perché ci si aspetta che tutti i computer facciano molto più che calcoli di calcolo.

Una macchina di Turing non:

  • Leggi da una tastiera
  • Pacchetti ethernet artigianali
  • Visualizza le informazioni su uno schermo
  • Leggi un orologio o calcola in altro modo il passare del tempo.

Il fatto che Turing sia completo implichi è che puoi generalmente emulare qualsiasi calcolo che un altro computer potrebbe fare, purché tali calcoli non siano legati al tempo.

Come esempio di vita reale, considera il client nativo di Google (NaCl). In generale, è molto rischioso eseguire eseguibili sconosciuti sul tuo computer. Non sai mai quando saranno maliziosi. NaCl fornisce un sottoinsieme rigoroso di quella funzionalità nativa che è progettata per prevenire modi intelligenti di fare danni. Tuttavia, non impedisce a queste applicazioni di essere completate da Turing. Sono benvenuti a calcolare qualsiasi cosa a loro piacimento all'interno della loro piccola bolla ... semplicemente non gli è consentito avere effetti collaterali non desiderati al di fuori di quella bolla.

    
risposta data 07.07.2017 - 02:18
fonte

Leggi altre domande sui tag