RSS |

Blog de Omar

Just another WordPress weblog

Advertisement

Archive for the ‘ Linux ’ Category

1Después de mucho tiempo me tomo algo de tiempo para escribir, sin más preámbulo voy a escribir sobre puertas traseras en sistemas operativos basados en Linux. Las puertas traseras o backdoors son mecanismos de acceso que se instalan o configuran en un servidor para poder tener un acceso  rápído y facil al después de haber tenido acceso al mismo. Hace algún tiempo escribí sobre backdoors en sistemas Operativos Windows, aquí puedes ver los posts:

  • Making Metasploit Backdoors – Parte 1 [AQUÍ]
  • Making Metasploit Backdoors – Parte 2 [AQUÍ]

Algunas premisas:

Antes de que inicies a leer este POST, debes tener en cuenta lo siguiente sobre los backdoors:

  1. Un backdoor se puede instalar cuando el sistema ya ha sido vulnerado (obvio pero lo digo por si acaso).
  2. Si alguna vez te dejaron un computador Linux por unos momentos, este post es para PARA TI.
  3. Un backdoor puede ser instalado si es que tenemos un acceso físico al computador. Por ejemplo: “Te dejo la compu un momento, voy al baño”, es aquí donde puedes aprovechar, es tu momento.
  4. La idea de un backdoor es pase lo mas desapercibido posible, es decir, que el sysadmin no sospeche que podemos acceder a su computador/servidor cuando nosotros querramos.

Bueno, sin más preámbulo iniciemos con los métodos para backdoorizar un sistema Linux.

 

Los archivos utilizados en este POST lo pueden descargar desde: [AQUÍ]

Método 01: Setuid Backdoors

Un poco de teoría

Todos hemos escuchado hablar de los permisos en Linux, verdad? obvio que sí pero de pronto algunos nunca escucharon de los permisos GETUID, SETUID y STICKY. Pues este mecanismo de backdoor está asociado a SETUID.

¿Entonces en que consiste el SETUID?

El SETUID es un bit que permite a las aplicaciones ejecutarse con los permisos de su propietario. El concepto puede sonar muy abstracto pero si ponemos un ejemplo es más facil entender, vamos a crear un archivo llamado TEST.C y lo compilamos.

image

 

Ahora vamos a ejecutar el archivo TEST con un usuario distinto al de ROOT y veremos que los comandos CAT /ETC/SHADOW y LS /ROOT no se ejecutarán debido a que no cuentan con los permisos requeridos. Sin embargo, si le asignamos el bit SETUID se logran ejecutar los comandos debido a que ahora cuentan con los permisos de su propietario, es decir, de ROOT.

image

 

Le asignamos el bit SETUID y vemos que se puede ejecutar los comandos.

image

 

Este es sólo un resumen  rápido del bit SETUID pero si aún te quedan dudas de como funciona puedes revisar los siguientes enlaces:

Ahora sí el BACKDOOR

Bueno, ahora que ya vimos algo de la teoría necesaria, vamos a plantar el backdoor en el servidor utilizando SETUID. Vamos a crear un pequeño programa en C en donde se ejecutar una shell con los permisos de ROOT al invocarlo, es decir, cada vez que un usuario diferente a ROOT ejecute este archivo vamos a obtener una SHELL con los permisos de ROOT. Lo que toca es colocar (o esconder) este ejecutable en un lugar en donde nadie pueda sospechar que exista y asi podremos tener una shell para acceder como ROOT cuando quisieramos.

 

image

 

Algunos son mas ingeniosos, es decir, imaginemos que tenemos un Sysadmin algo curioso y encuentra un ejecutable con un nombre extraño y lo ejecuta, caramba!! habremos sido descubiertos y tendremos que buscar una buena excusa para argumentar porque dejamos un backdoor. Debido a eso podemos ser un poco más ingeniosos y hacer parecer nuestro ejecutable malicioso un ejecutable conocido e inofensivo. Miran el siguiente ejemplo:

 

image

 

 

Método 02: Backdoors en Archivos .deb

Los archivos con extensión DEB son los paquetes utilizados por distribuciones Linux basados en Debian. Digamos que es algo así como un .EXE en Windows (algo así). Cuando los archivos .DEB son instalados ejecutan unos comandos de postinstalación, basicamente para borrar algunos archivos temporales creados durante la instalación, pues lo que vamos hacer es editar esos comandos que se ejecutan POST instalación para beneficiarnos. A continuación los pasos para colocar un backdoor en un archivo .DEB:

 

  1. Vamos a utilizar un archivo .DEB que sepamos que el sysadmin va a instalar, digamos que tenemos acceso al repositorio de instaladores que normalmente usa el sysadmin y vamos a colocarle un backdoor.
  2. Vamos a utilizar el archivo sudo.c que creamos en el ejemplo anterior para colocarlo dentro de la nueva estructura del archivo .DEB. Aquí vamos:

 

  • Descargarmos un paquete, en este caso el freesweep.deb pero puede ser cualquiera. Fijense que le hemos puesto la opción –download-only para que no se instale sino que sólo se descargue.
  • Creamos una carpeta de trabajo llamada /tmp/prueba/work y sobre esa carpeta vamos a trabajar y modificar el archivo .DEB

image

 

  • Ahora toca crear el archivo POSTINST que se ejecuta después de instalar el paquete .DEB, en el archivo POSTINST hemos añadido una línea para que nuestro backdoor funcione.

image

 

  • Finalmente, el sysadmin instala el paquete y la instalación generará el archivo /usr/share/menu/freesweep.old en el servidor. Este archivo luego puede ser utilizado por un usuario de menos privilegios para obtener una shell con permisos del usuario ROOT.

image

Algunos detalles:

El segundo método utilizado es algo tedioso si es que vemos que el resultado es el mismo que el primer método, obtener un ejecutable que nos permite acceder como ROOT; además hay ciertas desventajas:

  • El ejecutable malicioso llamado SUDO tendría que haber sido compilado en el mismo servidor o en un servidor con la misma infraestructura (lo que nos quita algo de tiempo)
  • Tardamos mucho en el segundo método, por lo que el primer método por ser más rápido seria a todas luces mucho mas conveniente. Sin embargo, que tal si colocamos un ejecutable que intente conectarse remotamente a través de NETCAT o a través de una conexión reversa. Ese mecanismo es ya conocido y está en portal web de Offensive Security así que no pienso repetirlo en el blog pero sí en el video de manera rápida.

 

Conclusiones:

  1. Nunca le dejes tu computador desbloqueado a nadie, menos con privilegios de ROOT.
  2. Si tu computador Linux ya ha sido vulnerado lo más probable es que te hayan dejado algún backdoor y no te des cuenta. Y si tienes algún ROOTKIT pues….. mejor dile adiós a tu sistema operativo.
  3. Trataré (no prometo nada) escribir más seguido.

 

*****************************************************

Popularity: 10% [?]

Sin mirarla en lo absoluto, con cierta pedantería de creer haber superado ya esa etapa y como ex novia que pasa por tu costado con su nuevo enamorado; es justamente así como se me había pasado el revisar algunos detalles del kernel que viene por defecto en la instalación de Linux (quizás algunos me entiendan).

Son de esas cosas que sólo las aprendes porque estas metido en el "asunto" ya que no te lo enseñan en ningún lado y por esas cosas del destino descubrí las diferencias entre el Kernel Default, SMP y BIGSMP.

Sin más preámbulo definamos los términos:

Kernel Default: Kernel que se instala por defecto cuando sólo tenemos un procesador y menos de 4 GB de memoria RAM en nuestra PC.

Kernel SMP: Symmetric Multiprocesor (SMP) es el Kernel compilado para poder usar más de un procesador y menos de 4 GB  de memoria RAM en nuestra PC.

Un poco de teoría

¿Cuánto direcciona como máximo un procesador de 32 bits?
232 = 4294967296 bytes = 4096 MB = 4GB, es decir si tenemos una PC de 32 bits y colocamos más de 4GB de memoria RAM simplemente no funcionará porque un sistema de 32 bits no está en la capacidad de poder hacerlo.

La solución para esta incapacidad es usar PAE (Physical Address Extension), tecnología desarrollada por Intel para que un sistema de 32 bits pueda utilizar hasta 64GB de memoria RAM, aunque en la práctica sólo hasta 48GB.

Sobre el método que utiliza PAE no pienso ahondar, la verdad es que en esos temas no tengo mucho interés, no despierta en mi la inquietud de investigar y como prefiero otro tipo de temas lo voy a dejar allí… sin embargo en Wikipedia pueden encontrar como es que funciona todo a un nivel inferior.

Sabiendo ahora este poquito de teoría podemos definir el Kernel BIGSMP.

Kernel BIGSMP: Kernel que trae soporte para PAE y SMP con lo que podríamos tener más de un procesador de 32 bits y además más de 4GB de memoria RAM.

Nota: A pesar de la explicación brindada, se recomienda usar SMP para máximo 3.5 GB de memoria RAM y para tamaños superiores a 3.5GB usar BIGSMP.

Como siempre las distribuciones….

Para nadie que maneje sistemas operativos Linux es un misterio que siempre tenemos que lidiar con las pequeñas diferencias entre las distintas distribuciones y este tema no es la excepción.

Seguro más de uno ya abrió su consola y ejecutó:

shell> uname -a, para ver que tipo de Kernel tienen instalados y otros habrán ejecutado:
shell> rpm -qa kernel, y ya algunos que tienen más de un procesador habrán notado que aparentemente tienen instalado un kernel convencional y más de un procesador funcionando sin haber necesitado de SMP, craso error! Y aquí la explicación:

Algunas distribuciones como Fedora, Centos y RedHat incorporan en su kernel convencional soporte para SMP, esto lo podemos verificar observando el archivo: /boot/config-2.6.XXX.i686, donde observaremos que ya se encuentra compilado el kernel para soportar SMP, aqui el extracto del archivo que nos interesa:

# Processor type and features
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_SMP=y

Además si quisiéramos usar memoria RAM superior a 4GB existe (para las distribuciones mencionadas: Fedora, Centos y RedHat) otro tipo de kernel no descrito, el kernel-pae, que trae soporte  soporte obviamente para PAE.

En otras distribuciones como Suse Enterprise y Open Suse (las versiones 9 y 10) se debe instalar el tipo de Kernel que necesitamos y que he descrito líneas arriba (DEFAULT, SMP o BIGSMP). Aunque en la página Novell informan que a partir de la versión 11de Suste el kernel convencional trae soporte para SMP y cuenta con un kernel-pae (al igual que Fedora, Centos y RedHat), de esta manera las distribuciones basadas en RedHat estarán homogéneas (particularmente me parece buena idea).

Ver para creer….

Si quieres comprobar todo lo arriba descrito puedes hacerlo de dos maneras:

  • Si usas Fedora, Centos o RedHat:
    - Compilar un kernel sin soporte para SMP y veras como no reconocerá más de un procesador. El año pasado hice un video tutorial de cómo compilar un kernel que pueden verlo aquí: [VIDEO TUTORIAL] y hacer algunas pruebas.
  • Si usas Suse u Open Suse:
    - Instala una máquina virtual con un solo procesador y luego agrega otro procesador, veras que solo reconocerá un procesador a menos que instales el kernel-smp (así fue como me involucre en este tema, una maquina virtual que no reconocía el segundo procesador)

Para Windows
Les comento rápidamente que el kernel de Windows trae consigo soporte para mas de un procesador y también trae soporte para PAE aunque para este último depende mucho de la versión de Windows que estemos usando, aquí les adjunto una tablita:

Versión

Max. Memoria Física

Windows 2000 Advanced Server

8 GB

Windows 2000 Datacenter Server

32 GB

Windows XP

4 GB

Windows Server 2003 Enterprise Edition

32 GB

Windows Server 2003 R2 (or SP1) Enterprise Edition

64 GB

Windows Server 2003 Datacenter Edition

64 GB

Windows Server 2003 Standard Edition

4 GB

Windows Vista

4 GB

Windows Server 2008 Enterprise or Datacenter Edition

64 GB

Windows Server 2008 other editions

4 GB

Hasta aquí llego este post, espero les pueda servir. Nos vemos.
Un agradecimiento a mi amiga Karen que escogió al tux sherlock mostrado como imagen en este post.

Popularity: 10% [?]

Recuerdo aun cuando estaba a la mitad de mi carrera universitaria, esos tiempos cuando tenia 19 años y el mundo era felicidad (o quizás tenía 20 años), cuando el mundo aún era real y hablar de máquinas “virtuales” era sinónimo de escuchar murmuros y ver rostros extrañados preguntándose de que están hablando.

Sin duda alguna hablar de maquinas virtuales en la actualidad es hablar de VmWare  y su diversa variedad de soluciones de virtualización con las que cuenta (sin desmerecer a los demás productos pero VmWare los aventaja en un gran trecho), algunos de pago y ahora también muchos gratuitos; recuerdo hace algún tiempo haber leído un blog en ingles donde el autor hacia todo un monologo y reflexionaba sobre el futuro de la virtualización llegando a la conclusión de que en un futuro no muy lejano virtualizar sería gratuito y al parecer la reflexión no fue errónea.

VmWare Server 2
A finales de este año (2008) se lanzó VmWare Server 2, que trae consigo algunos cambios significativos a tener en cuenta y que trataré de explicar en este post.

Instalación
Instalar VmWare Server 2 no difiere de las instalaciones de las versiones anteriores, aquí un pequeño resumen:

Sistema Operativo
Linux Fedora 9

Requerimientos

  • gcc (compilador por excelencia de C)
  • glibc-devel, glibc-headers, kernel-headers
  • kernel-devel (paquete indispensable si queremos evitar el clásico problema: What is the location of the directory of C header files that match your running kernel?)

 Proceso de Instalación
El proceso de instalación consta básicamente de 3 partes:

  • Construcción de los módulos necesarios que serán usados por VmWare
    • vmmon
    • vmci
    • vsock
    • vmnet
  • Configuración de los parámetros de red
    • Bridge
    • NAT
    • Host-Only
  • Configuración de usuario y puertos para administrar VmWare Server

No pienso acotar nada más sobre la instalación debido a que estoy en contra de la repetición e inundación de Internet con temas repetitivos y que no aportan nada nuevo; además los pasos son muy sencillos cualquier persona con mínimos conocimientos de informática podría hacerlo.

Algunos problemas sobre la instalación
La web esta llena de información y lamentablemente mucha de ella es redundante, errónea e imprecisa, el clásico problema que se le presenta a primerizos en la instalación de Vmware Server obedece al siguiente mensaje: “What is the location of the directory of C header files that match your running kernel?” esto ocurre cuando VmWare intenta compilar los módulos arriba mencionados pero lo sorprendente es la gran cantidad de soluciones brindadas de las cuales el 80% no son correctas, si se les presenta este error recordar que en la parte superior de este post están clarísimos los requerimientos.

¿Qué novedades trae VmWare Server 2?

  • Administración total basada en Web, VmWare Server 2 ya no cuenta con un cliente para VmWare Remote Console; en lo particular pienso que esto es un error porque sobrecarga al host.
  • Vmware Remote Console esta ahora basada en la web, para poder usarlo debemos instalar el plugin correspondiente para nuestro browser.
  • Aumento de memoria soportada, ahora soporta hasta 8 GB.
  • Soporte para nuevos SO, como Windows 2008 para 32 y 64 bits
  • Uso de Datastores: Lugar donde se almacenan las maquinas virtuales, esto se ha hecho para poder tener un orden y no crear maquinas virtuales donde queramos; además podríamos hacer uso aquí de protocolos como Samba y NFS.
  • Nuevo manejo de usuarios y roles
  • Mas acerca de las novedades [VmWare Server 2]

Primeros pasos con VmWare Server 2

En el servidor, arrancar el servicio VmWare

Shell> /etc/init.d/vmware start

Una vez iniciado el servicio, en el cliente debemos abrir nuestro browser y colocar: https://<ip_servidor>:8333, por defecto Vmware hace uso de https.
Aquí debemos ingresar la cuenta de root y el password para poder ingresar y administrar VmWare.

Nota:
Aquí se presenta otro problema, al ingresar nuestra cuenta de root y el password correcto nos aparece el siguiente mensaje: “The Server is not responding. Please check that the Server is running and accepting connections”, aquí la imagen:

Solución:
Deshabilitar selinux, para poder hacer esto debemos editar el siguiente archivo:

Shell> vim /etc/sysconfig/selinux, y modificar la opción SELINUX, quedando de la siguiente manera: SELINUX=disabled

Después de haber modificado la opción debemos reiniciar el servidor.
Después del reinicio accedemos a https://<ip_servidor>:8333 desde el cliente y podremos conectarnos sin ningún problema.

Accediendo a la Consola
Desde nuestro browser podemos crear/editar datastores y maquinas virtuales tal y como siempre se ha hecho en VmWare Server 1 o con VmWare Workstation, sin embargo al  acceder a la consola veremos lo siguiente:

Para acceder a la consola debemos instalar el plugin correspondiente a nuestro browser, en el caso de firefox bastaría con dar click en “Install plug-in” y se instalara como se hace cualquier otro plugin.
Esto nos abrirá otra pequeña ventana con la consola de nuestra maquina virtual.
Estos son los detalles de instalación y novedades que trae VmWare Server 2. Les dejo una última imagen del vmware console que trae el browser donde estoy instalando Rocks Linux. Hasta la próxima.

Popularity: 4% [?]

Tuning MySQL Server

Noviembre 3, 2008 | 4 Comments | Linux, MySQL

sakila_switchboardInstalar MySQL Server y comenzarlo a usar es muy sencillo, puede ser tan sencillo como saber instalar un rpm, quizas usar yum o apt-get y funcionara sin ningun problema, pero acaso dejar las opciones por defecto es suficiente? se podrian sorprender de la cantidad de opciones que tiene este sistema gestor de base de datos.

Escuchar frases como: "MySQL es una base de dato para principiantes", "MySQL es solo para pruebas", "MySQL es solo para empresas medianas"; son frases que han quedado en el pasado (alla por el 2004 y estamos a puertas del 2010), hablar ahora de MySQL es hablar de un sistema gestor de base de datos serio, rapido, de uso en empresas grandes y en sistemas de produccion y sobre todo practico, que no tiene  nada que envidiar a otras bases de datos y que ademas no tiene porque ser gratis ya que cuenta con un soporte segun las necesidades de nuestra organizacion.

Bueno volvamos al tema, hacer un tuning de nuestro servidor MySQL no es muy complicado solo requiere tener los conocimientos de como funciona nuestro servidor MySQL, por cuestiones de tiempo no podre explicar todo asi que solo mostrare donde hacer los cambios basicos.

El archivo que debemos modificar es my.cnf (en Windows no recuerdo el nombre, pero usen Linux es mucho mejor jejejeje), por lo general el archivo esta en /etc/my.cnf y debemos modificarlo para mejorar el rendimiento de nuestro servidor, en Fedora el archivo no contiene casi nada y las variables inician con sus valores por defecto, en mi caso mi archivo my.cnf quedo de esta manera:

Noten que todas las varibles deben estar dentro de la etiqueta mysqld.

[mysqld]

port = 3306
socket = /var/lib/mysql/mysql.sock
skip-lockingkey_buffer = 16
M
max_allowed_packet = 1M
table_cache = 64net_buffer_length = 8Kmyisam_sort_buffer_size = 8M
bind-addres= 0.0.0.0

## Ubicacion del log de consultas que superen long-query-time###
log-slow-queries=/var/log/mysql-slow.log
## Maximo tiempo antes de que se almacene en mysql-slow.log ###
long_query_time=3
## Almacene consultas en mysql-slow.log que no tengan indices ##
log-queries-not-using-indexes
## Cache para para llaves, se recomienda que sea el 25% de la memoria fisica total###
key_buffer_size=1024M
## Mejora la cache para consultas que contengan ORDER BY ####
read_rnd_buffer_size=4M
## Mejora el rendimiento de consultas GROUP BY ###
sort_buffer_size=512K
## Aumenta el buffer de lectura ###

read_buffer_size=4M
## Aumenta el buffer para el insert ###

bulk_insert_buffer_size=16M
## Aumenta buffer para consultas JOIN ###

join_buffer_size=1M

## aumenta cache de los ilos por conexion ##
thread_cache_size=1M
query_cache_size=64M
##Maximo de 50 conexiones simultaneas####
max_connections=50
##Tiempo maximo de conexion sin enviar informacion (3600 segundos)###
wait_timeout=3600

Coloque una breve explicacion a algunas opciones pero no a todas, les recomiendo que lean el manual de MySQL para saber que funcion cumplen todas los parametros colocados.

Pero como saber que nuestro servidor MySQL ha mejorado su rendimiento? pues eso lo tratare en el siguiente post.

Seria interesante que comenten sobre el uso de MySQL, es decir si lo usan para servicios en produccion y que tipos de servicios. Saludos!

Popularity: 4% [?]

Hola a todos, solo queria decirles que en este momento estoy respondiendo los 30 comentarios (que mas que comentarios eran dudas), sobre los siguientes posts:

- El arma secreta de PhpMyAdmin
- Pentaho (el mas solicitado)
- Mis video tutoriales: Desde aqui pueden encontrar todos mis videos
- Algunas preguntas sobre el modelamiento
- Otros variados

Gracias a todos por los comentarios, consejos, preguntas y espero sigan comentando.

PD: Yo no tengo nada en contra de las dudas cuando la persona que pregunta ha investigado o intento hacer algo y no le resulta pero hay dudas que dejan mucho que desear donde desean que les den todo en bandeja de plata, asi que sugiero que antes de preguntar consulten San Google.

Popularity: 1% [?]