sábado, 1 de octubre de 2011

La teoría Z


Jamás pensé que en el estudio de temas relacionados con empresa, empresario y empleado, encontraría tanto disfrute de su lectura y estudio.

Uno de esos temas ha sido entre otros el de la Teoría Z. 

Esta teoría surgió en los años setenta y proviene de la cultura japonesa.

William Ouchi, norteamericano, hijo de padres japoneses, describe los principios de esta teoría en su libro Theory Z, en el 1981, siendo un auténtico best seller.

Ouchi denominó a su teoría "Teoría Z", porque va más allá de teorías actuales como son la teoría X e Y, de Duglas McGregor (teoría que es posible que en próximos post relate).

Estos principios fundamentales son los siguientes:
  • Compromiso de empleo para toda la vida: 
    • Cuando una empresa japonesa contrata a un nuevo empleado, se compromete a tenerle contratado hasta que se retire.
  • Lentitud en la evaluación y en la promoción: 
    • El proceso de evaluación es sumamente lento, pudiendo pasar hasta 10 años para que un ejecutivo reciba un ascenso importante. Durante ese periodo, las personas del mismo nivel recibirán los mismos ascensos y aumentos de sueldo. 
    • La lentitud el proceso dificulta los juegos corporativos de corto plazo. Se propicia una actitud abierta a la cooperación, al rendimiento y la evaluación , pues se favorece la posibilidad que el nivel de desempeño real salga finalmente a la luz. 
    • Los ejecutivos jóvenes no se sienten atraídos por hacer carrera a costa de otros, ni de presionar para que se tomen decisiones.
  • Consenso en la toma de decisiones: 
    • Se trata de que participen y se involucren en las decisiones todos los que puedan resultar afectados por ella. 
    • A pesar del mayor tiempo que se requiere, hay mayores posibilidades de que todos apoyen la decisión plenamente. 
    • Cuando se debe tomar una decisión importante, se encarga la elaboración de la propuesta a la persona de menos edad y experiencia. 
    • De este modo, no se pierde la vitalidad ni se pierde el proceso de cambio. Por supuesto, los directivos saben cuales pueden ser las mejores decisiones y el joven se esfuerza al máximo por encontrarlas. Se inculcan los mismos valores y creencias. 
    • Los errores generan además, buenas ideas.
  • Responsabilidad colectiva: 
    • La responsabilidad del éxito o el fracaso de la organización la comparten todos sus miembros como grupo. Ninguno es más responsable que otro.
  • Control informal e implícito: 
    • Dentro de la organización no cabe esperar que los más jóvenes manifiesten su desacuerdo, o se rebelen con sus superiores. Lo que, sin embargo, cabe esperar es que los empleados acudan a actos sociales de los directivos y que allí puedan manifestar su desacuerdo de forma sutil y amable. 
    • La organización japonesa solo acepta jóvenes que todavía se encuentran en la etapa formativa de su vida, los hace participar en múltiples grupos y, de ese modo, les inculca el sentimiento de solidaridad y camaradería.
  • Total cuidado de los empleados: 
    • La influencia de la empresa llega a casi todos los aspectos de la vida de sus trabajadores, financia actividades sociales, vacaciones en grupos, e incluso parte de su vivienda y transporte.

Este último principio es el que más me llama la atención y tiene mucho que ver con otro tema importantísimo, la motivación, y es que, para que en la relación empresa-trabajador se consigan excelentes resultados es vital que las personas se encuentren motivadas. 

Concluyendo que es gerundio. Si está demostrado que el Management japonés da buenos frutos, ¿Por qué apenas se aplica en las empresas Europeas?.

Los siguientes enlaces profundizan más sobre esta teoría (lectura más que recomendada):


sábado, 24 de septiembre de 2011

Ofuscación de código interpretado

Según la wikipedia, la ofuscación es:
En computación, la ofuscación se refiere al acto deliberado de realizar un cambio no destructivo, ya sea en el código fuente de un programa informático o código máquina cuando el programa está en forma compilada o binaria, con el fin de que no sea fácil de entender o leer.

Pues con esta definición en mente,  vamos a ofuscar el código del proyecto correspondiente al post anterior titulado "Decompilación de código interpretado". Para ello usaremos una herramienta gratuita llamada Eazfuscator.NET que proporciona unos resultado excelentes, casi a la altura de algunos de pago.

Esta herramienta se integra perfectamente en el entorno de desarrollo de Visual Studio:




Ofuscando el código al generar la versión release del proyecto:  




Si decompilamos el ejecutable que se ha generado con eazfouscator y lo comparamos con el de la entrada anterior, se observa que ahora ya no es tan trivial seguir el código, es más, resulta casi imposible entender nada:




En resumen, esta es un buena técnica de protección de código frente a un posible ataque de ingeniería inversa, pero no nos engañemos, no hay nada infalible y menos esto. Sin embargo sí da un cierto grado de tranquilidad en el despliegue de este tipo de código.

domingo, 18 de septiembre de 2011

Decompilación de código interpretado


Hace tiempo que quería escribir una entrada al blog que tratase de la decompilación de ejecutables, cuyo código es interpretado, como los que generan lenguajes conocidos como .NET o Java.

En este caso lo haremos con .NET y sin duda alguna, el mejor decompilador .NET es .NET Reflector de la compañía Red Gate. 

Sin embargo, no hace mucho tiempo que dejó de ser gratuito. Por lo tanto me puse a buscar alternativas y me encontré con ILSpy. Una alternativa que aunque joven, promete y mucho, además de ser open-source.

ILSpy servirá perfectamente para ver un ejemplo de decompilación .NET, donde descubriremos las vulnerabilidades de este tipo de lenguajes, para así, en sucesivas entradas, ver que técnicas tenemos disponibles para proteger un poco más este tipo de aplicaciones. 

Usaremos como ejemplo el típico winform de acceso a una aplicación, con un código de desbloqueo que es fijo dentro del ejecutable (HardCode). 
En donde al pulsar el botón Unlock nos mostrará en otra ventana, si el código es correcto o no:




Cargamos ILSpy, abrimos el ejecutable en cuestión y navegamos un poco por la estructura jerárquica del ensamblado y enseguida vemos que en Form1 hay un método cuyo nombre no puede ser más obvio "buttonUnlock_Click". Situándonos en esa referencia observaremos como en el marco derecho de la aplicación, se muestra el contenido del método desensamblado, poniendo de manifiesto la debilidad de estos lenguajes:




ILSpy acaba de nacer, pero tiene un gran futuro por delante, por todo ello, personalmente os animo a usarlo y apoyarlo todo lo que podaís.

En próximas entradas, hablaremos de la técnica de ofuscación de código como medida de seguridad ante este tipo de aplicaciones de decompilación.

Práctica de Lenguajes de Programación

Han pasado casi cinco meses desde mi última publicación y el motivo de ello no es otro que las prioridades que se asignan a la cosas (Familia, Trabajo, Estudios, ...) y claro por último, entradas al blog.

Intentaré hacer un esfuerzo y publicar como poco una vez por semana. No quiero perder el habito de escribir en el blog.

La entrada que nos ocupa no es otra que compartir la práctica de la asignatura de Lenguajes de programación del 2011, que en este caso es el desarrollo de un juego de mesa (Monopoly) y que lo que se pretende es la comprensión y aplicación de conceptos básicos del paradigma de programación orientado a objetos (POO) usando como lenguaje JAVA.

Espero que por lo menos sirva como orientación a la hora de encarar vuestras futuras prácticas y sobre todo me encantaría recoger todas las críticas 'constructivas' que se os ocurra.

Sin más dilación, anexo los enlaces de las descargas:

lunes, 25 de abril de 2011

RootKit

RootKit viene a ser algo así como un kit de herramientas (aplicaciones software) para el usuario root de un sistema.

Esto se traduce en que en nuestro sistema operativo (Windows, Linux, Mac, ...) un tercero puede instalar un kit de herramientas de administración, ocultandose completamente ante nuestros ojos y dejando una puerta abierta a la imaginación del intruso (espionaje, botnet, ...), pudiendo controlar absolutamente todo lo que se haga en nuestra máquina.

Seamos un poco más explicitos. 

Imaginemos que el ministerio de defensa de un pais utiliza un sistema operativo windows en el cual y por desgracia exite un rootkit instalado en él, ¿podeís imaginar el uso que el atacante podría hacer de esa máquina?

O incluso esa P.I.M.E. y no tan P.I.M.E., que generalmente se pasa por el arco del triunfo la seguridad de su empresa, porque piensa que con un antivirus gratuito es más que suficiente, podría ver como su producto (o la información interna de este) viaja por las autopistas digitales, posiblemente a un destinatario que perfectamente podría ser la competencia directa.

Esto son solo casos hipotéticos imaginados solo por una mente retorcida como la mía, pero para que se entienda el alcance de esto, podeís visitar los siguientes enlaces:




Como se puede apreciar, incluso ya existen rootkit para Android, ahora tan de moda.

Lo fascinante de esta técnica es que es sumamente difícil de programar, detectar y eliminar.

Con este post no pretendo sembrar el pánico, sino todo lo contrario. En un mundo digital, en la era de la conectividad entre máquinas y personas, hay que saber que riesgos potenciales existen y como saber detenerlos.

Como siempre recomiendo que se amplien conceptos visitando algunos sitios como los siguientes:



Resumenes de la asignatura de estadística para la ITIS por la UNED

Jamás pensé que la estadística diera para tanto.

Después de cursarla he comprendido la importancia que adquiere en cualquier ámbito científico.

Extensa en temario pero amena en estudio, eso sí, hay que hacer muchísimos ejercicios para asimilar bien todos los conceptos.

A continuación están los resumenes que realicé hasta el tema 8 del libro "Probabilidad y estadística para la ingeniería y ciencias" de Devore, además de un formulario estadístico que preparé, para memorizar gran parte de las fórmulas que se usan en los exámenes (!ojo!, no están todas):


domingo, 16 de enero de 2011

Alternate Data Streams



¿Qué son los ADS?

Básicamente son flujos (de bytes) de datos almacenados dentro de un fichero, es decir, ficheros dentro de ficheros y es una carácteristica "especial" que nos otorga el sistema de archivos NTFS de Microsoft.

¿Para que vale esto?

Pues a priori no parece que esto nos pueda servir de mucho, sin embargo, su cara oscura puede que interese ya que se podría:


  • Ocultar ficheros de "cualquier tipo" pasando totalmente desapercibidos por un administrador de sistemas.
  • Oculta carpetas.
  • Ejecutar un fichero oculto (esta es la que más me gusta)...

Pero mejor que explicarlo, veamos algún ejemplo, y para ello se hará desde línea de comandos.

Ocultando un fichero de texto en otro fichero de texto:

Creamos un fichero de texto que se llame cita_Quijote.txt y le añadimos el texto:

En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor...

Creamos otro fichero de texto que se llame cita_estega.txt y le añadimos el texto:

Free your body and soul
Unfold your powerful wings
Climb up the highest mountains
Kick your feet up in the air
You may now live forever
Or return to this earth
Unless you feel good where you are!

Mas o menos quedaría esto:




Es interesante prestar atención al tamaño del fichero cita_Quijote.txt.

Creamos un ADS con cita_estega.txt sobre cita_Quijote.txt con el comando:

type cita_estega.txt > cita_Quijote.txt:eternoAprendiz 

A continuación eliminamos el archivo cita_estega.txt

Si observamos de nuevo el tamaño del archivo cita_Quijote.txt, comprobaremos que no ha cambiado en nada su tamaño, sin embargo esto no es así, realmente ahora contiene a cita_estega.txt, aun incluso habiéndolo eliminado. 

Para demostralo escribimos el comando:

more < cita_Quijote.txt:eternoAprendiz

Como ya suponíamos podemos ver el contenido de cita_estega.txt:




En realidad esto es un simple ejemplo, se pueden ocultar carpetas y ficheros de cualquier tipo y tamaño.

Si ademas uno de esos ficheros es un ejecutable (podría ser malware), incluso podríamos ejecutarlo tan solo con utilizar el comando start.

Como se intuye, esto da escalofrios.

Para finalizar, si os quedan ganas de profundizar en esta maravilla que Microsoft nos regala, os recomiendo que leais uno de los tantos y maravillosos artículos que nos proporciona Kriptopolis:

jueves, 6 de enero de 2011

Recuperación del arranque en windows 7

Si alguna vez necesitamos restaurar o recuperar el arranque de Windows 7 por cualquier motivo (virus, gestores de arranque, etc) y las opciones que encontramos por la red no nos ayudan porque obtenemos mensajes del tipo:

No se ha encontrado elemento...


Tal vez si sigues estos pasos podamos solucionar el problema:
  1. Necesitamos arrancar el PC con el disco de Windows 7 o en su defecto creando un disco de recuperación:
    • Panel de control > Sistema y seguridad > Copias de seguridad y restauración.
  2. Seleccionamos la opción de Recuperar el sistema hasta llegar al símbolo del sistema.
  3. Ejecutamos el comando diskpart y seguimos la secuencia:
    • list disk.
    • select disk = 0
    • list partition
    • select partition = 1
    • active
    • exit
  4. Reiniciamos el sistema y volvemos a repetir el paso 2.
  5. Ahora ejecutamos la siguiente secuencia de comandos:
    • bootrec /FixMbr
    • bootrec /FixBoot
    • bootrec /RebuildBcd
  6. Reiniciamos y listo.
Espero que con esto consigas recupera el registro de arranque.