Presentación del Taller, “Seguridad en Linux” (17/04/12, Centro Nuevo León)

Aquí está la presentación. Está en formato 2007 (editable) y 2003 (no editable).

El documento se comparte bajo licencia Creative Commons, en las condiciones indicadas en el link del panel derecho.

Versión 2007

Versión 2003

Registrando actividad de shell (script) *remotamente*

script es un comandito de UNIX muy útil: permite registrar toda la actividad de la consola (incluyendo salidas de comandos) en una bitácora.

Hasta ahí, nada raro; el problema es que a veces uno quisiera que esta bitácora se registrara fuera del sistema en cuestión, por cuestiones de integridad (modificar en lo más mínimo el sistema en cuestión) o comodidad (centralizar las bitácoras de actividad de un sysadmin de múltiples sistemas, por ejemplo). script exige un archivo local para escritura. Sin embargo, le podemos dar la vuelta… con pipes nombrados (FIFO):


mkfifo /ruta/al/pipe
cat /ruta/al/pipe | nc 192.0.2.1 1111 &
script -f /ruta/al/pipe

Un netcat en el equipo remoto (o un webservice, o lo que sea que reciba nuestra bitácora) y listo!

Mostrar todos los usuarios con shell y cuenta activa

awk -F ":" '$0 ~ /bash$/ {print $1}' /etc/passwd | xargs -L 1 -I {} grep {} /etc/shadow | awk -F ":" '$2 !~ /^!/ {print $1}'

– Requiere privilegios de root, obviamente.

– Sustituir “bash” por la terminal de su preferencia (o sh$ si quieren ver *todas* las terminales…)

– No he encontrado como optimizar la segunda parte a un solo comando awk, debido a que no encuentro como introducir el resultado de xargs a variable en awk. Si alguien lo puede hacer es bien recibida la mejora 🙂

Memorias de la facultad: Examen de admisión

Con el motivo de mi próxima titulación, “Memorias de la facultad” es una serie donde recuerdo mis días en la Facultad de Ingeniería de la UNAM.

Mi examen de admisión a la UNAM fue el domingo 2 de marzo de 2003, a las 8 AM. Vaya que si recuerdo bien la fecha y hora.

En México, para los que no se lo sepan, la UNAM es la mayor (y, en mi humilde opinión, la mejor) universidad del país. Por número de alumnos, es aproximadamente un 50% más grande que la segunda mayor universidad del país, el Instituto Politécnico Nacional. Por extensión territorial, es inmensa: conjuntando todas sus instalaciones excede las 700 hectáreas (es decir, el doble del tamaño de Londres, o más del triple que Mónaco) y su campus principal (300 hectáreas) es Patrimonio de la Humanidad.

Más aún: en México, entrar en la UNAM es algo especial. Cada año se ofrecen alrededor de 15,000 espacios para nuevos alumnos; y cada año, más de 150,000 alumnos buscan un lugar. Que por estadística tengas una probabilidad de 1/10 de entrar es suficientemente malo, pero la realidad es que no para todos es igual. En la última convocatoria de la Facultad de Ingeniería, para la carrera de Ingeniería en Computación aplicaron 960 personas (de las cuales “solo” 876 presentaron examen): 42 fueron seleccionados. 4.7% de probabilidad estadística. Uff…

Yo creo que en mi año eramos más estúpidos, porque cada año el ingreso depende de tu calificación, y de la calificación del top 40 (o cuanto lugares sean ofertados). Si tu calificación está entre esas mejores X, tienes lugar. Para desempates: promedio de prepa y otras particularidades de tus trámites. El punto es que el año pasado, el corte estuvo alrededor de 92 aciertos (de 120, si las cosas siguen igual); yo entré con 86. En fin, así es la vida. Niños estúpidos de hoy, no odien a uno de su clase por tener suerte de nacer 10 años antes que ustedes.

Pero… cómo llegamos a ese punto? Ah, la historia es corta pero divertida. La noche anterior, salí con mis hermanos. Hubo alcohol, desvelada, cigarros… y acabé llegando a mi casa a las 4 AM. Evidentemente cansado, y con el compromiso de ver a mis amigos a las 7 AM para irnos al examen, tuve la brillante idea de dormir una hora. Les digo que eramos más estúpidos en mi época. Total que puse la alarma, me dormí… y mi alarma pasó sin pena ni gloria, porque no escuché absolutamente nada. Siendo domingo, y mis papás teniendo el sueño muy pesado (como yo), supusieron que se me olvidó apagar la alarma para el fin de semana, y la silenciaron por mí. Obviamente, yo estaba en un sueño tan profundo que ni cuenta me dí. Y cuando desperté, ni el dinosaurio ni mi consciencia estaban ahí. Me tomó un par de segundos recordar – domingo, examen… sol, ya da el sol en la ventana! Putamadre, qué hora es??

7.45

Horror. Ensoñaciones de padres decepcionados, compañeros burlones y el eterno arrepentimiento de tomarme ese último tequila. Desperté a mi papá como loco – “Pá, pá, levántate ya, LEVÁNTATE QUE SE ME HIZO TARDE! YA NO LLEGO A MI EXAMEN!!” y, en una de las mejores actuaciones al volante que he visto en mi vida, llegamos del centro de la ciudad a Constituyentes en 15 mins. Estos fueron los sustos que le agudizaron la diabetes a mi mamá, estoy convencido. Y apenas llegamos… 8.05 AM. El de la puerta me vió medio feo (iba yo en un estado híbrido-etílico que solo puedo denominar como crupedo; ojeroso, sin bañarme y con el cabello hecho moronas), pero finalmente traía mi hojita y mi identificación, y me dejaron pasar. De reojo ví los restos de la mañana: los cordoncitos esos que utilizan en el cine y en el banco para hacer una fila, la banqueta tapizada de papelitos, virutas y vendedores cuyo stock no se acabó, pero que hicieron una buena venta. Caray, igual que cuando fuí a registrarme para el examen… ahí vendían los lápices a 10 pesos! Jajaj… a…. umm….

Fuck. No traigo lápiz.

Llegué a mi salón asignado y (muy afortunadamente) me encontré a un amigo de mi prepa. Al llegar repetí el proceso de la mirada del vigilante de la puerta multiplicado por 40: los presentes aspirantes y la encargada de brindarnos las instrucciones para resolver el examen. Ignorando completamente las mismas instrucciones que escuche 40 veces en los cursitos que nos dieron en la prepa para preparnos (“…recuerden llenar completamente el círculo correspondiente a su selección. En la primera página encontrarán ejemplos de formas correctas e incorrectas de llenarlos…”) volteé con mi amigo (“tienes un lápiz que me prestes?”) y después de ver su cara de desaprobación por mi crupedez, me prestó su lápiz de “entrenamiento”, ese al que le quedaba media vida y que no tenía mucha punta. Pero bueno, limosnero con garrote no soy.

Súper. Tengo lápiz, estoy aquí, ya no me pueden sacar. A darle átomos!

Cuando volví a levantar la cara había terminado mi primera sección, y *todos* los aspirantes seguían ahí. Volteé a ver el reloj y faltaba algo así como hora y media para que terminara nuestro tiempo. Pensé “no, esto no es normal” y le dí una revisada al examen. No, todo perfecto: la mitocondria sí sintetiza ATP y Gabriel García Márquez sí es un representante del realismo mágico. Sigo sin saber que onda con los iones hidróxidos pero eso no va a cambiar en la siguiente hora y media. Zaz, ya es hora y cuarto. Volteo a mi alrededor (muy consciente de que en esto o se es súper sutil o súper obvio, porque algo intermedio solo va a lograr que te saquen) y todos están enfrascados en su examen. Chale. Pues lo que vaya a pasar va a pasar. Entrego mi examen y me salí.

Allá afuera, en el medio tiempo, fumé unos cigarros y esperé a mis amigos. Escuchaba conversaciones típicas (“ATP? No seas mensa, las mitocondrias son las que segregan clorifila!”), con mayor o menor desesperación en la voz (“no mames. Ya es mi tercer examen de estos y se ponen más cabrones cada vez”). Finalmente salió uno de mis amigos comentando que estuvo bien fácil. Yo me quedé pensando en aquello de las mitocondrias (“será que la biología cambió durante la peda de anoche?”) y que, a los únicos que ví salir alrededor del tiempo que yo salí, fue a tres o cuatro chavitos que se fueron bien nerviosos, con todo y mochila, lejos de ese lugar. A lo mejor vieron el examen y les dió miedo la dificultad, a lo mejor eran contratados para ir, anotar las preguntas, y salir volando. Como fuera, los “confiados” (esos que salen antes que todos, pero no *tan* antes) salieron como a 30 mins de acabar el tiempo, y la VASTA mayoría salió en manada 5 mins después de acabarse el reloj. La obligatoria intervención de “porqué no llegaste a las 7”, “apestas a alcohol – toma este chicle” y “no mamen, ese wy llegó pidiendo un lápiz” hizo que se pasara rápido el tiempo, y como si nada ya teníamos que entrar a terminar el examen.

La segunda parte fue mate, historia, y otras menudencias. Igual salí con mucho tiempo de sobra, y francamente para cuando acabé ya ni revisé. Aquí me empezó a pegar el sueño, la briaguez y la absoluta falta de revisión de temas en la última semana, y comenzé a llenar bolitas como a dos pasos del “ave maría”. Respuesta que se viera bien, respuesta que recibía una bolita llena. No me importaba mucho recordar mis clases, o las notas de estudio, porque francamente lo que quería hacer más que otra cosa en el mundo era vomitar y dormir.

Para cuando salieron mis amigos llevaba yo como 6 cigarros en el día, hubiera dado mi brazo izquierdo por unos lentes oscuros, y a mis amigos se les ocurrió la brillante idea de irse caminando al metro (y claro, como nadie de nosotros conocía la ciudad en aquellos días mozos, acabamos caminando hasta el metro Chilpancingo). Llegué a mi casa hecho una piltrafa, identifiqué mi cama, y me dispuse a dormir. Y dormir…

Las siguientes semanas trajeron terribles sentimientos de culpa, pues todos mis amigos tenían asombrosas habilidades que yo no, como por ejemplo recordar qué demonios contestaron en el examen. Para cuando llegaron los resultados a mí ya me valía pepino: estaba convencido de que no me había quedado, no había forma de que un briago contestara suficientes reactivos para quedarse en geológica (50 aciertos necesarios), mucho menos para computación. El día que iban a salir los resultados, me despertó un amigo (el mismo del lápiz) preguntándome que si me había quedado; en aquella época no teníamos twitter. Le dije que no (“ehh? quién habla? Aquí no vive Sergio, puto, déjame dormir!”) y me comentó que podía ir a comprar la gaceta al puesto de periódicos, porque la página de internet tenía algo raro y no se podía entrar. Ya despierto, pues qué más iba a hacer.

Folio 1234… a ver aquí están los 1000…. 1200… 1234…

1234 A

Ah, no mamar. “A” de “A huevo que te quedaste, chavo, pásale pa’cá!” “A” de “A que no te la crees, pinche borracho.” “A” de “Aceptado”.

“A” de “Aceptado”.

En otras casas, esta historia estaría seguida de unos tamales, o la familia saliendo a celebrar, o no sé, un puerco sacrificado ceremonialmente. Definitivamente algo que tuviera que ver con comida, porque en México celebramos toda ocasión especial con una comida que nos acercará un poquitín más a la muerte temprana (por la comida o por los alcoholes). En mi casa, bendito sea Buda, el anuncio recibió un “pues felicidades!” y todos seguimos en nuestras actividades normales. Yo me sentí… aliviado, más que nada. Podía continuar mi caminito.

¿Porqué necesitas usas diferentes contraseñas en cada sitio y servicio?

Seguro has escuchado ese mantra:

“Para cada página web, para cada servicio que utilizas, es necesario utilizar contraseñas diferentes”

A la gente le *purga* escuchar esto. “A duras penas me acuerdo de mi contraseña “de siempre”, y tú quieres que use varias? Vete al cuerno.” La verdad es que existe una sencilla y poderosa razón para recomendar esto. Y va, como mantra secundario:

Lo que pasa con nuestras contraseñas en internet no depende de nosotros

A qué me refiero? Seguro escucharon de la vergüenza que pasó Sony el año pasado. En resumen: unos malos muy malos se metieron a sus servidores, y se robaron las contraseñas y datos de contacto (dirección, teléfono, correo electrónico) de *77 millones de usuarios* de la PlayStation Network. Ah, y también tiraron la tal PSN por casi un mes.

Bueno… y eso qué tiene que ver? Pues muy sencillo. Armado de una dirección de correo electrónico y una contraseña, no es difícil para un atacante investigar en múltiples servicios, para determinar si en alguno de ellos el usuario utilizó la misma contraseña. Y efectivamente esto pasó: cientos de reportes surgieron en internet acerca de múltiples otros servicios vulnerados. Por utilizar la misma contraseña.

Las consecuencias pueden no ser fáciles de vislumbrar, pero ahí va un posible camino: obtengo tu contraseña y tu correo. Si usas *esa* contraseña en tu correo, tengo acceso a tu correo. Con tu correo, puedo obtener acceso a tu facebook, twitter, etc. Puedo hacerme pasar por tí. Con un poquitín de suerte, puedo obtener suficiente información personal tuya (digamos, escribiéndole un correo a algún familiar desde tu cuenta de correo) como para fingir ser tú en el “mundo exterior”. Y mejor no le sigo, tanto por no dar ideas, como para no asustar de más… creo que basta con esa idea.

Y si crees que esto solo pasa una vez en la década, estás equivocado. Lamentablemente, los programadores también son personas, y muy lamentablemente, cometen errores. A veces garrafales. Es tremendamente común descubrir que páginas web que manejan usuarios y contraseñas (hoy en día, casi todas) no las manejan de manera segura; ni siquiera con tantito cuidado, vamos. Hay más carnita en ese tema, pero será objeto de… otro post.

Bueno, cómo le haces para recordar todas esas contraseñas? Hay programas que te ayudan. Keepass es una excelente opción si solo utilizas contraseñas en tu computadora; trabaja con Linux, Windows, Mac, etc. Si quieres algo un poco más universal, LastPass admite teléfonos móviles y hasta puedes configurar una memoria USB para servir como token, aunque para todo eso te cuesta extra. Pero opciones hay…

Contraseñas seguras: porqué más es siempre mejor

Seguramente, al registrate en un sitio web, banca electrónica, o cualquier otro servicio que solicite contraseña, has encontrado un mensaje como el siguiente:

La contraseña debe contener al menos 8 caracteres, pero no más de 12, y debe incluir al menos una letra y un número

(Ciertamente es una pobre política de contraseña segura, pero se entiende el ejemplo)

¿Porqué es esto? Bueno, es probable que hayas escuchado que esto hace más segura a tu contraseña. Pero… es cierto esto?

Dejemos de lado por un momento la posibilidad de que alguien se robe tu contraseña directamente de los servidores del sitio (eso es tema para otro post, coming soon). Supongamos que lo que queremos evitar es que alguien la “adivine”. Seguramente, gatito33 es lo suficientemente “diferente” para que alguien la adivine (a diferencia de, digamos, “gatito” a secas). Y probablemente estaremos en lo cierto, si por “alguien” nos referimos a un humano común y corriente. El problema es que, cuando alguien quiere obtener tu contraseña, usualmente no se la pasa adivinando y probando manualmente una por una (sí hay casos así, pero, a diferencia de lo que Hollywood nos quiera hacer creer, son los que menos nos preocupan). No, la preocupación mayor es lo que se conoce como un ataque de fuerza bruta.

Mediante este método, un atacante puede intentar adivinar miles (dependiendo de los recursos de cómputo a su disposición, puede ser millones) de contraseñas por minuto. Evidentemente, tiene que probar todas las combinaciones. Por ejemplo, si quisiera yo adivinar una contraseña de 4 caracteres o menos que utilice sólo letras minúsculas, tendría que probar:

a
b

z
aa
ab

az
ba

zz
aaa

zzzz

Si mi contraseña es “gato”, estará en esa lista. Y… cuántas son las que tiene que probar? Si recuerdas tus clases de probabilidad y estadística, esto se calcula fácilmente. Son todas las permutaciones de las letras del alfabeto en 4 lugares – o, en fórmula: 26^4 (26 elevado a la cuarta potencia). Esto es, 26*26*26*26, o bien, 456,976. Un numerote.

Pero, si dijimos que un atacante puede adivinar miles (o, en casos extremos, millones) de contraseñas por minuto, cuánto tiempo puede tomarle adivinar mi pequeña contraseña? Muy poco. Digamos que un atacante puede intentar un millón de contraseñas por minuto. En menos de 30 segundos, ya tendrá mi contraseña.

Uff! Entonces una contraseña de 8 caracteres será mucho más segura, no? Efectivamente. Y más del doble, de hecho. Consideremos que para adivinar una contraseña de máximo 8 caracteres, la fórmula sería:

26^8 = 208,827,064,576 = Doscientos ocho mil ochocientos veintisiete millones (!) y fracción.

Nuestro mismo atacante tardará… pues 208,827 minutos en adivinar esta contraseña. Lo cual es igual a… 145 días. Más de 4 meses. Caray, pero nuestro estimado de un millón por minuto puede ser bajo. Las botnets permiten controlar miles de computadoras a la vez! Démosle más ventaja a nuestro atacante. Supongamos que puede calcular 1 millón de contraseñas *por segundo*. De ser así, calcular todas las contraseñas de máximo 8 letras le tomaría 2.4 días.

NOTA: Hay que considerar que las políticas de contraseña, sin embargo, no suelen decir “de 1 a 8 caracteres”. No, en realidad dicen algo así como “mínimo 6 y máximo 10 carácteres”. Si solo utilizaramos letras, las posibilidades son 26^10 – 26^6 = 1.411667867×10^14 = un numerototote (141 billones y fracción). De ahora en adelante seguiremos con estas consideraciones.

Pensemos ahora en la política de contraseña arriba descrita: “La contraseña debe contener al menos 8 caracteres, pero no más de 12, y debe incluir al menos una letra y un número”. Esto significa que nuestra base (el 26) cambia, porque ahora consideramos las letras (26) y los números (10). Entonces nuestra fórmula sería: 36^12 – 36^8 = 4.738378517×10^18 (o bien, 4.7 trillones). Nuestro atacante (el de un millón de contraseñas por segundo) debería pasar 150,252 AÑOS intentando obtener nuestra contraseña, de todas las posibles.

Ahora, un poco de matemática aburrida (y no, lo de arriba no fue matemática aburrida). Si ya estás por dormirte, sáltate el siguiente párrafo, y lee las conclusiones.

Nótese que cada que agregamos un nuevo caracter (es decir, aumentamos el tamaño de la posible contraseña) disparamos exponencialmente el tamaño de la contraseña; no así cuando aumentamos el tamaño de la base (el crecimiento es más bajo). Esto cimenta la teoría de que es mejor utilizar contraseñas largas (ej. “estaesunacontraseñalargaquenosepuedeadivinarfacilmente” – 26^55) que una contraseña más corta pero con más caracteres (ej. “U7w!5q3qw&” – 60^10 considerando 8 símbolos especiales), en particular porque a la persona promedio se le hace mucho más sencillo recordar la frase que el garabato del segundo ejemplo. Más fácil de recordar + más difícil de vulnerar es una muy buena combinación 😉

El punto es: usa más en tus contraseñas. Si vas a utilizar contraseñas cortas (nunca abajo de 8, pero no superiores a 10 o 12 caracteres) es *imprescindible* que utilices letras mayúsculas, minúsculas, números, y símbolos especiales. Si no te gustan esos garabatos, utiliza contraseñas MUY largas, de más de 20 o 30 caracteres. Una forma fácil es utilizar frases, quitando espacios, acentos y puntuación. Por ejemplo:

“El respeto al derecho ajeno es la paz” –> elrespetoalderechoajenoeslapaz ==> 26^30.

Y, por supuesto – no olvides cambiarla con frecuencia. Buen consejo para la ropa, buen consejo para las contraseñas 🙂

La SOPA y otros condimentos

Pues formalmente acabo mi protesta, después de 100 (?) horas de blackout. Bueno, digamos que lo quise dejar unos días… y ya perdí la cuenta 😀

Si a alguien le interesa aún leer *porqué* hubo un blackout en sergiob, con todo gusto dejo el link.

Pero la SOPA no fue lo peor que me pudo pasar esta semana. Nop, lo peor que me pudo pasar esta semana fue una taza de café… mejor dicho un termo… que acabó bañando mi lap. Sí, mi nueva lap. Esta secándose en estos momentos allá en la oficina; veremos mañana si todavía funciona. Y si no, como dice Homero… vuelve a crecer, no? O la volvemos a comprar :3

En fin… en otros temas estoy preocupado porque me la vivo cansado y no sé porqué. En serio, en las mañanas voy manejando a la chamba y tengo un sueño… después de 6, 7, 8 horas de sueño! Esto no me pasaba en la facultad. Igual no me estoy tomando mis vitaminas… ah, pero que tal en la noche, eh! Bloggeando y toda la cosa.

Otra vez dejé un poco abandonado estos lares del blog. A ver si a partir de mañana cambio las condiciones. Conocí un nuevo blog que me llamó mucho la atención, curiosamente de un link en twitter. Ahí lo pueden ver ustedes en el blogroll (un poco más abajo a la derecha, si estan leyendo este post como el primero).

Saludines… ya no tomen café si no saben aguantar los efectos… XD

Configuraciones APN Telcel

Post original aquí

INTERNET 3G

Nombre: Mexico: Telcel: Internet (a gusto del usuario)
APN: internet.itelcel.com
Proxy:
Puerto:
Nombre de usuario: webgprs
Contraseña: webgprs2003
Servidor:
MMSC:
Proxy de MMS:
Puerto MMS:
MCC: 334
MNC: 020
Protocolo de autenticación: PAP
Tipo de APN:

MENSAJES MULTIMEDIA MMS

Nombre: Telcel: Mensajes Multimedia (a gusto del usuario)
APN: mms.itelcel.com
Proxy:
Puerto:
Nombre de usuario: mmsgprs
Contraseña: mmsgprs2003
Servidor:
MMSC: http://mms.itelcel.com/servlets/mms
Proxy de MMS: 148.233.151.240
Puerto MMS: 8080
MCC: 334
MNC: 020
Protocolo de autenticación: PAP
Tipo de APN: mms

CONFIGURACION WAP GPRS

Nombre: Telcel GPRS (a gusto del usuario)
APN: wap.itelcel.com
Proxy: 148.233.151.240
Puerto: 8080
Nombre de usuario: iesgprs
Contraseña: iesgprs2002
Servidor: http://upaapps.telcel.com:8582/telcelwap.wml
MMSC:
Proxy de MMS:
Puerto MMS:
MCC: 334
MNC: 020
Protocolo de autenticación:
Tipo de APN: default

Gmail desde consola (UNIX) con mutt

Instalas mutt:

apt-get install mutt

Configuras mutt (usualmente, .muttrc en tu home):

set from = "user@gmail.com"
set realname = "Guillermo Garron"
set imap_user = "user@gmail.com"
set imap_pass = "password"
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set postponed ="+[Gmail]/Drafts"
set header_cache =~/.mutt/cache/headers
set message_cachedir =~/.mutt/cache/bodies
set certificate_file =~/.mutt/certificates
set smtp_url = "smtp://user@smtp.gmail.com:587/"
set smtp_pass = "password"
set move = no
set imap_keepalive = 900

(nota: imap_user e imap_pass no son necesarios para envío).

Envías correo:

mutt -s "Subject" [direccion] {direccion 2} {...} {-a "Adjunto"}

o bueno, con la redirección del cuerpo.

Originalmente publicado el 2 de Diciembre de 2011