PDF de programación - the original hacker 06 201405

Imágen de pdf the original hacker 06 201405

the original hacker 06 201405gráfica de visualizaciones

Publicado el 11 de Julio del 2017
695 visualizaciones desde el 11 de Julio del 2017
948,8 KB
22 paginas
Creado hace 5a (04/06/2014)
THE ORIGINAL HACKER
SOFTWARE LIBRE, HACKING y PROGRAMA-
CIÓN, EN UN PROYECTO DE

EUGENIA BAHIT



Buenos Aires, 30 de Mayo
de 2014

@eugeniabahit

GLAMP HACKER Y
PROGRAMADORA EXTREMA
HACKER ESPECIALIZADA EN PROGRAMACIÓN
EXTREMA E INGENIERÍA INVERSA DE CÓDIGO
SOBRE GNU/LINUX, APACHE, MYSQL,
PYTHON Y PHP. EUGENIABAHIT.COM

DOCENTE E INSTRUCTORA DE TECNOLOGÍAS
GLAMP CURSOS.EUGENIABAHIT.COM
CURSOSDEPROGRAMACIONADISTANCIA.COM

MIEMBRO DE LA FREE SOFTWARE
FOUNDATION FSF.ORG Y THE LINUX
FOUNDATION LINUXFOUNDATION.ORG.

CREADORA DE PYTHON-PRINTR, EUROPIO
ENGINE, JACKTHESTRIPPER. VIM CONTRI-
BUTOR. FUNDADORA DE HACKERS N'
DEVELOPERS MAGAZINE Y RESPONSABLE
EDITORIAL HASTA OCTUBRE '13.

ÍNDICE DE LA
EDICIÓN NRO6

BLOQUEOS MUTUOS Y ESTADOS DE CARRERA: L AS
VULNERABILIDADES MÁS EXPLOTABLES GENERADAS POR
HILOS Y PROCESOS EN LOS SISTEMAS INFORMÁTICOS 3

INGENIERÍA DE SOFTWARE: PROPIEDADES AL VUELO,
UNA FORMA DE OPTIMIZAR COLECCIONES............7

EUROPIO ENGINE LAB: MANIPULACIÓN DE DATOS CON
DATAHANDLER. UN MUNDO MÁS ALLÁ DE LOS
OBJETOS.....................................11

DESMITIFICANDO EL CONCEPTO DE SESIONES. TODO
ES MÁS SIMPLE DE LO QUE PARECE.............15

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

3

BLOQUEOS MUTUOS Y
ESTADOS DE CARRERA: LAS
VULNERABILIDADES MÁS
EXPLOTABLES GENERADAS
POR HILOS Y PROCESOS EN
LOS SISTEMAS
INFORMÁTICOS

DÍAS ATRÁS, INICIÉ UN
POST SOBRE ESTE TEMA EN
BLOG DE DEBIANHACKERS Y
DADO QUE HAY MUCHO QUE
INVESTIGAR SOBRE LA
IMPLEMENTACIÓN DE HILOS
Y PROCESOS EN LA
INGENIERÍA DE SISTEMAS Y
SUS CONSECUENTES RIESGOS
DE SEGURIDAD, DECIDÍ
AGREGARLO EN ESTA
EDICIÓN, PARA ASÍ PODER
DAR INICIO A UNA
EXHAUSTIVA INVESTIGACIÓN
AL RESPECTO.

N

o conozco programador Python que no alucine trabajando
con «threads» y «process» y a pesar de ello, muy pocos
son los que realmente saben de qué se trata. Pero esto no
es lo peor. Lo peor, es que desconocen los riesgos de seguridad
que una mala implementación de hilos y procesos puede
generar en todo un sistema informático.

Si ya trabajas con «threads» y «process» este artículo te aclarará
algunas dudas con respecto a la seguridad del sistema. Pero si aún
no haz llegado hasta allí, es una buena forma de comenzar,
puesto que te lo explicaré de forma que lo entiendas, sin
rollos ni tecnicismos inútiles.

EL PRINCIPIO ¿QUÉ ES UN PROCESO?
Primero que nada, vamos a tratar de entender qué es un proceso.
Un proceso, no es más que una parte de un programa que se está
ejecutando. Técnicamente es un conjunto de instrucciones
haciendo uso de un conjunto de recursos del sistema.

Cuando hablamos de recursos del sistema nos
referimos a uso de memoria RAM, Swap, CPU, tiempo
de ejecución, entre otros recursos menos relevantes

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

4

Por este motivo, cuando se dice que un programa
hace un mal uso de los recursos del sistema, por lo
general es debido a la ejecución desorganizada que
hace de sus propios procesos.

¿QUÉ ES UN HILO?
Un hilo (thread en inglés) es similar a un proceso en
cuanto a que también representa un conjunto de
instrucciones. Sin embargo, los hilos se diferencian
enormemente de los procesos, paradójicamente, por
la administración que hacen de los recursos del
sistema. Y esta última, es la característica que
diferencia a los hilos de los procesos, tal como te lo
explico en el siguiente párrafo.

THREADS VS. PROCESOS: ¿CUÁL ES LA DIFERENCIA ENTRE HILOS Y PROCESOS?
La diferencia fundamental, es que ambos
administran los recursos de formas diferentes.
Mientras que los diferentes procesos de un
mismo programa ocupan diferentes espacios
en la memoria, diferentes hilos comparten un
mismo espacio.

procesos, puesto que utilizarán menor espacio de
memoria. Esto es muy cierto, pero no son la
panacea. Pueden acarrear múltiples problemas de
seguridad tal como explicaré más adelante. No
obstante, el uso de procesos en vez de threads,
también solucionará problemas -a nivel seguridad de
la aplicación- que estos últimos no tienen capacidad
de resolver. Pero vayamos de a poco.

A primera vista, esto nos puede hacer suponer que
los threads son una mejor alternativa que los

PROBLEMAS DE SEGURIDAD GENERADOS POR LOS THREADS
Todo conjunto de hilos o de procesos, probablemente
necesite compartir información entre ellos. Sin lugar
a dudas, será mucho más fácil compartir información
si se comparte un mismo espacio de memoria, que
hacerlo si hay que estar saltando de un puntero
compartir
hacia otro.
información será mucho más fácil para los
threads que para los procesos.

Sin embargo, compartiendo grandes cantidades de
información y haciendo un uso significativo de tareas
se pueden
concurrentes a través de threads,
producir dos vulnerabilidades trágicas: Una de
ellas, la llamada «bloqueo mutuo» (deadblock en
inglés); la otra y a la vez más peligrosa, la
denominada «condición de carrera»
(race
condition en inglés).

consiguiente,

Por

Bloqueo mutuo (deadlock): Es el bloqueo irreversible
de un conjunto de hilos o procesos.

Un bloqueo mutuo es lo que sucede cuando un
programa se te queda “colgado” y te ves en la

obligación de “matar un proceso” ya que el conjunto
de hilos o procesos bloqueados, no tiene solución.

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

5

Condición (o estado) de carrera: Es aquel que se
produce cuando varios hilos o procesos intentan
modificar de forma simultánea a un mismo recurso.

Si más de un hilo o recurso intenta modificar el
estado o valor de un mismo recurso al mismo
tiempo, los datos dejan de ser confiables y por
consiguiente, es correcto afirmar que los datos
quedan corruptos.

la clave. Incluso, podría quedar corrupta a tal punto
de quedar sin clave. Esta concurrencia mal
implementada es la que se denomina condición de
carrera, donde los actores “compiten” por ver quien
“gana” la modificación del dato.

Por ejemplo, si Juan y Ana intentan modificar la
contraseña del usuario admin al mismo tiempo. Juan
decide colocar 123456 y Ana, 223344 ¿cuál de las
dos claves será finalmente, la clave del usuario
admin? La respuesta es que si el programador no
contempló está posibilidad, será imprevisible conocer

Los estados de carrera en un sistema informático
son
fácilmente explotables mediante
«exploits» locales. Por ese motivo, representan uno
de los riesgos de seguridad más graves en un
sistema.

LINUX Y GNU VS SISTEMAS OPERATIVOS PRIVATIVOS
En más de una oportunidad habrás escuchado decir
que Linux (el kernel) y los sistemas operativos GNU
que lo implementan, hacen una mejor administración
de recursos que los sistemas operativos privativos
comúnmente usados por el usuario promedio y que
no se encuentran basados en Unix. Esto simplemente
hace referencia al costo que la creación y
destrucción de procesos, implica en los distintos
sistemas.

Tanto en Linux y Unix a nivel kernel como en
GNU a nivel sistema operativo, el costo de
creación y destrucción tanto de hilos como de
procesos puede ser casi imperceptible,
mientras que en sistemas operativos privativos
con núcleos diferentes, el costo es muy elevado y
por ese motivo, en estos sistemas, se utilizan más los
threads que los procesos. De allí que comúnmente se
escuche decir que estos sistemas son más
vulnerables que los que implementan Linux o Unix.

USO DE PROCESOS QUE EVITAN ERRORES DE DISEÑO EXPLOTABLES
los puerto de bajo número -como el puerto 80, por
Un buen uso de procesos y de preferencia de estos
ejemplo- lo realiza a través el usuario root mientras
frente a los hilos, se da cuando una aplicación
requiere efectuar tareas simultáneas con usuarios
que el procesamiento de las solicitudes Web, lo
efectúa con el usuario www-data quien tiene
diferentes. Puede que no te hayas planteado emplear
diferentes usuarios para diferentes tareas de tu
permisos muy inferiores a los de root.
aplicación y esta es una excelente oportunidad.
Apache nos da un ejemplo concreto de ello.

Casos como el de Apache, son los que evitan que
frente a un error producido en el código de las tareas
ejecutadas por usuarios con permisos escuetos,
ejecuten acciones solo permitidas al usuario root. La

Apache utiliza múltiples procesos con diferentes
usuarios para la ejecución de sus tareas. El enlace a

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

6

única forma de que esto suceda, sería escalando
privilegios para lo cual, otro error sería necesario de

forma simultánea pero en el código de las tareas
asignadas al usuario root.

TRABAJO DISTRIBUIDO Y PORTABILIDAD
Otra de las grandes ventajas que los procesos
facilitan frente a los hilos, es la de permitir una
mayor portabilidad en las aplicaciones y posibilidad
de compartir el trabajo de forma simple
(característica por excelencia en las arquitecturas
cliente-servidor).

aplicación que permita distribuir/compartir el trabajo
a través de una red local o externa, la ejecución de
tareas mediante diferentes procesos, será la
  • Links de descarga
http://lwp-l.com/pdf5194

Comentarios de: the original hacker 06 201405 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad