Vous êtes sur la page 1sur 40

E-ZINE

#07 Abril de 2008

1
INDICE
Redactores

Unknownmind Adminstración y Seguridad en Wordpress 3


Hernandgr
Epsilon77
Jhon Jairo Hernández
Lordjackob Blind SQL Injection, un enemigo oculto de los
desarolladores Web 15

Seguridad en Aplicaciones Web 18

Diagramación Creando un Compilador con JAVA 25


José Julián Orozco García
Tel: 312 2614571
Hardening By Dino 30

Diseño

Zyrus
www.zyrusweb.com

Web
www.dragonjar.org

2
Adminisrtración y Seguridad en
Wordpress
Acerca del autor 2. ¿Qué es Wordpress?

Mi nombre es Unknownmind soy de Colombia WordPress es un sistema de gestión de conteni-


tengo 22 años. Soy estudiante dos enfocado a la creación de blogs. Desarrollado
de Química Pura de sexto se- en PHP y MySQL, bajo licencia GPL, tiene como
mestre pero también me auto- fundador a Matt Mullenweg. WordPress fue creado a
denomino un Geek de Internet partir del desaparecido b2/cafelog y se ha convertido
y más del diseño Web. Actual- junto a Movable Type en el CMS más popular de la
mente estoy profundizando en blogosfera. Las causas de su enorme crecimiento
el manejo de los CMS (Content son, entre otras, su licencia, su facilidad de uso y sus
Management System) especial- características como gestor de contenidos. También
mente en Wordpress, Joomla y una de las causas, es su enorme comunidad de
phpBB. Espero este manual sea de gran ayuda para desarrolladores y diseñadores, que se encargan de
los actuales y futuros Blogers de la Red. crear plugins y themes para la comunidad.

Hoy en día es interesante instalar y gestionar tu 3. Estructura de Wordpress


propio Blog ya que es una manera de expresarte a
través de Internet. Además no solo puedes utilizar- • Fácil instalación, actualización y personaliza-
lo como una herramienta de expresión individual ción.
sino también utilizarlo como una herramienta para • Sigue las recomendaciones del W3C.
formar una comunidad online. Este manual tiene • Separa el contenido y el diseño en XHTML y
como objetivo enseñar a un usuario de cualquier CSS.
nivel en este campo de la informática a Instalar y • Posee herramientas de comunicación entre
administrar un Blog en Wordpress así como también blogs (Trackback, Pingback, etc).
manejar una seguridad digna para evitar intrusiones • Importación desde Movable Type y Typepad,
y/o violaciones a tu información. Espero les sea de Textpattern, Greymatter, Blogger, Dotclear, Li-
su agrado…. vejournal, Blogware y desde cualquier RSS.
• Se está trabajando para poder importar desde
pMachine y Nucleus.
1. ¿Qué es un Blog? • Fácil integración con el foro bbPress de los
mismos creadores de Wordpress.
Un blog, o en español también una bitácora, es • Integración con el foro Vanilla de Lussumo
un sitio web periódicamente actualizado que factible.
recopila cronológicamente textos o artículos de • Integración con Ajax
uno o varios autores, apareciendo primero el
más reciente, donde el autor conserva siempre la 4. Funcionalidades de Wordpress
libertad de dejar publicado lo que crea pertinente.
El término blog proviene de las palabras web y log • Puede haber múltiples autores.
(‘log’ en inglés = diario). El término bitácora, en • Permite ordenar artículos y páginas estáti-
referencia a los antiguos cuadernos de bitácora de cas en categorías, subcategorías y etiquetas
los barcos, se utiliza preferentemente cuando el (“tags”).
autor escribe sobre su vida propia como si fuese • Capacidad de crear páginas estáticas a tra-
un diario, pero publicado en Internet en línea. vés de la base de datos (a partir de la versión
1.5).
• 3 estados para un post: Publicado, Borrador,

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

Para instalar nuestro Blog Wordpress necesitamos


un espacio en donde instalarlo, este debe tener un
sitio mínimo de 50 Mb, una base de datos y que
soporte o intérprete el lenguaje PHP. Si buscamos
por Internet hay muchas opciones de hosting gra- El lenguaje por defecto de la instalación que apa-
tuitos con estas características y muchas más. Pero rece es English [Inglés], en español esta versión
la idea de este manual es mostrar que es posible todavía no se encuentra disponible, ya se esta desa-
instalar tu propio Blog y visualizarlo en tu propio rrollando la versión 1.6.6 estable tal ves esta versión
servidor local. lleve el paquete del idioma Español. Lo importante es
que la interfaz de administración si esta en español,
5.1 ¿Qué es Xampp? lo veremos más adelante.
XAMPP es un servidor independiente de platafor- Simplemente en la instalación de esta aplicación
ma, software libre, que consiste principalmente en la debes entender cada paso, si es posible léelo así
base de datos MySQL, el servidor Web Apache y los no sepas inglés. Casi siempre se aplica next – next
interpretes para lenguajes de script: PHP y Perl. El –next a todo pero mira este paso:
nombre proviene del acrónimo de X (para cualquie-
ra de los diferentes sistemas operativos), Apache,
MySQL, PHP, Perl. El programa esta liberado bajo la
licencia GNU y actúa como un servidor Web libre, fá-
cil de usar y capaz de interpretar páginas dinámicas.
Actualmente XAMPP esta disponible para Microsoft
Windows, GNU/Linux, Solaris, y MacOS X.

6. Instalando Wordpress

Aquí arrancamos con la instalación de Wordpress,


actualmente (Mayo de 2008) la ultima versión es
wordpress 2.5.1. Que puede descargarse del sitio Si llegas a este paso observa muy bien que debes
oficial http://wordpress.org seleccionar las opciones Install Apache as service y
http://wordpress.org/latest.zip Install MYSQL as service. Te preguntarás ¿Por que

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:

Esta imagen significa que esta corriendo co-


rrectamente nuestro servidor local XAMPP.
Ya tenemos instalado Xampp ahora abriremos un
navegador: Explorer, Firefox, Opera o el que quieras,
en mi caso abriré Firefox y en el campo de la url
escribiré localhost. Elegimos nuestro idioma y listo.
Bueno ahora conoceremos mas cosillas impor-
tantes para instalar nuestro Blog, Vamos a la ubi- Ahora copiemos o cortemos esta carpeta dentro
cación donde instalamos Xampp. En mi caso C:\. Si de la carpeta htdocs de Xampp.
entramos a la carpeta htdocs fíjate muy bien en la
carpeta. Esta carpeta contendrá todos los archivos Y podemos cambiar el nombre de la Carpeta por
de nuestro Blog. accesibilidad. En mi caso le pondré Unknownmind.

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)

Una de las funcionalidades de Wordpress es que


permite el registro de usuarios y para esta función
Ahora nos vamos de nuevo a nuestro navegador y necesitamos una base de datos, además es un re-
actualizamos o escribimos http://localhost/Unknown- quisito de instalación. ¿Cómo crearemos una base
mind, recuerda que Unknownmind es el nombre de de datos? Pues para eso esta Xampp.
mi carpeta…Debes aplicarla a la tuya, ejemplo http://
localhost/dragon. En nuestro navegador nos vamos de nuevo a local-
host y si observamos muy bien en la parte izquierda
se encuentran estas herramientas:

Damos clic en Create a Configuration File

Traducción: Bienvenidos a WordPress. Antes de Damos clic en phpMyadmin:


comenzar, necesitamos alguna información sobre la
base de datos. Usted tendrá que conocer los ítems
siguientes antes de proceder.

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.

Ya hemos creado nuestra base de datos. Ahora nos


devolvemos al navegador donde vamos a instalar La imagen anterior nos indica que los datos del
wordpress y damos clic en Let`s go. formulario son correctos y continuamos con la ins-
talación. Clic en Run the install.
Ahora nos encontramos con un formulario el cual
solo se debe poner el nombre de la base de datos Llenaremos los datos de nuestro Blog como el
que hace poco creamos, en mi caso myblog, user Título y nuestro E-mail. Clic en Install Wordpress.
name: root, password: lo dejaremos en blanco, da-
tabase Host: localhost

Felicitaciones tu Blog Wordpress ha sido instala-


do
Username: admin.
Password: J4RpX0yHTNAa

Ahora ya tenemos nuestro nombre de usuario y


nuestro password ahora simplemente los utilizamos
para acceder como Administradores de nuestro Blog.
Y observaremos nuestro panel de administrador.

En este último campo Table Prefix nos piden el


prefijo de las tablas de la base de datos, pues ahora
ya empezaremos a tratar la seguridad de este CMS,
para evitar intrusiones o injecciones SQL a nuestro
Blog lo que recomiendo es cambiar el prefijo por
defecto wp_ por uno menos convencional. Ejemplo:
blog_ este sería el primer paso de seguridad en
nuestro Blog que empieza en su Instalación.

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

Damos clic en admin y más abajo observamos una


parte del formulario el cual permite cambiar nuestro
password

Existe una parte que define nuestro lenguaje en-


tonces modificaremos esa línea así:

define (‘WPLANG’, ‘es_ES’); Simple-


mente agregamos es_ES, luego cerramos y guar-
damos los cambios.

De esta manera nuestro panel de administración


Luego de cambiar el password damos clic en ac-
y nuestro Blog en general cambia automáticamente
tualizar perfil
al lenguaje Español. . Ve al panel de administración
y dale actualizar.
7.0 Cambiando el idioma a Español
Ahora ya tenemos nuestro panel de administración
Considero que no es necesario cambiar el idioma
actualizado.
de English a Spanish en este mundo lleno de opor-
tunidades, pero como es cuestión de vida o muerte
para algunos Blogers (Incluyéndome) cambiaremos
el lenguaje del Blog a Español.
7.1 Instalando un Theme
Como primer paso descargaremos el paquete del
En general un Theme es una plantilla de diseño
lenguaje español que se encuentra en este sitio
para una página Web en nuestro caso para nuestro
http://carrero.es/wp-content/uploads/2008/03/wp-25-
Blog. Si observamos la página principal de nuestro
castellano.zip después de descargar y descomprimir
Blog http://localhost/Unknownmind se encontrará
el paquete observamos la carpeta Includes y dentro
una plantilla que viene por defecto con Wordpress.
de esta carpeta otra llamada Languajes. Esta última
La ubicación donde se instalan los themes es C:\
carpeta debemos copiarla y pegarla en la siguiente
xampp\htdocs\Unknownmind\wp-content\themes.
ruta:
Ahora instalar un theme es tan sencillo como instalar
Xammp .
C:\Xampp\htdocs\Unknownmind\wp-includes. Es
decir pegaremos la carpeta Languajes dentro de
Vamos a descargar un Theme a nuestro gusto. Ten
la carpeta includes. Luego iremos a la carpeta de
en cuenta Colores, diseño, letra, etc. Bueno yo ya
nuestro Blog en mi caso la carpeta
elegí el mío se llama Mandigo y lo he modificado.

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.

ahí estará todos los themes que tengamos ya insta-


lados. Simplemente lo seleccionas y se mostrará.
Cuando selecciones el Tema. Vas al sitio http:// Bueno ya he activado el plugin que agrega una o
localhost/Unknownmind varias encuestas a mi Blog. Ahora vamos a agregarlo
para que sea visible en nuestro Blog.

Automáticamente después de activas este plugin,


aparecerá un nuevo botón llamado Polls

Puedes observar que ahí se encuentran todas las


opciones de nuestro plugin de encuestas. Como
primera medida crearé una encuesta para mostrar,
clic en Add Poll.
Ahí esta ya el Theme instalado y listo.
Tengo que aclarar que cada plugin que descargues
7.2 Instalando un plugin viene con su respectivo archivo readme en donde
se encuentra toda la información para la instalación
Un plugin es una aplicación que interactúa con y su uso. Si lees el archivo readme de el plugin de
nuestro Blog para aportarle una función o utilidad, encuestas te das cuenta que debes agregar un
generalmente muy específica. Un ejemplo agregar código a tu theme actual. Para eso debemos ir a la
un álbum de fotos, un formulario de contacto, un pestaña Diseño (donde se encuentran todos nues-
modulo de encuestas, etc. Hay demasiados en pá- tros themes) y en la pestaña Editor de temas, como
ginas de desarrolladores de Wordpress incluyendo se muestra a continuación:
su página principal. http://wordpress.org/extend/
plugins/.

Bueno en general instalar un plugin es muy pareci-

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 (function_exists(‘vote_poll’) && !in_ Luego lo descomprimimos y ubicamos el archivo


pollarchive()): ?> en C:\xampp\htdocs\Unknownmind\wp-content\
<li>
plugins.
   <h2>Polls</h2>
   <ul>
      <li><?php get_poll();?></li> Entramos al panel de administración y activamos
   </ul>
el plugin
   <?php display_polls_archive_link(); ?>
</li>
<?php endif; ?> Luego de activarlo, como ya lo habiamos hecho
con el anterior plugin agregamos este código en
Si observas muy bien al lado izquierdo de nuestro nuestro sidebar de nuestro theme…Recordemos
editor de temas, es muy fácil identificar cada código la pestaña Diseño  Editor de temas  Sidebar o
con cada visualización del theme. Por ejemplo el barra lateral:
código que corresponde al calendario que se ve en <?php if (class_exists(‘EM08’))
mi Blog es este: <?php widget_mandigo_calendar(); {EM08::nextMatch();}?>
?>. Ahora debajo de este código pegaré el del plugin
de la encuesta y guardaré mi archivo sidebar.php: El código anterior muestra los partidos próximos
y el siguiente muestra los partidos en vivo, lógica-
mente aparecen todos en ceros por la EUROCOPA
no a empezado… Lastima que mi equipo Inglaterra
no este… 

<?php if (class_exists(‘EM08’))
{EM08::currentMatch(1);}?>

Luego de Actualizar el archivo, tendremos nuestro


plugin listo en nuestro Blog. Y ya nuestros visitantes
pueden interactuar con él…

10
estandares Web

7.3 Servicios recomendados para tu 11. http://cloford.com/resources/colours/500col.


Blog htm
Mas de 500 Colores en Hexadecimal
De la poca experiencia que tengo en el desarro-
llo Web he utilizado excelentes servicios para mi 12. http://moourl.com/
Blog, así como también excelentes plugins. De esta Acorta URls demasiado largas
manera hago una recopilación de todos ellos, para
darle un toque profesional, dinámico y adaptable a 13. http://xhtml-css.com/
la Web 2.0…. Validar tu código xhtml y css

1. http://tester.jonasjohn.de/ [Recomendado] 14. http://www.genfavicon.com/es/


Son 100 Herramientas para testear tu sitio Web Generador de favicones
tipo validación xhtml, links rotos, etc
15. http://www.genfavicon.com/es/
2. http://linkbun.ch/ Contador de usuarios Online en tu Web
Excelente herramienta que agrupa una cantidad
de enlaces en uno solo... 16. http://www.formstylegenerator.com/
generador de estilos para formularios
3. http://www.artviper.net/colorfinder.php
Obtener todos los colores que posee una Web. 17. http://www.quickribbon.com/index.php
Muy util cuando guiamos nuestro diseño de otros Generador de tiras diagonales
sitios
18. http://www.andanza.com/index.htm
4. http://www.sprymedia.co.uk/article/Design Ver tu Blog desde cualquier dispositivo Móvil
Recopilación de herramientas basadas en Javas-
cript 19. http://fawnt.com/
Fuentes gratuitas
5. http://www.mylivesignature.com
Si tienes un Blog o Web personal puedes agregar- 20. Muy util para los foros
le una firma digital personalizada http://www.bbcode-to-html.com/
Convertir bbcode a html...
6. http://logogenerador.com/
Crea tus Logos 2.0 Online [Recomendado] 21. http://dryicons.com/free-icons/
Recopilación de excelente iconos descargables
7. http://logogenerador.com/ bajo licencia Creative Commons 3.0
Javascript que nos permite convertir texto a .png
Algunos Plugins
8. http://www.designoogle.com/
Buscador de temas y artículos que nos pueden Akismet: Controla el Spam
servir para inspirarnos en diseño Calendar: Agrega un calendario dinámico
flickrRSS: Agrega un álbum de fotos de tu cuenta
9. http://www.superscreenshot.com/ Flickr
Herramienta online que nos permitirá tomar captu- Google XML Sitemaps: Crea un sitemap del Blog
ras Web al instante con diferentes resoluciones de Jalenack’s Wordspew: Agrega un pequeño tag-
pantalla board (Chat)
PopStats: Estadísticas completas de tu sitio
10. http://code.google.com/p/ie7-js/ WP-ContactForm: Formulario de contacto
Script para que Iexplorer se comporte acorde a los WP-Polls: Encuestas en tu Blog

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….

8.1 Consejos de seguridad obvios

Aquí van algunos consejos de seguridad obvios


para nuestro Blog

• Es indispensable actualizar la versión de nues-


tro Blog ya que para este tipo de CMS existen
muchas vulnerabilidades el cual en manos
de un Scripkiddie o un defacer es una delicia
informática. Actualizar el Blog es sencillo sim-
plemente guarda el archivo wp-config.php y un
backup de tus post posteriormente reemplaza
todos los archivos de la vieja versión por la
nueva y luego reemplaza el archivo wp-config
que guardaste por el nuevo.
• Las vulnerabilidades provienen muchas veces
de los plugin por esta razón se deben actualizar
(reemplazar) la versión vieja de un plugin. La
versión 2.5.1 de Wordpress nos da un aviso
cuando los plugins están desactualizados.
Para algunos Blogers es molesto pero es por
la seguridad del Blog.
• Realiza constantemente Backups de tus post
• Utiliza la mayor cantidad que puedas de Plugins
de seguridad que minimicen la inseguridad de
tu Blog.
• Recuerda cambiar el nick por default de la ad-
ministración y crea un password más seguro.
• Sabemos que un Blog es una bitácora de nues-
tra vida. Pero es importante no expresar en

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-
OpcionesLogin 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>

que cuando inyectamos las sentencias(-) podemos


concluir que los parámetros si se están ejecutando, Nos arroja el mismo resultado que las senten-
ahora bien si ejecutamos las sentencias(+) y nos cias(+) quiere decir que el tamaño de la cadena es
muestra una pagina de error personalizada que mayor a 10.
no nos deja ver ningún tipo de información sobre la Listo ya tenemos el tamaño de la cadena, ahora
base de datos, entonces esto es un buen síntoma, vamos a buscar la cadena, inyectando esta sen-
16
de como funciona:
tencia:

www.victima.com/secciones.php?id=3 and 300>ASCII(subs


tring(user(),1,1)) Web oficial: http://sqlninja.sourceforge.net/
Ir a videotutorial: http://sqlninja.sourceforge.net/
Con esta inyección, lo que hacemos es comparar sqlninjademo.html
si el ASCII de la primera letra del nombre del usuario
es menor que 300, obviamente esta inyección nos * BOBCAT: Esta es una herramienta que auto-
arrojara el mismo resultado que la sentencias(-), por matiza el proceso, es utilizada por analistas de se-
qué? pueden mirar la tabla ASCII y se darán cuenta guridad, algunas características importantes, son:
por que xD. Después iríamos acotando la búsqueda muestra facilimente el mapa de la base de datos,
mas o menos así: tiene interfaz grafica, es interesante vale la pena
probarla Xd
www.victima.com/secciones.php?id=3 and 100>ASCII(substring(us
er(),1,1)) —> sentencias(+)
www.victima.com/secciones.php?id=3 and 120>ASCII(substring(us Web oficial: http://www.northern-monkee.co.uk/
er(),1,1)) —> sentencias(-) projects/bobcat/bobcat.html

si analizamos estos resultados podemos ver cla- CÓMO PROTEGERNOS!!


ramente que el ASCII de la primera letra esta entre
100 y 120, seguimos acortando la búsqueda: Hay varias formas de protegernos ante esta vul-
nerabilidad, quizás la defensa mas importante es
www.victima.com/secciones.php?id=3
ring(user(),1,1)) —> sentencias(+)
and 110>ASCII(subst que todos nos concienticemos, y aprendamos una
www.victima.com/secciones.php?id=3 and 115>ASCII(subst programación mas segura. Igualmente también
ring(user(),1,1)) —> sentencias(-)
www.victima.com/secciones.php?id=3 and 114>ASCII(subst
podemos procurar, que el cliente nunca suministre
ring(user(),1,1)) —> sentencias(-) datos para modificar la sintaxis de comandos SQL,
www.victima.com/secciones.php?id=3
ring(user(),1,1)) —> sentencias(-)
and 113>ASCII(subst es decir, aislar la aplicación web desde SQL com-
www.victima.com/secciones.php?id=3 and 112>ASCII(subst pleto.
ring(user(),1,1)) —> sentencias(-)
www.victima.com/secciones.php?id=3 and 111>ASCII(subst
Podemos implementar una interfaz segura como
ring(user(),1,1)) —> sentencias(+) la de JDBC o ADO’s estas interfaces, ayudan a que
nuestra aplicación sea mas segura, además tienen
ya sabemos que el ASCII de la primera letra es 111 otras ventajas como de fácil manejo entre otras.
que equivale a la letra «O», y así seguiríamos, obte- Finalmente debemos reforzar todos estos consejos
niendo todos los caracteres, cabe aclarar que esto no haciendo pruebas de penetración a nuestra aplica-
puede funcionar debido a las versiones del servidor, ción para saber que bug presenta y poder repararlo,
a lo mejor faltaran algunas comillas o paréntesis. para esto podremos utilizar, las herramientas men-
cionadas anteriormente o similares.
ALGUNAS HERRAMIENTAS!!! Bueno esto ha sido todo, espero que les haya gus-

Como pudimos ver, el proceso puede ser largo y REFERENCIAS:


tedioso para sacar información por este método, pero
para ello, se ha creado diferente software todo con el fin • www.dragonjar.org
automatizar esta tarea, voy a mostrar, algunas de ellas, • www.google.com
que en mi criterio me parecen las más interesantes: • www.hernanracciatti.com.ar

* lSQL NINJA: Esta es una herramienta free, bajo


la licencia GPL, es un escáner que busca vulnerabi-
lidades a nivel de base de datos, es muy poderosa
ya que te permite hacer fingerprint, fuerza bruta, es-
calada de privilegios, entre otras, en la pagina oficial,
se puede descargar y además ver un videotutorial

17
SEGURIDAD EN APLICACIONES WEB
POR: hernandgr

De la mano de la evolución de nuevas tecnologías, de un usuario y una contraseña.


tanto en hardware como a nivel lógico, es decir, pro-
gramas, sistemas operativos, protocolos, lenguajes,
y herramientas de programación, etc. el desarrollo
de software también ha tenido un progreso que ha
aprovechado todas las ventajas que estas nuevas
tendencias pueden ofrecerle.
Es así pues como hemos pasado por diversos La página que recibe estos datos puede contener
modelos de desarrollo de software: las aplicaciones una consulta como de este estilo para validar al
de escritorio individuales en un principio, luego el usuario:
desarrollo de otros modelos como el cliente/servidor, Consulta=”SELECT * FROM tbl_usuario WHERE
nomUsuario=’”+nombreUsuario+”’”
y finalmente con el auge de la Internet y la expansión
de la red de redes se dio la posibilidad del desarrollo
de aplicaciones en entorno web, que permiten el Entonces agregando la siguiente información en
acceso desde cualquier lugar del mundo a recursos el campo usuario:
centralizados o distribuidos en servidores, sólo te- Tendríamos que al enviar la página, si no se validan
niendo como requisito un PC o un dispositivo móvil adecuadamente los datos, obtendríamos la siguiente
con un navegador web y una conexión a Internet consulta SQL.
disponible.
El desarrollo de aplicaciones web ha ampliado y ha Consulta=”SELECT * FROM tbl_usuario WHERE
nomUsuario=’a’ or 1=1; delete from tbl_usua-
abierto muchas posibilidades de negocio mediante rio; —”
todas las ventajas y la flexibilidad que ofrece, pero
a su vez, también ha crecido la amenaza que puede Si se ejecuta esta consulta en el servidor de bases
tener la información y los recursos que están ex- de datos, el resultado obtenido sería la eliminación
puestos para su acceso. Muchas veces el proceso de la información contenida en la tabla tbl_usuario.
de desarrollo de software se concentra mucho en Aunque en realidad esto sólo funcionaría si los pri-
la funcionalidad del mismo, y no da la suficiente vilegios del usuario con el que corre la aplicación
importancia a otros aspectos que también la deben tiene permitido eliminar tablas.
tener, entre ellos la seguridad. Esta es sólo una muestra de lo que se puede hacer,
Este artículo pretende mencionar y dar a conocer pero las posibilidades que se tienen al encontrar esta
cuáles son algunas de las principales amenazas vulnerabilidad son muchas.
a las que se ve expuesta una aplicación web, sus La mejor forma de prevenir un ataque de Inyección
implicaciones y prevenciones. SQL es validar completamente todos los datos de
entrada de una aplicación antes de hacer cualquier
1. Inyección SQL: operación sobre la base de datos. No se debe
permitir el ingreso de caracteres potencialmente
Cuando se hace una inyección SQL en una apli-
peligrosos como [*], [%], [;], [“], [‘], etc. Y lo más
cación, se inserta un comando SQL que se ejecuta
importante es que esta validación debe hacerse
en el servidor para alterar su funcionamiento normal
en el lado del servidor. Las validaciones Javascript
o para obtener datos de éste.
utilizadas comúnmente en el lado del cliente no
Un ejemplo. Supongamos un formulario de Login
son suficientes, pues los datos enviados al servidor
común que tiene
pueden ser modificados fácilmente utilizando diver-
dos campos de
sas herramientas. La información susceptible de
texto para ingre-
ser modificada puede ser campos en formularios,
sar información
campos ocultos o cookies de usuario.

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.

script como Javascript, VBScript, Flash o cualquier


otro tipo de código activo que interpreta el nave- La información del Servidor Web se consigue veri-
gador. El problema se debe normalmente, a que ficando los encabezados que devuelve una página al
como en la Inyección SQL no se validan correcta y hacerle una petición al servidor. Existen herramien-
completamente todos los datos de entrada. tas que ayudan a obtener dicha identificación, como
Aquí vemos un sencillo ejemplo de cómo se proce- por ejemplo la extensión ServerSpy de Firefox.
sa un dato de entrada que es escrito en el navegador, Esto se puede prevenir configurando el servidor
y que no es validado. para que no muestre su encabezado o para que
Los ataques XSS pueden usarse para robar datos muestre uno modificado. Cabe aclarar que esta
como cookies o identificadores de sesión del usua- prevención no es una solución completa, pues tam-
rio, que pueden contener información confidencial bién existen herramientas que pueden identificar
y ser usados para robar la identidad de su usuario el servidor sin depender del encabezado, como el
original. software httprint.
Las maneras de proteger una aplicación de
estos ataques en un principio debe ser validar 4. Denial of Service (DoS)
los datos y evitar caracteres que puedan ser
usados para ataques XSS, como <, >, (, ), #, La denegación de servicio ocurre cuando un servi-
&. Así mismo, validar y filtrar los datos que se dor o recurso web es usado en forma exagerada o
van a mostrar. es objeto de peticiones desmesuradas que pueden
Así mismo, como usuario al navegar por pá- terminar por desbordar su capacidad o tráfico y
ginas potencialmente peligrosas que puedan provocar errores en los servicios.
utilizar un ataque de este tipo para robar datos Una denegación de servicio se puede prevenir
de los usuarios, se debe prevenir la ejecución de mediante el uso de esquemas de seguridad como
scripts malignos, por ejemplo mediante el uso de firewalls que eviten la exposición directa de un ser-
herramientas como las extensiones de Firefox
19
Luego enviar al correo electrónico del usuario un
vidor y que filtre los contenidos que recibe y que enlace que le permita acceder a un sitio donde in-
envía. gresar una nueva contraseña. Dicho sitio no debe
Aunque cabe resaltar que como estamos hablando tener un periodo muy prolongado de validez, pasado
de seguridad en aplicaciones web. Un firewall tradicio- un lapso de tiempo debe caducar.
nal no es suficiente, también es conveniente usar un
firewall de aplicación, como ModSecurity, el cual corre Un ejemplo práctico de vulnerabilidades
como un módulo del servidor web Apache y provee pro- en aplicaciones web
tección contra diversos ataques a aplicaciones web.
Para ilustrar algunos ejemplos de vulnerabilidades
5. Mala administración de un sitio web
que pueden presentar Aplicaciones Web, usaremos
como muestra el Hacme Casino, una aplicación de
Es común ver como páginas que hacen uso de pla-
FoundStone, una división de McAfee®.
taformas virtuales disponibles a todo el mundo, como
El Hacme Casino es una aplicación dirigida a todos
wordpress, joomla o el célebre PHPNuke, entre
los desarrolladores y personas que desean probar
otras, son objeto de ataques que se aprovechan de
y conocer acerca de la seguridad en aplicaciones
vulnerabilidades descubiertas en algunas versiones,
web, mediante una serie de vulnerabilidades ex-
y que por el simple descuido de sus administradores
puestas que pueden ser explotadas y conocer cómo
de no actualizar dicha plataforma, se exponen a ser
funcionan.
víctimas de ataques que pueden ser sencillamente
La descarga del Hacme Casino se puede hacer
realizados con herramientas como exploits que se
desde http://www.foundstone.com/us/resources/
encuentran fácilmente en Internet.
proddesc/hacmecasino.htm. En este sitio se incluye
La recomendación es mantener siempre el soft-
una guía de usuario en idioma inglés que puede ser
ware actualizado con las versiones disponibles que
descargada para saber cómo se instala la aplicación
corrigen las vulnerabilidades descubiertas.
y cómo se pone en funcionamiento, así como para
Aspectos de seguridad.

* Las contraseñas deben permanecer


siempre encriptadas en la base de datos, de
forma que nadie pueda visualizar el texto de
la contraseña.

* El envío de contraseñas a través de


páginas también debe ser encriptado para
evitar que personas que rastreen los datos
con herramientas como sniffers puedan
obtenerlos.

* Después de varios intentos equivocados


de acceder a una aplicación es conveniente
implementar medidas que permitan prevenir
que no se es víctima de un bombardeo o ataque conocer todas las vulnerabilidades y la forma en que
automatizado, por ejemplo, el uso de CAPTCHA. pueden ser explotadas. La instalación es muy sen-
* El modo ideal para implementar un recordatorio cilla, simplemente se trata de ejecutar el instalador
de contraseña, sería no mostrar una contraseña que se descarga desde la pagina y una vez instalado,
nueva directamente en pantalla. En primer lugar es ejecutar el servidor de prueba para la aplicación.
bueno que el usuario proporcione datos personales Para esta práctica también se requiere usar un Proxy
o que responda una pregunta secreta que permita para analizar algunas peticiones HTTP. En la guía
identificarlo. de usuario del Hacme recomiendan Paros Proxy, el
cual será el que vamos a usar también.

20
SELECT * FROM USUARIOS WHERE (USUARIO=’<usuario>’ AND
PASS=’<pass>’)

Al ingresar la sentencia que utilizamos en el campo


de usuario, tendríamos como resultado:

SELECT * FROM USUARIOS WHERE (USUARIO=» OR 1=1 —AND


PASS=»)
Esta sentencia es válida a nivel SQL puesto que
devuelve un resultado positivo, y en caso de que no
se valide bien si el usuario y el password realmente
son válidos, permitirá el ingreso a la aplicación.
En el caso del Hacme Casino, nos permitirá el
ingreso con el usuario “Andy Aces”

Una vez iniciado el servidor del Hacme Casino,


estará disponible en el puerto 3000, y se puede

ingresar a la aplicación a través del explorador web


en la dirección http://localhost:3000

Obteniendo “Chips” para jugar

Los chips vienen siendo como las monedas con


las que un usuario tiene derecho a jugar. Viendo en
las opciones que tiene un usuario, éste puede hacer
una transferencia de chips a otros usuarios.
De qué forma es posible obtener chips?... El usua-
rio con el que nos logueamos a través de la Inyección
SQL no tiene ningún fondo a transferir, pero si se
La primera vulnerabilidad: Inyección analiza la petición que se envía cuando intentamos
SQL transferir chips, usando la ayuda del Proxy, veremos
Al tratar de ingresar cualquier nombre de usuario lo siguiente:
y/o password que sean inválidos obtendremos un
mensaje de error.
Pero al intentar introducir una sentencia básica
para provocar una inyección SQL veremos la primera
vulnerabilidad expuesta en el Hacme Casino.
Si utilizamos la sentencia “ ‘) or 1=1— «
podremos ganar el acceso a la aplicación con un
usuario valido.
Si analizamos el por qué de esto, suponemos que
por ejemplo, se tiene una consulta SQL en la base Aquí observamos que se transfieren tres paráme-
de datos del tipo: tros: transfer, login[] y commit. Con estos parámetros

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.

y los usuarios incautos. Cuando entramos a la parte del BlackJack, es-


cribimos el valor a apostar, pero se observa que el
Veamos un ejemplo de cómo funciona en dinero no es aumentado ni reducido de tu cuenta
el Hacme Casino: hasta que completas el juego, y si luego hacemos
clic, por ejemplo, en el enlace al Lobby, simplemente
En primer lugar, nos logueamos en la aplicación se sale sin modificar la cantidad de chips. Por lo
con otro usuario que será la “victima” a la cual se le que el bug es sencillo: si no estás seguro de ganar,
descontarán los chips. El Hacme trae otro usuario simplemente te sales e intentas de nuevo…
llamado “bobby_blackjack” con contraseña “twen- La forma de evitar esto es validar que una vez que
ty_one”, así que procedemos a usar este login. se haga la apuesta, se tenga que completar el juego
Una vez que este usuario está logueado, si pulsa obligatoriamente, o en su defecto, si el jugador se
en la URL que construimos para obtener los chips, en retira del juego, penalizarlo con la pérdida de su
apuesta.

Incrementando el número de chips:

Cuando estamos jugando blackjack, y hacemos


la apuesta, siempre tenemos dos opciones en el
juego: Hit para que nos den otra carta, o Stay para
quedarnos como estamos, y calcular quien gana.

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:

Ahora el jugador dispone de 1180 chips, es


decir, nos sumaron de nuevo la ganancia del
mismo juego. Esto significa que podríamos in-
gresar la URL http://localhost:3000/blac-
kjack/hit_or_stay?act=S después de que
ganemos una vez, y nos sumarán cada vez
que la ingresemos el valor que ganamos.

Este es un error de lógica de programación,


que muestra el tipo de problemas a los que
puede dejar expuesta una aplicación con un código
De estas dos peticiones, surgen estas dos URL: que no se controla totalmente. Si bien las peticiones
AJAX van “por debajo” de la aplicación, esto no quie-
http://localhost:3000/blackjack/hit_or_
re decir que no sean accesibles desde otra parte, de
stay?act=H
http://localhost:3000/blackjack/hit_or_ aquí la importancia de tener en cuenta todos estos
stay?act=S detalles en el proceso de desarrollo para evitar este
tipo de vulnerabilidades.
Cuando se genera la petición para la acción Stay,
se da un cálculo según si se gana o se pierde, esto
es, se aumentan o se disminuyen el número de Previniendo amenazas de seguridad en el proceso
chips. de desarrollo de software
Cuál es la vulnerabilidad aquí?... Vamos a hacer El proceso de desarrollo de software debe prever
un juego de blackjack hasta que logremos ganar la mayoría de los aspectos y funcionalidades que
una vez. va a tener una aplicación, y tratar de describirlas
En esta imagen podemos observar que se ganó con el mayor detalle posible en sus fases iniciales

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.

Spoofing: Posibilidad de acceder con identidad


falsa.
Tampering: Posibilidad de modificación de datos.
Repudiation: Posibilidad de poder probar una agre-
sión ante un intento de denegación.
Information revealed: Posibilidad de acceder a
información confidencial.
Denial of service: Posibilidad de disminución del
servicio de la aplicación.
Elevation of privilege: Posibilidad de que un ata-
cante obtenga permisos de usuario privilegiado.
Damage: Magnitud del daño que se puede reci-
bir
Reproducibility: En qué circunstancias se puede
reproducir el ataque
Exploitability: Dificultad para realizar el ataque
Affected Users: Cantidad de usuarios que pueden
verse afectados en un ataque
Discoverability: Dificultad para descubrir la vulne-
rabilidad
Finalmente, a modo de conclusión es bueno co-
mentar que si bien nunca habrá nada 100% perfecto
debido a que somos seres humanos, la seguridad
depende mucho de los buenos hábitos que tenga
un equipo de desarrollo para tratar de minimizar los
impactos de la seguridad en las aplicaciones.

24
Creando un Compilador con JAVA

por: lordjackob teniendo en cuenta que en compilación 0(cero) es


lordjackob@gmail.com false, y diferente de 0(cero) es true.
En posteriores ediciones agregaremos a dicho
compilador todo lo relacionado con el manejo de
Introducción variables y tipos de datos, estructuras de control
tales como: goto, if – else, for y while, además
Siendo un poco generales podemos decir que un esperamos también poder implementar funciones
compilador es un programa que lee un programa (métodos) tocando temas tales como recursividad,
escrito en un lenguaje determinado (lenguaje fuen- los cuales son muy importantes en el desarrollo de
te), y lo traduce en un programa equivalente pero los compiladores.
en otro lenguaje objeto (puede ser otro lenguaje de Para realizar el compilador necesitamos: conoci-
programación o bien lenguaje maquina). mientos básicos sobre el lenguaje Java, una maqui-
na virtual para la compilación y posterior ejecución
Programa Programa de nuestro compilador y un poco de paciencia.
fuente objeto
Modelo de análisis y síntesis
de la compilación.
Mensajes de error
La compilación puede ser dividida en análisis y sín-
Los compiladores por lo general se clasifican tesis, donde la parte del análisis divide el programa
como de una pasada, de múltiples pasadas, de fuente en sus componentes y crea una represen-
carga y ejecución, de depuración o de optimación. tación intermedia del programa fuente, el cual es
Dependiendo de cómo fueron construidos y de la tomado posteriormente por la parte de síntesis para
función que deben realizar. Aparentemente el pro- construir el programa objeto.
ceso de desarrollo de un compilador es complejo Definiciones:
pero en general, las características de los compi- Identificador: también llamado variable.
ladores son las mismas. Expresión: también conocido como proposición.
La teoría de los compiladores se rige en gran Token: elemento básico indivisible.(if, else, var, =,
medida por teoremas, axiomas y reglas de las mate- !, >, entre otros), el cual puede estar compuesto por
máticas, en este artículo no nos vamos a enfocar en uno o varios caracteres.
el análisis de dichas reglas matemáticas, nos enfo- Lexema: cadena de texto (proposición) de la cual
caremos mas en el aprender a crear un compilador, se deben sacar uno o varios token (Posición = inicial
teniendo en cuenta algunas reglas matemáticas + velocidad * 60) dependiendo de la proposición.
y comenzando por crear una estructura básica, Lexer: también conocido como analizador léxico,
desde la cual podamos crear nuestro compilador es el que se encarga de tomar los lexemas y extraer
e ir agregándole diferentes módulos. los tokens (en este artículo será tratado como una
He elegido el lenguaje de programación Java para clase).
nuestro cometido, en esta primer entrega vamos Parser: es el que se encarga de tomar ese conjun-
a realizar un compilador básico mediante el cual to de tokens y le da una representación en forma de
podamos ejecutar sentencias sencillas tales como: árbol almacenándolos en un bytecode, recorriendo
las operaciones básicas (suma, resta, multiplica- toda la cadena de caracteres y formando el árbol de
ción y división), también le agregaremos a nuestro forma recursiva (en este artículo será tratado como
compilador operadores lógicos (i lógico, o lógico y una clase).
negación) y operadores relacionales (mayor, me- Bytecode: vector (o array) en el cual será alma-
nor, igual, mayor o igual, menor o igual, diferente), cenado dicho árbol.

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.

Nota: de manera similar se implementa la resta,


Ahora vamos a realizar el seguimiento al método la multiplicación y la división.
correr, mediante la cual iniciamos el recorrido por
el código de nuestro compilador, el cual, al finalizar Ejercicio: para implementar los operadores re-
dará como resultado el bytecode con la estructura lacionales y los operadores lógicos, hay que tener
de árbol que necesitamos. en cuenta que los operadores relacionales tienen
Desde el método correr podemos ver como se crea mayor importancia que los operadores lógicos.
la estructura que antes buscábamos, es decir: la Ahora: primero se deben reconocer en el lexer, los
estructura que se sugiere en el algoritmo recursivo elementos necesarios para dichos operadores, es
por la izquierda. decir (&&,||,~,>,<,>=,<=,==, !=), luego en el parser
debemos agregar las funciones necesarias,
es decir: en la función correr se debe llamar
primero a operadores lógicos y desde opera-
dores lógicos a operadores relacionales (ya
saben, por eso de la importancia preceden-
cia), además en la clase compilador debemos
agregar las constantes relacionadas con los
operadores que vamos a incluir y finalmente
se debe modificar la virtualmachine para que
pueda procesar dichos elementos.
Nota: el código fuente tanto de lo expuesto
en este artículo como del ejercicio lo pueden
encontrar adjunto a este documento y/o en
http://lordjackob.blogspot.com/.
Saludos.

Después de recorrer las funciones antes descritas,


tendremos como resultado de dicho trabajo el byte-
code, con toda la estructura que debería interpretar
nuestra maquina virtual.

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=/»

el cual podemos pasar parámetros u órdenes que


alteren el funcionamiento y estabilidad de nuestro Recuerden que para que los cambios sean actua-
sistema operativo. Ej.: lizados en su lilo, deben ejecutar
Si quisiéramos cargar un SO en LiLo (Linux Loader) # /sbin/lilo

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.

# chown root:root /etc/lilo.conf


Podemos evitar situaciones como estas: # chmod 0600 /etc/lilo.conf
Pasar a modo mono usuario o de mantenimien- También es recomendable no mantener muchas
to versiones del kernel, en general solo mantener la
Linux single
Ó ultima y la actual con la finalidad de no dejar a dis-
Linux –b posición tantos kernel como le sea posible cargar
Permitirá a un usuario iniciar en modo de mante- en una sesión del sistema. Por favor no olvidemos

32
kernel /vmlinuz-2.6.7 ro root=LABEL=/
activar las máximos niveles de seguridad que ten- initrd /initrd-2.6.7.img

gamos a disposición, como habilitar password de


BIOS o de lectura con dispositivos Biometricos , Recuerden que este debe quedar con los per-
Smart Card y deshabilitar el arranque por unidades misos apropiados:
# chown root:root /etc/grub.conf
externas como disquetes, Unidades Opticas de Cd # chmod 0600 /etc/grub.conf
o DvD, USB, BOX HD USB, etc.
Al igual que LiLo, su hermanito Grub también sufre Para Grub (/boot/grub/grub/conf ) existen paráme-
de problemas de seguridad y permite que se le pasen tros importantes como:
parámetros y sean ejecutados, por lo tanto debe- Hiddenmenu
default 0
mos de asegurar con una contraseña encriptado en password
MD5 la cual no permite que sea solo con una leída
al archivo /etc/grub.conf. Es recomendable cambiar los niveles de ejecución
Veamos: run-level, forzando a que se requiera el password del
# grub
grub> md5crypt root cuando se entre en estado de mantenimiento
Password: ******** o monousuario, cambiando el archivo /etc/inittab
Encrypted: $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70
grub> quit asi:
s:S:respawn:/sbin/sulogin to /etc/inittab
Ejecutamos el Shell de Grub y posteriorment De igual forma en este archivo evitemos que el
md5crypt, luego el password y este genera un hash sistema sea reiniciado pr+n esionando las comunes
de md5 y este es introducido en el archivo de con- teclas CTRL-ALT-DEL antecediéndole un signo de
figuración del grub /etc/grub.conf comentario #
default=1 #ca::ctrlaltdel:/sbin/shutdown -t5 -rf now
timeout=10 Como ven son algunas reglas básicas de Harde-
splashimage=(hd0,0)/grub/splash.xpm.gz
password —md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70 ning en Linux, les reitero que esto es en la medida
title Red Hat Linux (2.6.7) que una persona tenga acceso físico a la maquina y
root (hd0,0)
kernel /vmlinuz-2.6.7 ro root=LABEL=/ pueda ser manipulada, debe tenerse mucho cuidado
initrd /initrd-2.6.7.img con los accesos remotos que se realicen a la ma-
quina si es que cumple este rol, puesto que puede
Esto nos evitara enormes dolores de cabeza, ya que
afectar nuestro arranque remoto o soporte remoto
al reiniciar la maquina y se desea introducir un pará-
si es que lo utilizamos.
metro, este nos exigirá que entremos su password
(Obligatoriamente por haber añadido la línea del
Actividad II
password
—md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70). Los servicios o demonios que se ejecuten en el
inicio y apagado del sistema
Si desea añadirle un menú a Grub, para que sea Si, así como se indica en su titulo, llana y sencilla-
mostrado después del password, solo cambiemos mente es deshabilitar aquellos servicios que no van
la línea del password –md5 por esta: a tener uso, para disminuir los vectores de ataques,
las amenazas cerrando las brechas del atacante.
password
—md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70 /boot/grub/ Revisemos minuciosamente en:
administrator-menu.lst /Etc/inittab
El archivo inittab es una tabla que le permite al
Al igual que Lilo podemos también proteger una sistema indicar de manera ordenada como debe
imagen con Grub: arrancar.
El formato utilizado por este archivo es el siguien-
default=1 te:
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz servicename:runlevels:label:command -option
password —md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70 –option
title Red Hat Linux (2.6.7) sysacc:235:acct:/usr/sbin/acct -q -d
lock ~~:S:wait:/sbin/sulogin
root (hd0,0)

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

Wrapper (Secretaria) Filtrando los paquetes IP, que


conexiones puedan ser aceptadas o rechazadas Firewalls
dependiendo de su identidad y origen.
¡!!Hombre creo que más claro que lo que canta un Nuevamente teniendo en cuenta el lector, vamos
gallo no se puede. Como les dije con plastilina! a describir que es un Firewall para los Newbies
A continuación solo descárgalo de aquí: como YO.
ftp://ftp.porcupine.org/pub/security/tcp_ Sigo….
wrappers_7.6.tar.gz Un Firewall (FW) es un componente de Hardware
Lo descomprimes, (generalmente Appliance) o de Software que permite
#gunzip -c tcp_wrappers_7.6.tar.gz | tar xf filtrar el trafico entre Internet , Extranet con la Intranet
ó
# gunzip tcp_wrappers_7.6.tar.gz
o red Empresarial.
ó La analogía más practica:
# tar xvf tcp_wrappers_7.6.t
Es el muro que se crea para evitar el paso de fuego
Luego: entre diferentes Bodegas para evitar la expansión
#make linux
del fuego y este no sea más perjudicial.
Su resultado dejando como resultado cinco bina- Así como ese muro impide la propagación del fuego
rios para evitar mas tragedias, el FW en computación
? tcpd. Es el demonio del TCP-Wrappers. evita que los males de Internet (Dialers, DoS, Virus,
? tcpdmatch. Predice como el tcpd manejaría una Troyanos, Hijackers, Malware, Spyware, Accesos
petición en específico. no autorizados, etc) y del Exterior afecte nuestra
? tcpdchk. Verifica las reglas de control de acceso plataforma informática. Si desean mas información
contenidas en los archivos /etc/hosts.allow y /etc/ los invito a leer RFC 2979
hosts.deny. Para terminar este definición, hablemos de los
? safe-finger. Versión de finger para implementar
el finger reversivo.
? try-from. Programa que permite probar si el sis-
tema es capaz de reconocer qué máquina la esta
contactando
Copiar los archivos al directorio donde se encuen-
tran los demonios de los servicios de o /usr/sbin
#mv tcpd tcpdmatch tcpdchk try_from safe_finger /usr/sbin
Modificar el
#vim /etc/inetd.conf
Y aquí modificar todos los servicios que deseamos
proteger por tcpd. Asi: distintos tipos de FW, para esto voy a citar a uno
pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d de los que más saben en Internet , el señor Wi-
imap stream tcp nowait root /usr/sbin/tcpd imapd
Y
kipedia ( Y eso que es relativamente nuevo, pero
#vim /etc/syslog.conf sabeeeeeee) :
En donde agregaremos la siguiente línea
local0.info /usr/local/adm/tcpd.log
Tipos de cortafuegos
Para mantener un log de las conexiones hechas Cortafuegos de capa de red o de filtrado de
por tcpd paquetes.
Este archivo de registro lo podemos crear con Funciona a nivel de red (nivel 3) de la pila de pro-
touch. tocolos (TCP/IP) como filtro de paquetes IP. A este
#touch /usr/local/adm/tcpd.log
nivel se pueden realizar filtros según los distintos
campos de los paquetes IP: dirección IP origen,
El demonio debe ser reiniciado, pararlo y reiniciar- dirección IP destino. A menudo en este tipo de
lo, como explique anteriormente. O también con: cortafuegos se permiten filtrados según campos de
$ ps -A | grep ‘xinetd\|inetd’

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

#less /etc/services Se pueden adicionar al script /etc/rc.d/rc.local y en


#
# Network services, Internet style
el archivo /etc/sysctl.conf, adicione:
#
# Note that it is presently the policy of IANA to as- # Allowed local port range
sign a single well-known net.ipv4.ip_local_port_range = 32768 61000
# port number for both TCP and UDP; hence, most en-
tries here have two entries
# even if the protocol doesn’t support UDP operations. Para indicar varias reglas:
# Updated from RFC 1340, «Assigned Numbers» (July
1992). Not all ports
# iptables -I INPUT 1 -i eth0 -p tcp -j ACCEPT
# are included, only the more common ones.
# iptables -I INPUT 2 -i eth0 -p tcp —dport 143 -j
#
# from: @(#)services 5.8 (Berkeley) 5/9/91 DROP
# $Id: services.txt,v 1.1.1.1 2002-08-19 13:34:26
blueflux Exp $
tcpmux 1/tcp # TCP port service La primera permite el trafico TCP en la interface
multiplexer
echo 7/tcp
eth0 y el 1 indica que es la primera regla, la segun-
echo 7/udp da filtra los paquetes TCP del puerto 143 (IMAP) y
discard
discard
9/tcp
9/udp
sink null
sink null
e invalida los paquetes TCP (el 2 indica que es la
systat 11/tcp users segunda regla).
daytime
daytime
13/tcp
13/udp
Ahora sí que dijeron, Ah! Ese Dino tan bruto ¿NO?
netstat 15/tcp No que va si le ponemos un poquito de sentido co-
qotd
msp
17/tcp
18/tcp
quote
# message send protocol
mún, nos daremos cuenta como todo el tráfico es
msp 18/udp # message send protocol permitido en la primera, asi que la segunda puede
chargen 19/tcp ttytst source ser nula, la idea es esa organizar y aplicar lógica a
chargen 19/udp ttytst source
ftp-data 20/tcp # File Transfer [De- los reglas configuremos.
fault Data]
ftp-data 20/udp # File Transfer [De-
fault Data] Entonces si deseas listarlas:
ftp 21/tcp # File Transfer [Con-
trol] # iptables -L INPUT -n —line-numbers
ftp 21/udp # File Transfer [Con- Chain INPUT (policy DROP)
trol] num target prot opt source destination
ssh 22/tcp # Secure Shell Login 1 ACCEPT tcp — 0.0.0.0/0 192.168.0.1 tcp dpt:80
ssh 22/udp # Secure Shell Login
telnet 23/tcp 2 ACCEPT tcp — 0.0.0.0/0 192.168.0.1 tcp dpt:443
telnet 23/udp Para remover una regla:
# 24 - private
smtp 25/tcp mail
# iptables -D INPUT -i eth0 -p tcp —dport https -d
Aunque recuerden la reserva que se debe tener
192.168.0.1 -j ACCEPT
sobre este archivo, como se ha explicado con los
anteriores servicios. Lo más recomendable es:
Borrara la regla para el https.
# chown root:root /etc/services Puede borrar por el Número de regla:
# chmod 0644 /etc/services
# chattr +i /etc/services # iptables -D INPUT 3

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

Iptables [tabla] <comando> <filtro> <objetivo/


salto>

En el caso de la tabla filter: No hace falta indicar


tabla (filter por defecto)

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

Es solo un resumen de lo que es IPTABLES, la


idea general es crear minimo un Firewall básico para

40