PDA

Visualizza la versione completa : [c/c++] Proteggere un processo


Shotokan
21-06-2008, 10:39
Salve a tutti, sto scrivendo un programma "firewall", il funzionamento in se' x ora (quasi) perfetto, ma non per nulla protetto da "kill".
Il mio problema?
Non riesco a trovare una funzione in c/c++ che impedisca che il processo venga chiuso.
Anche xk, un firewall che si lascia chiudere cos.. proprio uno skifo XD

...Consigli?

mondobimbi
21-06-2008, 10:48
scusa, ma se uno ha accesso (fisico o via ssh) alla tua macchina ed ha ottenuto i permessi di root penso che il tuo ultimo problema sia che ti killi il firewall.
ciao
sergio

puntino
21-06-2008, 10:53
Quello che stai facendo interessante e richiede delle conoscenze nell'ambito dei sistemi operaivi. in pratica devi gestire l'handler per i segnale del proceso frirewall.
in generale possibile ignorare la system call kill con parametro 5 (SIGTERM) mentre non possibile ignorare la kill con parametro 9 (SIGKILL) da nessun processo nello spazio utente, a valle della quale deallocato dalla memoria principale.
Forse non molto chiaro quello che ho scritto, puoi trovare info pi dettagliate e chiare a:

http://www.lilik.it/~mirko/gapil/gapilch11.html#x315-1710009

Shotokan
21-06-2008, 10:53
Non esattamente cos:
Io sto creando questo firewall "per la folla".

Se uno conosce il nome del processo, pu creare un eseguibile con una function
system("taskkill /f /im nomeprocesso.exe")
...e il firewall sarebbe down, capite che se il programma in questione fosse un trojan, killerebbe il firewall e passerebbe tranquillamente alla funzione connect.
Sbaglio?

Grazie 1000 puntino, adesso vedo un po' se riesco a risolvere coi documenti che mi hai passato :)

mondobimbi
21-06-2008, 10:58
pensavo che tu fossi su linux, dove se non hai i privilegi assegnati alla esecuzione del processo non puoi fermare il processo, per windows non ho idea
ciao
sergio

puntino
21-06-2008, 10:59
Proprio per i motivi che ti ho spiegato un processo in spazio utente viene killato.
Devi fare in modo che il tuo processo si rifiuti di accettare il segnale di kill.
Per farlo si potrebbe agire sull'handler almeno nel mondo unix

Shotokan
21-06-2008, 11:02
Ma per "spazio utente" tu intendi un user normale, non system giusto?
Be' questo firewall si avvia in contemporanea al sistema operativo ed sotto user "system"
...Cambia qualcosa?

oregon
21-06-2008, 11:14
Un vero firewall gestisce i pacchetti a livello kernel e si installa come device driver (almeno il core), appunto il "packet filter driver".

Un device driver non puo' essere terminato dagli utenti.

Shotokan
21-06-2008, 11:25
Vagando x il NET ho trovato anche questo per: http://www.alexmark.net/?pag=vegashield

Una function del genere impedisce anche il kill da parte di system :|
testato, funziona ma...
...saperla quella function! XD

oregon
21-06-2008, 11:30
Ma quello e' un programma non una funzione ...!

Ed e' un programma che lavora a ring 0 (come un device driver, anzi, e' un device driver) cosa che dovrebbe fare normalmente un firewall.

Non puoi utilizzare un tool (di terze parti, da distribuire con il tuo programma, da installare come amministratore e di cui non conosci l'affidabilita' ...) per fare in modo che il tuo "firewall" non venga chiuso ... e' assurdo.

Loading