lunes, 9 de marzo de 2015

SEGURIDAD BASICA EN LINUX

La progresiva disminución de costes del hardware, así como la constante mejora de su funcionalidad, ha generado un aumento considerable de instalación de redes tanto a nivel empresarial como doméstico.
Por otra parte, la conexión de dichas redes a Internet ha experimentado en estos últimos años un crecimiento exponencial debido, igualmente, al bajo coste de las tarifas de conexión. Este acceso masivo de redes interconectadas provoca un grave problema de seguridad y es a partir de finales de los años '80 cuando comienzan a aparecer los primeros gusanos de Internet

De esta forma salta la alarma respecto de la seguridad de los sistemas informáticos y comienzan a aparecer organizaciones cuya misión es ofrecer soluciones frente a problemas de seguridad.


Respecto de un sistema informático se puede decir que es seguro si está 'fuera de peligro', es decir está protegido. Pero, conseguir llegar a esta situación es prácticamente imposible. No existe un sistema completamente seguro. Todos los sistemas tienen sus vulnerabilidades, bien del propio sistema operativo o de las aplicaciones ejecutadas sobre él. Y todo lo que se puede hacer es aumentar la dificultad para que el sistema quede comprometido.

Otro punto que hay que tener en cuenta es que, en la medida en que el sistema es mas seguro se pierde funcionalidad. Hay que encontrar, por tanto, un equilibrio entre seguridad y funcionalidad. Desactivar todos aquellos servicios que no sean necesarios y proteger el sistema en todo aquello que sea básico es imprescindible.
Como es sabido, en un sistema Linux el usuario root es el que tiene el control total sobre el sistema. Puede hacer lo que quiera. Lógicamente, a un pirata informático lo que le interesa es obtener ese estatus de usuario root y a partir de ahí utilizar la máquina para los fines que el persiga, como utilizarla como pasarela para dejar falsas pistas sobre sus 'malas acciones', o junto con otras máquinas llevar a cabo un ataque distribuido de denegación de servicio (DDoS) , o ejecutar sus programas con la CPU de la máquina atacada, obtener datos para luego comercializar con ellos,...
La ventaja que tiene Linux frente a otros sistemas operativos es que es libre (Open Source) y su código fuente esta disponible para todo aquel que quiera verlo, estudiarlo, probarlo y corregirlo.Cualquier versión beta que se publique del núcleo de Linux es probada por una gran cantidad de programadores que hacen de banco de pruebas, bajo las mas diversas condiciones y que de esa forma colaboran a que el producto final sea de calidad.
La seguridad en un sistema se basa en los mecanismos de protección que ese sistema proporciona. Estos mecanismos deben permitir controlar qué usuarios tienen acceso a los recursos del sistema y qué tipo de operaciones pueden realizar sobre esos recursos.
Todo mecanismo de protección debe manejar 2 conceptos:

  • Recursos: son las partes del sistema utilizadas por los procesos.

  • Dominios de protección: son el conjunto de recursos y operaciones sobre estos recursos que podrán utilizar todos aquellos procesos que se ejecuten sobre él.

En general, en un sistema LINUX, el conjunto de recursos está formado por todos los archivos del sistema, y el dominio será un usuario y los procesos que el ejecuta y que, por tanto, tengan el mismo UID efectivo.
Para controlar el acceso de los dominios a los recursos se utilizan las Listas de Control de Acceso por cada recurso.
En Linux, para conseguir Listas de tamaño constante, se utilizan 2 técnicas:

  • Reducir el numero de operaciones posibles sobre un recurso (archivo): podemos controlar 3 operaciones sobre los archivos, que son la lectura (r), escritura (w) y la ejecución (x).

  • Reducir el número de dominios que aparecen en la lista. Esto se consigue mediante el concepto de grupos de usuarios.

Todos los usuarios de un sistema Linux deben pertenecer, al menos, a un grupo. Existen 3 grupos o categorías en la relación entre un dominio ( usuario ) y un recurso (archivo ):

  • Propietario: indica quién creó el archivo

  • Grupo del propietario: reúne a todos los usuarios que pertenecen al grupo del propietario.

  • Resto de usuarios: los que no crearon el archivo y no pertenecen al grupo del propietario.

Cuando encendemos el ordenador se ejecuta un software, llamado BIOS (Basic Input/Output System) cuya función es determinar la configuración de la máquina y proporcionar un sistema básico de control sobre los dispositivos. Este software se suele almacenar en memoria ROM (Read o­nly Memory) o FLASH que permite la actualización de la BIOS sin cambiar el chip.


LILO acepta una serie de opciones en línea cuando se ejecuta. En concreto, el argumento single es el más peligroso, ya que arranca Linux en modo monousuario y por defecto, la mayoría de las distribuciones vuelcan a un prompt de root en una shell de comandos sin pedir ningún tipo de contraseña. Es una puerta de entrada al sistema que se debe de cerrar.
GRUB es un gestor multiarranque de carga directa. No tiTambién se puede conseguir una shell para cambiar la password del root introduciendo en las opciones en línea del LILO lo siguiente:

linux init=/bin/bash rw

Estos agujeros de seguridad se puede minimizar añadiendo al archivo de configuración de LILO /etc/lilo.conf las opciones siguientes:

  • delay = 0 que controla la cantidad de tiempo (en décimas de segundo) que LILO espera a que el usuario introduzca datos antes de arrancar la opción por defecto.

  • prompt fuerza al usuario a introducir algo y LILO no arranca el sistema automáticamente. Puede ser útil en servidores para eliminar los reinicios desatendidos.

  • restricted, situada en la imagen/es a proteger, pide una contraseña si se pasan opciones en tiempo de arranque (como linux single).

  • password=CLAVE (contraseña no cifrada). Junto con la opción anterior y situadas dentro de la sección de la partición Linux a proteger evitan el acceso en modo 'single' desde el prompt del LILO. Si no se añade la opciónrestricted, la password se pedirá en cualquier caso.


Es importante eliminar el permiso de lectura sobre /etc/lilo.conf para el grupo y los otros, y de esa forma que no se pueda 'ver' la contraseña de LILO.
El comando chattr permite transformar el archivo /etc/lilo.conf en invariable, lo cual significa que, tenga los permisos que tenga, el archivo no se puede borrar, renombrar, escribir en él, o crearle enlaces. Solo el root puede hacerlo.

# chattr +i /etc/lilo.conf

Para luego introducir cualquier modificación en este archivo habrá que quitar el flag de invariable:

# chattr -i /etc/lilo.conf

Nada de lo dicho tiene sentido si no hemos desactivado desde la BIOS la opción de arranque desde diskette, ya que en él puede haber un LILO completamente distinto. O también se puede arrancar con un disco de una distribución y a continuación arrancar el núcleo como Linux single.
Si el gestor de arranque utilizado es el GRUB GNU el nivel de seguridad introducido es mayor.
ene un numero limitado de núcleos arrancables (bootables) y permite arrancar cualquier tipo de sistema operativo sin necesidad de conocer la posición física de su núcleo en el disco, solo la partición correspondiente.
GRUB presenta varias ventajas respecto de LILO, como, por ejemplo, no es necesario instalarlo cada vez que hacen modificaciones en su archivo de configuracion. Si que es necesario ejecutar la orden grub-install cuando se ha ejecutado un apt-get upgrade, para cargar la nueva version del paquete grub.
Para crear un diskette de arranque de GRUB hay que copiar los archivos 'stage1' y 'stage2' (etapas de ejecución del GRUB) del directorio /boot/grub/ en el primero y segundo bloque del diskette:

# dd if=stage1 of=/dev/fd0 bs=512 count=1

# dd if=stage2 of=/dev/fd0 bs=512 seek=1

Es importante disponer de este diskette por si hay algún fallo en el MBR y no arranca el equipo. Otra forma mas sencilla de obtener este diskette es, sin montar la unidad floppy, ejecutar la orden:

# cat /boot/grub/stage1 /boot/grub/stage2 > /dev/fd0

De la misma forma, es tambien interesante hacer una copia del MBR a diskette (o cualquier otro medio), sobre todo si se tienen varios sistemas operativos instalados.

# dd if=/dev/hda of=/floppy/arranque.mbr count=1

Si, por seguridad, se quieren suprimir las operaciones interactivas desde GRUB, añadir la directiva password en el archivo de configuración de GRUB /boot/grub/menu.lst de la forma:
password --md5 PASSWORD

GRUB de esta forma desactiva cualquier control interactivo hasta que se pulse p y se introduzca la contraseña correcta. El argumento md5 indica a GRUB que almacene la password encriptada. Si no se indica estará en texto plano. Ejecutar

# grub

grub> md5crypt

pide la password y la devuelve encriptada. Se debe copiar en /boot/grub/menu.lst.
Otra medida de control de acceso al sistema puede consistir en provocar rearranques sucesivos del sistema cuando se intente entrar en el en modo 'single'. Para ello habrá que añadir, en el archivo de configuración /etc/inittab, alguna de las líneas siguientes:

ls:S:wait: shutdown -t0 -r now

ls:S:off:/sbin/sh

ls:S:once:/shutdown -r now

ls:S:once:/bin/sh -c `exec login`

Todas ellas impiden, de formas diversas, la entrada al sistema en modo single root (S).


La palabra de protección contiene 16 bits cuyo contenido se interpreta según se muestra en la figura siguiente:



La palabra de protección forma parte del contenido del nodo-i del archivo, que es la estructura que almacena información relativa a dicho archivo, como son el propietario, grupo, fechas de creación-modificación-acceso, tamaño, etc. Parte de los contenidos del nodo-i son visibles con la orden ls y la opción -l.

-rwxr--r-- 1 root root 512 Nov 24 17:59 arranque.mbr

Es conveniente que el administrador asigne al sistema, por defecto, una máscara de permisos umask restrictiva. Por ejemplo 077 e incluirla en /etc/profile. La orden umask establece los permisos que no se asignaran a los archivos. En el caso de 077 (---rwxrwx) al crear un archivo tendrá los permisos rw-------. Ejecución no se asigna por defecto.
Dentro de la palabra de protección del archivo, en la que se reflejan los diferentes permisos para los diferentes tipos de usuarios, existen unos bits que ocupan las posiciones 10, 11, y 12 cuyo estado puede comprometer de alguna forma la seguridad del sistema. Estos bits son:
  1. Sticky-bit (bit t/T sobre other) que activado sobre un directorio indica que un archivo de ese directorio solo puede ser borrado por: el propietario del archivo, el propietario del directorio o el root. Si aparece t, el bit sticky está a uno y el bit de ejecución de otros (other) está también a 1. Si aparece T el bit sticky está a uno y el bit de ejecución de otros está a 0. La orden que activa el sticky-bit sobre el directorio /home/usuario1/ es la siguiente:

# chmod +t /home/usuario1/

# ls -l /home

drwxr-xr-t 13 usuario1 usuario1 4096 Apr 16 2004 usuario1

Esta opción está activada por defecto en los directorios del sistema /tmp y /var/tmp/, que son utilizados por muchos programas. Estos programas presuponen que nadie puede borrar sus archivos una vez que han sido creados. Si se elimina de ellos el sticky-bit pueden quedar expuestos a ataques symlink. Este tipo de ataque aprovecha la creación de archivos temporales, por parte de algunos programas, en estos directorios y si dichos archivos tienen los permisos adecuados es posible crear enlaces simbólicos entre ellos y archivos del sistema, como /etc/passwd, y conseguir el permiso de escritura sobre él al ejecutar dicho script.

  • Bit SGID (bit s/S sobre group) que activado sobre un archivo, da los derechos del grupo a quien lo ejecuta, y solo durante la ejecución. Si aparece s el bit de setgid está a uno y el bit de ejecución del grupo está a 1. Si aparece Sel bit de setgid está a uno y el bit de ejecución del grupo está a 0.

  • Bit SUID (bit s/S sobre owner) que activado en un archivo ordinario, asigna los derechos del propietario del archivo a quien lo ejecuta, y solo durante el tiempo de ejecución. El sentido de s/S es el mismo que en SGID. La orden que activa el bit SUID sobre un archivo es la siguiente:

# chmod +s /home/archivo

El clásico ejemplo de archivo setuidado es el comando /usr/bin/passwd. Y es necesario que sea asi, ya que el usuario que cambia su password debe poder escribir sobre el archivo /etc/shadow cuya propiedad es del root y necesita temporalmente los privilegios del root.

-rwsr-xr-x 1 root root 26616 May 10 2004 /usr/bin/passwd

Si alguno de los programas con el bit SUID activado presenta algún agujero de seguridad, a través de ellos un potencial atacante puede adquirir privilegios de root. Por lo tanto es importante comprobar qué archivos en el sistema son SUID y vigilar si aumentan en número. Las ordenes siguientes permiten conocer qué archivos del sistema tienen activado el bit SGID y el bit SUID:

# find / -type f ( -perm -2000 -o -perm -4000 )

donde 2000 y 4000 son números en octal.

Es importante que el administrador impida la ejecución de archivos con el bit SUID activado en aquellos directorios en los que los usuario tienen permiso de escritura, como es el caso de /home. La primera medida sera aislar /home en una partición de disco independiente y a continuación, en el archivo /etc/fstab, activar la opción nosuid para dicha partición.

DIA CIENTO SETENTA Y SIETE 09/03/2015

Hoy en diseño gráfico dimos el movimiento psicodelia y tenemos que tener listo para el viernes la portada de un CD de un grupo musical o cantante con dicho estilo. Yo escogi a Emilie Autumn, su album Enchant y voy a partir de la idea de la mariposa.
En programación estamos con teoría,leyendo, comprendiendo, resumiento y subiendo al blog.

ADMINISTRACION DE USUARIOS LINUX

Linux es un sistema multiusuario, por lo tanto, la tarea de añadir, modificar, eliminar y en general administrar usuarios se convierte en algo no solo rutinario, sino importante, además de ser un elemento de seguridad que mal administrado o tomado a la ligera, puede convertirse en un enorme hoyo de seguridad.


Tipos de usuarios



Los usuarios en Unix/Linux se identifican por un número único de usuario, User ID, UID. Y pertenecen a un grupo principal de usuario, identificado también por un número único de grupo, Group ID, GID. El usuario puede pertenecer a más grupos además del principal.

Aunque sujeto a cierta polémica, es posible identificar tres tipos de usuarios en Linux:

  • Usuario root: También llamado superusuario o administrador

- Su UID (User ID) es 0 (cero).

- Es la única cuenta de usuario con privilegios sobre todo el sistema.

- Acceso total a todos los archivos y directorios con independencia de propietarios y permisos.

- Controla la administración de cuentas de usuarios.

- Ejecuta tareas de mantenimiento del sistema.

- Puede detener el sistema.

- Instala software en el sistema.

- Puede modificar o reconfigurar el kernel, controladores, etc.

  • Usuarios especiales: Ejemplos: bin, daemon, adm, lp, sync, shutdown, mail, operator, squid, apache, etc.

- Se les llama también cuentas del sistema.

- No tiene todos los privilegios del usuario root, pero dependiendo de la cuenta asumen distintos privilegios de root.

- Lo anterior para proteger al sistema de posibles formas de vulnerar la seguridad.

- No tienen contraseñas pues son cuentas que no están diseñadas para iniciar sesiones con ellas.

- También se les conoce como cuentas de "no inicio de sesión" (nologin).

- Se crean (generalmente) automáticamente al momento de la instalación de Linux o de la aplicación.

- Generalmente se les asigna un UID entre 1 y 100 (definifo en /etc/login.defs)

  • Usuarios normales: Se usan para usuarios individuales.

- Cada usuario dispone de un directorio de trabajo, ubicado generalmente en /home.

- Cada usuario puede personalizar su entorno de trabajo.

- Tienen solo privilegios completos en su directorio de trabajo o HOME.

- Por seguridad, es siempre mejor trabajar como un usuario normal en vez del usuario root, y cuando se requiera hacer uso de comandos solo de root, utilizar el comando su.

- En las distros actuales de Linux se les asigna generalmente un UID superior a 500.

/etc/passwd



Cualquiera que sea el tipo de usuario, todas las cuentas se encuentran definidas en el archivo de configuración 'passwd', ubicado dentro del directorio /etc. Este archivo es de texto tipo ASCII, se crea al momento de la instalación con el usuario root y las cuentas especiales, más las cuentas de usuarios normales que se hayan indicado al momento de la instalación.

El archivo /etc/passwd contiene una línea para cada usuario, similar a las siguientes:



root:x:0:0:root:/root:/bin/bash
sergio:x:501:500:Sergio González:/home/sergio:/bin/bash



La información de cada usuario está dividida en 7 campos delimitados cada uno por ':' dos puntos.

/etc/passwd
Campo 1
Es el nombre del usuario, identificador de inicio de sesión (login). Tiene que ser único.

Campo 2
La 'x' indica la contraseña encriptada del usuario, además también indica que se está haciendo uso del archivo /etc/shadow, si no se hace uso de este archivo, este campo se vería algo así como: 'ghy675gjuXCc12r5gt78uuu6R'.

Campo 3
Número de identificación del usuario (UID). Tiene que ser único. 0 para root, generalmente las cuentas o usuarios especiales se numeran del 1 al 100 y las de usuario normal del 101 en adelante, en las distribuciones mas recientes esta numeración comienza a partir del 500.

Campo 4
Numeración de identificación del grupo (GID). El que aparece es el número de grupo principal del usuario, pero puede pertenecer a otros, esto se configura en/etc/groups.

Campo 5
Comentarios o el nombre completo del usuario.

Campo 6
Directorio de trabajo (Home) donde se sitúa al usuario después del inicio de sesión.

Campo 7
Shell que va a utilizar el usuario de forma predeterminada.




/etc/shadow



Anteriormente (en sistemas Unix) las contraseñas cifradas se almacenaban en el mismo/etc/passwd. El problema es que 'passwd' es un archivo que puede ser leído por cualquier usuario del sistema, aunque solo puede ser modificado por root. Con cualquier computadora potente de hoy en día, un buen programa de descifrado de contraseñas y paciencia es posible "crackear" contraseñas débiles (por eso la conveniencia de cambiar periódicamente la contraseña de root y de otras cuentas importantes). El archivo 'shadow', resuelve el problema ya que solo puede ser leido por root. Considérese a 'shadow' como una extensión de 'passwd' ya que no solo almacena la contraseña encriptada, sino que tiene otros campos de control de contraseñas.

El archivo /etc/shadow contiene una línea para cada usuario, similar a las siguientes:

root:ghy675gjuXCc12r5gt78uuu6R:10568:0:99999:7:7:-1::
sergio:rfgf886DG778sDFFDRRu78asd:10568:0:-1:9:-1:-1::


La información de cada usuario está dividida en 9 campos delimitados cada uno por ':' dos puntos.

/etc/shadow
Campo 1
Nombre de la cuenta del usuario.

Campo 2
Contraseña cifrada o encriptada, un '*' indica cuenta de 'nologin'.

Campo 3
Días transcurridos desde el 1/ene/1970 hasta la fecha en que la contraseña fue cambiada por última vez.

Campo 4
Número de días que deben transcurrir hasta que la contraseña se pueda volver a cambiar.

Campo 5
Número de días tras los cuales hay que cambiar la contraseña. (-1 significa nunca). A partir de este dato se obtiene la fecha de expiración de la contraseña.

Campo 6 Número de días antes de la expiración de la contraseña en que se le avisará al usuario al inicio de la sesión.

Campo 7
Días después de la expiración en que la contraseña se inhabilitara, si es que no se cambio.

Campo 8
Fecha de caducidad de la cuenta. Se expresa en días transcurridos desde el 1/Enero/1970 (epoch).
Campo 9
Reservado.

/etc/group


Este archivo guarda la relación de los grupos a los que pertenecen los usuarios del sistema, contiene una línea para cada usuario con tres o cuatro campos por usuario:

root:x:0:root

ana:x:501:

sergio:x:502:ventas,supervisores,produccion

cristina:x:503:ventas,sergio

/etc/group

Campo 1
Nombre del usuario.

Campo 2
'x' indica la contraseña del grupo, que no existe, si hubiera se mostraría un 'hash' encriptado.

Campo 3
Es el Group ID (GID) o identificación del grupo.

Campo 4

Es opcional e indica la lista de grupos a los que pertenece el usuario



pwconv y pwunconv



El comportamiento por defecto de todas las distros modernas de GNU/Linux es activar la protección extendida del archivo /etc/shadow, que (se insiste) oculta efectivamente el 'hash' cifrado de la contraseña de /etc/passwd.
Pero si por alguna situación de compatibilidad se requiriera tener las contraseñas cifradas en el mismo archivo de /etc/passwd se usaría el comando pwunconv:

#> more /etc/passwd

root:x:0:0:root:/root:/bin/bash

sergio:x:501:500:Sergio González:/home/sergio:/bin/bash

...

(La 'x' en el campo 2 indica que se hace uso de /etc/shadow)

#> more /etc/shadow

root:ghy675gjuXCc12r5gt78uuu6R:10568:0:99999:7:7:-1::

sergio:rfgf886DG778sDFFDRRu78asd:10568:0:-1:9:-1:-1::

#> pwunconv

#> more /etc/passwd

root:ghy675gjuXCc12r5gt78uuu6R:0:0:root:/root:/bin/bash

sergio:rfgf886DG778sDFFDRRu78asd:501:500:Sergio González:/home/sergio:/bin/bash

...

#> more /etc/shadow

/etc/shadow: No such file or directory

(Al ejecutar pwunconv, el archivo shadow se elimina y las contraseñas cifradas 'pasaron' a passwd)

#> ls -l /etc/passwd /etc/shadow

-rw-r--r-- 1 root root 1106 2007-07-08 01:07 /etc/passwd

-r-------- 1 root root  699 2009-07-08 01:07 /etc/shadow




En cualquier momento es posible reactivar la protección de shadow:

#> pwconv

Se vuelve a crear el archivo shadow, además nótese los permisos tan restrictivos (400) que tiene este archivo, haciendo sumamente difícil (no me gusta usar imposible, ya que en informática parece ser que los imposibles 'casi' no existen) que cualquier usuario que no sea root lo lea.

/etc/login.defs



En el archivo de configuración /etc/login.defs están definidas las variables que controlan los aspectos de la creación de usuarios y de los campos de shadow usadas por defecto. Algunos de los aspectos que controlan estas variables son:

  • Número máximo de días que una contraseña es válida PASS_MAX_DAYS
  • El número mínimo de caracteres en la contraseña PASS_MIN_LEN
  • Valor mínimo para usuarios normales cuando se usa useradd UID_MIN
  • El valor umask por defecto UMASK
  • Si el comando useradd debe crear el directorio home por defecto CREATE_HOME

Basta con leer este archivo para conocer el resto de las variables que son autodescriptivas y ajustarlas al gusto. Recúerdese que se usaran principalmente al momento de crear o modificar usuarios con los comandos useradd y usermod .













COMO FUNCIONA LA WEB (TCP/IP)



Los protocolos TCP/IP son fundamentales para el desarrollo de internet tal como hoy la conocemos. Su misión es complementaria y tiene como objetivo el que la información llegue a su destino de la manera más eficiente posible.

Suponiendo que un mensaje es un puzzle, el protocolo TCP es el encargado de desmontar cada una de las piezas y memorizar el orden para poder reconstruirlo, cada una de las piezas pueden viajar incluso por caminos diferentes, sin embargo al llegar a su destino el mismo protocolo TCP será el responsable de hacer coincidir otra vez el rompecabezas, incluso si detecta que por el camino alguna pieza se ha estropeado, es capaz de volver a pedir un recambio original para reconstruir la información.

Por otra parte, el protocolo IP es el encargado de hacer llegar a su destino cada una de las piezas, él memoriza de dónde vienen y cuál es su periodo de caducidad. El trabajo conjunto de los dos protocolos hace que la información llegue a nuestro ordenador desde cualquier parte del mundo y en muy poco tiempo, o no.



analytics