Mostrando entradas con la etiqueta conference. Mostrar todas las entradas
Mostrando entradas con la etiqueta conference. Mostrar todas las entradas

2022/09/28

Nerdearla 2022 Open de todo, la previa

El taller en realidad no es tan taller, ¿cuántas personas del ámbito de nerdearla tienen una edu-ciaa-fpga, el entorno armado e interés en hacer un taller de esto? Mmmh, poquita. En realidad es una charla larga, es que hay mucho tema pero aprovecho para que quien tenga la edu-ciaa-fpga y ganas, pueda ir probando en el momento, tipo taller.

Tal como he contado mi experiencia en https://seguridad-agile.blogspot.com/2021/09/h4ck3d-2021-configuracion-basica.html, el proceso para poder generar el bitstream es larguísimo. Para facilitar la vida de quien lo haga, he tomado la virtual que uso habitualmente y le apliqué un proceso de limpieza, sanitización y compresión para ahorrar ancho de banda por un lado y para ahorrar espacio en el disco de quien la instale por el otro.


En mis últimos proyectos similares he utilizado para las virtuales Ubuntu Server con xorg y openbox, pero puede ser demasiado minimalista para otras personas, así que en lugar de rehacerlo con Ubuntu Server, reduciendo aún más el tamaño de la imagen, me concentré en quitar. El proceso de limpieza fue eliminar toda aplicación superflua, caches, logs, los repositorios utilizados para la construcción de las toolchains, lo que sea, esto quizás lo detalle en otro post uno de estos días.

Las precauciones que he tomado al exportar es cambiar la contraseñas y fundamentalmente eliminar de .ssh la key que uso para github. Tras el proceso de zerofill y compactación, no debería quedar ningún rastro forense, pero como no tengo garantías, de todos modos también eliminé la key en github.

Reformulando, eliminé la key en github para no tener ningún problema de robo de credenciales y de modo secundario la purgué en la imagen para que nadie que no ha leído esto la encuentre y piense que fuí descuidado. Y fundamentalmente para predicar con el ejemplo.

El repo consideré borrarlo también y que hicieras git clone, pero de un modo u otro tenías que bajarlo, así que lo dejé.


Durante la charla/taller lo que iré mostrando es el proceso asumiendo que ya tenés todo instalado y funcionando, comprenderás que no voy a poder en ese momento resolver ningún problema. Para poder participar del taller probando los ejemplos, es necesario que ejecutes la siguiente secuencia de operaciones, que terminaría en la grabación del bitstream a la placa y como control deberías tener algunos leds cambiantes en la placa y en la terminal serial un menú.

 

Pasos

 

Asumo que si estás jugando con FPGA y más edu-ciaa-fpga, ya tenés bastante experiencia con linux y virtualización. Aún así, cualquier problema que tengas agregalo a los comentarios abajo e iré completando el instructivo.

 

El anfitrión

 

Tenés que agregar tu usuarios a estos grupos:

$ sudo addgroup "$USER" vboxusers

$ sudo addgroup "$USER" dialout

 

Instalá el Extension Pack si no lo tenés.


La imagen

 

La imagen exportada a OVA ocupa unos 3GB y está en un drive.

La virtual importada ocupa al menos 9.3 GB, con el uso no debería crecer mucho, pero considerá que la partición es de 30 GB. Es un Linux Mint 19 o 20, lo cual provée un entorno gráfico agradable.

Desde VirtualBox elegí "File", "Import Appliance"

Yo la uso con 8GB de RAM, pero seguro que anda con menos, mucho menos, tipo 3GB.

Configurá networking en modo bridge 

 

Arranque


Luego la arrancás, el usuario es "Charly", la clave "educiaa", abrís una terminal y averiguás la IP:

$ ip a

El repo está en:

$ cd ~/Desktop/repo/github/cpantel/evilcodesequence

 

El bitstream

 

$ make PROGRAM=fulldemo system 

 

El flasheo

 

Para evitar tener que conectar la placa a la virtual, que es bastante sencillo pero puede ser fuente de inconvenientes, el flasheo se hará desde el anfitrión si es linux, si es windows, vas a tener que hacerle funcionar el USB y flashear desde la VM, vemos luego.

En el anfitrion, ejecutar una sola vez:


$ scp charly@192.168.1.xx:/usr/local/bin/iceprog .


Luego, para cada nueva regeneración del bistream:


$ scp charly@192.168.1.xx:/home/charly/Desktop/REPO/github/cpantel/evilCodeSequence/BUILD/top.bin .

$ ./iceprog top.bin

 

si dice 

 

./iceprog: error while loading shared libraries: libftdi.so.1: cannot open shared object file: No such file or directory

 

Es por que te falta

 

$ sudo apt install libftdi1


Si optaras por conectar directamente la placa a la VM


$ make PROGRAM=fulldemo flash


Considerá que flashear desde el anfitrión que es MUCHO MUCHO más rápido.

Luego, usando tu programa favorito a /dev/ttyUSB1 con velocidad 9600, tendrías que ver algo como esto:

 

Menu
Menu

Jugá con las opciones, mejor la (1) LEDS pues el resto está a medio implementar en la imagen.

Contactame ANTES del taller si algo no te funciona, durante el taller no va a haber tiempo.

Hay otras maneras de obtener un entorno equivalente, ya sea que lo hagas vos de cero o que uses docker, es irrelevante siempre y cuando puedas compilar el programa, construir el bitstream y flashearlo, proveo la virtual como una facilidad.



2016/10/16

CIAA + Erlang

Este es más o menos el material presentado en [1] para proponer el uso de Erlang en el proyecto CIAA [2]

La introducción al proyecto CIAA corresponde a lo mismo expuesto en CAFELUG, asi que no voy a copiar y pegar, sólo agregar acá lo de Erlang

Hubo un streaming de todo el evento en [3], que estuve revisando para volcar algunos datos acá y es aburridísimo, al menos la parte mía. Sirve verlo para quien quiera hacer una presentación de la CIAA no cometa los mismos errores. La parte de CIAA+Erlang comienza cerca de 1 hora 40.


CIAA + Erlang



La propuesta me nace de tener muchos pies puestos en muchos lugares, siendo dos de ellos el proyecto CIAA y erlang. En este último más que pisar acaricio con el pié, pues aunque he tenido alguna experiencia[4], no he llegado a superar la barrera de entrada, la que te permite retomar en cualquier momento sin tener que mirar ningún manual. En este momento soy incapaz de escribir un hello world, como para ser claro.

La presentación agrega estas preguntas/reflexiones a la presentación de CIAA:


  • plc y micropython están orientados a facilitar la programación de cara al humano.
  • esta iniciativa está orientada a la alta disponibilidad de erlang, no la facilidad.
  • aportaría el hot upgrade soportado por erlang (*)
  • ¿para que querríamos el microErlang si podemos ejectuarlo en la ciaa-full con linux?
  • A nivel industrial no tendría sentido con ciaa-nxp
  • Pero si con una nueva placa industrial reducida, como picociaa
  • Y fundamentalmente para estudiantes con la edu-ciaa
  • Como lidiar con el garbage collector, java (HVM) lo ha hecho
  • Asi como web fue de servidor con aplicación a servidor con cliente rico con javascript y luego javascript ha ido al servidor,
    pensamos en erlang como el servidor de IoT, pero los dispositivos son cada vez más power. Si es suficientemente power y tiene linux, le ponemos cualquier cosa, pero si no es tan power, eh?
  • Podemos al menos enviar los mensajes en formato nativo de Erlang, distribuir la carga de procesamiento y reducir la latencia del servidor.
(*) En la siguiente charla el "hot upgrade" fue correctamente contextualizado, quizás no cuente.

A lo cual agrego de conversaciones posteriores:
  • Erlang originalmente corrió en un switch telefónico, probablemente baremetal, quizas el alcance sea portar R2


Revisando el video, extraigo estos aportes de la concurrencia:

En la algunas conferencias hubieron presentaciónes con estos interesantes títulos

Orlando 2016 [5]
Berín 2016 [6]


En el paquete de OTP existe Inteface, mencionó El Brujo, que permite que un programa en C o java se haga pasar por un nodo erlang, según entendí. Por ejemplo existe una implementación para java [7] de Inaka.

No me comprometo, pero quizás avance algo por ese lado. El problema es que supongo debe necesitar TCPIP y eso no está en baremetal o sAPI, al menos a mi alcance. Y aún no he llegado al RTOS, aviso cualquier novedad.

Muero por tener algo listo para presentar en la conferencia que mencionó El Brujo a realizar en marzo/abril del 2016 en BsAs. Es más, probablemente muera por ser incapaz de no intentarlo.

¿Qué me olvidé o decidí no mencionar?


Olvidé contar que en el proyecto CIAA hay gente muy capaz, docentes universitarios, personas que han colaborado en la construcción de los satélites argentinos, hay personas que trabajan con FPGA, arman la sAPI o diseñan las placas, que para mí son como Dumbledores o Gandalfs, según sea tu tara.

No tenía los links apropiados para los Cursos Abiertos de Programación de Sistemas Embebidos (CAPSE)[8].

Me dió como aversión al autobombo contar que mi colaboración con el proyecto también pasa por haber dado un curso de linux en el SASE 2016 y que en dos semanas probablemente dicte un curso de seguridad orientado a IoT [9].

¿Qué puedo aportar yo?


  • Estar hoy acá:
    O sea, invitar a comenzar.
  • Comenzar el año que viene:
    Mi vida es muy complicada ahora y tengo otras prioridades técnicas, que incluso son base para esta iniciativa, como estudiar RTOS.
  • Ahora puedo colaborar iniciando los contactos y traduciendo.
  • No participar:
    No tengo ningún orgullo ni territorio que defender, bien puede ocurrir que haya gente capacitada e interesada, yo no quiero ningún mérito si puedo ser un estorbo. Me encantaría poder decir "Charli hizo el trabajo de ...", pero me alcanza y sobra "Alguien hizo que Erlang quedara integrado a CIAA mediante ...".



[1] http://seguridad-agile.blogspot.com/2016/09/ciaa-cafelug.html
[2] http://www.proyecto-ciaa.com.ar/devwiki/doku.php?id=start
[3] https://www.youtube.com/watch?v=I7DAssZI_XM
[4] http://seguridad-agile.blogspot.com/2013/07/mutation-testing-framework.html
[5] http://www.elixirconf.com/#elx-speakers
[6] http://www.elixirconf.eu/
[7] https://github.com/inaka/jinterface_stdlib
[8] http://www.proyecto-ciaa.com.ar/devwiki/doku.php?id=educacion:cursos:cursos_programacion_ciaa
[9] https://groups.google.com/forum/?hl=en#!topic/embebidos32/6ohgy4E1D0E

2016/09/27

Reporte i2 Summit

i2 Summit for a safer planet


Tuve la fortuna de pasar de estar prácticamente indocumentado a viajar a este importante evento[1], donde pude aprender y confirmar muchas cosas, que procedo a compartir. Si no aclaro, no es mi opinión de las cosas expuestas, sólo mi relato.

CFM (Counter Fraud Management)


En relación al robo a entidades, hubo un fuerte énfasis en Fraude, o sea, cuando es claramente ilegal, puede haber un falso reclamo.

Dije "claramente" para distinguir de Abuso. Un ejemplo es lo ocurrido con el ministro de energía y minería y sus arreglitos, donde ninguna ley fue violada, pero es evidente que no es muy bonito. En nuestros términos más cotidianos sería aprovechar un sistema mal configurado que permite sacar pasajes gratis.

El sistema para pago seguro, que bien puede procesar 4 mil transacciones por segundo y necesita sólo 512 GB de ram, permite alertar, bloquear, diferir o pasar a una cola de análisis para humanos


Procesamiento y almacenamiento de video.


Se está usando un concepto muy interesante, que permite ahorrar mucho espacio y acelerar sustancialmente las búsquedas en video. La idea consiste en que un agente AI reconozca elementos en el video y agregue metadata. Por ejemplo, un giro en U, marca de vehículo, velocidad, quizás la patente.

Lo nuevo es que se está llevando esa tecnología a cámara móviles, como las que llevan algunos policias en el pecho.

Pudimos apreciar una demo en el hotel, donde se le dió al sistema el feed de varias cámaras y una alerta para una mujer blanca con anteojos y la halló.

Tambien un simpático video de una cámara móvil, mostrando como se reconocian personas, no identificaban, eh, en la calle. Lo más parecido que he hallado es [2] y [3]


COPLINK


Es el programa/sistema que usa la policía para relacionar entidades. Tiene 15 mil millones de documentos indexados y es usado por 40 agencias, que supongo van aportando más documentos cada segundo. Pude probar en un workshop como a partir de tener una persona sospechosa y datos parciales de un auto, llegar a otra persona relacionada y hallar el auto.

Estan los campos que a nadie sorprendería y otros como apodos y descripciones de tatuajes, por lo cual si querías llamar la atención con el tuyo, lo lograste más allá de todo sueño.

Busqué cualquier video [4] y aunque parece un poco "armado", parece que más o menos funciona.


Cloud


La nube lleva a que haya que recolectar más logs, retenerlos por más tiempo y compartirlos más.

Un interesante criterio para usar cloud fue "nobody's running a dynamo in the basement". Mmmh, interesante, no está indexada esa frase.

IBM está en fuerte asociación con Microsoft, desplegando sistemas como COPLINK en Azure. Medio injusto que no hubiera ninguna mención a los pioneros de Amazon, pero bueno, así es la vida.


Cross Industry Panel


Aparte del moderador habia un NSA, un capitán de policia y un representante del sector privado.

Los dos últimos tenían una cierta actitud casi condescendiente con el NSA, tipo "ok lo del terrorismo, pero en nuestro día a día, tiene una prioridad bastante baja".

Una persona del público preguntó por Open Data, ya que el del sector privado había dicho algo como "siempre se ve al gobierno federal con desconfianza, pero ha llegado la hora de compartir información con nosotros". Como que el señor tenía un doble sombrero. Por supuesto respondió "no, gracias, no podemos compartir pues hay marcas y reputaciones que proteger". Dejo la interpretación correcta a quienes tengan clara la relación entre el sector público y privado en USA.


Sueltos


No sé si me entendió bien, pero el Mr al que le pregunté, me confirmó que si vas a comprar armas, drogas o niños a la deep web, a menos que tengas algún conocimiento es más probable que te roben tus bitcoins o termines preso que armado, drogado o pervirtiendo, ya que hay mucha estafa o honeypot.

Hay un sistema que no recuerdo cual era, tipo CFM ya mencionado, que procesa tanta información que no la puede almacenar, sólo sirve para que los analistas humanos puedan tener una idea de lo que está pasando.


Bonus


El bonus lo recibí de uno de mis compañeros de viaje, de alguna empresa de comunicaciones. El problema que tiene es que le roban los picos de bronce de las bocas de incendio y quiere poner un sistema de detección de ausencia, por decirle de algún modo. ¿No es más caro el sistema que reponer los picos? ingenuamente le pregunto. Si, pero no me importa, pues lo que está en juego es que si hay un incendio y no están los picos, estamos en el horno (chiste en la edición, no recuerdo exactamente cómo lo dijo), pueden haber muertos.



Extra ball


Estaba como expositor Frank Abangale, en cuya vida se basó la película "Catch me if you can"[5]. Nada voy a decir de su exposición, salvo que si no fuera por la fecha y que estoy seguro el fondo era distinto, este [6] es el video. Paso a revelar el motivo último y más importante por el cual soporté 24hs de avión, me dejé revisar como si fuera un criminal y resolví mi situación de indocumentación:



Por primera y espero última vez en mi vida, me acerqué a alguien y "excuse, I never do this, but..."

Fuí el segundo en llegar, jaja






[1] https://www-01.ibm.com/events/wwe/i2uc/i2uc16.nsf/Agenda_Day1.xsp?open
[2] https://www.youtube.com/watch?v=QcCjmWwEUgg
[3] https://www.youtube.com/watch?v=uQtaFaI54Ks#t=48
[4] https://www.youtube.com/watch?v=x-KSMcvL1sk
[5] http://www.imdb.com/title/tt0264464/
[6] https://www.youtube.com/watch?v=0X-LlwupIqc

2016/09/17

CIAA @ CAFELUG


El día sábado 2016-09-17 se realizó en el Ekospace el Bazar del CAFELUG.

Una de las charlas trató sobre el Proyecto CIAA y he aquí un extracto de la presentación. Se trata del punto de vista hobby, sin despreciar lo educativo y productivo.

Es un proyecto


  • Open Hardware
  • Open Software
  • Colaborativo
  • 32 bits
  • Multicore asimétrico
  • ARM/FSL/Intel/PIC

Comunidad sistemas embebidos


  • https://groups.google.com/forum/?hl=en#!forum/embebidos32
  • @ProyectoCIAA

Open Hardware

 

  • https://groups.google.com/forum/?hl=en#!forum/ciaa-hardware
  • https://github.com/ciaa/Hardware

 

Open Software


  • https://groups.google.com/forum/?hl=en#!forum/ciaa-firmware
  • https://github.com/ciaa/Firmware/


  • C
  • Java
  • Python
  • Ladder
  • Snap
  • Open Software
  • Baremetal (LPCOpen)
  • sAPI
  • RTOS
  • POSIX
  • HIS IO ???

Usos


  • Sistemas embebidos industriales hard real time
  • Módulos RT en linux (picociaa montada en otro hardware)

Comparación con otras plataformas


A esta tablita la iré completando en estos días, por favor avisarme por cualquier error



atmega
328
arduino Edu-
ciaa-
nxp
pico
ciaa
Ciaa-
nxp
rbpi 1 rbpi 2 rbpi 3
bits 8 8 32 32 32 32 32 64
cpu 1 1 1+1 [3] 1+1+1[4] 1+1 [3] 1 4 4
mhz 20 20 208 95 208


ram







eeprom







flash
















precio 76 150 805 1050 4408

1049
precio normalizado atmega328 1.00 1.97 10.59 13.82 58.00 0.00 0.00 13.80
precio normalizado edu-ciaa 0.09 0.19 1.00 1.30 5.48 0.00 0.00 1.30
ethernet no no no no si si si si









usb no No [1] si si si si si si
usb otg no
si no si











wifi no no no no no no no si









gpio







adc







dac







resolución dac







pwm







spi







i2c


































jtag no no si si si No[2] No[2] No[2]









rs232







rsxxx







relés no no no no 4 no no no
optoaisladores no no no no 4 no no no
rtc no no si
si ? ? ?
batería no no si no si no no no









botones no ? 4 no no no no no
leds no ? 6 (3 + RGB) RGB ? no no no


















baremetal si si si si si atrevete atrevete atrevete
libreria tipo sAPI ? si en construcción
en construcción ? ? ?
corre linux no no no no si si si si
firmata si si si ? si ? ? ?
rtos no no si en contrucción si ? ? ?


[1] hay un arduino teensy que si tiene
[2] pero se puede hacer un hack (link)
[3] tiene dos cores distintos (m4 + m0)
[4] tiene [3] mas otro micro (( m4 + m0) +m0)

Perspectivas


  • Puente entre escuela e industria
  • Se utilizará en escuelas secundarias técnicas


¿Cómo participar?


  • Página web
  • Documentación
  • RRPP (ver videos)
  • VM's
  • Probando manuales


Recursos


  • Hay cursos presenciales y remotos, para hobbystas, técnicos e ingenieros
  • http://www.proyecto-ciaa.com.ar/devwiki/doku.php?id=start

Próximos pasos


  • Terminar el Slither

    http://seguridad-agile.blogspot.com/2016/07/slither-1-intro.html
  • Proponer Erlang en CIAA
    http://www.meetup.com/ErlangBA/events/234531836/
    viernes 2016/10/14 19:00 a 22:00
    INAKA - Darwin 1154 sector C 1ro F
Lo que estaba antes,

http://www.meetup.com/ErlangBA/events/232750618/
miércoles 2016/09/28 19:00 a 22:00

se suspendió por falla en el suministro eléctrico.

2015/06/19

ErlangBA 2015

Un lugar muy agradable el del encuentro, buena tasa de asistencia.

Sólo pude asistir a una y media de las tres charlas. La segunda fué bien técnica de Riak a cargo de Iñaki Garay y la mitad de la tercera, de Federico Repond, comenzó más bien con redes sociales, por pero como no llegué a ver la conclusión, me quedaron algunos conceptos inconexos.

Lo que sí me quedó claro es que hicieron su propia DB llamada Leapsight Semantic Dataspace, apoyándose en los mecanismos de distribución y HA de Riak Core y Erlang/OTP, muy grosos.

Me parece que Federico tiene una concepción parecida a la mía, en mi caso más teórica y en el suyo bien práctica, de que somos dealers, no adictos en el sentido de que no consumimos lo que creamos, o al menos el equivalente que crea otro.

Digo en mi caso teórica, pues este evento es el de un mundo de la alta disponibilidad, centenares de miles de conexiones concurrentes, centenares de nodos. Millones de subscriptos, datos que flotan sin terminar de actualizarse. ¿Conocés el triangulito del PM: Barato, Pronto, Bueno, elegí dos? Acá es CAP:

(eventual) Consistency: en algún momento los datos serán consistentes
Availability: siempre vas a poder acceder
Partition Tolerance: si hay fallas, no te vas a enterar

y sólo podés elegir dos, en teoría. Parece que en la práctica podés elegir un poco más que dos.

Se explicaron conceptos de nosql y distintos tipos, como

KV
KAV
Graph
Document
y otros, te dejo a tí a que hagas las búsquedas apropiadas y voy a comentar sobre los aspectos en los cuales puedo aportar algo.

Sin embargo, si se me permite, dejaré asentado que neo4j.com que implementa Graph  en sus uses cases (menu -> use cases) menciona cosas que me interesan como "Fraud Detection" y las otras, que de mezclarlas sabiamente me llevan a mi principal problema:

Cómo hacer un mapa de los conceptos, personas, tecnologías, herramientas y etc. que uso a diario, por ejemplo imaginario:

            windows              José(interno, mail)
               |                     |
          control usuarios  ---- José autoriza cambios usuarios
          90 días inactivos
               |     +-------- Ana borra usuarios
               |                     |
          script detecta         Ana(interno, mail)-----Area
                                      |
                                notas acerca de Ana
                                 (colaborativa)          

Por que si tengo que leer procedimientos, me muero de aburrimiento, si los encuentro.

Fiel al principio agile de dar algo con valor lo antes posible, dejaré la investigación para despues de esta nota y cuando y sí logro algo, lo compartiré en su entrada correspondiente.

Iñaki comentó que en lugar de modelar a partir de los datos, se debe modelar alrededor de las consultas, lo tendré muy en cuenta.

Así que en lugar del gráfico anterior, debería pensar a partir de:

¿Cuál es mi inventario de scripts?
¿Quienes son las personas colaborativas de un área?

Esto es una mezcla infernal entre jerarquías, red social, flujos de trabajo y TODO.

Logs


Creí escucharle a Iñaki "en el log no hay FK". Justo confluye con el tema mencionado en inforiesgo, que uno de los puntos menos maduros en las organizaciones con respecto a la seguridad es la falta de correlación de logs.

En un sistema complejo, puede ocurrir que la autenticación la haga un componente con su propio log y la operativa posterior otro. Luego, puede ocurrir que exista un token de sesión entre el navegador y el front end, que es lo habitual y lo llamaré "web", pero tambien que entre el front end y los backends hayan otros identificadores de otras sesiones.

Tambien puede ocurrir que en el log no se registre el id de sesión web pues permitiría a un operador o developer ROBAR TODAS LAS SESIONES ACTIVAS. Esto no tiene que ver con lo de FK, pero es suficientemente interesante como para mencionarlo. Ya que estamos, aunque no es el propósito original, suele existir un segundo factor de autenticación como un pin numérico o una tarjeta de coordenadas, que cumple con el efecto secundario de mitigar esto.

Si hay operaciones diferidas agendadas, pueden haber nuevos ids temporarios. Para complicar más hay operaciones que pueden depender del accionar y la autorización de varias personas.


Para detectar ataques y fraudes es vital correlacionar toda esta actividad, tanto como para descubrir alguna falla del proceso como para mediante análisis de comportamiento detectar un robo de credenciales  o autofraude.

Estuve varias veces a punto de preguntar por el tiempo de propagación, siempre pensando en los logs pero no hizo falta por dos comentarios.


*) Cambio de nombre de usuario de un blog: si un usuario cambia su nombre, si hay desnormalización que parece que es muy común en nosql, hay que actualizar en cada entrada su nombre y eso puede llevar... ¡días!

Este escenario en el log no ocurre, es WORM, pero en el insert ocurre esto:

*) Token de sesión y la consistencia eventual: un problema que hallaron es que el usuario se autentica y obtiene su token de sesión, pero como no es instantáneo, inmediatamente se encuentra con que no tiene acceso pues su token aún no es válido. Esto se arregla, como todos los problemas de concurrencia con un sleep(), es este caso dentro de un spin lock.

O sea, que para una investigación durante un ataque puede no ser lo más apropiado y para un IPS sin duda fallaría.

De boca en boca

Federico en su charla mencionó el recurso más efectivo actualmente en las redes sociales.

Es bien sabido que es muy efectiva una recomendación de un producto proveniente de alguien conocido. Un referente mediático viene a ser alguien "conocido" de algún modo y por ello tanto dinerillo amasan los famosos con publicidad (que me corrija alguien que sepa de publicidad, psicología, neurología y todo lo que yo no sé).

Es un conocido asimétrico, ¿no? Hace mucho, cuando trabajaba de otra cosa pasé por una casa donde había un muchacho con alguna disminución mental. Hablaba todo bien, parecía todo ok, pero le hablaba a las personas de la tele como si las conociera. Él si las conocía, no así al revés. No quiero con esta anécdota sugerir que las personas sin disminución de sus facultades mentales tengan algún tipo de tara por "conocer" a personas que no conocen, claro.

Volviendo al gran valor de la recomendación, el problema es que no importa cual es la realidad. Por suerte por lo general la realidad si importa y está mejor expresada por las estadísticas que por una recomendación.

Las recomendaciones sin duda afectarán a las elecciones de las personas y las estadísticas nos diran cuales fueron las buenas elecciones.


Por supuesto que sé que a las estadísticas se las pueden manipular e interpretar siguiendo alguna conveniencia, aún dejando de lado todos los errores metodológicos. Si no, buscá las estadísticas de cualquier herramienta como antivirus, firewall, i[dp]s y vas a encontrar que varios son "el mejor", algo evidentemente imposible.

También supongo, que si nadie "interviene", las recomendaciones deberían converger con las estadísticas.

Comprender esto nos puede llevar a evitar errores (respetando las estadísticas) y sacar provecho de los errores ajenos (de quienes siguen las recomendaciones que no corresponden con las estadísticas).

Comunidad Erlang Argentina

Para qué reinventar malamente la rueda si puedo citar a El Brujo Benavídez:


"Durante el ErlangBA 2015 surgió un comentario que para algunos de los que estamos en esta comunidad Erlanguera hace tiempo resulta medio evidente, pero para quienes recién comienzan no lo es y me parece una buena idea compartirlo:
La comunidad de Erlang en el mundo no es tan grande como otras y más o menos conocernos a todos no es tan difícil. Por eso, formar parte de la comunidad es algo que, tanto para los programadores por sí mismos, como para las empresas que invierten en el desarrollo de sistemas en Erlang es más que recomendado. Si me presionan yo diría que es trascendental.
Y en nuestro caso, formar parte de la comunidad no es nada difícil. Hay varios canales de comunicación:
  • el más popular es sin dudas la lista de erlang-questions. Sí, es una lista de emails. Sí, es super-siglo-pasado, ya lo sé. Pero no se asusten, en los días pico de actividad te llegan 20 mails. En los días habituales, te llegan 5. Pero les aseguro que en 1 de esos 5 hay algo interesante y/o útil para aprender o trabajar mejor.
  • en Argentina también tenemos nuestra listita, creada por Mariano Guerra.
  • En IRC pueden entrar al canal #erlang de freenode
  • y claro está... buscar erlang o elixirlang en twitter también sirve :) - no busquen 'elixir' solo porque sólo se van a encontrar a Shakira :P"


Diccionario


WORM (Write Once Read Many): el log debería ser inmutable, se escribe una vez y de ahí en más sólo se lee.

spinlock: es quedarse en un loop preguntando por algo hasta que ocurra. La mejor explicación es la escena de "and then?" de Dude, where is my car?

IPS (Intrusion Prevention System): es un IDS (Intrusion Detection System) que cuando detecta alguna irregularidad toma una acción defensiva como bloquear una cuenta o levantar una regla de firewall.

2015/06/15

Inforiesgo 2015


Comparto mis impresiones acerca del evento del 2015-06-10 [1].

La señora de la puerta se dió cuenta que estaba leyendo la lista de asistentes buscando conocidos y tomó las precauciones apropiadas pero no suficientes y llegué a ver que la tasa de asistencia fue de 2/3, muy buena.

La primera presentación, a cargo del polifacético profesional y docente de seguridad informática de la UdeMM[2] y alguna otra institución Pablo Romanos[3] trató sobre SGSI, en particular con iso27k. Por un lado dió la explicación teórica de rigor regada de muy buenos ejemplos y por otro presentó una interesante herramienta, que en sus palabras consiste en hacer lo mismo que venían haciendo en una hoja de cálculo. Pese a la modestia, la herramienta se veía bastante interesante.

Luego, Santiago Cavanna hizo algo muy interesante, que fue adaptar su presentación a ciertas ideas que había tirado Pablo.

Según los datos que mostró, la regulación sirve. O sea, si se pena que hagas las cosas mal, no las hacés tan mal, ¡qué primitivo! Tambien que hay terribles falencias de correlación de eventos, gestión de cuentas de administradores y de servicio, se comparten cuentas privilegiadas. Se calcula que hay un 5% de personal "desleal" que de tener oportunidad ataca a su organización.

Tuvo un par de reflexiones muy interesantes como que en cuatro mil años no ha cambiado el core de la seguridad de la información, con lo que no puedo menos que estar de acuerdo. La otra es algo que he expuesto en algunas capacitaciones internas y paso a explicar en mis palabras, me parece que su concepto es el mismo:

Cuando hablamos de probabilidad de ataque no es lo mismo que probabilidad de un accidente, pues en el primer caso hay una voluntad de por medio. Ponete en el lugar de atacante, que hace un relevamiento y encuentra que cerraste todas las que tienen más de 7 puntos de cvss[4]. Si estaba decidido o motivado, te va a atacar por las de menos puntos que estén abiertas, asi que si tenías una de 1 punto, para vos en realidad se hizo de 10 puntos.

Esto hace que decir: por mis vulnerabilidades tengo un XX% de probabilidades de ser atacado y cuanto más la cierre menos probable es, no tenga tanto sentido como que digas que hay un YY% de que TENGA ÉXITO. Entonces decir "esta vulnerabilidad no la cierro pues es muy difícil de explotar y nadie lo está haciendo" es perfecto para el atacante, que va a ver cuales vulnerabilidades tenés, se va a especializar y te las va a explotar.

Pero que quede claro que estos dos últimos párrafo son míos, no le estoy atribuyendo a Santiago mis palabras, no lo conversé con él, ni siquiera lo conozco. Es algo que venía pensando y que debería agregar a [5].

Otro concepto, que me preocupó es que como que estamos tomando demasiado estrictamente lo de "los datos de argentinos deben estar en Argentina" cuando en realidad parece que es "los datos de argentinos deben estar duplicados en Argentina y se pueden procesar afuera". Cuando alguien le dijo con los bancos no es asi, él dijo, hablen con la señora plin plin plin y verán...

Tras la pausa, hubieron dos presentaciones a las que lamentablemente no les pude sacar mucho más provecho que usar como abono para lo que sigue:

Hace como quince años había una docente en la facultad que leía las presentaciones, algo absolutamente insoportable e inútil. Me dije "no se pueden dar tan mal las clases" y me ofrecí como ayudante ad honorem y esa experiencia y los contactos resultantes han hecho que yo sea quien soy hoy, asi que quizás no está tan mal OTRA PERSONA lea las slides, está bueno el error pero no ser recordado sólo por ello.

Como le dijo Mathis a Bond, "estar muerto no significa que no puedas ser útil" [5].

Como en alguna otra entrada he manifestado [6], pero no recuerdo cual, tiendo a estar más del lado de RTFM que de STFW y del papel que de la pantalla, aunque no dudo en servirme de stackoverflow[7] cuando no necesito comprender o no comprendo pese a RTFM.

Si yo te leo un texo, podés prescindir de mi. De todos modos no podés prescindir de mi, por que lo que te estoy leyendo no te aporta nada que no hubieras tomado por vos mismo. Otra cosa es que haya un texto y alguien que lo desmenuce.

Esto vale tanto cuando aprendo como cuando enseño. Por ejemplo, andaba con ganas de dar capacitación mas formal y por fuera del trabajo y alguien me sugirió que para mejorar "la venta", era conveniente que subiera algún minicurso filmado.

Lo que no me gusta es que yo no aprendo nada cuando alguien ve mi video. No hay pair-programming en solitario.

Si yo leyera una presentación, lo único que aprendería sería a no volverla a leer y vos a no volver, punto.

Pero me fuí por las ramas, todo esto debió haber sido una entrada aparte

En la cuarta presentación se dijo que en términos militares el ciberespacio ha pasado a tomar el lugar protagónico que tenía lo naval. Mmh, si en la misma charla se dijo que se estaban considerando tomar "represalias físicas" en casos de ciberataques, ya me empieza a hacer ruido.

Hubieron datos del tamaño actual y proyectado de los "ciberejércitos", de pocos miles, minúsculos si comparamos con los convencionales. Tienen la ventaja de que no los matan, por ahora.

Se mencionó que hubo una importante denegación de servicio en Georgia antes de la invasión, que hubo sabotaje contra las centrifugadoras iraníe. Es verdad, pero Georgia luego fué invadida FÍSICAMENTE. Irán se atrasó un par de años y siguió en marcha su programa nuclear. Tirar un virus es tan sólo otro recurso como haber tirado unas bombas en un reactor experimental[8].

El problema es que se está confundiendo C3 con Internet. Leé un un poco de C3[9] antes de seguir.

¿Listo? Aburrido, ¿no?

C3 usa Internet, por que en parte Internet es resultado de C3 y por otro Internet es más barato. Fijate, que paradójico que Internet existe para tener comunicaciones reduntantes descentralizadas pero cada que el ancla de un barco arranca una fibra óptica del lecho marino, alguien se queda sin comunicaciones, jeje.

Mencioné esto de C3 no porque la tenga reclara, si no por que me parece algo muy importante para que profundices y reflexiones, prestá atención a C3I, no sé para qué le dicen C4I.

Volviendo a los ejemplos, en Siria se ve como la guerra civil tambien transcurre en Internet, pero no en los sitios atacados, si no en la manipulación de las noticias.

Se dice que EEUU perdió la guerra en Vietnam cuando la opinión pública se puso en contra, cuando comenzaron a volver los muertos. Pero alguien tuvo que matar a esos muertos primero.

Soy un completo convencido de que en última instancia, el ciberespacio no es más que una ilusión como el dinero y la ley, que nos rigen en el día a día y que cuando no lo pueden hacer, se respaldan en la violencia. En términos menos poéticos, en última instancia si no te colás para entrar a la cancha es por que la policia te apalea.

Otra vez por las ramas. Volviendo...


Hay algunas otras ideas que no recuerdo quien las expuso o siquiera si fueron expuesta o me surgieron como reflexiones del momento, como que dado que sigue habiendo muchísimo win9x en sistemas de control, los fabricantes que se benefician por hacer los upgrades bien pueden tener una actitud un tanto negligente en relación a su seguridad.

En síntesis, el evento estuvo ok. Pese a la "baja calidad" de dos presentaciones que igual aportaron algo de conocimiento. Ah, y la puntualidad falló, pero he visto peores...

[1] http://www.cpci.org.ar/index.php/pago-de-la-cuota-social/34-novedades/novedades/264-jornadas-info-riesgo-2015-en-udemm-8-edicion
[2] http://www.udemm.edu.ar/
[3] pabloromanos@green40.com
[4] https://nvd.nist.gov/cvss.cfm?calculator&version=2
[5] http://seguridad-agile.blogspot.com/2013/09/dos-dimensiones-extra-en-la-evaluacion.html
[5] http://www.imdb.com/title/tt0381061/quotes?item=qt0433391
[6] http://seguridad-agile.blogspot.com/2012/07/layer-8-csrf-protection.html
[7] http://stackoverflow.com/
[8] http://www.spiegel.de/international/world/the-story-of-operation-orchard-how-israel-destroyed-syria-s-al-kibar-nuclear-reactor-a-658663.html
[9] http://www.globalsecurity.org/military/systems/ground/c3.htm



2013/03/13

Segurinfo 2013

Otra vez reportando desde el jet set.

Ha ocurrido algo horrible.

Pude haber ido a la charla de Bruce Schneier (si, el de la cerveza), pero como me estaba escapando del trabajo y pensé que no iba a haber lugar, no lo hice.

Nadie puede imaginar la vergüenza e infelicidad que me dió cuando me enteré de que la sala estaba por la mitad. A la organización de segurinfo sólo le puedo cuestionar que habían pocas servilletas, a los (in)asistentes, todo. Mucho traje, poco cerebro. Punto.

La charla de Julio Ardita y Marcelo Stock acerca de desarrollo seguro estuvo bien, nada especial.

La charla de Claudio Caracciolo, el aire es libre, fué fenomenal. El engaño que expuso consiste en que uno entra en http://loquesea.com/login en lugar de https://loquesea.com/login. Los detalles se los dejo a él, no soy periodista. Si no fuera por el rant anterior y por el script que pego abajo, esta entrada no tendría razón de ser.

Para quienes le tienen miedo a sslstrip, que es parte del stack de su ataque, acá comparto un userscript para firefox. Al cargarlo por primera vez quedan los include en la configuración. No tiene sentido usar listas interminables de urls de login mantenidas por la comunidad por el overhead administrativo, en mi humilde opinión. Si uno sabe lo que navega normalmente, en cinco minutos prepara los includes y listo. Tengo la impresión de que hay un add-on que hace lo mismo con una bruta lista, pero para scriptish es una linda manera de evitar la polución del browser.

La idea es que estos scripts se activan para las urls que uno le dice. Si uno entra en una página por http en la que quería entrar por https, avisa.


// ==UserScript==
// @id             004
// @name           no sslstrip
// @version        1.0
// @namespace      
// @author         dev4sec
// @description    

// @include        http://accounts.google.com/*
// @include        http://login.live.com/*
// @include        http://www.facebook.com/login.php*
// @include        http://login.yahoo.com/*
// @run-at         document-start
// ==/UserScript==
 
alert("Posible sslstrip");
 
Y ahora, el infaltable glosario:

rant: se deduce del contexto

sslstrip (http://www.thoughtcrime.org/software/sslstrip/): un programita que puesto en el lugar apropiado abre una conexión https por nosotros, dándonos gentilmente los mismos contenidos, pero en http. Ah, en retribución se queda con nuestro tráfico en texto plano.

userscript (http://scriptish.org/): firefox tiene un add-on llamado scriptish, que llama nuestros scripts sobre la página actual. Se puede modificar la página, hacer algunas pruebas de seguridad, cosas así.


 

2012/09/29

cafein


Este es un manual de como preparar la charla de Test Driven Secure Development que he presentado en in.cafelug.org.ar el 2012/09/29, que es una refactorización profunda de lo presentado en agiles2011, en Agile Open Seguridad 2010 y en una o dos techtalks en Teracode en 2010 o 2011.
La versión original usaba unas funciones de testing que había elaborado para la ocasión y para cambiar el estado de la demo usaba unos ingeniosos scripts, ahora reemplazado por branches de git.

¿Por qué no subo el código que he generado? Por  estricta adherencia al proverbio chino:

Regala un pescado a una persona hambrienta y le darás alimento para un día, enséñale a pescar y le salvarás la vida.

Cualquier duda, me pregunta, yo contesto. Quizas, quizas, muestre esto en Agile Open Seguridad del 24 de noviembre http://www.agiles.org/agile-open-tour/agile-open-buenos-aires-2012---seguridad

Requerimientos de software


Instalar mysql, php, pdo y apache o equivalentes y sus dependencias.

En el navegador data tamper para mostrar bien la manipulación de los post.
  
wireshark para mostrar el tráfico entre el servidor web y la base de datos.
   
wget o curl para efectuar llamadas al servidor web desde bash

grep para evaluar las respuestas

shunit2 para evaluar los resultados esperados contra los obtenidos

git para poder mostrar paso a paso todo el proceso sin escribir ni una linea en el momento de la charla.

La idea

La idea es ir procesando requerimientos o bugs. En caso de ser un bug, está bueno mostrarlo, para eso tenemos wireshark, wget y el navegador. De un modo u otro hacer un test que falle, implementar la solución hasta que el test pase, quizas ajustar el test, quizas agregar otro test. Y seguir asi...

La idea de usar versionamiento la saqué de un curso de Ruby dado por Nicolás Gaivironsky. Give credit where credit is due.

La elección de bash y php pelado como [ausencia de] framework es debido a que al usar frameworks hay mucha magia que mete ruido y no se puede ver bien que ocurre si no se conoce el framework.

Ciertos requerimientos o bugs pueden romper test existentes, hay que arremangarse y arreglarlos o tirarlos.

Aunque la doctrina dice "primero test, luego implementación", la realidad dicta que "primero algo parecido a un test, un poco de implementación, ajuste del test...", como que hay un micro loop.


Una práctica que me resultó muy efectiva es esta secuencia:


git branch 01_xxx
git checkout 01_xxx
crear test
codear
ajustar test y código hasta que funcionen bien
git add test.sh
git commit 
git branch 02_xxx
git checkout 02_xxx

git add codigo
git commit



De este modo, cada branch se comitea cuando ya está el código estable.

Git lola dice:

* a70524e (HEAD, 28_code_session_fixation) code session fixation
* d4542a1 code session fixation rompe tests
* 2b1365a test session fixation
| * 90458ef (27_test_session_fixation) test session fixation
|/ 
* 0d47ab6 (26_session_complete) Refactorizacion completa
* 83bb6c6 (25_test_refactor) Refactorizacion completa con error de xss
* bf042c9 refactorizacion de tests tras incorporacion de session
* 34ae950 (24_code_login_redirect) code login redirect
* 255077f (23_test_login_redirect) test login redirect
* 9b0501f (22_code_login_post) code login post
* fb036a3 (21_test_login_post) test login post
* 9cbe347 (20_code_login) code auth get
* 6b93405 (19_test_login) test auth get
* e4bd6c6 (18_code_session) codigo session
* 531c868 (17_test_session) test basico session
* 33289da (16_code_xss_reflected) code xss reflected
* d568fbe (15_test_xss_reflected) test xss reflected
* 8756029 (14_code_xss_stored) code no xss stored
* e7d961d (13_test_xss_stored) test xss stored
* 5352ff4 (12_code_no_sql_injection) code no sql injection
* 1a29453 (11_test_sql_injection) test sql injection
* 6ec4d4a (10_code_refactor_no_sniffing) code refactor no sniffing
* 913a49d (09_code_persistencia) codigo persistencia
* da5f08f test persistencia
| * 1750417 (08_test_persistencia) test persistencia
|/ 
* 8a1a3fd (07_code_overwrite) codigo auth overwrite
* f0ef483 (06_test_overwrite) test auth overwrite
* d01e7c1 (05_test_refactor) test auth refactor
* 470fecd (04_code_auth) codigo auth
* a7fee5d test auth
| * 65c181b (03_test_auth) test auth
|/ 
| * 765808d (02_code_post) rollback
| * 10ed237 test para auth
|/ 
* 2e63946 codigo post
* ec198a6 (01_test_post) test post
* 9766ef2 (master) inicio


Espero ansioso la ocasión para que alguien me enseñe como transformarlo para que quede en una sola linea, como la que tira git branch

  01_test_post
  02_code_post
  03_test_auth
  04_code_auth
  05_test_refactor
  06_test_overwrite
  07_code_overwrite
  08_test_persistencia
  09_code_persistencia
  10_code_refactor_no_sniffing
  11_test_sql_injection
  12_code_no_sql_injection
  13_test_xss_stored
  14_code_xss_stored
  15_test_xss_reflected
  16_code_xss_reflected
  17_test_session
  18_code_session
  19_test_login
  20_code_login
  21_test_login_post
  22_code_login_post
  23_test_login_redirect
  24_code_login_redirect
  25_test_refactor
  26_session_complete
  27_test_session_fixation
  28_code_session_fixation


Todo esto se reduce a la siguiente lista de requerimientos o bugs:

Requerimiento: Crear una página que permita postear comentarios

  Fácil, un formulario

Requerimiento: Agregar autenticación

  Fácil, agregar user/pass con contraseñas hardcodeadas

Bug: Se pueden pisar las variables y evitar la autenticación

La implementación era:

foreach($_POST as $key=>$value) {
  $user[$key]=$value;
}

if ($user['user']=='ana' && $user['pass'] == 'ana123') {
   $user['valid']=true;
}


El ataque es --post-data="text=post sin permiso&valid=1"

La solución es... sólo tomar los parámetros que estamos esperando.

Requerimiento: Persistir los comentarios en una base de datos

Fácil, consultar en la base en lugar de hardcoded

Bug: Se ha detectado un error de diseño que permite ver las credenciales de todos los usuarios circulando entre el servidor web y la base de datos.

El código era

$result = mysql_query('select * from user') or die('no query');

while ($entry = mysql_fetch_assoc($result)) {
  if ($entry['name'] == $user['user']
      && $entry['pass'] == $user['pass']
  ) {
    $user['valid'] = true;
    break;
  }
}


esta es la captura de wireshark entre el web server y la base de datos, ademas no escala si tenés un millón de usuarios.

Lo que me gusta de este error es que lo he visto en la vida real una vez.

Bug: Se ha detectado sql injection que permite evitar la autenticación


Reemplazamos sql pelado por Prepared Statements

Bug: Se ha detectado xss

Al menos hay que poner htmlentities() al mostrar los posts.

Requerimiento: Agregar session y una página independiente para login


Esto fue un pijazo, no hay otra palabra. Tuve que tirar todos los tests e ir recuperandolos de a poquito, va desde 17_test_session hasta   26_session_complete


Bug: Se ha detectado session fixation, que permite a un atacante "colgarse" de una sesión ajena.


Hay que agregar sesión

        if (loginOk()) {
            session_regenerate_id();
            $_SESSION['valid'] = true;
             header('Location: chat.php');
            exit();
        }

Ejemplo de un test


Para testear he usado sshunit2, wget y grep, veamos un ejemplo detallado, de los últimos:
testXSSstored(){el nombre "test" le permite a sshunit2 hallarlo
    setupDBversion1ponemos la base en un estado conocido
    rm cookies.txt -fpor las dudas tiramos las cookies que puedan haber
    wget -q -O - --post-data="user=ana&pass=ana123" http://127.0.0.1/login.php --keep-session-cookies \ --save-cookies cookies.txt > /dev/nullnos autenticamos salvando las cookies estoy usando header("Location: chat.php") en login. con max-redirect=0 se impide la redirección, tiramos el output a stdout con -O - y de ahi a /dev/null, le pedimos con -q que no diga nada de como le fué
    wget -q -O - --post-data="text=<script>alert(12*12)</script>" http://127.0.0.1/chat.php --load-cookies cookies.txt > /dev/nullle decimos que tome las cookies que habiamos recibido antes y hacemos el ataque
    rm cookies.txt -f
    wget -q -O - --post-data="user=ana&pass=ana123" http://127.0.0.1/login.php \ --keep-session-cookies | grep -q -F "<script>alert(12*12)</script>"volvemos a autenticarnos, aceptamos la redirección y vemos si el script está intacto
    RESULT=$? guardamos el resultado de la operación anterior
    assertEquals 1 $RESULT
}
que debe ser 1 si no hubo match, que es lo esperado en este caso y 0 si hubo, será uno u otro dependiendo de lo que estemos testeando

La implementación esta es para dejar la base de datos en un estado conocido antes de cada test que necesite datos

setupDBversion1() {
  echo "drop database chat;
  create database chat;
  use chat;
  create table messages(message varchar(64));
  create table user (name varchar(16), pass varchar(32));
  insert into user values (\"ana\",\"ana123\");
  insert into user values (\"root\",\"root_pass\");
  insert into user values (\"master\",\"master_pass\");" \
  | mysql -u admin chat
}

. shunit2 ;# esto invoca la ejecución de todos los tests


Este es un ejemplo de ejecución donde eliminé el htmlentities() y entró el xss. Es importante romper el código una vez que el test pasa para estar seguros que el test lo detecta.




Detalles de configuración


apache

Crear un htdocs accesible tanto por apache como por el usuario de ejecucion modificar configuración apache para que apunte a la carpeta de trabajo crear repositorio de git (git init)



mysql


create user 'admin'@'localhost';

grant all on chat.* to 'admin'@'localhost';

Es una decisión controvertida quedarse sin password, pero la opción que mejor conozco es usar expect, que no aporta a la demo.