mercoledì 3 settembre 2014

Security update automatico su Debian e CentOS

Dato che sono diventato pigro ed i server sono aumentati ho deciso di mettere l'aggiornamento automatico sulle macchine CentOS e Debian. Cio' che volevo evitare usando un sistema automatico era quello di avere aggiornamenti non di sicurezza che possono compromettere le applicazioni in uso
Con l'ultima versione di CentOS7 e qualche modifica su Debian adesso e' decisamente fattibile

CentOS
per attivare l'aggiornamento automatico su CentOS si deve installare il pacchetto yum-cron
yum install yum-cron

la configurazione si effettua mediante /etc/yum/yum-cron.conf
l'aspetto nuovo di CentOs 7 e' la possibilita' di selezionare l'aggiornamento dei soli pacchetti di sicurezza modificando update_cmd
Per l'installazione automatico si porta su yes apply_updates

Comoda e' la possibilita' di impostare una mail a cui inviare i messaggi
Per attivare yum-cron si digita

systemctl start yum-cron.service
per verifica lo stato del servizio
systemctl status yum-cron.service
---------------------------------------------------------------------------

Debian
Per Debian ho usato la guida di questo sito
in pratica si deve creare il file /etc/cron-apt/action.d/5-security ed aggiungere

upgrade -y -o APT::Get::Show-Upgraded=true

creare il file /etc/cron-apt/config.d/5-security  ed aggiungere
OPTIONS="-o quiet=1 --no-list-cleanup -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts=\"/dev/null\""

creare il file /etc/apt/sources.list.d/security.list ed aggiungere

deb http://security.debian.org/ wheezy/updates main deb-src 
http://security.debian.org/ wheezy/updates main


a questo punto il cron e' settato per le 4 di notte (si modifica da /etc/cron.d/)
si puo' comunque forzare mediante cron-apt

di seguito il risultato su /var/log/cron-apt/log
-----------------------------------------------------------------
root@debian:/etc/cron.d# tail /var/log/syslog
Sep  3 11:48:28 debian cron-apt: CRON-APT LINE: /usr/bin/apt-get -o quiet=1 --no-list-cleanup -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts="/dev/null" upgrade -d -y -o APT::Get::Show-Upgraded=true
Sep  3 11:48:28 debian cron-apt: Reading package lists...
Sep  3 11:48:28 debian cron-apt: Building dependency tree...
Sep  3 11:48:28 debian cron-apt: Reading state information...
Sep  3 11:48:28 debian cron-apt: The following packages will be upgraded:
Sep  3 11:48:28 debian cron-apt:   liblua5.1-0
Sep  3 11:48:28 debian cron-apt: 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Sep  3 11:48:28 debian cron-apt: Need to get 0 B/185 kB of archives.
Sep  3 11:48:28 debian cron-apt: After this operation, 32.8 kB disk space will be freed.
Sep  3 11:48:28 debian cron-apt: Download complete and in download only mode

SSH domenica mattina

Svegliarsi una domenica mattina e trovare la porta 22 tempestata di 7205 richieste di accesso non ha prezzo




martedì 2 settembre 2014

Trojan (cinese?) su server Debian

Su un server Debian ho trovato un file denominato zcrunqppuv all'interno della directory /boot con un corrispettivo script di lancio in /etc/init.d/
Sulla macchina (non aggiornata) erano attivi lighthttpd, ssh, vnc e teamviewer

Il file ha una dimensione di 621980 bytes ed una firma MD5 33e562001c623b69ac433f4951106a51

Visto il nome e visto che non ricordo di aver mai visto una Debian con un nome di questo tipo dentro /boot ho provato ad indagare. Con il comando file si ha che

zcrunqppuv: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped

ho provato a decompilarlo con RecStudio ma il programma non terminava mai l'elaborazione. Mediante objdump e strings ho recuperato l'inizio del programma

------------------------------------------ 
 8048110 31ed5e89 e183e4f0 50545268 90490508  1.^.....PTRh.I..
 8048120 68d04905 08515668 d0c90408 e8efc000  h.I..QVh........
 8048130 00f49090 5589e553 83ec04e8 00000000  ....U..S........
 8048140 5b81c320 4f08008b 93fcffff ff85d274  [.. O..........t
 8048150 05e8aa7e fbf7585b c9c39090 90909090  ...~..X[........
 8048160 5589e553 83ec0480 3dc4db0c 08007554  U..S....=.....uT
 8048170 b824d00c 082d1cd0 0c08c1f8 028d58ff  .$...-........X.
 8048180 a1c0db0c 0839c376 1f8db426 00000000  .....9.v...&....
 8048190 83c001a3 c0db0c08 ff14851c d00c08a1  ................
 80481a0 c0db0c08 39c377e8 b870f80a 0885c074  ....9.w..p.....t
 80481b0 0cc70424 7c6b0c08 e8b37606 00c605c4  ...$|k....v.....
 80481c0 db0c0801 83c4045b 5dc38db6 00000000  .......[].......
 80481d0 55b8d0fa 0a0889e5 83ec18e8 00000000  U...............
 80481e0 5a81c280 4e080085 c0742089 54240cc7  Z...N....t .T$..
 80481f0 44240800 000000c7 442404c8 db0c08c7  D$......D$......
 8048200 04247c6b 0c08e8c5 780600a1 28d00c08  .$|k....x...(...
 8048210 85c07412 b8000000 0085c074 09c70424  ..t........t...$
 8048220 28d00c08 ffd0c9c3 5589e583 ec188b45  (.......U......E
 8048230 10894424 088b450c 89442404 8b450889  ..D$..E..D$..E..
 8048240 0424e879 d901008b 45108944 24048b45  .$.y....E..D$..E
 8048250 08890424 e8271100 00b80000 0000c9c3  ...$.'..........
 8048260 5589e583 ec288b45 0c83e801 89442408  U....(.E.....D$.
 8048270 8b450889 442404c7 0424911c 0b08e8cd  .E..D$...$......
------------------------------------------

Tra le stringhe si osservano i seguenti indirizzi IP
1.1.2.1 (Cina)
103.25.9.228 (Cina)
8.8.8.8 (il DNS di Google)

Un altro aspetto interessante e' la seguente sequenza
------------------------------------------
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler ; .NET CLR 1.1.4322)
Connection: Keep-Alive
http://
POST %s HTTP/1.1
%sHost: %s
Content-Type: application/x-www-form-urlencoded
------------------------------------------
zh-cn indica il codice del cinese semplificato cinese semplificato 


inoltre c'e' la seguente sequenza
------------------------------------------
Genu
Auth
cAMD
enti
ntel
ineI
------------------------------------------
che riordinata indica GenuineIntelAuthenticAMD

inoltre la sequenza
------------------------------------------
/usr
/lib
/gcof
------------------------------------------
e' stata ritrovata a questo link su un programma per l'indentificazione di malware

------------------------------------------
 80b1c00 03000000 01000200 00000000 484f4d45  ............HOME
 80b1c10 3d2f0048 49535446 494c453d 2f646576  =/.HISTFILE=/dev
 80b1c20 2f6e756c 6c004d59 53514c5f 48495354  /null.MYSQL_HIST
 80b1c30 46494c45 3d2f6465 762f6e75 6c6c0000  FILE=/dev/null..
 80b1c40 50415448 3d2f6269 6e3a2f73 62696e3a  PATH=/bin:/sbin:
 80b1c50 2f757372 2f62696e 3a2f7573 722f7362  /usr/bin:/usr/sb
 80b1c60 696e3a2f 7573722f 6c6f6361 6c2f6269  in:/usr/local/bi
 80b1c70 6e3a2f75 73722f6c 6f63616c 2f736269  n:/usr/local/sbi
 80b1c80 6e3a2f75 73722f58 31315236 2f62696e  n:/usr/X11R6/bin
 80b1c90 002f7072 6f632f73 656c662f 65786500  ./proc/self/exe.
 80b1ca0 2f70726f 632f2564 2f657865 0023212f  /proc/%d/exe.#!/
 80b1cb0 62696e2f 73680a25 730a002f 6574632f  bin/sh.%s../etc/
 80b1cc0 696e6974 2e642f25 73007700 2f657463  init.d/%s.w./etc
 80b1cd0 2f726325 642e642f 53393025 73006d20  /rc%d.d/S90%s.m 
 80b1ce0 5d29351c 36002573 2573002f 7362696e  ])5.6.%s%s./sbin
 80b1cf0 2f696e73 6d6f6400 7f454c46 00000000  /insmod..ELF....
------------------------------------------
Le prime linee mandano verso /dev/null in modo da non registrare nulla sulla history di bash (in pratica si nasconde cio' che viene digitato sulla shell

------------------------------------------
HOME=/
HISTFILE=/dev/null
MYSQL_HISTFILE=/dev/null
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin
/proc/self/exe
/proc/%d/exe
#!/bin/sh
/etc/init.d/%s
/etc/rc%d.d/S90%s
m ])5
%s%s
/sbin/insmod
/proc/net/dev
/proc/rs_dev
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler ; .NET CLR 1.1.4322)
Connection: Keep-Alive
http://
POST %s HTTP/1.1
%sHost: %s
Content-Type: application/x-www-form-urlencoded
Content-Length: %d
%s%s
GET %s HTTP/1.1
%sHost: %s
/proc/net/tcp
socket:[
/proc
/proc/%d/exe
/proc/%d/fd
/proc/%s/fd/%s
info=
%u:%s|
%s_%d:%s|
%s/%s
md5=
denyip=
filename=
rmfile=
------------------------------------------

il codice risulta essere stato compilato su 
GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-46)
il che e' strano dato che la macchina e' una Debian

In conclusione non ho trovato niente su Google ma ho qualcosa di piu' di un sospetto che si tratti di un malware di origine cinese

mercoledì 27 agosto 2014

Cambio port https su Proxmox

A causa di configurazione firewall, una volta montato Proxmox non riuscivo a contattarlo sul protocollo https alla porta 8006 (default) mentre era raggiungibile via SSH



Per aggirare le politiche del firewall si puo' procedere come segue

effettuare un kill del processo pveproxy
editare il file /usr/bin/pveproxy
sostituire nel file il numero di porta 8006 con un altro (io ho usato 8080 in modo da bucare il firewall) all'incirca in corrispondenza della stringa keep_alive
riavviare pveproxy

martedì 26 agosto 2014

IptabLes (2)

Dopo quanto visto nel precedente post, ho provato un po' a divertirmi con IptabLes

Le dimensioni dei file coinvolti sono piuttosto notevoli
.IptabLes 1103207 bytes
.IptabLex 722392 bytes

con il comando file si vede che il file non e' stato strippato

IptabLes: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, from '@%ebx', not stripped 

IptabLex: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, from '@%ebx', not stripped

inoltre entrambi sono linkati staticamente (il che giustifica le dimensioni in quanto si portano dietro tutte le librerie di cui hanno bisogno)

mediante il comando strings si vede che il programma non e' criptato
-----------------------------
rm -f %s
/proc/self/exe
GETFILE_%08X
http://www.yahoo.com.http://www.baidu.com.http://www.china.com.http://www.ifeng.com
abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
/proc
/proc/%s/exe
/delxxaazz
/rc.d/r
/etc%sc%d.d/S55IptabLes
/delallmykkk
/delallmykkk>/dev/null
cp %s %s>/dev/null
/etc/rc.d/init.d/IptabLes
/etc/rc.d/IptabLes
/boot/IptabLes
%d.%d.%d
/boot/.IptabLes
/usr/.IptabLes
xxxx
#!/bin/sh
exit 0
#!/bin/sh
if [ -z $1 ] ; then
ps -f -C .IptabLes |grep .IptabLes | awk '{print $3}' | xargs $0 2
ps -f -C .IptabLes |grep .IptabLes | awk '{print $3}' | xargs $0 2
ps -f -C .IptabLes |grep .IptabLes | awk '{print $2}' | xargs $0 2
ps -f -C .IptabLes |grep .IptabLes | awk '{print $2}' | xargs $0 2
ps -axu | grep .IptabLes | awk '{print $2}' |xargs kill -9
ps -axu | grep .IptabLes | awk '{print $2}' |xargs kill -9
ps -C .IptabLes | xargs kill -9
ps -C .IptabLes | grep .IptabLes |xargs kill -9
rm -f /boot/.stabip
rm -f /boot/.IptabLes
rm -f /etc/rc.d/init.d/IptabLes
rm -f /boot/IptabLes
rm -f /tmp/IptabLes
rm -f /usr/IptabLes
rm -f /usr/.IptabLes
rm -f /boot/.IptabLes
rm -f /.IptabLes
rm -f /boot/IptabLes
rm -f /IptabLes
rm -f /etc/rc.d/rc4.d/*IptabLes
rm -f /etc/rc.d/rc1.d/*IptabLes
rm -f /etc/rc.d/rc2.d/*IptabLes
rm -f /etc/rc.d/rc3.d/*IptabLes
rm -f /etc/rc.d/rc0.d/*IptabLes
rm -f /etc/rc.d/rc5.d/*IptabLes
rm -f /etc/rc.d/rc6.d/*IptabLes
rm -f /etc/init.d/IptabLes
rm -f /etc/rc4.d/*IptabLes
rm -f /etc/rc1.d/*IptabLes
rm -f /etc/rc2.d/*IptabLes
rm -f /etc/rc3.d/*IptabLes
rm -f /etc/rc0.d/*IptabLes
rm -f /etc/rc5.d/*IptabLes
rm -f /etc/rc6.d/*IptabLes
rm -rf "$0"
else
if [ -z $2 ] ; then
exit
else
if [ 1 -ne $2 ] ; then
kill -9 $2
exit
#!/bin/bash
sleep 3
kill %d
sleep 1
rm -f %s
rm -rf "$0"
sh /delxxaazz
/proc/net/dev
face
rrrrrrss
FATAL: exception not rethrown
/proc/sys/kernel/version
/proc/sys/kernel/osrelease
FATAL: kernel too old
FATAL: cannot determine kernel version
/dev/full
set_thread_area failed when setting up thread-local storage
UUUU
?3333
/bin/sh
exit 0
LIBC_FATAL_STDERR_
/dev/tty

-----------------------------
si legge anche chiaramente dove vengono messi i file ed alcuni comandi di shell
Francamente non ho esperienza in Assembler ma mediante il decompilatore RecStudio e' possibile leggere in chiaro il nome delle funzioni tra cui si vede chiaramente SynFlood e DNSFlood che corrisponde a quanto fa effettivamente il programma


Dalla lettura delle stringhe sembra che il programma sia stato compilato su una RedHat con un compilatore GCC 4.1.2 (che se fosse corretto risulta essere una versione piuttosto vecchiotta)

lunedì 25 agosto 2014

Potenza del segnale di CC2541


L'integrato Texas Instruments CC2541 su cui si basano alcuni beacon permette di modificare la potenza di trasmissione da +4 dBm a -23 dBm. Cio' consente di aumentare o diminuire il proprio raggio d'azione


Nell'applicazione che uso i valori di potenza non impostati a 4 valori prefissati

0 dBm : potenza standard
4 dBm : circa il doppio della potenza standard
-6 dBm : un quarto della potenza standard
-23 dBm : un ventesimo della potenza standard

Per vedere se effettivamente le modifiche influenzano il raggio d'azione del beacon ho provato a plottare la potenza contro il valore di rssi (facendo una media e la deviazione standard di una serie di dati a causa della instabilita' intrinseca del segnale). La prova e' stata eseguita mantenendo beacon e telefono a distanza fissa per tutto il tempo


Come si vede dal grafico i casi 0dBm e +4dBm sono praticamente non distinguibili, nel caso di -6dBm il valore di rssi e' di qualita' inferiore a causa della diminuzione del segnale. Quando la potenza del beacon passa a -23dBm il valore di rssi e' praticamente fisso a 95 ovvero il telefono e' praticamente fuori al raggio d'azione del beacon e legge solo un valore di fondo scala


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...