Newsgroup: it.comp.sicurezza.windows
Titolo: nascondere files su share Windows

Esiste un modo per nascondere un tipo di file (identificato tramite
estensione ad esempio) su una condivisione di un server Windows 2008?
Intendo una cosa simile al "veto files" di samba, che agisca solo a
livello di condivisione.
-- 
Ci sono 10 tipi di persone al mondo: quelle che capiscono il sistema binario
e quelle che non lo capiscono.

 livello di condivisione.
 
Non riesci con le ACL?
 
-- 
In God we trust. All others must bring data
W. E. Deming

Non riesci con le ACL?
Se si trattasse solo dei files già presenti in maniera stabile non
sarebbe un problema, mi basterebbe metterci le ACL giuste.
Solo che si tratta di files che vengono creati continuamente da un
programma, files *.log che un gestionale genera sul server e mette
nella radice della propria directory condivisa ai client.
Questi *.log contengono informazioni che i client non devono vedere.
Note:
1) Il percorso in cui il programma piazza i *.log è hard coded nel
programma, e per gli sviluppatori si prospetta una modifica da
pianificare (e ovviamente pagare).
2) La directory in questione deve essere accessibile in lettura e
scrittura da parte dei client, e idem i files in essa creati.
Quindi un qualcosa come un "veto files = *.log" sarebbe stato
perfetto.
Un'ipotesi (suggerita dall'assistenza del gestionale) è quella di
spostare i files appena creati, dato che vengono creati da un comando
contenuto in un *.bat).
Rimane il problema che per un breve tempo rimangono, e poi dovrei
capire se c'è qualche eccezione in cui il "move" fallisce.


 capire se c'è qualche eccezione in cui il "move" fallisce.
 
Se puoi modificare il .bat che li crea o crearci un wrapper fai quello
che vuoi, anche crearli in un'altra directory.


che vuoi, anche crearli in un'altra directory.
 
No, purtroppo.
Il bat non li crea direttamente, lancia semplicemente un eseguibile
con alcuni parametri. E' quell'eseguibile che, senza possibilità di
modifica, crea i files in quella directory.
 
E' stato proposto di aggiungere un "move *.log" in fondo al bat, così
un attimo dopo che i files vengono creati gli stessi  vengono
spostati.
Personalmente preferirei che non fossero visibili, però non nutro
molte speranze sulla possibilità di riuscire in tal senso.


Questi *.log contengono informazioni che i client non devono vedere.
 
Lasciando da parte la facile ironia sui programmatori del gestionale -
rischierei la revoca della tessera del WWF - mi sembra che la cosa più
efficiente (siamo sinceri - meno merdajola) sia usare le API di notify
di Windows. Qui c'e' un esempio piuttosto buono:
 
http://msdn.microsoft.com/en-us/library/aa365261%28v=VS.85%29.aspx
 
 
E all'interno della funzione RefreshDirectory(), metti del codice che,
se trova dei file .LOG, li "secura" (muoverli non so... si rischia che
il gestionale ti s'imballi. Le handle di Windows non sono gli inode di
Unix, e la notify arriva "upon create", cioe' prima, o in concorrenza,
con le scritture sul file stesso).
 
(Eventualmente quando esamini i .LOG, quelli più vecchi di tot li puoi
muovere in una dir sicura, cosi' il ciclo di controllo non diventa una
carriola O(N)).
 
Leonardo
 
-- 
Surstangas via akcipitr', la cxeval' fojnumas nur:
Jen vigla damo en brakum', kaj vi pensas pri forkur'?
Do li turnis sin, kaj turnis sin, kaj ekdormis sen singard';
Kaj lin apudis je l' vekigx, soldatoj kaj Barnard'.

modifica, crea i files in quella directory.
 
Hmmm :-)
 
Quant'e' grosso l'eseguibile in questione, e sai in che linguaggio
sia stato compilato?
 
Leonardo no, cosi', pour parler


 
 
Così...tanto per dare un'occhiata alla tabella stringhe :)


 molte speranze sulla possibilità di riuscire in tal senso.
 
Mah potresti anche lanciare, prima dell'eseguibile, uno script che
monitora la directory per la presenza di file *.log e li muove in
un'altra directory appena creati.
Alla fine del batch lo killi e via.
Sennò, come diceva Leonardo si potrebbe vedere di smanaccare
nell'eseguibile, però non mi piace molto l'idea.


Così...tanto per dare un'occhiata alla tabella stringhe :)
 
Chi, io? Questi sospetti mi offendono, sì, mi offendono!
 
Diamine, il reverse engineering è illegale. Ho l'aria di uno che
farebbe una cosa del genere? 8-O
 
Leonardo "fa' che non googlino... fa' che non googlino..."


 Così...tanto per dare un'occhiata alla tabella stringhe :)
 
http://www.angusj.com/resourcehacker/
 
 
http://frhed.sourceforge.net/en/
 
 
/me firulì firulà :D
 
 


http://www.youtube.com/watch?v=qxX1_yJvzGY
 



http://www.youtube.com/watch?v=qxX1_yJvzGY
 
 
/SBAM!
 
Leonardo che se la rivende


 
http://www.youtube.com/watch?v=qxX1_yJvzGY
ROTFL !!!!!
delinGuente, almeno avverti, ora mi tocca ripulire monitor e tastiera !

 nell'eseguibile, però non mi piace molto l'idea.
 
Però... se è quell'eseguibile che crea i logs, in *teoria* durante
la creazione gli stessi potrebbero anche essere aperti in modo
"esclusivo" per cui non sarebbero accessibili agli utenti, quindi
l'eventuale "move" al termine del batch lascerebbe soltanto una
finestra temporare brevissima quindi alla fine potrebbe anche
essere una soluzione accettabile ... l'alternativa è quella di usare
uno script/eseguibile separato che nel momento in cui un ".log"
viene creato, ne cambi gli attributi impostandolo come "hidden"
 
 

 viene creato, ne cambi gli attributi impostandolo come "hidden"
 
Infatti io pensavo di usare il .bat non per spostare i .log, ma per 
renderli "hidden".
Pero' mi sorge il dubbio di cosa succeda se l'esecuzione successiva crea 
un nuovo .log con lo stesso nome ...
Mentre se crea log con nomi diversi alla lunga si ottiene un 
"intasamento silenzioso".
No, mi autoboccio l'idea.
Aggiungo un voto al "move".
 
M.
-- 
Nessun Bit e' stato maltrattato o ucciso
per scrivere questo messaggio.

 viene creato, ne cambi gli attributi impostandolo come "hidden"
Gli hidden/system li vedi tranquillamente...


 Gli hidden/system li vedi tranquillamente...
 
Vero, però la visualizzazione non è abilitata di default, inoltre si
potrebbero mettere insieme entrambi gli approcci, ossia, uno
script che alla *creazione* di un ".log" ne cambi gli attributi in
modo da impostare l'attributo "hidden" ed inoltre la modifica
del batch che avvia la generazione dei logs, aggiungendo un
"move" al termine; in tal modo un eventuale utente vedrebbe
il ".log" solo per una frazione di secondo, dopodichè il file
diverrebbe nascosto e verrebbe infine spostato altrove
 
 

con le scritture sul file stesso).
Quindi creare un programma ad hoc che stia in esecuzione continua a
monitorare la directory?
Non sono pratico di programmazione e mi porterebbe via un sacco di
tempo, a questo punto converrebbe far fare la modifica a quelli del
gestionale.


tempo
 
Ti basta ricompilare il programma d'esempio :-)
 
D'altra parte, se il programma gestionale gira con permessi diversi
rispetto all'utente che potrebbe accedere ai dati... potresti anche
fare un ciclo batch che securi tutti i .LOG alla cieca, lasciandoli
in R/W per il gestionale solo, con un secondo di pausa fra ciascuna
scansione.
 
Consumi parecchie risorse, ma dovrebbe funzionare.


 diverrebbe nascosto e verrebbe infine spostato altrove
 
Forse con le group policies si potrebbero escludere gli hidden in
maniera più sicura.


viene creato, ne cambi gli attributi impostandolo come "hidden"
 
L'attributo hidden penso che non abbia molta rilevanza perché fa leva
sulle impostazioni del client.
Tieni presente che non č una directory in cui gli utenti abitualmente
vanno a sfogliare, quindi non c'č il problema che a uno gli spunta un
file sotto il naso e per errore ci clicca sopra. Deve essere condivisa
in lettura e scrittura principalmente per il software che gira lato
client.


gestionale.
 
Fai uno script in Vbs che controlli la directory ogni tot secondi, in pratica lo
lasci sempre in esecuzione e nel loop ci metti un
 
 Wscript.Sleep(5000) per fargli fare un giro ogni 5 secondi.
 
Puoi prendere spunto da questo thread dove c'era qualcuno con problemi simili ai
tuoi:
 
http://goo.gl/TQUdM
 
  o
http://groups.google.com/group/it.comp.os.win.xp/browse_frm/thread/3919fc0c9893d90b/624066973e402345?q&pli=1
 
 
 
 
--
ciao
  Stefano

  Wscript.Sleep(5000) per fargli fare un giro ogni 5 secondi.
 
Naaah.... che porcheria :)
 
http://groups.google.com/group/microsoft.public.windows.server.scripting/browse_thread/thread/2110a4d66d6333a4
 
 
 
 


http://groups.google.com/group/microsoft.public.windows.server.scripting/browse_thread/thread/2110a4d66d6333a4
 
 
Già che ci siamo
 
http://blogs.technet.com/b/heyscriptingguy/archive/2005/04/04/how-can-i-monitor-for-different-types-of-events-with-just-one-script.aspx
 
 
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394527%28v=vs.85%29.aspx
 
 
considera che i WMI events permettono di effettuare il
monitoring di un tot di cose, ad esempio dell'inserzione
di un device in una porta USB... ed altro
 
 

di un device in una porta USB... ed altro
 
Conosco le WMI, le ho gia' usate in VB proprio per sapere a quale numero porta
COM veniva attribuito ad un convertitore USB-RS232
 
http://groups.google.com/group/it.comp.lang.visual-basic/msg/7f880a0961aa51ad?dmode=source
 
 
ma ci ho messo parecchio tempo, le WMI sono una cosa abbastanza ostica e nemmeno
troppo documentata, per cui in un caso dove devo semplicemente spostare dei
files averi usato lo stesso lo script che ho proposto, anche se ammetto che la
tua soluzione e' piu' elegante.
 
 
 
--
ciao
  Stefano

 ostica e nemmeno troppo documentata
come no ?!?
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394582%28v=vs.85%29.aspx
http://www.microsoft.com/download/en/details.aspx?id=24045
http://technet.microsoft.com/en-us/library/ee692942.aspx
e trovi altre tonnellate di documentazione sulla rete :) !

> e trovi altre tonnellate di documentazione sulla rete :) !
 
Esempio a caso
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\CIMV2\Applications\Avira_AntiVir")
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Guard",,48)
For Each objItem in colItems
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Guard instance"
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Identifier: " & objItem.Identifier
    Wscript.Echo "Last_Detection: " & objItem.Last_Detection
    Wscript.Echo "Last_File_detected: " & objItem.Last_File_detected
    Wscript.Echo "Last_File_scanned: " & objItem.Last_File_scanned
    Wscript.Echo "Module_Name: " & objItem.Module_Name
    Wscript.Echo "Number_of_Files_detected: " &
objItem.Number_of_Files_detected
    Wscript.Echo "Number_of_Files_quarantine: " &
objItem.Number_of_Files_quarantine
    Wscript.Echo "Number_of_Files_removed: " &
objItem.Number_of_Files_removed
    Wscript.Echo "Number_of_Files_renamed: " &
objItem.Number_of_Files_renamed
    Wscript.Echo "Number_of_Files_repaired: " &
objItem.Number_of_Files_repaired
    Wscript.Echo "Number_of_Files_scanned: " &
objItem.Number_of_Files_scanned
    Wscript.Echo "Number_of_Files_suspicious: " &
objItem.Number_of_Files_suspicious
    Wscript.Echo "Status: " & objItem.Status
Next
 
come vedi, anche Avira espone oggetti/metodi/eventi su WMI :D
 
 

 maniera piů sicura.
 
O magari, avendo a portata di mano un compilatore C ed il DDK
basterebbe modificare questo codice
 
http://www.codeproject.com/KB/system/fs-filter-driver-tutorial.aspx
 
 
:)
 
 


Come ho fatto a non pensarci prima? :)
Si potrebbe anche mettere su un server linux ed installare il gestionale
sulla share samba. ;D


 gestionale sulla share samba. ;D
 
ESATTO !!
 
Il signore vince una bambolina :) !
 
 
 

programma si pianta.
Il file *.log viene creato all'inizio, e se l'eseguibile si pianta
(oppure fa un popup da cliccare, insomma non arriva in fondo) il log
rimane lì bello in vista con la prima riga (che poi è quella
incriminata).
Non è bloccato, è perfettamente apribile quindi il semplice "move" è
troppo poco sicuro.
Proverò a guardare gli script proposti sul thread.
