1
INDICE
Redactores
Diseño
Zyrus
www.zyrusweb.com
Web
www.dragonjar.org
2
Adminisrtración y Seguridad en
Wordpress
Acerca del autor 2. ¿Qué es Wordpress?
3
Esperando Revisión(Nuevo en Wordpress 2.3) La última versión de Xampp actualmente es la
y Privado (sólo usuarios registrados) además 1.6.6a. Para descargar Xampp lo puedes descargar
de uno adicional: Protegido con contraseña. del sitio oficial u otros enlaces.
• Publicación mediante email.
• Guardado automático temporizado del artículo Sitio Oficial: http://www.apachefriends.org/en/
como Borrador (A partir de la versión 2.2). xampp.html
• Permite comentarios.
• Permite permalinks (enlaces permanentes y Descarga Directa: http://superb-east.dl.sourceforge.
fáciles de recordar) mediante mod_rewrite. net/sourceforge/xampp/xampp-win32-1.6.6a.zip
• Distribución de los artículos mediante RDF,
RSS 0.92, RSS 2.0 y Atom 1.0. La instalación de Xampp es muy sencilla. Cuando
• Distribución de las discusiones (mediante RSS hemos descargado la aplicación, la descomprimimos
2.0 y ATOM 1.0). y la ejecutamos.
• Gestión y distribución de enlaces.
• Admite plugins.
• Widgets para los Themes.
• Uso de Etiquetas para cada post
5. Herramientas de Instalación
6. Instalando Wordpress
4
no Filezilla?, bueno pues Filezilla es un cliente FTP
que solo utilizarías si instaláramos nuestro Blog en
un Server de Internet, por eso no lo necesitamos…
Luego de esto damos clic en Install. Luego de instalar
aparece una ventana como esta:
Luego dale finalizar y después de una que otra ven- Todos los archivos que ubiquemos dentro de esta
tana de cmd.exe se estará ejecutando normalmente carpeta se visualizarán en http://localhost/archivo
nuestro servidor local. Es importante que mientras
se este instalando Xampp no cierres ninguna de 6.2 Instalando nuestro Blog
las ventanas anteriormente descritas ya que si las
cierras, cerraras algún servicio importante que evite Como ya hemos descargado el paquete de Wor-
avanzar en este manual. Luego dale clic en si y listo dpress simplemente se descomprime para utilizar
no es más. su contenido. Debe quedar descomprimido de tal
manera que si entramos a la carpeta Wordpress se
vea este contenido:
5
1. Nombre de la base de datos
2 Nombre de usuario de la base de datos
3. Password e la base de datos
4. Host de la base de datos
5. El prefijo (si usted quiere controlar más de un
WordPress en una sola base de datos)
6
Luego si los datos son correctos daremos clic a
Aquí podemos crear la base de datos que necesi- Submit
tamos y muchas más si queremos. Para crear una
base de datos escribe el nombre y da clic en crear,
como lo muestra la imagen.
7
Unknownmind y observamos el archivo llamado
Después de entrar al panel de administración sería
wp-config.php damos clic derecho y elegimos abrir
indispensable que cambies el password por uno más
con WORDPAD… Aparecerá este código:
accesible pero no menos seguro… Entonces para
eso nos vamos a Usuarios
8
do a instalar un theme. Haré un pequeño ejemplo de
Recomiendo esta página para descargar themes de instalación, la verdad no se con que plugin hacerlo…
Wordpress. Lo haré con el plugin de encuestas…Que se llama
Wp-Polls
http://www.wpthemesfree.com Descargalo de http://wordpress.org/extend/plugins/
wp-polls/
El cual puedes elegir entre colores, número de
columnas, los 10 mejores votados, etc. Cuando ya lo hemos descargado, lo descomprimi-
mos y lo subimos a la carpeta C:\xampp\htdocs\Unk-
Cuando hayas descomprimido el paquete del the- nownmind\wp-content\plugins, luego vas al panel de
me lo ubicas en C:\Xampp\htdocs\Unknownmind\ administración en la parte derecha se encuentra el
wp-content\themes. Luego nos vamos al panel de link Plugins
administración y donde dice Diseño: Buscas el plugin y lo activas.
9
Como segundo ejemplo de la instalación de un
Puedes ver al lado izquierdo los códigos y al lado
plugin, es más dedicada a los amantes del Futbol
derecho las plantillas… Cada plantilla u archivo tiene
(como yo ) se trata de un plugin para observar los
un código diferente o similar que hace que tu Blog
resultados e información de los juegos de la EURO-
se vea y se comporte de tal manera. Al lado dere-
COPA 2008.
cho busquemos un archivo llamado sidebar.php o
barra lateral y demos clic en él. Al lado derecho se
Primero descargaremos el plugin de aquí
encontrará el código del sidebar de tu theme. Ahora
http://downloads.wordpress.org/plugin/wp-em-08.
para agregar la encuesta debes agregar este código
zip
a tu sidebar.php:
<?php if (class_exists(‘EM08’))
{EM08::currentMatch(1);}?>
10
estandares Web
11
nuestro Blog datos muy pero muy personales,
WP-ServerInfo: Información del Server que aloja esto se presta a Ingeniería social.
tu Blog • Si tu Blog es personal lo ideal sería que tú seas
WP-Sticky: Deja post estáticos el único administrador, a menos que creas
WP Dash Note: Pequeña agenda en el panel de administradores de confianza.
administración • No distribuyas información delicada a través
WP-SWFObject: Para agregar mp3 y animacio- de tu Blog
nes en flash a tu Blog • Recuerda el aumento de Blogs es directa-
mente proporcional al robo de identidad. Por
8. Seguridad en Wordpress esta razón insisto en mantener tu información
personal delicada fuera de tu Bitácora.
Bueno en realidad la seguridad informática no es • Crea post privados (con password) para infor-
un tema aparte en nuestro Blog, algunos Blogers mación de importancia media.
descuidan en un 99.9% la seguridad de su CMS. ¿De • No sigas solamente estos Tips, busca los que
quien nos defendemos? De Lammers, de defacers, más puedas por Internet. Te recomiendo http://
de intrusiones de crackers, de espías de informa- www.blogsecurity.net
ción, etc. A muchos Geeks o diseñadores Web no
les gustan los CMS con la excusa de que son todos
vulnerables… Buuuu que mentira….
12
Descárgalo de http://www.im-web-gefunden.de/
8.2 Cambio del prefijo de las tablas antes wp-content/downloads/plugins/role-manager.zip
de la instalación Después de la instalación observaremos una mo-
dificación en el panel de administración.
Bueno este paso prácticamente lo observamos Si observamos la pestaña Roles nos encontramos
detalladamente cuando instalamos nuestro Blog con los diferentes niveles de usuario y estamos en la
Wordpress… capacidad de modificar sus roles…un poco más abajo
El prefijo que viene predeterminado es wp_ observamos una opción para crear nuevos roles de
simplemente lo cambiamos por otro diferente… usuario.
Existe un plugin que cambiar el prefijo de las tablas
después que hemos instalado wordpress y no lo 8.4 Restringir wp-content y wp-inclu-
cambiamos…Lamentablemente es incompatible des
con wordpress 2.5. Más adelante sale la versión
compatible… Para este paso vamos a limitar el acceso a estas
dos carpetas solamente tendrá acceso imágenes,
8.3 Cambio del nombre de usuario CSS y algunos archivos JavaScript. Dentro de las
El nombre de usuario por defecto que Wordpress carpetas wp-content y wp-includes se encuentran
crea es admin. Es necesario cambiarlo, para evitar los archivos .htaccess los cuales modificaremos de
ataques de fuerza bruta a nuestro Blog. No sola- esta manera en su contenido:
mente cambiar el nombre de usuario sino también
el password. Para cambiar el nombre de usuario Order Allow,Deny
Deny from all
admin debemos entrar al panel de administración e <Files ~ “.(css|jpe?g|png|gif|js)$”>
iremos a usuarios el cual nos mostrará los usuarios Allow from all
</Files>
registrados de nuestro Blog, si observamos estará
nuestro nombre de usuario admin el cual hay que Esto aplica para Blogs alojados en un servidor en
modificar. Internet y para sitios de un solo Blog, ya que si tene-
mos varios blogs generarán algunos problemas.
Ahora crearemos otro usuario, en mi caso
Unknownmind y un tipo de password como 8.5 Restringir wp-admin
unkn$wn08*, no olvides los privilegios de este
nuevo usuario el cual debe hacer Administrador. Esto aplica cuando nuestro Blog se encuentra
Luego nos vamos de nuevo a usuario y eliminamos alojado en un host en Internet:
el usuario admin. Si controlas un Blog de un solo usuario podemos
Ahora ya hemos creado el usuario Unknownmind restringir el acceso al directorio wp-admin vía IP.
que es administrador del Blog. Como estamos lo- Para esto necesitamos que nuestra IP sea IP estáti-
geados como admin, simplemente damos salir y ca. Si vamos por FTP a nuestro directorio wp-admin
nos logeamos como el nuevo administrador. buscamos el archivo llamado .htaccess
Posteriormente le atribuimos todas las entradas y
enlaces al nuevo administrador. Para cambiar nuestra Abrimos el archivo .htaccess y escribimos
contraseña simplemente nos vamos a usuarios y luego
perfil. Order deny,allow
Allow from 0.0.0.0 #Esta es tu IP estática
Deny from all
Para un mayor control en seguridad de usuarios
existe un plugin llamado role-manager el cual define Si ha sido correcto el cambio, todas las IPs que
y maneja múltiples perfiles de suscriptor. Aquí se entren a http://www.tublog.com/wp-admin/ no po-
ubica el link de la descarga y la instalación. Pero drán acceder, solamente tu IP en este caso 0.0.0.0,
debo aclarar que este plugin no es compatible con el cual es el parámetro que debes cambiar puede
wordpress 2.5 acceder completamente a este directorio que es
muy importante para nuestro Blog.
13
Si se quiere agregar más seguridad modifiquemos 8.8 Wpids
el archivo .htaccess dentro del directorio wp-admin
de esta manera: BlogSecurity ha desarrollado PHPIDS el cual es
un plugin que trabaja como un sistema de detención
AuthUserFile /srv/www/user1/.htpasswd #this file de intrusos, cada intrusión es logeada en la base de
should be outside your webroot. datos y esto nos ayuda a tomar medidas de rastreo
AuthType Basic del intruso.
AuthName “Blog”
require user youruser #making this username http://php-ids.org/downloads/
difficult to guess can help mitigate password
brute force attacks. La verdad no he tenido tiempo de probar su funcio-
namiento o errores… Pero cumplo con informar…
Donde se debe modificar youruser el cual tendrá
acceso total a este directorio. 8.9 Wordpress Online Security Scanner
8.6 Restringir acceso al wp-login y wp- Wordpress Online Security Scanner es un plugin
admin evitando fuerza bruta el cual lo podemos instalar temporalmente. Lo des-
cargamos de http://blogsecurity.net/wordpress/tools/
El plugin llamado Login LockDown es un plugin wp-scanner/ y lo activamos:
que nos permite bloquear a un usuario que intenta
logearse en wp-login o wp-admin. Lo descargamos Al activarlo vamos a esta URL http://blogsecurity.
de su Web principal http://www.bad-neighborhood. net/cgi-bin/wp-scanner.cgi de esta manera escanea-
com/loginlockdown-1.1.zip al activar el plugin y si mos nuestro Blog de algunas vulnerabilidades que
nos ubicamos en el panel de administración en comprometen la seguridad del mismo. Es impor-
OpcionesLogin LockDown, podemos ver las op- tante que después del escaneo borremos el plugin
ciones de este plugin. ya que un intruso puede escanear nuestro Blog y
saber nuestras vulnerabilidades así como también el
Si observamos el panel podemos apreciar que se mismo scan de wordpress nos da la documentación
puede controlar el número de intentos para poder para corregir la vulnerabilidad.
acceder al login de nuestro Blog o al panel de admi- Cuando ya este activado el plugin vamos a esta
nistración. En caso de que en esos intentos se falle URL http://blogsecurity.net/cgi-bin/wp-scanner.cgi y
el sistema bloquea tu IP temporalmente, el tiempo escaneamos nuestro Blog...
de bloqueo es de tu preferencia.
9. Agradecimientos
8.7 Banear usuarios
Agradezco a mi esposa y a mi hija por su pacien-
El plugin wp-ban tiene como objetivo el baneo cia al realizar este manual, ya que fueron 10 días
de IPs, de esa manera se mejora la seguridad de realizándolo frente al computer. Agradezco a las
nuestro Blog. Puede Banear una IP o un rango de personas que expresen su gratitud a este manual.
IPs. Este plugin lo podemos descargar en http://les- http://unknownmind.chemx3.com.
terchan.net/portfolio/programming.php. En nuestro
panel de administración nos ubicamos en Gestionar PD: Sin contar los otros días de modificación por
-Ban. el cambio de la versión de wordpress 2.5
Cuando se Bannea una IP o un rango de IPs, si
pertenece a un visitante cuando entre a nuestro Blog 10. Bibliografía
en la Web principal mostrará un mensaje del motivo
del Banneo, que también podemos modificar. http://es.wikipedia.org/
http://www.dragonjar.org
http://www.blogsecurity.net
14
BLIND SQL INJECTION, UN ENEMIGO
OCULTO DE LOS DESARROLLADORES
WEB
INTRODUCCION hay en las bases de datos de esa aplicación, gene-
ralmente estas sentencias se introducen en campos
de login y password o en la barra de direcciones.
Hola a todos los lectores, soy epsilon77 integrante Cuando el navegador ejecuta dichos comando y
de la comunidad DragonJAR, y en esta oportunidad, los procesa, la respuesta es un error, este error nos
les traigo un pequeño artículo, sobre esta técnica brinda información sobre la base de datos.
de hacking que es relativamente nueva respecto
a otras.
En esta entrega hablare, un poco sobre esta técni-
ca que cada vez coge mas fuerza en la red, y como
se puede evitar esta «vulnerabilidad». ahora si mas
preámbulo vamos a lo que nos interesa.
Los ataques sql injection han ido en aumento en
estos últimos años, esto es debido a que con la lle-
gada de la web 2.0 han aumentado las aplicaciones Sin embargo, el objetivo de este artículo no es
web, que intervenienen con bases de datos, además hablar sobre sql injection si quieren mas infor-
de esto, se han publicado muchos documentos ex- mación pueden ir a: http://es.wikipedia.org/wiki/
plicando como hacer un ataque de este tipo, y esta Inyecci%C3%B3n_SQL
información a llegado a manos equivocadas, q han
logrado hacer de las suyas. ¿QUE ES BLIND SQL INJECTION?
Muchos expertos en seguridad, han unido esfuer- Muchos desarrolladores creen que la forma de
zos para poder encontrar solución a esta vulnerabili- evitar ataques de sql injection es poner una pagina
dad, sin embargo, las soluciones mas eficaces, para personalizada en ves del error que nos muestra el
esto es concienciar y capacitar a las programadores, navegador, esto es, si inyectamos unas sentencias,
sobre este ataque, mostrarles como funciona, y lo nos mostrara una pagina cualquiera, pero no el error,
peligroso que puede llegar a ser. esto es FALSO por que para este tipo de «seguri-
Algunos programadores creen que la solución a dad» se utiliza la técnica BLIND SQL INJECTION,
este problema es evitando mostrar errores, que pero en si que es esto? si traducimos la expresión
dan información al atacante, por que existe la téc- nos dirá algo así como «sql injection a ciegas», esto
nica blind sql injection, que lo que hace es hacer sql significa que con esta técnica podemos, inyectar las
injection sin saber nada sobre la base de datos, sin sentencias y comandos, pero sin la posibilidad de
necesitar errores, ni nada por el estilo, el objetivo de ver ningún resultado en el navegador (error), con
este documento es informar un poco sobre que es esta técnica el atacante puede visualizar, extraer e
tas técnica y como funciona. incluso modificar información de la base de datos
Para hacer un ataque sql injection a ciegas se debe
¿QUE ES SQL INJECTION? crear un vector de ataque, este vector solo será de
verdadero o falso, con este vector se centrara todo
Antes que nada debemos hablar sobre que es sql el ataque y nos permitirá conseguir la información
injection. esta es una técnica, que nos permite ingre- deseada, mas adelante les mostrare en un ejemplo
sar sentencias o comandos arbitrarios dentro de una como hacer el ataque.
consulta, con el fin de manejar los procesos de una
aplicación web, y poder acceder a la información que
15
estamos frente a una potencial víctima xD.
BUSCANDO APLICACIONES VULNERA-
BLES EMPIEZA EL ATAQUE!!!!
Para hacer un ataque de este tipo el atacante
debe hacer un estudio similar al que se hace en los Ya tenemos una pagina de verdadero que es la
ataques sql injection, para determinar en que por- sentencias(-) y la de falso que es la sentencias(+),
ción del código de la aplicación no esté realizando con esto ya podemos crear, el vector de ataque.
una comprobación correcta de los parámetros de Entonces por ejemplo si queremos saber si la tabla
entrada, la verdad esto resulta muchas veces más user existe inyectamos lo siguiente:
complicado que hacer el ataque, por que por mas
analisis que hagamos nunca podremos concluir que www.victima.com/secciones.php?id=3 and exists (select
* from user)
un parámetro va ser 100% vulnerable, siempre va
haber un margen de error, entonces explicare con Si al ejecutar esta sentencia, nos da el mismo
un pequeño ejemplo: resultado que cuando ejecutamos sentencias(-),
tenemos la pagina: quiere decir que si existe la tabla, si por el contrario
nos da el mismo resultado que cuando ejecutamos
www.victima.com/secciones.php?id=3
sentencias(+), quiere decir que la tabla no existe, o
que tenemos mal escrita la sentencia, por que debe-
podemos ver claramente que el parámetro que mos recordar que aunque el mysql sea un estándar,
se envía es id y el valor de ese parámetro en este hay varias diferencias entre sus versiones.
caso es 3, para hacer el análisis de forma correcta, Ya tenemos el nombre la tabla de los usuarios,.
vamos a inyectar 2 sentencias que no hacen ningún ahora vamos averiguar el nombre del administra-
cambio en el resultado estas las llamaremos sen- dor del sistema, antes que nada debemos saber de
tencias(-), y 2 sentencias que si provocan cambios que tamaño es, es decir cuantos caracteres tiene,
en el resultado y a estas las llamaremos (+). Ahora para esto hacemos eso ejecutamos la siguiente
si comencemos sentencia:
hacemos las sentencias(-) así: www.victima.com/secciones.php?id=3 and 10>
length(user())
www.victima.com/secciones.php?id=3 and 1=1
www.victima.com/secciones.php?id=3 +100-100
que hace esta sentencia? compara si el tamaño del
nombre del usuario es menor a 10, si el resultado
podemos ver claramente que en ambas senten- que nos arroja es el mismo, de las sentencias(-)
cias, no se producen cambios ya que se inyectan quiere decir que si se cumple la condición y que el
valores verdaderos, y validos. tamaño del nombre del usuario es menor a 10, ya
sabemos que esta entre 1 y 10, entonces acortamos
hacemos sentencias(+) asi: la búsqueda, en ves de 10 ponemos 8 por ejemplo
www.victima.com/secciones.php?id=3 and 1=2 y así sucesivamente hasta que el resultado de la
www.victima.com/secciones.php?id=-1 or 1=1 sentencia sea igual al resultado arrojado por las
sentencias(+), cuando esto ocurra quiere decir que
Con estas sentencias si se cambia el resultado ese es el tamaño de la cadena.
Ahora si por el contrario, cuando ingresamos la
ahora interpretemos los resultados, si ejecutamos sentencia:
la pagina normalmente, es decir sin inyectar ningu-
na sentencia, y nos devuelve el mismo resultado www.victima.com/secciones.php?id=3
length(user())
and 10>
17
SEGURIDAD EN APLICACIONES WEB
POR: hernandgr
18
Otra forma efectiva de protegerse de una Inyección AdBlock y NoScript.
SQL es el uso de procedimientos almacenados en la
base de datos, pues así se evita la ejecución de un
comando ya previamente compilado en la aplicación,
y se permite hacer un manejo de los parámetros en
el motor de base de datos, aunque cabe advertir que
esto no es 100% seguro, la inyección SQL puede
seguir ocurriendo si el procedimiento no es bien 3. Identificación del Servidor Web
desarrollado.
La identificación del servidor web en el que está
2. XSS funcionando una aplicación puede ser usada para
buscar vulnerabilidades que puedan afectar a la
Cross Site Scripting o Ejecución Inter Sitio. Este plataforma. Una vez afectado el servidor, puede
tipo de ataque es cuando se permite ejecutar código estar en peligro de ser manipulada la información
allí alojada.
20
SELECT * FROM USUARIOS WHERE (USUARIO=’<usuario>’ AND
PASS=’<pass>’)
21
caso de no ser validada la transferencia de manera
es posible construir un enlace que nos transfiera correcta, los fondos serán transferidos. En el Hacme
fondos a nosotros. Es decir, si somos el usuario lógicamente es una vulnerabilidad existente.
“Andy Aces”, y deseamos que nos transfieran 1000 Después de verificar los perfiles de los usuarios
chips, podemos construir la siguiente URL: “Andy Aces” y “Bobby BlackJack” comprobamos que
la transferencia ha sido realizada:
http://127.0.0.1:3000/account/transfer_chips?tran Ahora el usuario “Andy Aces” tiene 1000 chips
sfer=1000&login[]=andy_ transferidos irregularmente desde la cuenta de “Bo-
aces&commit=Transfer+Chips bby BlackJack”.
Cómo se puede explotar esto?... Si logramos a
través de ingeniería social que otros usuarios lo- La forma de ganar o ganar jugando Blac-
gueados en la aplicación hagan clic en ese enlace, kJack
y disponen de los fondos suficientes, en este caso
1000 chips, estos serán transferidos a nosotros. En el juego del BlackJack, existe un bug que per-
Esta es una forma de hacer phising, gran mal que mitirá que por lo menos el jugador no se arriesgue
abunda hoy en la red, y que ha causado muchos a perder su dinero si no está seguro de lo que va
daños a raíz de las vulnerabilidades aprovechadas a hacer.
22
una apuesta de 100 chips, y que sumando lo que se
ganó, el jugador dispone en total de 1080 chips…
pero qué pasa si enviamos de nuevo la petición
de Stay para recalcular de nuevo si ganamos o
perdimos?... probamos a ingresar la URL que se
genera con la petición para la opción Stay: http://
Analizando con el Proxy Paros las acciones que localhost:3000/blackjack/hit_or_stay?act=S
ocurren cuando pulsamos Hit o Stay, vemos que se
producen dos llamadas Ajax: Después de ingresar esta URL y generar la pe-
tición, revisamos el perfil del jugador, y vemos lo
Hit: siguiente:
Stay:
23
Referencias
Este artículo fue realizado en base a información obtenida
de análisis y diseño con el fin de facilitar la etapa de de las siguientes fuentes:
construcción del software. El costo de prevenir un
* Wikipedia – http://es.wikipedia.org/
error será menor en la medida que sea detectado * Open Web Application Security Project - http://www.
más temprano. owasp.org/
* Microsoft® Developer Network - http://msdn2.microsoft.
Un análisis y diseño responsables deben contem- com/es-es/default.aspx
plar todas las posibles amenazas de seguridad que * FoundStone http://www.foundstone.com/us/resources/
proddesc/hacmecasino.htm.
puede sufrir una aplicación, categorizarlas y definir el * Paros Proxy http://www.parosproxy.org
riesgo que se puede correr en caso de ser afectado * Modsecurity http://www.modsecurity.org/
* La Comunidad DragonJAR – http://www.dragonjar.org
por una de ellas.
Por ejemplo, unas metodologías para modelar y
cuantificar los riesgos de seguridad en una aplica-
ción que referencia Microsoft® en sus prácticas de
seguridad son los métodos STRIDE y DREAD.
24
Creando un Compilador con JAVA
25
Ejemplo: después de agrupar los componentes
léxicos en el análisis jerárquico se agrupan según
Stack: es el lugar de memoria en el cual se van
la prioridad que tienen.
a almacenar los valores correspondientes a los
resultados de operaciones tales como asignación,
Como bien sabemos la multiplicación tiene mayor
suma, resta, entre otros, el resultado de la operación
prioridad que la suma, es por ello que en la estruc-
permanece en la cima del stack y es el resultado
tura de árbol se ubica en la parte inferior, así es la
de procesar la información que se encuentra en el
operación que se debe realizar primero.
bytecode.
VirtualMachine: es el que se encarga de procesar
3. Análisis semántico: es en esta fase donde el
la información contenida en el bytecode y colocar los
compilador revisa el programa para tratar de encon-
valores correspondientes a las operaciones (suma,
trar errores y reúne información sobre los datos para
resta, asignación, etc) en el stack y así mismo ge-
posteriormente generar el código objeto.
nerar el resultado de la operación realizada (en este
artículo será tratado como un clase).
Finalmente el bytecode quedaría así:
Análisis del programa fuente
El análisis de programa fuente se divide en tres fa-
ses las cuales son: lineal, jerárquico y semántico.
1. Análisis lineal: (realizado por el lexer) también
conocido como léxico o de exploración, es en el
que se identifican los elementos de la cadena de
caracteres ingresada y se agrupan en componentes
léxicos (por lo general los espacios no se toman en Nota 1: finalmente quien interpreta el árbol sintácti-
cuenta). co creado por la interacción entre el parser y el lexer,
Ejemplo: tomamos la siguiente proposición de es la maquina virtual, la cual es la que finalmente
asignación: calcula y arroja los resultados.
Posición = inicial + velocidad * 60 y se agrupa Nota 2: la información extraída de la cadena de
en componentes léxicos. caracteres ingresada, siempre será manejada como
1. identificador (Posición). caracteres, solo será manejada como numérico,
2. símbolo de asignación (=). al ser procesada la información en la maquina vir-
3. identificador (inicial). tual.
4. signo de suma (+).
Reglas recursivas para construir
5. identificador (velocidad).
un árbol sintáctico
6. signo de multiplicación (*).
Para poder pasar de una expresión a una árbol
7. numero (60).
sintáctico debemos tener en cuenta las siguientes
reglas de recursividad:
2. Análisis jerárquico: (realizado por el parser) tam-
- Cualquier identificador es una expresión.
bién conocido como sintáctico, es en éste donde se to-
- Cualquier número es una expresión.
man los componentes léxicos y se unen en frases gra-
- Si expresion_a y expresion_b son expresiones,
maticales, las cuales serán utilizadas por el compilador
entonces también lo son:
para
expresion_a + expresion_b
pos-
expresion_a * expresion_b
terior-
(expresion_a)
mente
- Si identificador_a es identificador y expresion_a
d a r
es expresión, entonces:
u n a
identificador_a = identificador_a es propo-
salida.
sición.
- Si expresion_a es expresión y porposicion_a es
proposición, entonces:
While(expresion_a)do proposición_a
26
Ejemplo: ¿cómo debería recorrer el compilador
una expresión del tipo:
If(expresion_a)then proposición_a
«1+2*3», formando el árbol con la gramática
Son proposiciones.
antes vista?
Gramática para el análisis de expresiones
recursivo por la izquierda.
Para formar un árbol sintáctico a partir de una
expresión utilizaremos un algoritmo recursivo por
la izquierda, donde iremos analizando la expresión
de inicio a fin y luego nos devolveremos armando
nuestro bytecode de fin a inicio (recursividad).
El siguiente algoritmo, muestra como debería ser
el recorrido por las expresiones mediante nuestro
compilador, este algoritmo se recorre de manera
recursiva enfocado a comenzar el análisis de la
expresión por la izquierda y en este artículo será la
base para nuestro compilador. Nota: como bien sabemos el árbol se estructu-
raría desde el parser, pero se utilizaría el lexer en
1. Declaraciones à EOI //end off input; los lugares donde se detectan números y símbolos
2. | expresion; declaraciones (+,-,*,/,entre otros).
3. Expresion à termino expresion’
4. Expresion’ à + termino expresion’ //ca-
rácter suma
5. | fin
6. Termino à factor termino’
7. Termino’ à * factor termino’ //carácter ¿Cómo debería quedar estructurado el bytecode
producto para la expresión: «1+2*3»?
8. | fin El bytecode quedaría estructurado de la forma
9. Factor à numero anterior donde los números del 0 al 8 son las posi-
10. | (expresión) //paréntesis ciones en el bytecode y la palabra push se utiliza
para que en el momento en el cual la maquina virtual
comience a procesar dicho bytecode; sepa que los
valores de la posición 1, 3, y 5 los debe poner en el
stack, y la palabra prt se utiliza para que la maquina
virtual muestre el valor que se encuentra almacena-
do en la cima del stack, en el momento en el cual
encuentra la misma.
¿Cómo debería procesar la maquina virtual el
bytecode anterior para la expresión: «1+2*3»?
Primero debemos tener en cuenta que cuando se
encuentra la palabra push, el compilador pone el
valor siguiente del bytecode en el stack.
Cuando encuentra la palabra multiplicación, debe
tomar los valores de la cima y el anterior del stack,
quitarlos e insertar el resultado de la multiplicación en
la cima de dicho stack (de manera igual ocurre con la
suma y demás operaciones matemáticas).Finalmente
cuando encuentra la palabra prt toma el valor de la
cima y lo muestra por pantalla.
27
tiplicación y división, posteriormente daremos las
indicaciones pertinentes para que el lector agregue a
dicha estructura tanto operadores relacionales como
lógicos.
Dicha estructura puede ser modificada conforme
el lector lo desee.
Pasando de la teoría a la práctica, he decido crear
cuatro clases para nuestro cometido; una llama-
Programación
da compilador, para colocar constantes comunes
¿Por donde debemos comenzar? que pueden ser requeridas por las demás clases,
Lo primero que necesitamos para comenzar a además de otras 3 clases de las cuales ya hemos
programar es entender bien como se forma el ár- hablado (lexer, parser y virtualmachine).
bol a partir del algoritmo antes descrito, además Compilador
debemos tener bien claro que hace quien, es decir: En esta definimos como constantes, las palabras
debemos tener bien claro que con el lexer lo que claves que utilizaremos en diferentes clases, bási-
queremos es identificar cada uno de los elementos camente las que utilizaremos en nuestro bytecode
que conforman esa cadena de caracteres (código y para procesar luego en la virtualmachine.
fuente de nuestro lenguaje, ej: «1+2*3») que fue in-
gresada para que nuestro compilador
la ejecute, el parser es quien basado
en los resultados del lexer construye
el árbol y lo almacena en un array
llamado bytecode, tal cual cómo va
a ser ejecutado más tarde por la ma-
quina virtual, la cual almacena dichos
Lexer
resultados en el stack.
En esta clase analizaremos la información que
El flujo del programa debería seguir más o menos
el compilador exija mediante un método llamado
los siguientes pasos:
lexer.
1. Leer línea de código (desde el parser o el
lexer).
2. Realizar la estructuración del bytecode desde
el parser, utilizando el lexer, para la detección de
simbolos o cadenas en el instante que sea necesario
(como fue visto en el ejemplo anterior).
3. Se invoca la maquina virtual enviándole el
bytecode.
4. Desde la maquina virtual se procesa el byte-
code detectando lo que en cada posición se indica
y almacenando en el stack el resultado de cada
operación.
5. Fin.
Código
En este apartado vamos a mostrar cómo se debería
realizar dicho compilador, haciendo un análisis en
toda la estructura del mismo, y siendo consecuentes
con lo que se mencionó anteriormente.
En este apartado vamos a ver cómo realizar un
compilador para sentencias con números enteros y
operaciones básicas tales como suma, resta, mul-
28
Parser
Creamos la clase parser, y la preparamos para la
lectura de nuestras líneas de código.
Virtual machine:
En esta nos encargaremos de analizar lo valores
que tenemos en el bytecode y procesarlos como
sea debido.
29
HARDENING
Nickname: Dinosaurio no es abarcado de la manera más profunda como
Nombre: Jhon Jairo quisiera, esto debido a mi escaso conocimiento.
Hernández Además que no quiero que se me queme la neu-
rona.
E-mail: Dino@hackerss.com
Es el tema de HARDENING, solo espero que les
Para la Comunidad guste, lo hice con cariño y aprecio para todos.
Dragonjar.org
Erase una vez en un pueblo muy leja-
no………………………………….
Un cordial saludo para todos los Dragonautas y Recuerdo de una mañana como cualquier inicio
lectores de este segundo número de la E-Zine. de jornada laboral, de mis primeras acciones den-
Una vez superada la prueba de fuego de tan noble tro de lo que tengo programado fue la de sentarme
causa, rescatada por algunos buenos usuarios de a mi computador y conectarme a la Red a revisar
la Comunidad DragonJAR en el lanzamiento del mis correos y de paso revisar foros de los cuales
primer número. Y aunque sus gestores han querido participo e iniciar mi plan de trabajo.
darle la titularización de versión beta, creo que este Oh! Sorpresa que me llevo, cuando en mi MSN
fue una suma de fuerzas, voluntades y experiencias aparecía una ventana en la cual desplegaba un
con un producto maravilloso, por que permitió abrir mensaje de un experto en seguridad ( del cual
un espacio de esparcimiento y opinión en la comuni- le profeso un gran respeto y admiración!) , su-
dad. Espacio que impulsa nuevamente un segundo sodicho individuo (ya parezco policía con estos
número, para lograr un producto de alta calidad o términos ) que en el momento llevaba a cabo un
por lo menos de buen contenido. proceso de aseguramiento de plataformas que
En esta oportunidad, me han invitado a escribir hacían parte del plan de continuidad del negocio
un artículo y participar de dicha edición, lo cual me que debía ejecutar con servidores y dispositivos
hace sentir honrado y orgulloso del buen trabajo y de Checkpoint, su FireWall debía ser afinado e
desempeño de este equipo, tanto en el desarrollo, integrado para tal fin, y se encontraba en el dilema
edición y diseño de la misma. de realizar la actualización de la versión del NOS
del Firewall, en esta labor tenía inconvenientes
Siendo sincero………. con el Update de la actualización de su versión
No sabía que escribir para entregar un buen con- de Linux, debido a que no había una versión más
tenido temático que permitiera cautivar la atención actualizada, después de intercambiar mensajes
del lector y para tal fin consideré varios temas inte- tratando de colaborar con su labor, le perdí el
resantes, que fueran de nivel o altura al contenido rastro en esa mañana.
que buscan los lectores hoy en día.
Analizando sobre lo que sería bueno tratar Al día siguiente nuevamente nos encontramos
y entregar como un verdadero valor agregado en el MSN y su respuesta para la finalización del
para la suma de conocimiento de los lectores proceso que había realizado fue «REALICE UN
de este número de la E-zine, decidí tomar un PROCESO DE HARDENING DE TODA LA PLA-
tema que viene resonando de gran popularidad TAFORMA».
y aplicabilidad en el mundo informático y espe- Creo que fue el momento en que me dije a mi Mis-
cialmente en el proceso de aseguramiento de mo
las plataformas de Sistemas. MI MISMO:
Sin más preámbulo, por que de seguro ya visualizo No es solo un término más o frase de un Tecnicista,
a mis amigos con gestos de impaciencia sobre de es realmente una buena práctica de Seguridad, de
mis largos textos con un pensamiento profundo... la cual debo conocer un poco más………
«¿Con qué nos saldrá Dino ahora?».
Aclaro desde un comienzo, que el tema a tratar,
30
amenazas y hacerle la vida más difícil al atacante»
HARDENING!!!. Ahora continuemos contándoles un poco del pro-
Para su definición técnica tomare la expresada ceso de Hardening!.
por dos expertos: Que actividades debemos desarrollar para ase-
Escrito por el evangelista seguridad Roberta Bra- gurar nuestros Sistemas:
gg
«Adoptar un enfoque proactivo para la seguridad Actividades
de la red por el endurecimiento de Windows de I) Los procesos de arranque (del bootstrapping
los sistemas contra los ataques antes de que ocu- del sistema)
rran.» II) Los servicios o demonios que se ejecuten en
Por Luis Montenegro, Windows y Security MVP el inicio y apagado del sistema
2007 III) Aseguramiento de Sistemas de archivos
«Haciéndole la vida difícil al atacante. Ese es el (comúnmente denominados File System en *NIX y
concepto que está detrás del Hardening de sistemas volúmenes en Netware - Novell)
operativos. Hardening es una acción compuesta IV) Uso de opciones de límites y forzar cuentas
por un conjunto de actividades que son llevadas a de usuario
cabo por el administrador de un sistema operativo V) Políticas del sistema, filtrados y Acls
para reforzar al máximo posible la seguridad de su VI) Protección a ataques físicos o de Hardware
equipo. (Seguridad Física)
Su propósito, entorpecer la labor del atacante y ga- VII) Actualización de Firmware, BIOS, Softpaq,
nar tiempo para poder minimizar las consecuencias contraseñas de arranque de los equipos, desacti-
de un inminente incidente de seguridad e incluso, vación de unidades externas en servidores como
en algunos casos, evitar que éste se concrete en pen drive o memorias USB, disqueteras, unidades
su totalidad.» de Cd/DvD, opticas.
Y no podía faltar la de Wikipedia (Que de seguro VIII) Protección y renombre de cuentas
ya la están buscando!!!) de Administración y deshabilitar o invalidar cuentas
«En computación, el endurecimiento suele ser estándares, invitado, uso de cuentas limitadas.
el proceso de asegurar un sistema. Esta labor es IX) Restricción de Instalación de Software y
especialmente hecha para proteger los sistemas Hardware de acuerdo a las políticas de seguridad.
contra los atacantes. Esto suele incluir la eliminación X) Habilitar los sistemas de Auditorias y Monito-
de nombres de usuario o innecesarios de acceso y reo de logs.
la inhabilitación o supresión de los servicios inne- XI) Asegurar consolas de administración, panta-
cesarios. llas de logeo, terminales virtuales y accesos remo-
tos.
Existen diversos métodos de endurecimiento de XII) Políticas y procedimientos de administración
los sistemas Unix y Linux. Esto puede implicar, de cuentas de usuario, grupos, TCBS (Truste Base
entre otras medidas, la aplicación de un parche Computing), módulos de autenticación agregables
para el kernel como Exec Shield o PaX; cierre de y relaciones de confianza.
los puertos de red abierta, y el establecimiento de XIII) Administración de paquetes de instalación,
sistemas de detección de intrusiones, cortafuegos parches (Patchs), upgrades, updates, módulos
y sistemas de prevención de intrusiones. También instalables, integridad de archivos y permisos en el
hay endurecimiento guiones y herramientas como sistema.
Bastille Linux y Apache / PHP Hardener que puede, XIV) Aseguramiento de las Herramientas de De-
por ejemplo, desactivar características innecesarios sarrollo y compiladores.
en los archivos de configuración o realizar varias XV) Aseguramiento de Núcleos (Kernel) del sis-
otras medidas de protección. « tema.
Para mí: XVI) Instalación y afinación de Firewalls, Kits de
«Es simplemente el proceso de afinación del per- Seguridad (Antivirus, antispyware, antimalware,
formance y aplicación de las características de un anti hackers, anti banners) Sistemas de Detección
producto en un 110% para disminuir los vectores de de Intrusos y Sensores como IDS, IPS, HIDS,
31
nimiento con un /sbin/sulogin
NIDS. La opción:
XVII) Uso de Herramientas para Pen-Testing y init=/bin/sh
Monitoreo.
XVIII) Configuración de Protocolos, Puertos y Ser- Permiten obtener una Shell de root, como también
vicios (Solo los necesarios). pueden iniciarse desde un disquete. Y bastaría con
XIX) Implementación de esquemas de seguridad, remontar nuestros discos en modo de rw y voala!
DMZ, Front End / Back End, Router apantallados, Nuestra seguridad totalmente comprometida. Que
proxys, Firewalls. vaina no!!.
XX) Políticas de Procedimientos de Respaldo y Por lo tanto es recomendable cambiar algunas
de Disaster Recovery. opciones de nuestros archivos de configuración
dependiendo de nuestro, cargador LilO, Grub o
Dadas a conocer estas actividades pasaré a ex- LoadLin.
plicar las dos primeras actividades(actividad I Tales como:
y actividad II) con uno de los sistemas operativos
populares de gran estabilidad y acelerado crecimien- prompt
timeout=50
to, al que le están apostando grandes como IBM, default=linux
HP, Novell, Oracle, etc. El del maravilloso mundo boot=/dev/hda
map=/boot/map
del pingüino. El fabuloso Linux. install=/boot/boot.b
Limitaremos el alcance de este artículo a los dos message=/boot/message
linear
primeros puntos, debido a que es un tema muy
extenso, que tiene mucha tela por cortar y esta
# permite especificar una contraseña que se debe
E-zine no daría abasto para cubrirlo, por lo tanto
introducir antes de que el sistema arranque
ruego excusas al no entregar en detalle las demás
password=secretpassword
actividades, por lo expuesto anteriormente.
#Exigirá la contraseña si se entra un parámetro
como single
Actividad I
restricted
Los procesos de arranque (del bootstrapping del
sistema).
Si se desea aplicar la restricción con alguna imagen
Debemos asegurar los procesos de arranque del
del kernel se puede usar, esta aplica cada vez que
sistema, con la finalidad de limitar la intervención
se desee arrancar con esta imagen:
o intrusión del os usuarios, evitando la injection de image=/boot/vmlinuz-2.6.XX-XX
software o escalada de privilegios en nuestro boot, label=linux
initrd=/boot/initrd-2.6.XX-XX.img
el cual actúa como un prompt mas del sistema indi- read-only
cándonos que el sistema está listo para cargar, en append=»root=LABEL=/»
solo tendríamos que presionar la tecla [TAB] en Esta contraseña se añade en Lilo.conf en texto
el prompt de LiLO y nos mostrara las etiquetas de claro, por lo tanto se deben aplicar los permisos
los sistemas que podemos iniciar o simplemente la adecuados para que sólo con los privilegios de root
tecla [SHIFT] pueda verse la contraseña.
32
kernel /vmlinuz-2.6.7 ro root=LABEL=/
activar las máximos niveles de seguridad que ten- initrd /initrd-2.6.7.img
33
cups Printing functions Yes
ca::ctrlaltdel:/sbin/shutdown -t3 -r now functions Shell-script functions for init scripts
Veamos esto un poco más en detalle: No
gpm Mouse support for text applications Yes
id: identificador de cada secuencia con una entrada irda IrDA support Yes
(unless you have IrDA devices)
isdn ISDN support Yes
(unless you use ISDN)
keytable Keyboard mapping No
kudzu Hardware probing
Yes
lpd Printing daemon Yes
netfs Mounts network file systems
Yes
nfs NFS services Yes
nfs lock NFS locking services Yes
ntpd Network Time Protocol daemon No
pcmcia PCMCIA support
Yes
portmap RPC connection support Yes
random Snapshots the random state No
rawdevices Assigns raw devices to block devices Yes
rhnsd Red Hat Network daemon Yes
snmpd Simple Network Management Proto-
col Yes
(SNMP) support
Snmtptrap SNMP Trap daemon Yes
Sshd Secure Shell (SSH) daemon No
winbind Samba support Yes
xfs X Font Server Yes
ypbind NIS/YP client support
Yes
¿Cuáles deshabilitar?
Solo a criterio de su implementación active o
desactive el servicio que requiera, en realidad hay
servicios que no se usan y quedan activos dejando
una vulnerabilidad latente, si no va a usar Samba,
para que activar Winbind, servicios como apmd poco
son usados en servidores en ambientes de produc-
ción a diferencia del uso en equipos móviles como
portátiles en donde la administración de la energía
juega un papel importante, igualmente si utilizo lpd
de 4 caracteres máximo. solamente para que dejar activo cups o lpr.
Nivel-de-Ejecucion: Indica el nivel de corrida en Para parar dichos servicios puede usar la utilidad
que va a efectuarse la acción indicada de administración de cada Distro, tales como Yast
acción: Indica qué acción se llevará a cabo en SuSE, Yum en Fedora, Scoadmin en SCO Unix,
proceso: Indica el proceso a ejecutar. En *nix toda Smit en AIX, de igual forma utilizar líneas de co-
acción genera al menos 1 proceso. mando como
Cabe anotar que en las últimas versiones de #chkconfig
Ubuntu este fue reemplazado por el «upstart» y ó
#update-rc.d.
los niveles son controlados con los archivos en / Para ver la lista con chkconfig:
etc/event.d. # chkconfig —list
Kdcrotate 0:off 1:off 2:off 3:off 4:off
5:off 6:off
Boot scripts in /etc/init.d ntpd 0:off 1:off 2:off 3:on 4:off
Servicios tales como: 5:on 6:off
Service Description courier-imap 0:off 1:off 2:on 3:on 4:on
Remove? 5:on 6:off
anacron A variation on the cron tool Yes
apmd Advanced Power Management Yes
atd Daemon to the at scheduling tool Yes Nos indica:
autofs
Yes
Automount
El Servicio Nivel del Servicio:Y si esta en off/on
crond The cron daemon Para parar el servicio:
No
34
# chkconfig —del nombre-del-servicio Internet aun no tomaba auge!!)
Gerente de Sistemas:
Para iniciar el servicio: ¿Cómo así?
No señor averigüé bien como se llama esa vaina,
# chkconfig –add nombre-del-servicio hágala y documéntela.
Administrador del Sistema:
Después de eliminado los servicios, si estos no van Me dije a Mi mismo
a ser utilizados posteriormente, podemos entrar a Si el Mismo:
borrarlos de /etc /rc.d/init.d Ahora la hago y lo dejo como el ternero (Ya sa-
Y no olvidar verificar la permisividad de los archi- brán cómo, no sean mal pensados) con las ganas
vos nuevamente: de mam*** perdón de chuparme como vampiro el
conocimiento por que lo hago y no le muestro los
# chown root:root /etc/rc.d/init.d/*
resultados para que se dé cuenta que el Habito no
# chmod -R 700 /etc/rc.d/init.d/*
hace al Monje!.
Bueno pero sigamos con el Hardening porque
The inetd/xinetd daemons
después de esa anécdota y experiencia de vida ya
Comúnmente llamado los Demonios maestros,
deben estar llorando y enviándome mis condolen-
Como anécdota recuerdo el día que le comente al
cias!!
Gerente de Sistemas de una Compañía (Empresa)
Continúo con los Demonios Maestros, para los
en la cual laboraba con el cargo de Administrador
Neófitos como YO, debemos entender un Demonio
del Sistema, teniendo a mi cargo tres (3) servidores
como un proceso que se ejecuta en Background
*NIX y unos 100 usuarios, plataforma conectada
(en segundo plano) con la finalidad de iniciar las
en Modo Multiusuario y de Red, pero volvamos a
solicitudes de conexión que llegan al servidor y son
lo que quiero comentar porque ya me disperse con
asignados un puerto de Conexión por ejemplo:
esta anécdota. ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l
Gerente de Sistemas: -a
telnet stream tcp nowait root /usr/sbin/tcpd
JJH Necesitamos que se efectué el Backup Diario in.telnetd
a Medio día y realice verificación de la integridad de #
# Shell, login, exec, comsat and talk are BSD proto-
Datos, debe ser automático!. Por favor Investigue cols.
de que manera podemos armar un Shell Script y #
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
automatice la tarea. login stream tcp nowait root /usr/sbin/tcpd in.rlogind
Administrador del Sistema (JJH) #exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
#comsat dgram udp wait root /usr/sbin/tcpd in.comsat
Eso se puede hacer utilizando los Demonios talk dgram udp wait nobody.tty /usr/sbin/tcpd in.talkd
(Daemons) del Crontab y At, automatizamos el Shell
para que se programen las tareas de Respaldos de Sera que servicios como telnet o rlogin abiertos
Seguridad (BackUp) y realizamos las pruebas. me servirán de mucho???
Gerente de Sistemas: Solo juzguen Uds. Que hay disponible aquí (para
¿Cómo así? quien no entienda solo escribir en google vulnera-
Y a Ud. ¿Quien le dijo que eso se llama así? bilidades de telnet o rlogin)
Administrador del Sistema (JJH) De ahí nace una versión en algunas Distros de-
Pensé entre mí: nominada Xinetd su objetivo primordial es mejorar
«Ah kab*** piensa que por que ha hecho más el uso de los servicios en los controles de acceso y
cursos y especializaciones que uno, tiene que sa- contrarrestar DOS (Denial Of Service), en fin mejorar
bérselas todas! la administración de los servicios. Un vistazo a su
Uffff» archivo de configuración
Y le dije: service nntp
{
Pues es la traducción que hago de los Manuales socket_type = stream
del Sistema Unix protocol = tcp
wait = no
(Era poco de los buenos soportes que se encontra- user = news
ban en esa época año 1994 y podíamos consultar. group = news
server = /usr/bin/env
35
de instalación y remoción de software para eliminar
server_args = POSTING_OK=1 PATH=/usr/sbin/:/usr/
bin:/sbin/:/bin el demonio. No olviden realizar un test de los ser-
+/usr/sbin/snntpd logger -p news.info vicios con un
bind = 127.0.0.1
}
#ps –a
Continuemos…. Ó
La idea es revisar los servicios que se inician en
#netstat –a
este demonio y desactivar aquellos que impliquen
un riesgo inminente por su activación y no uso den-
TCP wrappers
tro del Sistema Operativo, aumentando el riesgo y
alternativas de ataque. ¿Qué cosa tan rara es esta?
«Como quien dice que lo que no se usa se atrofia Expliquemos entonces; los TCPwrappers permi-
o lo que no sirve estorba» ten controlar el acceso y los servicios de red para
Si no vamos a hacer uso de estos servicios, tam- diagnosticar los problemas y aplicar el correctivo
poco los ofrezcamos para ampliar los vectores de necesario. Vienen del maravilloso mundo de *NIX,
ataques. nacen de la necesidad de modificar el comporta-
Solo adiciona a la línea un # y esta quedara como miento del Sistema operativo sin tener que modificar
comentario: su funcionamiento.
#telnet stream tcp nowait root /usr/sbin/tcpd
in.telnetd Bueno lo voy a explicar con plastilina con base en
#login stream tcp nowait root /usr/sbin/tcpd
la redacción anterior sobre inetd( si no recuerdas vas
in.rlogind
a tener que devolverte a este punto inetd/xinetd)
Vamos con la Analogía
La recomendación apropiada es desactivar los
Muchas personas van a nuestra oficina a buscar-
demonios de inetd/Xinetd y lanzar los servicios que
nos para diversos asuntos, en la puerta de nuestro
se necesitan con scripts hechos a la medida.
edificio se encuentra un señor muy colaborador,
Verifiquemos si el demonio esta en ejecución:
$ ps -A | grep ‘xinetd\|inetd’ altamente servicial diría YO (que a veces se creen
2106 ? 00:00:00 xinetd dueños de los Edificios o Empresas) comúnmente
Luego paramos el proceso:
llamado vigilante o portero. Este señor permite la
$ /etc/rc.d/init.d/xinetd stop entrada y flujo de personas en nuestra Empresa
indicando donde quedan nuestras oficinas, una vez
Y nuevamente nuestro amigo chkconfig nos dará
ingresa la persona que te busca por X ó Y motivos
la mano:
(posiblemente por esa platica que no le has paga-
$ chkconfig —del xinetd do!!) y se encuentra con la recepcionista o secretaria
de tu oficina, la cual discreta y diplomáticamente nos
NOTA: Ya sabrán para que se ejecuta, si no con avisara quien llego y como no tienes los $$$ para
el dolor del alma a devolverse unas líneas atrás y pagar, el paso siguiente será la negación, labor que
leer nuevamente para que es esta vaina, porque se la encomendamos a nuestra secretaria para que
MIguelito =YO, no lo repetiré! finiquite la visita no deseada.
Para culminar nuestra labor con los archivos de Ah vieron!!! que fácil era entenderlo, ahora un poco
configuración del Demonio: mas informático o Geeks como les gusta a Uds.
El mismo ejemplo
# rm -f /etc/rc.d/init.d/xinetd Desde nuestro computador enviamos un correo
# rm -f /etc/xinetd/conf
# rm -f /etc/xinetd.d por medio de un cliente de correo como Outlook,
Eudora, etc. La cual realizara una conexión por el
Y reinicie nuevamente su Sistema: puerto 110 al servidor, una conexión POP.
Este a su vez jugando un papel importante nuestro
#Shutdown –r now amigo (El señor Portero) inetd (espero que lo hayan
leído), le dirá al Servidor que servicio debe utilizarse
NOTA: También pueden utilizar las herramientas y responder a las conexiones que demonio y que
36
2106 ? 00:00:00 xinetd
puerto debe responder. Entonces es aquí en donde
entra en acción nuestro gran aliado el señor TCP # kill -HUP 2106
37
con FW de Hosts como son iptables, Keyros, Zona
nivel de transporte (nivel 4) como el puerto origen y Alarm, en algunas circunstancias se aprovecha la
destino, o a nivel de enlace de datos (nivel 2) como integración de productos como ISA SERVER de
la dirección MAC. Windows 2K.
Cortafuegos de capa de aplicación Encontramos un sin número de soluciones, entre
Trabaja en el nivel de aplicación (nivel 7) de manera las cuales en Linux IPTABLES / IPCHAINS o inter-
que los filtrados se pueden adaptar a características faces de la misma
propias de los protocolos de este nivel. Por ejem- 1) Kmyfirewall.
plo, si se trata de tráfico HTTP se pueden realizar 2) Easy Firewall Generator.
filtrados según la URL a la que se está intentando 3) Firewall Builder.
acceder. Un cortafuegos a nivel 7 de tráfico HTTP, es 4) Shorewall.
normalmente denominado Proxy y permite que los 5) Guarddog.
computadores de una organización entren a internet 6) FireStarter.
de una forma controlada. 7) Smoothwall.
Cortafuegos personales 8) IPCop.
Es un caso particular de cortafuegos que se ins- Para el ejemplo vamos a trabajar con NetFilter, sin
tala como software en un computador, filtrando las más rodeos:
comunicaciones entre dicho computador y el resto Para añadir una regla:
de la red y viceversa # iptables -A INPUT -i eth0 -p tcp —dport 80 -d
192.168.0.1 -j ACCEPT
-A Adiciona una regla
-i Específica la Interface de Red que va a utilizar
para aplicar la regla
-p Especifica que va a filtrar paquetes TCP (Si
va a utilizar paquetes UDP o ICMP debe especificar-
lo). De igual forma podría especificar el protocolo
por el numero, como el 50 para la autenticación con
IPSEC.
—dport Indica el puerto, en este caso el 80
para el tráfico en la Web (HTTP)
-d Solo los paquetes que van para esta direc-
ción (en nuestro caso 192.168.0.1
-j Nos indica la acción a tomar en este caso
Pero tengamos en cuenta que no es la Pa- es un ACCEPT (acepta solo si cumple la condición
nacea, es solo un elemento del esquema de el paquete)
seguridad. Para visualizar, veamos el Modelo Se pueden aplicar otras condiciones como:
# iptables -A INPUT -i eth0 -p tcp —dport 80 -d
de Defensa en Profundidad: 192.168.0.1 -j DROP
En resumen nunca dependamos de un solo ele- En este caso si el paquete cumple la condición
mento, en lo posible implementar un modelo de será Dropped (desechado)
capas de seguridad como el anterior. Para añadir en un tráfico seguro:
Si deseas un poco más de info de los FW, te invito # iptables -A INPUT -i eth0 -p tcp —dport 443 -d
192.168.0.1 -j ACCEPT
a leer:
Solo repasemos el significado de los flags (ban-
http://www.ietf.org/rfc/rfc2979.txtComparativas de
deras/opciones) anteriores con
firewalls personales
un puerto https.
Pero veamos el Hardening a los FW
Los FW Pueden constituirse como la primera línea # iptables -A OUTPUT -o eth0 -p tcp —sport http -j
de defensa en su red, generalmente se ubican sobre ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp —sport https -j
un servidor de seguridad, son amenudo basados en ACCEPT
Hardware con dispositivos de Checkpoint, Cisco,
SonicWall, SmootWall,etc. Complementandolos Aquí, estamos creando una regla para ambos http
38
archivo /proc/sys/net/ipv4/ip_local_port_range este
y https para permitir el tráfico de los hosts pero no define el puerto local que se utiliza para el tráfico
se permitirá que el Servidor Web devuelva tráfico a TCP y UDP. El primer número es el primer puerto
los hosts (de salida). Se tendrían que crear reglas local para permitir el tráfico TCP y UDP en el servidor,
adecudadas para el buen funcionamiento del Ser- la segunda es el último número de puerto locales
vidor Web en el trafico de salida. Una observación Ej: «1024 4999». Una buena medida es cambiar los
en esta regla, utilizamos –sport para indicar los dos parámetros que tiene por defecto 32768-61000.
puertos http y https.
Si no estás seguro que puertos tienes asignados # echo «32768 61000» >/proc/sys/net/ipv4/ip_local_port_
puedes consultar el archivo: range
Es recomendable efectuar un mapa del trafico de Si desea borrarlas todas solo adicione el flag (ban-
la Red para saber que reglas debe crear, consulta el dera/opción) –F
39
su Host, recuerden que existen más enfoques de
# iptables -F INPUT
seguridad a nivel perimetral de sus servidores, este
sería el complemente en sus estaciones de trabajo
O también: (tema interesante DMZ e Iptables).
# iptables -F
Bien, creo que hasta aquí llegaremos con el artí-
# iptables -L culo, este ya se hizo muy extenso, solo explicando
Chain INPUT (policy DROP)
target prot opt source destination
lo básico de los dos primeras Actividades (I,II) del
Chain FORWARD (policy DROP) tema de Hardening, y como ya lo había mencionado,
target prot opt source destination
Chain OUTPUT (policy DROP)
este espacio de conocimiento y entretenimiento no
target prot opt source destination nos dará lo suficiente para tratar el tema, por lo tanto
no me resta mas si no agradecer por su atención
Si no se especifica el uso de una tabla, IPTABLES y dedicación al leer estas pocas líneas de un tema
tomara por default la tabla filter tan fascinante pero a su vez tan complejo y extenso,
ojalá sirva de ayuda o al menos motive para tomar
# iptables -t nat -L
Chain PREROUTING (policy DROP)
conciencia de la necesidad de aplicar buenas prác-
target prot opt source destination ticas de seguridad.
Chain POSTROUTING (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP) «La inseguridad no es más que el reflejo de tu
target prot opt source destination
Negligencia e Ignorancia, lo único seguro es que
no hay nada seguro, solo mitigas el riesgo»
Cada regla tiene un contador. Para ver estos con-
tadores, y un total de cada cadena cuando se lista Con cariño,
todas sus normas con -V y – L
# iptables -L -v
Chain INPUT (policy ACCEPT 25897 packets, Dino
2300K bytes)
pkts bytes target prot opt in out source
destination
La tabla filter
Construcción de reglas
Comando
«A cadena «> Insertar al final
«D cadena «> Borrar
«R cadena num «> Reemplazar
«I cadena num «> Insertar
«L «> Listar
«F «> Limpiar
«N cadena «> Crear cadena
«X «> Eliminar cadena
«P «> Cambiar política
40