Si algo se parte en dos,
tendrás dos lugares distintos,
si ambos comprendes,
avanzarás.
domingo, 23 de mayo de 2010
sábado, 27 de marzo de 2010
Espacio libre
En un entorno con varios servidores en red, una de las cosas más importantes y que más suele pasar desapercibida es el espacio libre de sus discos duros.
Si una partición de un disco duro de un servidor comienza a quedarse sin espacio libre, las consecuencias suelen ser:
Automatizar lo anterior en un Directorio Activo con muchos servidores es posible utilizando Powershell y las Tareas Programadas en algún servidor.
Para ello, he escrito el script freespace.ps1 que busca en el Directorio Activo los nombres de todos sus servidores. Después, el script realiza las consultas adecuadas a los servidores dados, filtra resultados y si es necesario envía un email con la información pertinente al administrador del sistema para que pase a la acción.
freespace.ps1 debe estar ubicado en una carpeta de trabajo, por ejemplo, en c:\freespace
Ubicado freespace.ps1 en su sitio, es necesario editarlo y personalizar los valores de las siguientes variables que se encuentran al principio:
$limite = 1000000000 # con menos de un giga libre en una partición, se informa
$emailFrom = "pon_email_de@origen.es" # origen email
$emailTo = "pon_email_de@destino.es" # destino email
$smtpServer = "tu_servidor_smtp.tu_dominio.es" # servidor smtp de destino
$subject = "Particiones con menos de 1GB libre" # asunto
Una vez personalizadas las variables, guardamos los cambios del script y en la carpeta de trabajo creamos el archivo freespace.bat que debe contener la siguiente línea:
powershell c:\freespace\freespace.ps1
Por último, creamos una tarea programada que ejecute c:\freespace\freespace.bat una vez por semana. Los permisos de la tarea deben ser de un usuario que tenga acceso a todas las particiones de todos los servidores.
Un email enviado en un caso real es el siguiente:
Si una partición de un disco duro de un servidor comienza a quedarse sin espacio libre, las consecuencias suelen ser:
- Caída del rendimiento del servidor que contenga la partición.
- Caída del rendimiento de los servicios que utilicen tal servidor.
- Con el tiempo, la interrupción de los servicios que utilicen tal servidor.
- Si el servicio interrumpido se dedica a tareas de seguridad, mal vamos.
Automatizar lo anterior en un Directorio Activo con muchos servidores es posible utilizando Powershell y las Tareas Programadas en algún servidor.
Para ello, he escrito el script freespace.ps1 que busca en el Directorio Activo los nombres de todos sus servidores. Después, el script realiza las consultas adecuadas a los servidores dados, filtra resultados y si es necesario envía un email con la información pertinente al administrador del sistema para que pase a la acción.
freespace.ps1 debe estar ubicado en una carpeta de trabajo, por ejemplo, en c:\freespace
Ubicado freespace.ps1 en su sitio, es necesario editarlo y personalizar los valores de las siguientes variables que se encuentran al principio:
$limite = 1000000000 # con menos de un giga libre en una partición, se informa
$emailFrom = "pon_email_de@origen.es" # origen email
$emailTo = "pon_email_de@destino.es" # destino email
$smtpServer = "tu_servidor_smtp.tu_dominio.es" # servidor smtp de destino
$subject = "Particiones con menos de 1GB libre" # asunto
Una vez personalizadas las variables, guardamos los cambios del script y en la carpeta de trabajo creamos el archivo freespace.bat que debe contener la siguiente línea:
powershell c:\freespace\freespace.ps1
Por último, creamos una tarea programada que ejecute c:\freespace\freespace.bat una vez por semana. Los permisos de la tarea deben ser de un usuario que tenga acceso a todas las particiones de todos los servidores.
Un email enviado en un caso real es el siguiente:
sábado, 6 de marzo de 2010
Descubriendo troyanos 3/3
Ahora toca registrar las conexiones realizadas en Windows desde Windows.
Para ello, iniciamos Windows desde la máquina virtual e instalamos Wireshark. Abrimos Wireshark, elegimos el adaptador de red y comenzamos una captura de paquetes apuntando exactamente la hora y el minuto de inicio de la captura.
Ahora es el momento de abrir IE6 en Windows, navegar por páginas de dudosa reputación y aceptar todo lo que se ponga por delante. Cuanto más tiempo tenga la captura, más posibilidades tendremos de atrapar a algún troyano.
Cuando detengamos la captura de paquetes con Wireshark, exportamos los paquetes capturados mediante el menú File, Export, File..., y guardamos el archivo como export_w32.txt con formato de texto plano (plain text) en el directorio de trabajo.
El siguiente paso es extraer las IPs de las conexiones que se han realizado desde Windows hacia Internet, eliminar redundancias y mostrar más información de la IP (como ya hicimos con Ubuntu con el script conex_report.pl). Para ello, en el directorio de trabajo, ejecutaremos el script conex_report_w32.pl de la siguiente forma:
perl conex_report_w32.pl > windows.txt
Lo anterior genera el fichero windows.txt cuyo contenido será parecido a esto:

Ya tenemos todos los datos que necesitamos. Ahora tenemos que comparar los resultados de windows.txt y de ubuntu.txt para detectar sus diferencias. Para ello, copiamos el contenido de windows.txt, creamos otro windows.txt en el directorio de trabajo de Ubuntu y pegamos en él el contenido del primero.
La comparación de ambos ficheros la realizaremos con el script compara_conex_report.pl que ejecutaremos en el directorio de trabajo de Ubuntu donde también deben figurar los archivos ubuntu.txt y windows.txt
Para ello, iniciamos Windows desde la máquina virtual e instalamos Wireshark. Abrimos Wireshark, elegimos el adaptador de red y comenzamos una captura de paquetes apuntando exactamente la hora y el minuto de inicio de la captura.
Ahora es el momento de abrir IE6 en Windows, navegar por páginas de dudosa reputación y aceptar todo lo que se ponga por delante. Cuanto más tiempo tenga la captura, más posibilidades tendremos de atrapar a algún troyano.
Cuando detengamos la captura de paquetes con Wireshark, exportamos los paquetes capturados mediante el menú File, Export, File..., y guardamos el archivo como export_w32.txt con formato de texto plano (plain text) en el directorio de trabajo.
El siguiente paso es extraer las IPs de las conexiones que se han realizado desde Windows hacia Internet, eliminar redundancias y mostrar más información de la IP (como ya hicimos con Ubuntu con el script conex_report.pl). Para ello, en el directorio de trabajo, ejecutaremos el script conex_report_w32.pl de la siguiente forma:
perl conex_report_w32.pl > windows.txt
Lo anterior genera el fichero windows.txt cuyo contenido será parecido a esto:
Ya tenemos todos los datos que necesitamos. Ahora tenemos que comparar los resultados de windows.txt y de ubuntu.txt para detectar sus diferencias. Para ello, copiamos el contenido de windows.txt, creamos otro windows.txt en el directorio de trabajo de Ubuntu y pegamos en él el contenido del primero.
La comparación de ambos ficheros la realizaremos con el script compara_conex_report.pl que ejecutaremos en el directorio de trabajo de Ubuntu donde también deben figurar los archivos ubuntu.txt y windows.txt
Conclusión y aclaraciones:
Como el procedimiento explicado en el segundo y tercer post depende de ciertos scripts para permitir la automatización de tal, la presentación en PDF del primer post muestra el concepto general, mientras que el procedimiento detallado paso a paso es el siguiente:
Como el procedimiento explicado en el segundo y tercer post depende de ciertos scripts para permitir la automatización de tal, la presentación en PDF del primer post muestra el concepto general, mientras que el procedimiento detallado paso a paso es el siguiente:
- En un ordenador conectado a Internet mediante un router con IP 192.168.1.1 instalamos Ubuntu 9.10 (Karmic Koala).
- Ubuntu debe tener la interface de red eth0 con la IP 192.168.1.33, máscara 255.255.255.0 y un par de DNS válidas.
- En Ubuntu, instalamos el módulo de Perl Net::Whois::IP con CPAN.
- En Ubuntu, instalamos VirtualBox.
- Creamos una máquina virtual en VirtualBox para Windows XP, configuramos el adaptador de red en modo bridged. Iniciamos la máquina virtual e instalamos en ella Windows XP.
- En Windows XP configuramos la IP fija 192.168.2.35, máscara 255.255.255.0 y las mismas DNS que tiene Ubuntu.
- En Windows XP instalamos Strawberry Perl y Wireshark (implica la instalación de Winpcap).
- En Windows XP, instalamos el módulo de Perl Net::Whois::IP con CPAN.
- Ya tenemos todo montado.
- En Ubuntu, creamos NAT para la red 192.168.2.0 permitiendo su tráfico de E/S e iniciamos el logeo para el tráfico de dicha red. Para ello, en Ubuntu podemos crear un directorio de trabajo, bajamos a él este script en bash: captura.sh y lo ejecutamos en un terminal.
- En Windows XP, iniciamos Wireshark y empezamos a capturar paquetes apuntando la fecha, la hora y el minuto de comienzo de la captura de paquetes.
- Iniciamos IE6 en Windows XP y navegamos por webs maliciosas abriendo todo lo que se ponga por delante.
- Después de un tiempo prudencial (cuanto más mejor), detenemos la captura de Wireshark, exportamos los resultados a un archivo de texto plano llamado export_w32.txt y lo guardamos en un directorio de trabajo junto con el script conex_report_w32.pl
- Iniciamos una shell en Windows (Inicio, Ejecutar, cmd), vamos al directorio de trabajo y ejecutamos: perl conex_report_w32.pl > windows.txt
- Abrimos windows.txt, seleccionamos su contenido, lo copiamos y lo pegamos en otro windows.txt nuevo, pero en el directorio de trabajo de Ubuntu.
- En el directorio de trabajo de Ubuntu, bajamos los scripts conex_report.pl y compara_conex_report.pl
- En el directorio de trabajo de Ubuntu, ejecutamos en un terminal: perl conex_report.pl, le proporcionamos el mes, el día, la hora, el minuto y el segundo de inicio que tenemos apuntados de la captura con Wireshark y después el mes, el día, la hora, el minuto y el segundo de fin de captura. El tiempo de inicio debe ser lo más exacto posible, mientras que el tiempo final mejor que vaya sobrado.
- El resultado del script anterior es el fichero ubuntu.txt que contiene las IPs de conexión únicas con la información de whois en el intervalo de tiempo dado.
- Por último, en un terminal de Ubuntu y en el directorio de trabajo, ejecutamos: perl compara_conex_report.pl. Las IPs resultantes con su correspondiente información son las de las conexiones que inició Windows, que han sido capturadas por Ubuntu y no han sido capturadas por Wireshark desde Windows, esto es: conexiones realizadas por rootkits troyanizados. En caso de que el resultado no indique ninguna IP, quiere decir que todas las IPs de windows.txt y ubuntu.txt coinciden y todo es correcto: no hay rootkits en Windows.
lunes, 15 de febrero de 2010
Descubriendo troyanos 2/3
El post anterior trata sobre registrar las conexiones que inicia un Windows hacia Internet. Tal operación se realiza con un Linux y una máquina virtual donde "enjaular" a Windows.
Una vez registradas las conexiones en /var/log/kern.log, hay que extraer las IPs remotas y averiguar más información sobre ellas. Como el número de conexiones a una misma IP puede ser muy elevado, conviene eliminar redundancias, obtener la lista de IPs únicas visitadas en un rango de tiempo que indicaremos y obtener más información mediante el servicio whois.
Para ello, he preparado un script en perl conex_report.pl, que hace todo el trabajo y nos saca esa lista junto con alguna información relevante de whois y lo deja en el archivo ubuntu.txt.
Un ejemplo de la ejecución del script:

Y su correspondiente informe de conexiones únicas del archivo ubuntu.txt

En la tercera entrega, veremos cómo hacer lo mismo pero con las conexiones registradas dentro de Windows.
Una vez registradas las conexiones en /var/log/kern.log, hay que extraer las IPs remotas y averiguar más información sobre ellas. Como el número de conexiones a una misma IP puede ser muy elevado, conviene eliminar redundancias, obtener la lista de IPs únicas visitadas en un rango de tiempo que indicaremos y obtener más información mediante el servicio whois.
Para ello, he preparado un script en perl conex_report.pl, que hace todo el trabajo y nos saca esa lista junto con alguna información relevante de whois y lo deja en el archivo ubuntu.txt.
Un ejemplo de la ejecución del script:
Y su correspondiente informe de conexiones únicas del archivo ubuntu.txt
En la tercera entrega, veremos cómo hacer lo mismo pero con las conexiones registradas dentro de Windows.
sábado, 13 de febrero de 2010
Descubriendo troyanos 1/3
La mayoría de las veces, es infructuosa la búsqueda de troyanos en un Windows debido a los siguientes factores:
- Se ocultan con Rootkits
- Se propagan rápidamente vía web
- Existe muchísima variedad y cada vez más
- Muchos son 0-day que antes de ser descubiertos puede pasar mucho tiempo
La solución que propongo es enjaular un Windows en una máquina virtual, exponer a Windows como cebo para los troyanos (navegando con IE sin cuidado) y monitorizar las conexiones de red dentro de Windows y fuera de él (mediante el S.O. anfitrión) durante días.
Comparando ambos resultados, las conexiones remotas que estén registradas fuera de Windows y que no estén registradas dentro de Windows son, seguramente conexiones realizadas por rootkits troyanizados.
En esta presentación en PDF muestro cómo realizarlo con el siguiente software:
Comparando ambos resultados, las conexiones remotas que estén registradas fuera de Windows y que no estén registradas dentro de Windows son, seguramente conexiones realizadas por rootkits troyanizados.
En esta presentación en PDF muestro cómo realizarlo con el siguiente software:
- Ubuntu Linux 9.10
- Virtual Box 3.0.8 para Linux
- Windows, preferiblemente un XP pelado
- Internet Explorer 6
- WinPcap y WireShark
jueves, 10 de diciembre de 2009
Recopilación de herramientas
adsetuserpass: cambia contraseñas de usuarios del Directorio Activo con un script de PowerShell.
control-drivers: identifica a los drivers actuales de Windows y los compara con futuras versiones o drivers nuevos para comprobar cambios sospechosos.
dirsize: informa sobre los tamaños de todas las subcarpetas de una carpeta.
ejecutable.pl: script en perl para detectar archivos ejecutables sospechosos.
error-sys-events: realiza un informe con los sucesos de error de varios servidores Windows.
infosis: realiza un informe html recopilando hardware/software de un host Windows.
limpia-medios-extraibles: detecta y elimina (con confirmación) archivos sospechosos que pudieran estar en algún medio extraible como un pendrive.
regsys-net: realiza informes html del hardware/software de todos los hosts Windows de una red.
regsys: realiza un informe recopilando hardware/software de un host Windows.
userperm-net: informa sobre los permisos que tiene un usuario/grupo en todas las carpetas compartidas de un Directorio Activo.
Etiquetas:
directorio activo,
drivers,
malware,
PE,
pendrive,
perl,
powershell,
sysadmin
miércoles, 18 de noviembre de 2009
Informes de Windows masivos
Disponer de informes hardware/software de los ordenadores de una red administrada ahorra mucho tiempo al solucionar problemas.
Una muestra de los datos que se pueden incluir en estos informes puedes verla en el post de Informe del Sistema.
Para automatizar la elaboración de estos informes, las utilidades regsys e infosis extraen estos datos mediante WMI y el Registro de Windows en el mismo ordenador donde se ejecuta la utilidad y pasa los resultados a HTML.
Estas utilidades son muy prácticas al finalizar la instalación/configuración de un sistema Win32 nuevo, pero en el caso de necesitar los informes de decenas o cientos de ordenadores, por ejemplo, de un Directorio Activo, realizar los informes uno a uno es ineficiente.
Para automatizar esta tarea realicé regsys-net que hace lo siguiente:
Una muestra de los datos que se pueden incluir en estos informes puedes verla en el post de Informe del Sistema.
Para automatizar la elaboración de estos informes, las utilidades regsys e infosis extraen estos datos mediante WMI y el Registro de Windows en el mismo ordenador donde se ejecuta la utilidad y pasa los resultados a HTML.
Estas utilidades son muy prácticas al finalizar la instalación/configuración de un sistema Win32 nuevo, pero en el caso de necesitar los informes de decenas o cientos de ordenadores, por ejemplo, de un Directorio Activo, realizar los informes uno a uno es ineficiente.
Para automatizar esta tarea realicé regsys-net que hace lo siguiente:
- Ejecutas regsys-net con permisos de administrador de dominio en un ordenador que pertenezca al dominio (supongamos que este ordenador tiene la ip 192.168.1.56)
- regsys-net busca ordenadores para conectar con WMI desde la ip 192.168.1.1 hasta la 192.168.1.254 (busca en toda la subred en la que se encuentra)
- Si en su búsqueda, regsys-net encuentra un ordenador con el WMI disponible, conecta con él, le extrae la información mediante WMI y el Registro de Windows, y la pone en un archivo HTML, nombra al archivo HTML con el nombre DNS del ordenador correspondiente y lo guarda en la misma carpeta donde se encuentra regsys-net
Este proceso suele suele tardar entre una y tres horas. En el caso de necesitar informes de más ordenadores ubicados en otras subredes, bastará con repetir el proceso en algún ordenador de la subred correspondiente.
Observación: es necesario que los ordenadores con Windows Vista tengan iniciado el servicio Registro Remoto, así, regsys-net puede extraer la información del software instalado mediante el registro de Windows.
Observación: es necesario que los ordenadores con Windows Vista tengan iniciado el servicio Registro Remoto, así, regsys-net puede extraer la información del software instalado mediante el registro de Windows.
Suscribirse a:
Entradas (Atom)