PDA

View Full Version : [C#/.Net 2.0]Impedire uso applicazioni


RaouL_BennetH
23-09-2008, 12:40
Ciao a tutti :)

Vorrei dei consigli su come implementare un programma che mi consenta di non far eseguire su dei computer con windows xp alcuni programmi.

Un esempio potrebbe essere skype.

La mia idea era di lasciare in esecuzione un software con una sorta di "black list".

Tutto questo me lo risparmierei volentieri se ci fossero software (oltre al quasi 'innocuo' tool di ms gpedit) che oltre a non permettere l'utilizzo di certi programmi ne impediscano addirittura l'installazione.
N.B.: i software che permettono questo tipo di gestione che ho trovato in rete purtroppo costano una cifra....

Grazie a tutti in anticipo.

RaouL.

tomminno
23-09-2008, 13:23
Usare un utente non amministratore?

Mi sembra di ricordare che da qualche parte nel registro ci sia la possibilità di inserire una lista di programmi da non eseguire (mi sembra di ricordare che un virus qualche anno fa ci metteva Explorer o qualcosa del genere)
Per quanto riguarda i pacchetti di installazione sempre da registro è possibile disabilitare gli msi, niente è possibile a livello di sistema però nei confronti di altri tipi di installer.

Altrimenti devi scriverti un software che controlla i processi in esecuzione e termina un processo eventualmente presente anche sulla black list.

RaouL_BennetH
23-09-2008, 14:07
Usare un utente non amministratore?


Questo punto purtroppo non è possibile: per applicazioni tipo collegamenti bancari per eseguire operazioni viene richiesto un utente di tipo amministratore :muro:


Mi sembra di ricordare che da qualche parte nel registro ci sia la possibilità di inserire una lista di programmi da non eseguire (mi sembra di ricordare che un virus qualche anno fa ci metteva Explorer o qualcosa del genere)


Uhm.. questo potrebbe risolvere, dato che si tratterebbe di una manciatina di programmi tipo messenger, chat varie e skype.


Per quanto riguarda i pacchetti di installazione sempre da registro è possibile disabilitare gli msi, niente è possibile a livello di sistema però nei confronti di altri tipi di installer.

Altrimenti devi scriverti un software che controlla i processi in esecuzione e termina un processo eventualmente presente anche sulla black list.

sul grassetto: sapresti indicarmi qualche fonte per documentarmi ?

Grazie mille :)

RaouL.

tomminno
23-09-2008, 14:45
sul grassetto: sapresti indicarmi qualche fonte per documentarmi ?

Grazie mille :)

RaouL.

Qualcosa del genere dovrebbe funzionare:

using System.Diagnostics;


List<string> processToKill = new List<string>();
processToKill.Add("skype");
...
foreach(string processName in processToKill)
{
Process[] processes = Process.GetProcessesByName(processName);
foreach(Process process in processes)
{
process.Kill();
}
}

RaouL_BennetH
23-09-2008, 15:30
Grazie Tomminno :)

Il tuo codice di esempio funziona.

Ho solo un dubbio:

noto che funziona se le applicazioni sono già aperte, quindi io lancio il mio programma e le applicazioni vengono terminate.

Io invece dovrei fare questa supposizione:

Il pc viene avviato, il programma viene caricato mediante esecuzione automatica e dovrebbe impedirmi di aprire i programmi inseriti in black list.

Mi conviene utilizzare un timer secondo te per fare in modo che ogni tot secondi cerchi questi programmi in esecuzione ?

Grazie :)

RaouL.

tomminno
23-09-2008, 15:40
Grazie Tomminno :)

Il tuo codice di esempio funziona.

Ho solo un dubbio:

noto che funziona se le applicazioni sono già aperte, quindi io lancio il mio programma e le applicazioni vengono terminate.

Io invece dovrei fare questa supposizione:

Il pc viene avviato, il programma viene caricato mediante esecuzione automatica e dovrebbe impedirmi di aprire i programmi inseriti in black list.

Mi conviene utilizzare un timer secondo te per fare in modo che ogni tot secondi cerchi questi programmi in esecuzione ?

Grazie :)

RaouL.

Direi un timer ogni 5 /10 secondi può essere più che sufficiente, se proprio vuoi che sia fulmineo imposti meno di 1 secondo, non vedi nemmeno aprirsi l'applicativo.

RaouL_BennetH
23-09-2008, 16:06
Grazie mille per i preziosi suggerimenti :)

Questo è ciò a cui sono arrivato sino ad ora grazie a te:



using System.Diagnostics;

namespace TestBlackListedProcesses
{

public class KillProcess
{

private string[] forbiddenProcesses = {"skype", "solitaire", "sol", "msnmgr" };

public List<string> BlackList()
{
List<string> processToKill = new List<string>(forbiddenProcesses);
processToKill.AddRange(processToKill);
return processToKill;
}

public bool IsRunning()
{
foreach(string processName in BlackList())
{
Process[] p = Process.GetProcessesByName(processName);
foreach(Process pr in p)
{
pr.Kill();
System.Windows.Forms.MessageBox.Show("Il programma " + processName + " non può essere eseguito su questo computer e verrà chiuso");
return true;
}
}
return false;
}
}
}

71104
23-09-2008, 16:30
ammazza che soluzione pezzotta :asd:
e come fai ad impedire all'utente di togliere quel programma dall'esecuzione automatica o di terminarlo? :rolleyes:

tomminno
23-09-2008, 17:32
ammazza che soluzione pezzotta :asd:
e come fai ad impedire all'utente di togliere quel programma dall'esecuzione automatica o di terminarlo? :rolleyes:

Chiaramente la soluzione è subottima, difficilmente si può impedire di fare qualcosa ad un amministratore della macchina.

Comunque si può disabilitare il task manager, te lo voglio vedere l'utente medio a cercare la chiave di registro per riabilitare il task manager, quando ha regedit disabilitato pure lui.

E prima dell'obiezione, l'utente medio non usa Process Explorer o similari nè programmi alternativi a regedit.

C'è anche da dire che l'utilizzatore medio non sa quale programma causa la chiusura degli applicativi, la classica "Security through obscurity" ;)

Te cosa avresti fatto?

RaouL_BennetH
23-09-2008, 17:33
ammazza che soluzione pezzotta :asd:
e come fai ad impedire all'utente di togliere quel programma dall'esecuzione automatica o di terminarlo? :rolleyes:

:ave: :D

Guarda, senza nessun sarcasmo per evitare fraintendimenti, quando ho letto il tuo nick su un mio post mi sono sentito davvero onorato perchè ho pensato che finalmente avevo aperto un 3d che potesse (relativamente) interessarti !!

Eh lo so, giustamente anche io ci stavo pensando, ma devo accontentarmi di fare quello che al momento è al mio livello e che quindi posso fare.

C'è però una nota di consolazione:

Gli utenti destinatari di tale pezzotto, sono davvero messi male a livello di conoscenze informatiche e quindi, una volta fatto in modo che il piccolo programmino non è visibile almeno ne come form ne nella taskbar, ma solo ovviamente dal taskmanager, posso stare relativamente tranquillo.

Certo, mi piacerebbe sapere tu cosa faresti ma pensando che poi i tuoi suggerimenti sono rivolti ad un newbie, quindi magari iniziando con qualcosa di meno complicato .

Ci tengo molto (davvero) a sapere tu cosa faresti :)

Grazie.

RaouL.

variabilepippo
23-09-2008, 17:46
Io seguirei la strada delle Software Restriction Policies (http://technet.microsoft.com/en-us/magazine/cc510322.aspx), per una lunga serie di motivi è opportuno lavorare con utenti senza i privilegi da Amministratore. Per quei pochi programmi che li richiedono c'è sempre l'opzione "Esegui come amministratore" (e tutte le risorse sull'approccio LUA (http://technet.microsoft.com/en-us/library/bb456992.aspx)).

In alternativa, come punto di partenza, potresti leggere l'articolo API Spying Techniques for Windows 9x, NT and 2000 (http://www.internals.com/articles/apispy/apispy.htm), anche se dubito che tu possa creare in C# una soluzione efficace e sicura.

RaouL_BennetH
23-09-2008, 18:01
Io seguirei la strada delle Software Restriction Policies (http://technet.microsoft.com/en-us/magazine/cc510322.aspx), per una lunga serie di motivi è opportuno lavorare con utenti senza i privilegi da Amministratore. Per quei pochi programmi che li richiedono c'è sempre l'opzione "Esegui come amministratore" (e tutte le risorse sull'approccio LUA (http://technet.microsoft.com/en-us/library/bb456992.aspx)).


Se non sbaglio quell'articolo si riferisce a Vista.

Ad ogni modo, gli utenti, credo si imbestialirebbero a dover lanciare programmi senza semplicemente farci su doppio click.



In alternativa, come punto di partenza, potresti leggere l'articolo API Spying Techniques for Windows 9x, NT and 2000 (http://www.internals.com/articles/apispy/apispy.htm), anche se dubito che tu possa creare in C# una soluzione efficace e sicura.

L'avevo trovato anche io questo howto, ma per le mie attuali basi è troppo avanzato :)

RaouL.

variabilepippo
23-09-2008, 18:13
Se non sbaglio quell'articolo si riferisce a Vista.


No, l'approccio LUA è valido in generale e SLR esiste dal 2001 circa.


Ad ogni modo, gli utenti, credo si imbestialirebbero a dover lanciare programmi senza semplicemente farci su doppio click.


Ripeto: per quei rari programmi che richiedono i diritti da amministratore (di solito sono gli installer e software datati) basta inserire la password da amministatore. Per tutti gli altri non ci sono differenze. Considera che non uso un account di tipo Amministratore da anni e, a parte le installazioni e rarissime eccezioni, non ci sono differenze. Io mi imbestialirei molto di più se beccassi un virus a causa dei privilegi eccessivi (e di solito il malware lo fiuto con l'olfatto) di cui gode un account da Amministratore.


L'avevo trovato anche io questo howto, ma per le mie attuali basi è troppo avanzato


Allora procedi con il metodo "semplice ed insicuro". :)

71104
23-09-2008, 20:48
:ave: :D

Guarda, senza nessun sarcasmo per evitare fraintendimenti, quando ho letto il tuo nick su un mio post mi sono sentito davvero onorato perchè ho pensato che finalmente avevo aperto un 3d che potesse (relativamente) interessarti !! ... :mbe:

beh... in generale... i topic che mi interessano sono tutti quelli riguardanti Microsoft :p
inoltre quelli a cui rispondo sono quelli dove so dare una risposta (smettila di adorarmi, non sono mica onnisciente :asd: pensa che ho persino dei dubbi su come si scrive "onnisciente" :doh: ) e dove la risposta che darei io non è stata già data.

l'osservazione che ho fatto in questo caso ("e come fai ad impedire ecc. ecc.") a dire il vero mi sembrava enormemente banale... :rolleyes:



Eh lo so, giustamente anche io ci stavo pensando, ma devo accontentarmi di fare quello che al momento è al mio livello e che quindi posso fare.

C'è però una nota di consolazione: [...] finché un giorno non ti capita un niubbo più scafato degli altri che ha speso un 10 minuti su Google e ha trovato come fare per fregarti.



Certo, mi piacerebbe sapere tu cosa faresti ma pensando che poi i tuoi suggerimenti sono rivolti ad un newbie, quindi magari iniziando con qualcosa di meno complicato . ti dirò, è talmente semplice che non devi neanche programmare nulla :p

hai detto che l'account in uso dai suddetti niubbi deve essere del gruppo Administrators (maronneocarmine :mc: ), ma non hai detto che deve esserci un solo Administrator sulla macchina; se ci sono più Administrators basta che i programmi in black-list non siano installati per gli account che non ne devono fare uso, e se vedi che eseguendoli a mano dalla directory di installazione funzionano lo stesso allora togli i permessi di esecuzione e di diventare owner*, tutto là.

*va tolto il permesso di diventare owner perché l'owner di un oggetto può sempre cambiare i permessi di quell'oggetto, anche se gli è esplicitamente negato il permesso di cambiarli.

71104
23-09-2008, 20:54
C'è anche da dire che l'utilizzatore medio non sa quale programma causa la chiusura degli applicativi, la classica "Security through obscurity" ;) non si tratta di "Security by obscurity" (non c'è "obscurity", le maniere di aggirare la "protezione" sono ben documentate), ma di una forma di sicurezza ancora più debole: "Security by crass ignorance" :asd:

tomminno
24-09-2008, 09:29
non si tratta di "Security by obscurity" (non c'è "obscurity", le maniere di aggirare la "protezione" sono ben documentate), ma di una forma di sicurezza ancora più debole: "Security by crass ignorance" :asd:

La cosa ideale sarebbe usare le policy.
Te sai quali sono le api usate da gpedit?

RaouL_BennetH
24-09-2008, 11:58
Piccolo punto della situazione:

Documentandomi con i link da voi forniti ed utilizzando gpedit, sono riuscito a coprire quasi tutti i punti che mi ero prefissato e, come sottolineava 71104, senza programmare nulla ma.... vorrei tralasciare adesso il discorso di come usare gli strumenti di Windows perchè credo non siano pertinenti in questa sezione, semmai aprirò un 3d nella sezione apposita.

Little edit: "Con gpedit comunque non sono riuscito a capire come fare per non permettere di installare nuovi programmi oltre a quelli già esistenti"

Volendo continuare a fini didattici questa discussione, una possibile implementazione più corretta voi come la fareste?

Grazie :)

RaouL.

71104
24-09-2008, 21:05
Te sai quali sono le api usate da gpedit? veramente non ne ho idea; ho dato un'occhiata a quella console col dependency walker e di API a me sconosciute ne ho trovate solo alcune riguardanti Active Directory (del quale so quasi nulla); in più fa dei riferimenti a OLE32.DLL tramite i quali potrebbe ottenere delle interfacce COM che servono a settare quelle impostazioni, ma mi sa che si tratta di più di Active Directory.

ad ogni modo anche nel caso delle software restriction policies non c'è bisogno di programmare nulla, solo che mi sorge il dubbio su come fare per impedire ad un utente scafato di cambiarle.

RaouL_BennetH
25-09-2008, 10:04
allora, seguendo i vostri suggerimenti, ho usato solo il tool secpol e sono riuscito a fare in modo che non possano essere installati altri programmi (ovviamente sempre per un utente non 'scafato').

Resta però il fatto che possono eseguire i programmi già installati fra cui i vari solitari, messenger & Co a meno di non andare su ogni pc della rete, cercare il programma che serve e tramite le proprietà negare all'utente la possibilità di eseguirlo. Mi chiedevo quindi se c'è un modo per creare su una macchina le varie policy e poi creare un file, un setup, na cosa qualsiasi da installare su tutte le altre macchine.

RaouL.

P.S.: per il programmetto fatto fino ad ora, sono riuscito almeno a nasconderlo come processo dal task manager e dall'elenco applicazioni.