domingo, 19 de enero de 2014

Proyecto de Seguridad Informatica | Sexta parte y ultima parte, Community Enterprise Operating System


Community Enterprise Operating System

CentOS (Community ENTerprise Operating System) es una bifurcación a nivel binario de la distribución Linux Red Hat Enterprise Linux RHEL, compilado por voluntarios a partir del código fuente liberado por Red Hat.
Red Hat Enterprise Linux se compone de software libre y código abierto, pero se publica en formato binario digital (ISO) solamente a suscriptores pagados. Como es requerido, Red Hat libera todo el código fuente del producto de forma pública bajo los términos de la Licencia pública general de GNU y otras licencias. Los desarrolladores de CentOS usan ese código fuente para crear un producto final que es muy similar al Red Hat Enterprise Linux y está libremente disponible para ser bajado y usado por el público, pero no es mantenido ni asistido por Red Hat. Existen algunos Clones de Red Hat Enterprise Linux y CentOS es uno de ellos.

Instalación de CentOS Server

La instalación de CentOS como cualquier otro Linux es sumamente sencilla y no requiere mucha atención cuando se hace un ambiente desatendido, aun que es importante realizar validación cuando se hace para un ambiente distribuido por que la distribución de FS y de Inodes es muy importante para ambientes grandes o de gran cantidad de uso de datos, por ello para no realizar un documento con muchas hojas por las pantallas de la instalación no se colocara la instalación del sistema operativo.

Instalación de SSH en CentOS Linux


[root@UNID-L-SRV01 ssh]# yum -y install openssh-server openssh-clients
[root@UNID-L-SRV01 ssh]# chkconfig sshd on
[root@UNID-L-SRV01 ssh]# service sshd start

con ello ya tenemos nuestro servicio tanto para cliente como servidor de sesiones ssh
ahora vamos a validar que el puerto 22 (el puerto de comunicación y acceso de ssh) se encuentre listo.

[root@UNID-L-SRV01 ssh]#  netstat -tulpn | grep :22

Configuración de SSH accesos permitidos y restringidos


Ahora el siguiente paso es validar y configurar el Firewall de CentOS
[root@UNID-L-SRV01 ssh]# vi /etc/sysconfig/iptables
Con un respaldo previo del archivo iptable realizamos el siguiente cambio agregando la siguiente línea en el archivo

-A RH-Firewall-1-INPUT –M state –state NEW –m tcp –p tcp –dport 22 –j ACCEPT

Lo que le indicamos en esta línea es que será alcanzable el servicio de SSH por cualquier IP solicitando acceso al puerto 22

Restricción de acceso a IP mediante SSH

Si nuestra intención es restringir un segmento de red el cual no nos intereza que tenga acceso al servidor obviamente sin tener credenciales, colocamos una negación de servicios de SSH en el FW, esto lo realizamos agregando la siguiente línea en el archivo de configuración en la cual definimos que la ip 192.168.221.X no le mandara el banner de SSH ya que tiene restringido la respuesta del servicio esto significa que no podrá ni siquiera ver la opción de login estas IPs

-A RH-Firewall-1-INPUT -s 192.168.221.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
Reiniciamos los servicios para que tomen efecto las configuraciones

[root@UNID-L-SRV01 ssh]# service iptables restart

Negar el login como root

Si iniciamos una sesión ssh como root al equipo remoto por default esta permitido lo cual es una mala practica, la buena practica para cualquier sysadmin de Linux es negar el acceso a root ya que es peligroso asi que primero validaremos si root puede hacer login remotamente

unixpro:~ oposada$ ssh root@192.168.221.231
root@192.168.221.231's password:
[root@UNID-L-SRV01 ~]# hostname
UNID-L-SRV01.UNID.SI.MX
[root@UNID-L-SRV01 ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@UNID-L-SRV01 ~]#

el login esta permitido, ahora pasaremos a negar el acceso a root
modificamos el archivo (con su previo respaldo)

[root@UNID-L-SRV01 ~]# vi /etc/ssh/sshd_config
ahora buscamos la línea que indica que root tiene permitido el login y cambiamos el =YES por =NO

# Authentication:
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
reiniciamos el servicio de SSHD
[root@UNID-L-SRV01 ~]# service sshd restart

Validamos las configuraciones aplicadas


unixpro:~ oposada$ ssh root@192.168.221.231
root@192.168.221.231's password:
Permission denied, please try again.
root@192.168.221.231's password:
Permission denied, please try again.
root@192.168.221.231's password:
Permission denied (publickey,gssapi-with-mic,password).
unixpro:~ oposada$

la configuración es la adecuada y funciona a la perfección.
Es importante NO negar el acceso ssh a otro usuario ya que la manera adecuada de administrar un sistema Linux es iniciar sesión mediante ssh con un usuario no root para autoría y desde ese usuario realizar un su – para poder usar root si se cuenta con los permisos y credenciales, validaremos a continuación ese acceso, para ello en la terminal ejecutamos las siguientes líneas.

unixpro:~ oposada$ ssh oposada@192.168.221.231
oposada@192.168.221.231's password:
Last login: Sat Dec  7 18:20:24 2013 from 192.168.221.1
[oposada@UNID-L-SRV01 ~]$ hostname
UNID-L-SRV01.UNID.SI.MX
[oposada@UNID-L-SRV01 ~]$ su -
Password:
[root@UNID-L-SRV01 ~]# hostname
UNID-L-SRV01.UNID.SI.MX
[root@UNID-L-SRV01 ~]#

Usar Banner de bienvenida al iniciar sesión en servidor Linux

En el directorio  “/etc/ssh/” creamos el archivo banner.txt en el cual vamos a colocar nuestro banner
Al termino guardamos y editamos el archivo
[root@UNID-L-SRV01 ssh]# vi /etc/ssh/sshd_config
colocamos la centena que mandara llamar el banner

# no default banner path
#Banner /some/path
Banner /etc/ssh/banner.tx



Reiniciamos el servicio sshd
[root@UNID-L-SRV01 ~]# service sshd restart

Y validamos accediendo de nuevo que nuestro banner esta activado.
Connection to 192.168.221.231 closed.
unixpro:~ oposada$ ssh 192.168.221.231
############## USTED ESTA ACCEDIENDO A UNID-L-SRV01.UNID.SI.MX #################

                                                                 #####
                                                                #######
                   #                                            ##O#O##
  ######    ###                                    #VVVVV#
    ##             #                                          ##  VVV  ##
    ##         ###    ### ####   ###    ###  ##### #####     #          ##
    ##        #  ##    ###    ##  ##     ##    ##   ##      #            ##
    ##       #   ##    ##     ##  ##     ##      ###        #            ###
    ##          ###    ##     ##  ##     ##      ###       QQ#           ##Q
    ##       # ###     ##     ##  ##     ##     ## ##    QQQQQQ#       #QQQQQQ
    ##      ## ### #   ##     ##  ###   ###    ##   ##   QQQQQQQ#     #QQQQQQQ
  ############  ###   ####   ####   #### ### ##### #####   QQQQQ#######QQQQQ

### CUALQUIER ACCESO ES MONITOREADO Y ES NOTIFICADO AL GRUPO DE ADMINISTRADORES ##
oposada@192.168.221.231's password:
Last login: Sat Dec  7 19:02:48 2013 from 192.168.221.1
[oposada@UNID-L-SRV01 ~]$

Nuestro banner esta correctamente configurado y funcionando

Instalación & Configuración de VSFTP en CentOS Linux


[root@UNID-L-SRV01 ~]# yum install vsftpd


[root@UNID-L-SRV01 ~]# service vsftpd start

las variantes de comandos para validar los estatus, reinicios, inicios o detener el servicio son los siguientes.

service vsftpd stop
service vsftpd restart
service vsftpd status

Los archivos de configuración del servicio vsftp están ubicados en la dirección /etc/vsftpd/vsftpd.conf

Validamos si el vsftpd tiene soporte para SSL

[root@UNID-L-SRV01 ~]# ldd /usr/sbin/vsftpd | grep libssl
            libssl.so.6 => /lib64/libssl.so.6 (0x00002b1177dbe000)

Realizamos un respaldo de archivo de configuración para contar con un roll back de realizar configuraciones erróneas del servicio

[root@UNID-L-SRV01 ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

Editamos el archivo de configuración


[root@UNID-L-SRV01 ~]#  vi /etc/vsftpd/vsftpd.conf
Y en la línea numero 12 validamos que el acceso para login de usuario anonymous se encuentre denegado

[root@UNID-L-SRV01 vsftpd]# service vsftpd restart

[root@UNID-L-SRV01 vsftpd]# service vsftpd status
vsftpd (pid 31864) is running...

reiniciamos los servicios y validamos que el proceso se encuentre corriendo correctamente
Ahora validamos que el usuario anonymous esta restringido al FTP login

unixpro:~ oposada$ ftp 192.168.221.231
Connected to 192.168.221.231.
220 (vsFTPd 2.0.5)
Name (192.168.221.231:oposada): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
ftp: Login failed
ftp>

Validamos si por un navegador web podemos realizar petición de acceso al FTP




El servicio de FTP funciona correctamente y es seguro al solicitar credenciales de acceso esto mediante un navegador web, ahora realizaremos el mismo ejercicio pero desde una terminal.

unixpro:~ oposada$ ftp 192.168.221.231
Connected to 192.168.221.231.
220 (vsFTPd 2.0.5)
Name (192.168.221.231:oposada): oposada
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
Remote directory: /home/oposada
ftp> ls -l
229 Entering Extended Passive Mode (|||43356|)
150 Here comes the directory listing.

Validación de servicio FTP de cliente Linux a Servidor CentOS



 
Se valida el acceso por ftp desde un cliente Ubuntu 13.10 el cual funciona correctamente.

Ahora validaremos el acceso al ftp desde un equipo Windows

Validación de Servicio de FTP de CentOS Server desde cliente Windows

 

 
El cual funciona correctamente solicitando credenciales de acceso previos al login


 Con ello se termina la sexta y ultima parte del proyecto de seguridad en servicios comunes de empresas como y alo notamos y validamos los servicios mas comunes en las compañias como lo son web, compartir archivos y escritorio remtoo o SSL en el caso de linux puden ser soportados en cualquier sistema operativo, no hay que casarnos con solo ventanitas o solo pinguinitos o solo manzanas, los sistemas son solo herramientas el uso de ellas es segun el maximo probecho del proyecto en el que estemos apoyando, siempre hay que penzar en seguridad, soporte y estabilidad asi como salvaguardar las leyes de seguridad informatica en cada proyecto (mismas expuestas y explicadas en los anteriores temas) en futuras ocaciones hablaremos de la seguridad de sistemas operativos y como realizar un adecuado Hardening a sistemas como windows server y Linux Red Hat Enterprise Edition, espero con lo poco que se de estos temas pueda ser de ayuda cuando tengan que realizar una infraestructura y no tengan ni idea de donde iniciar.

Proyecto de Seguridad Informatica | Quinta parte, Configuracion de RDP (protocolo de escritorio remoto de Windows) y resumen de las actividades

-->
llegamos a la 5ta pare de el proyecto de seguridad Informatica aplicando las mejores practicas para desarollar una infraestructura de servicios de negocio como servidor web con IIS en windows, Apache el CentOS Linux. entre otros servicios ya mencionados a lo largo de las ultimas 4to capitulos, ahora vamos a realizar la implementacion de servicios de forma segura como el tan usado RDP o protoolo de escritorio demoto de windows.

Servicio de Escritorio remoto (RDP)

En Windows 2012 server, por default no tiene conecciones mediante el protocolo RDP, remote desktop conection o conexión de escritorio remoto. Como en sus anteriores versiones este se instala como cualquier rol en Windows 2012, en los Linux es una buena practica NO tener conecciones mediante escritorio remoto mediante x11 para ello la contramedida es usar ssh ya que es una Shell segura, en Windows una forma segura de realizar el escritorio remoto es usando certificados como lo usamos para la web en SSL por certificado y en FTP, de igual manera usaremos el mismo certificado en del servidor UNID-IIS-01 para realizar el acceso remoto.

Validaciones de acceso remoto mediante RDP + certificado + permiso de Active directory en Windows server 2012

 

 
Como se muestra en la imagen 89 antes de realizar el intercambio de credenciales el servidor destino le solicita al cliente aceptar el certificado en el cual se firma la autenticación de la seguridad del ambiente y permite la conexión de ello,  es importante mencionar que este acceso esta aun reforzado mediante el grupo de permisos para escritorio remoto adjudicados en el grupo MASTER – UNID del active directory de no estar el usuario registrado en el active directory seria imposible formar un cliente al servidor de RDP. 

Validación de RDP en Linux



 

Por ultimo en la imagen 90 tenemos la validación de acceso mediante RDP de un cliente Linux Ubuntu 13.10 a un Windows server 2012 esto gracias a que Ubuntu esta firmado a Active Directory el usuario oposada es parte del grupo MASTER – UNID por ello tiene permisos ante el Active Directory para llegar al equipo UNID-ISS-01 el cual tiene un certificado de autenticación como segundo filtro de seguridad del ambiente, con este ultimo ejercicio cerramos el siclo de seguridad de servicios basados en ambiente Windows, espero les ayude en algo este recopilación y guía para aplicarlos en sus ambientes productivos. 

Resumen de ejercicio

Roles y servicios hay muchos para brindar a usuarios y/o clientes pero en cada uno de ellos se tiene como una buena practica separar cada servicio de cada servidor con el fin de no tener un impacto en un solo servidor y afectar a todos los servicios, con las buenas practicas mencionadas en las paginas anteriores tenernos lo conocimientos o la guía para realizar la implementación de un Windows server 2012 Enterprise edition de 64 bit con el cual podemos colocar servicios de infraestructura tecnológica Microsoft con el cual podemos soportar un servicio de Active directory con el cual gestionaremos los usuarios sus roles y los acceso, es importante mencionar que en este ejercicio todos los usuarios eran parte de un grupo llamado MASTER- unid como se menciono al inicio estos tenían libre acceso a los recursos compartidos de Windows mediante ftp así como navegación siempre y cuando se firmara el certificado de seguridad SSL en el equipo donde se solicita el acceso web esto con el fin de uno usar un protocolo de autenticación inseguro como lo es el http por puerto 80.

A manera de Plus, ahora vamos a conocer un poco de la distribución CentOS Linux, distribución de Linux con la cual podemos gestión y soportar todos los servicios antes mencionados pero de una forma de administración distinta que es a base de terminal y comando, así mismo de forma rápida gestionaremos como generar servicios de ssh, servicios de FTP y servicios web donde alojaremos y publicaremos nuestro servicio de ftp, todo esto en nuestraproxima ocacion.

viernes, 10 de enero de 2014

Como hackear cualquier usuario local de windows 7 con un boot USB Linux en 3 minutos.

La semana pasada un compañero de la oficina me comento que su contraseña había expirado y que le había pasado algo muy extraño pues le puso otra contraseña y no recordaba cual era, eso a las 9:00 AM para las 9:23 ya estaba histérico pues no encontraba la forma para resetear su contraseña de inicio de sesión localmente en su laptop con windows 7, me pidió que le diera un reset a su usuario lo cual lo realizamos aproximadamente en 3 minutos. 


Vulnerabilidad

La pantalla de login de windows permite realizar ejecucion de .exe`s esto es una vulnerabilidad ya que aun que el sistema este bloqueado con un reinicio del equipo y una USB con boot Linux permite la modificacion de el LINK de ejecucion de LUPA y modificar el LINK por la ejecucion de CMD. esta vulnerabilidad aplica a windows 7 y windows 8 en todas sus versiones.

Desarollo del escenario 



Windows 7, como Linux, como Mac Os X tienen un defecto, son invenciones humanas y siempre nuestras cosas mas creativas y perfectas tienen detallitos de seguridad. en windows 7 el sistema operativo que actualmente tiene el 69 % del mercado de laptops en México según encuestas que encontré en la red tiene un detalle vulnerable lo expongo a continuación. 

 
Cuando iniciamos el sistema windows notamos que si no sabemos cual es la contraseña del usuario en cuestión podemos ejecutar de un menú de opciones distintos accesorios o herramientas, entre ellos se encuentra la herramienta Lupa el cual se ejecuta sin ningún problema, pensando en el escenario mas malicioso posible yo soy un empleado con información confidencial y un sombrero negro contrata a un tipo aquí en la ciudad de México para que me asalte y me robe mi equipo de computo, el ladrón le entrega la laptop al sombrero negro y con una memoria USB boot con Linux se da cuenta que no esta encriptado el disco duro. 
 


Navegando entre las carpetas de el disco duro específicamente C:/windows/system32 se encuentra dos archivos con los cuales al modificarlos tendremos la consola de CMD a nuestra disposición. ¿Como es posible esto?

como lo vimos en la imagen anterior en el menú de login de win 7 hay la posibilidad de ejecutar .exe de lupa el cual el objetivo aquí es llamar el CMD.exe con la opción de LUPA. Lo primero que aria el sombrero negro es googlear para saber como se llama el ejecutable LUPA en windows lo cual no le costara mucho trabajo pues en las primeras 2 respuestas google nos dice que el ejecutable que manda llamar la lupa se llama Magnify.exe con esa información y el objetivo a hackear buscamos los archivos y con un previo respaldo .BKP podemos realizar el cambio de el ejecutable CMD.EXE cambiar el nombre por Magnify.exe como se muestra en la imagen. 



Con este cambio mandamos llamar con el acceso directo del boton de herramientas de login el cual manda llamar al ejecutable LUPA que se llama Magnify.exe pero ahora mandara llamar el EXE de CMD pues modificamos el nombre y este esta ligado mediante un menú que esta casado con el nombre Magnify.exe, ahora cuando en la pantalla de login ejecutamos lupa nos despliega la pantalla de CMD con la cual con un simple comando podemos ver los usuarios y sus privilegios;

net user 


nos despliega la lista de usuarios que en este caso hay 3 Administrador, Invitado y oposada.
modificamos las contraseñas de acceso con net user usuario nuevopassword
Ejemplo; net user oposada qwe123
y con ello ya realizamos el hack del acceso directo de LUPA que manda llamar ahora el CMD de windows y modificamos el password de Administrador y cualquier otro usuario que se nos antoje. 
un detallito curioso de como realizar un reset de un password y de cualquier usuario en un equipo windows seven. 

Contramedida a esta vulnerabilidad

Siempre hay que tener los equipos de compañías encriptados mediante contraseñas fuertes de montado con ello esta vulnerabilidad no funcionaria pues no importa si hacemos boot desde un sistema operativo Linux no podremos montar el disco duro si no sabemos la contraseña para montar el disco duro y modificar los archivos antes mencionados, una buena practica seria esta como una contramedida, espero que les ayude en el futuro. les paso el video de como lo realizamos esto en un ambiente de laboratorio.