View Full Version : [Win32] Ridurre privilegi di un servizio
tomminno
26-02-2007, 22:46
Ho un servizio che dovrebbe scrivere nella sezione current user del registro di sistema (dovrebbe disabilitare il task manager e il regedit), come faccio a ridurre i privilegi del servizio per consentire di scrivere in quella sezione?
Ho un servizio che dovrebbe scrivere nella sezione current user del registro di sistema (dovrebbe disabilitare il task manager e il regedit), come faccio a ridurre i privilegi del servizio per consentire di scrivere in quella sezione?Guarda ... le funzioni da usare credo che siano LogonUser e ImpersonateLoggedOnUser. Ma non ti so dire di più. Le API Win32 dedicate alla security sono le più .... incasinate di tutte! :rolleyes:
tomminno
27-02-2007, 15:03
Guarda ... le funzioni da usare credo che siano LogonUser e ImpersonateLoggedOnUser. Ma non ti so dire di più. Le API Win32 dedicate alla security sono le più .... incasinate di tutte! :rolleyes:
Ho trovato su un forum un metodo per ottenere un token a partire solo dall'username per mezzo di ZwCreateToken, ma è tutto da verificare visto che nel codice c'è un bel GetCurrentProcess.
Da più parti ho letto che l'unico modo per farlo sia chiedere nome utente e password.
Ho trovato su un forum un metodo per ottenere un token a partire solo dall'username, ma è tutto da verificare visto che nel codice c'è un bel GetCurrentProcess.
Da più parti ho letto che l'unico modo per farlo sia chiedere nome utente e password.Se vai a vedere infatti LogonUser() prende in input un nome utente/dominio/password.
Comunque io ho già provato ad usare LogonUser ma senza successo. Mi ritorna errore 1314 (ERROR_PRIVILEGE_NOT_HELD). Sicuramente ho sbagliato io ... non ho fatto qualcosa che si doveva fare prima della chiamata a LogonUser o cose del genere. Ma non so dire di più.
lascia perdere la creazione di un token nuovo di zecca: per farlo è necessario contattare l'LSA, ti incasina tutto inutilmente. piuttosto io vedrei di aprire il token già esistente e togliergli permessi e privilegi. guarda la funzione CreateRestrictedToken (http://msdn2.microsoft.com/en-us/library/aa446583.aspx). è semplicissima da usare, e a quel punto diventa tutta una questione di configurare i dovuti restricting SIDs e deny-only SIDs da "Gestione Computer" ;)
trovi tutte le info necessarie alla pagina di CreateRestrictedToken, o anche qua (http://msdn2.microsoft.com/en-us/library/aa379316.aspx).
tomminno
27-02-2007, 22:01
Se vai a vedere infatti LogonUser() prende in input un nome utente/dominio/password.
Comunque io ho già provato ad usare LogonUser ma senza successo. Mi ritorna errore 1314 (ERROR_PRIVILEGE_NOT_HELD). Sicuramente ho sbagliato io ... non ho fatto qualcosa che si doveva fare prima della chiamata a LogonUser o cose del genere. Ma non so dire di più.
Ma io mica posso chiedere le credenziali ad un utente che cerca di compiere operazioni non desiderate?
Il programma serve per controllare da remoto i computer delle aule scolastiche dove nessuno ci capisce niente di computer, per cui è probabile che gli studenti abbiano pure un account amministratore :muro:
tomminno
27-02-2007, 22:17
lascia perdere la creazione di un token nuovo di zecca: per farlo è necessario contattare l'LSA, ti incasina tutto inutilmente. piuttosto io vedrei di aprire il token già esistente e togliergli permessi e privilegi. guarda la funzione CreateRestrictedToken (http://msdn2.microsoft.com/en-us/library/aa446583.aspx). è semplicissima da usare, e a quel punto diventa tutta una questione di configurare i dovuti restricting SIDs e deny-only SIDs da "Gestione Computer" ;)
trovi tutte le info necessarie alla pagina di CreateRestrictedToken, o anche qua (http://msdn2.microsoft.com/en-us/library/aa379316.aspx).
Considera che io devo scrivere in HKCU a partire da un servizio e che non ho certamente accesso alla configurazione della macchina.
Proverò con CreateRestrictedToken, ma da come l'hai introdotta non so se possa fare al caso mio.
infatti non ho mica capito il discorso: perché devi ridurre i privilegi (supponendo che intendessi in realtà permessi) ad un processo affinché esso abbia accesso ad un oggetto protetto?
Il programma serve per controllare da remoto i computer delle aule scolastiche dove nessuno ci capisce niente di computer, per cui è probabile che gli studenti abbiano pure un account amministratore :muro: aaaah aspetta adesso credo d'aver capito: vuoi ridurre i tuoi permessi per essere sicuro di non scrivere se non ti è concesso... ho capito bene? in tal caso si, la CreateRestrictedToken dovrebbe fare al caso tuo; potresti in teoria anche lavorare di autorizzazione (piuttosto che di autenticazione) usando la AccessCheck (http://msdn2.microsoft.com/en-us/library/aa374815.aspx), non so se sia più semplice questa strada o l'altra.
tomminno
28-02-2007, 10:42
aaaah aspetta adesso credo d'aver capito: vuoi ridurre i tuoi permessi per essere sicuro di non scrivere se non ti è concesso... ho capito bene? in tal caso si, la CreateRestrictedToken dovrebbe fare al caso tuo; potresti in teoria anche lavorare di autorizzazione (piuttosto che di autenticazione) usando la AccessCheck (http://msdn2.microsoft.com/en-us/library/aa374815.aspx), non so se sia più semplice questa strada o l'altra.
No il problema è che un servizio non può scrivere nella sezione del registro dedicata al current user e io devo disabilitare delle funzioni di Windows, e per farlo devo accedere a quella parte del registro.
Non voglio limitare le mie possibilità di eseguire operazioni ma aumentarle :)
In pratica io ho creato un servizio che lancia il mio programma che quindi lavora con privilegi SYSTEM, ma queste operazioni richiedono che da SYSTEM passi al livello dell'utente loggato.
No il problema è che un servizio non può scrivere nella sezione del registro dedicata al current user e io devo disabilitare delle funzioni di Windows, e per farlo devo accedere a quella parte del registro.
Non voglio limitare le mie possibilità di eseguire operazioni ma aumentarle :)
In pratica io ho creato un servizio che lancia il mio programma che quindi lavora con privilegi SYSTEM, ma queste operazioni richiedono che da SYSTEM passi al livello dell'utente loggato. 1) e perché allora il thread si intitola "ridurre i privilegi di un servizio"? :mbe:
2) SYSTEM può accedere nel registro ai profili di qualsiasi utente, quindi inutile che ti logghi come un utente per accedere ad HKEY_CURRENT_USER quando puoi accedere direttamente a HKEY_USERS/<SID>
tomminno
28-02-2007, 20:54
1) e perché allora il thread si intitola "ridurre i privilegi di un servizio"? :mbe:
Per quello che intendo io passare da un account SYSTEM a uno utente è una riduzione dei privilegi, magari sbaglio terminologia :)
2) SYSTEM può accedere nel registro ai profili di qualsiasi utente, quindi inutile che ti logghi come un utente per accedere ad HKEY_CURRENT_USER quando puoi accedere direttamente a HKEY_USERS/<SID>
Effettivamente non ci avevo pensato :doh:
Ma io mica posso chiedere le credenziali ad un utente che cerca di compiere operazioni non desiderate?
Il programma serve per controllare da remoto i computer delle aule scolastiche dove nessuno ci capisce niente di computer, per cui è probabile che gli studenti abbiano pure un account amministratore :muro:
Quella che cerchi probabilmente non e' la soluzione che ti serve allora. Allo studente bastera' far partire il pc in modalita' provvisoria, disabilitare il servizio e il gioco e' fatto. Molto meglio usare le group policy, e togliere l'accesso a tutto quello che non e' funzionale all'uso didattico, task manager e regedit compresi, ma non solo. Con un po' di attenzione si riesce ad impedire di fare del male anche ad un amministratore. (e non sai la soddisfazione che si prova nel vedere un utente a cui e' stato tolto il menu file, l'accesso ai dischi e pure l'uso del tasto destro del mouse :p )
Fermo restando che la prima cosa da fare e' non lasciare l'accesso di amministratore agli studenti, non fosse altro perche' poi le conseguenze di qualsiasi malefatta se la becca il responsabile del laboratorio.
No il problema è che un servizio non può scrivere nella sezione del registro dedicata al current user e io devo disabilitare delle funzioni di Windows, e per farlo devo accedere a quella parte del registro.
Non voglio limitare le mie possibilità di eseguire operazioni ma aumentarle :)
Non funziona. Per un servizio non esiste il concetto di "current user", in quanto potrebbe non essercene nessuno (nessun utente loggato) oppure piu' di uno (server terminal, oppure XP con piu' utenti attivi). Puoi impostare il servizio perche' possa interagire col desktop ma in realta' questo ti vincola ad interagire con l'utente console e basta (quello con id 0), che, se non ricordo male, e' stato proprio per questo tolto dalle piu' recenti versioni di windows (Vista di sicuro, forse XP).
Il modo "ufficiale" perche un'utente possa interagire con un servizio e' tramite un processo che giri nella sessione dell'utente ed interagisca col servizio. E' il motivo perche' ti trovi nella tray bar una inconcina di windows update, quella dello spooler di stampa, etc. Servono da tramite per i servizi di sistema.
A questo punto pero' per impedire che l'utente pialli quel programmino devi cominciare ad usare tecniche da spyware :D, per cui rimango dell'idea che la soluzione vera sia quella delle group policies.
E in ogni caso anche se opti per il servizio che invece che il solo utente corrente vada a rovistare tra i vari utenti, ti trovi col problema che, se non disabiliti anche l'accesso all'editor delle policy di gruppo, un utente puo' forzare l'abilitazione del task manager nelle policy, che al login dell'utente andranno a sovrapporsi alle impostazioni del registro... ancora una volta rischi di dover faticare per una soluzione con molte possibili falle.
tomminno
28-02-2007, 23:00
Quella che cerchi probabilmente non e' la soluzione che ti serve allora. Allo studente bastera' far partire il pc in modalita' provvisoria, disabilitare il servizio e il gioco e' fatto. Molto meglio usare le group policy, e togliere l'accesso a tutto quello che non e' funzionale all'uso didattico, task manager e regedit compresi, ma non solo. Con un po' di attenzione si riesce ad impedire di fare del male anche ad un amministratore. (e non sai la soddisfazione che si prova nel vedere un utente a cui e' stato tolto il menu file, l'accesso ai dischi e pure l'uso del tasto destro del mouse :p )
Fermo restando che la prima cosa da fare e' non lasciare l'accesso di amministratore agli studenti, non fosse altro perche' poi le conseguenze di qualsiasi malefatta se la becca il responsabile del laboratorio.
Ma il programma non prevede anche la configurazione degli utenti della LAN scolastica :)
L'ambiente in cui andrà installato questo software è di quelli più beceri che si possa pensare (utenti? che cosa sono? :confused: ), mi è capitato di vedere aule dove agli studenti era dato account di amministratore e chiaramente il "tecnico" doveva formattare tutte le settimane (quando non veniva depredato l'hardware della macchina).
Serve proprio perchè nessuno ci capisce niente e quindi è comodo avere un software che da remoto ti consente di disabilitare programmi o funzionalità di Windows. E' un palliativo, lo so benissimo, però a quanto pare sono software alquanto richiesti (viva la cultura informatica).
L'ambiente in cui andrà installato questo software è di quelli più beceri che si possa pensare (utenti? che cosa sono? :confused: ), mi è capitato di vedere aule dove agli studenti era dato account di amministratore e chiaramente il "tecnico" doveva formattare tutte le settimane (quando non veniva depredato l'hardware della macchina).
Serve proprio perchè nessuno ci capisce niente e quindi è comodo avere un software che da remoto ti consente di disabilitare programmi o funzionalità di Windows. E' un palliativo, lo so benissimo, però a quanto pare sono software alquanto richiesti (viva la cultura informatica). LOL!!! :rotfl: :rotfl: :rotfl: :rotfl:
tomminno
28-02-2007, 23:21
Non funziona. Per un servizio non esiste il concetto di "current user", in quanto potrebbe non essercene nessuno (nessun utente loggato) oppure piu' di uno (server terminal, oppure XP con piu' utenti attivi). Puoi impostare il servizio perche' possa interagire col desktop ma in realta' questo ti vincola ad interagire con l'utente console e basta (quello con id 0), che, se non ricordo male, e' stato proprio per questo tolto dalle piu' recenti versioni di windows (Vista di sicuro, forse XP).
Il modo "ufficiale" perche un'utente possa interagire con un servizio e' tramite un processo che giri nella sessione dell'utente ed interagisca col servizio. E' il motivo perche' ti trovi nella tray bar una inconcina di windows update, quella dello spooler di stampa, etc. Servono da tramite per i servizi di sistema.
A questo punto pero' per impedire che l'utente pialli quel programmino devi cominciare ad usare tecniche da spyware :D, per cui rimango dell'idea che la soluzione vera sia quella delle group policies.
E in ogni caso anche se opti per il servizio che invece che il solo utente corrente vada a rovistare tra i vari utenti, ti trovi col problema che, se non disabiliti anche l'accesso all'editor delle policy di gruppo, un utente puo' forzare l'abilitazione del task manager nelle policy, che al login dell'utente andranno a sovrapporsi alle impostazioni del registro... ancora una volta rischi di dover faticare per una soluzione con molte possibili falle.
Il software in realtà cerca di suo di terminare tutto quello che è eseguibile nel pannello di controllo (e il pannello di controllo stesso) sfortunatamente quasi tutti non sono visibili come processi perciò vanno terminati in base al nome della finestra.
Inoltre il software si autonasconde dall'elenco dei processi visibile al task manager (che in ogni caso viene terminato dal programma stesso, ma questa è un'opzione disabilitabile da remoto).
E comunque da remoto l'interfaccia avvisa sullo stato dei client, se uno studente riavvia la macchina o tira giù il servizio si spera che qualcuno controlli.
Il tutto deve avere difficoltà pari ad installare il mulo, con checkbox tal tono rassicurante che ti garantiscono che lo studente non accederà ad internet, che non formatterà niente, che non userà penne USB,CDROM,... altro che configurazione dei gruppi di utenti!
Per me una vaccata (non la gestione dei gruppi).
premesso che volendo potresti fare le cose pompate in grande riempiendoti la bocca di paroloni e creando per il tuo software una procedura di installazione che provveda alla configurazione automatica di impostazioni di sicurezza decenti, creazione di account limitato in primis :D :D :D
ciò premesso, pensandoci e ripensandoci, sebbene il problema non abbia soluzioni reali ed esaustive (disabiliti il Task Manager? il primo coglione che arriva che ha sentito parlare di Mark Russinovich installa il Process Explorer assieme ai tools del Windows Resource Kit :sofico: :sofico: :sofico: e ti frega; analogamente, disabiliti regedit? il primo coglione che arriva ti installa chissà quale altra diavoleria potente il quadruplo di regedit e come sopra ti frega), credo che la soluzione migliore sia quella che stai intraprendendo, ma c'è un problema: quando costruisci il path della chiave di registro a cui devi accedere il SID che usi non deve essere hardcoded! non so se esiste un modo per ottenere quella stringa avendo solo il nome dell'account, ora provo a vedere su MSDN (chè interessa pure a me).
Il software in realtà cerca di suo di terminare tutto quello che è eseguibile nel pannello di controllo (e il pannello di controllo stesso) sfortunatamente quasi tutti non sono visibili come processi perciò vanno terminati in base al nome della finestra.
Inoltre il software si autonasconde dall'elenco dei processi visibile al task manager (che in ogni caso viene terminato dal programma stesso, ma questa è un'opzione disabilitabile da remoto). MA CHE SCHIFO O_O
cioè hai usato veramente le tecniche da spyware di cui parlava giustappunto marco.r :|
Il tutto deve avere difficoltà pari ad installare il mulo, con checkbox tal tono rassicurante che ti garantiscono che lo studente non accederà ad internet, che non formatterà niente, che non userà penne USB,CDROM,... altro che configurazione dei gruppi di utenti!
Per me una vaccata (non la gestione dei gruppi). per impedire allo studente l'uso di cd rom e floppy disk è semplice!! :) (almeno quello...)
un po' più complicato invece per le penne USB, in quanto non sono sempre presenti come periferiche ma vengono aggiunte dinamicamente...
comunque per quanto riguarda floppy e CD, il tuo programma deve semplicemente aggiungere alle rispettive periferiche (apribili tramite semplice CreateFile) delle ACE di accesso negato contro l'account in uso dallo studente.
non so se esiste un modo per ottenere quella stringa avendo solo il nome dell'account, ora provo a vedere su MSDN (chè interessa pure a me). detto fatto:
http://msdn2.microsoft.com/en-us/library/aa446658.aspx
http://msdn2.microsoft.com/en-us/library/aa446657.aspx
:)
Il software in realtà cerca di suo di terminare tutto quello che è eseguibile nel pannello di controllo (e il pannello di controllo stesso) sfortunatamente quasi tutti non sono visibili come processi perciò vanno terminati in base al nome della finestra.
Inoltre il software si autonasconde dall'elenco dei processi visibile al task manager (che in ogni caso viene terminato dal programma stesso, ma questa è un'opzione disabilitabile da remoto).
Basta uno studente in tutta la scuola che sappia usare la linea di comando e il programma viene raggirato. Tempo una settimana ed e' tutto come prima.
E comunque da remoto l'interfaccia avvisa sullo stato dei client, se uno studente riavvia la macchina o tira giù il servizio si spera che qualcuno controlli.
Se e' lo stesso qualcuno che lascia l'accesso di amministratore agli studenti, ho paura che sara' fatica sprecata :stordita:
Il tutto deve avere difficoltà pari ad installare il mulo, con checkbox tal tono rassicurante che ti garantiscono che lo studente non accederà ad internet, che non formatterà niente, che non userà penne USB,CDROM,... altro che configurazione dei gruppi di utenti!
Per me una vaccata (non la gestione dei gruppi).
Proprio le cose per cui sono state create le policy di gruppo. Di programmazione in ambiente windows non sono un esperto, ma la vedo piu' difficile, soprattutto perche' ci sono una marea di casi speciali da considerare: riesco ad impedire l'accesso ad internet ? Con tutti i browsers ? E se non ci riesco come faccio a garantire che i file scaricati non vengano eseguiti ? E se invece del task manager un utente usa un altro programmino dalle funzionalita' analoghe ? Si potrebbe continuare per ore.
Ripeto: secondo me la soluzione e' quella di prendere una persona competente che perda due ore a configurare come si deve una macchina, e poi le altre vengono fatte a sua immagine e somiglianza. Fatto questo non ci sara' neanche piu' bisogno di monitorarli i pc, se non stare attenti che li spengano e ti rubino i pezzi ovviamente ...:stordita:
ciò premesso, pensandoci e ripensandoci, sebbene il problema non abbia soluzioni reali ed esaustive (disabiliti il Task Manager? il primo coglione che arriva che ha sentito parlare di Mark Russinovich installa il Process Explorer assieme ai tools del Windows Resource Kit :sofico: :sofico: :sofico: e ti frega; analogamente, disabiliti regedit? il primo coglione che arriva ti installa chissà quale altra diavoleria potente il quadruplo di regedit e come sopra ti frega).
Il problema di questo approccio e' appunto che non puoi bloccare esplicitamente l'esecuzione di tutti i programmi sulla terra. Devi impedire per prima cosa di accedere a tali file. Anche supponendo di impedire ad Internet Explorer di scaricare i file eseguibili (si puo' fare probabilmente anche da API, riscrivendo in pratica quanto gia' offerto dalle policy :P), ipotizzando di eliminare la shell dei comandi per tagliare le gambe ai smanettoni, come puoi impedire che qualcuno condivida da casa una propria cartella di windows su internet (:eek:) e da start->esegui scriva \\casamia.dyndns.org\programmifighi ?:mbe:
Ogni post che scriviamo troviamo almeno tre modi aggiuntivi per aggirare le funzionalita' del programma. Non voglio mettere in dubbio le competenze di chi andra' a scriverlo, ma e' un lavoro immane, e soprattutto gia' fatto.
tomminno
01-03-2007, 00:08
per impedire allo studente l'uso di cd rom e floppy disk è semplice!! :) (almeno quello...)
un po' più complicato invece per le penne USB, in quanto non sono sempre presenti come periferiche ma vengono aggiunte dinamicamente...
Per me è più semplice disabilitare l'USB che non CDROM e floppy, nel primo caso basta una voce di registro e le USB non vengono più montate, nel secondo caso devo gestire il messaggio WM_DEVICECHANGE.
comunque per quanto riguarda floppy e CD, il tuo programma deve semplicemente aggiungere alle rispettive periferiche (apribili tramite semplice CreateFile) delle ACE di accesso negato contro l'account in uso dallo studente.
Più semplicemente quando ricevo il comando WM_DEVICECHANGE rimuovo il volume :D
Se interessa la voce per disabilitare l'USB è [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbstor]
"Start"=dword:00000003 per USB abilitato
"Start"=dword:00000004 per USB disabilitato
il primo coglione che arriva ti installa chissà quale altra diavoleria potente il quadruplo di regedit e come sopra ti frega)
Per inciso gli bastera' in molti casi esportare le chiavi in un file .reg ed eseguirlo con un doppio clic. Nell'ipotesi che il programma provveda anche a cancellare un po' di associazioni di file pericolose (e continui a rifarlo se l'utente le reimposta) basta un "reg import" (altra cosa ancora da bloccare...)
tomminno
01-03-2007, 00:10
premesso che volendo potresti fare le cose pompate in grande riempiendoti la bocca di paroloni e creando per il tuo software una procedura di installazione che provveda alla configurazione automatica di impostazioni di sicurezza decenti, creazione di account limitato in primis :D :D :D
Magari sapessi come si va via programma!
ciò premesso, pensandoci e ripensandoci, sebbene il problema non abbia soluzioni reali ed esaustive (disabiliti il Task Manager? il primo coglione che arriva che ha sentito parlare di Mark Russinovich installa il Process Explorer assieme ai tools del Windows Resource Kit :sofico: :sofico: :sofico: e ti frega;
Forse sono ancora più fico ma il Process Explorer è nella lista nera dei processi insieme a PRC :cool:
E siccome di questi software ce ne sono MILLLE MILA, il programma server è personalizzabile così volendo si possono inserire nuovi processi/finestre da bloccare.
tomminno
01-03-2007, 00:27
Basta uno studente in tutta la scuola che sappia usare la linea di comando e il programma viene raggirato. Tempo una settimana ed e' tutto come prima.
cmd è bloccato, ma non posso certo fare niente per i file batch, una volta trovato il nome del servizio (però ho nascosto ad Explorer la cartella di installazione) basta il comando sc e tutto viene via.
Se e' lo stesso qualcuno che lascia l'accesso di amministratore agli studenti, ho paura che sara' fatica sprecata :stordita:
Non venirlo a dire a me, la prendo più come una sfida per vedere quanto potrà resistere il mio programma che altro. :stordita:
Proprio le cose per cui sono state create le policy di gruppo. Di programmazione in ambiente windows non sono un esperto, ma la vedo piu' difficile, soprattutto perche' ci sono una marea di casi speciali da considerare: riesco ad impedire l'accesso ad internet ? Con tutti i browsers ? E se non ci riesco come faccio a garantire che i file scaricati non vengano eseguiti ? E se invece del task manager un utente usa un altro programmino dalle funzionalita' analoghe ? Si potrebbe continuare per ore.
Per internet infatti imposto un firewall "remoto" in cui grazie alle iphlpapi o abilito il traffico solo verso determinati url o disabilito certi url, o disabilito tutto.
Il download invece è un casino devo andare ad hookare le chiamate fatte dai 3 browser principali, con il casino che il codice che funzionava con IE6,FF,Opera non va con IE7 perchè simpaticamente usano alcune funzioni Winsocks che non si trovano in WS2_32.DLL
Ripeto: secondo me la soluzione e' quella di prendere una persona competente che perda due ore a configurare come si deve una macchina, e poi le altre vengono fatte a sua immagine e somiglianza. Fatto questo non ci sara' neanche piu' bisogno di monitorarli i pc, se non stare attenti che li spengano e ti rubino i pezzi ovviamente ...:stordita:
Il problema nasce quando devi lavorare con aule preesistenti di 120 computer, magari dalla parte opposta dell'Italia. Oltretutto nessuno ti garantisce che il tecnico di turno non decida di riformattare tutto dopo poco perchè gli girava così, già vista la scena:
-Che fine ha fatto il programma che ti avevo installato?
-Ho riformattato perchè ho installato XYZ e non andava più nulla e non ho ancora avuto tempo di rimettere tutto in piedi (3 settimane!)
tomminno
01-03-2007, 00:38
Il problema di questo approccio e' appunto che non puoi bloccare esplicitamente l'esecuzione di tutti i programmi sulla terra. Devi impedire per prima cosa di accedere a tali file. Anche supponendo di impedire ad Internet Explorer di scaricare i file eseguibili (si puo' fare probabilmente anche da API, riscrivendo in pratica quanto gia' offerto dalle policy :P), ipotizzando di eliminare la shell dei comandi per tagliare le gambe ai smanettoni, come puoi impedire che qualcuno condivida da casa una propria cartella di windows su internet (:eek:) e da start->esegui scriva \\casamia.dyndns.org\programmifighi ?:mbe:
Ogni post che scriviamo troviamo almeno tre modi aggiuntivi per aggirare le funzionalita' del programma. Non voglio mettere in dubbio le competenze di chi andra' a scriverlo, ma e' un lavoro immane, e soprattutto gia' fatto.
Dovete anche pensare che principalmente i ragazzi tendono ad installare sui computer porcai che scaricano da internet, ad usare eMule e Messenger durante le lezioni, a girare per ogni tipo di sito (ancora non ho visto un proxy installato in una scuola).
In teoria dovrebbero essere lì a studiare lingue o corsi di informatica, non è che stanno davanti a quei computer per ore.
tomminno
01-03-2007, 00:39
Per inciso gli bastera' in molti casi esportare le chiavi in un file .reg ed eseguirlo con un doppio clic. Nell'ipotesi che il programma provveda anche a cancellare un po' di associazioni di file pericolose (e continui a rifarlo se l'utente le reimposta) basta un "reg import" (altra cosa ancora da bloccare...)
Se disabiliti regedit da registro il doppio click sui file reg è disabilitato come tutte le funzioni riguardanti il registro.
Se disabiliti regedit da registro il doppio click sui file reg è disabilitato come tutte le funzioni riguardanti il registro.
Anche l'uso di altri tool da linea di comando ?:confused: Non lo sapevo.
tomminno
01-03-2007, 15:30
Anche l'uso di altri tool da linea di comando ?:confused: Non lo sapevo.
Vengono disabilitate tutte le funzioni per il registro integrate in Windows, ma non le API che interagiscono con il registro, perciò un programma di terze parti può funzionare.
Per me è più semplice disabilitare l'USB che non CDROM e floppy, nel primo caso basta una voce di registro e le USB non vengono più montate, nel secondo caso devo gestire il messaggio WM_DEVICECHANGE. a me pare più facile aprire "\\\\.\\A:" e "\\\\.\\D:" con CreateFile e metterci le ACE, se non altro perché per ricevere WM_DEVICECHANGE devi aver creato una finestra (in un servizio poi... :Puke: ); poi vedi tu...
Più semplicemente quando ricevo il comando WM_DEVICECHANGE rimuovo il volume :D il problema è che per questo lavoro stai già accumulando una schifezza dopo l'altra, perciò almeno una cosa da fare in maniera lecita e semplice te la volevo suggerire :)
[...] perchè simpaticamente usano alcune funzioni Winsocks che non si trovano in WS2_32.DLL che ti aspettavi? mica tutti i programmi sono obbligati ad usare quella "porcata un po' migliorata" dei Windows Sockets, di conseguenza se si prevede di non dover portare un sorgente su Linux è meglio usare altre interfacce (tipo sapevo che RPC andava a chiamare direttamente AFD, e a occhio sarebbe assurdo se andasse a chiamare i sockets).
comunque a me sembra assurdo che con le persone che ti hanno commissionato questo lavoro tu non riesca in nessun modo a fare un ragionamento del tipo: "signori miei quello di cui avete bisogno non è un programma ma qualche oretta di configurazione con tools già esistenti in Windows, e pazientate se me ne esco in quarta a lanciare rivoluzioni quando avevate chiesto solamente un cerotto ma io sono fermamente convinto che voi non abbiate idea di cosa realmente serva a risolvere il problema, visto che questo è il mio lavoro e non il vostro, o quello di quel sedicente tecnico i cui approcci con l'elettronica di tutta la sua vita ammontano suppergiù a qualche mese di apprendista elettrauto".
se pensi di non ragionare così con loro per questioni di convenienza ("se faccio il programma mi pagano di più") allora li stai imbrogliando. ma se è quello il tuo scopo non vedo lo stesso perché rifilargli la monnezza quando potresti semplicemente farti pagare a ore passando le ore a far finta di configurare e giocando invece con PacMan: imbrogliali quanto ti pare ma almeno cerca di ripulirti la coscienza, per amor tuo! :D :Prrr:
ah, senza contare che qualcuno di quella scuola potrebbe stare già leggendo questo thread... :asd: :asd: :asd:
tomminno
01-03-2007, 21:15
a me pare più facile aprire "\\\\.\\A:" e "\\\\.\\D:" con CreateFile e metterci le ACE, se non altro perché per ricevere WM_DEVICECHANGE devi aver creato una finestra (in un servizio poi... :Puke: ); poi vedi tu...
Considerando che A non esiste più sulle nuove aule e in D spesso c'è una partizione dell'HD dovrei andarmi a elencare i dispositivi presenti. Sicuramente ci ritornerò sopra, ma adesso con la consegna imminente non ho tempo per ritoccare questa funzionalità.
Non che cambi molto ma il servizio serve solo per lanciare l'applicativo e monitorare che sia sempre attivo, come conseguenza il programma gira sotto l'account SYSTEM.
In ogni caso una minimale interfaccia grafica è richiesta (notifica sulla taskbar e messaggistica)
il problema è che per questo lavoro stai già accumulando una schifezza dopo l'altra, perciò almeno una cosa da fare in maniera lecita e semplice te la volevo suggerire :)
schifezza o meno, non ho trovato altre soluzioni per risolvere il problema. Magari ci saranno pure state, ma in 2 mesi di sviluppo nel tempo libero non è che avessi tanto tempo per documentarmi meglio sulle funzionalità di Windows.
Ripeto non è pensabile di configurare adeguatamente gli utenti in quanto se fosse possibile, programmi come questo non sarebbero richiesti (e non ridere se ti dico che al momento è in previsione l'installazione su 1500 computer)
tomminno
01-03-2007, 21:28
comunque a me sembra assurdo che con le persone che ti hanno commissionato questo lavoro tu non riesca in nessun modo a fare un ragionamento del tipo: "signori miei quello di cui avete bisogno non è un programma ma qualche oretta di configurazione con tools già esistenti in Windows, e pazientate se me ne esco in quarta a lanciare rivoluzioni quando avevate chiesto solamente un cerotto ma io sono fermamente convinto che voi non abbiate idea di cosa realmente serva a risolvere il problema, visto che questo è il mio lavoro e non il vostro, o quello di quel sedicente tecnico i cui approcci con l'elettronica di tutta la sua vita ammontano suppergiù a qualche mese di apprendista elettrauto".
Si vede che non hai molto a che fare con i commerciali.
Il loro scopo è vendere qualunque cosa purchè porti denaro contante.
T'immagini se si presenta dal cliente e gli dice:
"Voi non avete bisogno del software che noi vendiamo, vi basta solo un tecnico con un livello di conoscenza di Windows superiore alla mediocrità."
Il cliente direbbe "Oh ma è vero, grazie non abbiamo più bisogno di voi".
Lo scopo di questo software è per l'appunto quello di rimpiazzare un altro software che viene venduto attualmente dalla ditta che mi ha commissionato il lavoro, consentendo così margini più ampi.
se pensi di non ragionare così con loro per questioni di convenienza ("se faccio il programma mi pagano di più") allora li stai imbrogliando. ma se è quello il tuo scopo non vedo lo stesso perché rifilargli la monnezza quando potresti semplicemente farti pagare a ore passando le ore a far finta di configurare e giocando invece con PacMan: imbrogliali quanto ti pare ma almeno cerca di ripulirti la coscienza, per amor tuo! :D :Prrr:
La richiesta era:
Abbiamo bisogno di rimpiazzare un software di terze parti che attulamente vendiamo con uno di nostra proprietà, sei in grado di realizzare un software che abbia queste funzionalità?
Credi che non glielo abbia detto che secondo me è un software inutile?
Chiaramente chi mi ha commissionato il lavoro era perfettamente d'accordo con me, solo che lo scopo è quello di vendere vendere vendere.
Triste verità che ha ben altre valenze in casi diversi da questo.
PS forse non era chiaro non è stata una scuola a commissionarmi il lavoro, altrimenti è chiaro che la soluzione non sarebbe stata quella presente.
tomminno
01-03-2007, 21:29
ah, senza contare che qualcuno di quella scuola potrebbe stare già leggendo questo thread... :asd: :asd: :asd:
Quale delle tante? :D
Si vede che non hai molto a che fare con i commerciali. infatti per niente: faccio ancora l'università; però che dire, mi sembra una situazione piuttosto assurda :mbe:
poi ci si lamenta che Microsoft ci rifila merda, quando invece la prima merda... vabbè va', hai capito.
Il loro scopo è vendere qualunque cosa purchè porti denaro contante.
T'immagini se si presenta dal cliente e gli dice:
"Voi non avete bisogno del software che noi vendiamo, vi basta solo un tecnico con un livello di conoscenza di Windows superiore alla mediocrità."
Il cliente direbbe "Oh ma è vero, grazie non abbiamo più bisogno di voi". controrisposta: "no? e dove lo trovate il tecnico?"
Credi che non glielo abbia detto che secondo me è un software inutile?
Chiaramente chi mi ha commissionato il lavoro era perfettamente d'accordo con me, solo che lo scopo è quello di vendere vendere vendere.
Triste verità che ha ben altre valenze in casi diversi da questo. in effetti chi doveva far capire l'errore alla base della richiesta non eri tu ma chi ha ricevuto la richiesta stessa da parte di persone incompetenti nel settore. tuttavia possiamo ancora interpretarla come una richiesta valida: quello che i presidi vogliono è soltanto un generico qualcosa che impedisca agli studenti di fare determinate cose, e non uno specifico software che glielo impedisca con sporche tecniche da trojan (e per sporche intendo che il tuo software potrebbe non funzionare più già su Vista). tu anziché reinventare la ruota con strumenti il più possibile inadatti avresti potuto creare un software con minime funzionalità di controllo, che nella procedura di installazione creasse configurazioni di sicurezza robuste. prima chiedevi come creare un account da programma. ora sinceramente non lo so, però penso che le API necessarie siano sicuramente documentate.
la prossima volta cerca di ragionare in questi termini, ed ovviamente è un consiglio del tutto disinteressato.
PS forse non era chiaro non è stata una scuola a commissionarmi il lavoro, altrimenti è chiaro che la soluzione non sarebbe stata quella presente. si, adesso ho capito.
Considerando che A non esiste più sulle nuove aule e in D spesso c'è una partizione dell'HD dovrei andarmi a elencare i dispositivi presenti. dicevo A e D per dire; per elencare le unità disco presenti e conoscere di che tipo sono:
GetLogicalDrives (http://msdn2.microsoft.com/en-us/library/aa364972.aspx)
GetDriveType (http://msdn2.microsoft.com/en-us/library/aa364939.aspx)
Non che cambi molto ma il servizio serve solo per lanciare l'applicativo e monitorare che sia sempre attivo, come conseguenza il programma gira sotto l'account SYSTEM.
In ogni caso una minimale interfaccia grafica è richiesta (notifica sulla taskbar e messaggistica) solitamente far girare sotto SYSTEM un programma interattivo è una pessima idea... questo articolo spiega i modi migliori per rendere interattivo un servizio: http://msdn2.microsoft.com/en-us/library/ms683502.aspx
Ripeto non è pensabile di configurare adeguatamente gli utenti in quanto se fosse possibile, programmi come questo non sarebbero richiesti visto che gli elettrauto non sanno configurare gli utenti Windows potrebbe farlo il tuo programma al posto loro.
(e non ridere se ti dico che al momento è in previsione l'installazione su 1500 computer) se avessi invertito la frase ("ti dico che è in previsione l'installazione su 1500 computers, ma non ridere") mi avresti messo di fronte al fatto compiuto :D :D :D
tomminno
02-03-2007, 14:48
controrisposta: "no? e dove lo trovate il tecnico?"
Considerazione economica: il tecnico, se fornito dalla ditta, dovrebbe andare in trasferta per ognuna delle scuole che ne fanno richiesta, passare almeno un paio di giorni per configurare le varie aule (non che ci vogliano 2 giorni per configurare i PC solo che tra viaggio e tutto il resto...)
Poi si rompe un computer che fai? Rimandi il tecnico dalla parte opposta dell'Italia?
La scuola cercherebbe un tecnico locale, con conseguente affare sfumato.
Il programma glielo vendi e con Avanti->Avanti->Avanti è "tutto risolto". :rolleyes:
in effetti chi doveva far capire l'errore alla base della richiesta non eri tu ma chi ha ricevuto la richiesta stessa da parte di persone incompetenti nel settore. tuttavia possiamo ancora interpretarla come una richiesta valida: quello che i presidi vogliono è soltanto un generico qualcosa che impedisca agli studenti di fare determinate cose, e non uno specifico software che glielo impedisca con sporche tecniche da trojan (e per sporche intendo che il tuo software potrebbe non funzionare più già su Vista).
Testato anche su Vista le funzioni principali vanno alla perfezione, solo il firewall non funziona perchè Vista non ha la iphlpapi.
Le funzioni da trojan ce ne sono 2: quella per nacondersi al taskmanager, che non è fondamentale ma caldamente richiesta (me l'hanno fatta mettere a forza), e quella per il monitoraggio del traffico dei browser, la seconda funziona anche su Vista, la prima non ho avuto modo di testarla.
tu anziché reinventare la ruota con strumenti il più possibile inadatti avresti potuto creare un software con minime funzionalità di controllo, che nella procedura di installazione creasse configurazioni di sicurezza robuste. prima chiedevi come creare un account da programma. ora sinceramente non lo so, però penso che le API necessarie siano sicuramente documentate.
la prossima volta cerca di ragionare in questi termini, ed ovviamente è un consiglio del tutto disinteressato.
si, adesso ho capito.
Chiaramente non ero capace di realizzare un account con tutte le configurazioni del caso via programma e comunque sarebbe andato, diciamo così, "fuori tema", quel software doveva avere quelle precise caratteristiche.
Comunque grazie per la segnalazione sugli Interactive Services, la prima soluzione che avevo pensato in effetti era quella di inserire il programma nel Run e usare il servizio solo per controllare se era in esecuzione, ma poi testandolo mi sono accorto che se si fosse loggato un utente con qualche restrizione, il programma non avrebbe funzionato correttamente in tutte le sue funzioni.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.