La Probabilidad

La Probabilidad nos permite hacer conclusiones reales, predecibles y medibles sobre sucesos aleatorios.

https://www.youtube.com/watch?v=HDQMv7GKjSw

La probabilidad es un método mediante el cual se obtiene la frecuencia de un suceso determinado mediante la realización de un experimento aleatorio, del que se conocen todos los resultados posibles, bajo condiciones suficientemente estables.

La teoría de la probabilidad se usa extensamente en áreas como la estadística, la física, la matemática, las ciencias y la filosofía para sacar conclusiones sobre la probabilidad discreta de sucesos potenciales y la mecánica subyacente discreta de sistemas complejos.

Por favor consulte: http://es.wikipedia.org/wiki/Probabilidad

La vida era más linda en el Kinder

Primero que todo, este tipo de conceptos es esencial para personas que desean penetrar sus propios sistemas de defensa, con el objetivo de analizar, medir y mejorar sus propias infraestructuras de información y comunicación. De acuerdo a la ley no es recomendable realizar este tipo de comprobaciones contra terceros (aparatos, personas, corporaciones, estado) porque se les hace perder credibilidad y dinero, lo cual va a poner muy felices a sus abogados, equipos de seguridad y “guardaespaldas”.

DoS = “Denegación de Servicio”

Esto funciona más o menos así: Al entrar en una Página Web en la Internet, usted está enviando una solicitud a un Servidor, una infraestructura que probablemente puede manejar cierta cantidad de solicitudes a la vez, así que si usted envió más que una solicitud (de manera rápida, desde diversas partes, muchas a la vez y en grandes tamaños de paquetes) eso puede quebrantar un Servidor, y eso es lo que se conoce como “Denegación de Servicio”.

DDoS = “Denegación de Servicio Distribuido”

Por lo tanto, si usted desea realizar un programa (bot) DDoS, es bastante curioso analizar y medir su comportamiento en una Red local hecha por usted mismo, sin afectar a nadie que se pueda enfadar por tu espíritu de investigación e innovación (entender cómo funcionan y se previenen este tipo de “ataques maliciosos”). Los expermientos más interesantes de comprender son los que operan desde diversas máquinas huéspedes (hosts), por ejemplo, para afectar de manera simple el ancho de banda de un Servidor. Pero esto es un universo… hay muchas, muchas, muchas otras maneras de realizar pruebas del tipo “Denial of Service”, por ejemplo:

Sino me equivoco, creo que hasta ahora, no hay una solución específica para prevenir los ataques DoS/DDoS, pero lo que se puede hacer, es contar con un equipo IT consciente de la detección y la respuesta adecuada ante este tipo de “cosas de niños”, afinando de manera constante un firewall “de gran alcance” .

La vulnerabilidad no es una bendición

Ahora sí, busque en Google más información sobre esto, es realmente muy interesante.

¿Cómo funcionan los códigos de barras?

Comercio internacional

Hoy en día casi cualquier producto posee un código de barras, esto permite que un producto pueda ser identificado sin riesgo de confusión en cualquier parte del mundo, de manera ágil y sin errores.

Logística

Aunque funciona un poco diferente al estándar normal, el código de barras también es usado para el manejo de envíos, desde su recolección hasta su entrega (lo que permite su adecuado monitoreo).

Quick Response Code (QR Codes)

Self-Promotion

Hace unos días, conversando con una gran amiga que trabaja en la gestión cultural, me contaba pues, lo poco fácil que es para gestores, asociaciones, managers y los mismos artistas tener soluciones o estrategias propias en la Internet, sin que esto les salga a un precio muy elevado. Honestamente me dio pena ya que mi trabajo algunas veces no es tan barato, algo que ambos sabemos y hemos conversado miles de veces, yo creo de hecho, que el trabajo de ambos no es tan bajo, ni tampoco tan alto.

La cajita de pandora (Your brand)

Hoy me di cuenta que en una semana WordPress.org cumple 10 años y hay una gran alegría entre todos los diseñadores y desarrolladores que hemos usado y usamos WordPress para facilitar sitios Web elegantes. Por esta razón, quiero compartir el proceso simple que utilizo para colocar al aire un sitio Web. Por otro lado, DreamHost la compañía donde hospedo la mayoría de los Sitios Web basados en WordPress que gestiono, también es muy cool, todo a un click, además su soporte es confiable y rápido.

¿Qué me gano yo? La satisfacción de colaborar y hacerlo, sólo quiero compartir algo que es muy fácil de hacer y que todo el mundo piensa que es una carajada que sólo geeks pueden hacer. Además ya es hora, hay un montón de emprendimientos bastante interesantes que deberían estar allí, arriba en la Red (vender, promover, convocar, cooperar) aprovechando muchas de sus características y ventajas.

Antes de comprar, pruebe el hospedaje en DreamHost:

Instale WordPress, un diseño elegante y un “plugin” para comunicar sus eventos:

Lo realmente genial de WordPress, es que ofrece sin costo, una gran diversidad de Temas elegantes y Plugins que son una verdadera delicia:

Espero que les guste. Diviértanse.

¿Me gustaría saber que piensan?

VirtualBox + Debian + RAID1 + LVM

Nota: RAID no es un sustituto de una estrategia de respaldos, ya que los datos pueden dañarse o ser accidentalmente (o intencionadamente) borrados. Por otro lado, una estrategia de respaldos automático de tus cosas esenciales de forma regular es algo prudente de hacer.

Primero vamos a crear una máquina virtual, en este ejemplo, con dos discos, uno maestro y al menos otro esclavo. Seguidamente vamos a empezar la instalación de Debian Wheezy en la máquina invitada (antes hay que bajar la imagen de Debian en nuestra máquina anfitrión).

Los primero pasos para instalar Debian son muy sencillos y pueden ser realizados al gusto.

Seguidamente se muestra el proceso necesario para que la partición de root quede en un volumen RAID (“RAID 1 Mirroring”) gestionado con LVM.

Los últimos pasos para instalar Debian también son muy sencillos.

df -hT

df

watch -n 1 cat /proc/mdstat

proc_mdstat

cat /etc/mdadm/mdadm.conf

mdadm_conf

fdisk -l

fdisk

vgdisplay vg00

vgdisplay

lvdisplay /dev/vg00/var

lvdisplay

cat /etc/fstab

fstab

cat /etc/mtab

mtab

mount

mount

Virtualizando máquinas y discos duros

Caso RAID1 + LVM

Por ejemplo, en mi caso, necesito probar los conceptos relacionados con la integridad de datos:

incluyendo también los conceptos sobre la gestión de controladores de disco y dispositivos de almacenamiento masivo similares. Para ello necesito tener al menos un disco duro extra, un esclavo, el cual no tengo físicamente en este momento.

Gracias a la bondad, con VirtualBox puedo crear una Máquina Virtual Invitada con dos discos duros virtuales (en este caso) para hacer todo tipo de pruebas antes de progresar con un servidor de desarrollo a un servidor en producción (también para entender un poco más como se administran algunos de los Servidores Dedicados en 1&1).

Master and Slave

¿Qué es VirtualBox?

VirtualBox es un software de virtualización para arquitecturas x86/amd64. Por medio de esta aplicación es posible instalar sistemas operativos adicionales, conocidos como “Sistemas Invitados“, dentro de otro sistema operativo “Anfitrión“, cada uno con su propio ambiente virtual.

En mi caso, he instalado el sistema Debian Wheezy como invitado, dentro de mi sistema anfitrión Ubuntu.

VirtualBox

Una característica interesante es permitir la ejecución de maquinas virtuales de forma remota, por medio del Remote Desktop Protocol (RDP).

Nota: Los discos duros de los sistemas invitados son almacenados en los sistemas anfitriones como archivos individuales en un contenedor llamado Virtual Disk Image.

Instalación

Para conocer el nombre de código de la distribución, en esta caso Debian/Ubuntu:

echo $(lsb_release -sc)

Agregar la fuente de VirtualBox para obtener sus paquetes:

echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list

Para agregar obterner y agregar la llave pública de Oracle para apt-secure:

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -

Ahora sí, a instalar:

apt-get install virtualbox-4.2

Para asegurar la adecuda actualización de VirtualBox en el futuro.

apt-get install dkms

Nota: Para conocer la versión de VirtualBox antes de instalar:

apt-cache search virtualbox | grep -i oracle

Instalación de “Guest Additions”

Los “Guest Additions” están diseñados para ser instalados en una máquina virtual invitada después de que el sistema operativo invitado se ha instalado. Está compuesto por los controladores de dispositivos y aplicaciones de sistema que optimizan el sistema operativo invitado para un mejor rendimiento y facilidad de uso.

Para que funcione, requiere que la máquina invitada (que usa Debian Wheezy) haya sido instalada con un “Desktop”, por ejemplo “Gnome 3”.

apt-get install xserver-xorg gdm3 gnome

Por favor consulte:

Temperaturas, velocidades y voltajes

Con lm-sensors es posible vigilar de manera automática la temperatura de la CPU y otras temperaturas del sistema, las velocidades de los ventiladores y también los voltajes adecuados.

Instalación

apt-get install lm-sensors

Detección

sensors-detect

Verificar o agregar los módulos detectados anteriormente:

vi /etc/modules

Insertar los nuevos módulos en el Kernel:

service module-init-tools restart

Monitoreo automático con Monit

De esta manera resulta util tener “scripts” simples que verifiquen, por ejemplo, la temperatura de los Procesadores:

vi /etc/monit/conf.d/sensors.conf

check program core_0_temperature with path "/PATH/sensor-core-0.sh"
        group temperature
        if status > 75 then alert

check program core_1_temperature with path "/PATH/sensor-core-1.sh"
        group temperature
        if status > 75 then alert

Bash Scripts (chmod 500)

vi sensor-core-0.sh

#!/bin/bash

temperature=$(sensors | grep "Core 0" | awk '{printf ("%d",  $3)}')

#echo $temperature

exit $temperature

vi sensor-core-1.sh

#!/bin/bash

temperature=$(sensors | grep "Core 1" | awk '{printf ("%d",  $3)}')

#echo $temperature

exit $temperature

De la misma manera se puede vigilar la velocidad de los ventiladores y también ciertos voltajes esperados.

perl: warning: Setting locale failed

En caso de conseguir el siguiente error al instalar o ejecutar ciertos comandos en perl:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = "en_US:en",
	LC_ALL = (unset),
	LC_PAPER = "es_CR.UTF-8",
	LC_ADDRESS = "es_CR.UTF-8",
	LC_MONETARY = "es_CR.UTF-8",
	LC_NUMERIC = "es_CR.UTF-8",
	LC_TELEPHONE = "es_CR.UTF-8",
	LC_IDENTIFICATION = "es_CR.UTF-8",
	LC_MEASUREMENT = "es_CR.UTF-8",
	LC_TIME = "es_CR.UTF-8",
	LC_NAME = "es_CR.UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Se puede solucionar ejecutando los dos siguientes comandos:

locale-gen en_US en_US.UTF-8 es_CR.UTF-8

dpkg-reconfigure locales

Nota: Hay que sustituir “es_CR” por el lenguaje que imprime el error.

Introducción a IPTables

Linux Journal: Linux viene con un potente firewall incorporado, aunque su interfaz puede ser un poco intimidante. Este es el primer paso para dominar las funciones básicas y no tan básicas de IPTables para ir creando un Servidor seguro.

Netfilter es un framework disponible en el núcleo Linux que permite interceptar y manipular paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del procesamiento. Netfilter es también el nombre que recibe el proyecto que se encarga de ofrecer herramientas libres para cortafuegos basados en Linux.

Prevención contra escaneos y tráfico sospechoso

No es necesario ser totalmente paranoico

Prohibir una dirección IP es un beneficio limitado por:

  • Una IP puede ser suplantada de manera fácil.
  • Las IPs no son identificadores únicos, la mayoría de ISPs usan DHCP, por lo que se podría prohibir tráfico legítimo también.
  • Una nueva IP es fácil de obtener.
  • Muchos escáneres vienen de máquinas comprometidas (parece descuidado utilizar una dirección IP real para escanear).
  • Muchas IPs son compartidas. Por ejemplo, una dirección IP pública puede ser compartida por una gran organización o por una institución educativa, por lo que una vez más se podría bloquear tráfico legítimo.
  • Las listas negras de IPs muchas veces dañan más al tráfico legítimo que “los crackers”.

psad es la colección de tres “procesos demonio” (dos demonios principales y un demonio ayudante) que analizan los mensajes de registro (logs) de iptables para detectar escaneos de puertos y tráfico sospechoso.

  • /usr/sbin/fwcheck_psad
  • /usr/sbin/psad
  • /usr/sbin/psadwatchd

Una implementación común consiste en ejecutar psad para gestionar ciertas reglas de respuesta en el “Firewall”.

PSAD (Port Scan Attack Detector) es una herramienta util para detectar diversos tipos de tráfico sospechoso, incluyendo scaneo de puertos con herramientas como nmap, ataques DDos y otros esfuerzos utilizando fuerza bruta contra ciertos protocólos del sistema. Analizando los archivos de registro (logs), psad no sólo reconoce ciertos patrones de ataque, también gestiona adecuadamente ciertas reglas del “Firewall” para responder correctamente contra actividades sospochosas.

Detección y respuesta contra ataques

Cobertura significativa sobre psad, incluyendo un análisis completo de sus capacidades de análisis de logs de iptables y su capacidad para interactuar con software de representación gráfica como AfterGlow y Gnuplot, se puede encontrar en el libro “Linux Firewalls: Attack Detection and Response with iptables, psad, and fwsnort.”

Instalación

wget http://www.cipherdyne.org/psad/download/psad-VERSION.tar.gz

tar -xvzpf psad-VERSION.tar.gz

cd psad-VERSION

./install.pl

iptables -A INPUT -j LOG

iptables -A FORWARD -j LOG

En caso de usar UFW:

/sbin/iptables -I ufw-before-input -j LOG --log-level warning

/sbin/iptables -I ufw-before-forward -j LOG --log-level warning

Archivo de configuración

vi /etc/psad/psad.conf

Para ignorar o pesar ciertas IPs/Redes

vi /etc/psad/auto_dl

Actualización de “signatures”

psad --sig-update
psad -H

Probemos ¿Sí funciona?

Para probar psad, hay que observar el comportamiento de las reglas iptables en el Servidor que se encuentra protegido con su respectivo “Firewall” y psad:

Desde una computadora de la red (192.168.0.22), fuera de las IPs/Redes ignoradas:

sudo nmap -p- -sV -sS -O 192.168.0.1

Desde el servidor (192.168.0.1):

iptables -L | egrep -i 'PSAD|DROP|REJECT'

Archivos log

ls -la /var/log/psad/

tree ls -la /var/log/psad/

Iniciar, parar y re-iniciar

/etc/init.d/psad start
/etc/init.d/psad stop
/etc/init.d/psad restart

Algunas opciones interesantes

Listar las reglas en las cadenas iptables usadas por psad en modo “auto-blocking”:

psad --fw-list-auto

Estado de los procesos psad:

psad -S

Eliminar todas las reglas de bloqueo auto-generadas:

psad -F

Eliminar una IP/Red de las cadenas de bloqueo auto-generadas:

psad --fw-rm-block-ip 192.168.0.22

psad es desarrollado pensando en:

  • La buena seguridad de una red se inicia con un “Firewall” correctamente configurado.
  • Una cantidad significativa de datos de detección de intrusos se puede extraer de los registros log del “Firewall”, especialmente si los registros proporcionan información sobre la red y las cabeceras de transporte.
  • El tráfico sospechoso no debe ser detectado a costa de tratar de bloquear ese tráfico también.

Prohibir IPs que muestren signos maliciosos

Cabe destacar que:

  • Antes de usar cualquier tipo de programa para gestionar el “Firewall” de un Servidor, hay que hacer el amor con iptables.
  • Al hacer pruebas, es divertido bloquearte a ti mismo.
  • Las IPs son fáciles de suplantar, generar y hasta son compartidas, por lo tanto, es posible que se llegue a bloquear tráfico legítimo.
  • Los falsos positivos existen, por esta razón es necesario estar al pendiente de las pruebas y también de la medición y comparación de los resultados que rechazan IPs probablemente maliciosas.
  • En el contexto de seguridad de la red, un ataque “spoofing” es una situación en la que una persona o un programa se pone una mascara con éxito, falsificando datos que le permiten obtener ventajas ilegítimas.
    • REJECT, el cliente consigue un mensaje de conexión rechazada.
    • DROP, no hay mensaje de error para el cliente, responde como una especie de “black hole”.

Análisis y bloqueo

En servidores Linux, Fail2Ban analiza los archivos de registro (log) y prohibe las IPs que muestren signos maliciosos. Por ejemplo, para prohibir IPs con demasiados fracasos al introducir una contraseña o con muchas peticiones que busquen vulnerabilidades (exploits), etc.

En general Fail2Ban se utiliza para actualizar las reglas del “Firewall”, con las reglas necesarias para rechazar direcciones IP por un periodo de tiempo específico. Fail2Ban también se puede configurar con cualquier otra acción arbitraria (por ejemplo, desde el envío de un correo electrónico de alerta hasta por ejemplo, abrir la  bandeja del CD-ROM). Además el producto Fail2Ban, viene con varios filtros para diversos servicios como: apache, ssh, mysql, entre otros más.

Características principales de Fail2Ban

  • Arquitectura Cliente/Servidor.
  • Multi-hilos.
  • Altamente configurable.
  • Soporta FAM/Gamin/pyinotify.
  • Analiza los archivos de registro log y busca patrones específicos.
  • Ejecuta comandos cuando se detecta un patrón en una misma dirección IP durante más de X veces. X se puede cambiar a la medida.
  • Después de un cierto período de tiempo, se ejecuta otro comando con el fin de eliminar la prohibición sobre la dirección IP.
  • Por defecto utiliza Netfilter/Iptables, pero también puede utilizar TCP Wrapper (/etc/hosts.deny) y muchos otras “firewalls/actions”.
  • Gestiona la rotación de los archivos de log.
  • Puede manejar múltiples servicios (sshd, apache, vsftpd, etc).
  • Resuelve el nombre de host DNS a una dirección IP (utilizar con precaución, se desactiva con usedns = no).

Instalación

apt-get install fail2ban

dpkg-query -L fail2ban

Archivo de configuración a la medida (Jails)

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

vi /etc/fail2ban/jail.local

Filtros

Si desea modificar o añadir nuevos filtros, se puede hacer desde:

ls -la /etc/fail2ban/filter.d

Archivo log

tail -f /var/log/fail2ban.log

cat /var/log/fail2ban.log | grep WARNING

Por favor consulte: http://www.the-art-of-web.com/system/fail2ban-log/

man  fail2ban-client

Para habilitar una IP que haya sido prohibida:

fail2ban-client get {JAIL} actionunban {IP}

iptables -D fail2ban-{JAIL} -s {IP} -j DROP

Use el comando iptables -L -n para encontrar el nombre de la regla, por lo tanto, para obtener el nombre de las celdas debe usar:

fail2ban-client status

Por favor consulte: http://www.fail2ban.org/wiki/index.php/Commands

Probemos ¿Sí funciona?

Para probar fail2ban, hay que observar el comportamiento de las reglas iptables en el Servidor que se encuentra protegido con su respectivo “Firewall” y Fail2Ban:

Desde una computadora de la red (192.168.0.22), fuera de ignoreip en jail.local:

ab -n 1000 -c 5 http://192.168.0.1/

Desde el servidor (192.168.0.1):

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

iptables -L | egrep -i 'fail2ban|DROP|REJECT'

La prueba anterior requiere que exista una celda (jail) simple para prevenir cierto tipo de ataque del tipo “Denial of Service” contra Apache:

[http-get-dos]

enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/apache*/*access.log
maxretry = 120
findtime = 120

Entonces: vi /etc/fail2ban/filter.d/http-get-dos.conf

# Fail2Ban configuration file
#
# Author: http://www.go2linux.org
#
[Definition]

# Option: failregex
# Note: This regex will match any GET entry in your logs, so basically all valid and not valid entries are a match.
# You should set up in the jail.conf file, the maxretry and findtime carefully in order to avoid false positives.

failregex = ^ -.*\"(GET|POST).*

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
# ignoreregex =
ignoreregex = ^ -.*\"(GET|POST).*Googlebot

Iniciar, parar y re-iniciar

/etc/init.d/fail2ban start
/etc/init.d/fail2ban stop
/etc/init.d/fail2ban restart

Más pruebas

[ssh]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6

Probemos con 6 peticiones de ingreso mediante SSH, usando un usuario que no existe:

ssh usuariofalso@192.168.0.1