Preguntas en entrevistas Java

Como ya sabéis no me gusta poner contenido que no haya sido escrito, desarrollado o al menos trabajado por mi, pero hoy vamos a hacer una excepción. Uno de los blogs que sigo es el de Java Code Geeks y hoy, ha publicado un interesante artículo con multitud de preguntas que te pueden aparecer en entrevista relacionadas con Java. No dejaría de ser otra recopilación de las que ya hay muchas, pero está en concreto me ha llamado mucho la atención porque muchas de las preguntas las reconozco de entrevistas que he ido haciendo en los últimos meses, cosa que no me había pasado con otras recopilaciones de este tipo. Por esto, porque considero que es una lista muy interesante y muy acertada, os dejo el enlace aquí para que podáis echarle un ojo. Me temo que está en el lenguaje de Shakespeare, pero incluso si vuestro nivel no es muy bueno, yo creo que seréis capaces de entenderlas.

Core Java Interview Questions

Espero que os sea de utilidad. Nos vemos.

Preguntas en entrevistas Java

Compilando libssh (Snow Leopard)

Hoy por una de esas me he visto obligado a instalar y compilar para mi Snow Leopard las librerías de “libssh” (no confundir con “libssh2”). Para mi sorpresa, o quizás no tan sorpresa a estas alturas, al lanzar la compilación daba un error en el código porque no encontraba una de las variables que utilizaba. Dicha variable era:

extern char **environ;

Buscando un poco en Google, he llegado a la conclusión de que esta variable no está disponible en sistemas MAC OS X, con lo cual me ha tocado hacerle un pequeño parche al código fuente para poder compilarlo.

El fichero que daba el error era: “libssh/socket.c“, donde podemos encontrar las dos siguientes lineas:

extern char **environ;

execve(args[0],(char * const *)args,(char * const *)environ);

Lo que tenemos que hacer es sustituir ese parte del código por la siguiente:

//extern char **environ;

#include <ctr_externs.h>;

char **__hscore_environ(void) { return (*_NSGetEnviron()); }

//execve(args[0],(char * const *)args,(char * const *)environ);

execve(args[0],(char * const *)args,(char * const *)__hscore_environ());

Con esto podremos compilar e instalar perfectamente. Os lo dejo aquí por si alguien tiene el mismo problema, y para que engañarnos, por que a mi seguro que para la próxima vez se me ha olvidado.

Y como final una pequeña reflexión. ¿por qué siendo MAC OS X un sistema basado en UNIX, esto pasa tan a menudo? ¿No deberían intentar mantener un poco más la homogeneidad con los sistemas *Unix? De esta forma tendrían muchísimo más software a su disposición y nos harían la vida más fácil a algunos usuarios. Nos vemos.

Fuente: GHC

Compilando libssh (Snow Leopard)

Cambiar MAC (Mac OS X)

Hace ya tiempo escribí un post sobre como cambiar la MAC de una tarjeta en GNU/Linux, pero hoy he tenido la necesidad de hacerlo en Mac Os X, y sorpresa, a pesar de ser dos sistemas son *UNIX, las instrucciones que tanto me sirvieron anteriormente aquí no me han servido para nada.

Tras investigar un ratito, he encontrado una instrucción que si que me ha servido, así que, para que no se me vuelva a olvidar y por si a alguien le sirve aquí la dejo:

sudo ifconfig en1 lladdr 00:00:00:00:00:00

Donde:

en1: Es la interfaz a la que queremos cambiar la dirección MAC.

Espero que a alguno de vosotros os sirva igual que me ha servido a mi. Nos vemos

Cambiar MAC (Mac OS X)

MyFaces – Trinidad

Hola a todos.

Tras un tiempo sin escribir en el blog, y aunque si que he estado pendiente de los comentarios y he respondido todos aquellos a los que mi humilde conocimiento me ha permitido, voy a retomar la costumbre de aprender cosillas por mi cuenta (no relacionadas exclusivamente con el trabajo) y de publicar en el blog otra vez.

Como aperitivo, hoy, os voy a dejar una especie de chuleta / manual de JSF, más en concreto, de MyFaces – Trinidad, que por motivos laborales, es una de las cosas en las que he estado perdido unos meses.

No penséis que es un manual extenso o concreto, es más bien una chuleta para tener a mano, recordar o conocer los que nos ofrece JSF (MyFaces – Trinidad) y unos cuantos ejemplo y trucos de como usarlos.

Para el que no sepa que es JSF, os dejo un par de enlaces:

Sin más, os dejo la chuleta / manual por si a alguien le es de utilidad: MyFaces – Trinidad

Como siempre, si tenéis dudas, comentarios o aportaciones, animaos y comentadlas.

Por último, me alegro de saludaros a todos de nuevo. Nos vemos

MyFaces – Trinidad

Desarrollos seguros

Por motivos que no viene al caso, últimamente mi carrera profesional se ha encauzado más por la parte de desarrollo que por la de seguridad, pero desde luego ambas cosas no son excluyentes. Todo desarrollo, además de muchas otras características, debe ser seguro. Para esto se han establecido estándares de seguridad para el desarrollo. El más aceptado de estos estándares es el Common Criteria (CC). En el se han definido 7 niveles con el que medir la seguridad de las aplicaciones. Estos niveles se conocen como Evaluation Assurance Levels (EAL) y con una numeración del 1 al 7, siendo el nivel 1 el más bajo y el 7 el más alto.

Por hacernos una idea de la dimensión de los niveles, el nivel 4 sería el más adecuado para un software comercial, a pesar de esto, muy pocos sistemas cumplen este nivel. A continuación, vamos a comentar por encima los distintos niveles.

EAL 1: Para cumplirlo solo se requiere que el sistema funcione, pero en el no se ha aplicado ningún tipo de seguridad por considerarse que el software no tiene riesgo de amenaza.

EAL 2: El producto software desarrollado exige buenas prácticas de diseño, pero la seguridad no se ha considerado prioritaria.

EAL 3: Una aplicación a la que se le han aplicado mecanismos de seguridad para alcanza un nivel de seguridad moderado.

EAL 4: Para alcanzar este nivel, se requiere ya un estudio detallado de la seguridad y métodos de ingeniería de seguridad.

EAL 5: Se buscan altos niveles de seguridad. El equipo de ingeniería de seguridad debe trabajar desde el primer día con el de desarrollo. Para alcanzar este nivel se tienen que haber tenido en cuenta condiciones especiales sobre la seguridad no solo las básicas habituales.

EAL 6: Proporciona elevados mecanismos de protección contra riesgos importantes y tiene una amplia seguridad frente a ataques de penetración.

EAL 7: Este es el último nivel, y se debe poseer un nivel extraordinariamente alto de seguridad. Para alcanzar este nivel hacen falta pruebas, medidas y un test de seguridad de la aplicación realizado por terceros.

El post solo pretende ser una pequeñísima introducción a los diferentes niveles, ya que entrar en profundidad en uno o todos los niveles requeriría de una extensión muy elevada. Espero que os sirva, al menos, para conocer la existencia de los niveles y como son cada uno de ellos. Nos vemos.

Desarrollos seguros

Cambiando nuestra MAC

Como la mayoría sabréis, las tarjetas de red tienen asociado un número MAC que las identifica, y que a su vez identifica la máquina en la que está. Sino cambiamos la tarjeta de ordenador claro.

Una de las ventajas de existir este número es que podemos hacer filtrados en nuestra red con su ayuda, ya que nosotros conocemos esos números y el resto de gente a priori no. Por ejemplo, aunque siempre acompañado de otros métodos, podemos restringir la función de nuestro servidor DHCP a la hora de suministrar IP’s. Si no se reconoce la MAC, no se le da IP o, en entornos donde hace falta que las máquinas mantengan una misma IP, se les puede asignar estas en función de su MAC.

Ahora seguro que os estaréis preguntando – y si es tan útil, ¿para que quiero cambiarla? Os voy a proponer un par de ideas y a partir de aquí ya lo dejaré a vuestra imaginación.

Pongamos por ejemplo que un día tenemos que enganchar nuestro portátil a una red donde solamente se dan IP’s a unas MAC concretas. Al enchufar el portátil no obtendríamos IP con lo cual no podríamos conectar. Una forma de poder hacer esto sería asignando al portátil una MAC que no este en uso en ese momento y que sepamos que pertenece a la red.

Otro ejemplo sería, por ejemplo, el tener una máquina para gestionar las reglas de un Firewall, de modo que solo desde esa máquina con una MAC concreta podamos modificar dichas reglas. Ahora bien, esa máquina, por lo que se deja de estar operativa, con lo cual dejaríamos de poder gestionar nuestro Firewall. La solución, sería tan fácil como modificar la MAC de otro máquina para poder administrar desde ella. Para mas ideas como ya he dicho, os lo dejo a vosotros.

Vamos a ello. El primer método que vamos a ver es para hacerlo manualmente y que el resultado dure durante la sesión. Como siempre, yo lo voy a hacer sobre Ubuntu, aunque esto es aplicable a todos los sistemas adaptando el procedimiento al sistema sobre el que queramos realizar el cambio.

¿Cuál es mi MAC? Para averiguarla bastará con ejecutar la instrucción:

# ifconfig

La cual nos mostrará algo como esto:

Link encap:Ethernet  direcciónHW 12:34:56:78:90:AB

La cadena con el siguiente formato es la dirección MAC: xx:xx:xx:xx:xx:xx

Para cambiarla, lo primero que tendremos que hacer es tirar abajo el interfaz de red del cual queremos cambiar la dirección MAC, en nuestro caso “eth0”:

# ifconfig eth0 down

Tras esto asignaremos una nueva dirección MAC a este interfaz:

# ifconfig eth0 hw ether 00:00:00:00:00:00

Y volveremos a levantar nuestro interfaz:

# infonfig eth0 up

Con esto tendremos nuestra dirección MAC cambiada.

Recordemos algo muy importante, las direcciones MAC siguen un sistema de numeración hexadecimal. Ya sabéis de [0 – F]

Pero claro, si queremos que este cambio permanezca en el sistema a pesar de reiniciar o apagar la máquina, tendremos que escribir esto en algún sitio. Y ese sitio es el fichero /etc/init.d/bootmisc.sh.

En el, tras abrirlo, escribiremos en el final de este, las tres instrucciones que hemos ejecutado manualmente antes. De esta forma el cambio será permanente mientras no las borremos del fichero.

Con esto tendremos una dirección MAC a nuestro gusto. Por Internet podéis buscar direcciones de MAC más o menos reales, ya que los primeros números de las tarjetas identifican el vendedor y está información está al alcance de todo el mundo.

Así como apunte rápido y para aquellos que utilizáis máquinas virtuales, no es necesario que hagáis nada de lo anterior, ya que en la configuración de estas, normalmente da la opción de asignar una dirección MAC.

Como siempre, animaros a preguntar y comentar si tenéis alguna duda, o por ejemplo, si se os ocurren más caso para los cuales sería interesante cambiar la dirección MAC. Eso si, legales por favor. Nos vemos.

Cambiando nuestra MAC

How to: Citrix + Exceed

Saliéndonos un poco de la temática de seguridad hoy vamos a explicar como conectar de forma remota a un ordenador desde dentro de un entorno Citrix. Se que es algo muy específico y que probablemente a pocos os sirva, pero como el otro día me toco investigarlo y documentarlo, voy a aprovechar para colgarlo en el blog y no perderlo. Y ¿quién sabe?, quizás le sirva a alguien.

Evidentemente necesitaremos varias cosas para ponernos a ello:

–       Un entorno Citrix al que tengamos acceso y que tenga Exceed instalado.

–       Putty o similar para realizar conexiones SSH. También instalado en el entorno Citrix.

–       Una máquina a la que acceder adecuadamente configurada.

Pues nada, vamos manos a la obra.

Paso 0: El evidente, acceder a nuestro entorno Citrix. Ya sabéis, un usuario, un password y el número generado de forma aleatoria por el cacharrito de turno asociado al entorno.

Paso 1: Inicializar la herramienta Exceed.

Para esto haremos click en el icono de la herramienta nombrado con el nombre “Exceed” alojado en el set de herramientas de Exceed dentro del entorno Citrix.

Paso 2: Acceder al panel de configuración de Exceed.

Para ello haremos click con el botón derecho sobre la aplicación Exceed que se habrá alojado en nuestra barra de tareas y nos dirigiremos a:

Tools -> Configuration…”

Paso 3: Configurar Exceed. La configuración descrita a continuación es solo orientativa, ya que se podrán adaptar a las necesidades o comodidades del usuario la mayoría de los puntos nombrados. Solo aquellos que se marcaran como necesarios son completamente imprescindibles.

–       Categoría Mouse, Keyboard, and Other Input Devices:

  • Pestaña Keyboard Input:
    • Seleccionar el tipo de teclado Primary y Alternate. Español en nuestro caso.
    • Seleccionar la opción Allow Clients to Modify Keyboard Mapping.
    • Alt Key -> Left To Windows, Right to X.
    • Windows Key -> To Windows.
    • Shift Key -> Map Both Left and Right
    • Seleccionar la opción Use Keyboard Hook
    • Deseleccionar Accept Altered Scancode
  • Pestaña Mouse Input:
    • Dejar como esta. Si se desea se puede configurar la rueda del ratón al gusto del usuario, pero cubrir esto no es el fin de este post.

–       Categoría Network and Communication:

  • Pestaña Communication:
    • Seleccionar Mode -> Passive. Esta es una de las opciones obligatorias de configuración que hay que respetar.
  • Pestaña Transports:
    • No son necesarios cambios en ella.

–       Categoria Security, Access, Control, and System Administrator:

  • Pestaña Security:
    • Seleccionar Enable (no host Access).
    • Seleccionar Allow Clients to Modify Host Access Control List.
    • Deseleccionar Enable Users Access Control List.
    • Dejar como está la sección X Web.
    • Deseleccionar Warn X Client Connection Attempt. Esta es una de las opciones obligatorias de configuración que hay que respetar en caso de conectar con un túnel SSH.
  • Pestaña System Administrator:
    • Dejarla como esta.

–       Categoría Xserver Protocol:

  • Pestaña Protocol:
    • Seleccionar Pad Depth 1 Pixmaps to 32 bits.
    • Deseleccionar el resto de opciones.
  • Pestaña Extensions:
    • Dejarla como está

–       Categoría Display and Video:

  • Pestaña Screen 0:
    • Seleccionar Fit Window To Display.
    • Seleccionar Use All Monitor(s)
    • Asignar Window Mode -> Multiple. Esta es una de las opciones obligatorias de configuración.
    • Asignar Server Visual -> Auto Select.
    • Seleccionar Padding.
    • Aginar Speed -> Slow
    • Asignar Amount -> 25.
    • Valores Root Size: Width = 0, Height = 0.
    • Deseleccionar Auto Load XRDB.
    • Asignar Window Manager -> Default to Native.
    • Deseleccionar Use Native WM for Embedded Clients.
    • Seleccionar Fit Window To Display.
    • Seleccionar Cascade Windows.
  • Pestaña Common Settings:
    • Asignar Native Windows Manager Focus Policy -> Click.
    • Seleccionar Enable Server Reset.
    • Seleccionar Exit on Server Reset.
    • Deseleccionar Close Warning on Exit.
    • Deseleccionar Hide X Server Menu Items.
    • Deseleccionar Do Not Prompt for Multiple Sessions.
    • Deseleccionar Run Multiple Sessions.
  • Pestaña Monitor Info:
    • Dejarla como está
  • Pestaña Video:
    • Seleccionar  Compute Based On Monitor DPI (dots per inch) con el valor adecuado.
    • Dejar el resto como está.

–       Categoría Copy, and Paste, and X Selection:

  • Asignar  X Selection Associated with Edit Operations -> PRIMARY.
  • Seleccionar  AutoCopy X Selection.
  • Deseleccionar  Copy On Focus Loss.
  • Seleccionar  AutoPaste To X Selection.
  • Asignar  Grab Clipboard Retry TimeAuto Paste Delay Time -> 200.

–       Categoría Font Management:

  • Pestaña Font:
    • Dejarla como está o añadir fuentes en casos de ser estas necesarias.
    • Asignar en Font Defaults: Text -> fixed, Cursor -> cursor.
  • Pestaña Advanced Settings:
    • Deseleccionar Sinchronous Operations.
    • Asignar en Timeouts: Read -> 30, Write -> 5.
    • Deseleccionar Enable Auto Reopen.
    • Seleccionar Enable Cache.
    • Seleccionar Local Fonts First.
    • Asignar  Default Resolution for scalable fonts -> 75.
    • Deseleccionar  Automatic Font Substitution.
    • Seleccionar  Optimize for Java VM.

–       Categoría Other Server Settings:

  • Pestaña Performance:
    • No son necesarios cambios.
  • Pestaña  Troubleshooting:
    • Deseleccionar Enable Log.
  • Pestaña  Power Management:
    • Seleccionar  Refuse Sleep.
    • Seleccionar  Prevent display from being shut down.
    • Deseleccionar  Server reset after critical sleep.

Paso 4: Reiniciar el servidor Exceed con la nueva configuración.

Para ello haremos click con el botón derecho sobre la aplicación Exceed alojada en la barra de tareas y nos dirigiremos a:

Tools -> Server Reset…

Además nos fijaremos en el puerto en el que Exceed está esperando conexiones. Podremos consultar este número en la barra de tareas, teniendo el formato siguiente: Exceed (:x.x). Donde el primer valor de “x” será el puerto de conexión.

Paso 5: Configuración SSH con Putty.

–       Pestaña Session:

  • Host Name: xxx.xxx.xxx.xxx
  • Connection Type: SSH

–       Pestaña Connection -> SSH -> X11:

  • Seleccionar Enable X11 Forwarding.
  • Asignar X Display Location -> localhost:x Donde “x” es el valor del puerto de conexión del Exceed consultado en el paso anterior.

–       Pestaña Connection -> SSH -> Tunnels: No es necesario para la conexión, pero en la mayoría de manuales consultados se recomienda.

  • Asignar Source port -> 2222.
  • Asignar Destination -> xxx.xxx.xxx.xxx:22
  • Seleccionar Local.
  • Click en Add.

Paso 6: Conectar con Putty

–       Click en Open.

–       Introducir el usuario y contraseña correspondientes tras la conexión.

Paso 7: Probar el sistema.

A través de la consola facilitada por la conexión SSH en la máquina remota ejecutar alguna aplicación gráfica para comprobar el correcto funcionamiento del proceso realizado.

En nuestro caso se ha probado con: xclock &. Tras lo que aparece el  reloj analógico del sistema remoto en nuestra pantalla.

Y con esto habremos conseguido conectar a nuestro sistema remoto y ver en nuestra pantalla aquellas aplicaciones gráficas que ejecutemos en ella.

Espero que le sirva a alguien a demás de a mi. Y como siempre si tenéis ideas, sugerencias o comentarios animaros y ponedlos. Nos vemos.

How to: Citrix + Exceed

Backtrakizando Ubuntu

A lo largo de la vida del blog hemos ido viendo el funcionamiento de algunas herramientas de seguridad que instalábamos con mucha facilidad a través de nuestro gestor de paquetes. Herramientas como Nmap, Nessus, hping3, etc… Pero llega un punto en el que empezamos a buscar herramientas mucho más especificas y de uso no tan común, y estas no están disponibles en los repositorios.

La primera solución para tenerlas a nuestra disposición sería descargarse el código fuente, compilarlas e instalarlas en nuestros sistemas, lo cual pues no siempre funciona a la primera.

Otra solución fácil es buscar estos paquetes. Alguna vez hemos hablado en el blog de distribuciones de seguridad, una de ellas era Backtrack. La última versión de esta fantástica distribución de seguridad esta basada en Ubuntu, y por lo tanto, la gran cantidad de herramientas que posee compiladas y en forma de paquetes instalable es perfectamente compatible con nuestra distribución de Ubuntu. Así que para disponer de este gran abanico de herramientas vamos a añadir su fuente a nuestros repositorios.

En primer lugar editaremos el fichero /etc/apt/sources.list:

sudo vim /etc/apt/sources.list

En segundo lugar añadiremos la dirección del repositorio de Blacktrack al final de fichero:

deb http://repo.offensive-security.com/dist/bt4 binary/

Cerramos nuestro editor y añadimos las claves para que no nos de ningún error al actualizar:

gpg –keyserver keyserver.ubuntu.com –recv 720DB78AC5717CD1

gpg -armor –export 720DB78AC5717CD1 | sudo apt-key add –

Finalmente actualizamos nuestro gestor de paquetes y, a partir de aquí, contaremos con un montón de nuevas e interesantes herramientas a nuestro alcance.

Si queréis hacer este tipo de experimentos de fundir varias distribuciones en una sola, os recomiendo este par de artículos del blog de Security By Default:

1 – Armándonos para el ataque!! (1 de 2)

2 – Armándonos para el ataque!! (2 de 2)

Bueno, os animo a que lo intentéis y comentéis los resultados. Yo por mi parte, tengo en estos momentos Ubuntu 9.04 ya que no me termina de convencer aún la 9.10 y me dio algunos problemas con la red como ya comenté. Si alguien lo prueba con la 9.10 que comente si todo le ha ido bien. Nos vemos.

Backtrakizando Ubuntu

Ubuntu (9.10) solo resuelve 1.0.0.0

Como recordaréis alguno quizás, hace un par de años escribí este post sobre problemas de conectividad en Ubuntu, en concreto estaban relacionados con la resolución de direcciones por parte de los DNS. Pues bien, tras actualizar a la última versión de Ubuntu, la 9.10, me ha vuelto a suceder lo mismo. Cualquier intento de conexión efectuado por parte del sistema o sus aplicaciones, exceptuando la herramienta ping, se resuelve con la dirección 1.0.0.0 y por supuesto no consigue efectuar la conexión.

Habiéndome pasado esto ya anteriormente, mi primera aproximación para resolver el problema fue la encontrada hace dos años, desactivar el soporte para IPv6 y cruzar los dedos para que funcionara. Pero, no lo hizo, o al menos no totalmente. Conseguí que Firefox tuviera conexión, pero las herramientas de consola, por ejemplo, no. Así que investigando un poco más, he llegado a una solución, que de momento, va perfectamente y me permite conectarme con todas las herramientas instaladas hasta el momento en mi sistema.

Para empezar, decir que he partido de este post en los foros de Ubuntu que en muchas ocasiones son una gran fuente de saber, para el que no los conozca, los recomiendo. Eso si, yo para solucionar mi problema, solo he tenido que realizar dos pasos y no todos los que se especifican en el post. Así que, para el que tenga el mismo problema y le pueda servir, y para que engañarnos, para que no se me olvide a mi, aquí os comento como hacerlo.

Paso 1:

Modificar el fichero “/etc/dhcp3/dhclient.conf” y añadir lo siguiente:

prepend domain-name-servers DNS1, DNS2;

Donde DNS1 y DNS2 son dos DNS escogidos por mi de la gran cantidad existe, ya sean de telefónica, terra, jazztel, etc…

Paso 2:

Modificar el fichero “/etc/resolv.conf” y añadir lo siguiente antes de la entrada ya existente que hará referencia a vuestro gateway, la dirección del router normalmente:

nameserver DNS1

nameserver DNS2

Donde DNS1 y DNS2 coinciden con las del paso anterior.

Tras esto solo tendréis que reiniciar y el sistema ya os resolverá las direcciones correctamente.

Espero que si alguien tiene el mismo problema le sirva, y que si alguien tiene alguna otra solución la comente. Por cierto, en Debian 5.0.3 también me pasaba lo mismo. Nos vemos.

Ubuntu (9.10) solo resuelve 1.0.0.0

Quagga – Enlaces interesante

Para el que no lo sepa Quagga es una herramienta de software libre que permite transformar nuestro sistema Linux en un enrutador de paquetes, es decir, en una especie de router. Como navegando por ahí he encontrado un par de cosillas interesantes, para que estén al alcance de todos y, para que nos vamos a engañar, para que no se me olviden a mi he decidido ponerlos en una pequeña entrada en el blog.

En primer lugar, la página oficial de Quagga.

En segundo lugar, un post donde se explica como instalarlo en Ubuntu.

Y por último un manual que tiene muy buena pinta alojado en bubok, pero que tiene permitida su descarga gratuita. Para el que no sepa que es bubok, le recomiendo que le eche un ojo ya que es un proyecto curioso.

Nos vemos próximamente.

Quagga – Enlaces interesante