Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2007
knife_sj knife_sj is offline
Miembro
 
Registrado: feb 2005
Posts: 18
Poder: 0
knife_sj Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 23-02-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por knife_sj
mi problema es como hago para "saber" cuando se ejecuta algún 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.
les agradezco desde ya las respuestas
Podrías hacer algún programa/servicio para monitorizar los programas o procesos que están ejecutándose en una máquina determinada, para ello podrías utilizar las antiguar funciones ToolHelp incluidas en el API de windows, pero en este sentido creo que existen procedimientos mejores... te pongo un poco de código de ejemplo:
Código Delphi [-]
//Este procedimiento busca todos los procesos en ejecución y los añade a LISTVIEW
procedure TForm1.Button1Click(Sender: TObject);
Var
  pidProcess: array [0..1023] of DWORD;
  hProcess: DWORD;
  dwCount: DWORD;
  hMod: HMODULE;
  ModuleFileName: array[0..MAX_PATH] of Char;
  i: Integer;
  Item : TListItem;
begin
ListView1.Items.Clear;

  if EnumProcesses(@pidProcess, SizeOf(pidProcess), dwCount) then
    for i := 0 to dwCount div SizeOf(DWORD) do
    begin
    Item := ListView1.Items.Add;
    Item.Caption := IntToStr(pidProcess[i]);
    Item.SubItems.Add(GetExeName( pidProcess[i]) );
    end;
End;
***
Código Delphi [-]
//Esta funcion creo que con su nombre basta...
function GetExeName(ProcessIDWord):string;
var ProcHandle   : THandle;
    szName       : array [0..Max_Path] of char;
    ModHandle    : HModule;
    cb,cbNeeded,
    NumModules   : DWord;
begin
  ProcHandle:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
                          False, ProcessID);
  if ProcHandle<>0 then begin
    try
      cb:=SizeOf(ModHandle);
      if EnumProcessModules(ProcHandle,
                            @ModHandle,
                            cb, cbNeeded) then begin
        NumModules:=cbNeeded div SizeOf(HModule);
        if (NumModules>0) and (GetModuleFileNameEx(ProcHandle,
                                                   ModHandle,
                                                   @szName,
                                                   SizeOf(szName))>0)
                                then
          Result:=szName;
      end;
    finally
      CloseHandle(ProcHandle);
    end;
  end;
end;

Ahora que ya tenemos la lista de programas en ejecución (sin utilizar las Toolhep), tienes varias opciones, por ejemplo:
  • Tener en la máquina cliente una lista de programas permitidos y compararla con la lista de procesos en ejecución, si existen alguna anomalía, matar el proceso en cuestión...
  • Si elaboras un programa cliente / servidor, podrías mandar esta lista de procesos al programa servidor y que sea este el que revise los procesos de una máquina, con otra lista de procesos permitidos, y si es el caso, que avise al operario de turno para patear al intruso...

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
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO

Última edición por ArdiIIa fecha: 23-02-2007 a las 16:59:22.
Responder Con Cita
  #3  
Antiguo 23-02-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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\
c:\Archiv~1\
c:\Windows\
\SystemRoot\
\??\
Los dos últimos son directorios especiales que utiliza windows para algunas aplicaciones del sistema. Ahora que ya sabemos que matar y que dejar vivir solo hay que crear un bucle que examine cada pocos milisegundos la lista de procesos y si alguno no esta en un directorio de la lista lo matamos sin compasión.

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.
Responder Con Cita
  #4  
Antiguo 23-02-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
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:
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.
De vuelta a la vectorización o subclassing... El otro día me enteré de que era winlogon.exe al que había que meterle mano, para aquella combinación de teclas, realmente no lo sabía, como ahora, tampoco se me pasó por la cabeza, meterle mano a la API del Createprocess. Por cierto que después estuve viendo el código del GINA y quedé, muy satisfecho con la técnica (por eso en este hilo cito las ToolHelp).
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:
Para hacer esto tenemos que usar inyección de código, pero en eso seguro que ardilla te puede ayudar mas que yo.
Eso si que no es cierto.... , pero para este caso, a mi personalmente me resultaría mas tedioso de programar y a la larga mas inestable. Yo estos códigos habitualmente los utilizo para cosas muy concretas o de forma experimental. Sin embargo, si tuviera un ciber, seguramente comenzaría a pensar en forma "hacker" para programar medidas y contramedidas.
Por cierto knife_sj, también estamos hablando de este hilo, así que pido disculpas por la distracción

______
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO

Última edición por ArdiIIa fecha: 23-02-2007 a las 17:54:17.
Responder Con Cita
  #5  
Antiguo 23-02-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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 ...
Responder Con Cita
  #6  
Antiguo 23-02-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por seoane
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 ...
Si no me pongo, seone, precisamente tú, eres de los que "hacen escuela" y eres precisamente de los que NO se ponen a pedir explicaciones sobre esto o aquello.
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.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #7  
Antiguo 23-02-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 23-02-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Juro que cuando me puse a escribir la respuesta, y de ahí que encontré algo de código no habia mas que una respuesta!!!

Cita:
Empezado por seoane
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.
A este punto me refiero en mi segundo párrafo!.. Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 23-02-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por delphi.com.ar
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.
Saludos!
Otra solución más "manual y simplona" que se me ocurre, es ejecutar todas las aplicaciones necesarias en la shell y una vez en memoria, dejar de ejecutar el explorer.exe de este modo, no habría posibilidad alguna de ejecutar otro programa a no ser mediante el administrador de tareas....
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #10  
Antiguo 23-02-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por ArdiIIa
Otra solución más "manual y simplona" que se me ocurre, es ejecutar todas las aplicaciones necesarias en la shell y una vez en memoria, dejar de ejecutar el explorer.exe de este modo, no habría posibilidad alguna de ejecutar otro programa a no ser mediante el administrador de tareas....
Lo malo de eso es que se pueden ejecutar programas desde cualquier dialogo de abrir archivos, Son como mini exploradores
Responder Con Cita
  #11  
Antiguo 23-02-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por seoane
Lo malo de eso es que se pueden ejecutar programas desde cualquier dialogo de abrir archivos, Son como mini exploradores
JEJE.. Ya me parecía demasiado simplona...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #12  
Antiguo 23-02-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #13  
Antiguo 23-02-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #14  
Antiguo 23-02-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
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/ .
¿Cuál sería la vulnerabilidad del primer método?


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
Responder Con Cita
  #15  
Antiguo 23-02-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
¿Cuál sería la vulnerabilidad del primer método?
Lo que ejecute desde la consola, o aplicaciones que creen otros procesos, como servicios, etc.. no son ejecutados mediante el shell


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?
Ya que estamos interceptando el proceso en su momento de creación por código, podríamos tener una lista con algun tipo de hash de los archivos para identificar si son los admitidos. Sino caeríamos en lo mismo que desde las políticas.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #16  
Antiguo 23-02-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
podríamos tener una lista con algun tipo de hash de los archivos
¡Ah! ¡Qué bárbaro! Sencillo y eficaz. Gracias.

// Saludos
Responder Con Cita
  #17  
Antiguo 23-02-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
¿qué impide que yo le ponga un nombre "aceptado" a una aplicación y ejecutarla?
Pues que si guardamos la ruta completa del ejecutable, es imposible que dos aplicaciones tengan la misma ruta.
Responder Con Cita
  #18  
Antiguo 23-02-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #19  
Antiguo 24-02-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por seoane
Pues que si guardamos la ruta completa del ejecutable, es imposible que dos aplicaciones tengan la misma ruta.
Je, je, sí, claro. Pero me gusta lo del hash porque, ¿qué impide borrar un ejecutable y poner otro con el mismo nombre en su lugar?

// Saludos
Responder Con Cita
  #20  
Antiguo 24-02-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
Je, je, sí, claro. Pero me gusta lo del hash porque, ¿qué impide borrar un ejecutable y poner otro con el mismo nombre en su lugar?
Hombre se trata de proteger el equipo, si el usuario va a tener permiso para borrar los programas instalados, que le va a impedir que comience a borrar programas y dejarnos el sistema destrozado. Como ya dije mas arriba, antes de meternos con cosas complicadas hay que tomar unas precauciones mínimas.

De todas formas, a mi también me gusta lo del hash
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Identificador de programas en ejecución Josue API de Windows 6 31-12-2006 21:15:51
alerta y comentario de fbdataadapter julyus .NET 0 20-10-2006 18:17:09
!Alerta! Delphi en TV mamcx Noticias 14 05-04-2005 19:01:13
Mensajes de alerta jmselesan PHP 1 08-12-2003 19:49:06
Ayuda con Ejecución de programas creados con Kylix 3 Enterprise Trial darkone2k3 Lazarus, FreePascal, Kylix, etc. 0 18-11-2003 15:58:56


La franja horaria es GMT +2. Ahora son las 17:22:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi