 Bien, bienvenidos a todos. Esto como verán es algo improvisado. Primero, ya me sorprendí de ver a tanta gente porque, bueno, el título no era absolutamente para nada atrayente. Así que me gustaría preguntarles cuántos de ustedes tiene alguna idea sobre de qué vamos a hablar durante la próxima media hora. ¿Alguna idea? OK. Bueno, es algo. Una advertencia. Esto viene de freaky, viene de cosa muy retorcida. Así que en donde se pierdan, por favor avisen. Y, bueno, tratamos de retomar así, dado que no somos tantos, por lo menos no perdamos mucha gente en el camino. Sí. Así que, bueno, esto va de Linux Capability. Y vamos a tratar de aprender un poco más sobre qué es esto. Bien. Por cierto, las eslays están en inglés, pero porque también voy a dar esta charla en DepthConf y daba fíaca hacerlas en dos idiomas. Así que sepan disculpar. Pero la conferencia va a ser en inglés español. Ya hice. ¿Alguna idea de por qué ocurre eso? Bien. ¿Cuál es el problema? El problema es que en los sistemas Linux o Unix en general, tenemos dos tipos de usuario. Uno, que es el with zero, el usuario con número de identificación zero, que es root. Y es un semi Dios, no un semi, un Dios. Hace lo que quiere. Y tenemos otro tipo de usuario que no es root, que es otra cosa que no sea ID zero. Sí. Entonces, en esta extrema separación, digamos, necesitamos algo en el medio muchas veces. Sí, este es un típico problema entre root versus no root. Sí, muchas aplicaciones necesitan hacer algunas cosas como root, pero solo algunas cosas. Y no queremos dar todo el poder de root. Porque ustedes saben, Spider-Man nos enseñó que con un gran poder debiene una gran responsabilidad. Así que, justamente por esto, no siempre queremos todo el poder que nos da root. Sí, hay veces que queremos cosas menores. Entonces, para este tipo de problemas, hemos intentado como comunidad solucionarlo de diversas formas. Una figura a través de un archivo que se está en et cetera suders, esta línea es posiblemente una línea del et cetera suders. ¿Alguna de ustedes tiene alguna idea que hace esta línea? Adelante, Pablo. Al micrófono, por favor. No está aprendido. Permite que cualquiera pague la máquina sin especificar el password. Perfecto. Cualquiera. Cualquiera persona que esté en el grupo admin. Cualquier persona que se llame admin. Pero good enough. O sea, cualquier persona con el usuario, con el nombre de usuario admin, sin necesidad de pedirle la contraseña, puede correr este comando como ruto. Sí. Así que es una forma de decir, OK, bueno, esta persona tiene un poder de root, pero no total. La otra forma que hemos tenido de hacer este tipo de cosas es con el bit suite. Arriba las manos los que saben aquella que significa esto del bit suite. OK, estamos en un problema. Les aviste que esto iba de friki. Bueno, vamos a tratar de explicar un poco qué significa. Algunos de ustedes, bueno, esto está muy alto, así que voy a usar las sombras y esto no se debe hacer. Algunos de ustedes saben lo que significa esta parte en un archivo? Sí. Arriba las manos lo que saben eso. Bueno, unos cuantos. Bien, algo es algo. Vamos andando. Bien, vamos a ver si tengo alguna de modos sobre el tema. Bien, a ver, por ejemplo, hice un pequeño programita en C que es muy sencillo. Básicamente hace un llamado sistema. Y pide un shell y corre el comando, quién soy. Juamai. Sí, conocen el comando Juamai. Es muy sencillito. Simplemente te dice quién sos. Una locura. Bien, así que voy a compilar mi Juamai. Sí, así que lo estoy corriendo. Me contesta quién soy. Bien, si yo ejecuto este comando, alguna idea de qué hace este comando? Bueno, este comando. ¿Alguna idea de qué hace ese hmod? Cambia los permisos. Perfecto. Bueno, este en particular agrega al grupo y al usuario el bit suite. Sí, entonces, si uno hace ls, la, Juamai, fíjense que ahora. Primero, bueno, Michelle me lo pone en rojo porque es un archivo peligroso, de alguna forma. Y me dice, OK, mira qué este archivo tiene. En vez de una X que suele aparecer acá, sí, más o no están asociados que acá debería aparecer una S. Esa S significa que este archivo va a correr con los privilegios de la UNER, en este caso, con los privilegios de Luciano, ¿sí? Con lo cual, si vuelvo a correr mi Juamai, sigo siendo Luciano, ¿sí? Porque ese archivo se ejecutó con los privilegios de la UNER que es Luciano. Si le cambio la UNER, ch1, root, a Juamai, obviamente necesito hacerlo como root. Para esto, no cualquiera le puede asignar a root un archivo que hice mal. Sí, bueno, acabo de perder el bit suite. Fíjense, ahora, entonces, este archivo pertenece a root, pero no tiene el bit suite, ¿sí? Entonces, cuando lo corro, sigo siendo Luciano, ¿sí? Entonces, ahora le agregué el bit suite. Esto es una nota al margen. Este comando es muy útil. Si ustedes corren un comando y se dieron cuenta que deberían haberlo corrido como sudo, pueden hacer sudo, admiración, admiración y repiten la última línea. Es una estupidez, pero a mí es útil. Y creo que no mucha gente lo sabe. Entonces, mi nuevo comando, Juamai, ¿sí? Ahora es cuando lo corro, me contesta que soy root, ¿sí? Esto es porque el bit suite, lo que le dice es que ese comando se corre con los privilegios de la UNER, ¿sí? ¿A cuántas personas perdí, digamos? ¿Cuántas me vienen siguiendo, ¿sí? Porque en algún momento se va a complicar mucho, ¿sí? Así que, bien, decimos que estas soluciones, a veces, que no son tales, ¿no? Porque ¿qué ocurre con este tipo de soluciones? Lo que hacen es darle a una tarea el poder total, pero de forma temporal. Pero de todas formas, le dan el poder total. Y eso es algo que no quisiéramos que ocurra. Un ejemplo muy simpático de esto es ping. Ahora vengo a esto, ¿sí? Así que esperemos. Fíjense que ping, ¿cuántos conocen el comando ping? Menos mal. Vamos a por él. Si fíjense que ping, o un comando que utilizamos mucho, tiene este bit suite, ¿sí? Suite es S-U-I-D, significa SetUserID. Entonces, este comando ping tiene este bit suite. Y, bueno, ¿y qué significa esto? Que cada vez que corremos el comando ping, en realidad lo que está haciendo es corriendo como ruto. Una prueba de ello es que si copiamos el comando este en cuestión, me parece que porque ya lo pegué acá en algún lado, aguarden un segundito, esto es fuera de programa. Bien. Copio el comando ping a mi directorio y al copiarlo, pierdo el bit suite, ¿sí? Ya no lo tengo más. Ahora hay una X en vez de una S, ¿sí? Entonces, al ejecutarlo, tengo una operation not permitted. Fíjense que si este mismo programa lo ejecuto normalmente funciona, ¿sí? Pero, bueno, ¿por qué ocurre que ping necesita correr con privilegios de ruto? ¿Alguna tiene alguna idea de por qué? ¿Vos tenés una idea de por qué? Por favor, al micrófono. No, no, al micrófono. Tienes que ir al micrófono y hablar ahí. El micrófono puede ir a vos. Mira, bueno, es el tema de Mamá y la montaña. Porque necesita permisos para poder abrir el socket local y hacer el paquete, sí me pido. Perfecto. Necesita, bueno, no sé si se lo puedo explicar de forma llana, pero necesita eso, que dijo él. Ajá, el ping en Android no tiene el bit suite. Entonces da ese error y no anda. Una cosa útil como la gran. Vamos a, para entender un poco más qué significa esto, vamos a correr el comando S3. No sé si alguna de ustedes estuvo en la charla vía la mañana, en la que, no me acuerdo el nombre del gallego este, comentó una analogía en la que en Linux las aplicaciones están en un restaurante y hacen los pedidos al que está en la cocina a través del mozo. ¿Algunos de ustedes recuerda esa analogía? Bueno, ese mozo eran las system calls. Entonces, S3 es una forma de saber todas las system calls que una aplicación realiza, sí, que pide de entrada, que pide de plato principal, de postre, sí. En este caso hace un montón de system calls, como verán. Una de ellas da un error. Hay que buscarla. Anda por acá. Ajá, acá la encontré. Fíjense, ping intenta abrir un socket, como dijo nuestro amigo Drek. Los simpáticos lo intenta abrir en modo raw, en modo crudo. Y eso es algo que solo root puede hacer. Una tarea normal no puede abrir un socket en modo crudo. No viene mucho al caso que significa eso, pero quedémonos con esta idea de que ping lo que requiere es una característica de root, no todas las características. Quiere, en particular, lo que se llama una capability. Sí, esta tarea, por decirlo así, requiere una capacidad particular. La de abrir un socket en modo raw. En general, las tareas de root se pueden distinguir en 35 capabilities, en donde están a apagar la máquina, a cambiar la hora. En fin, hay un montón de tareas. Una de ellas es abrir un socket en modo raw. Así que vamos a darle a nuestro nuevo ping, a este ping que no andaba, vamos a darle esta capability. Para ello, vamos a utilizar un comando que se llama SetCap. Ahora les digo en qué paquete viene. Obviamente, para poder otorgar una capability, necesitamos tener una capability que es la de otorgar capabilities. Esa solo la tiene root de movida, así que esto lo vamos a tener que correr con sudo. Y vamos a otorgarle una capability que se llama NetRow, si no me equivoco. Esta parte que escribía continuación de EP, por ahora no la vamos a tratar, pero tenganla en cuenta. En algún momento las vamos a mencionar. ¿Sí? No hubo efecto demo, pero lo va a ver. Créame. Sí, entonces de esta forma tenemos un ping que no tiene BitSuite y que tiene la capacidad de abrir un socket. Si alguien toma control de este ping a través de una vulnerabilidad que tenga, no va a poder hacer otra cosa que abrir un socket en modo raw, que es básicamente lo que ping hace. No va a poder escribir en cualquier lugar, no va a poder cambiar la obra, no va a poder apagar la máquina. ¿Cuántos me siguen hasta ahora? Bueno, vamos, como queremos. Este no me sigue porque está dormido, no es mi culpa. Sí, acá les pusemos menos el, después les paso los slides, van a estar en penta. Así que esto es solo para fines de documentación, para que los tengan a mano. Sí, claro que sí. Pero si consigo abrir el socket en modo raw, no puedo llegar a hacer un escalamiento total a root por algún otro lado o algo. Lo de cambiar la obra a mí me dio un poco de miedo. Cambiar la obra te da miedo. Y sí, porque podés llegar a hacer unos timing attack, medio a medio. Ah, sí, sí. Bueno, eso es un tema interesante. Sí, ahí, bueno, lo pensaba tratar un poco más adelante, pero básicamente ahora hay toda una controversia sobre si las capabilities en realidad no son todas root equivalente. Si tener una de ellas en realidad no te da todo el poder de root. En el caso de abrir un socket en modo raw, creería que no es tan grave. O el escenario tendría que ser demasiado retorcido. Pero en algunos de estos casos es un poco más obvio. Pero lo vamos a ver un poquito más tarde. Bien, entonces, lo que estamos tratando de atacar en este momento es lo que se llama el principio del mínimo privilegio. Entonces es darle a un programa los mínimos privilegios que requiere para poder correr. Algo también interesante que también me gustaría mostrarles. Fíjense qué pasa si les doy la misma capacidad al ping normal, al ping tradicional. Cuando lo ejecuto, Dmessage, ¿cuántos conocen el comando Dmessage? Bueno, es para ver los mensajes del carnal. Cuando lo ejecuto, OK, creería que no. Con GetCup, lo que hago es imprimir las capabilities de un binario. Y claro, para eso no hay que darle este parámetro. Así que ping tiene las capacidades. Bueno, en algún lugar del Dmessage debería avisar de que está corriendo con bit suite y con una capacidad. Así que va a tomarla de menor privilegio. Por alguna razón no lo estoy viendo acá. ¿Será que no estoy ejecutando? En algún momento dejó de imprimir esto, pero no viene mucho caso. Además, necesito conectar esto, sino. Entonces, todo el objetivo este de capabilities es romper con el modelo de root, en donde hay algo que tiene como es el dios este o el simple en mortal y tener variedades en al medio. Las capabilities más o menos el concepto existe desde la versión del carnal 2.2, que fue hace 12 años, 13 años ya, 1999. Y cuando se extendió a eso de los archivos, que fue lo que vimos hasta ahora, se empezó a ser usable. Entonces, la cosa empieza a tener otro sabor. Así, todo es algo relativamente nuevo. Dado que implica modificaciones como muy en el paradigma, todavía hay muchas discusiones de cómo debería hacerse y cómo debería hacerse bien. Algo simpático es que las capabilities se almacenan en una meta información de un archivo que está en el inodo, con lo cual solo puede funcionar en los sistemas de archivo que tienen extended attributes, que no sé si eso les dice algo, pero básicamente casi todos los sistemas de archivo de Linux tienen extended attributes, NFS no tiene extended attributes, pero tampoco tiene otro montón de cosas, así que no nos vamos a hacer problema. Bueno, y se basa básicamente en estos dos escutables, get cap y set cap. Estos escutables vienen adentro del paquete, lib2bin, libcap2bin. Viene con otra batería de aplicaciones. Vamos a ver un poquito de qué va. Esa batería de aplicaciones. Recuerdan nuestro pin, nuestro pin fixeados. Bueno, lo vamos a poner a dormir. Y si nos fijamos que el número de procesos tiene ese pin, poder está corriendo varias veces, con este comando podemos ver cuáles son las capabilities de un proceso en particular. En este caso el pin está corriendo, ya que estamos, podríamos matarlos. Con cap sh, tengo anotaciones acá, así no me equivoco. Con cap sh corremos un sub shell para sacar algunas capabilities de su sub shell. Sí, capaz que la demos demasiado complicada. Sí, la dejamos para que pase. Ah, y este pan cap, también tengo una demo preparada para eso, pero tuve la mala idea de actualizar libcap antes de venir y resulta ser que hay un bag y no funciona. Así que, qué va. Creo que está acá de hecho, así que ahora voy loco esto. Bueno, más o menos ya corrimos. Set cap, ya tenemos una idea de cómo funciona. Sí, hay que correr set cap, después mencionar la capability, que puede ser alguna de las 35 que hay en la lista. Un operador, sí, que funciona como sh modo. Y después un flag. Ahora vamos a ver qué significa este flag. Con respecto a la cantidad de capabilities que hay, pueden en la página de manual man capabilities. Sí, pueden ver una lista de las capabilities que hay en este momento. Esta, por ejemplo, permite hacer un ch1 arbitrariamente. Bueno, esta es bastante peligrosa. Permite simplemente bypassir los controles cuando se ejecuta o se escriba o se lee un archivo. Así que cada vez que uno tiene un acceso al file system, el kernel chequea si uno tiene privilegios para eso. Ese chequeo se saltea. En fin, este, por ejemplo, permite matar cualquier proceso. Como verán, hay muchas capabilities. Sí, este es el que acabamos de usar. Naturro. En fin, después le pueden pegar una mirada si quieren. Bueno, y esta fue la demo que hicimos. También para fines de documentación la dejo acá. Entonces, al parecer, estas capabilities nos permiten, de alguna forma, evitar el BitSuite, ¿sí? Este BitSuite, que la mayoría de los casos está sobre binarios que están sumamente probados y están desde años antiquísimos en los sistemas. Con lo cual no debería preocuparnos mucho. Esto también es una total marca. Pero bueno, acá más o menos hay una pequeña lista de cuáles son algunos de las aplicaciones con el BitSuite que hay en mi sistema. Este pequeña línea acá arriba les puede decir todas las aplicaciones con BitSuite para route que hay en este sistema. Y bueno, en Debian, el security team tiene una colección de todos los programas que corren con BitSuite adentro de este archivo. Esta media es actualizada. Así que si alguna quiere actualizar, bienvenido. Pero bueno, nos da una idea más o menos de qué estamos hablando. El data, suido, esta es la lista, va a ver más o menos cuántos hay con route. Hay casi 300 binarios en los sistemas de Debian que corren con route, con BitSuite de route. Fíjense que hay otros que no corren con BitSuite de route. ¿Alguno me puede decir cómo son los permisos de ese ejecutable del que acabo de sombriar? En el micrófono, por favor. Por favor, no se pelean que hay un solo micrófono. Vamos, vamos, es el actitud. Te da los privilegios del grupo games. Así puedes escribir los high scores al directorio. Exactamente. Este ejecutable va a ejecutar con los privilegios del grupo games para seguramente escribir los high scores. Este tipo de binarios no es peligroso, porque corre con privilegios a un menor escarruto, con lo cual no estamos focalizados en eso. Hay otros ejemplos, no, en donde, por ejemplo, Mailman corre con el grupo de usuario de list y hay otros ejemplos, pero básicamente los que nos interesan son los BitSuite que corren como route, porque son los peligrosos. Hay que tener en cuenta que estamos distribuyendo las cosas que pueda ser route y así todos son cosas peligrosas, porque las pueda ser route. No se las podemos dar a cualquiera. Así que eso nos conecta con el siguiente tema, que es darles capabilities a programas que no corren con BitSuite. ¿De qué estoy hablando? ¿Cuántos de ustedes utiliza Warejack? ¿Cuántos de ustedes saben lo que es Warejack? Bueno, ahí me gusta un poco más la idea. Warejack es un programa muy útil, es un snífaro. Sí. Ahí arriba, voy a tipiar ahora. Warejack. Fíjense que cuando lo corro, cuando lo corro como usuario común, ¿cómo? Sí. No, no. Pero está bien, porque ¿por qué crees que ocurre? ¿Por qué crees que pensé lo que ocurre? Ahora de un segundito que voy a recetearla, porque lo tengo seteado a mi comienzo, así que lo voy a des-setear. Bien, vamos a empezar de vuelta la demo, ¿sí? Vamos a ejecutar Warejack como usuario común. Y fíjense que en este lugar debería estar las interfaces en las que puedes nífiar. Como nífiar es un privilegio que solo route pueda hacer, cuando lo ejecuto como usuario común, me dice que no puedes nífiar, porque no soy route. Entonces, voy a cerrar Warejack. Voy a cerrar este Warejack también. Y voy a ejecutar Warejack, pero esta vez lo voy a ejecutar con privilegios de route. Cuando ejecuto Warejack con privilegios de route, me sale un cartel que me dice, cuidado, no ejecute Warejack como route, pero es la única forma en que Warejack es útil cuando lo ejecuto como route, porque me permite nífiar. Entonces, estoy como en una especie de problema. Sí, fíjense que en este caso sí me aparecen las placas acá para poder nífiar, ¿sí? Arriba las manos los que entendieron este problema. OK, bien. Y para ello, el proceso que se encarga de ser el sniffing en Warejack es este binario, el damp cap. Sí, para ello le voy a dar algunas capabilitias. Le tengo que agregar cap net route. Y también le tengo que dar cap net admin, porque tiene que poder levantar las placas. Así que cuando ejecute Warejack, ojo, ¿qué pasó? Ajá, gracias. Ahora puedo levantar Warejack con privilegios que no son de route, son parcialmente routes, solo puedo nífiar y no correr, todos los riesgos que correrías y lo correría como route. Sí, así todo como comentó Pablo, hay algunas capabilitias que son route equivalentes. Ya vamos a llegar a aquello. Alguna pregunta sobre este ejemplo? Sí. Bueno, TCP damp es otro nífiar. También es útil que corra con estos privilegios, ¿sí? También es el caso de NTP date. NTP date serio para ajustar la hora. Y, bueno, tiene sentido de que requiera el privilegio para ajustar la hora, para modificar la hora. Y además requiere un privilegio muy particular que es que levantar un puerto por abajo del 1024. Ustedes saben que solo route puede levantar cosas que escuchan por abajo del puerto 1024. Entonces hay que darle ese privilegio porque NTP date requiere el puerto 1, 2, 3. El binario mod prop es el que se utiliza para cargar módulos en el kernel, ¿sí? Y hay que darle privilegio para ellos si se quiere. Hay que tener en cuenta que una vez que, sí, dale, dale, deberías tenerlo un poquito más cerca. ¿Esto es un ejemplo a futuro o hoy en día el sistema de de bienestine esos capabilitis seteadas de esa forma? No, no las tiene. El único archivo que encontré en mi sistema con capabilitis es el genome keyring que lo instala. A ver si lo tengo por algún lado. Debian. Esto es solo para Debian Freakies, lo que estoy haciendo ahora. No hace falta que me sigan todo el mundo. Sí, me encontré con este post instala que básicamente extiende el IPC Lock, una capabilitie particular, para el keyring. Fue el único que me encontré que las utiliza hoy. Tal vez estaría bueno durante Debian Freak de conversar si conviene ponerlas y no, si es demasiado trabajo al pedo, pero después lo podemos ver. Bueno, en fin, hay que tener en cuenta que cuando uno extiende un programa que no es suite root con capabilitis, está dándole privilegios de root o casi a alguien. Entonces hay que tener particularmente cuidado con quién puede ejecutar ese programa, porque ahora todas las personas que pueden ejecutar Warshack también pueden esnifiar. Entonces hay que tenerse cuidado. Si uno corre simplemente esta línea, ahora todo el mundo va a poder levantar un módulo en el kernel. Y levantar un módulo en el kernel es muy peligroso. Entonces básicamente hay que limitar la ejecución de ese archivo. Esto es muy importante. Vamos a hablar un poquito de los flux sets. Tal vez convenga. Realmente esto es muy importante. Algún tiene alguna duda sobre esto, porque es muy importante. OK. Y vamos a hablar un poquito sobre estos flux sets. ¿No? ¿Qué significa en estas E, P, I, que venía pues de 1? I creo que no utilicé todavía, pero ya lo haré. La E básicamente son las capabilitis en las que puedo ejercer en este momento. Si son las capabilitis que tengo en la mano. Las P son las que tengo permitido utilizar. Si son las que tengo como en mi caja de herramientas. Si un programa puede elegir por sí mismo deshabilitarse a sí mismo una capacidad. Y después poder volver a recuperarla, siempre y cuando la saque del conjunto E. Pero una vez que la sacó del conjunto P, no la puedo volver a recuperar. La perdigo para siempre. A veces que el programador quiere eso a propósito, quiere descartar una capabilitis y no volver a utilizarla. En el caso de, bueno, siempre E es un subconjunto de P. En el caso del conjunto I son las capabilitis que se pueden heredar. Heredar no a través de un fork, porque el fork copia absolutamente la memoria. Entonces no hay nada que heredar ahí. Sino a través de la Cisco ESC. Aquellos que no codean mucho en C, estos no le puede decir absolutamente nada y pueden olvidárselo en este momento. No hay ningún problema. Pero aquellos que sí codean en C y tengan alguna pregunta, este es el momento de hacerla. O no hay nadie que codee en C o nadie tiene una pregunta, ¿sí? Bueno, entonces, ¿qué significa esto de tener una capabilitis en el toolbox y descartarla? Bueno, eso se puede hacer a través de una Cisco que se llaman CapGet y CapSet. Están incluidas en el kernel, a partir de 2.2, y nos permiten hacer eso. Cuando ejecutamos nuestro programa, por ejemplo, podríamos hacer nuestra propia versión de PIN y descartar automáticamente alguna de estas capabilitis. Hay una vers, la LibCapNG de Next Generation. Es una especie de abstracción de estas Cisco y son realmente fáciles de usar. Además, tienen Binding en Python, que a mí particularmente me gusta Python, entonces las uso acá de tanto. Bueno, esta es la demo truncada que no le voy a poder mostrar. Es a través de PamCap. Más o menos les comento cuál es la idea de la demo. Sí, básicamente, queremos, por ejemplo, hacer un usuario que se llame Subroot, que sea como root, pero sin tantos privilegios, ¿sí? Este Subroot le damos la capacidad de borrar cualquier archivo del sistema. Sólo eso, solo eso se puede hacer como root. Sólo borrar toda la capacidad del archivo del sistema. Entonces, tendremos que ir a etcetra securitycapability.com, agregar esta línea. Esta capability significa que no va a chequear los privilegios cuando se ejecute una función de Subroot y, además, simultáneamente hay que decirle al RM que tenga el mismo privilegio en EI. Vamos a poquito. Esto va a extender el conjunto P de este usuario. Y esto va a permitir que este binario ejecute con E. O sea que siempre dijimos que era un subconjunto de P. Así que en la intersección de los conjuntos, siempre y cuando un usuario con esta capability se encuentre con un comando con esta capability va a poder ejecutarlo y ejercer esa capability. ¿Sí? Entonces, en el momento en que esas dos cosas se junten, cada vez que hay un RM de uno solo cualquiera, no se van a chequear los privilegios y lo va a poder ejecutar. Obviamente, se ejecuta otro comando, incluso si tiene el mismo efecto como al RM, ese comando va a fallar. Porque el comando está asociado a esta capability. Merece la pena que les muestre este selvage por el cual no anda. Bien. ¿Y por qué estas capabilities no son tan usadas, no tienen tanto acabida? Lo que les acabo de mostrar es realmente una friqueada. Muchos usuarios avanzados de Linux no lo saben. Incluso muchas personas que se dedican a seguridad en Linux no lo saben. Sí, es realmente una friqueada de la que acabamos de conversar. Pero no es mi culpa sino de los organizadores. Yo pensaba de una charla de lo más filosófica sobre cómo contribuían Debian, pero me dijeron que ya había de esas cosas softy, que me dijeron algo técnico. Así que yo cumplí. Sepan disculpar. Bueno, ¿por qué no están utilizados esta aplicación? Me diría distancia. Creo que es porque simplemente es una cosa totalmente retorcida. La segunda distancia me parece que es porque muchas aplicaciones muy básicas no ignoran este atributo extendido. Como Mube, CP, TAR. Bueno, esta es una aplicación que utilizamos los empaquetadores de Debian para setear permisos. Y básicamente no tenemos una forma de setear capabilities a través de esa aplicación. Si hacemos CP menos A, las capabilities se copian. También hay evidente una falta de herramientas para manejar estas capabilities. Creo que también las hay en el otro sentido. Pero bueno, no viene mucho el caso. Y también está el problema de que muchas de las capabilities implican privilegios de ruto. Era algo de lo que conversamos con Pablo. Por ejemplo, si tenemos, si logramos explotar esta capability, de ignorar los privilegios para escribir o leer de un archivo, simplemente podemos modificar el etcétera password y ganar ruto. Sencillamente con eso. Si tuviésemos esta capability de setear cualquier permiso, podemos resetear el permiso de etcétera password, modificarlo y ganar ruto. Si pudiésemos solo leer esta capability y nos permite leer en cualquier lado, podríamos leer el etcétera password y hacer un ataque de diccionario. Bueno, hay otros ataques, se me está acabando un poco el tiempo, así que no viene mucho el caso. Este es muy reto, este es muy simpático. No, este es también se le apena explicarlo. Con sysadmin se puede escribir en una consola, sin necesidad de ningún privilegio. Entonces podría esperar que ruto se logue en una consola y escribirle en su consola mis comandos. Es una friqueda linda, ¿no? Está simpática. Bueno, hablamos de cargar módulos en el kernel. Si uno puede cargar módulos en el kernel, puede hacer básicamente lo que quiera. Está nivel 0 en seguridad. Si tiene setweed, puede pasarse a root fácilmente. Si tiene kill y net bind service, puede matar el apache y poner un apache ficticio y un apache trollano y esperar hasta recoletitar credenciales. En fin, uno puede hacer varios ataques así, ¿sí? Incluso muchos, hay otros, digamos, incluso si no tienes ninguna capability, el hecho de correr solo con el usuario que se llama root te permita hacer varias cosas. Como, por ejemplo, meter un ejecutable adentro de la carpeta cron corre cada hora y, eventualmente, cron va a correr como root de verdad con todas las capabilities y va a ejecutar tu comando. Entonces, incluso solo con ser root pero ninguna capability puede uno llegar a ganar todas las capabilities. Evidentemente eso es porque cron ni siquiera plantea la posibilidad de que alguien que se llama root no tenga todas las capabilities. Será cuestión de ir evolucionando con cron un poco más seguro y consciente este tipo de cosas. Incluso hay ataques en internet en donde tener capabilities sobre mount abre nuevos ataques que antes no existían. Eso es por la forma en la que está diseñado mount que ni siquiera tenía en cuenta la posibilidad de las capabilities. El actual mount ya está solucionado ese vaga, pero existe la posibilidad de que correr con capabilities sea aún más peligroso. Así que, para cerrar algunas conclusiones que me gustaría que se lleven de esto tan retorcido que hemos visto hoy, ¿sí? Las capabilities, evidentemente, no son la panacea, no son la silver bullet, no son la solución a todos los problemas. Sin embargo, pueden ser útiles en algunas circunstancias. Por ejemplo, me es útil a mí para correr Warlock. Gran beneficio, ¿no? A algunas distribuciones ya se están planteando la idea de remover todos los bit suits de sus sistemas. Fedora 15 ya no tiene ni un solo bit suits en su sistema a través de capabilities. Yo no estoy seguro si esta es el objetivo. Simplemente lo menciono. Secubuntu se lo planteó como un objetivo también, sacar todos los bit suits. Lo que acá les comentaba, digamos, es tal vez demasiado trabajo sacar todos los bit suits para el poco o nulo beneficio que pueda llegar a tener. Es algo que también habrá que conversar con un poco más de detalles. Evidentemente es algo muy retorcido y muy difícil de entender. En el caso de Ping es bastante sencillo, pero en el caso de cosas un poquito más sencillas, como, por ejemplo, Mount, la cosa se vuelve un poco más complicada y más difícil de entender. Y eso implica, por ejemplo, reescribir Mount, que Mount lleva años escrito y ya nos gusta como está, como que no nos da como para tocarlo. Y bueno, lo peor de todo es que, por ejemplo, podemos, por ejemplo, cada vez que actualizo Warjack, pierdo mis capabilities. Porque mi sistema operativo no tiene ni en cuenta el hecho de que yo haya puesto capabilities. Mi sistema operativo es Debian, con lo cual un poco de bronca me da. Si ustedes quieren leermos, les dejo estos links muy interesante, sobre todo, este PDF, que es sobre cómo explotar estas capabilities. Lo he dicho, estas slides van a estar en penta para que ya se las puedan bajar. No estoy muy seguro cómo de penta se hacen públicas, pero alguna forma hay. Así que seguramente, si no, me pueden escribir un correo, ¿sí? Mi correo es esta, LucianoarrobaDebian.org, y yo se las puedo enviar. No hay ningún problema. Espero no verlos aburrido excesivamente. Ya, si tienen alguna pregunta, este es el momento. Si no, nos podemos ir a la siguiente. ¿Tenéis alguna pregunta? Dale. Nunca había escuchado las capabilities. ¿Esto es lo de Selinux o es distinto? Perdón. ¿Lo de? Nunca había escuchado de Capabilities antes de tucharlas. Muy buena tucharla, pero. ¿Y esto es lo mismo de Selinux o es distinto? No, es distinto. Selinux, Stack, Access, Control, es otro mambo aparte. Otra cosa totalmente retorrosida, sí. ¿Y la otra es, te parece que se puede atacar un Warrshack? Sí, con un archivo. Sí, ha habido vulnerabilidades en Warrshack. ¿Puedes agarrar un Wi-Fi y empezar a mandar paquetes? Hay vulnerabilidades sobre Warrshack, sí. Recuerdo haber pacheado una hace tres semanas. ¿Y la dron que roba la dron tiene 100 años de perdón? No sé de qué estás hablando ahí. Si alguien está te dándo un nifiar y le atacas el Warrshack, suena muy divertido. No, pero ¿puedes nifiar para fines académicos? No entiendo cuál es tu pregunta, no. ¿Por qué supones que soy un ladrón? No, no. No, no. Por favor, síntese. Yo no quiero más preguntas a ustedes. ¿Alguna otra pregunta? Sí, capaz que esto del micrófono fijo en el medio no es lo más sutil del mundo, pero sepan Puedo contar un chiste mientras vas al micrófono. No es mejor o nada. Ah, porque el caballero lo pagó. ¿No has discutido agregar esto con el maintainer de Warrshack? Sería un lindo feature. El tema es que hasta que no haya una forma mejor de poner capabilities en los paquetes, digamos lo que decíamos. Nosotros utilizamos para asetear permisos este comando entre los paquetes. Bueno, creo que vos sos un desarrollador de BNR, ¿no? Sí. Ah, ¿con lo cual te estoy? Bueno, hasta que Star Override no soporte capabilities, me parece que no es la forma. Si no hay que hacerlo a través de cómo hace Genevue Kirch, que es a través de un post inst, y es medio feo. Creo. Bien, muchas gracias por su tiempo. Hasta luego.