Newsgroup: it.comp.sicurezza.varie
Titolo: cancellare e sovrascrivere

So che e' possibile recuperare dati anche dopo una sovrascrittura multipla.
A che livello sono le autorita' italiane con queste tecnologie ?
Un recupero e' possibile anche "keyboard level" cioe' via software o e'
necessario smontare l' hard disk ?
che giudizio date sul vecchio programma  wipe.exe  delle nowhere utility ?  : ) 
chi mi puo' consigliare un programmino di sovrascrittura affidabile per il dos ?
Il file di swap di win95 che nome ha ??

Il file di swap di win95 che nome ha ??
win386.swp, mi pare.
Leonardo
".signature": bad command or file name

avvenuta qualche anno fa :-) }
e spara, dai! ;-)

e spara, dai! ;-)
Per una serie di motivi mi sono dovuto rivolgere alla OnTrack, da parte
di certa gente che aveva gli indirizzi ma non parlava inglese. Il tizio
- dopo aver dato prova di non capire una beatissima mazza - a me che in
sostanza stavo chiedendo aiuto, mi fa:
	"Ma lei e' italiano?"
	"Si'"
	"Ah, senta, ci potrebbe aiutare a contattare una agenzia
	 pubblicitaria in Italia?"
	"Per che fare?" (stavo telefonando _IO_, nota)
	"Abbiamo saputo che da voi c'e' stata un'alluvione, roba
	 very grave, siamo molto condolenti..."
	"Si', si', al sodo..."
	"...e pensavamo che con tutta questa alluvione, morti, e
	 dispersi, ci saranno un sacco di hard disks danneggiati
	 e volevamo farci conoscere, per..."
	"Mav'v'f'mmocc''ch't'mmuort!" (*)
Leonardo
(*) dallo swahili "possano i tuoi antenati avere sogni gustosi"


(*) dallo swahili "possano i tuoi antenati avere sogni gustosi"
Non credo che sia questa la traduzione corretta ;-)
Bye Krmel che in realtà quella corretta si chiama "necrofilia"
Microsoft Outlook Express: cosa vuoi postare postare postare postare
oggi?

 very grave, siamo molto condolenti..."
   e dai!!.. perche' non ti sei fatto dare il suo nominativo.
   Ma non te ne sei accorto??.. era l'autore di Globallink! ;-)


fai bene ad utilizzare il dos , o cmq un so senza swap memory , perchč
dovresti ripulire anche quella ad ogni riavvio.

curc...@softhome.net
 wrote:
 >fa (4 o 5 mesi ) c'è stato un thread in proposito,
 >sembra che dopo 3 riscritture non sia possibile
 >recuperare i dati ( almeno non con attrezzature convenzionali)
Un microscopio elettronico e` abbastanza convenzionale in caso di
necessita`.
 >ma il fatto che NSA bruci i supporti magnetici allora ci deve
 >fare pensare
Tutte le memorie di massa che hanno visto dati classified di qualsiasi
parte del governo USA.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *

Prima che iniziasse il thread avevo ipotizzato una soluzione (visto
che tra pochi giorni dovro' cambiare comp), ma da quanto ho letto
pare non ci siano speranze di togliere *veramente* tutto.
Gradirei delucidazioni sul perche' non dovrebbe funzionare.
Quello che avevo pensato era questo:
(es. devo radere al suolo il file affarimiei.c)
              c:\> del affarimiei.c
dopodiche' con un programma stupido in c del tipo:
	while (il disco non e' pieno al 100%)
		putc('p');
Bonf
 

nob...@nowhere.world (Bonf) wrote:

Un algoritmo assassino (il programma NON si compila altro che in Turbo C
1.5/2.0 sotto DOS, ma e' intuibile come "portarlo") e' il seguente:
#include <dos.h>
#include <small.h>
#include <stdio.h>
#include <io.h>
#include <mem.h>
#include <time.h>
#define BUFFERSIZE      0x4000
extern int errno;
struct ffblk ffblk;
int handle,zzzz;
long size;
int fini;
struct ftime TimeSet={0,0,0,0,0,0};
char *buffer;
void main (int argc, char **argv)
{
	buffer=(char *)malloc(BUFFERSIZE);
	if (argc==1)
        {
		_DX=(unsigned)"Syntax: DELETE filespec(s)\r\n$";
            _AH=0x9;
            __int__(0x21);
            return;
	}
	while(*++argv)
	{
		fini=findfirst(*argv,&ffblk,0xFF);
		errno=0;
		while(!fini && !errno)
		{
			zzzz=3;
			if (_chmod(ffblk.ff_name,1,0x20)==-1)
			{
				_DX=(unsigned)"Cannot access file\r\n$";
				_AH=9;
				__int__(0x21);
				return;
			}
			*buffer=0;
			while(zzzz--)
			{
				size=BUFFERSIZE;
				handle=!*buffer;
				while(size--)
					buffer[size]=handle;
size=filelength(handle=_open(ffblk.ff_name,O_RDWR));
				while(size)
size-=write(handle,buffer,(size>BUFFERSIZE)? BUFFERSIZE: (int)size);
				close(handle);
			}
			chsize(handle=_open(ffblk.ff_name,O_RDWR),0);
			setftime(handle,&TimeSet);
			_close(handle);
			rename(ffblk.ff_name,"$");
			unlink("$");
			errno=0;
			fini=findnext(&ffblk);
		}
	}
}
Dopo, il file non lo riprende piu' neanche SALVAGE su Netware. Sotto DOS,
e' come se il file non fosse mai esistito. Idem per Norton Protect e quel
genere di roba li'.
Sotto Linux e' possibile apportare alcune modifiche <grin> che consentono
di riprendere il file lo stesso.
Leonardo


di riprendere il file lo stesso.
Come? Cosa?


e sovrascrivendo affariemiei.c con un file di nome/lunghezza/data
uguali, pieno di caratteri = 255?
ciao,
Nebbia

Come? Cosa?
Varie possibilita'. Modificare le librerie - oppure modificare (neanche
troppo) la undelete-patch che credo sia disponibile per kernel 2.0.3x+.
Pero' solo se il sistema operativo e' Linux. Netware, OS/2, Windows non
lasciano molte strade aperte. E inoltre si deve presumere che l'utility
non si ponga come obiettivo quello di fregare il kernel, perche' se no,
probabilmente, ci si puo' riuscire comunque (*).
Leonardo
(*) O si puo' indurre il kernel a sprecare un'immensita' di risorse :-)


".signature": bad command or file name
Bonf



Lo devi fare molte volte, e sarebbe meglio che i dati che scrivi siano piu'
random possibile: ogni scrittura sullo strato sensibile, riallinea i
magnetini a seconda dei caratteri che scrivi, ma per il fatto che non esiste
ne' la testina perfetta, ne' lo strato magnetico perfetto, l'allineamento
soffre sempre di imperfezioni che guarda caso, tendono al dato precedente.
Da questo, facendo una differenza per battimento del segnale che leggi con
quello teorico che dovresti leggere, puoi risalire al contenuto precedente.
Non sono certo cose che si possono fare in cantina, ma si possono fare, se
proprio ne vale la pena.
E se qualcuno che non bada a spese e al tempo che ci si puo' mettere, si
incaponisce, le fa :-)
Ciao.roberto 
-- 
Save our planet!
Save wildlife;
For your E-MAIL use only recycled Bytes !!
roberto poggi  
rpo...@usa.net

soffre sempre di imperfezioni che guarda caso, tendono al dato precedente.
Ok ... mi mancava questo passaggio... ero convinto che i "magnetini"
si riallineassero tutti (percio' pensavo che scrivendo 255=tutti 1 il
tutto andasse a posto).
Quindi se ho ben capito (anche se sto andando un po' OT) scrivendo A
(ossia per semplicita' 1000001=65) il primo 1 non e' un  unico
"magnetino" ma un gruppo di essi, se la maggioranza di questi vale "1"
allora il bit=1
e' cosi' (circa?)
grazie
,ciao,
Nebbia
*togliete basta. per rispondere*

e' cosi' (circa?)
Esatto. Se sovrascrivi quell'1 con una sequenza, ottieni:
vergine: livello 0
1:		0.9
0:		0
11:		0.99
10:		0.09
01:		0.9
00:		0
111:		0.999
110:		0.099
001:		0.9
000:		0
...come vedi ci sono delle ambiguita': il livello 0.9 e' tipico del fatto
che l'ultimo bit scritto e' un 1, e prima c'era una sequenza ininterrotta
di zeri. Pero' anche cosi' tu sai che tre letture fa c'era uno zero, dato
che le quattro letture tipiche del terzo livello di riscrittura sono, fra
loro, diverse:
Il problema e' che le testine magnetiche sono fatte per dirti 1 se vedono
qualsiasi cosa sia superiore a 0.5; e 0, altrimenti. Usando sensori molto
sensibili pero' puoi "leggere" la storia di quel mezzo magnetico.
Viene in aiuto del marpione cancella-tutto la Legge del Caos: nel tempo i
livelli magnetici si alterano, tendendo a 0.5. Quindi, se leggi 0.9, puo'
essere:
	0.999 vecchio di un anno
	0.9   vecchio di una settimana
e la differenza C'E', perche' nel primo caso il dato originale era un 1 e
nel secondo caso era uno zero. E quindi se non sai anche il tempo passato
fra le cancellazioni, la lettura non ti aiuta.
Naturalmente, un dato "statistico" lo ottieni comunque, e da li', andando
a forza bruta, sapendo (piu' o m**o) cos* c'*ra scr*tto rie*ci a *isalire
al t*st* orig**a*e... che se era cifrato, sono moccoli a catapetere e non
ripigli niente comunque (*)...
Leonardo
(*) avendo tempo e soldi, pero', si'


e' cosi' (circa?)
Circa, in realta' le cose si complicano, per aumentare la densita' di
registrazione, si usano tecniche miste fase/valore, in ogni caso, il
concetto e' quello: dal rumore che resta da una scrittura, si possono
ricavare i dati precedentemente contenuti.
Come altri dicevano, se organizzazioni che dovrebbero saperne piu' di noi,
sulla sicurezza, bruciano senza ecccezioni i supporti magnetici che hanno
contenuto dati *sensibili* , penso che non sia solo perche' il capo soffre
di paranoia.


".signature": bad command or file name
Bonf

una funzione di stampa meno "assemblica" ;-)
Cari Bonf e dott.Serni,io sono un po' troppo asino per fare il porting
per gcc ,ma ho linux il quale contiene in se' il gcc.Potreste postare
il porting?


Ok .. ancora una volta mi sono reso conto che non ne so un ca**o!
(ed alla storia "io so perche' so di non sapere" non ci credo..
quindi...)
bene...iniziero' ad usare supporti removibili (male che vada si
possono sempre bruciare e dopo di che ..come direbbe LS ... ti caa
l'orso...)


Con poche piccole modifiche e' possibile compilare
il programma di Leonardo anche con DJGPP :
 1)   #include <dir.h>
 2)   eliminare #include <small.h>
 3)   sostituire la stampa tramite int 0x21 con puts()
_______________________________________________________
Bonf	

il disco e' comunque possibile recuperare i vecchi dati ?
Con attrezzi apposta e $99, si' ($=lira sterlina, circa 2600 lire).
Ma non e' garantito il recupero totale.


il porting?
Sotto Linux e' sufficiente (questo cancella un solo file; si puo' pero'
modificarlo usando shift; "man bash" per dettagli)
#!/bin/sh
if [ "$1" = "" ]; then
	echo "Syntax: rmrm filename"
	exit 0
fi
if [ ! -w $1 ]; then
	echo "The file is not writable to. Stop."
	exit 0
fi
# For SLOW, SECURE deletion use /dev/random
# else /dev/zero should do.
# FAST semi-secure: once /dev/random, twice /dev/zero in this order.
# Rewrite the file
for i in 1 2 3; do
   dd count=1 bs=$( wc -c < $1 ) if=/dev/zero of=$1 2>/dev/null
done
# Destroy the file
rm -f $1
exit 0



Ho postato un porting per djgpp (gcc per dos) ma non lo vedo
(Mclink in questi giorni sta facendo un po' di casino),
se ho tempo provero' a portarlo su linux (se non altro per
imparare qualcosa), per ora vedo che Leonardo ha gia'
mandato un sostituto.
Bonf