ezine #2 comunidad dragonjar

40
1 #07 Abril de 2008 E-ZINE

Upload: jogpe

Post on 13-Jun-2015

942 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ezine #2 Comunidad DragonJAR

1

#07 Abril de 2008E-ZINE

Page 2: Ezine #2 Comunidad DragonJAR

2

Seguridad en Aplicaciones Web 18

Hardening By Dino 30

Blind SQL Injection, un enemigo oculto de los desarolladores Web 15

Redactores

UnknownmindHernandgrEpsilon77

Jhon Jairo HernándezLordjackob

Diagramación

José Julián Orozco GarcíaTel: 312 2614571

Webwww.dragonjar.org

Creando un Compilador con JAVA 25

Diseño

Zyruswww.zyrusweb.com

Adminstración y Seguridad en Wordpress 3

INDICE

Page 3: Ezine #2 Comunidad DragonJAR

3

Acerca del autor

Adminisrtración y Seguridad en Wordpress

Mi nombre es Unknownmind soy de Colombia tengo 22 años. Soy estudiante de Química Pura de sexto se-mestre pero también me auto-denomino un Geek de Internet y más del diseño Web. Actual-mente estoy profundizando en el manejo de los CMS (Content Management System) especial-mente en Wordpress, Joomla y

phpBB. Espero este manual sea de gran ayuda para los actuales y futuros Blogers de la Red.

Hoy en día es interesante instalar y gestionar tu propio Blog ya que es una manera de expresarte a través de Internet. Además no solo puedes utilizar-lo como una herramienta de expresión individual sino también utilizarlo como una herramienta para formar una comunidad online. Este manual tiene como objetivo enseñar a un usuario de cualquier nivel en este campo de la informática a Instalar y administrar un Blog en Wordpress así como también manejar una seguridad digna para evitar intrusiones y/o violaciones a tu información. Espero les sea de su agrado….

1. ¿Qué es un Blog?

Un blog, o en español también una bitácora, es un sitio web periódicamente actualizado que recopila cronológicamente textos o artículos de uno o varios autores, apareciendo primero el más reciente, donde el autor conserva siempre la libertad de dejar publicado lo que crea pertinente. El término blog proviene de las palabras web y log (‘log’ en inglés = diario). El término bitácora, en referencia a los antiguos cuadernos de bitácora de los barcos, se utiliza preferentemente cuando el autor escribe sobre su vida propia como si fuese un diario, pero publicado en Internet en línea.

2. ¿Qué es Wordpress?

WordPress es un sistema de gestión de conteni-dos enfocado a la creación de blogs. Desarrollado en PHP y MySQL, bajo licencia GPL, tiene como fundador a Matt Mullenweg. WordPress fue creado a partir del desaparecido b2/cafelog y se ha convertido junto a Movable Type en el CMS más popular de la blogosfera. Las causas de su enorme crecimiento son, entre otras, su licencia, su facilidad de uso y sus características como gestor de contenidos. También una de las causas, es su enorme comunidad de desarrolladores y diseñadores, que se encargan de crear plugins y themes para la comunidad.

3. Estructura de Wordpress

Fácil instalación, actualización y personaliza-•ción.Sigue las recomendaciones del W3C.•Separa el contenido y el diseño en XHTML y •CSS.Posee herramientas de comunicación entre •blogs (Trackback, Pingback, etc).Importación desde Movable Type y Typepad, •Textpattern, Greymatter, Blogger, Dotclear, Li-vejournal, Blogware y desde cualquier RSS.Se está trabajando para poder importar desde •pMachine y Nucleus.Fácil integración con el foro bbPress de los •mismos creadores de Wordpress.Integración con el foro Vanilla de Lussumo •factible.Integración con Ajax•

4. Funcionalidades de Wordpress

Puede haber múltiples autores.•Permite ordenar artículos y páginas estáti-•cas en categorías, subcategorías y etiquetas (“tags”).Capacidad de crear páginas estáticas a tra-•vés de la base de datos (a partir de la versión 1.5).3 estados para un post: Publicado, Borrador, •

INDICE

Page 4: Ezine #2 Comunidad DragonJAR

4

Esperando Revisión(Nuevo en Wordpress 2.3) y Privado (sólo usuarios registrados) además de uno adicional: Protegido con contraseña.Publicación mediante email.•Guardado automático temporizado del artículo •como Borrador (A partir de la versión 2.2).Permite comentarios.•Permite permalinks (enlaces permanentes y •fáciles de recordar) mediante mod_rewrite.Distribución de los artículos mediante RDF, •RSS 0.92, RSS 2.0 y Atom 1.0.Distribución de las discusiones (mediante RSS •2.0 y ATOM 1.0).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-tuitos con estas características y muchas más. Pero la idea de este manual es mostrar que es posible instalar tu propio Blog y visualizarlo en tu propio servidor local.

5.1 ¿Qué es Xampp?XAMPP es un servidor independiente de platafor-

ma, software libre, que consiste principalmente en la base de datos MySQL, el servidor Web Apache y los interpretes para lenguajes de script: PHP y Perl. El 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 oficialhttp://wordpress.org

http://wordpress.org/latest.zip

La última versión de Xampp actualmente es la 1.6.6a. Para descargar Xampp lo puedes descargar delsitiooficialuotrosenlaces.

Sitio Oficial: http://www.apachefriends.org/en/xampp.html

Descarga Directa: http://superb-east.dl.sourceforge.net/sourceforge/xampp/xampp-win32-1.6.6a.zip

La instalación de Xampp es muy sencilla. Cuando hemos descargado la aplicación, la descomprimimos y la ejecutamos.

El lenguaje por defecto de la instalación que apa-rece es English [Inglés], en español esta versión todavía no se encuentra disponible, ya se esta desa-rrollando la versión 1.6.6 estable tal ves esta versión lleve el paquete del idioma Español. Lo importante es que la interfaz de administración si esta en español, lo veremos más adelante.

Simplemente en la instalación de esta aplicación debes entender cada paso, si es posible léelo así no sepas inglés. Casi siempre se aplica next – next –next a todo pero mira este paso:

Si llegas a este paso observa muy bien que debes seleccionar las opciones Install Apache as service y Install MYSQL as service. Te preguntarás ¿Por que

Page 5: Ezine #2 Comunidad DragonJAR

5

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:

Luegodalefinalizarydespuésdeunaqueotraven-tana de cmd.exe se estará ejecutando normalmente nuestro servidor local. Es importante que mientras se este instalando Xampp no cierres ninguna de las ventanas anteriormente descritas ya que si las cierras, cerraras algún servicio importante que evite avanzar en este manual. Luego dale clic en si y listo no es más.

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-cación donde instalamos Xampp. En mi caso C:\. Si entramos a la carpeta htdocs fíjate muy bien en la carpeta. Esta carpeta contendrá todos los archivos de nuestro Blog.

Todos los archivos que ubiquemos dentro de esta carpeta se visualizarán en http://localhost/archivo

6.2 Instalando nuestro Blog

Como ya hemos descargado el paquete de Wor-dpress simplemente se descomprime para utilizar su contenido. Debe quedar descomprimido de tal manera que si entramos a la carpeta Wordpress se vea este contenido:

Ahora copiemos o cortemos esta carpeta dentro de la carpeta htdocs de Xampp.

Y podemos cambiar el nombre de la Carpeta por accesibilidad. En mi caso le pondré Unknownmind.

Page 6: Ezine #2 Comunidad DragonJAR

6

Ahora nos vamos de nuevo a nuestro navegador y actualizamos o escribimos http://localhost/Unknown-mind, recuerda que Unknownmind es el nombre de mi carpeta…Debes aplicarla a la tuya, ejemplo http://localhost/dragon.

DamosclicenCreateaConfigurationFile

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

1. Nombre de la base de datos2 Nombre de usuario de la base de datos3. Password e la base de datos4. Host de la base de datos5.Elprefijo(siustedquierecontrolarmásdeun

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 necesitamos una base de datos, además es un re-quisito de instalación. ¿Cómo crearemos una base de datos? Pues para eso esta Xampp.

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 phpMyadmin:

Page 7: Ezine #2 Comunidad DragonJAR

7

Aquí podemos crear la base de datos que necesi-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 wordpress y damos clic en Let`s go.

Ahora nos encontramos con un formulario el cual solo se debe poner el nombre de la base de datos que hace poco creamos, en mi caso myblog, user name: root, password: lo dejaremos en blanco, da-tabase Host: localhost

EnesteúltimocampoTablePrefixnospidenelprefijodelastablasdelabasededatos,puesahoraya empezaremos a tratar la seguridad de este CMS, para evitar intrusiones o injecciones SQL a nuestro Blog loque recomiendoes cambiar el prefijopordefecto wp_ por uno menos convencional. Ejemplo: blog_ este sería el primer paso de seguridad en nuestro Blog que empieza en su Instalación.

Luego si los datos son correctos daremos clic a Submit

La imagen anterior nos indica que los datos del formulario son correctos y continuamos con la ins-talación. Clic en Run the install.

Llenaremos los datos de nuestro Blog como el Título y nuestro E-mail. Clic en Install Wordpress.

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.

Page 8: Ezine #2 Comunidad DragonJAR

8

Después de entrar al panel de administración sería indispensable que cambies el password por uno más 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

Luego de cambiar el password damos clic en ac-tualizarperfil

7.0 Cambiando el idioma a Español

Considero que no es necesario cambiar el idioma 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.

Como primer paso descargaremos el paquete del lenguaje español que se encuentra en este sitio http://carrero.es/wp-content/uploads/2008/03/wp-25-castellano.zip después de descargar y descomprimir el paquete observamos la carpeta Includes y dentro de esta carpeta otra llamada Languajes. Esta última carpeta debemos copiarla y pegarla en la siguiente ruta:

C:\Xampp\htdocs\Unknownmind\wp-includes. Es decir pegaremos la carpeta Languajes dentro de la carpeta includes. Luego iremos a la carpeta de nuestro Blog en mi caso la carpeta

Unknownmind y observamos el archivo llamado wp-config.phpdamosclicderechoyelegimosabrircon WORDPAD… Aparecerá este código:

Existeunapartequedefinenuestrolenguajeen-toncesmodificaremosesalíneaasí:

define (‘WPLANG’, ‘es_ES’); S i m p l e -mente agregamos es_ES, luego cerramos y guar-damos los cambios.

De esta manera nuestro panel de administración y nuestro Blog en general cambia automáticamente al lenguaje Español. . Ve al panel de administración y dale actualizar.

Ahora ya tenemos nuestro panel de administración actualizado.

7.1 Instalando un Theme

En general un Theme es una plantilla de diseño para una página Web en nuestro caso para nuestro Blog. Si observamos la página principal de nuestro Blog http://localhost/Unknownmind se encontrará una plantilla que viene por defecto con Wordpress. La ubicación donde se instalan los themes es C:\xampp\htdocs\Unknownmind\wp-content\themes. Ahora instalar un theme es tan sencillo como instalar Xammp .

Vamos a descargar un Theme a nuestro gusto. Ten en cuenta Colores, diseño, letra, etc. Bueno yo ya elegíelmíosellamaMandigoylohemodificado.

Page 9: Ezine #2 Comunidad DragonJAR

9

Recomiendo esta página para descargar themes de Wordpress.

http://www.wpthemesfree.com

El cual puedes elegir entre colores, número de columnas, los 10 mejores votados, etc.

Cuando hayas descomprimido el paquete del the-me lo ubicas en C:\Xampp\htdocs\Unknownmind\wp-content\themes. Luego nos vamos al panel de administración y donde dice Diseño:

ahí estará todos los themes que tengamos ya insta-lados. Simplemente lo seleccionas y se mostrará.

Cuando selecciones el Tema. Vas al sitio http://localhost/Unknownmind

Ahí esta ya el Theme instalado y listo.

7.2 Instalando un plugin

Un plugin es una aplicación que interactúa con nuestro Blog para aportarle una función o utilidad, generalmentemuyespecífica.Unejemploagregarun álbum de fotos, un formulario de contacto, un modulo de encuestas, etc. Hay demasiados en pá-ginas de desarrolladores de Wordpress incluyendo su página principal. http://wordpress.org/extend/plugins/.

Bueno en general instalar un plugin es muy pareci-

do a instalar un theme. Haré un pequeño ejemplo de instalación, la verdad no se con que plugin hacerlo… Lo haré con el plugin de encuestas…Que se llama Wp-Polls

Descargalo de http://wordpress.org/extend/plugins/wp-polls/

Cuando ya lo hemos descargado, lo descomprimi-mos y lo subimos a la carpeta C:\xampp\htdocs\Unk-nownmind\wp-content\plugins, luego vas al panel de administración en la parte derecha se encuentra el link Plugins

Buscas el plugin y lo activas.

Bueno ya he activado el plugin que agrega una o 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.

Tengo que aclarar que cada plugin que descargues viene con su respectivo archivo readme en donde se encuentra toda la información para la instalación y su uso. Si lees el archivo readme de el plugin de encuestas te das cuenta que debes agregar un código a tu theme actual. Para eso debemos ir a la pestaña Diseño (donde se encuentran todos nues-tros themes) y en la pestaña Editor de temas, como se muestra a continuación:

Page 10: Ezine #2 Comunidad DragonJAR

10

Puedes ver al lado izquierdo los códigos y al lado derecho las plantillas… Cada plantilla u archivo tiene un código diferente o similar que hace que tu Blog se vea y se comporte de tal manera. Al lado dere-cho busquemos un archivo llamado sidebar.php o barra lateral y demos clic en él. Al lado derecho se encontrará el código del sidebar de tu theme. Ahora para agregar la encuesta debes agregar este código a tu sidebar.php:

<?php if (function_exists(‘vote_poll’) && !in_pollarchive()): ?> <li> <h2>Polls</h2> <ul> <li><?php get_poll();?></li> </ul> <?php display_polls_archive_link(); ?> </li>

<?php endif; ?>

Si observas muy bien al lado izquierdo de nuestro editordetemas,esmuyfácilidentificarcadacódigocon cada visualización del theme. Por ejemplo el código que corresponde al calendario que se ve en mi Blog es este: <?php widget_mandigo_calendar(); ?>. Ahora debajo de este código pegaré el del plugin de la encuesta y guardaré mi archivo sidebar.php:

Luego de Actualizar el archivo, tendremos nuestro plugin listo en nuestro Blog. Y ya nuestros visitantes pueden interactuar con él…

Como segundo ejemplo de la instalación de un plugin, es más dedicada a los amantes del Futbol (como yo ) se trata de un plugin para observar los resultados e información de los juegos de la EURO-COPA 2008.

Primero descargaremos el plugin de aquí http://downloads.wordpress.org/plugin/wp-em-08.

zip

Luego lo descomprimimos y ubicamos el archivo en C:\xampp\htdocs\Unknownmind\wp-content\plugins.

Entramos al panel de administración y activamos el plugin

Luego de activarlo, como ya lo habiamos hecho con el anterior plugin agregamos este código en nuestro sidebar de nuestro theme…Recordemos lapestañaDiseñoEditordetemasSidebarobarra lateral:

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

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

< ? p h p i f ( c l a s s _ e x i s t s ( ‘ E M 0 8 ’ ) ){EM08::currentMatch(1);}?>

Page 11: Ezine #2 Comunidad DragonJAR

11

7.3 Servicios recomendados para tu Blog

De la poca experiencia que tengo en el desarro-llo Web he utilizado excelentes servicios para mi Blog, así como también excelentes plugins. De esta manera hago una recopilación de todos ellos, para darle un toque profesional, dinámico y adaptable a la Web 2.0….

1. http://tester.jonasjohn.de/ [Recomendado] Son 100 Herramientas para testear tu sitio Web tipo validación xhtml, links rotos, etc 2. http://linkbun.ch/ Excelente herramienta que agrupa una cantidad de enlaces en uno solo... 3.http://www.artviper.net/colorfinder.php Obtener todos los colores que posee una Web. Muy util cuando guiamos nuestro diseño de otros sitios 4. http://www.sprymedia.co.uk/article/Design Recopilación de herramientas basadas en Javas-cript 5. http://www.mylivesignature.com Si tienes un Blog o Web personal puedes agregar-leunafirmadigitalpersonalizada 6. http://logogenerador.com/ Crea tus Logos 2.0 Online [Recomendado] 7. http://logogenerador.com/ Javascript que nos permite convertir texto a .png 8. http://www.designoogle.com/ Buscador de temas y artículos que nos pueden servir para inspirarnos en diseño 9. http://www.superscreenshot.com/ Herramienta online que nos permitirá tomar captu-ras Web al instante con diferentes resoluciones de pantalla 10. http://code.google.com/p/ie7-js/ Script para que Iexplorer se comporte acorde a los

estandares Web 11. http://cloford.com/resources/colours/500col.htm Mas de 500 Colores en Hexadecimal 12. http://moourl.com/ Acorta URls demasiado largas 13. http://xhtml-css.com/ Validar tu código xhtml y css 14. http://www.genfavicon.com/es/ Generador de favicones 15. http://www.genfavicon.com/es/ Contador de usuarios Online en tu Web 16. http://www.formstylegenerator.com/ generador de estilos para formularios

17. http://www.quickribbon.com/index.php Generador de tiras diagonales 18. http://www.andanza.com/index.htm Ver tu Blog desde cualquier dispositivo Móvil 19. http://fawnt.com/ Fuentes gratuitas

20. Muy util para los foros http://www.bbcode-to-html.com/ Convertir bbcode a html... 21. http://dryicons.com/free-icons/ Recopilación de excelente iconos descargables bajo licencia Creative Commons 3.0

Algunos Plugins

Akismet: Controla el Spam Calendar: Agrega un calendario dinámicoflickrRSS:Agregaunálbumdefotosdetucuenta

FlickrGoogle XML Sitemaps: Crea un sitemap del BlogJalenack’s Wordspew: Agrega un pequeño tag-

board (Chat)PopStats: Estadísticas completas de tu sitioWP-ContactForm: Formulario de contactoWP-Polls: Encuestas en tu Blog

Page 12: Ezine #2 Comunidad DragonJAR

12

WP-ServerInfo: Información del Server que aloja tu Blog

WP-Sticky: Deja post estáticosWP Dash Note: Pequeña agenda en el panel de

administraciónWP-SWFObject: Para agregar mp3 y animacio-

nesenflashatuBlog

8. Seguridad en Wordpress

Bueno en realidad la seguridad informática no es un tema aparte en nuestro Blog, algunos Blogers descuidan en un 99.9% la seguridad de su CMS. ¿De quien nos defendemos? De Lammers, de defacers, de intrusiones de crackers, de espías de informa-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-plementeguardaelarchivowp-config.phpyunbackup de tus post posteriormente reemplaza todos los archivos de la vieja versión por la nuevayluegoreemplazaelarchivowp-configque 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

nuestro Blog datos muy pero muy personales, esto se presta a Ingeniería social. Si tu Blog es personal lo ideal sería que tú seas •el único administrador, a menos que creas administradoresdeconfianza.No distribuyas información delicada a través •de tu BlogRecuerda el aumento de Blogs es directa-•mente proporcional al robo de identidad. Por esta razón insisto en mantener tu información personal delicada fuera de tu Bitácora.Crea post privados (con password) para infor-•mación de importancia media.No sigas solamente estos Tips, busca los que •más puedas por Internet. Te recomiendo http://www.blogsecurity.net

Page 13: Ezine #2 Comunidad DragonJAR

13

8.2 Cambio del prefijo de las tablas antes de la instalación

Bueno este paso prácticamente lo observamos detalladamente cuando instalamos nuestro Blog Wordpress…

El prefijo que viene predeterminado es wp_ simplemente lo cambiamos por otro diferente… Existeunpluginquecambiarelprefijodelastablasdespués que hemos instalado wordpress y no lo cambiamos…Lamentablemente es incompatible con wordpress 2.5. Más adelante sale la versión compatible…

8.3 Cambio del nombre de usuarioEl nombre de usuario por defecto que Wordpress

crea es admin. Es necesario cambiarlo, para evitar ataques de fuerza bruta a nuestro Blog. No sola-mente cambiar el nombre de usuario sino también el password. Para cambiar el nombre de usuario admin debemos entrar al panel de administración e iremos a usuarios el cual nos mostrará los usuarios registrados de nuestro Blog, si observamos estará nuestro nombre de usuario admin el cual hay que modificar.

Ahora crearemos otro usuario, en mi caso Unknownmind y un tipo de password como unkn$wn08*, no olvides los privilegios de este nuevo usuario el cual debe hacer Administrador. Luego nos vamos de nuevo a usuario y eliminamos el usuario admin.

Ahora ya hemos creado el usuario Unknownmind que es administrador del Blog. Como estamos lo-geados como admin, simplemente damos salir y nos logeamos como el nuevo administrador.

Posteriormente le atribuimos todas las entradas y enlaces al nuevo administrador. Para cambiar nuestra contraseña simplemente nos vamos a usuarios y luego perfil.

Para un mayor control en seguridad de usuarios existeunpluginllamadorole-managerelcualdefineymanejamúltiplesperfilesdesuscriptor.Aquíseubica el link de la descarga y la instalación. Pero debo aclarar que este plugin no es compatible con wordpress 2.5

Descárgalo de http://www.im-web-gefunden.de/wp-content/downloads/plugins/role-manager.zip

Después de la instalación observaremos una mo-dificaciónenelpaneldeadministración.

Si observamos la pestaña Roles nos encontramos con los diferentes niveles de usuario y estamos en la capacidaddemodificarsusroles…unpocomásabajoobservamos una opción para crear nuevos roles de usuario.

8.4 Restringir wp-content y wp-inclu-des

Para este paso vamos a limitar el acceso a estas dos carpetas solamente tendrá acceso imágenes, CSS y algunos archivos JavaScript. Dentro de las carpetas wp-content y wp-includes se encuentran losarchivos.htaccessloscualesmodificaremosdeesta manera en su contenido:

Order Allow,DenyDeny from all<Files ~ “.(css|jpe?g|png|gif|js)$”>Allow from all</Files>

Esto aplica para Blogs alojados en un servidor en Internet y para sitios de un solo Blog, ya que si tene-mos varios blogs generarán algunos problemas.

8.5 Restringir wp-admin

Esto aplica cuando nuestro Blog se encuentra alojado en un host en Internet:

Si controlas un Blog de un solo usuario podemos restringir el acceso al directorio wp-admin vía IP. Para esto necesitamos que nuestra IP sea IP estáti-ca. Si vamos por FTP a nuestro directorio wp-admin buscamos el archivo llamado .htaccess

Abrimos el archivo .htaccess y escribimos

Order deny,allowAllow from 0.0.0.0 #Esta es tu IP estáticaDeny from all

Si ha sido correcto el cambio, todas las IPs que entren a http://www.tublog.com/wp-admin/ no po-drán acceder, solamente tu IP en este caso 0.0.0.0, el cual es el parámetro que debes cambiar puede acceder completamente a este directorio que es muy importante para nuestro Blog.

Page 14: Ezine #2 Comunidad DragonJAR

14

Sisequiereagregarmásseguridadmodifiquemosel archivo .htaccess dentro del directorio wp-admin de esta manera:

AuthUserFile/srv/www/user1/.htpasswd#thisfileshould be outside your webroot.

AuthType BasicAuthName “Blog”require user youruser #making this username

difficulttoguesscanhelpmitigatepasswordbrute force attacks.

Dondesedebemodificaryouruserelcualtendráacceso total a este directorio.

8.6 Restringir acceso al wp-login y wp-admin evitando fuerza bruta

El plugin llamado Login LockDown es un plugin que nos permite bloquear a un usuario que intenta logearse en wp-login o wp-admin. Lo descargamos de su Web principal http://www.bad-neighborhood.com/loginlockdown-1.1.zip al activar el plugin y si nos ubicamos en el panel de administración en OpcionesLoginLockDown,podemosver lasop-ciones de este plugin.

Si observamos el panel podemos apreciar que se puede controlar el número de intentos para poder acceder al login de nuestro Blog o al panel de admi-nistración. En caso de que en esos intentos se falle el sistema bloquea tu IP temporalmente, el tiempo de bloqueo es de tu preferencia.

8.7 Banear usuarios

El plugin wp-ban tiene como objetivo el baneo de IPs, de esa manera se mejora la seguridad de nuestro Blog. Puede Banear una IP o un rango de IPs. Este plugin lo podemos descargar en http://les-terchan.net/portfolio/programming.php. En nuestro panel de administración nos ubicamos en Gestionar -Ban.

Cuando se Bannea una IP o un rango de IPs, si pertenece a un visitante cuando entre a nuestro Blog en la Web principal mostrará un mensaje del motivo delBanneo,quetambiénpodemosmodificar.

8.8 Wpids

BlogSecurity ha desarrollado PHPIDS el cual es un plugin que trabaja como un sistema de detención de intrusos, cada intrusión es logeada en la base de datos y esto nos ayuda a tomar medidas de rastreo del intruso.

http://php-ids.org/downloads/

La verdad no he tenido tiempo de probar su funcio-namiento o errores… Pero cumplo con informar…

8.9 Wordpress Online Security Scanner

Wordpress Online Security Scanner es un plugin el cual lo podemos instalar temporalmente. Lo des-cargamos de http://blogsecurity.net/wordpress/tools/wp-scanner/ y lo activamos:

Al activarlo vamos a esta URL http://blogsecurity.net/cgi-bin/wp-scanner.cgi de esta manera escanea-mos nuestro Blog de algunas vulnerabilidades que comprometen la seguridad del mismo. Es impor-tante que después del escaneo borremos el plugin ya que un intruso puede escanear nuestro Blog y saber nuestras vulnerabilidades así como también el mismo scan de wordpress nos da la documentación para corregir la vulnerabilidad.

Cuando ya este activado el plugin vamos a esta URL http://blogsecurity.net/cgi-bin/wp-scanner.cgi y escaneamos nuestro Blog...

9. Agradecimientos

Agradezco a mi esposa y a mi hija por su pacien-cia al realizar este manual, ya que fueron 10 días realizándolo frente al computer. Agradezco a las personas que expresen su gratitud a este manual. http://unknownmind.chemx3.com.

PD:Sincontarlosotrosdíasdemodificaciónporel cambio de la versión de wordpress 2.5

10. Bibliografía

http://es.wikipedia.org/http://www.dragonjar.orghttp://www.blogsecurity.net

Page 15: Ezine #2 Comunidad DragonJAR

15

BLIND SQL INJECTION, UN ENEMIGO OCULTO DE LOS DESARROLLADORES

WEBINTRODUCCION

Hola a todos los lectores, soy epsilon77 integrante de la comunidad DragonJAR, y en esta oportunidad, les traigo un pequeño artículo, sobre esta técnica 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 web, que intervenienen con bases de datos, además de esto, se han publicado muchos documentos ex-plicando como hacer un ataque de este tipo, y esta información a llegado a manos equivocadas, q han logrado hacer de las suyas.

Muchos expertos en seguridad, han unido esfuer-zos para poder encontrar solución a esta vulnerabili-dad,sinembargo,lassolucionesmaseficaces,paraesto es concienciar y capacitar a las programadores, sobre este ataque, mostrarles como funciona, y lo peligroso que puede llegar a ser.

Algunos programadores creen que la solución a este problema es evitando mostrar errores, que dan información al atacante, por que existe la téc-nica blind sql injection, que lo que hace es hacer sql injection sin saber nada sobre la base de datos, sin necesitar errores, ni nada por el estilo, el objetivo de este documento es informar un poco sobre que es tas técnica y como funciona.

¿QUE ES SQL INJECTION?

Antes que nada debemos hablar sobre que es sql injection. esta es una técnica, que nos permite ingre-sar sentencias o comandos arbitrarios dentro de una consulta,conelfindemanejarlosprocesosdeunaaplicación web, y poder acceder a la información que

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. Cuando el navegador ejecuta dichos comando y los procesa, la respuesta es un error, este error nos brinda información sobre la base de datos.

Sin embargo, el objetivo de este artículo no es hablar sobre sql injection si quieren mas infor-mación pueden ir a: http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL

¿QUE ES BLIND SQL INJECTION?

Muchos desarrolladores creen que la forma de evitar ataques de sql injection es poner una pagina personalizada en ves del error que nos muestra el navegador, esto es, si inyectamos unas sentencias, nos mostrara una pagina cualquiera, pero no el error, esto es FALSO por que para este tipo de «seguri-dad» se utiliza la técnica BLIND SQL INJECTION, pero en si que es esto? si traducimos la expresión nos dirá algo así como «sql injection a ciegas», esto significaqueconestatécnicapodemos,inyectarlassentencias y comandos, pero sin la posibilidad de ver ningún resultado en el navegador (error), con esta técnica el atacante puede visualizar, extraer e inclusomodificarinformacióndelabasededatos

Para hacer un ataque sql injection a ciegas se debe crear un vector de ataque, este vector solo será de verdadero o falso, con este vector se centrara todo el ataque y nos permitirá conseguir la información deseada, mas adelante les mostrare en un ejemplo como hacer el ataque.

Page 16: Ezine #2 Comunidad DragonJAR

16

BUSCANDO APLICACIONES VULNERA-BLES

Para hacer un ataque de este tipo el atacante debe hacer un estudio similar al que se hace en los ataques sql injection, para determinar en que por-ción del código de la aplicación no esté realizando una comprobación correcta de los parámetros de entrada, la verdad esto resulta muchas veces más complicado que hacer el ataque, por que por mas analisis que hagamos nunca podremos concluir que un parámetro va ser 100% vulnerable, siempre va haber un margen de error, entonces explicare con un pequeño ejemplo:

tenemos la pagina:

www.victima.com/secciones.php?id=3

podemos ver claramente que el parámetro que se envía es id y el valor de ese parámetro en este caso es 3, para hacer el análisis de forma correcta, vamos a inyectar 2 sentencias que no hacen ningún cambio en el resultado estas las llamaremos sen-tencias(-), y 2 sentencias que si provocan cambios en el resultado y a estas las llamaremos (+). Ahora si comencemos

hacemos las sentencias(-) así:

www.victima.com/secciones.php?id=3 and 1=1www.victima.com/secciones.php?id=3 +100-100

podemos ver claramente que en ambas senten-cias, no se producen cambios ya que se inyectan valores verdaderos, y validos.

hacemos sentencias(+) asi:

www.victima.com/secciones.php?id=3 and 1=2www.victima.com/secciones.php?id=-1 or 1=1

Con estas sentencias si se cambia el resultado

ahora interpretemos los resultados, si ejecutamos la pagina normalmente, es decir sin inyectar ningu-na sentencia, y nos devuelve el mismo resultado que cuando inyectamos las sentencias(-) podemos concluir que los parámetros si se están ejecutando, ahora bien si ejecutamos las sentencias(+) y nos muestra una pagina de error personalizada que no nos deja ver ningún tipo de información sobre la base de datos, entonces esto es un buen síntoma,

estamos frente a una potencial víctima xD.

EMPIEZA EL ATAQUE!!!!

Ya tenemos una pagina de verdadero que es la sentencias(-) y la de falso que es la sentencias(+), con esto ya podemos crear, el vector de ataque. Entonces por ejemplo si queremos saber si la tabla user existe inyectamos lo siguiente:

www.victima.com/secciones.php?id=3 and exists (select * from user)

Si al ejecutar esta sentencia, nos da el mismo resultado que cuando ejecutamos sentencias(-), quiere decir que si existe la tabla, si por el contrario nos da el mismo resultado que cuando ejecutamos sentencias(+), quiere decir que la tabla no existe, o que tenemos mal escrita la sentencia, por que debe-mos recordar que aunque el mysql sea un estándar, hay varias diferencias entre sus versiones.

Ya tenemos el nombre la tabla de los usuarios,. ahora vamos averiguar el nombre del administra-dor del sistema, antes que nada debemos saber de que tamaño es, es decir cuantos caracteres tiene, para esto hacemos eso ejecutamos la siguiente sentencia:

www.victima.com/secciones.php?id=3 and 10> length(user())

que hace esta sentencia? compara si el tamaño del nombre del usuario es menor a 10, si el resultado que nos arroja es el mismo, de las sentencias(-) quiere decir que si se cumple la condición y que el tamaño del nombre del usuario es menor a 10, ya sabemos que esta entre 1 y 10, entonces acortamos la búsqueda, en ves de 10 ponemos 8 por ejemplo y así sucesivamente hasta que el resultado de la sentencia sea igual al resultado arrojado por las sentencias(+), cuando esto ocurra quiere decir que ese es el tamaño de la cadena.

Ahora si por el contrario, cuando ingresamos la sentencia:

www.victima.com/secciones.php?id=3 and 10> length(user())

Nos arroja el mismo resultado que las senten-cias(+) quiere decir que el tamaño de la cadena es mayor a 10.

Listo ya tenemos el tamaño de la cadena, ahora vamos a buscar la cadena, inyectando esta sen-

Page 17: Ezine #2 Comunidad DragonJAR

17

tencia:

www.victima.com/secciones.php?id=3 and 300>ASCII(substring(user(),1,1))

Con esta inyección, lo que hacemos es comparar si el ASCII de la primera letra del nombre del usuario es menor que 300, obviamente esta inyección nos arrojara el mismo resultado que la sentencias(-), por qué? pueden mirar la tabla ASCII y se darán cuenta por que xD. Después iríamos acotando la búsqueda mas o menos así:

www.victima.com/secciones.php?id=3 and 100>ASCII(substring(user(),1,1)) —> sentencias(+)

www.victima.com/secciones.php?id=3 and 120>ASCII(substring(user(),1,1)) —> sentencias(-)

si analizamos estos resultados podemos ver cla-ramente que el ASCII de la primera letra esta entre 100 y 120, seguimos acortando la búsqueda:

www.victima.com/secciones.php?id=3 and 110>ASCII(substring(user(),1,1)) —> sentencias(+) www.victima.com/secciones.php?id=3 and 115>ASCII(subst

ring(user(),1,1)) —> sentencias(-)www.victima.com/secciones.php?id=3 and 114>ASCII(subst

ring(user(),1,1)) —> sentencias(-)www.victima.com/secciones.php?id=3 and 113>ASCII(subst

ring(user(),1,1)) —> sentencias(-)www.victima.com/secciones.php?id=3 and 112>ASCII(subst

ring(user(),1,1)) —> sentencias(-)www.victima.com/secciones.php?id=3 and 111>ASCII(subst

ring(user(),1,1)) —> sentencias(+)

ya sabemos que el ASCII de la primera letra es 111 que equivale a la letra «O», y así seguiríamos, obte-niendo todos los caracteres, cabe aclarar que esto no puede funcionar debido a las versiones del servidor, a lo mejor faltaran algunas comillas o paréntesis.

ALGUNAS HERRAMIENTAS!!!

Como pudimos ver, el proceso puede ser largo y tedioso para sacar información por este método, pero paraello,sehacreadodiferentesoftwaretodoconelfinautomatizar esta tarea, voy a mostrar, algunas de ellas, que en mi criterio me parecen las más interesantes:

* 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 yaquetepermitehacerfingerprint,fuerzabruta,es-caladadeprivilegios,entreotras,enlapaginaoficial,se puede descargar y además ver un videotutorial

de como funciona:

Weboficial:http://sqlninja.sourceforge.net/Ir a videotutorial: http://sqlninja.sourceforge.net/

sqlninjademo.html

* BOBCAT: Esta es una herramienta que auto-matiza el proceso, es utilizada por analistas de se-guridad, algunas características importantes, son: muestra facilimente el mapa de la base de datos, tiene interfaz grafica, es interesante vale la penaprobarla Xd

Web oficial: http://www.northern-monkee.co.uk/projects/bobcat/bobcat.html

CÓMO PROTEGERNOS!!

Hay varias formas de protegernos ante esta vul-nerabilidad, quizás la defensa mas importante es que todos nos concienticemos, y aprendamos una programación mas segura. Igualmente también podemos procurar, que el cliente nunca suministre datosparamodificarlasintaxisdecomandosSQL,es decir, aislar la aplicación web desde SQL com-pleto.

Podemos implementar una interfaz segura como la de JDBC o ADO’s estas interfaces, ayudan a que nuestra aplicación sea mas segura, además tienen otras ventajas como de fácil manejo entre otras.

Finalmente debemos reforzar todos estos consejos haciendo pruebas de penetración a nuestra aplica-ción para saber que bug presenta y poder repararlo, para esto podremos utilizar, las herramientas men-cionadas anteriormente o similares.

Bueno esto ha sido todo, espero que les haya gus-

REFERENCIAS:

www.dragonjar.org•www.google.com•www.hernanracciatti.com.ar•

Page 18: Ezine #2 Comunidad DragonJAR

18

POR: hernandgrSEGURIDAD EN APLICACIONES WEB

De la mano de la evolución de nuevas tecnologías, 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 modelos de desarrollo de software: las aplicaciones de escritorio individuales en un principio, luego el desarrollo de otros modelos como el cliente/servidor, yfinalmenteconelaugedelaInternetylaexpansiónde la red de redes se dio la posibilidad del desarrollo de aplicaciones en entorno web, que permiten el acceso desde cualquier lugar del mundo a recursos centralizados o distribuidos en servidores, sólo te-niendo como requisito un PC o un dispositivo móvil con un navegador web y una conexión a Internet disponible.

El desarrollo de aplicaciones web ha ampliado y ha abierto muchas posibilidades de negocio mediante todaslasventajasylaflexibilidadqueofrece,peroa su vez, también ha crecido la amenaza que puede tener la información y los recursos que están ex-puestos para su acceso. Muchas veces el proceso de desarrollo de software se concentra mucho en la funcionalidad delmismo, y no da la suficienteimportancia a otros aspectos que también la deben tener, entre ellos la seguridad.

Este artículo pretende mencionar y dar a conocer cuáles son algunas de las principales amenazas a las que se ve expuesta una aplicación web, sus implicaciones y prevenciones.

1. Inyección SQL:

Cuando se hace una inyección SQL en una apli-cación, se inserta un comando SQL que se ejecuta en el servidor para alterar su funcionamiento normal o para obtener datos de éste.

Un ejemplo. Supongamos un formulario de Login común que tiene dos campos de texto para ingre-sar información

de un usuario y una contraseña.

La página que recibe estos datos puede contener una consulta como de este estilo para validar al usuario:

Consulta=”SELECT * FROM tbl_usuario WHERE nomUsuario=’”+nombreUsuario+”’”

Entonces agregando la siguiente información en el campo usuario:

Tendríamos que al enviar la página, si no se validan adecuadamente los datos, obtendríamos la siguiente consulta SQL.

Consulta=”SELECT * FROM tbl_usuario WHERE nomUsuario=’a’ or 1=1; delete from tbl_usua-rio; —”

Si se ejecuta esta consulta en el servidor de bases de datos, el resultado obtenido sería la eliminación de la información contenida en la tabla tbl_usuario. Aunque en realidad esto sólo funcionaría si los pri-vilegios del usuario con el que corre la aplicación tiene permitido eliminar tablas.

Esta es sólo una muestra de lo que se puede hacer, pero las posibilidades que se tienen al encontrar esta vulnerabilidad son muchas.

La mejor forma de prevenir un ataque de Inyección SQL es validar completamente todos los datos de entrada de una aplicación antes de hacer cualquier operación sobre la base de datos. No se debe permitir el ingreso de caracteres potencialmente peligrosos como [*], [%], [;], [“], [‘], etc. Y lo más importante es que esta validación debe hacerse en el lado del servidor. Las validaciones Javascript utilizadas comúnmente en el lado del cliente no sonsuficientes,pueslosdatosenviadosalservidorpuedensermodificadosfácilmenteutilizandodiver-sas herramientas. La información susceptible de sermodificadapuedesercamposen formularios,campos ocultos o cookies de usuario.

Page 19: Ezine #2 Comunidad DragonJAR

19

Otra forma efectiva de protegerse de una Inyección 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 desarrollado.

2. XSS

Cross Site Scripting o Ejecución Inter Sitio. Este tipo de ataque es cuando se permite ejecutar código

script como Javascript, VBScript, Flash o cualquier otro tipo de código activo que interpreta el nave-gador. El problema se debe normalmente, a que como en la Inyección SQL no se validan correcta y completamente todos los datos de entrada.

Aquí vemos un sencillo ejemplo de cómo se proce-sa un dato de entrada que es escrito en el navegador, y que no es validado.

Los ataques XSS pueden usarse para robar datos comocookiesoidentificadoresdesesióndelusua-rio,quepuedencontenerinformaciónconfidencialy ser usados para robar la identidad de su usuario original.

Las maneras de proteger una aplicación de estos ataques en un principio debe ser validar los datos y evitar caracteres que puedan ser usados para ataques XSS, como <, >, (, ), #, &.Asímismo,validaryfiltrarlosdatosquesevan a mostrar.

Así mismo, como usuario al navegar por pá-ginas potencialmente peligrosas que puedan utilizar un ataque de este tipo para robar datos de los usuarios, se debe prevenir la ejecución de scripts malignos, por ejemplo mediante el uso de herramientas como las extensiones de Firefox

AdBlock y NoScript.

3. Identificación del Servidor Web

Laidentificacióndelservidorwebenelqueestáfuncionando una aplicación puede ser usada para buscar vulnerabilidades que puedan afectar a la plataforma. Una vez afectado el servidor, puede estar en peligro de ser manipulada la información allí alojada.

La información del Servidor Web se consigue veri-ficandolosencabezadosquedevuelveunapáginaalhacerle una petición al servidor. Existen herramien-tasqueayudanaobtenerdichaidentificación,comopor ejemplo la extensión ServerSpy de Firefox.Estosepuedeprevenirconfigurandoelservidor

para que no muestre su encabezado o para que muestre unomodificado.Cabe aclarar que estaprevención no es una solución completa, pues tam-bién existen herramientas que pueden identificarel servidor sin depender del encabezado, como el software httprint.

4. Denial of Service (DoS)

La denegación de servicio ocurre cuando un servi-dor o recurso web es usado en forma exagerada o es objeto de peticiones desmesuradas que pueden terminar por desbordar su capacidad o tráfico yprovocar errores en los servicios.

Una denegación de servicio se puede prevenir mediante el uso de esquemas de seguridad como firewallsqueevitenlaexposicióndirectadeunser-

Page 20: Ezine #2 Comunidad DragonJAR

20

vidoryquefiltre loscontenidosque recibeyqueenvía.

Aunque cabe resaltar que como estamos hablando deseguridadenaplicacionesweb.Unfirewalltradicio-nalnoessuficiente,tambiénesconvenienteusarunfirewalldeaplicación,comoModSecurity,elcualcorrecomo un módulo del servidor web Apache y provee pro-tección contra diversos ataques a aplicaciones web.

5. Mala administración de un sitio web

Es común ver como páginas que hacen uso de pla-taformas virtuales disponibles a todo el mundo, como wordpress, joomla o el célebre PHPNuke, entre otras, son objeto de ataques que se aprovechan de vulnerabilidades descubiertas en algunas versiones, y que por el simple descuido de sus administradores de no actualizar dicha plataforma, se exponen a ser víctimas de ataques que pueden ser sencillamente realizados con herramientas como exploits que se encuentran fácilmente en Internet.

La recomendación es mantener siempre el soft-ware actualizado con las versiones disponibles que corrigen las vulnerabilidades descubiertas.

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 automatizado, por ejemplo, el uso de CAPTCHA.

* El modo ideal para implementar un recordatorio de contraseña, sería no mostrar una contraseña nueva directamente en pantalla. En primer lugar es bueno que el usuario proporcione datos personales o que responda una pregunta secreta que permita identificarlo.

Luego enviar al correo electrónico del usuario un enlace que le permita acceder a un sitio donde in-gresar una nueva contraseña. Dicho sitio no debe tener un periodo muy prolongado de validez, pasado un lapso de tiempo debe caducar.

Un ejemplo práctico de vulnerabilidades en aplicaciones web

Para ilustrar algunos ejemplos de vulnerabilidades que pueden presentar Aplicaciones Web, usaremos como muestra el Hacme Casino, una aplicación de FoundStone, una división de McAfee®.

El Hacme Casino es una aplicación dirigida a todos los desarrolladores y personas que desean probar y conocer acerca de la seguridad en aplicaciones web, mediante una serie de vulnerabilidades ex-puestas que pueden ser explotadas y conocer cómo funcionan.

La descarga del Hacme Casino se puede hacer desde http://www.foundstone.com/us/resources/proddesc/hacmecasino.htm. En este sitio se incluye una guía de usuario en idioma inglés que puede ser descargada para saber cómo se instala la aplicación y cómo se pone en funcionamiento, así como para

conocer todas las vulnerabilidades y la forma en que pueden ser explotadas. La instalación es muy sen-cilla, simplemente se trata de ejecutar el instalador que se descarga desde la pagina y una vez instalado, ejecutar el servidor de prueba para la aplicación. Para esta práctica también se requiere usar un Proxy para analizar algunas peticiones HTTP. En la guía de usuario del Hacme recomiendan Paros Proxy, el cual será el que vamos a usar también.

Page 21: Ezine #2 Comunidad DragonJAR

21

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

La primera vulnerabilidad: Inyección SQL

Al tratar de ingresar cualquier nombre de usuario 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 de datos del tipo:

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”

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 analiza la petición que se envía cuando intentamos transferir chips, usando la ayuda del Proxy, veremos lo siguiente:

Aquíobservamosquesetransfierentresparáme-tros: transfer, login[] y commit. Con estos parámetros

Page 22: Ezine #2 Comunidad DragonJAR

22

esposible construir unenlacequenos transfierafondos a nosotros. Es decir, si somos el usuario “AndyAces”,ydeseamosquenostransfieran1000chips, podemos construir la siguiente URL:

http://127.0.0.1:3000/account/transfer_chips?transfer=1000&login[]=andy_

aces&commit=Transfer+ChipsCómo se puede explotar esto?... Si logramos a

través de ingeniería social que otros usuarios lo-gueados en la aplicación hagan clic en ese enlace, ydisponendelosfondossuficientes,enestecaso1000 chips, estos serán transferidos a nosotros. Esta es una forma de hacer phising, gran mal que abunda hoy en la red, y que ha causado muchos daños a raíz de las vulnerabilidades aprovechadas

y los usuarios incautos.

Veamos un ejemplo de cómo funciona en el Hacme Casino:

En primer lugar, nos logueamos en la aplicación con otro usuario que será la “victima” a la cual se le descontarán los chips. El Hacme trae otro usuario llamado “bobby_blackjack” con contraseña “twen-ty_one”, así que procedemos a usar este login.

Una vez que este usuario está logueado, si pulsa en la URL que construimos para obtener los chips, en

caso de no ser validada la transferencia de manera correcta, los fondos serán transferidos. En el Hacme lógicamente es una vulnerabilidad existente.Despuésdeverificar losperfilesde losusuarios

“Andy Aces” y “Bobby BlackJack” comprobamos que la transferencia ha sido realizada:

Ahora el usuario “Andy Aces” tiene 1000 chips transferidos irregularmente desde la cuenta de “Bo-bby BlackJack”.

La forma de ganar o ganar jugando Blac-kJack

En el juego del BlackJack, existe un bug que per-mitirá que por lo menos el jugador no se arriesgue a perder su dinero si no está seguro de lo que va a hacer.

Cuando entramos a la parte del BlackJack, es-cribimos el valor a apostar, pero se observa que el dinero no es aumentado ni reducido de tu cuenta hasta que completas el juego, y si luego hacemos clic, por ejemplo, en el enlace al Lobby, simplemente sesale sinmodificar la cantidaddechips.Por loque el bug es sencillo: si no estás seguro de ganar, simplemente te sales e intentas de nuevo…

La forma de evitar esto es validar que una vez que se haga la apuesta, se tenga que completar el juego obligatoriamente, o en su defecto, si el jugador se 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.

Page 23: Ezine #2 Comunidad DragonJAR

23

Analizando con el Proxy Paros las acciones que ocurren cuando pulsamos Hit o Stay, vemos que se producen dos llamadas Ajax:

Hit:

Stay:

De estas dos peticiones, surgen estas dos URL:

http://localhost:3000/blackjack/hit_or_stay?act=Hhttp://localhost:3000/blackjack/hit_or_

stay?act=S

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

Cuál es la vulnerabilidad aquí?... Vamos a hacer un juego de blackjack hasta que logremos ganar una vez.

En esta imagen podemos observar que se ganó

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://localhost:3000/blackjack/hit_or_stay?act=S

Después de ingresar esta URL y generar la pe-tición, revisamosel perfil del jugador, y vemos losiguiente:

Ahora el jugador dispone de 1180 chips, es decir, nos sumaron de nuevo la ganancia del mismojuego.Estosignificaquepodríamosin-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 que no se controla totalmente. Si bien las peticiones AJAX van “por debajo” de la aplicación, esto no quie-re decir que no sean accesibles desde otra parte, de aquí la importancia de tener en cuenta todos estos detalles en el proceso de desarrollo para evitar este tipo de vulnerabilidades.

Previniendo amenazas de seguridad en el proceso de desarrollo de software

El proceso de desarrollo de software debe prever la mayoría de los aspectos y funcionalidades que va a tener una aplicación, y tratar de describirlas con el mayor detalle posible en sus fases iniciales

Page 24: Ezine #2 Comunidad DragonJAR

24

deanálisisydiseñoconelfindefacilitarlaetapadeconstrucción del software. El costo de prevenir un error será menor en la medida que sea detectado más temprano.

Un análisis y diseño responsables deben contem-plar todas las posibles amenazas de seguridad que puedesufrirunaaplicación,categorizarlasydefinirelriesgo que se puede correr en caso de ser afectado por una de ellas.

Por ejemplo, unas metodologías para modelar y cuantificarlosriesgosdeseguridadenunaaplica-ción que referencia Microsoft® en sus prácticas de seguridad son los métodos STRIDE y DREAD.

Spoofing:Posibilidad de acceder con identidadfalsa.

Tampering:Posibilidaddemodificacióndedatos.Repudiation: Posibilidad de poder probar una agre-

sión ante un intento de denegación.Information revealed: Posibilidad de acceder a

informaciónconfidencial.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-

birReproducibility: En qué circunstancias se puede

reproducir el ataqueExploitability:DificultadpararealizarelataqueAffected Users: Cantidad de usuarios que pueden

verse afectados en un ataqueDiscoverability:Dificultadparadescubrirlavulne-

rabilidadFinalmente, 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.

Este artículo fue realizado en base a información obtenida de las siguientes fuentes:

* Wikipedia – http://es.wikipedia.org/* Open Web Application Security Project - http://www.owasp.org/* Microsoft® Developer Network - http://msdn2.microsoft.com/es-es/default.aspx* FoundStone http://www.foundstone.com/us/resources/proddesc/hacmecasino.htm.* Paros Proxy http://www.parosproxy.org* Modsecurity http://www.modsecurity.org/* La Comunidad DragonJAR – http://www.dragonjar.org

Referencias

Page 25: Ezine #2 Comunidad DragonJAR

25

Siendo un poco generales podemos decir que un compilador es un programa que lee un programa escrito en un lenguaje determinado (lenguaje fuen-te), y lo traduce en un programa equivalente pero en otro lenguaje objeto (puede ser otro lenguaje de programación o bien lenguaje maquina).

Los compiladores por lo general se clasificancomo de una pasada, de múltiples pasadas, de carga y ejecución, de depuración o de optimación. Dependiendo de cómo fueron construidos y de la función que deben realizar. Aparentemente el pro-ceso de desarrollo de un compilador es complejo pero en general, las características de los compi-ladores son las mismas.

La teoría de los compiladores se rige en gran medida por teoremas, axiomas y reglas de las mate-máticas, en este artículo no nos vamos a enfocar en el análisis de dichas reglas matemáticas, nos enfo-caremos mas en el aprender a crear un compilador, teniendo en cuenta algunas reglas matemáticas y comenzando por crear una estructura básica, desde la cual podamos crear nuestro compilador e ir agregándole diferentes módulos.

He elegido el lenguaje de programación Java para nuestro cometido, en esta primer entrega vamos a realizar un compilador básico mediante el cual podamos ejecutar sentencias sencillas tales como: las operaciones básicas (suma, resta, multiplica-ción y división), también le agregaremos a nuestro compilador operadores lógicos (i lógico, o lógico y negación) y operadores relacionales (mayor, me-nor, igual, mayor o igual, menor o igual, diferente),

Introducción

Creando un Compilador con JAVA

por: lordjackob [email protected]

teniendo en cuenta que en compilación 0(cero) es false, y diferente de 0(cero) es true.

En posteriores ediciones agregaremos a dicho compilador todo lo relacionado con el manejo de variables y tipos de datos, estructuras de control tales como: goto, if – else, for y while, además esperamos también poder implementar funciones (métodos) tocando temas tales como recursividad, los cuales son muy importantes en el desarrollo de los compiladores.

Para realizar el compilador necesitamos: conoci-mientos básicos sobre el lenguaje Java, una maqui-na virtual para la compilación y posterior ejecución de nuestro compilador y un poco de paciencia.

Modelo de análisis y síntesis de la compilación.

La compilación puede ser dividida en análisis y sín-tesis, donde la parte del análisis divide el programa fuente en sus componentes y crea una represen-tación intermedia del programa fuente, el cual es tomado posteriormente por la parte de síntesis para construir el programa objeto.Definiciones:Identificador: también llamado variable.Expresión: también conocido como proposición. Token: elemento básico indivisible.(if, else, var, =,

!, >, entre otros), el cual puede estar compuesto por uno o varios caracteres.

Lexema: cadena de texto (proposición) de la cual se deben sacar uno o varios token (Posición = inicial + velocidad * 60) dependiendo de la proposición.

Lexer: también conocido como analizador léxico, es el que se encarga de tomar los lexemas y extraer los tokens (en este artículo será tratado como una clase).

Parser: es el que se encarga de tomar ese conjun-to de tokens y le da una representación en forma de árbol almacenándolos en un bytecode, recorriendo toda la cadena de caracteres y formando el árbol de forma recursiva (en este artículo será tratado como una clase).

Bytecode: vector (o array) en el cual será alma-cenado dicho árbol.

Programa fuente

Mensajes de error

Programa objeto

Page 26: Ezine #2 Comunidad DragonJAR

26

Stack: es el lugar de memoria en el cual se van a almacenar los valores correspondientes a los resultados de operaciones tales como asignación, suma, resta, entre otros, el resultado de la operación permanece en la cima del stack y es el resultado de procesar la información que se encuentra en el bytecode.

VirtualMachine: es el que se encarga de procesar la información contenida en el bytecode y colocar los valores correspondientes a las operaciones (suma, resta, asignación, etc) en el stack y así mismo ge-nerar el resultado de la operación realizada (en este artículo será tratado como un clase).

Análisis del programa fuenteEl 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 quese identifican loselementosde lacadenadecaracteres ingresada y se agrupan en componentes léxicos (por lo general los espacios no se toman en cuenta).

Ejemplo: tomamos la siguiente proposición de asignación:

Posición = inicial + velocidad * 60 y se agrupa en componentes léxicos.

1.identificador(Posición).2. símbolo de asignación (=).3.identificador(inicial).4. signo de suma (+).5. identificador(velocidad).6. signo de multiplicación (*).7. numero (60).

2. Análisis jerárquico: (realizado por el parser) tam-bién conocido como sintáctico, es en éste donde se to-man los componentes léxicos y se unen en frases gra-maticales, las cuales serán utilizadas por el compilador p a r a p o s -terior-mente d a r u n a salida.

Ejemplo: después de agrupar los componentesléxicos en el análisis jerárquico se agrupan según

la prioridad que tienen.

Como bien sabemos la multiplicación tiene mayor prioridad que la suma, es por ello que en la estruc-tura de árbol se ubica en la parte inferior, así es la operación que se debe realizar primero.

3. Análisis semántico: es en esta fase donde el compilador revisa el programa para tratar de encon-trar errores y reúne información sobre los datos para posteriormente generar el código objeto.

Finalmente el bytecode quedaría así:

Nota 1: finalmentequieninterpretaelárbolsintácti-co creado por la interacción entre el parser y el lexer, eslamaquinavirtual, lacualeslaquefinalmentecalcula y arroja los resultados.

Nota 2: la información extraída de la cadena de caracteres ingresada, siempre será manejada como caracteres, solo será manejada como numérico, al ser procesada la información en la maquina vir-tual.

Reglas recursivas para construir un árbol sintáctico

Para poder pasar de una expresión a una árbol sintáctico debemos tener en cuenta las siguientes reglas de recursividad:-Cualquieridentificadoresunaexpresión.- Cualquier número es una expresión. - Si expresion_a y expresion_b son expresiones,

entonces también lo son:expresion_a + expresion_bexpresion_a * expresion_b(expresion_a)-Siidentificador_aesidentificadoryexpresion_a

es expresión, entonces:identificador_a=identificador_aespropo-

sición.- Si expresion_a es expresión y porposicion_a es

proposición, entonces:While(expresion_a)do proposición_a

Page 27: Ezine #2 Comunidad DragonJAR

27

If(expresion_a)then proposición_a Son proposiciones.

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 deinicioafinyluegonosdevolveremosarmandonuestrobytecodedefinainicio(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.

1. Declaraciones à EOI //end off input;2. | expresion; declaraciones3. Expresion à termino expresion’4. Expresion’ à + termino expresion’ //ca-

rácter suma5. |fin6. Termino à factor termino’7. Termino’ à * factor termino’ //carácter

producto8. |fin9. Factor à numero10. | (expresión) //paréntesis

Ejemplo: ¿cómo debería recorrer el compilador una expresión del tipo:

«1+2*3», formando el árbol con la gramática antes vista?

Nota: como bien sabemos el árbol se estructu-raría desde el parser, pero se utilizaría el lexer en los lugares donde se detectan números y símbolos (+,-,*,/,entre otros).

¿Cómo debería quedar estructurado el bytecode para la expresión: «1+2*3»?

El bytecode quedaría estructurado de la forma anterior donde los números del 0 al 8 son las posi-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.

Page 28: Ezine #2 Comunidad DragonJAR

28

Programación¿Por donde debemos comenzar?Lo primero que necesitamos para comenzar a

programar es entender bien como se forma el ár-bol a partir del algoritmo antes descrito, además debemos tener bien claro que hace quien, es decir: debemos tener bien claro que con el lexer lo que queremosesidentificarcadaunodeloselementosque conforman esa cadena de caracteres (código 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 resultados en el stack.Elflujodelprogramadeberíaseguirmásomenos

los siguientes pasos: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ódigoEn 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-

tiplicación y división, posteriormente daremos las indicaciones pertinentes para que el lector agregue a dicha estructura tanto operadores relacionales como lógicos.Dichaestructurapuedesermodificadaconforme

el lector lo desee.Pasando de la teoría a la práctica, he decido crear

cuatro clases para nuestro cometido; una llama-da compilador, para colocar constantes comunes que pueden ser requeridas por las demás clases, además de otras 3 clases de las cuales ya hemos hablado (lexer, parser y virtualmachine).

CompiladorEnestadefinimoscomoconstantes,laspalabras

claves que utilizaremos en diferentes clases, bási-camente las que utilizaremos en nuestro bytecode y para procesar luego en la virtualmachine.

LexerEn esta clase analizaremos la información que

el compilador exija mediante un método llamado lexer.

Page 29: Ezine #2 Comunidad DragonJAR

29

ParserCreamos la clase parser, y la preparamos para la

lectura de nuestras líneas de código.

Ahora vamos a realizar el seguimiento al método correr, mediante la cual iniciamos el recorrido por elcódigodenuestrocompilador,elcual,alfinalizardará como resultado el bytecode con la estructura de árbol que necesitamos.

Desde el método correr podemos ver como se crea la estructura que antes buscábamos, es decir: la estructura que se sugiere en el algoritmo recursivo por la izquierda.

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.

Nota: de manera similar se implementa la resta, la multiplicación y la división.

Ejercicio: para implementar los operadores re-lacionales y los operadores lógicos, hay que tener en cuenta que los operadores relacionales tienen mayor importancia que los operadores lógicos. Ahora: primero se deben reconocer en el lexer, los elementos necesarios para dichos operadores, es 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 operadoresquevamosaincluiryfinalmentesedebemodificarlavirtualmachineparaquepueda 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.

Page 30: Ezine #2 Comunidad DragonJAR

30

Un cordial saludo para todos los Dragonautas y lectores de este segundo número de la E-Zine.

Una vez superada la prueba de fuego de tan noble causa, rescatada por algunos buenos usuarios de la Comunidad DragonJAR en el lanzamiento del primer número. Y aunque sus gestores han querido darle la titularización de versión beta, creo que este fue una suma de fuerzas, voluntades y experiencias con un producto maravilloso, por que permitió abrir un espacio de esparcimiento y opinión en la comuni-dad. Espacio que impulsa nuevamente un segundo número, para lograr un producto de alta calidad o por lo menos de buen contenido.

En esta oportunidad, me han invitado a escribir un artículo y participar de dicha edición, lo cual me hace sentir honrado y orgulloso del buen trabajo y desempeño de este equipo, tanto en el desarrollo, edición y diseño de la misma.

Siendo sincero……….No sabía que escribir para entregar un buen con-

tenido temático que permitiera cautivar la atención dellectoryparatalfinconsiderévariostemasinte-resantes, que fueran de nivel o altura al contenido que buscan los lectores hoy en día.

Analizando sobre lo que sería bueno tratar y entregar como un verdadero valor agregado para la suma de conocimiento de los lectores de este número de la E-zine, decidí tomar un tema que viene resonando de gran popularidad y aplicabilidad en el mundo informático y espe-cialmente en el proceso de aseguramiento de las plataformas de Sistemas.

Sin más preámbulo, por que de seguro ya visualizo a mis amigos con gestos de impaciencia sobre de mis largos textos con un pensamiento profundo...

«¿Con qué nos saldrá Dino ahora?». Aclaro desde un comienzo, que el tema a tratar,

HARDENINGNickname: Dinosaurio

Nombre: Jhon Jairo Hernández

E-mail: [email protected] la Comunidad

Dragonjar.org

no es abarcado de la manera más profunda como quisiera, esto debido a mi escaso conocimiento. Además que no quiero que se me queme la neu-rona.

Es el tema de HARDENING, solo espero que les guste, lo hice con cariño y aprecio para todos.

Erase una vez en un pueblo muy leja-no………………………………….

Recuerdo de una mañana como cualquier inicio de jornada laboral, de mis primeras acciones den-tro de lo que tengo programado fue la de sentarme a mi computador y conectarme a la Red a revisar mis correos y de paso revisar foros de los cuales participo e iniciar mi plan de trabajo.

Oh! Sorpresa que me llevo, cuando en mi MSN aparecía una ventana en la cual desplegaba un mensaje de un experto en seguridad ( del cual le profeso un gran respeto y admiración!) , su-sodicho individuo (ya parezco policía con estos términos ) que en el momento llevaba a cabo un proceso de aseguramiento de plataformas que hacían parte del plan de continuidad del negocio que debía ejecutar con servidores y dispositivos de Checkpoint, su FireWall debía ser afinado e integrado para tal fin, y se encontraba en el dilema de realizar la actualización de la versión del NOS del Firewall, en esta labor tenía inconvenientes con el Update de la actualización de su versión de Linux, debido a que no había una versión más actualizada, después de intercambiar mensajes tratando de colaborar con su labor, le perdí el rastro en esa mañana.

Al día siguiente nuevamente nos encontramos en el MSN y su respuesta para la finalización del proceso que había realizado fue «REALICE UN PROCESO DE HARDENING DE TODA LA PLA-TAFORMA».

Creo que fue el momento en que me dije a mi Mis-mo

MI MISMO: No es solo un término más o frase de un Tecnicista,

es realmente una buena práctica de Seguridad, de la cual debo conocer un poco más………

Page 31: Ezine #2 Comunidad DragonJAR

31

HARDENING!!!.Para su definición técnica tomare la expresada

por dos expertos:Escrito por el evangelista seguridad Roberta Bra-

gg«Adoptar un enfoque proactivo para la seguridad

de la red por el endurecimiento de Windows de los sistemas contra los ataques antes de que ocu-rran.»

Por Luis Montenegro, Windows y Security MVP 2007

«Haciéndole la vida difícil al atacante. Ese es el concepto que está detrás del Hardening de sistemas operativos. Hardening es una acción compuesta por un conjunto de actividades que son llevadas a cabo por el administrador de un sistema operativo para reforzar al máximo posible la seguridad de su equipo.

Su propósito, entorpecer la labor del atacante y ga-nar tiempo para poder minimizar las consecuencias de un inminente incidente de seguridad e incluso, en algunos casos, evitar que éste se concrete en su totalidad.»

Y no podía faltar la de Wikipedia (Que de seguro ya la están buscando!!!)

«En computación, el endurecimiento suele ser el proceso de asegurar un sistema. Esta labor es especialmente hecha para proteger los sistemas contra los atacantes. Esto suele incluir la eliminación de nombres de usuario o innecesarios de acceso y la inhabilitación o supresión de los servicios inne-cesarios.

Existen diversos métodos de endurecimiento de los sistemas Unix y Linux. Esto puede implicar, entre otras medidas, la aplicación de un parche para el kernel como Exec Shield o PaX; cierre de los puertos de red abierta, y el establecimiento de sistemas de detección de intrusiones, cortafuegos y sistemas de prevención de intrusiones. También hay endurecimiento guiones y herramientas como Bastille Linux y Apache / PHP Hardener que puede, por ejemplo, desactivar características innecesarios en losarchivosdeconfiguracióno realizar variasotras medidas de protección. «

Para mí:«Essimplementeelprocesodeafinacióndelper-

formance y aplicación de las características de un producto en un 110% para disminuir los vectores de

amenazas y hacerle la vida más difícil al atacante»Ahora continuemos contándoles un poco del pro-

ceso de Hardening!.Que actividades debemos desarrollar para ase-

gurar nuestros Sistemas:

ActividadesI) Los procesos de arranque (del bootstrapping

del sistema)II) Los servicios o demonios que se ejecuten en

el inicio y apagado del sistemaIII) Aseguramiento de Sistemas de archivos

(comúnmente denominados File System en *NIX y volúmenes en Netware - Novell)

IV) Uso de opciones de límites y forzar cuentas de usuario

V) Políticasdelsistema,filtradosyAclsVI) Protección a ataques físicos o de Hardware

(Seguridad Física)VII) Actualización de Firmware, BIOS, Softpaq,

contraseñas de arranque de los equipos, desacti-vación de unidades externas en servidores como pen drive o memorias USB, disqueteras, unidades de Cd/DvD, opticas.

VIII) Protección y renombre de cuentas de Administración y deshabilitar o invalidar cuentas estándares, invitado, uso de cuentas limitadas.

IX) Restricción de Instalación de Software y Hardware de acuerdo a las políticas de seguridad.

X) Habilitar los sistemas de Auditorias y Monito-reo de logs.

XI) Asegurar consolas de administración, panta-llas de logeo, terminales virtuales y accesos remo-tos.

XII) Políticas y procedimientos de administración de cuentas de usuario, grupos, TCBS (Truste Base Computing), módulos de autenticación agregables yrelacionesdeconfianza.

XIII) Administración de paquetes de instalación, parches (Patchs), upgrades, updates, módulos instalables, integridad de archivos y permisos en el sistema.

XIV) Aseguramiento de las Herramientas de De-sarrollo y compiladores.

XV) Aseguramiento de Núcleos (Kernel) del sis-tema.

XVI)InstalaciónyafinacióndeFirewalls,KitsdeSeguridad (Antivirus, antispyware, antimalware, anti hackers, anti banners) Sistemas de Detección de Intrusos y Sensores como IDS, IPS, HIDS,

Page 32: Ezine #2 Comunidad DragonJAR

32

NIDS.XVII) Uso de Herramientas para Pen-Testing y

Monitoreo.XVIII)ConfiguracióndeProtocolos,PuertosySer-

vicios (Solo los necesarios).XIX) Implementación de esquemas de seguridad,

DMZ, Front End / Back End, Router apantallados, proxys, Firewalls.

XX) Políticas de Procedimientos de Respaldo y de Disaster Recovery.

Dadas a conocer estas actividades pasaré a ex-plicar las dos primeras actividades(ACTIVIDAD I y ACTIVIDAD II) con uno de los sistemas operativos populares de gran estabilidad y acelerado crecimien-to, al que le están apostando grandes como IBM, HP, Novell, Oracle, etc. El del maravilloso mundo del pingüino. El fabuloso Linux.

Limitaremos el alcance de este artículo a los dos primeros puntos, debido a que es un tema muy extenso, que tiene mucha tela por cortar y esta E-zine no daría abasto para cubrirlo, por lo tanto ruego excusas al no entregar en detalle las demás actividades, por lo expuesto anteriormente.

Actividad ILos procesos de arranque (del bootstrapping del

sistema).Debemos asegurar los procesos de arranque del

sistema,con lafinalidadde limitar la intervencióno intrusión del os usuarios, evitando la injection de software o escalada de privilegios en nuestro boot, el cual actúa como un prompt mas del sistema indi-cándonos que el sistema está listo para cargar, en el cual podemos pasar parámetros u órdenes que alteren el funcionamiento y estabilidad de nuestro sistema operativo. Ej.:

Si quisiéramos cargar un SO en LiLo (Linux Loader) solo tendríamos que presionar la tecla [TAB] en el prompt de LiLO y nos mostrara las etiquetas de los sistemas que podemos iniciar o simplemente la tecla [SHIFT]

Podemos evitar situaciones como estas:Pasar a modo mono usuario o de mantenimien-

toLinux singleÓLinux –b

Permitirá a un usuario iniciar en modo de mante-

nimiento con un /sbin/suloginLa opción:init=/bin/sh

Permiten obtener una Shell de root, como también pueden iniciarse desde un disquete. Y bastaría con remontar nuestros discos en modo de rw y voala! Nuestra seguridad totalmente comprometida. Que vaina no!!.

Por lo tanto es recomendable cambiar algunas opciones de nuestros archivos de configuracióndependiendo de nuestro, cargador LilO, Grub o LoadLin.

Tales como:

prompttimeout=50default=linuxboot=/dev/hdamap=/boot/mapinstall=/boot/boot.bmessage=/boot/messagelinear

#permiteespecificarunacontraseñaquesedebeintroducir antes de que el sistema arranque

password=secretpassword#Exigirá la contraseña si se entra un parámetro

como singlerestricted

Si se desea aplicar la restricción con alguna imagen del kernel se puede usar, esta aplica cada vez que se desee arrancar con esta imagen: image=/boot/vmlinuz-2.6.XX-XXlabel=linuxinitrd=/boot/initrd-2.6.XX-XX.imgread-onlyappend=»root=LABEL=/»

Recuerden que para que los cambios sean actua-lizados en su lilo, deben ejecutar# /sbin/lilo

Esta contraseña se añade en Lilo.conf en texto claro, por lo tanto se deben aplicar los permisos adecuados para que sólo con los privilegios de root pueda verse la contraseña.

# chown root:root /etc/lilo.conf# chmod 0600 /etc/lilo.conf

También es recomendable no mantener muchas versiones del kernel, en general solo mantener la ultimaylaactualconlafinalidaddenodejaradis-posición tantos kernel como le sea posible cargar en una sesión del sistema. Por favor no olvidemos

Page 33: Ezine #2 Comunidad DragonJAR

33

activar las máximos niveles de seguridad que ten-gamos a disposición, como habilitar password de BIOS o de lectura con dispositivos Biometricos , Smart Card y deshabilitar el arranque por unidades externas como disquetes, Unidades Opticas de Cd o DvD, USB, BOX HD USB, etc.

Al igual que LiLo, su hermanito Grub también sufre de problemas de seguridad y permite que se le pasen parámetros y sean ejecutados, por lo tanto debe-mos de asegurar con una contraseña encriptado en MD5 la cual no permite que sea solo con una leída al archivo /etc/grub.conf.

Veamos:# grubgrub> md5cryptPassword: ********Encrypted: $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70grub> quit

Ejecutamos el Shell de Grub y posteriorment md5crypt, luego el password y este genera un hash de md5 y este es introducido en el archivo de con-figuracióndelgrub/etc/grub.confdefault=1timeout=10splashimage=(hd0,0)/grub/splash.xpm.gzpassword —md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70title Red Hat Linux (2.6.7)root (hd0,0)kernel /vmlinuz-2.6.7 ro root=LABEL=/initrd /initrd-2.6.7.img

Esto nos evitara enormes dolores de cabeza, ya que al reiniciar la maquina y se desea introducir un pará-metro, este nos exigirá que entremos su password (Obligatoriamente por haber añadido la línea del

password—md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70).

Si desea añadirle un menú a Grub, para que sea mostrado después del password, solo cambiemos la línea del password –md5 por esta:

password —md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70 /boot/grub/

administrator-menu.lst

Al igual que Lilo podemos también proteger una imagen con Grub:

default=1timeout=10splashimage=(hd0,0)/grub/splash.xpm.gzpassword —md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70title Red Hat Linux (2.6.7)lockroot (hd0,0)

kernel /vmlinuz-2.6.7 ro root=LABEL=/initrd /initrd-2.6.7.img

Recuerden que este debe quedar con los per-misos apropiados:# chown root:root /etc/grub.conf# chmod 0600 /etc/grub.conf

Para Grub (/boot/grub/grub/conf ) existen paráme-tros importantes como:

Hiddenmenu default 0

password

Es recomendable cambiar los niveles de ejecución run-level, forzando a que se requiera el password del root cuando se entre en estado de mantenimiento o monousuario, cambiando el archivo /etc/inittab asi:

s:S:respawn:/sbin/sulogin to /etc/inittabDe igual forma en este archivo evitemos que el

sistema sea reiniciado pr+n esionando las comunes teclas CTRL-ALT-DEL antecediéndole un signo de comentario ##ca::ctrlaltdel:/sbin/shutdown -t5 -rf now

Como ven son algunas reglas básicas de Harde-ning en Linux, les reitero que esto es en la medida que una persona tenga acceso físico a la maquina y pueda ser manipulada, debe tenerse mucho cuidado con los accesos remotos que se realicen a la ma-quina si es que cumple este rol, puesto que puede afectar nuestro arranque remoto o soporte remoto si es que lo utilizamos.

Actividad II

Los servicios o demonios que se ejecuten en el inicio y apagado del sistema

Si, así como se indica en su titulo, llana y sencilla-mente es deshabilitar aquellos servicios que no van a tener uso, para disminuir los vectores de ataques, las amenazas cerrando las brechas del atacante. Revisemos minuciosamente en:

/Etc/inittab El archivo inittab es una tabla que le permite al

sistema indicar de manera ordenada como debe arrancar.

El formato utilizado por este archivo es el siguien-te:

servicename:runlevels:label:command -option –optionsysacc:235:acct:/usr/sbin/acct -q -d~~:S:wait:/sbin/sulogin

Page 34: Ezine #2 Comunidad DragonJAR

34

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Veamos esto un poco más en detalle:id:identificadordecadasecuenciaconunaentrada

de 4 caracteres máximo.Nivel-de-Ejecucion: Indica el nivel de corrida en

que va a efectuarse la acción indicadaacción: Indica qué acción se llevará a caboproceso: Indica el proceso a ejecutar. En *nix toda

acción genera al menos 1 proceso.Cabe anotar que en las últimas versiones de

Ubuntu este fue reemplazado por el «upstart» y los niveles son controlados con los archivos en /etc/event.d.

Boot scripts in /etc/init.d Servicios tales como:Service Description

Remove?anacron A variation on the cron tool Yesapmd Advanced Power Management Yesatd Daemon to the at scheduling tool Yesautofs Automount

Yescrond The cron daemon

No

cups Printing functions Yesfunctions Shell-script functions for init scripts

Nogpm Mouse support for text applications Yesirda IrDA support Yes

(unless you have IrDA devices)isdn ISDN support Yes

(unless you use ISDN)keytable Keyboard mapping Nokudzu Hardware probing

Yeslpd Printing daemon Yesnetfs Mounts network file systems

Yesnfs NFS services Yesnfs lock NFS locking services Yesntpd Network Time Protocol daemon Nopcmcia PCMCIA support

Yesportmap RPC connection support Yesrandom Snapshots the random state Norawdevices Assigns raw devices to block devices Yes

rhnsd Red Hat Network daemon Yessnmpd Simple Network Management Proto-

col Yes(SNMP) supportSnmtptrap SNMP Trap daemon Yes

Sshd Secure Shell (SSH) daemon Nowinbind Samba support Yesxfs X Font Server Yesypbind 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 solamente para que dejar activo cups o lpr.

Para parar dichos servicios puede usar la utilidad de administración de cada Distro, tales como Yast en SuSE, Yum en Fedora, Scoadmin en SCO Unix, Smit en AIX, de igual forma utilizar líneas de co-mando como #chkconfig ó #update-rc.d.Para ver la lista con chkconfig:# chkconfig —listKdcrotate 0:off 1:off 2:off 3:off 4:off

5:off 6:offntpd 0:off 1:off 2:off 3:on 4:off

5:on 6:offcourier-imap 0:off 1:off 2:on 3:on 4:on

5:on 6:off

Nos indica: El Servicio Nivel del Servicio:Y si esta en off/onPara parar el servicio:

Page 35: Ezine #2 Comunidad DragonJAR

35

# chkconfig —del nombre-del-servicio

Para iniciar el servicio:

# chkconfig –add nombre-del-servicio

Después de eliminado los servicios, si estos no van a ser utilizados posteriormente, podemos entrar a borrarlos de /etc /rc.d/init.dYnoolvidarverificarlapermisividaddelosarchi-

vos nuevamente:

# chown root:root /etc/rc.d/init.d/*

# chmod -R 700 /etc/rc.d/init.d/*

The inetd/xinetd daemons Comúnmente llamado los Demonios maestros, Como anécdota recuerdo el día que le comente al

Gerente de Sistemas de una Compañía (Empresa) en la cual laboraba con el cargo de Administrador del Sistema, teniendo a mi cargo tres (3) servidores *NIX y unos 100 usuarios, plataforma conectada en Modo Multiusuario y de Red, pero volvamos a lo que quiero comentar porque ya me disperse con esta anécdota.

Gerente de Sistemas:JJH Necesitamos que se efectué el Backup Diario

aMediodíayrealiceverificacióndelaintegridaddeDatos, debe ser automático!. Por favor Investigue de que manera podemos armar un Shell Script y automatice la tarea.

Administrador del Sistema (JJH)Eso se puede hacer utilizando los Demonios

(Daemons) del Crontab y At, automatizamos el Shell para que se programen las tareas de Respaldos de Seguridad (BackUp) y realizamos las pruebas.

Gerente de Sistemas:¿Cómo así?Y a Ud. ¿Quien le dijo que eso se llama así?Administrador del Sistema (JJH)Pensé entre mí:«Ah kab*** piensa que por que ha hecho más

cursos y especializaciones que uno, tiene que sa-bérselas todas!

Uffff» Y le dije:Pues es la traducción que hago de los Manuales

del Sistema Unix (Era poco de los buenos soportes que se encontra-

ban en esa época año 1994 y podíamos consultar.

Internet aun no tomaba auge!!)Gerente de Sistemas:¿Cómo así?No señor averigüé bien como se llama esa vaina,

hágala y documéntela.Administrador del Sistema:Me dije a Mi mismoSi el Mismo:Ahora la hago y lo dejo como el ternero (Ya sa-

brán cómo, no sean mal pensados) con las ganas de mam*** perdón de chuparme como vampiro el conocimiento por que lo hago y no le muestro los resultados para que se dé cuenta que el Habito no hace al Monje!.

Bueno pero sigamos con el Hardening porque después de esa anécdota y experiencia de vida ya deben estar llorando y enviándome mis condolen-cias!!

Continúo con los Demonios Maestros, para los NeófitoscomoYO,debemosentenderunDemoniocomo un proceso que se ejecuta en Background (ensegundoplano)conlafinalidadde iniciar lassolicitudes de conexión que llegan al servidor y son asignados un puerto de Conexión por ejemplo:ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l

-atelnet stream tcp nowait root /usr/sbin/tcpd

in.telnetd## Shell, login, exec, comsat and talk are BSD proto-

cols.#shell stream tcp nowait root /usr/sbin/tcpd in.rshdlogin stream tcp nowait root /usr/sbin/tcpd in.rlogind#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd#comsat dgram udp wait root /usr/sbin/tcpd in.comsattalk dgram udp wait nobody.tty /usr/sbin/tcpd in.talkd

Sera que servicios como telnet o rlogin abiertos me servirán de mucho???

Solo juzguen Uds. Que hay disponible aquí (para quien no entienda solo escribir en google vulnera-bilidades de telnet o rlogin)

De ahí nace una versión en algunas Distros de-nominada Xinetd su objetivo primordial es mejorar el uso de los servicios en los controles de acceso y contrarrestarDOS(DenialOfService),enfinmejorarla administración de los servicios. Un vistazo a su archivodeconfiguraciónservice nntp { socket_type = stream protocol = tcp wait = no user = news group = news server = /usr/bin/env

Page 36: Ezine #2 Comunidad DragonJAR

36

server_args = POSTING_OK=1 PATH=/usr/sbin/:/usr/bin:/sbin/:/bin +/usr/sbin/snntpd logger -p news.info bind = 127.0.0.1 }

Continuemos….La idea es revisar los servicios que se inician en

este demonio y desactivar aquellos que impliquen un riesgo inminente por su activación y no uso den-tro del Sistema Operativo, aumentando el riesgo y alternativas de ataque. «Comoquiendicequeloquenoseusaseatrofia

o lo que no sirve estorba»Si no vamos a hacer uso de estos servicios, tam-

poco los ofrezcamos para ampliar los vectores de ataques.

Solo adiciona a la línea un # y esta quedara como comentario:#telnet stream tcp nowait root /usr/sbin/tcpd

in.telnetd#login stream tcp nowait root /usr/sbin/tcpd

in.rlogind

La recomendación apropiada es desactivar los demonios de inetd/Xinetd y lanzar los servicios que se necesitan con scripts hechos a la medida.Verifiquemossieldemonioestaenejecución:$ ps -A | grep ‘xinetd\|inetd’2106 ? 00:00:00 xinetdLuego paramos el proceso:

$ /etc/rc.d/init.d/xinetd stop

Ynuevamentenuestroamigochkconfignosdarála mano:

$ chkconfig —del xinetd

NOTA: Ya sabrán para que se ejecuta, si no con el dolor del alma a devolverse unas líneas atrás y leer nuevamente para que es esta vaina, porque MIguelito =YO, no lo repetiré!

Para culminar nuestra labor con los archivos de configuracióndelDemonio:

# rm -f /etc/rc.d/init.d/xinetd# rm -f /etc/xinetd/conf

# rm -f /etc/xinetd.d

Y reinicie nuevamente su Sistema:

#Shutdown –r now

NOTA: También pueden utilizar las herramientas

de instalación y remoción de software para eliminar el demonio. No olviden realizar un test de los ser-vicios con un

#ps –a

Ó

#netstat –a

TCP wrappers

¿Qué cosa tan rara es esta?Expliquemos entonces; los TCPwrappers permi-

ten controlar el acceso y los servicios de red para diagnosticar los problemas y aplicar el correctivo necesario. Vienen del maravilloso mundo de *NIX, nacende la necesidaddemodificar el comporta-mientodelSistemaoperativosintenerquemodificarsu funcionamiento.

Bueno lo voy a explicar con plastilina con base en la redacción anterior sobre inetd( si no recuerdas vas a tener que devolverte a este punto inetd/xinetd)

Vamos con la AnalogíaMuchas personas van a nuestra oficina a buscar-

nos para diversos asuntos, en la puerta de nuestro edificio se encuentra un señor muy colaborador, altamente servicial diría YO (que a veces se creen dueños de los Edificios o Empresas) comúnmente llamado vigilante o portero. Este señor permite la entrada y flujo de personas en nuestra Empresa indicando donde quedan nuestras oficinas, una vez ingresa la persona que te busca por X ó Y motivos (posiblemente por esa platica que no le has paga-do!!) y se encuentra con la recepcionista o secretaria de tu oficina, la cual discreta y diplomáticamente nos avisara quien llego y como no tienes los $$$ para pagar, el paso siguiente será la negación, labor que se la encomendamos a nuestra secretaria para que finiquite la visita no deseada.

Ah vieron!!! que fácil era entenderlo, ahora un poco mas informático o Geeks como les gusta a Uds.

El mismo ejemploDesde nuestro computador enviamos un correo

por medio de un cliente de correo como Outlook, Eudora, etc. La cual realizara una conexión por el puerto 110 al servidor, una conexión POP.

Este a su vez jugando un papel importante nuestro amigo (El señor Portero) inetd (espero que lo hayan leído), le dirá al Servidor que servicio debe utilizarse y responder a las conexiones que demonio y que

Page 37: Ezine #2 Comunidad DragonJAR

37

puerto debe responder. Entonces es aquí en donde entra en acción nuestro gran aliado el señor TCP Wrapper (Secretaria) Filtrando los paquetes IP, que conexiones puedan ser aceptadas o rechazadas dependiendo de su identidad y origen.

¡!!Hombre creo que más claro que lo que canta un gallo no se puede. Como les dije con plastilina!

A continuación solo descárgalo de aquí:f tp : / / f tp .porcup ine.org /pub/secur i ty / tcp_

wrappers_7.6.tar.gzLo descomprimes, #gunzip -c tcp_wrappers_7.6.tar.gz | tar xf ó# gunzip tcp_wrappers_7.6.tar.gzó# tar xvf tcp_wrappers_7.6.t

Luego:#make linux

Su resultado dejando como resultado cinco bina-rios

? tcpd. Es el demonio del TCP-Wrappers. ? tcpdmatch. Predice como el tcpd manejaría una

peticiónenespecífico.?tcpdchk.Verificalasreglasdecontroldeacceso

contenidas en los archivos /etc/hosts.allow y /etc/hosts.deny. ?safe-finger.Versióndefingerparaimplementar

elfingerreversivo.? 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#mvtcpdtcpdmatchtcpdchktry_fromsafe_finger/usr/sbin

Modificarel#vim /etc/inetd.confYaquímodificartodoslosserviciosquedeseamos

proteger por tcpd. Asi:pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3dimap stream tcp nowait root /usr/sbin/tcpd imapdY#vim /etc/syslog.conf

En donde agregaremos la siguiente línealocal0.info /usr/local/adm/tcpd.log

Para mantener un log de las conexiones hechas por tcpd

Este archivo de registro lo podemos crear con touch.

#touch /usr/local/adm/tcpd.log

El demonio debe ser reiniciado, pararlo y reiniciar-lo, como explique anteriormente. O también con:$ ps -A | grep ‘xinetd\|inetd’

2106 ? 00:00:00 xinetd

# kill -HUP 2106

Firewalls

Nuevamente teniendo en cuenta el lector, vamos a describir que es un Firewall para los Newbies como YO.

Sigo….Un Firewall (FW) es un componente de Hardware

(generalmente Appliance) o de Software que permite filtrareltraficoentreInternet,ExtranetconlaIntraneto red Empresarial.

La analogía más practica:Es el muro que se crea para evitar el paso de fuego

entre diferentes Bodegas para evitar la expansión del fuego y este no sea más perjudicial.

Así como ese muro impide la propagación del fuego para evitar mas tragedias, el FW en computación evita que los males de Internet (Dialers, DoS, Virus, Troyanos, Hijackers, Malware, Spyware, Accesos no autorizados, etc) y del Exterior afecte nuestra plataforma informática. Si desean mas información los invito a leer RFC 2979Paraterminarestedefinición,hablemosdelos

distintos tipos de FW, para esto voy a citar a uno de los que más saben en Internet , el señor Wi-kipedia ( Y eso que es relativamente nuevo, pero sabeeeeeee) :

Tipos de cortafuegosCortafuegos de capa de red o de filtrado de

paquetes. Funciona a nivel de red (nivel 3) de la pila de pro-

tocolos(TCP/IP)comofiltrodepaquetesIP.Aestenivelsepueden realizarfiltrossegún losdistintoscampos de los paquetes IP: dirección IP origen, dirección IP destino. A menudo en este tipo de cortafuegossepermitenfiltradossegúncamposde

Page 38: Ezine #2 Comunidad DragonJAR

38

nivel de transporte (nivel 4) como el puerto origen y destino, o a nivel de enlace de datos (nivel 2) como la dirección MAC.

Cortafuegos de capa de aplicación Trabaja en el nivel de aplicación (nivel 7) de manera

quelosfiltradossepuedenadaptaracaracterísticaspropias de los protocolos de este nivel. Por ejem-plo,sisetratadetráficoHTTPsepuedenrealizarfiltradossegúnlaURLalaqueseestáintentandoacceder.Uncortafuegosanivel7detráficoHTTP,esnormalmente denominado Proxy y permite que los computadores de una organización entren a internet de una forma controlada.

Cortafuegos personalesEs un caso particular de cortafuegos que se ins-

talacomosoftwareenuncomputador,filtrandolascomunicaciones entre dicho computador y el resto de la red y viceversa

Pero tengamos en cuenta que no es la Pa-nacea, es solo un elemento del esquema de seguridad. Para visualizar, veamos el Modelo de Defensa en Profundidad:

En resumen nunca dependamos de un solo ele-mento, en lo posible implementar un modelo de capas de seguridad como el anterior.

Si deseas un poco más de info de los FW, te invito a leer:

http://www.ietf.org/rfc/rfc2979.txtComparativas de firewallspersonales

Pero veamos el Hardening a los FWLos FW Pueden constituirse como la primera línea

de defensa en su red, generalmente se ubican sobre un servidor de seguridad, son amenudo basados en Hardware con dispositivos de Checkpoint, Cisco, SonicWall, SmootWall,etc. Complementandolos

con FW de Hosts como son iptables, Keyros, Zona Alarm, en algunas circunstancias se aprovecha la integración de productos como ISA SERVER de Windows 2K.

Encontramos un sin número de soluciones, entre las cuales en Linux IPTABLES / IPCHAINS o inter-faces de la misma

1)Kmyfirewall.2) Easy Firewall Generator.3) Firewall Builder.4) Shorewall. 5) Guarddog.6) FireStarter. 7) Smoothwall. 8) IPCop.Para el ejemplo vamos a trabajar con NetFilter, sin

más rodeos:Para añadir una regla:# iptables -A INPUT -i eth0 -p tcp —dport 80 -d

192.168.0.1 -j ACCEPT

-A Adiciona una regla-i EspecíficalaInterfacedeRedquevaautilizar

para aplicar la regla-p EspecificaquevaafiltrarpaquetesTCP(Si

vaautilizarpaquetesUDPoICMPdebeespecificar-lo).Deigualformapodríaespecificarelprotocolopor el numero, como el 50 para la autenticación con IPSEC.

—dport Indica el puerto, en este caso el 80 paraeltráficoenlaWeb(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 es un ACCEPT (acepta solo si cumple la condición el paquete)

Se pueden aplicar otras condiciones como:# iptables -A INPUT -i eth0 -p tcp —dport 80 -d

192.168.0.1 -j DROP

En este caso si el paquete cumple la condición será Dropped (desechado)Paraañadirenuntráficoseguro:# iptables -A INPUT -i eth0 -p tcp —dport 443 -d

192.168.0.1 -j ACCEPT

Solorepasemoselsignificadodelosflags(ban-deras/opciones) anteriores con

un puerto https.

# iptables -A OUTPUT -o eth0 -p tcp —sport http -j ACCEPT# iptables -A OUTPUT -o eth0 -p tcp —sport https -j

ACCEPT

Aquí, estamos creando una regla para ambos http

Page 39: Ezine #2 Comunidad DragonJAR

39

yhttpsparapermitireltráficodeloshostsperonosepermitiráqueelServidorWebdevuelvatráficoalos hosts (de salida). Se tendrían que crear reglas adecudadas para el buen funcionamiento del Ser-vidorWebeneltraficodesalida.Unaobservaciónen esta regla, utilizamos –sport para indicar los dos puertos http y https.

Si no estás seguro que puertos tienes asignados puedes consultar el archivo:

#less /etc/services## Network services, Internet style## Note that it is presently the policy of IANA to as-

sign a single well-known# port number for both TCP and UDP; hence, most en-

tries here have two entries# even if the protocol doesn’t support UDP operations.# Updated from RFC 1340, «Assigned Numbers» (July

1992). Not all ports# are included, only the more common ones.## from: @(#)services 5.8 (Berkeley) 5/9/91# $Id: services.txt,v 1.1.1.1 2002-08-19 13:34:26

blueflux Exp $tcpmux 1/tcp # TCP port service

multiplexerecho 7/tcpecho 7/udpdiscard 9/tcp sink nulldiscard 9/udp sink nullsystat 11/tcp usersdaytime 13/tcpdaytime 13/udpnetstat 15/tcpqotd 17/tcp quotemsp 18/tcp # message send protocolmsp 18/udp # message send protocol

chargen 19/tcp ttytst sourcechargen 19/udp ttytst sourceftp-data 20/tcp # File Transfer [De-

fault Data]ftp-data 20/udp # File Transfer [De-

fault Data]ftp 21/tcp # File Transfer [Con-

trol]ftp 21/udp # File Transfer [Con-

trol]ssh 22/tcp # Secure Shell Loginssh 22/udp # Secure Shell Logintelnet 23/tcptelnet 23/udp # 24 - privatesmtp 25/tcp mail

Aunque recuerden la reserva que se debe tener sobre este archivo, como se ha explicado con los anteriores servicios. Lo más recomendable es:

# chown root:root /etc/services# chmod 0644 /etc/services

# chattr +i /etc/services

Esrecomendableefectuarunmapadeltraficodela Red para saber que reglas debe crear, consulta el

archivo /proc/sys/net/ipv4/ip_local_port_range este defineelpuertolocalqueseutilizaparaeltráficoTCP y UDP. El primer número es el primer puerto localparapermitireltráficoTCPyUDPenelservidor,la segunda es el último número de puerto locales Ej: «1024 4999». Una buena medida es cambiar los parámetros que tiene por defecto 32768-61000.

# echo «32768 61000» >/proc/sys/net/ipv4/ip_local_port_range

Se pueden adicionar al script /etc/rc.d/rc.local y en el archivo /etc/sysctl.conf, adicione:

# Allowed local port rangenet.ipv4.ip_local_port_range = 32768 61000

Para indicar varias reglas:

# iptables -I INPUT 1 -i eth0 -p tcp -j ACCEPT# iptables -I INPUT 2 -i eth0 -p tcp —dport 143 -j

DROP

LaprimerapermiteeltraficoTCPenlainterfaceeth0 y el 1 indica que es la primera regla, la segun-dafiltralospaquetesTCPdelpuerto143(IMAP)ye invalida los paquetes TCP (el 2 indica que es la segunda regla).

Ahora sí que dijeron, Ah! Ese Dino tan bruto ¿NO? No que va si le ponemos un poquito de sentido co-mún,nosdaremoscuentacomotodoeltráficoespermitido en la primera, asi que la segunda puede ser nula, la idea es esa organizar y aplicar lógica a losreglasconfiguremos.

Entonces si deseas listarlas:

# iptables -L INPUT -n —line-numbersChain INPUT (policy DROP)num target prot opt source destination1 ACCEPT tcp — 0.0.0.0/0 192.168.0.1 tcp dpt:80

2 ACCEPT tcp — 0.0.0.0/0 192.168.0.1 tcp dpt:443

Para remover una regla:

# iptables -D INPUT -i eth0 -p tcp —dport https -d

192.168.0.1 -j ACCEPT

Borrara la regla para el https.Puede borrar por el Número de regla:

# iptables -D INPUT 3

Sideseaborrarlastodassoloadicioneelflag(ban-dera/opción) –F

Page 40: Ezine #2 Comunidad DragonJAR

40

# iptables -F INPUT

O también:

# iptables -F# iptables -LChain INPUT (policy DROP)target prot opt source destinationChain FORWARD (policy DROP)target prot opt source destinationChain OUTPUT (policy DROP)target prot opt source destination

Sinoseespecificaelusodeunatabla,IPTABLEStomarapordefaultlatablafilter

# iptables -t nat -LChain PREROUTING (policy DROP)target prot opt source destinationChain POSTROUTING (policy DROP)target prot opt source destinationChain OUTPUT (policy DROP)target prot opt source destination

Cada regla tiene un contador. Para ver estos con-tadores, y un total de cada cadena cuando se lista todas sus normas con -V y – L# iptables -L -vChain INPUT (policy ACCEPT 25897 packets,

2300K bytes)pkts bytes target prot opt in out source

destination

LatablafilterConstrucción de reglas

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

salto>

Enelcasodelatablafilter:Nohacefaltaindicartabla(filterpordefecto)

Comando«Acadena«>Insertaralfinal«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

su Host, recuerden que existen más enfoques de seguridad a nivel perimetral de sus servidores, este sería el complemente en sus estaciones de trabajo (tema interesante DMZ e Iptables).

Bien, creo que hasta aquí llegaremos con el artí-culo, este ya se hizo muy extenso, solo explicando lo básico de los dos primeras Actividades (I,II) del tema de Hardening, y como ya lo había mencionado, este espacio de conocimiento y entretenimiento no nosdarálosuficienteparatratareltema,porlotantono me resta mas si no agradecer por su atención y dedicación al leer estas pocas líneas de un tema tan fascinante pero a su vez tan complejo y extenso, ojalá sirva de ayuda o al menos motive para tomar conciencia de la necesidad de aplicar buenas prác-ticas de seguridad.

«La inseguridad no es más que el reflejo de tu Negligencia e Ignorancia, lo único seguro es que no hay nada seguro, solo mitigas el riesgo»

Con cariño,

Dino