posso identificare il computer di origine per un programma?

15

Sto sviluppando un programma in diverse piattaforme e lingue, ma non voglio che nessuno scopra il computer di origine in cui è stato sviluppato il programma, esiste un modo in cui qualcuno possa scoprirlo?

    
posta Mohamad Alhamoud 23.11.2011 - 22:27
fonte

3 risposte

24

Il codice sorgente consiste in un mucchio di file di testo. I contenuti di un file di testo sono esattamente ciò che mostra un editor di testo, quindi puoi controllarlo "visivamente". Attenti ai controllo di revisione di sistemi come CVS o Subversion: possono sostituire automaticamente alcuni tag specifici nel codice sorgente (come " $Id$ ") con una stringa identificativa che può contenere la data e l'ora corrente, il nome di accesso e altre informazioni - quella funzionalità è considerata buona per la tracciabilità, ma capisco che non ti piacerebbe nel tuo caso specifico.

Il codice

compilato è piuttosto qualcos'altro. Alcuni compilatori possono aggiungere automaticamente le stringhe identificative come il software di controllo delle revisioni, come campi "di commento" nella struttura eseguibile. Ciò non deve nemmeno essere un deliberato spionaggio: la tracciabilità è veramente una buona idea nel caso generale; non c'è bisogno di immaginare un governo che corrompe gli sviluppatori di compilatori nell'aggiungere tali cose nei compilatori solo per essere in grado di spiare i programmatori. Inoltre, i formati eseguibili spesso includono alcuni "spazi vuoti" - parti non utilizzate aggiunte per motivi di allineamento - che il compilatore non avrebbe potuto preoccuparsi di riempire di zeri, invece di scrivere solo ciò che era nella RAM in quel luogo. Ciò si è verificato con una versione precedente di lcc-win32 , che stava quindi scrivendo estratti casuali della RAM contenuti che potrebbero contenere informazioni riservate (penso che questo sia stato corretto per lcc-win32, ma potrebbe accadere con altri strumenti).

Altri formati di file possono anche incorporare (e quindi filtrare) alcune informazioni. Ad esempio, le immagini PNG possono includere "commenti" (che non modificano in alcun modo l'aspetto visivo dell'immagine). GIMP , un programma di manipolazione di immagini, utilizza il campo di commento per indicare che è stato coinvolto nell'elaborazione dell'immagine; qualsiasi strumento potrebbe anche aggiungere alcune informazioni che, a tuo avviso, sarebbero meno buone.

Molte potenziali perdite possono essere rilevate visivamente, osservando i file come se fossero testo. Ma questo non copre la possibilità che uno dei tuoi strumenti venga messo volontariamente sotto controllo in modo che includa prove incriminanti nel suo output (tali informazioni di tracciamento sarebbero crittografate in modo da "sembrare casuali" ad eccezione di chiunque sappia dove cercare).

Sfortunatamente per lo stato del mondo in generale, "una rivoluzione nel mio paese" non è un'indicazione molto precisa. Al momento ci sono insurrezioni armate o disordini simili in parecchi paesi, tra cui, ma non solo, Afghanistan, Yemen, Siria, Somalia, parti della Libia, Colombia, Sudan e Sahara meridionale; e le cose non sono completamente chiare in Egitto, Iraq o Iran, solo per includere i pochi che riesco a pensare a memoria.

    
risposta data 23.11.2011 - 23:27
fonte
14

Esiste un'intera disciplina dedicata all'estrazione di informazioni da file e sistemi di computer: computer forensics .

I file di computer sono relativamente facili da rendere anonimi. Relativamente al traffico di rete, ovvero: i file sono solo un mucchio di bit, mentre il traffico di rete porta molte informazioni attraverso i tempi. Su una scala assoluta, l'anonimato di file non banali spesso non è così facile da eseguire.

La prima cosa da verificare è che non ci siano informazioni identificative nei file sorgente, ad eccezione dei commenti. I commenti sono per lo più sicuri, sebbene influenzino i numeri di riga che possono apparire nelle informazioni di debug (ad esempio __LINE__ in C). In particolare, come note Tom , assicurati che i tuoi file sorgente non abbiano tag RCS o simili. Usa nomi molto generici per funzioni, variabili, classi, file sorgenti, ecc., Poiché molti di questi si fanno strada nell'eseguibile.

Il tuo compilatore può essere identificato con una buona percentuale di successo da un esaminatore sufficientemente motivato, in quanto diversi compilatori compilano e ottimizzano il codice comune in modi diversi. Quindi assicurati di usare un compilatore molto comune. Lo stesso vale per tutte le librerie a cui è collegato il tuo programma.

Quindi, esegui alcuni test di base. Compila lo stesso programma su più macchine con la stessa versione del compilatore e assicurati che i risultati siano identici bit per bit. Il test sarà più decisivo se le macchine sono le più diverse possibili a parte il compilatore e le librerie (versione del sistema operativo diversa, nome utente diverso, impostazioni della lingua diverse, ...).

In sistemi unix (come Linux o Cygwin in Windows), esegui il comando strings sui tuoi binari per trovare sottostringhe stampabili. Questo è solo un controllo basilare di sanità mentale, non troverà tutte le informazioni potenzialmente incriminanti da alcun punto. Ad esempio, non troverà le stringhe che codificano in set di caratteri multibyte come UTF-16 (usato da Windows e Java).

Se possibile, prova a separare il tuo programma da un programma dall'aspetto innocente che non genererà alcun flag e un piccolo file di testo contenente i dati sensibili. Distribuisci i due attraverso canali diversi. Ancora meglio, organizza per rendere il tuo programma un piccolo file di testo; idealmente, usa un linguaggio interpretato popolare e distribuisci solo la fonte del programma. Non distribuire la propria fonte di lavoro, tuttavia: distribuire una fonte sterilizzata senza commenti, nomi di variabili sensibili, ecc.

Quando distribuisci il tuo programma, potresti decidere di utilizzare un formato di archivio come zip o tar. Tieni presente che questi archivi memorizzano la data del file e alcuni formati di archivio (ad es. Tar) possono memorizzare un nome utente.

Sebbene non esista l'anonimato completo, penso che sia possibile ottenere un anonimato sufficientemente buono per uno sforzo di programmazione da un solo operatore. La tua più grande preoccupazione sarà la distribuzione. È molto più difficile rimanere anonimi quando si spostano byte, e ancor meno quando si inizia a interagire con le persone. L'utilizzo di Tor aiuta, ma è non è un punto magico , specialmente contro gli intercettori con risorse governative.

(In particolare, questa domanda può essere rintracciabile per te! Specialmente se vivi in un paese con un filtro governativo su tutti gli accessi a Internet, che possono correlare la tua attività Internet con le informazioni pubbliche sulle tue interazioni con Stack Exchange.)

    
risposta data 24.11.2011 - 00:08
fonte
2

Non so in alcun modo che qualcuno possa risalire su quale computer hai scritto il programma o su quale programma lo hai compilato.

Tuttavia, se vuoi essere più sicuro, una possibilità potrebbe essere quella di acquistare l'accesso alle risorse di elaborazione su qualche altro sistema (ad es. su Amazon EC2 o su un servizio di hosting privato virtuale) e compilare il tuo programma lì. Vorrei anche "togliere" il file binario, per rimuovere tutti i simboli di debug, per ogni evenienza. Se sei in grado di ottenere l'accesso in un modo che non può essere ricondotto a te, allora anche se c'è un modo pazzo per identificare il computer su cui è stato compilato, questo non sarà direttamente collegabile alla tua identità. Forse la gente qui può suggerire un modo per ottenere l'accesso alla shell remota (o per eseguire una macchina virtuale) su alcune macchine, senza rivelare la tua identità.

    
risposta data 24.11.2011 - 08:53
fonte

Leggi altre domande sui tag