vZack
Noviembre 19, 2008, 05:18:09 pm *
Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Ya estamos online!
 
   Inicio   Ayuda Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Evitar ataques dos y ddos, capítulo I: httpflood  (Leído 825 veces)
vZer
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 279


WWW
« en: Agosto 19, 2008, 09:08:03 pm »

Title: Evitar httpflood sin tener acceso a herramientas administrativas

1.- ¿Que es httflood?
Httpflood es un tipo de ataque de denegación de servicio que se basa en el envio de peticiones http al servidor objetivo.

2.- ¿Que necesitamos?
-Acceso a los logs del apache
-Poder modificar archivos del servidor
-Que el servidor tenga soporte a php y .htaccess
-Que el servidor tenga mod_rewrite

3.- Introducción
A veces nuestras webs son atacadas por personajillos que intentan tirarla con una tool hecha por terceros, como por ejemplo con el programa doshttp. Normalmente atacan a archivos .php de el servidor, y entonces el php es compilado una y tra vez. En esos casos el uso de la cpu puede llegar al 100%; es hay cuando los trabajadores del hosting nos cierran la cuenta por sobrepasar el uso de cpu que pone en sus terminos y condiciones de uso.
En este manual conseguiremos parar al atacante Cheesy

4.- Detectando el ataque
Tenemos que tener acceso a los logs de apache. Veremos que si un ataque a sido bastante potente pueden llegar a pesar gb's, pero normalmente eso no suele ser asi ya que el hosting nos cierra la cuenta antes :p

4.0.1-Leiendo logs de apache

Normalmente los logs de apache tienen el siguiente formato:
[ip] [hora] [peticion] [respuesta] [user-agent]

Un ejemplo:
Código:
1.2.3.4 - - [06/Dec/2007:00:29:41 -0800] "GET /index.php HTTP/1.1" 403 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
En ese caso 1.2.3.4 la ip 06/Dec/20... la fecha GET /index..... La peticion, 403 la respuesta (forbidden), mozilla... el navegador

Los codigos basicos de respuesta son:
404 - no encontrado
403 - Prohibido
200 - OK


Cuando los logs pesan alrededor de 300 mb o mas esta bien utilizar esta utilidaz para que separe los logs en diferentes archivos de menos tamaño:
http://vzack.com/descargar.php?dir=/Programas%20utiles/&archivo=hjsplit.exe

Nota: Si no teneis logs de apache podeis usar el script que crea logs adjuntado al final de este mismo post.
5.- Tipos de ataques:

5.1- Unico atacante con la misma ip y un user agent "normal"
Ejemplo de log de apache:

Código:
1.2.3.4 - - [06/Dec/2007:00:29:41 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:41 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:41 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:41 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:41 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:41 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:42 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:42 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:42 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:42 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:42 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"
1.2.3.4 - - [06/Dec/2007:00:29:42 -0800] "GET /index.php HTTP/1.1" 200 590 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)"

Como vemos en ese ejemplo es un atacante de la ip 1.2.3.4 que hace 6 peticiones por segundo, eso no es mucho pero puede llegar a colapsar la mysql.

Estas ips las podemos evitar manualmente escribiendo en el .htaccess del dir en el que se encuentra el archivo este código:
Código:
Order allow,deny
DENY FROM 1.2.3.4
Ese codigo lo que hace es denegar el acceso a 1.2.3.4 y la proxima vez que haga una peticion le saldra error 403
Nota: Tambien podemos usar el antidos que se encuentra al final de este mismo manual

5.2- Diferentes ips con el mismo user-agent
Si los bots tienen un user-agent en comun, podemos banearlo desde el .htaccess.
Log de Ejemplo:
Código:
189.192.49.142 - - [04/Dec/2007:17:36:53 -0800] "GET / HTTP/1.1" 200 11962 "-" "vb-wininet"
201.255.158.89 - - [04/Dec/2007:17:36:53 -0800] "GET / HTTP/1.1" 200 11948 "-" "vb-wininet"
200.92.54.238 - - [04/Dec/2007:17:36:54 -0800] "GET / HTTP/1.1" 200 633 "-" "vb-wininet"
200.92.124.84 - - [04/Dec/2007:17:36:57 -0800] "GET / HTTP/1.1" 200 633 "-" "vb-wininet"
200.77.3.129 - - [04/Dec/2007:17:36:57 -0800] "GET / HTTP/1.1" 200 11955 "-" "vb-wininet"
200.92.124.84 - - [04/Dec/2007:17:36:58 -0800] "GET / HTTP/1.1" 200 632 "-" "vb-wininet"
200.92.124.84 - - [04/Dec/2007:17:36:59 -0800] "GET / HTTP/1.1" 200 632 "-" "vb-wininet"
200.92.124.84 - - [04/Dec/2007:17:37:03 -0800] "GET / HTTP/1.1" 200 633 "-" "vb-wininet"
200.92.54.238 - - [04/Dec/2007:17:37:04 -0800] "GET / HTTP/1.1" 200 633 "-" "vb-wininet"
200.92.124.84 - - [04/Dec/2007:17:37:04 -0800] "GET / HTTP/1.1" 200 632 "-" "vb-wininet"

Para esto necesitamos tener el modulo mod_rewrite de apache. Para bannear ese user agent pondriamos este codigo en el .htaccess:

Código:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} vb-wininet
RewriteRule .* - [F,L]


5.3- Distintas ips con distintos user-agent "normales"

En estos casos no se puede bannear al user-agent ya que nuestros visitantes habituales tambien usaran ese mismo user-agent y se les bloqueara el acceso.

En estos casos lo mejor es usar el anti-dos adjuntado abajo, y si eso no resuelve el problema comprar un servidor dedicado e instalarle un buen firewall.


6.- Fin del manual y referencias
Con estas simples tecnicas podremos detener httpflood causados por noobs pero nunca un httpflood potente con una botnet/gusano de mas de 30 bots.

Y eso es todo Cheesy.

Todos los logs han sido extraidos de los logs de ataques a vZack.


Script para crear logs usando php:
modificar la config y hacerle un include
Código:
<?php
error_reporting
(0);
//config

$logsdir '/home/hondamena/public_html/logs/';

//fin de config
$ua $_SERVER['HTTP_USER_AGENT'];
$ip getenv('REMOTE_ADDR');
$uri $_SERVER['REQUEST_URI'];
$fecha date("Ymd");
$hora date("H:i:s");
$current realpath('./');
chdir($logsdir);
if(!
is_file('.htaccess')) file_put_contents('.htaccess''DENY FROM ALL');
$filenamelog $fecha.'.dat';
file_put_contents($filenamelog"$ip - $hora - $uri - $ua");
chdir($current);
?>

Script que deniega acceso a bots con php usando cookies:
Código:
<?php
$nombrecookie 
'botid';
$logdir '/home/xxx/public_html/logz/'//con la / final
$tupaag 'http://vzack.com';

//fin config
$ip getenv('REMOTE_ADDR');
setcookie($nombrecookie'1'); 
if(!
$_COOKIE[$nombrecookie]){
header('location: '.$tupag);
exit;
}
?>
En línea

xoptik
Inactivo
*
Desconectado Desconectado

Mensajes: 4


« Respuesta #1 en: Agosto 31, 2008, 03:45:16 am »

cuando sale la segunda parte?
En línea
Angel_of_Death
Inactivo
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 4


El cielo es mi limite


« Respuesta #2 en: Agosto 31, 2008, 06:44:14 am »

se ve interesante espero la segunda parte grax

 Salu2  Wink
En línea

vZer
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 279


WWW
« Respuesta #3 en: Septiembre 28, 2008, 02:21:15 am »

Espero acabar la segunda parte para dentro de una semana :p
En línea

En3rgy
Desastre natural
**
Desconectado Desconectado

Mensajes: 10


« Respuesta #4 en: Octubre 05, 2008, 06:48:12 pm »

Interesante ..   =D

Haber la siguiente parte

+1
En línea
c4x30x
Inactivo
*
Desconectado Desconectado

Mensajes: 1


« Respuesta #5 en: Octubre 20, 2008, 12:03:09 am »

y la otra parte? ya va mucho tiempo  :Smiley
En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.1 | SMF © 2006-2008, Simple Machines LLC XHTML 1.0 válido! CSS válido!