23 de febrero de 2012

Jornada de Calidad y fiabilidad en los servicios de telefonía de hoy

Esta tarde he asistido, en el Col·legi d'Enginyers Industrials de Catalunya (Colegio de Ingenieros Industriales de Cataluña), a un jornada titulada "Calidad y fiabilidad en los servicios de  telefonía de hoy" con el objetivo de ver que podía substraer de todo esto y ver si me servirá para una ponencia que es posiblemente daré en mayo, en el mismo colegio, sobre calidad en las TI, aunque el objetivo es que vaya más bien centrada en ISO 27000.

Al margen de si me va ser útil o no para preparar mi posible ponencia, la jornada ha sido amena y entretenida, además de haberme provocada la reflexión sobre algunos puntos que no me había planteado.

Los temas tratados sobre la calidad y fiabilidad se han centrado desde el punto de vista técnico (al nivel alto), y de los retos que se plantean para mejorar en estos dos factores, que han ido desde la saturación de estas redes debido a todos los servicios que se están ejecutando hoy en día y que han evolucionado más rápido que el despliegue de la tecnología necesaria para soportarlos hasta como hacer que estas infraestructuras de comunicación sean capaces de continuar funcionando después de ciertos desastres naturales, poniendo como ejemplo del desastre natura que ocurrió en Japón el año pasado.

La mesa de debate que ha estado compuesta por:
  1. Ferran Amago i Jordi López, Col·legis Enginyers de Telecomunicacions.
  2. Antoni Elias, ETSETB-UPC.
  3. Josep Mª Rabés, Orange.
  4. Xavier Casajoana, VozTelecom.
  5. Javier Ruiz, Alcatel-Lucent.
  6. Gabriel Treiban, Qualcomm

Desde mi perfil profesional (Ingeniero Informático) puedo decir que la mesa se ha animado mucho cuando Antoni Elias ha empezado a decir que "los informáticos están causando el CAOS en estás redes" desarrollando aplicaciones que se han desarrollado para funcionar sobre estas redes (podríamos centrarlo en las famosas Apps para smartphones) al no garantizar ninguna calidad, añadiendo que "la informática es así que no existe un proceso ingenieril como tal y que por lo tanto no se garantiza la calidad de lo que se hace"; en esos momentos, yo que debía ser uno de los pocos (no sé si el único) ingenieros informáticos del público he empezado a sacar humo por la nariz (desde el respeto de la opinión de cada uno).

Es molesto que como muchos ingenieros informáticos luchamos, y con consecuencias, por hacer la cosas bien hechas y con calidad y como otros tiran eso por el suelo optando por descartar tus propuestas por otras mucho más económicas, pero con la consecuencia que no deja de ser una autentica basura porque no se ha pensado en nada y lo único que se ha hecho es poner los ladrillos como se ha podido. Algo que si quiero indicar sobre estas últimas palabras, es que no quiero que se interprete, aunque yo sea ingeniero, que solo un ingeniero informático puede hacer las cosas bien, porque conozco gente muy hábil y con un nivel de inteligencia elevado a base de su esfuerzo ha aprendido de manera autodidacta lo que muchos no han aprendido estudiando la Ingeniería Informática, pero realmente esto no es una cosa intrínseca de la informática, es algo que se da en todo, el hecho de tener un título no es una garantía del 100% segura que esa persona sea competente en esa área, al final el más competente es quien hace algo porque realmente le gusta y lo lleva en el interior, haciendo que el fruto de su trabajo sea catalogada con un nivel alto de profesionalidad.

Luego Antoni, también se ha metido con los financieros, alegando que están a la cabeza de empresas tecnológicas, y que como solo miran la pasta, así de bien van la calidad de los servicios, porque se prescinde de las buenas soluciones frente a las de bastante peor calidad por simples aspectos económicos; en fin aquí no voy a salir en defensa de los financieros, pero en gran parte creo en lo que dice, pero no creo que el problema sean ellos sino que se les cede el control total cuando lo que tendría que ser es un equipo multidisciplinar, que es lo que muchos se jactan de predicar y muchos de ellos directivos de este tipo.

Al final mis humos se han evadido cuando en el turno de Xavier Casajoana (Ingeniero Informática) ha salido a la defensa con argumentos muy buenos sobre la existencia de estos "servicios gratuitos" y que no solo se les puede atribuir a éstas el colapso de estas infraestructuras.

También me gustaría resaltar la intervención de Gabriel Treiban por exponer términos como OTT (Over The Top) para referirse a las aplicaciones, con el significado de que son realizado por terceros y que funciona encima de todo lo que hace funcionar esto y que desde el punto de vista de chip que es lo que hace Qualcomm, es complicado llegar a controlar el comportamiento de éstas, si lo vemos desde el punto de vista de quien ejecuta las instrucciones, que son los chips. Gabriel también ha puesto sobre la mesa el compromiso Coste-Tiempo-Calidad y como de estos tres factores siempre tienes que escoger dos, aspecto que realmente es para que cada uno haga su reflexión.

Después de terminar las intervenciones de los interventores ha habido rueda de preguntas y entre varias de estas se ha preguntado sobre que la calidad que el cliente percibe muchas veces es por otro aspecto, que es la atención al cliente que ofrecen los operadores; de esto no comento nada ya que muchas ya sabéis por donde van los tiros.

Para terminar solo quiero comentar un aspecto que me ha hecho gracia, porque hasta hace bien poco tenía que dar argumentos muy similares debido al sector de la empresa donde trabajaba y de lo mucho que se rajaba de la informática; lo que se ha dicho es que estas infraestructuras que dependen de servidores se dimensionan en función de un resultado estadístico y que es normal que cuando haya un demanda superior a lo que ha indicado la estadística el servicio no da la calidad que se esperaba pero que esto sucede igual, por ejemplo, con las autopistas.

Hasta la próxima enfermos.

15 de enero de 2012

Profundizando en PAM: Passwd sobre PAM (2/2)


conjuntoEntradas() {
 Profundizando en PAM: Passwd sobre PAM (1/2)
 Profundizando en PAM: Passwd sobre PAM (2/2)
}


La luz del final del túnel

Hace unas tres semanas tuve que cambiar el password porque estaba a punto de caducarse y como no el diablo que me perseguía apareció; harto de él y con ganas de enfrentarme a él, nos metimos en el lío.

Preguntando al Sr. Google, encontré un post de un tal Jason Howk, que habla de aplicar una política fuerte de contraseñas bajo Linux donde se explica cosas que ya sabía y otras no, concretamente lo del PAM; así que en el post encontré la madre del cordero.

PAM (Pluggable authentication module), permite definir un proceso de autenticación asociado a un ejecutable/proceso a modo de plugin, es decir que se integra sin la necesidad de alterar el binario o código fuente que lo requiere.

Así que una vez tener a partir de la definición como actúa y después de haber leído el post del tal Jason Howk entendí que con un fichero de configuración se puede definir el modo de autorización totalmente externa, llamando al servicio PAM, evitando que tengas que implementarlo, y encima puedes amoldarlo a tus necesidades, siempre y cuando haya un módulo PAM que haga lo que quieres, y sino lo hay, ya sabes que te toca implementarte uno.

Tirando del hilo

Cuando ya me había enterado que con un fichero de configuración de PAM se puede definir como se comporta el cambio del password de acceso al sistema a través comando passwd, concretamente el fichero /etc/pam.d/passwd, me fui a ver que había ahí dentro para ver porque sucedía lo de solicitar el cambio de password por duplicado y encontré esto

#%PAM-1.0
auth       sufficient   pam_rootok.so
auth       include system-auth
account    include system-auth
password   include system-auth

Como podemos ver en el fichero no se define nada, se delega cada grupo (auth, account, password), al fichero /etc/pam.d/system-auth, el cual tiene el siguiente contenido

auth  required pam_env.so 
auth  required pam_unix.so try_first_pass likeauth nullok 
auth  optional pam_permit.so
 
account  required pam_unix.so 
account  optional pam_permit.so
 
password required pam_cracklib.so difok=2 minlen=8 lcredit=1 ucredit=1 dcredit=2 ocredit=2 retry=3
password required pam_passwdqc.so min=8,8,8,8,8 retry=3
password required pam_unix.so try_first_pass use_authtok nullok sha512 shadow 
password optional pam_permit.so
 
session  required pam_limits.so 
session  required pam_env.so 
session  optional pam_mktemp.so
session  required pam_unix.so 
session  optional pam_permit.so

El fichero llama a varios modulos PAM en cada fase, y como no tenía ni idea que hacía cada uno de ellos me fui a buscar la documentación para tener una idea de lo que hace cada uno, bueno solo de los que he encontré de manera rápida, y poder definir el flujo de del servicio PAM que deseaba sobre el comando passwd.

Después de tener más o menos claro lo que hace cada módulo que aparecía en el fichero /etc/pam.d/system-auth, me puse a definir el flujo que deseaba sobre el comando passwd. No obstante, no alteré el fichero /etc/pam.d/system-auth, que es el que se referenciaba en todos los ficheros de configuración de los procesos/comandos que usan PAM, es decir como hacía el fichero /etc/pam.d/passwd, que delegaba la definición del flujo al fichero /etc/pam.d/system-auth, sino que modifque directamente el fichero /etc/pam.d/passwd.

El juicio final: definiendo el flujo PAM sobre passwd

Con la documentación y viendo el contenido del fichero /etc/pam.d/system-auth, me puse definir el contenido de /etc/pam.d/passwd, desde 0.
  1. Quité todos los modules pam_permit porque solo con ver en la documentación la siguiente frase “PAM module that always permit access” a uno ya le queda bastante claro que no puede ser muy bueno, no obstante, por sino queda claro, la propia documentación te le deja más claro con la siguiente frase “This module is very dangerous. It should be used with extreme caution”.
  2. Mantuve los módulos pam_env aunque actualmente en el fichero /etc/security/pam_env.conf está todo comentado, pero para un posible futuro puede ser útil que al meter configuraciones en él, se apliquen a las configuraciones existentes.
  3. De los dos módulos de verificación de complejidad de contraseña, pam_passwdqc y pam_cracklib, para esta situación, opté por utilizar el pam_passwdqc.
  4. Mantuve el módulo pam_unix, para sincronizarlo con el sistema tradicional de autenticación de los sistemas Unix, pero me cargué el parámetro nullok para dejar de permitir el acceso a usuarios sin password.
  5. Al igual que pensé con lo que hacer con el módulo pam_env, pensé lo mismo con pam_limits, es decir lo mantuve a pesar de que el directorio /etc/security/limits.d/ esté vacío, para si establezco configuraciones futuras dentro de éste.
  6. Mantuve pam_mktemp, a pesar de que en mi caso no se vaya a dar el caso de tener directorio home en sistemas de ficheros compartidos por la red, pero creí que no estaba de más mantenerlo.
El resultado de todo esto fue este

#%PAM-1.0

auth  required pam_env.so 
auth  required pam_unix.so try_first_pass nullok
 
account  required pam_unix.so 
 
password required pam_passwdqc.so min=disabled,disabled,15,10,8 passphrase=3 retry=3 ask_oldauthtok check_oldauthtok
password required pam_unix.so try_first_pass use_authtok sha512 shadow 
 
session  required pam_limits.so 
session  required pam_env.so 
session  optional pam_mktemp.so
session  required pam_unix.so

Final de la pesadilla

Y a aquí termino todo, una vez definido esto, comprobé que el comando passwd funcionaba correctamente y que solo me pedía el password (y claro está, su verificación) una sola vez.

Aunque seguro que está muy claro, menciono explicitamente el porque ahora no se pide el password más de una vez; básicamente es porque si nos fijamos en el fichero /etc/pam.d/system-auth, se realiza dos llamadas al proceso de verificación de complejidad, una sobre al módulo pam_cracklib y otra pam_passwdqc.

Para finalizar solo quiero decir que para realizar las distintas pruebas antes de definir por completo el flujo PAM sobre passwd cree un nuevo usuario en el sistema, para evitar que probando no me vaya a cargar el acceso de mi usuario habitual, y cuando todo funcionó, me lo cargué.


Hasta la próxima enfermos.

1 de enero de 2012

Profundizando en PAM: Passwd sobre PAM (1/2)


conjuntoEntradas() {
 Profundizando en PAM: Passwd sobre PAM (1/2)
 Profundizando en PAM: Passwd sobre PAM (2/2)
}

Introducción

En varias ocasiones leo o oigo hablar de algo que en un primer momento no conozco, en algunas de ellas tengo la oportunidad de preguntarle a la persona que está hablando que me explique lo que es, otras no tengo esa oportunidad y es cuando entonces decido preguntarle a Mr. Google, si puedo en ese mismo momento y sino en otro momento, es lo que tiene que siempre esté a tu disposición.
Una vez que he tenido una breve descripción de lo que es, entonces ya estoy en contexto, y normalmente (hablando de temas focalizados en el mundo de la informática) puedo comprender, lamentablemente no siempre al 100%, lo que estoy leyendo o lo que me están contando, si es el caso la problemática y la posible solución o mitigación.

Una de estas situaciones, aunque no recuerdo ni cuando ni donde, fue lo que me pasó con PAM; en ese momento me enteré de lo que era y luego cuando me hablado en otras ocasiones de algo donde PAM se siente involucrado no tengo problema en entender lo que me están contando.
Dejando de banda de como voy dando mis primeros pasos en este mundo tan amplio, me centro un poco en lo que es la entrada en sí.

Los inicios

Cuando decidí meter Gentoo en la mi máquina de casa, lo hice, intentando enterarme, de para que sirve y porque se hace todo lo que el handbook explica paso a paso, así consideré que era una manera de aprender aspectos que hasta el momento desconocía y añadir algún granito más al monto de conocimientos que voy almacenando sobre este enorme mundo; además, como el handbook en ciertos puntos deja abiertas indicaciones que se puede hacer esto y esto otro, en algunas de ellas me fui informando para hacerlo en un futuro o directamente me informé y me puse a configurarlo como me gustaría tenerlo, por eso que dicen de “no dejes para mañana lo que puedes hacer hoy”.

Una de esas cosas, fue securizar la configuración de acceso de las cuentas de usuarios del SO (/etc/login.defs), es decir meter un mínimo de valores en los parámetros necesarios para garantizar un password con longitud mínima y con una caducidad para, básicamente, auto-obligarme a cambiarlo de vez en cuando.

Con esto yo ya creía que todo estaba, de hecho en parte no porque no había puesto la mínima complejidad requerida, algo que me preocupaba poco porque by default me complico la vida en el momento de asignar passwords de acceso a cualquier sistema.

El día a día

Después de tener el sistema listo, el empacho me duró un tiempo, además empecé a liarme con otras cosas, demasiadas, que me ocuparon y me ocupan el tiempo para dedicarme, de nuevo, con mente y cuerpo a trabajar para el SO, eso sí, sin tener en cuenta las incidencias de actualizaciones, de despliegue de nuevos servicios/aplicaciones, etc., que me han ido surgiendo y algunas de ellas ya he ido comentando en alguna que otra entada de este blog.

Una de las cosas que me ha ido persiguiendo desde entonces es que cada vez que cambio el password, el SO me solicitaba dos veces, más bien dos pares de veces, el nuevo password.

Ejecución de passwd para cambiar el password de acceso al SO; se ve como se pregunta el password dos veces

¿El motivo? Ni idea, sino lo hubiese solucionado desde un primer momento; el hecho es que no me importaba mucho, ya que metiendo las dos veces el mismo se cambiaba y como estaba perezoso en googlear para buscar un poco para saber que puñetas pasaba, la cosa se ha quedado así hasta hace un par o tres de semanas.


Hasta la próxima enfermos.

3 de diciembre de 2011

Peleando con Gentoo y con el DNI-E (3/3)


conjuntoEntradas() {
  Peleando con Gentoo y con el DNI-E (1/3)
  Peleando con Gentoo y con el DNI-E (2/3)
  Peleando con Gentoo y con el DNI-E (3/3)
}

Configurando Firefox

La configuración de Firefox, es muy simple, pero a mí me toco el gordo; están fácil como ir al menú “editar → preferencias”, en el cuadro de dialogo ir a la sección “Avanzadas” y allí pulsar sobre el botón “Dispositivos de seguridad” y luego botón “cargar” y en el cuadro de dialogo poner el nombre que queramos para el módulo (¿DNI-E?) e indicar la ruta a la librería (*.so) del módulo PCKS#11, en este caso el del opensc-dnie.
Probar que funciona con una web que se solicité el DNI-E, como la de test que ofrecen la FNMT.

Porque me toco el gordo a mí, pues porqué por algún motivo el Firefox 6.0 que tenía instalado, el paquete binario, cuando lo indicaba que utilizase el módulo PKCS#11, decía algo así como que no era apropiado; me rompí la cabeza mirando, volviendo a mirar, probando, volviendo a probar y aunque se me había pasado por la cabeza ya en varias ocasiones quitar la instalación del paquete binario e instalar el paquete convencional (el que se descarga el código fuente y lo compila) no lo hice y continué probando hasta que ya estando muy cansado decidí hacer, como última prueba antes de abandonar, esa sustitución que acabo de mencionar y hecho y resuelto.

Me cagué en todo, pero realmente estaba contento porque por fin funcionaba sobre Firefox y podía hacer los putos trámites con la pu.. AEAT.

Cambiando el PIN con el PAD Virtual

Otra de las cosas que me interesaba hacer es cambiar el PIN del DNI-E que me habían dado cuando me lo dieron, ya que la secuencia aleatoria generada es poco probable que la pueda memorizar por mucho tiempo, ya que es algo que por ahora, tampoco uso muy a menudo; además el PIN proporcionado es una cadena de caracteres demasiado corta para mi gusto.

Para hacer este cambio, según explican en la Web del DNI-E, tienes dos opciones, o te vas a las comisarias a cambiarlo a través de las maquinitas que tienen allí o lo cambias con un aplicación que llaman PAD Virtual y que puedes descargar de aquí.

Como el tiempo no me sobra mucho, y al ver que estaba hecha en JAVA, di por supuesto que no me iba a llevar mucho trabajo utilizarla, ya que siendo multiplataforma con descargarlar y ejecutarla y seguir en siguiente, siguiente, siguiente.... finalizar podía hacer el cambio.

Pues bien, la descargué y la ejecuté, y se abrió el típico dialogo de siguiente, siguiente, siguiente... finalizar, no obstante el intento fue decepcionante, ya que llegué a un punto que apareció el siguiente error:

Mensaje de error en la aplicación PAD virtual al intentar utilizarla

Y verdaderamente después de buscar el error en Google, yo no he encontrado de manera rápida, cual puede ser el problema, así que decidí, en aquel momento, resignarme a cambiar el PIN desde mi máquina que funciona con Gentoo.


Hasta la proxima enfermos.

Peleando con Gentoo y con el DNI-E (2/3)


conjuntoEntradas() {
  Peleando con Gentoo y con el DNI-E (1/3)
  Peleando con Gentoo y con el DNI-E (2/3)
  Peleando con Gentoo y con el DNI-E (3/3)
}

El driver del DNI-E

Leyendo la información de la instalación de la wiki del CENATIC te indican instalar la versión de opensc generada para el DNI-E y antes de ellos desinstalar, si es el caso, la versión anterior o cualquier otro versión de opensc.

Como ya era de esperar, no obstante no costaba nada hacer una búsqueda, en el portage no hay ni rastro del DNI-E, si que lo hay de opensc, pero no nos sirve si queremos seguir las recomendaciones.

Así que me puse a seguir los pasos que se indican en la wiki del CENATIC y los que seguí al pie de la letra no comento, ya que e mejor consultarlos directamente.

En mi caso cuando llegué al paso de configurar la compilación, opté por cambiar las rutas en las que se instala la librería por defecto; lo hice así porque como me gusta complicarme la vida y no me gusta mucho donde se instalan por defecto las cosas que no instalo directamente del portage, ya que luego puedo tener un lió de sobreescritura de ficheros, colisiones entre versiones, etc., si un día optó por instalar lo mismo desde el portage, es decir que lo cambié y lo configuré para que se instalara en /opt y todo colgara de ese directorio.

bash$ ./configure –prefix=/opt/dnie


Después a compilar la aplicación con el clásico make y la instalación con make install y ha probar si todo este berenjenal funciona.
Algo que ya podíamos esperar es que si intentamos ejecutar un comando de las herramientas del opensc-dnie desde un terminal, es que el sistema no encontrara el comando, ya que como le he cambié la ruta por defecto, y no lo metí en las clásicas rutas donde Linux busca por defecto los ejecutables, el sistema no los encontraba.

bash$ dnie-tool -d -w
-bash: dnie-tool: command not found


Así que tenemos que tocar un poco las configuraciones del sistema para que éste busque los nuevos ejecutables que hay en esa nueva ruta.

Una opción para no tener que alterar las configuraciones del sistema es hacer un symlink a cada uno de los ejecutables en el directorio por defecto de la instalación, pero eso es una faena y si encima un día lo cambias de ubicación te toca reenlazarlos todos de nuevo; por este motivo opté por cambiar la configuración del sistema, además que para este tipo de cosas, Gentoo, ofrece una manera de poder añadir estos directorios sin la necesidad de modificar el fichero que configura el valor de la variable PATH a nivel general del sistema y tampoco tener que configurar el valor en un fichero en el HOME del usuario, algo que a mí no me mola mucho si son ejecutables que se han instalado a nivel global de la máquina, es decir no es una aplicación instalada en el propio HOME del usuario.

¿Como se hace esto? Pues bién, el handbook de Gentoo lo explica muy bien aquí en el apartado 5.b.

En mi caso lo que hice es crear un fichero, en /etc/env.d, llamado 999Opensc-dnie con el contenido siguiente:

PATH="/opt/dnie/bin" 
LDPATH="/opt/dnie/lib" 
MANPATH="/opt/dnie/share/man"

Luego ejecuté los comandos env-update && source /etc/profile que nos permiten releer las variables de entorno del sistema sin la necesidad de tener que reiniciar la sesión o el sistema, y como bien se refleja en el handbook:

Y de nuevo a probar.


bash$ dnie-tool -d -w
Waiting for a card to be inserted...
DNIe Number: NNNNNNNNX
SurName: FRAIXEDES
Name: IVAN SERGIO


Ahora sí, ya era hora.

En la siguiente entrada comentaré, la parte más sencilla, como integrar esto en Firefox para poder utilizarlo en el acceso a las Webs del estado Español que permiten hacer trámites con el DNI-E.

Hasta la proxima enfermos.

26 de noviembre de 2011

Peleando con Gentoo y con el DNI-E (1/3)


conjuntoEntradas() {
  Peleando con Gentoo y con el DNI-E (1/3)
  Peleando con Gentoo y con el DNI-E (2/3)
  Peleando con Gentoo y con el DNI-E (3/3)
}

Introducción

Hace un par de seman...., mmm mejor casi un par de meses, motivado porque me iba a tocar emplear una parte de mi tiempo a realizar unos cuantos tramites para la pu.. AEAT, me decidí a pasarme el fin de semana mirando de conseguir hacer funcionar el DNI-E sobre mi equipo de casa, el que tengo instalado un Gentoo, y sobre el cual he escrito, en varias ocasiones, entradas en este blog.

Era algo que tenía pendiente desde que hace poco más de un año, pasé del DNI “analógico” a el nuevo DNI-E, el “digital”; no obstante son de esas cosas que se van dejando pasar hasta que un día te se antoja meterte con el tema o simplemente llega el día que te toca meterte porque lo vas a tener que utilizar.

Desde hace algún tiempo, que ya se dio soporte para usar el DNI-E sobre el sistema operativo Linux, no obstante, todos sabemos que distribuciones de Linux hay unas cuantas, aunque muchas de ellas están basadas sobre una de las populares. En el caso de Gentoo, que es con la que yo lidié, no es tan es simple como tener una paquete en el portage para instalar de manera sencilla mediante emerge, ni tampoco te puedes descargar desde la web oficial un paquete de instalación como si que encuentras para las distribuciones Ubuntu, Debian, Fedora y OpenSuSE, bueno es lo que se tiene que sufrir por haberse liado la manta a la cabeza y haber decido utilizar un Gentoo.

Finalmente la cosa me llevo un rato de un sábado y otro de un domingo, entre directos, crochetes y uppercuts.

El lector de tarjetas

Lo primero, que uno tiene que hacer es comprarse un lector, algo que ya hice bastante tiempo, enchufarlo y hacer que funcione; esto, en mi caso, tenía que ser la parte fácil, ya que el fabricante del lector que compré (C3PO) indicaba que funciona sobre Linux, no obstante como antes, se indica que lo puedes instalar directamente desde el repositorio de las clásicas distribuciones, de las que no se encuentra Gentoo, y para el resto te deja del enlace al middleware necesario para que el SO hable con la smart card a través del lector; aunque finalmente, a los de Gentoo no nos hace falta descargarlo, para luego configurarlo, compilarlo, etc..., sino que lo emergimos del portage y así nos simplificamos la vida.
Buscamos los paquetes de PCSC disponibles:

bash$ emerge -s pcsc
* sys-apps/pcsc-lite
Latest version available: 1.6.6
Latest version installed: 1.6.6
Size of files: 468 kB
Homepage: http://pcsclite.alioth.debian.org/
Description: PC/SC Architecture smartcard middleware library
License: as-is

* sys-apps/pcsc-tools
Latest version available: 1.4.17-r2
Latest version installed: 1.4.17-r2
Size of files: 110 kB
Homepage: http://ludovic.rousseau.free.fr/softwares/pcsc-tools/
Description: PC/SC Architecture smartcard tools
License: GPL-2


Vemos que hay dos paquetes, uno que es propio middle ware PCSC y otro que son herramientas para operar con este; aunque parece que las herramientas no son estrictamente necesarias, por el espacio en disco que ocupan, yo preferí instalar los dos paquetes.

Una vez hecho esto, había que probar si el sistema ya reconoce y puede interactuar con el lector, así que vamos a arrancar el servicio:

$ /etc/init.d/pcscd start
* Caching service dependencies ... [ ok ]
* Starting pcscd ...
* WARNING: -c/--chuid is deprecated and will be removed in the future, please use -u/--user instead


Arrancar, arrancó pero ya hay algo que no mola: WARNING.
Vamos a mirar un poco más en detall a que se puede deber aunque parece que así que consulté el /var/log/messages:

Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 6 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 6 in /etc/etc-update.conf: mode 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 10 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 10 in /etc/etc-update.conf: clear_term 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 13 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 13 in /etc/etc-update.conf: eu_automerg 
e 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 16 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 16 in /etc/etc-update.conf: rm_opts 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 19 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 19 in /etc/etc-update.conf: mv_opts 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 22 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 22 in /etc/etc-update.conf: cp_opts 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 25 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 25 in /etc/etc-update.conf: pager 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 38 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 38 in /etc/etc-update.conf: diff_comman 
d 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 39 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 39 in /etc/etc-update.conf: using_editor 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 43 in /etc/etc-update.conf: = 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 43 in /etc/etc-update.conf: merge_command 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 2 in /etc/shells: /bin/bash 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 3 in /etc/shells: /bin/csh 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 4 in /etc/shells: /bin/esh 
ct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 5 in /etc/shells: /bin/fish 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 6 in /etc/shells: /bin/ksh 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 7 in /etc/shells: /bin/sash 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 8 in /etc/shells: /bin/sh 
Oct  8 21:39:37 IVAN pcscd: configfile.l:225:tok_error() tok_error: invalid value line 9 in /etc/shells: /bin/tcsh 
Oct  8 21:39:37 IVAN input in flex scanner failed 
Oct  8 21:39:37 IVAN pcscd: pcscdaemon.c:655:clean_temp_files() Cannot remove /var/run/pcscd/pcscd.comm: No such file or directory

Primera impresión: “Joder, ¿que pasa?, parece que hay errores en el fichero de configuración etc-update.conf, pero que coño tiene que ver ahora este fichero; bien calma vamos a analizar un poco con más detalle los mensajes del log”.

Después de leer con más tranquilidad la salida me di cuenta que cada mensaje, viniese lo que viniese luego (/etc/etc-update.conf, /etc/shells:/bin/bash, …), todo estaba introducido por “pcsc”, así que llegué a la tanta simple conclusión, que todo el problema debía venir del fichero de configuración, por lo tanto lo abrí y encontré esto:

#!/sbin/runscript
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/pcsc-lite/files/pcscd-init.3,v 1.1 2010/12/04 02:08:39 flameeyes Exp $

depend() {
 need localmount
}

start() {
 if ! [ -d /var/run/pcscd ]; then
  mkdir -p /var/run/pcscd
 fi

 chgrp pcscd /var/run/pcscd
 chmod 0775 /var/run/pcscd

 ebegin "Starting pcscd"
 start-stop-daemon --start \
        --exec /usr/sbin/pcscd \
        --pidfile /var/run/pcscd/pcscd.pid \
  --chuid nobody:pcscd \
  -- ${EXTRA_OPTS}
 eend $?
}

stop() {
 ebegin "Stopping pcscd"
 start-stop-daemon --stop \
        --exec /usr/sbin/pcscd \
        --pidfile /var/run/pcscd/pcscd.pid
 eend $?
}

Primera impresión: “Y aquí que cojones debe estar mal”.
Bueno, como antes, me puse a analizar de nuevo todo la información del problema; empezando por el principio, vemos que el WARNING, ya nos decía: -c/--chuid is deprecated and will be removed in the future, please use -u/--user instead
Así que parece que la opción -c/--chuid que está para la jubilación y que hay que sustituirlo por la opción -u/--user; así que con todo esto si nos revisamos de nuevo el fichero /etc/init.d/pcscd y en el buscamos --chuid, vemos que aparece en la función start(), es decir en el arranque del servicio; dada la situación lo primero era seguir la recomendación del WARNING, por lo tanto sustituí la opción, guardé los cambios y volví a ejecutar el servicio y solo con esto el servicio se ejecutó sin queja alguna.

Ahora ya tenemos el lector funcionando en el sistema, en la siguiente entrada comentaré el asalto con la instalación de lo que es el propio driver del DNI-E.

Hasta la próxima enfermos.

17 de septiembre de 2011

No cON Name 2011 (2/2)




conjuntoEntradas() {
  No cON Name 2011 (1/2)
  No cON Name 2011 (2/2)
}

Continuamos con el resumen de las ponencias del segundo día de la NcN.

7) Técnicas oscuras para combatir la pederastía en Internet
By Juan Antonio Callés y Pablo González

Juan Antonio y Pablo, después de presentarse y a que se dedican hacen, han pasado a exponernos los ciberdelitos que afectan, en gran medida a menores, que corren hoy por la red. Posteriormente nos han hecho un breve resumen de hasta dónde llegan las leyes para erradicar este tipo de delitos, en España y en Colombia, ya que han tenido la experiencia de colaborar, o más bien de que les pidiesen a ellos ayuda, para desarrollar una versión a medida de su “troyano” open source, para utilizarlo por la propia policía Colombiano en la captura de un criminal que extorsionaba a una menor de este país; experiencia que nos han explicado como empezó y fue evolucionando hasta terminal con la captura del delincuente.

Luego nos han hecho 6 demos de varias de las utilidades que tiene el su troyano Flu para que viésemos de lo que es capaz y aprovechar para ver si nos animamos a colaborar en este gran proyecto.
Verdaderamente ha sido muy acertada, por parte de la organización, de meter esta charla tan amena al principio de la sesión del segundo día.

8) La Sibila (The Sibyl)
By Pedro Fortuny y Rafael Casado

Pedro nos ha explicado con un gran sentido del humor una posible solución que han diseñado y desarrollado que evita los ataques de fuerza bruta sobre los típicos hashes utilizados para no almacenar las contraseñas en claro en las BBDD, sin tener que obligar al usuario a utilizar combinaciones de caracteres de ésas que ponen los pelos de punta a los usuarios que no están paranoicos con la seguridad.

La solución propuesta permite entre otras cosas, aislar la autenticación a otra máquina que solo haga eso y así se mejora la prevención de comprometer la máquina a través de otros servicios, es decir el concepto de que los servidores sean definidos por roles y no que hagan de todo. En la parte de cifrado de las contraseñas se utilizan claves RSA y cadenas aleatorias, permitiendo aumentar la seguridad ofrecida por los sistemas más habituales (hashes).
Podéis consultar todos los detalles y descargar el sistema para que lo utilicéis en vuestro sistema en, ya que es open source, aquí.

9) (In)seguridad para jugones: apuestas, casinos y otros juegos de azar
By Rafael Rodríguez

Rafael no has explicado las mil y una pirulas que los amigos del lado oscuro aplican en los distintos tipos de juego y no juego, como máquinas de cambio de billetes, etc., para llevarse bypaseando las reglas de juego establecidas por los tan “lícitos” casinos.

Hemos escuchado, de todo, desde trucos relacionados con soporte interno o sin él, pasando por el hacking de máquinas, redes, etc. y terminando con truqillos de obtención de información relevante para tomar decisiones óptimas en las futuras jugadas, vamos todo un festival.
Luego ha dado el salto al negocio de los casinos on-line, donde has explicado que se han liberado de los problemas que se les presentan con los medios que utilizan para caer en los problemas que las TIC tienen, es decir ha sido la bienvenida al festival 2.0.

Finalmente nos ha explicado las contramedidas que se toman los dueños de este gran negocio para evitar estas pirulas, para que a más de uno no caiga en la tentación de creer que este tipo de timos es como la gallina de los huevos de oro, es decir para que no seamos malos.

Nos hemos entretenido a lo grande viendo todos los artilugios que emplean y aplican estos individuos.

10) Debugging (Exploit) Payloads
By Jose Serlvi

Jose nos ha dejado, o al menos a mí, atónitos con su charla; es la segunda que vez que asisto a una de sus charlas y como la primera esta hecha para absorber una cantidad de conocimientos increíbles. Ha sido una charla de 100% técnica donde nos ha explicado de que se trata el mundo de los exploits, pero centrándose en los payloads.

Para meterse en el mundo de los payloads nos ha explicado una dos de sus experiencias, una sobre el conocido 0 day de Internet Explorer que usaron los chinos para atacar a Google y otro para abrir un reverse shell en un iPad.

En su primera experiencia hizo uso de metasploit con el payload de aurora (el 0 day comentado en el párrafo anterior) pero en ella tuvo que analizar el payload para conseguir que le funcionase en el entorno que tenía que auditar, por aspectos de idioma, y raíz de eso vio que es lo que el payload hace y también vio que si se usa como una demostración sobre un entorno real luego hay que avisar al administrador del equipo afectado para que restaure las configuraciones, ya que el payload los modifica para su menester pero no los restaura.

En su segunda experiencia, partió de la base que si había una web donde se puede hacer un jailbreak de IOS 4.3 entonces es que tiene un exploit. Así que se puso manos a la obra para ver que hacía ese botón gordo de la web para conseguir el jailbreak, para posteriormente utilizar el exploit para ejecutar su payload que abre la conexión con la shell invertida.

11) Retorno de Inversión en la adecuación a la normativa PCI-DSS
By Javier Moreno Molinero

Javier ha hecho una ponencia de temática menos entretenida ya que las normativas aunque importantes, son un tostón; no obstante, considero que este tipo de charlas, no son menos ni importantes ni menos útiles.

Por la parte que profesional que a mi me toca, no es que PCI-DSS me afecte de manea directa, pero puedo establecer una analogía de la defensa de la adopción de la normativa PCI-DSS, por parte de una empresa, frente los costes económicos defendidos por parte de los financieros, ya que en bastantes ocasiones me tengo que pegar de ostias con estos y los directivos para defender necesidades que normalmente se imputan como un gasto sin ningún beneficio vistos desde fuera del departamento de TI, es decir la defensa que tenemos que hacer con el famoso ROI (Return of Investment) para conseguir presupuesto en la aplicación de normativas legales, adquisición de vienes (hardware y software), etc.

12) Reversing / Forensic Android
By Sebastián Guerrero

Otra de las charlas con un listón altísimo, tanto de contenido como el propio ponente.

Sebastián ha dado una charla de esas densas, no ha apenas respirado desde la primera sílaba hasta la última, momento en que ya se ha pasado a la ronda de preguntas; no obstante para nada se ha hecho pesada y mucho menos difícil de procesar la información, le ha dado humor por un tubo, mientras comentaba todo le iba metiendo inyecciones de bromas, coñas, etc.

El contenido ha sido de lujo, partiendo de la pila de capas de la que se compone Android, pasando luego por de que se componen una aplicación de Android, herramientas útiles para hacer reversing, como se hace un reversing y análisis forense, para posteriormente decirnos como saltarse las protecciones para usar aplicaciones de pago by de face y finalizando con una demo de la PoC (Proof of Concept) que han desarrollado para cargar cualquier payload y conseguir hacer un touchjacking.



Ahora toca la mesa redonda, pero aquí sobre esta no va ha haber nada así que si os interesa las tendréis que ver en GlobbTv.

Hay que agradecer a la organización No cON Name la profesionalidad que ha tenido en la planificación, organización y ejecución del congreso, todo ha estado currado a tope, tanto contenido de las ponencias, ponentes, como el orden de estas, que ha garantizado combinar las charlas que te mantiene despierto sea cual sea tu condición y otras que por temática, no menos importante, hagan del cansancio tu pero enemigo.


Esto es todo amigos sobre este congreso; hasta la próxima enfermos.

16 de septiembre de 2011

No cON Name 2011 (1/2)



Este año he repetido por segunda vez mi asistencia a la No cON Name y por ahora ha sido igual o más fructuosa que el año pasado.

conjuntoEntradas() {
  No cON Name 2011 (1/2)
  No cON Name 2011 (2/2)
}

Con esta esta entrada os dejo un breve resumen de cada una de las ponencias del primer primer día.

1) Show me your Kung Fuzz
By Iñaki Rodríguez

Iñaki nos ha explicado inicialmente que es el fuzzing, que básicamente lo ha resumido como: “Se trata de generar mucha mierda para que una aplicación reviente”.

Inicialmente nos ha dicho para que nos puede servir el fuzzing; lo que me gustaría destacar de estos es que a remarcado que no solo es un ámbito interesante para las empresas que se dedican a aspectos de seguridad, sino que también tiene un gran valor para el resto de empresas que han desarrollado aplicaciones y quieren descubrir posibles vulnerabilidades que tienen, claro está para corregirlas y ofrecer aplicaciones más robustas a tus clientes, en el caso que las comercialices, o a tus usuarios, en el caso que sea para uso interno.

Luego de darnos la introducción nos ha mostrado un conjunto de aplicaciones, dentro de la lista interminable que hay, de aplicaciones para hacer fuzzing, básicamente, como es normal, nos ha nombrado las que él utiliza, posteriormente nos ha dado una pequeña lista de lo que necesitaremos para montarnos un pequeño laboratorio de fuzzing, unas cuantas máquinas, unas cuantas aplicaciones, un poco de conocimientos de programación en algún lenguaje de scripting y muchas ganas de ponerse a currar y a gastar horas jugando con todo esto. Poca broma con éste ámbito, el fuzzing es entendible a todo, explotación de vulnerabilidades ficheros, aplicaciones locales, de red, protocolos de red, aplicaciones web, etc.

Luego ya han venido un par de demos, mostrándonos cómo en pocos minutos ha encontrado un agujero en una aplicación comercial cuyo coste no es que sea precisamente “low cost”.

Posteriormente un resumen de lo encontrado, de los problemas que surgen en el proceso de fuzzing; algo que quiero mencionar es que como un aplicación pasa por múltiples estados, no podemos decir que una aplicación está libre de vulnerabilidades si no hemos encontrado ninguna en nuestro proceso de fuzzing ya que es posible que solo hayamos barrido un % muy pequeño de todos estos estados.

2) Seguridad en el diseño: desde el principio
By Ricardo J. Rodríguez

Ricardo nos ha explicado y ha defendido en su ponencia que el diseño de un sistema tiene que incorporar la también la seguridad; es decir que actualmente, el diseño de sistemas, eso que se trata de pensar y valorar la solución que necesitamos para cumplir con los requerimientos que el sistema tiene que cumplir, ya ha obtenido un cierto reconocimiento a nivel mundial, y lenguajes como UML ya se han consolidado como estándar, pero por ahora la seguridad no es uno de los ámbitos que se tiene en cuenta en el diseño de un sistema, y eso es lo que él y sus compañeros del equipo de investigación de la universidad están trabajando para conseguir obtener una aprobación teórica que agrade a los que necesitan que todo esto sea práctico, es decir, como de costumbre en el campo de la investigación, pasar de las demostraciones teóricas a la práctica que el mundo de los negocios requiere.

No me voy a meter en concreto en metodologías, estándares, etc, que ha comentado en la ponencia, esa información puede obtenerse de manera amplia en los papers de investigación que han publicado.

Lo que me ha gustado de la ponencia, es que yo soy 100% partidario de pensar, reflexionar y valorar las múltiples variable que pueden afectar a lo que pretendes crear o poner en funcionamiento, ya que eso garantiza que en el momento del despliegue se reduzca el riesgo de que surjan imprevistos y después durante la explotación tenga un mayor nivel de control sobre las incidencias que puedan surgir garantizando velocidad de detección de la fuente del problema y de la velocidad de reacción; es decir que al haber defendido que la seguridad tiene que estar incluida en la fase de diseño de un sistema como en el desarrollo de software es algo que me ha llegado al alma, porque en mi día a día profesional me veo obligado a vivir en el caos y con una mínima dedicación a la planificación y a la organización, y no será porque lo pongo constantemente encima de la mesa, teniendo que sufrir que me tomen como un paranoico.

3) Geolocalización Wi-Fi basada en API
By Yayo F. Hansen

Primero de todo hay que mencionar la entrada inicial que ha hecho Yago en su ponencia, la musiquita, el texto que aparecía en pantalla y finalmente su entrada a oscuras con un sombrero en la cabeza, creo, que nos ha permitido a todos partirnos la caja.
Dejando de banda el show, nos ha dado un repaso sobre los sistemas de geolocalización y los virtudes y demencias de cada una; de cada sistema GPS, GSM, Wi-Fi y GeoIP, nos ha explicado como operan y como accedemos a esa información.
Lo más destacable y que más ha expuesto, de ahí el título de la ponencia, es la geolicalización Wi-Fi que está un poco en auge, con lo del HTML 5 y la famosa API de Google que tanto ha dado que hablar, y con razón.
Me he puesto algo más al día de como está todo este embrollo de la geolocalización, además de meterme el miedo sobre la seguridad de los sistemas móviles Android, algo que ya conocía, pero su manea de decirlo y de interpretarlo, y ahora que hace un par de semanas que llevo un Android en el bolsillo, el miedo se me ha calado todavía más al fondo, por lo que me va tocar a dedicar un poco de tiempo al cacharraro que va en mi bolsillo, porque en estas dos últimas semanas apenas he tenido tiempo para explorarlo a fondo y ver como puedo, al menos, conseguir tener algo más de control sobre éste.
Verdaderamente ha sido una ponencia estupenda, y se ha hecho muy amena, gracias a la pizca de humor que ha ido aplicando durante su presentación.

4) Terminal Hackapplications – old and new tricks hacking Citrix and Terminal Services
By Chema Alonso y Juan Garrido

De esta ponencia, no voy a describir muy concretamente lo que nos han mostrado, ya que tiene una una gran densidad técnica, mediante demo en directo, para el tiempo que tenían; además muchos de vosotros habréis ido siguiendo lo que Chema y Juan escriben en sus respectivos blogs, además de poder ver esta misma ponencia, presentada en la Black Hat USA 2011, donde la presentaron, que la podéis ver en algún vídeo colgado por ahí.

Como en todas las que he asistido, las ponencias de Chema son todo un show, que os voy a contar, el nivel de conocimiento que se expone y que puedes absorber es increíble, ya que técnicamente son muy buenas y amenas, y con el cachondeo que se trae, los conocimientos entran solos; quiero resaltar que el duo que esta vez ha hecho con Juan, ha sido muy muy bueno, yo siempre lo había visto exponer solo, pero la mezcla con Juan y la interpretación de este han dejado el listón tal alto, como siempre él me había dejado en sus exposiciones en solitario.

Bueno resumiendo rápido, nos han expuesto como explotar AGUJEROS de seguridad en aplicaciones de Terminal Services y Citrix, tan de moda hoy en día y publicadas en Internet sin mucho reparo, verdaderamente si yo tuviese este tipo de entornos ya me veo solicitando una reunión con dirección para exponer la seriedad del asunto y pedir los recursos necesarios para aplicar las consecuencias con las medidas que Chema y Juan nos han indicado, aunque la soluciones sean muy complicadas, llevan mucho tiempo y aún así, no te garantizan que lo hayas cerrado todo.

5) Ejercicios de demostración JWID (Joint Warrior Interoperability Demostration)
By Pedro Sánchez

Pedro nos ha expuesto los esfuerzos de los estados por conseguir tener herramientas, desarrollar estrategias y estar al día en la defensa/ataque frente a los ataques cibernéticos, englobados a los que ellos entienden como ciberguerra.

Nos explicado que hay congresos, concursos, etc, sobre todo esto; la verdad es que es impactante que pueda llegar el día que si tienes una idea feliz, le dedicas tiempo y llegas a algo útil que pueda ser útil en este campo, puedas acabar en un congreso sobre esto, lleno de “tíos con uniforme”, de esos que hasta ahora la mayor parte de la población piensa que llevan un fusil en la mano, cuando hoy en día ya parece que está creciendo el número de “tíos de estos” que ya no llevan un fusil en la mano, sino un ordenador.

Estoy sorprendido ya que pensaba que los estados no estaban invirtiendo tantos esfuerzos como lo que Pedro ha expuesto, y sobre todo algo que me deja más tranquilo, es que están subcontratando servicios profesionales para mejorar la seguridad en este ámbito; tendré que empezar a creerme que nuestro estado nos defiende.

6) Medical Device Security: State of Art
By Shawn Meginger

Shawn no ha puesto al día con todo lo relacionado con la seguridad que hay en los dispositivos y aplicaciones del ámbito médico.

Ha sido una ponencia muy descriptiva de como está este ámbito; a descripto tipo de dispositivos y aplicaciones que hay y que problemas de seguridad pueden tener y el alcance que puede tener un ataque sobre uno de estos.
También ha reclamado que es un aspecto peliagudo, los fallos de estos ponen en juego la vida de un grupo de personas, pero aún así los fabricantes de este ámbito parece que ignoren la seguridad by defautl.

Finalmente ha listado los investigadores que han escrito papers y descubierto agujeros de seguridad en productos de este ámbito, además también ha citado ciertos grupos de investigación, “normativas” que se han desarrollado o están en desarrollo y algo más que seguro que me dejo.




Finalmente el día ha terminado con la mesa redonda que estaba anunciada, “Ataques a las grandes Corporaciones”, la cual ha estado entretenida, pero no voy a dar más detalle; los interesados que no han podido asistir seguro que tendrán la posibilidad de verla retransmitida por algún lugar.


Nos vemos mañana enfermos.

10 de septiembre de 2011

Root power a lo old school


Después de haber caído de nuevo en la tentación de dar preferencias a otros temas profesionales y personales por distintas causas antes que a este blog, aprovecho esta tarde de sábado, de un fin de semana de esos que estoy agotado físicamente por liarme a organización de eventos deportivos, concretamente de BTT, para escribir una de las entradas que hace tiempo que tenía ganas de escribir.

Bueno después de lavarme la conciencia con excusas vamos al lío.

Menciono de antemano que nadie se tome el contenido de esta entrada como una buena práctica, y menos para usuarios no catalogados como frikis de muchos de las distribuciones Linux que corren por ahí, sino como algo totalmente de gusto personal, aunque muchas de los aspectos los argumente desde un sentido que pueda parecer racional. Advertidos estáis, paso a meterme de lleno en el tema.

Todos sabemos que desde ya hace bastante tiempo en gran parte de las distribuciones de Linux viene con la herramienta sudo instalada y con una configuración básica que permite ejecutar cualquier comando del sistema desde el usuario que se crea en la instalación del SO.

A mi la herramienta me parece cojonuda, pero cuando me topé con ella sin haber consultado su documentación y habiendo enterado de ella cuando volví a la carga con un SO Linux, después de un tiempo sin usarlo, me saltaron chispas al ver que no podía entrar con la cuenta de root al sistema; en ese tiempo sabático que me tomé después de haber terminado la universidad y haber empezado lo que podríamos llamar entre comillas “mi vida completamente laboral/profesional”, no estuve muy al día sobre el mundo Linux y los recuerdos que me quedaron fueron los de la universidad, tiempo en el que la herramienta sudo o no existía, o yo no la conocía, y con las distribuciones que tocaba, no venía instalada y preconfigurada como ahora viene, es decir, que cuando instalabas un Linux, metía las contraseña de root y luego según si eras aplicado y te dejabas recomendar, optabas por crear una cuenta sin privilegios administrativos para usar el sistema tu día a día.

El momento inicial me jodí y adopte lo que venía dado, ejecutar todo lo que necesitaba derechos administrativos con sudo.

El tiempo ha ido pasando, y finalmente en mi mundo personal (el de trastear por casa con los equipos que más utilizo) opté por seguir cultivándome con Linux, ya que en el mundo profesional estaba y estoy inmerso en el mundo Microsoft (que esto no se tome como una discriminación entre ambos, cada uno, como todo en este mundo, tiene cosas buenas y otras malas, cosas que nos gustan y que no nos gustan, pero yo soy de los de según lo que necesitemos optar por la que mejor cumpla las necesidades de cada momento, sin casarme con nadie); eso si mi cultivo no era el de productor agrario sino el del típico dominguero que tiene un huerto en su segunda residencia, es decir que gran parte de mi tiempo libre me dedico a jugar en este inmenso mundo de la informática, con ojos de generar beneficio económico, pero si no lo hay, me divierto un poco según lo que me voy topando y también si me va viniendo en gana.

Hace algún tiempo, le tocó el turno a profundizar un poco en el tal sudo; algo que no vino antes, porque como mi evolución del uso personal de un Linux, cambió de distribución, de una Ubuntu a una Gentoo, perdí de manera intrínseca las cadenas que me ataban a no ser el amo del sistema, y que vino más tarde porque me metí un poco en aspectos de la seguridad, añadiéndola a la lista de curiosidades tecnológicas que me gustan, aprovechando que encima, eran importantes para mi posición profesional actual.

Después de ver de manera general como funciona la herramienta, no es que sea un gurú de ésta, la configuré sobre mi Gentoo, para evitar tener que ir cambiando de cuenta cuando a la vez que administraba el sistema, por ejemplo lo actualizaba, tuviese que estar constantemente cambiando de sesión con mi cuenta de usuario cuando la tarea administrativa toma algún tiempo, ya que la opción de usar el sistema de manera convencional (navegar por internet, etc.) desde un Dios, no me gusta nada, porque ya somos muy vulnerables para encima meter más leña al fuego. No obstante la configuración no fue como la que acostumbra a venir por defecto en la instalación de varias de las distribuciones disponibles, sino que limité las aplicaciones y/o comandos a ejecutar como root desde el usual usuario, así creo que hay menos riesgo si me usurpan la contraseña de éste.

Mi vida con Gentoo fue tirando así, pero ya hace bastante menos tiempo, que decidí cambiar la configuración de sudo del Ubuntu que tengo instalado en mi netbook, máquina que uso para llevármela por ahí y para estar tirado en algún lugar de casa haciendo el ganso, como ahora mientras escribo este post, es decir que necesito que esté estable de manera fácil lo máximo posible y que el hardware esté disponibles sin tener que romperme mucho la cabeza, sin perder lo que ya he mencionado, estar inmerso en el mundo y filosofía Linux en mi tiempo libre. La configuración que establecí partió del mismo concepto que la de Gentoo pero como root continuaba sin ser accesible mediante una sesión tuve que investigar el porque, ya que hasta entonces lo ignoraba, descubriendo el porque no se podía iniciar sesión, que concretamente es porque la cuenta root es bloqueada con la opción --lock, comando passwd.

Descripción de la opción --lock del comando passwd

Así que activé la cuenta root con la manera tan fácil como asignándole un nuevo password ya que entiendo que al no haberme pedido ninguno en el momento de la instalación la cuenta estaba bloqueada pero no tenía ninguno asignado y si lo tenía lo desconocía, y desde ese momento ya podía hacer lo que siempre había deseado, que si quiero dedicarme a solo administrar la máquina no tenga que estar constantemente ejecutando sudo.

Bueno ya acabando con esto voy a responder algunas de las preguntas que yo mismo me hice.
  1. Con el cambio que he hecho en la configuración de sudo ¿mi sistema es más vulnerable?
    Yo entiendo que no, incluso menos, porque habiendo quitado la configuración estándar de sudo, que viene por defecto en la instalación de Ubuntu, he eliminado aspectos, como el tiempo que se guarda la autorización, cambiándola a 0 segundos, es decir que cada ejecución de sudo siempre me pide el password, independientemente del tiempo que haga de la última ejecución, y además he limitado que V solo autorice un número limitado de comandas y/o aplicaciones en vez de poder ejecutar cualquiera de estos.

  2. Ahora que root puede logearse en el sistema mi equipo ¿es más vulnerable?
    Podría ser lo si no le hemos asignado ningún password, o si hacemos mal uso de ella, utilizándola para otros menesteres que no sean los de administrar. Además, aunque tenga poco impacto, y sea una paranoia personal, teniendo otra cuenta con otro password que nos permita administrar la máquina, considero que es más seguro porque también exponer mucho menos el password, ya que usando sudo cada vez que ejecutas aplicaciones con derechos administrativos necesitas proporcionar el password de usuario exponiendo esté continuamente.

  3. ¿Es aplicable esta configuración a todos los distintos perfiles/tipos de usuarios?
    Considero que no, que la configuración por defecto de la instalación del SO es más aceptable para un usuario si no conocemos a que tipo pertenece, ya que los usuarios que no son unos frikis de los sistemas, no les gusta hacer muchos esfuerzos en mantener dos cuentas de usuarios, teniendo que recordar dos passwords distintos, así que configurándolo como a mi me mola, creo que una parte de estos caería en la tentación de utilizar la cuenta de root como la habitual, dejando olvidado la de usuario, corriendo el riesgo que se corre ejecutando la mayor parte de las aplicaciones con derechos administrativos, y más concretamente hoy en día, con la manera masiva en que utilizamos los navegadores conjuntamente con Internet.



Hasta la próxima enfermos.

13 de agosto de 2011

Otro vulgar scammer más


Aunque ya me ha pasado el 90% de las veces que me pongo a vender algo en segundamano.es, está va a ser la primera vez que publico los mails que me he cruzado con el vulgar scammer de turno, más bien motivado, porque estoy de vacaciones, aunque esto no quiere decir que me haya sobrado el tiempo, ya que vuelvo al curro la semana que viene y en la pila de cosas que quería hacer no se ha quedado en 0 elementos.

La historia es la de siempre; aprovechando el servicio de segundamano.es me he puesto a vender un artilugio que tenía por casa el cual no tengo intención de utilizar más y ya que el mundo físico no se comportar de manera tan boyante como el mundo virtual, en términos de espacio de almacenamiento, decido venderlo para sacarle algo de provecho, es decir algo de pasta.
El primer mail del vulgar scammer no era más que una pregunta que hace muchos de los posibles interesados por artículo:


Toma de contacto del scammer

Aunque ya se empezaba a notar las complicaciones que estos individuos acostumbran a tener con el Español y las costumbres que nosotros tenemos y que estos no es que se hayan informado mucho.

El tío se llama “Jose María”, vamos que más Español, el nombre no podía ser y con la gramática que había utilizado ya no encajaba mucho, pero bueno aunque es un indicio, la gente que contacta a través del formulario web no suele esmerarse mucho en escribir más o menos correcto, y cuento las faltas de ortografía, ya también soy bastante malo para eso; luego resulta que la dirección de mail es mariajose12000@yahoo.com, dejando lo de 12000, se deberá al overbooking que hay de “mariajose” en las direcciones bajo el dominio yahoo.com, el tío parece que le mola lo del cambio de sexo, y con esto no es que yo tenga algún problema con ello, tengo 100% de respeto a este asunto, ya que para mí esto es una práctica de la libertad de un derecho que no hace daño a los demás, pero no nadie negará que no es una situación extraña, sobre todo cuando las costumbres de muchos países de habla no española suelen tener un apellido y muchas veces cuando tu vas con dos apellidos se piensan que tu 1er apellido es parte de tu nombre (nombre compuesto) y el segundo es tu único apellido, con esto ya me encontré en las oficinas de Google de Zurich, cuando me fuí a visitar a un colega, no había manera de que lo encontraran, por este mismo hecho.

Dicho esto, continuamos con la historia:

El scammer se interesa en comprar al artículo y te cuenta la típica historia paternal para tocarte el corazón

Ahora le dí un poco de juego para ver como reacciona sobre una posible víctima:

Que sí que sí que me creo tu historia

Que conste que el número de cuenta, que por supuesto no es mío, lo saque de una de las múltiples webs que meten su número de cuenta bancaria para recibir cobros de clientes, es decir que la he sacado de entre información que está accesible al público.

Y ahora viene lo mejor, BANK OF AMERICAN, hace ofrece un tipo de servicios que en mi vida he visto, será porque los norte americanos son así de serviciales con los clientes que les dan bien de comer.

Bank of American nos confirma la transferencia que ha hecho el comprador, joder como se lo curran

"Ostia, no sabía yo que esto de la crisis había tocado tanto a los bancos que han tenido que vender sus dominios al mejor postor y empezar a utilizar dominos más asequibles (bank.of.american@v.gg)"

Por cierto este mail, al contrario que el resto, si que gmail, lo metió en el buzón de SPAM.

Continuamos viendo el problema detectado con el nombre utilizado, ¿es un tío o una tía?

Por si no te quedó claro con el mail anterior que encima te lo envían a ti con copia a ti mismo, el banco te envía otro, pero ahora con os he cargado las imágenes para que veáis lo corporativos que son:


Si no te ha quedado claro, te mandamos otro mail, pero con nuestras bonitas imágenes corporativas

Es más parece que si te meten unos cuantos dolares al final del mail, te va a convencer más que esto no es un bulo:

El final del segundo mail enviado por el banco viene con unos cuantos dólares

Ahora, que todo está hecho el scammer te dice que todo está hecho y te suelta el rollo de que el banco ha confirmado que el dinero está listo para entrar en tu cuenta.

"joder que amables y confiados son estos extranjeros y sobre todo agradecidos, me han dado 50 € más de lo que pedía; esto son buenos clientes y lo demás son tonterías"

El scammer informando que ha pagado y encima más de lo que pedías

Bueno llegado a este punto ya me cansé de jugar así que como no he respondido al último mail con lo que pide me ha enviado otro soltando un rollo de que es una persona honrada y que está al corriente de este tipo de timos, pero que él/ella no es así.

  El scammer jurando que es una hermanita de la caridad


Visto esto y todas las veces que me ha pasado siempre que intento vender algo en segundamano.es (y eso que ellos mismos avisan de este tipo de prácticas), creo que me queda claro que aunque a este tipo de timos se le vé el plumero por todos lados, parece que siempre, aunque parezca mentira, debe picar alguien por eso de la ley de los grande números, sino ¿porqué lo continúan intentando?

Bueno por si alguien duda estos días y decide meter buscar en google las direcciones mariajose12000@yahoo.com y bank.of.american@v.gg para ver si alguien ha reportado algo, al menterlas aquí espero que alguien dé con el post y le queden claras todas sus dudas.

Por otra parte, para quien no esté al corriente, hay que tener en cuenta que por mucho que vengan los mails de direcciones con el dominio apropiado a la entidad bancaria, no es una fuente de garantía, y si usáis gmail, hace un tiempo, no sé si actualmente continúa igual, no siempre avisa.


Hasta la próxima enfermos.

10 de agosto de 2011

Gnome loves ConsoleKit


El otro día, como hago cada semana durante el fin de semana que es cuando uso mi PC de casa para frikear, me puse a actualizar el Gentoo que tengo instalado, es decir que ejecute el comando:

$ emerge --deep --update --newuse world

No obstante, como también siempre hago, revisé que es lo que iba a actualizar (opción -pv), y sin ver nada que me llamará la atención o actualizaciones que requieren que luego haga otra cosa, como actualización de las fuentes del kernel, las cuales me implican migrar el fichero de configuración de la versión anterior a la versión recientemente descargada y luego compilar y reconfigurar el boot, lancé la ejecución del comando mencionado.
Entre las distintas actualizaciones había la actualización del Gnome, escritorio que utilizo, a la versión 2.30.

Hasta aquí nada raro, se empezó a descargarse cada paquete en el orden estipulado, a compilarse y desplegarse. Una vez terminada las actualizaciones a reiniciar la máquina, y a partir de aquí fue cuando empezaron los dolores de cabeza por una estupidez, pero que se me alargo unas cuantas horas, todo por que Mr. Google, no me daba la respuesta que quería, con las preguntas que yo le hacía, seguramente porque no estaba haciendo las preguntas correctas.

Los inconvenientes que tuve después de actualizar, no eran graves, pero si toca pelotas:
  1. No podía apagar, reiniciar, hibernar, etc. la máquina desde la sesión del usuario, sin privilegios, que utilizo día a día; no solo era porque no tenía derechos, sino porque en el menú de la interfaz gráfica no aparecían los botones correspondientes.
  2. Los Pen Drives, que pinchaba no se automontaban, así que tenía que hacerlo manualmente desde un usuario con privilegios.
Después de leer varias historias de la peña que va preguntando en posts, otros que escriben en blogs, como yo estoy haciendo ahora, respuestas de listas de correo y otras de las distintas fuentes que corren por este mundo intangible, no encontré nada que me dijera como tenía que solucionar el problema.

Así que con todo lo que iba leyendo, iba enterándome de cosas que desconocía, y mezclándolas con las cosas que ya conozco, empecé a trastear en el sistema que si meto las entradas en el /etc/fstab de los Pen Drives, que si reviso la configuración de Gnome con el gconf-editor, a revisar los servicios iniciados, etc.

Algo que ya sabía y que debido a la antigüedad de alguna de la información que encontraba, no estaba reflejado, es que HAL (Hardware Abstraction Layer) ya no se usa, es decir que está deprecated, así que lo de cargar el servicio HAL, nada de nada; otras de las historias que me llevo a trastear eran las referencias que la peña hacía a udev y udisk y apartir de aquí, junto con la frase que venía a decir algo así como “Gnome necesita ConsoleKit para su correcto funcionamiento”, que obtuve de la documentación del propio proyecto de Gnome, me encaminé hacia la dirección correcta para solucionar el problema.

El servicio udev estaba iniciado, pero udisks no se iniciaba, daba un error al hacerlo, así que algo pasaba; a raíz de esto y de la frase que he comentado que obtuve de la documentación del proyecto Gnome, revisé si ConsoleKit estaba iniciado, y no lo estaba así que lo inicié y entonces si que udisks se iniciaba así que parecía que todo estaba solucionado, añadí al inicio del sistema la ejecución del servicio:

$ rc-update add consolekit boot

y a reiniciar para acabar de ver si solucionaba los inconvenientes.
Inicio sesión con mi usuario sin privilegios y buahlá ya tenía botones de apagar, reiniciar, suspender e hibernar la máquina y si pinchaba un Pen Drive, grrrrr, nada de nada, “espera, espera, ….. que antes he tocado el /etc/fstab y no lo he dejado como estaba, así que vamos a borrar esas entradas (la del Pen Drive) que había metido y que no he quitado”; y ahora sí los Pen Drives ya vuelven a automontarse de nuevo.

Así que solucioné los inconvenientes, me enteré de bastantes cosas, como habitualmente me pasa cuando me veo obligado a solucionar problemas, esta es una de las razones por las que instalé un Gentoo, y de rebote solucione el inconveniente que tenía desde el inicio del sistema, que las unidades ópticas (DVD-ROM, etc) no se automontaban, ¿porqué? Porque había metido las entradas en el /etc/fstab.

Así que ya sé para la siguiente vez que el Gnome haga cosas raras revisar si ConsoleKit está iniciado ya que con algún cambio del sistema puede que no se inicie o directamente haya desparecido de la lista de servicios a iniciar en el arranque del sistema.

Hasta la próxima enfermos.

21 de julio de 2011

Ponencia-Taller de Dr. Metrics


El pasado día 19 de Julio del 2011, me pasé por una Ponencia-Taller que realizaba Dr. Metrics (Enric Quintero), organizado por Iniciador Barcelona, sobre Web Anlytics (Análisis Web) para ver que podía sacar de allí para abrir mi mente a futuras ideas, expectativas profesionales, absorber algo más de conocimiento y si se daba la ocasión, hacer algo de networking.

En el anunció del “Taller” se indicaba que Dr. Metrics era un crack de los productos Google Analytics y Optimizer, así que me hizo pensar que spamearia bastante de estos productos, algo que ya me parecía bien, por eso asistí, porque seguro que siempre se puede aprender algo; no obstante la ponencia me sorprendió porque el nivel de SPAM sobre Google fue bajo, además de ser crítico con lo que estos productos aportan y no aportan.

Dr. Metrics, claramente, anunció que el analizar el éxito de tu site no solo se trata de el número de visitas, que páginas se han visitado y cuanto tiempo se ha visitado cada página, sino que al final toda esa información es importante si puedes ligarla con otros aspectos que te puedan describir el comportamiento de los visitantes y del porque de sus interacciones.

Lo que espera todo el mundo cuando consulta las métricas de su site, es ver que beneficio le está aportando, definiendo beneficio como venta de productos, venta de servicios, presentación de la empresa para posterior contacto, fama, etc.

Dr. Metrics dejó claro que las métricas son importantes, pero solo son una pieza de un puzzle, es decir que sin relacionarlas con otros aspectos, se puede decir que no sirven para nada. Entre las otras piezas del puzzle mencionó aspectos como análisis de lo que sucede en tu backend (por ejemplo las transacciones interesantes realizadas en la BBDD, como sería el cierre de un proceso de compra), encuestas al usuario cuando decide abandonar tu site en procesos importantes no finalizados (por ejemplo en medio de el pago con tarjeta de crédito de una compra o contratación de servicio) y algunos aspectos más que mencionó.

Me entusiasmo la idea que recalcó sobre de buscar “los tres pies al gato” cuando ves que las visitas de tu site son bajas o que hay bastantes abandonos en páginas que no tiene mucho sentido (por ejemplo en medio del proceso de compra); lo primero que dijo sobre este aspecto es que antes de ponerse a cruzar datos como un loco es que revises la infraestructura donde se organiza todo este circo, es decir si tu/s servidor/es a lo largo del mundo, plataforma y horario tienen un adecuado rendimiento, tienen una disponibilidad adecuada y todo tu site funciona bien y no van errores 400, 500, … Resumiendo que primero empieces la casa por los fundamentos y no por el tejado, así que primero a invertir en un desarrollo con un nivel adecuado de calidad (incluyendo seguridad) y óptimo, eso si desde mi punto de vista no te pases con lo de óptimo, que luego el desarrollo, llamemos código, es un Jeroglífico solo entienden los iluminados que lo han creado y como esto se larguen de la empresa ya verás los dolores de cabeza que tendrás; y una vez tengas un desarrollo de calidad aceptable te va a tocar invertir en servidor/es, comunicaciones, y buen sys admin que sepa configurar y optimizar, y no nos olvidemos de securizar, los cabr... que van a servir tu site.

Sobre los sistemas/servicios/implementaciones de análisis de métricas, también habló, y no solo de Google Analytics, sino de otros como Yahoo Analytics, u otros sistemas de uso privado como el archiconocido, no gratuito, Urchin; no obstante finalizó este apartado venerando a Google Analytics por su facilidad de uso para usuarios no técnicos, es decir que Google, parece tener “la madre del cordero” en usabilidad dando la importancia que tiene en el hecho de sacarle provecho, ya que tener muchas funcionalidades no sirve de nada si luego no sabes usarlas.

Finalmente llegó el tuno de las preguntas, se preguntaron unas pocas, pero realmente solo recuerdo la mía, así que la voy a dejar aquí, que para eso es mi blog:
¿Te has planteado como va a cambiar todo este mundo de analizar a los usuarios ahora que los gobiernos se están poniendo las pilas en legislaciones de privacidad y que se están realizando, por fin, unas campañas de concienciación sobre la privacidad de los datos en la red? (bueno no fue exactamente así, pero similar)

Y la conclusión de al respuesta fue que la información no es gratis, aunque lo parezca, así que si vas a querer que tus usuarios dejen en tu site tu rastro tendrás que recompensarlos, por ejemplo, descuentos, sorteos, etc; algo que deberían tomar no ta muchos de los explotadores que corren por este país, que parece que todo los tiene que salir gratis, es decir a cambio de nada.

Podéis consultar el resumen de la ponencia realizado por Iniciador Barcelona, junto con slides de la presentación, aquí (y si queréis verme a mí, lo podéis hacer en la foto que hay al público).


Hasta la próxima enfermos.

8 de julio de 2011

[PHP] Verificación de entradas en arrays multidimensionales (2/2)

conjuntoEntradas() {
  [PHP] Verificación de entradas en arrays multidimensionales (1/2)
  [PHP] Verificación de entradas en arrays multidimensionales (2/2)
}


Llegado al punto que al no ser las dos opciones comentadas en el primer post de esta serie de mi gusto por el motivo que ya expuse, además estar desfavorecidas frente a otras, por su menor rendimiento en velocidad de ejecución, podría haber optado por tirar por el derecho y decidir utilizar la función isset(), es decir la que en el comentario de la documentación de función is_null(), se dejaba claro que era la más óptima entre estas tres opciones.

No obstante, durante mi búsqueda de como hacer la verificación de la existencia de claves dentro de los arrays multidimensionales, me tope con otra función, que por nombre y definición (Verifica si el índice o clave dada existe en el array) debería ser la más apropiada para realizar dicho menester; estoy hablando de la función array_key_exists().

No obstante, en los comentarios de la documentación de array_key_exists(), alguien y había comentado la diferencia de velocidad de ejecución con isset(), siendo de nuevo, favorable para ésta última.

Aún habiendo este comentario, yo quería hacer mis pruebas, ya que al final del comentario, se menciona que la diferencia de rendimiento no es tan grande en un sistema operativo Mac o Linux, como lo es un MS Windows; además la prueba del comentario se realiza sobre un array unidimensional y no multidimensional, que son con los que yo me iría encontrando en mis implementaciones y por otra parte, me entró la vena friki por realizar la prueba sobre un profiler, y como ya había utilizado en una vez anterior, el elegido fue Xdebug, utilizando, con el mismo motivo, el visor KCachegrind; así que manos, la obra.

Primero la implementación de las funciones que me permitirán discernir entre las dos distintas formas de verificar la presencia de claves en arrays multidimensionales con la función array_key_exists().

function aa_verificacion_a_una_instruccion_fallo_2d($var1) {
   for ($i = 0; $i < 10000; $i++) {
        if (@array_key_exists('clave2.5', $var1['clave1.3'])) {
        }
    }
}

function ab_verificacion_por_dimension_fallo_2d($var1) {
    for ($i = 0; $i < 10000; $i++) {
        if (array_key_exists('clave1.3', $var1) && 
                (array_key_exists('clave2.5', $var1['clave1.3']))) {
        }
    }
}

function ba_verificacion_a_una_instruccion_fallo_3d($var1) {
   for ($i = 0; $i < 10000; $i++) {
        if (@array_key_exists('clave4.1', $var1['clave1.3']['clave2.1'])) {
        }
    }
}

function bb_verificacion_por_dimension_fallo_3d($var1) {
    for ($i = 0; $i < 10000; $i++) {
        if (array_key_exists('clave1.3', $var1) && 
                array_key_exists('clave2.1', $var1['clave1.3']) &&
                array_key_exists('clave4.1', $var1['clave1.3']['clave2.1']) ) {
        }
    }
}

function ca_verificacion_a_una_instruccion_fallo_4d($var1) {
   for ($i = 0; $i < 10000; $i++) {
        if (@array_key_exists('clave4.1', $var1['clave1.3']['clave2.1']['clave3.0'])) {
        }
    }
}

function cb_verificacion_por_dimension_fallo_4d($var1) {
    for ($i = 0; $i < 10000; $i++) {
        if (array_key_exists('clave1.3', $var1) && 
                array_key_exists('clave2.1', $var1['clave1.3']) &&
                array_key_exists('clave3.0', $var1['clave1.3']['clave2.1']) &&
                array_key_exists('clave4.1', $var1['clave1.3']['clave2.1']['clave3.0'])) {
        }
    }
}


function da_verificacion_a_una_instruccion_fallo_3d_sobre_4d($var1) {
   for ($i = 0; $i < 10000; $i++) {
        if (@array_key_exists('clave4.1', $var1['clave1.3']['clave2.1']['clave3.1'])) {
        }
    }
}

function db_verificacion_por_dimension_fallo_3d_sobre_4d($var1) {
    for ($i = 0; $i < 10000; $i++) {
        if (array_key_exists('clave1.3', $var1) && 
                array_key_exists('clave2.1', $var1['clave1.3']) &&
                array_key_exists('clave3.1', $var1['clave1.3']['clave2.1']) &&
                array_key_exists('clave4.1', $var1['clave1.3']['clave2.1']['clave3.0'])) {
        }
    }
}
Aunque se podía intuir con total certeza que la verificación a una instrucción, directamente haciendo referencia a la clave en la dimensión que se quiere verificar, será más óptima que la verificación dimensión por dimensión hasta llegar a la profundidad de la dimensión que realmente se quiere comprobar; opté por realizar la prueba y así poder ver de manera cuantificable la diferencia que había, y tener que tragarme mis gustos y optar por hacer la comparación con isset(), haciendo referencia a posiciones de memoria inexistentes si las dimensiones de menor profundidad a al que se quiere verificar, ya no existen, como a comenté en la primera entrada de esta serie. Los resultados obtenidos fueron estos:

 Diagrama de llamadas a funciones de comparación de la dos maneras de utilizar array_key_exists()

Diagrama de llamadas a funciones de comparación de la dos maneras de utilizar array_key_exists() de menos a mayor % utilizado 

Bueno, una vez hecho un poco el ganso, tocaba realizar la comprobación definitiva, comparar la eficiencia de ejecución entre array_key_exists() e isset(), así que esté fue el script que utilicé:
function aa_usando_array_key_exists($var1) {
   for ($i = 0; $i < 10000; $i++) {
        if (@array_key_exists('clave4.1', $var1['clave1.3']['clave2.1']['clave3.0'])) {
        }
    }
}

function ab_usando_isset($var1) {
   for ($i = 0; $i < 10000; $i++) {
        if (isset($var1['clave1.3']['clave2.1']['clave3.0']['clave4.1'])) {
        }
    }
}

function ba_usando_array_key_exists_fallo_dimension_anterior($var1) {
   for ($i = 0; $i < 10000; $i++) {
        if (@array_key_exists('clave4.1', $var1['clave1.3']['clave2.5']['clave3.0'])) {
        }
    }
}

function bb_usando_isset_fallo_dimension_anterior($var1) {
   for ($i = 0; $i < 10000; $i++) {
        if (isset($var1['clave1.3']['clave2.1']['clave2.5']['clave4.1'])) {
        }
    }
}
Y los resultados obtenidos fueron estos:


Diagrama de llamadas a funciones de comparación entre la utilización de array_key_exists() e isset()


Diagrama de llamadas a funciones de comparación entre la utilización de array_key_exists() e isset() de menos a mayor % utilizado

Así que como dice el dicho, “una imagen vale más que 1000 palabras”, la eficiencia queda demostrada.

Para concluir solo me queda aclarar un aspecto que alguno le debe descuadrar; se trata de ¿porqué en el caso de la utilización de isset() no tengo ninguna pega por lo que he comentado con el resto? Me refiero al hecho de no gustarme hacer referencias a posiciones de memoria inexistentes. Pues bien, el caso de isset() lo veo sustancialmente distinto, ya que por definición la función sirve para “determinar si una variable esta definida y no es NULL”, así que aparte de considerar que lo que va a hacer es verificar la existencia o inexistencia de una posición de memoria (en términos de definición de posiciones de memoria alocadas en tu programa), si la posición no existe no aparece ningún mensaje de notificación informando de ello, claro está sin anteponer @ a la llamada de la función; así que no me da la sensación de estar realizando algo que no es del todo correcto.


Hasta la próxima enfermos.