Ver Mensaje Individual
  #14  
Antiguo 20-11-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por escafandra Ver Mensaje
Aunque consigas evitar la carga de la dll maliciosa en el arranque de tu app, siempre se puede inyectar con un pequeño ejecutable. Esto quiere decir que no puedes quedarte en la defensa de la carga, has de ir más allá y cambiar el código de protección. Además deberás comprobar, en ese código, que no está cargada una dll no deseada. Puedes usar la API GetModuleFileName para ello pues te da la ruta completa de la dll. También puedes explorar las funciones que exporta. Un hook a la indocumentada LdrLoadDll...
Ha surgido el tema que comenté sobre un Hook a LdrLoadDll. ¿Por qué esa y no LoadLibrary? Pues porque LoadLibrary termina llamando a LdrLoadDll y muchos inyectores optan por esta para saltarse a la primera. Su declaración delphi es como sigue:
Código Delphi [-]
type
PUNICODE_STRING = ^UNICODE_STRING;
UNICODE_STRING = record
  Length: WORD; //USHORT;
  MaximumLength: WORD; //USHORT;
  Buffer: PWCHAR; //PWSTR;
end;

function LdrLoadDll(PathToFile: PWCHAR; Flags: ULONG; ModuleFileName: PUNICODE_STRING; ModuleHandle: PHANDLE): DWORD; stdcall;
UNICODE_STRING es la estructura en el Kernel para el manejo Unicode

Un Hook a LdrLoadDll debe tener en cuenta que afectará a cualquier carga de dll, legal o no, dinámica o estática, con lo que se debe filtrar que dll se puede cargar y cual no.

El problema de los Hooks a las API es que no siempre deben sustituir los 5 primeros bytes, puede que en una versión Windows así sea, pero puede que una actualización cambie esto ligeramente y que el hook haga caer toda la aplicación, esto requiere un mini-desensamblador en tiempo de ejecución. El que tenga interés por el tema puede visitar este tema de hace unos años: HOOK a la API en delphi y en C (trampolín)

Para ilustrar un poco más el asunto anti-inyección podéis leer este otro tema: ¿Protegernos contra inyecciones dll?. Está enfocado a proteger aplicaciones externas pero nada impide hookear nuestra propia aplicación.

Quisiera añadir alguna idea más para los que no quieran depender de la conexión a Internet, puede encriptarse cadenas vitales, incluso fragmentos de código vital, que precisen de la clave del producto para descifrarse, no habrá condicionales pero, claro está, la seguridad dependerá del algoritmo criptográfico usado. Nada es infalible, sólo el aburrimiento del cracker puede dejarnos en paz y quizás estas cosas le aburran.


Saludos.
Responder Con Cita