lunedì 26 marzo 2018
Estendere raggio d'azione dei beacons
Ho fatto una prova per estendere il raggio di ricezione del segnale dei Beacons Estimote. Per questo motivo ho preso un dongle USB Bluetooth 4.0 con connessione antenna SMA ed una antenna esterna direzionale della TP-LinK, anche questa dotata di connettore SMA
L'antenna e' nata per WiFi ma visto che sia WiFi che BT lavorano a 2.4 GHz non ci sono problemi
Le misure sono state fatte con un programma Python allontanandosi via via dall'antenna. In una prova di un beacon in modalita' Eddystone sono partito con un valore di RSSI di circa -46 per arrivare a circa 140 m di distanza ad un valore di RSSI -96.
Vettore normale su nuvola di punti
Il problema e' questo : data una nuvola di punti, generata da un sensore come Kinect, determinare i vettori normali delle superfici triangolari che hanno come vertici i punti della nuvola stessa.
Il sistema di coordinate ha l'asse Z orientato come la distanza dal sensore, X ed Y invece sono lungo la dimensione della matrice di acquisizione
Presi tre punti nello spazio (x1,y1,z1),(x2,y2,z2),(x3,y3,z3) non allineati (questa condizione visto che i dati vengono da uno strumento di misura reale diciamo che e' soddisfatta a priori) per calcolare l'equazione del piano si deve calcolare il determinante della seguente matrice con la condizione che sia uguale a zero
(x-x1, y-y1, z-z1,
x2-x1, y2-y1, z2-z1,
x3-x2, y3-y2, z3-z2)
con la formula di Laplace per il determinante si ha che (x,y,z sono le variabili)
(x-x1)[(y2-y1)(z3-z1)-(y3-y1)(z2-z2)] - (y-y1)[(x2-x1)(z3-z1)-(x3-x1)(z2-z1)]+ (z-z1)[(x2-x1)(y3-y1)-(x3-x1)(y2-y1)]= 0
si ha cosi' un risultato nella forma
Il sistema di coordinate ha l'asse Z orientato come la distanza dal sensore, X ed Y invece sono lungo la dimensione della matrice di acquisizione
Presi tre punti nello spazio (x1,y1,z1),(x2,y2,z2),(x3,y3,z3) non allineati (questa condizione visto che i dati vengono da uno strumento di misura reale diciamo che e' soddisfatta a priori) per calcolare l'equazione del piano si deve calcolare il determinante della seguente matrice con la condizione che sia uguale a zero
(x-x1, y-y1, z-z1,
x2-x1, y2-y1, z2-z1,
x3-x2, y3-y2, z3-z2)
con la formula di Laplace per il determinante si ha che (x,y,z sono le variabili)
(x-x1)[(y2-y1)(z3-z1)-(y3-y1)(z2-z2)] - (y-y1)[(x2-x1)(z3-z1)-(x3-x1)(z2-z1)]+ (z-z1)[(x2-x1)(y3-y1)-(x3-x1)(y2-y1)]= 0
si ha cosi' un risultato nella forma
ax+by+cz = 0
una volta calcolato il piano si deve calcolare la normale (nx,ny,nz)si calcola la derivata parziale
F = ax +by+cz
nx = dF/dx, ny = dF/dy, nz = dF/dz.
Visto che si tratta di un piano la derivata parziale e' banale e le componenti del vettore normale sono (a,b,c)
-----------------------------------------------------------
Un metodo alternativo (che non prevede di calcolare prima l'equazione di un piano) e' quella di calcolare il prodotto vettoriale tra i due del triangolo). Per esempio dati sempre i tre punti (x1,y1,z1),(x2,y2,z2),(x3,y3,z3) si prendono due vettori
v = (x2-x1, y2-y1, z2-z1)
w = (x3-x1, y3-y1, y3-y1)
il vettore normale e' dato dal determinante della matrice
(x,y,z
v1 ,v2 ,v3,
w1,w2,w2)
n = u X v = (v2w3-v3w2)x+(v3w1-v1w3)y+(v1w2-v2w1)z
Adesso c'e il problema e' di normali ce ne sono due essendo la superficie orientata (brutalmente una sotto ed una sopra al piano) oppure nel prodotto vettoriale dipende dall'ordine con cui si pongono i vettori (vXw e' diverso da wXv)
A questo punto si puo' procedere normalizzando il vettore.
nn1 = n1/sqrt(n1n1+n2n2+n3n3)
nn2 = n2/sqrt(n1n1+n2n2+n3n3)
nn3 = n3/sqrt(n1n1+n2n2+n3n3)
il passaggio da coordinate cartesiane a coordinate.
A questo punto si puo' procedere normalizzando il vettore.
nn1 = n1/sqrt(n1n1+n2n2+n3n3)
nn2 = n2/sqrt(n1n1+n2n2+n3n3)
nn3 = n3/sqrt(n1n1+n2n2+n3n3)
il passaggio da coordinate cartesiane a coordinate.
Se si guarda la libreria PCL la ricostruzione della normale ad una superficie viene effettuata mediante il calcolo delle componenti principali che permette anche di gestire anche che l'orientazione delle normali sia coerente
mercoledì 21 marzo 2018
Rough AP
Ancora una domanda: ma se mi connetto ad un access point pubblico quali rischi si possono correre?? Ho provato a montarmi un Access Point per auto rubarmi le credenziali di accesso alla mia webmail lavorativa (Squirrel Mail su un accesso HTTP ..non HTTPS)
La cosa e' stata particolarmente banale. Per l'Access Point ho visto che c'erano molte alternative ma alla fine quella piu' semplice e' stata quella di usare WiFi Pumpkin.
Per recuperare le credenziali di accesso ho usato net-creds.py.
Il login e la password recuperati hanno necessitato 10 minuti di lavoro...non di piu'
Si ..vabbe'...ma HTTPS ?? Non ho provato ma qualcosa mi dice SSLSTRIP ... non funziona ovunque ma e' sempre una possibilita'
La cosa e' stata particolarmente banale. Per l'Access Point ho visto che c'erano molte alternative ma alla fine quella piu' semplice e' stata quella di usare WiFi Pumpkin.
Per recuperare le credenziali di accesso ho usato net-creds.py.
Il login e la password recuperati hanno necessitato 10 minuti di lavoro...non di piu'
Si ..vabbe'...ma HTTPS ?? Non ho provato ma qualcosa mi dice SSLSTRIP ... non funziona ovunque ma e' sempre una possibilita'
lunedì 19 marzo 2018
Nascondersi su una LAN
Mi e' venuta una domanda e provo a rispondermi...e' possibile nascondere completamente un dispositivo, per esempio Linux, su una LAN?
Iniziamo con le cose semplici. Per nascondersi da una scansione di port scanning tipo NMAP sicuramente bisogna non esporre nessun servizio di rete. Questo e' facile perche' basta configurare una regola del firewall della propria macchina che droppando (DROP su Iptables o simil) tutte le connessioni in ingresso.
Rimane il problema che alcuni tipi di demoni (tipo AVAHI) generano automaticamente traffico in uscita rendendovi visibili a livello di traffico sulla macchina di frontiera. Ovviamente la macchina deve essere configurata anche con un IP statico in modo da non fare richieste al DHCP server
E fino qui cose semplici...rimane il protocollo ARP, il responsabile di associare il MAC Address ad un IP. Per lavorare uno switch od un router devono avere una tabella di conversione tra MAC Address ed IP. Tale tabelle viene generata inviando delle pacchetti ARP Request a cui ogni client risponde dando le proprie generalita' di rete oppure monitorando in modo passivo il traffico di rete tenendo nota delle coppie IP-MAC (poi ci sono gli accoppiamenti statici ma questi vengono generati dall'amministratore di sistema direttamente nello switch e non sono di interesse)
E' possibile disabilitare le risposte del protocollo ARP ma cio' impedirebbe immediatamente alla macchina le sue funzionalita' di rete...si potrebbe solo vedere il traffico in modo completamente passivo in modalita' promiscua ma su una rete switchata, come sono praticamente tutte adesso, non avrebbe alcun senso.
In conclusione e' possibile nascondersi completamente in una lan come un computer spento o come un terminale con il cavo di rete staccato...non facendo niente
Iniziamo con le cose semplici. Per nascondersi da una scansione di port scanning tipo NMAP sicuramente bisogna non esporre nessun servizio di rete. Questo e' facile perche' basta configurare una regola del firewall della propria macchina che droppando (DROP su Iptables o simil) tutte le connessioni in ingresso.
Rimane il problema che alcuni tipi di demoni (tipo AVAHI) generano automaticamente traffico in uscita rendendovi visibili a livello di traffico sulla macchina di frontiera. Ovviamente la macchina deve essere configurata anche con un IP statico in modo da non fare richieste al DHCP server
E fino qui cose semplici...rimane il protocollo ARP, il responsabile di associare il MAC Address ad un IP. Per lavorare uno switch od un router devono avere una tabella di conversione tra MAC Address ed IP. Tale tabelle viene generata inviando delle pacchetti ARP Request a cui ogni client risponde dando le proprie generalita' di rete oppure monitorando in modo passivo il traffico di rete tenendo nota delle coppie IP-MAC (poi ci sono gli accoppiamenti statici ma questi vengono generati dall'amministratore di sistema direttamente nello switch e non sono di interesse)
E' possibile disabilitare le risposte del protocollo ARP ma cio' impedirebbe immediatamente alla macchina le sue funzionalita' di rete...si potrebbe solo vedere il traffico in modo completamente passivo in modalita' promiscua ma su una rete switchata, come sono praticamente tutte adesso, non avrebbe alcun senso.
In conclusione e' possibile nascondersi completamente in una lan come un computer spento o come un terminale con il cavo di rete staccato...non facendo niente
venerdì 16 marzo 2018
Elks Linux per 8086
Era circa la meta' degli anni 90 quando si iniziava a sentire parlare di Linux ma io non potevo provarlo perche' usavo ancora un Olivetti M24 con processore 8086 mentre Linux ha sempre richiesto un processore minimo della classe 386.
A distanza di cosi' tanti anni ho scoperto che esiste un progetto, peraltro datato 1995, per usare un sottoinsieme del kernel Linux su processori 8086. Questo progetto si chiama Elks e non potevo fare a meno di provarlo (la sigla sta per Embeddable Linux Kernel Subset). Le FAQ in italiano si trovano qui qui e qui
Ho iniziato cercando di compilare tutto dai sorgenti ma ho avuto un bel po' di problemi anche seguendo pedissequamente le istruzioni...per scoprire che esistono delle immagini floppy gia' pronte
Non volendo tirare fuori dalla mia collezione un vero PC XT 8086 e' possibile provare ELKS in DOSEMU. Basta andare in /etc/dosemu/dosemu.conf ed indicare nel parametro $_vbootfloppy come immagine disco la path per esempio full3 ed avviare con
dosemu -A
A distanza di cosi' tanti anni ho scoperto che esiste un progetto, peraltro datato 1995, per usare un sottoinsieme del kernel Linux su processori 8086. Questo progetto si chiama Elks e non potevo fare a meno di provarlo (la sigla sta per Embeddable Linux Kernel Subset). Le FAQ in italiano si trovano qui qui e qui
Ho iniziato cercando di compilare tutto dai sorgenti ma ho avuto un bel po' di problemi anche seguendo pedissequamente le istruzioni...per scoprire che esistono delle immagini floppy gia' pronte
Non volendo tirare fuori dalla mia collezione un vero PC XT 8086 e' possibile provare ELKS in DOSEMU. Basta andare in /etc/dosemu/dosemu.conf ed indicare nel parametro $_vbootfloppy come immagine disco la path per esempio full3 ed avviare con
dosemu -A
giovedì 15 marzo 2018
Rubber Duck clone con Arduino Leonardo
Rubber Ducky e' un dispositivo di Hak5 che permette di effettuare penetration testing su macchine a cui si ha accesso fisico. In pratica si tratta di un dispositivo che viene visto dal computer come una tastiera e che invia caratteri tastiera da uno script predefinito come se fosse un utente umano. Lo script puo' essere configurato in modo da compromettere il terminale.
Qualcosa di simile e' BadUSB anche se in questo caso si prende una chiavetta di memoria USB che agisce come tastiera ma mantiene anche le sue caratteristiche di espansione di memoria.
E' possibile fare qualcosa di simile anche con una Arduino Leonardo dato che anche questa scheda ha una funzionalita' di tastiera. Io ho acquistato un mini clone di Arduino Leonardo
La scheda originale viene programmata mediante un suo linguaggio di scripting ed a questo link sono disponibili vari payload (sia innocui che offensivi)
Per convertire i payload da Rubber Ducky a Arduino Leonardo si puo' usare il comodo servizio online https://nurrl.github.io/Duckuino/.
Attenzione : gli script sono sia funzione del sistema operativo che del layout della tastiera
Dal sito viene scaricato un file .zip con lo script .ino e Keyboard.h e Keyboard.cpp...non si tratta della libreria Keyboard di Arduino...nel file Keyboard.cpp si trova la configurazione del layout di tastiera desiderato (per esempio US od IT)
Per compilare lo sketch su Linux ho dovuto modificare il file Keyboard.h eliminando la riga
#include "HID.h"
inoltre il comando dell'esempio Hello World
Keyboard.press("r");
deve essere modificato in (il carattere e' incluso in apici singoli, la stringa in apici doppi)
Keyboard.press('r');
Un po' di note
1) Una volta caricato il payload questo viene mandato subito in esecuzione. In caso di payload malevolo puo' compromettere anche la macchina di sviluppo.Per questo motivo e' fortemente consigliato di inserire un delay nell'avvio del payload in modo da dare il tempo di disinserire la chiavetta.
2) Su Linux e Mac funziona tutto magnificamente ed in modo trasparente. Se si connette la schedina ad un computer Windows e si tenta di usare un payload malevole la cosa sara' molto meno trasparente perche' Windows si accorge che oltre all'interfaccia HID trova anche due dispositivi Arduino e tenta di scaricare i driver da Internet. Per evitare questa cosa ci sarebbe da pasticciare sui files boards.txt and USBDescriptor.h di Arduino IDE ma al momento non ho tempo di provarci
Qualcosa di simile e' BadUSB anche se in questo caso si prende una chiavetta di memoria USB che agisce come tastiera ma mantiene anche le sue caratteristiche di espansione di memoria.
Esempio di script automatico in esecuzione su Ubuntu Keyboard US Layout |
E' possibile fare qualcosa di simile anche con una Arduino Leonardo dato che anche questa scheda ha una funzionalita' di tastiera. Io ho acquistato un mini clone di Arduino Leonardo
La scheda originale viene programmata mediante un suo linguaggio di scripting ed a questo link sono disponibili vari payload (sia innocui che offensivi)
Per convertire i payload da Rubber Ducky a Arduino Leonardo si puo' usare il comodo servizio online https://nurrl.github.io/Duckuino/.
Attenzione : gli script sono sia funzione del sistema operativo che del layout della tastiera
Dal sito viene scaricato un file .zip con lo script .ino e Keyboard.h e Keyboard.cpp...non si tratta della libreria Keyboard di Arduino...nel file Keyboard.cpp si trova la configurazione del layout di tastiera desiderato (per esempio US od IT)
Per compilare lo sketch su Linux ho dovuto modificare il file Keyboard.h eliminando la riga
#include "HID.h"
inoltre il comando dell'esempio Hello World
Keyboard.press("r");
deve essere modificato in (il carattere e' incluso in apici singoli, la stringa in apici doppi)
Keyboard.press('r');
Un po' di note
1) Una volta caricato il payload questo viene mandato subito in esecuzione. In caso di payload malevolo puo' compromettere anche la macchina di sviluppo.Per questo motivo e' fortemente consigliato di inserire un delay nell'avvio del payload in modo da dare il tempo di disinserire la chiavetta.
2) Su Linux e Mac funziona tutto magnificamente ed in modo trasparente. Se si connette la schedina ad un computer Windows e si tenta di usare un payload malevole la cosa sara' molto meno trasparente perche' Windows si accorge che oltre all'interfaccia HID trova anche due dispositivi Arduino e tenta di scaricare i driver da Internet. Per evitare questa cosa ci sarebbe da pasticciare sui files boards.txt and USBDescriptor.h di Arduino IDE ma al momento non ho tempo di provarci
lunedì 12 marzo 2018
Programmare HP 95LX
In questo post avevo mostrato un esempio di retrocomputing, un HP 95 LX pocket computer MS-DOS 8088 compatibile.
Come indicato nella memoria e' disponibile solo COMMAND.COM e non ci sono comandi MS-DOS esterni quindi nemmeno EDLIN od altri editor piu' complessi e non era disponibile nemmeno un compilatore (tipo GW-Basic).....il problema e' che volevo provare a farci girare un mio programma.
Il problema di non avere un editor e' stato risolto con il comando interno DOS
COPY CON nome_file
Dopo aver dato invio tutti gli input da tastiera vengono inviati al file. Per terminare CTRL+Z ed Invio
Per creare un programma eseguibile si puo' usare COPY CON ed inputare codici in linguaggio macchina. Per esempio si prende un semplice programma Assembler
org 0x100 ; .com files always start 256 bytes into the segment
; int 21h is going to want...
mov dx, msg ; the address of or message in dx
mov ah, 9 ; ah=9 - "print string" sub-function
int 0x21 ; call dos services
mov dl, 0x0d ; put CR into dl
mov ah, 2 ; ah=2 - "print character" sub-function
int 0x21 ; call dos services
mov dl, 0x0 ; put LF into dl
mov ah, 2 ; ah=2 - "print character" sub-function
int 0x21 ; call dos services
mov ah, 0x4c ; "terminate program" sub-function
int 0x21 ; call dos services
In questa foto si vede il programma funzionare ma per un errore sul puntatore di fine stringa viene mostrato anche il contenuto della memoria....una cosa che succedeva in ASM su MS-DOS |
Come indicato nella memoria e' disponibile solo COMMAND.COM e non ci sono comandi MS-DOS esterni quindi nemmeno EDLIN od altri editor piu' complessi e non era disponibile nemmeno un compilatore (tipo GW-Basic).....il problema e' che volevo provare a farci girare un mio programma.
Il problema di non avere un editor e' stato risolto con il comando interno DOS
COPY CON nome_file
Dopo aver dato invio tutti gli input da tastiera vengono inviati al file. Per terminare CTRL+Z ed Invio
Per creare un programma eseguibile si puo' usare COPY CON ed inputare codici in linguaggio macchina. Per esempio si prende un semplice programma Assembler
org 0x100 ; .com files always start 256 bytes into the segment
; int 21h is going to want...
mov dx, msg ; the address of or message in dx
mov ah, 9 ; ah=9 - "print string" sub-function
int 0x21 ; call dos services
mov dl, 0x0d ; put CR into dl
mov ah, 2 ; ah=2 - "print character" sub-function
int 0x21 ; call dos services
mov dl, 0x0 ; put LF into dl
mov ah, 2 ; ah=2 - "print character" sub-function
int 0x21 ; call dos services
mov ah, 0x4c ; "terminate program" sub-function
int 0x21 ; call dos services
Lo si compila su una macchina ospite e con un editor esadecimale si legge il risultato che e' qualcosa del tipo
Fino a qui la cosa potrebbe anche funzionare ma ci si ferma subito perche' si vede che alcuni codici non sono presenti sulla tastiera...come fare l'input di tali codici?? Mi sono ricordato che ai tempi del Turbo Pascal 5.0 su M24 per fare le parentesi graffe (non presenti sulla tastiera italiana) all'epoca usavo la conbinazione ALT+123.
Cosi convertendo in decimale l'output esadecimale del compilatore e digitando ognuno dei numeri seguenti preceduti da ALT ed usando COPY CON si puo' creare un file .COM eseguibile
--------------------------------------------------------
186
23
1
180
9
205
33
178
13
180
2
205
33
178
5
180
2
205
33
180
76
205
33
76
117
99
97
36
--------------------------------------------------------
complicato ma funzionante
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...