![]() |
Alerta en ejecucion de programas
bueno, les comento mi problema
tengo un cybercafe en el cual estamos usando: -CyberControl 4.0 para la facturacion -Deep Freeze Enterprise 5.xxx (no recuerdo en este momento la version) el tema es que hay un "vivo" que esta usando el fuck-deepfreeze para deshabilitar dicho programa y esta instalando keyloggers y administradores de escritorio remoto mi idea es hacer un programa cliente-servidor que alerte cuando se ejecuta este tipo de software por ejemplo: yo en la pc de facturacion instalo el servidor y en las demas maquina el cliente y quiero que cuando en el cliente se ejecute alguna aplicacion que se encuentre en la "blacklist" alerte al operador del servidor (cosa que este vaya, lo agarre de los pelos y lo patee a la calle). eh visto muy poco, es mas, diria nada, en lo que respecta programacion con cliente servidor, pero no es ese mi problema. mi problema es como hago para "saber" cuando se ejecuta algun programa, es decir, cuando yo hago 2ble click sobre algo: como hago para que mi programa se entere de esto y compruebe que dicho software esta permitido ejecutar. y lo que respeca a la parte comunicacion entre el cliente y el servidor me seria de mucha utilidad saber que librerias me recomiendan para esto, estuve leyendo en delphi.about.com hay un tutorial acerca de indy y como tengo es lo que tengo a mano pensaba en usar esta libreria les agradezco desde ya las respuestas |
Cita:
***
Ahora que ya tenemos la lista de programas en ejecución (sin utilizar las Toolhep), tienes varias opciones, por ejemplo:
La Forma de comunicación entre máquinas y el envío de paquetes podrías hacerlo según la idea que hace algunos días me propuso seoane, el hilo está aquí. Espero que esta información te resulte útil, esto es solamente una propuesta |
Antes de nada, debemos de aclarar sobre que sistema estamos trabajando y el tipo de cuenta de usuario. Si estamos hablando de un Windows 98 no hay nada que hacer, es imposible proteger nada en ese sistema, no al menos sin modificar sustancialmente el propio sistema (inyecciones de código, drivers, etc ...). Solo hay que pensar que aunque creemos un superprograma de protección, un atacante solo tendría que matar el proceso y nadie se lo puede impedir.
Otra cosa es si estamos trabajando sobre un Windows 2000/XP, y con una cuenta de usuario limitada. Entonces lo primero es que nuestra aplicación se ejecute como un servicio, como un usuario limitado no puede parar ni matar un servicio por ese lado estaremos protegidos. Una vez que estamos a salvo de algún listo, lo segundo es crear una lista de aplicaciones permitidas (lista blanca :) ), esto puede resultar tedioso, y nunca se sabe que aplicación puede llegar a ser necesaria en el futuro. Yo resolví el problema creando una lista de directorios permitidos, es decir, cualquier aplicación que se ejecute desde un directorio que no este en la lista sera asesinada. Como los usuarios de cuentas limitadas no puedes escribir fuera de la carpeta de su perfil (si no se especifica lo contrario), nos aseguraremos de que esa carpeta no esta en la lista de directorios permitidos. Yo utilizaba la siguiente lista: Código:
c:\Archivos de programa\También hay la versión suave, que es mandar un mensaje UDP a un servidor para que el encargado se entere de la actividad sospechosa, sin matar el proceso. Yo en mi aplicación, tenia 2 modos: normal y agresivo. En el normal, solo avisaba al encargado, en el agresivo mataba el proceso sin hacer preguntas. Se podía cambiar de un modo a otro de forma remota. El problema es si estando en modo normal, un listo desconecta el cable de red. Pues no pasa nada, mi programa lo detectaba y pasaba a modo agresivo :) Por ultimo existe otra solución mucho mas efectiva, pero también muchas mas compleja de programar. Se trata de crear un Hook en la API Createproccess de tal manera que cada vez que alguien quiere ejecutar un programa, primero se ejecuta nuestro código y podemos decidir si le dejamos o no hacerlo. Para hacer esto tenemos que usar inyección de código, pero en eso seguro que ardilla te puede ayudar mas que yo. |
Si claro, yo como siempre asumiendo cosas y no hago consideraciones sobre el SO en lo que obviamente tienes toda la razón...
Las directrices o permisos en una cuenta limitada, supongo que será una cuestión ya prevista en un ciber... Cita:
Pero vamos, de orientar al como.... a hacer una tesis doctoral sobre el asunto creo que hay bastante diferencia y mucho más considerando que este lugar: Primero no es un colegio y segundo no existe obligación alguna de dar pruebas del como y el porqué. Dicho esto, a veces me resultan molestos aquellos mensajes en los que tratas de aportar un granito de conocimiento y a partir de ahí comienzan a someterte a un "tercer grado", no se sabe con qué intenciones, por lo que seguramente habría que traspasar algunos hilos mas o menos interesantes al subforo "taberna", para que resulten mas divertidos. Cita:
Por cierto knife_sj, también estamos hablando de este hilo, así que pido disculpas por la distracción ______ |
:D Venga Ardilla, no te pongas así, solo indicaba que tu habías tratado el tema antes. No esperaba que le fueras a hacer el código ...
|
Cita:
Con respecto al código para tocar la API del CreateProccess y visto lo que hay escrito sobre el asunto, no sería difícil implementarlo, pero sigo pensando que para esta cuestión del ciber la solución mas "sencilla" y más estable y asumiendo que estamos hablando de un XP, pasa por crear las listas de "buenos y malos" y cotejarlas. |
Se me ocurre algo, que puede ser fácilmente vulnerado, que es monitorear todo lo que se ejecute desde el shell, modificando la clave del registro HKEY_CLASSES_ROOT\exefile\shell\open\command para incluír en el valor @ una aplicación propietaria que sea la encargada de ejecutar las aplicaciones y hacer las notificaciones al mismo tiempo.
Si queres complicarla un poquito, estudiaría las librerías de ApiHook para crear un hook de las funciones CreateProcess y CreateProcessAsUser: http://www.apihooks.com/AH5.HTM o http://madshi.net/ . Saludos! |
Juro que cuando me puse a escribir la respuesta, y de ahí que encontré algo de código no habia mas que una respuesta!!! :D
Cita:
|
Cita:
|
Cita:
|
Cita:
|
Hola
Y disculpen que me meta. Hace un tiempo seoane me enseño a esconder el escritorio y todo. No seria mas facil en este caso hacer un explorer en delphi (creo que ya existe) y esconderle al usuario todo lo demas para que no pueda usar nada del ordenador.? No se si puede darsele acceso a una carpeta por si quisiera bajar alguna cosa. O es otro tema? Saludos |
Si lo que quieren hacer es simplemente definir que programas pueden abrir con el shell, eso lo pueden definir desde la política de seguridad, pero es totalmente vulnerable, ya solo es evaluado por el shell, e identifica los archivos por su nombre.
|
Cita:
En cuanto al segundo método, no me queda claro cómo funcionaría. Es decir, ¿qué impide que yo le ponga un nombre "aceptado" a una aplicación y ejecutarla? // Saludos |
Cita:
Cita:
Saludos! |
Cita:
// Saludos |
Cita:
|
Hola,
¿Hablamos de un "cíber"? Entonces, ¡palo! Al que se le ocurra instalar un programa se le ofrece la vara de avellano en las espaldas. ¡Veréis como no se le ocurre instalar nada más en su vida! :D :eek: :cool: :p :rolleyes: :D :eek: |
Cita:
// Saludos |
Cita:
De todas formas, a mi también me gusta lo del hash :p |
Hola,
¡Palo! ¡Palo! ¡Palo! Hasta que aprendan. Jo, jo, jo, jo. :D :D :D :D |
Cita:
|
Hola,
Cita:
|
Gracias!!!!
Bueno, la verdad mil gracias por todas las respuestas y por las ideas
creo que faltaron aclarar un par de detalles como el del SO. ArdiIIa: Con respecto al SO, como tu instinto lo dijo, tengo todas las PCS trabajando con Windows XP x86 SP2. Incluso había pensado lo mismo que pusiste, crear una lista y compararla con la blacklist y ya tenia un código, pero, el punto radicaba en el tema de renombrar los ejecutables (si yo lo renombro y lo ejecuto mi programa no se va a enterar que es :P) Seoane: [Con respecto a lo de la whitelist que propusiste vos] el CyberControl 4.0 tiene una opción para activar una whitelist pero el tema es que no quiero estorbar al cliente de buena fe, por ejemplo, si este cliente baja algún soft para copiar sus mp3 a su reproductor y desea instalarlo, nosotros, al tener deep freeze lo tenemos permitido ya que este no deja rastro al reinicio... pero, si yo activo esa restricción, no solo voy a prevenir los "hackers" sino que también voy a molestar a los clientes. Federico: el tema de restringir que se corran aplicaciones por el registro no es una vulnerabilidad para mi, ya que el CyberControl también tiene la opción de bloquear el regedit.exe, también bloquea el Administrador de Tareas, pero lo que yo quiero es saber exactamente QUIEN es esta persona, cosa de tomar una pequeña represalia y de paso hace una selección de los clientes, cosa de correr a los pibes que tiene 16 años y se creen hackers en cuanto a lo de inyectar código lo veo medio jodido a eso para mi... pero lo del hash es una excelente idea!! Puedo hacer: 1). Examino la lista de procesos. 2). Extraigo los nombre de los ejecutables y sus paths. 3). Calculo el MD5 y lo comparo con la blacklist. 4). Si se encuentra algún hash de los de la blacklist mando un comando de "alerta" al servidor y en el servidor reproduzco un sonido de alarma que se escuche en todo el cyber (total el Server tiene conectado el equipo de música) :] Muchachos díganme si mi esquema para la aplicación quedo bueno o malo :D Cita:
Otra cosa mas, existe una aplicación de Windows que se llama taskkill, casi nadie conoce esta utilidad pero, el que la conoce puede deshabilitar con facilidad mi programa... hay alguna forma de hacer que no se pueda terminar mi programa? tuve un virus una vez que no podía detenerse desde el administrador de tareas, es esto posible? Mil Gracias |
Cita:
Adicionalmente y como he leído atrás, también podrías controlar el tema de cambios o borrados de archivos monitorizando mediante ReadDirectoryChangesW |
Yo lo que no entiendo es como vas a diferenciar los programas "buenos" de los "malos". Si como dices, esta permitido a cualquiera bajar y ejecutar programas, como sabrás cuando esta ejecutando un programa legitimo y cuando un keylogger, por ejemplo. No tiene mucho sentido tener una lista de de aplicaciones buenas y malas, cualquiera de las listas seria infinita.
La cosa esta clara, o permites o no permites que los usuarios ejecuten lo que quieran, aquí no hay soluciones intermedias. Incluso conociendo TODOS los ejecutables maliciosos, calculando su hash, y creando la lista negra, nada impediría a un aprendiz de hacker, comprimir el ejecutable con UPX, variando así su hash y volviéndolo indetectable. |
seoane es muy sencilla la ecuacion... todo keylogger, virus, spyware (por le lado de la blacklist) o todo reproductor, cambio de hard, programa desinstalado, etc.. con el deep freeze se borra todo... pero, si el usuario con el fuck-deepfreeze desactiva el deep freeze obviamente todos estos programas que instale quedaran instalados hasta que yo note la anomalia
lo que quiero hacer es que este programa me sirva para detectar QUIEN es el que esta usando este soft para hacer daño, no me interesa si instala un keylogger, por que a mi no me afecta, a lo sumo robara un par de contraseñas o algo por el estilo pero mi problema no seria que me instalen un keylogger o el VCN server como fue en este caso, mi problema es que el noob este desactive el deep freeze y le meta un virus a la maquina, en ese caso si me afectaria.. te explico por que? es sencillo, cuando tenes 50 maquinas freezadas y entra un virus, desconectas las maquinas que no tenes freezadas (como ser los servidores de juegos y facturacion) y reinicias las demas con esto borras el virus y adios problema. pero si el virus esta instalado por debajo del deep freeze, por mas que reinicies las maquinas se te van a seguir contagiando, por eso quiero prevenir EXCLUSIVAMENTE el uso del fuck deep freeze, pero no solo quiero que no lo pueda usar, sino (les voy a ser sincero) reventarle la cara a trompadas al "vivo" este y evitar futuros problemas echandolo y prohibiendole el ingreso al cyber... esa es basicamente la finalidad de este programa :D edit / y bueno, si comprime el ejecutable con upx o algun sistema de encryptacion de ejecutable ya no tengo nada que hacer, por que en este caso ya no seria un pibe de 16 años dandose de hacker sino que seria alguien que sabe :S |
Aja, y pregunto pregunto...
Porque no usas un "CD Live" de Linux (o windows, tan bien se puede!) sacas el disco duro y compartes una unidad de red? |
como se supone qeu voy a hacer un "live cd" para todas las maquinas?? si tengo maquinas que tienen mas de 50 juegos??
la imagen de las maquinas de juegos mas nuevas pesa 93.52 GB :S no es mala la idea para las maquinas de internet en las cuales el uso de disco no es superior a un dvd... pero en las maquinas de juegos..................... es una idea alocada "por favor, inserte el DVD #312 donde se encuentra "Internet Explorer" :P Salu2 |
Aaaaaa!
Con clientes asi nadie puede! "Quiero una pagina para subir imagenes y mostrarlas" Desarrollador: Ok. Muy facil "Att. Flickr" Ups! |
Cita:
|
Cita:
|
Cita:
Pero en terminos generales, no puedes tener de todo sin quebrarte las pestañas. Es mejor la tranquilidad que la fuerza. Crea un recurso compartido en red donde los usuarios puedan guardar sus cosas. Asi 1)Un solo lugar que chequear contra virus 2)Podras auditar de que maquinas sale todo 3) Podras monitoriar las descargas 4)Minimizas los riesgos Luego, implemente un esquema MUUUY estricto y luego ve "liberando". Mas importante, deja claro que la seguridad es en beneficio de los usuarios. Un sistema inseguro es un sistema inestable y asi nadie juega halo 2, ve.... |
problema casi solucionado
bueno, despues de un rato largo de pruebas logre hacer que el programa funcione, estuve investigando el famoso fuck-deep freeze y no es muy dificil de detectar, ya que cuando lo ejecutas te crea una serie de archivos en la carpeta %temp% y desde ahi se ejecuta, es decir: el usuario no puede cambiar el nombre, de todas formas no creo que continue desarrollando este programejo por ahora, ya que salio la version nueva de deep freeze (6.10.220.1616) la cual no es soportada por ni fuck-deepfreeze, ni por deep unfreezer... por el momento es la solucion mas a mano que tengo (en este momento tengo mucho trabajo :p)
bueno amigos, muchas gracias por haberme ayudado :D PD: si alguien se encuentra en la misma situacion solo avisen que yo les mando el codigo tal cual lo tengo ahora, esta muy basico, pero con un par de horitas de trabajo queda terminado. Salu2 |
| La franja horaria es GMT +2. Ahora son las 16:05:45. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi