Spyware in Opera

v 2.18 24-FEB-05

    Вместо введения.

Получив многочисленные отзывы о статье пришлось сильно ее переработать.
Спасибо за конструктивную критику, замечания и наставления :) Итак..

Фактически Spyware в Опере действительно есть, т.к. налицо факт, что
большинство русскоязычных пользователей не подозревают о том, что при
определенных настройках незарегистрированной Оперы информация
практически о любом из запросе в сеть передается третим лицам.

Но все же, "де юро" это не так. Сама Опера на чистом английском
языке, как минимум в двух местах об этом предупреждает - в лицензии и
в соответствующей части Options. Сам механизм, по которому ссылки и
ваш IP передаются в Google является официально используемой самой
Google (и более чем уверен надежно запатентованой) технологией, суть
которой заключается в том, что на основании контента страничек по
которым ходит пользователь и его же IP-адреса, по которому
приблизительно можно вычислить в какой стране он находится, на
основании этих данных Google выбирает ему баннер с более подходящей
для этого пользователя тематикой и языком. Здесь можно почитать об
этих технологиях:

Google AdSense: http://www.google.com/adsense/
Google AdWords: http://adwords.google.com/

Сама же Opera Software на своем сайте пишет по этому поводу вот что:

Opera Browser Google Ads:  http://www.opera.com/adsupport/

Помимо всего прочего там написано, что информация отсылается только в
режиме показа баннеров с google. Если в опциях выбрать "Show generic
selection of graphical ads" ничего отсылаться не будет. Так же
подробно описаны web-запросы, при которых вообще ни при каких
условиях ничего не будет отсылаться:

-- Логины и пароли в виде http://user:pass@www.example.com
-- URLы с CGI параметрами (http://www.example.com?formsdata)
-- Данные форм переданные POST запросом
-- Не HTTP протоколы: HTTPS, FTP, NNTP, и т.д.
-- Нереальные IP адресв (RFC 1918: 10.*, 192.168.*, 172.16-172.31.*)
-- в полноэкранном режиме, при котором баннеры вообще не показываются.

Ну и на сколько я нарыл в интернете, AdWare появилось в Опере начиная
еще с 5-х версий и живет там до сих пор.


    Как вообще на это наткнулся:

выкладываю файл к себе на www (apache), для внутреннего использования:

[18:40:28] ~$ mv xxx_-_xxxxx.mp3 /var/www/xxx_-_xxxxx.mp3

далее тестовый запрос из моей Оперы к своему же серверу
(ОС - Linux Debian unstable, xx.xx.70.74 - мой IP, xxx_-_xxxxx.mp3 
- имя выложенного файла, xxxxxxxxx.net.ua - имя моего сервера):

xx.xx.70.74 - - [08/Oct/2004:18:41:34 +0300] "GET /xxx_-_xxxxx.mp3 
HTTP/1.1" 200 8850333 "-" "Mozilla/4.0 (compatible; MSIE 6.0; X11;
 Linux i686) Opera 7.54  [en]"

и в ту же секунду ко мне вдруг обращается робот google:

66.249.66.6 - - [08/Oct/2004:18:41:35 +0300] "GET /robots.txt HTTP/
1.1" 404 289 "-" "Mediapartners-Google/2.1"

и через 3 секунды начинает на максимальной скорости качать с меня 
выложеную mp3-шку (замечу, что во время следующих экспериментов 
выложеный файл он начинал качать сразу, robots.txt ему в принципе 
для этого не нужен, да он у меня к тому же его и нет, 404 Not Found)

66.249.66.6 - - [08/Oct/2004:18:44:59 +0300] "GET /xxx_-_xxxxx.mp3 
HTTP/1.1" 200 8850333 "-" "Mediapartners-Google/2.1"

$trafshow -np src xx.xx.70.74

From Address                 To Address                   Prot      Bytes CPS
==================================================================================
xx.xx.70.74..80            66.249.66.6..35068           tcp     3833760 xxxxx

$host 66.249.66.6
Name: crawl-66-249-66-6.googlebot.com
Address: 66.249.66.6

$whois 66.249.66.6

OrgName:    Google Inc.
OrgID:      GOGL
Address:    2400 E. Bayshore Parkway
City:       Mountain View
StateProv:  CA
PostalCode: 94043
Country:    US

NetRange:   66.249.64.0 - 66.249.79.255
CIDR:       66.249.64.0/20
NetName:    GOOGLE
NetHandle:  NET-66-249-64-0-1
Parent:     NET-66-0-0-0-0
NetType:    Direct Allocation
NameServer: NS1.GOOGLE.COM
NameServer: NS2.GOOGLE.COM
Comment:
RegDate:    2004-03-05
Updated:    2004-03-05

OrgTechHandle: ZG39-ARIN
OrgTechName:   Google Inc.
OrgTechPhone:  +1-650-318-0200
OrgTechEmail:  arin-contact@google.com

Раньше я уже неоднократно в логах apache видел обращения googlebot 
к любым ресурсам выложенным мною на моем сервере, даже на те, 
ссылки на которые я никогда никому не давал.
Я уже стал подумывать, но то что у apache с google внегласное 
соглашение, по которому первый крысит второму урлы на все что 
творится у себя на сервере.. Этим мол и объясняется то, что гугл 
на первом месте стоит по количеству охватываемого инета. :)
Хотя, конечно, если бы это было на самом деле, об этом всем было 
бы давно всем извесно.. Не сходится.. Растроеный я тупо смотрел 
на отрисованое перед моими гразами окно Оперы с перелевающимся 
сверху баннером рекламы google, который мне в принципе 
совершенно не мешает..
И тут меня осенило!! :) А уж не Опера ли это, со своим закрытым 
коммерческим кодом?!

Эксперимент заключаюшийся в выкладывании новосозданного файла
подтвертдил, что я прав :-/
Вводим урл http://xxxxxxxxx.net.ua/test.mp3 в Оперу и..

$tcpdump -npXs 1500

обращение к моему DNS:

20:28:28.129920 IP xx.xx.70.74.32821 > 192.168.80.1.53:  3531+ A? pagead-us.googlesyndication.com. (49)
 0x0000:  4500 004d 9bad 4000 4011 8474 c38a 464a  E..M..@.@..t..FJ
 0x0010:  c0a8 5001 8035 0035 0039 c455 0dcb 0100  ..P..5.5.9.U....
 0x0020:  0001 0000 0000 0000 0970 6167 6561 642d  .........pagead-
 0x0030:  7573 1167 6f6f 676c 6573 796e 6469 6361  us.googlesyndica
 0x0040:  7469 6f6e 0363 6f6d 0000 0100 01         tion.com.....
20:28:28.282386 IP 192.168.80.1.53 > xx.xx.70.74.32821:  3531 7/4/4 CNAME pagead-us.google.com., A 216.239.57.99, A 216.239.57.104, A 64.233.167.99, A 64.233.167.104, A 216.239.41.99, A 216.239.41.104 (343)
 0x0000:  4500 0173 5a09 0000 4011 04f3 c0a8 5001  E..sZ...@.....P.
 0x0010:  c38a 464a 0035 8035 015f 716b 0dcb 8180  ..FJ.5.5._qk....
 0x0020:  0001 0007 0004 0004 0970 6167 6561 642d  .........pagead-
 0x0030:  7573 1167 6f6f 676c 6573 796e 6469 6361  us.googlesyndica
 0x0040:  7469 6f6e 0363 6f6d 0000 0100 0109 7061  tion.com......pa
 0x0050:  6765 6164 2d75 7311 676f 6f67 6c65 7379  gead-us.googlesy
 0x0060:  6e64 6963 6174 696f 6e03 636f 6d00 0005  ndication.com...
 0x0070:  0001 0000 0052 0013 0970 6167 6561 642d  .....R...pagead-
 0x0080:  7573 0667 6f6f 676c 65c0 4dc0 5c00 0100  us.google.M.\...
 0x0090:  0100 0001 2c00 04d8 ef39 63c0 5c00 0100  ....,....9c.\...
 0x00a0:  0100 0001 2c00 04d8 ef39 68c0 5c00 0100  ....,....9h.\...
 0x00b0:  0100 0001 2c00 0440 e9a7 63c0 5c00 0100  ....,..@..c.\...
 0x00c0:  0100 0001 2c00 0440 e9a7 68c0 5c00 0100  ....,..@..h.\...
 0x00d0:  0100 0001 2c00 04d8 ef29 63c0 5c00 0100  ....,....)c.\...
 0x00e0:  0100 0001 2c00 04d8 ef29 68c0 6600 0200  ....,....)h.f...
 0x00f0:  0100 03e7 4900 0603 6e73 34c0 66c0 6600  ....I...ns4.f.f.
 0x0100:  0200 0100 03e7 4900 0603 6e73 31c0 66c0  ......I...ns1.f.
 0x0110:  6600 0200 0100 03e7 4900 0603 6e73 32c0  f.......I...ns2.
 0x0120:  66c0 6600 0200 0100 03e7 4900 0603 6e73  f.f.......I...ns
 0x0130:  33c0 66c0 db00 0100 0100 03e6 1c00 04d8  3.f.............
 0x0140:  ef26 0ac0 ed00 0100 0100 013c 5500 04d8  .&.........<U...
 0x0150:  ef20 0ac0 ff00 0100 0100 013c 5300 04d8  ...........<S...
 0x0160:  ef22 0ac1 1100 0100 0100 03e6 1c00 04d8  ."..............
 0x0170:  ef24 0a                                  .$.

договоривается с сервером гугла:

20:28:28.283461 IP xx.xx.70.74.36734 > 216.239.57.99.80: S 1585349807:1585349807(0) win 5840 <mss 1460,sackOK,timestamp 101227590 0,nop,wscale 7>
 0x0000:  4500 003c 18e9 4000 4006 05ac c38a 464a  E..<..@.@.....FJ
 0x0010:  d8ef 3963 8f7e 0050 5e7e 84af 0000 0000  ..9c.~.P^~......
 0x0020:  a002 16d0 ffbd 0000 0204 05b4 0402 080a  ................
 0x0030:  0608 9c46 0000 0000 0103 0307            ...F........
20:28:28.502171 IP 216.239.57.99.80 > xx.xx.70.74.36734: S 4079804838:4079804838(0) ack 1585349808 win 8190 <mss 1460>
 0x0000:  4500 002c ebe9 0000 e306 cfba d8ef 3963  E..,..........9c
 0x0010:  c38a 464a 0050 8f7e f32c e1a6 5e7e 84b0  ..FJ.P.~.,..^~..
 0x0020:  6012 1ffe 1420 0000 0204 05b4 0000       `.............
20:28:28.502279 IP xx.xx.70.74.36734 > 216.239.57.99.80: . ack 1 win 5840
 0x0000:  4500 0028 18ea 4000 4006 05bf c38a 464a  E..(..@.@.....FJ
 0x0010:  d8ef 3963 8f7e 0050 5e7e 84b0 f32c e1a7  ..9c.~.P^~...,..
 0x0020:  5010 16d0 350b 0000                      P...5...

и шлет ему GET запрос в котором содержится вся инфа о ресурсе 
который мною был запрошен и некоторых настроек броузера:

20:28:28.502845 IP xx.xx.70.74.36734 > 216.239.57.99.80: P 1:598(597) ack 1 win 5840
 0x0000:  4500 027d 18eb 4000 4006 0369 c38a 464a  E..}..@.@..i..FJ
 0x0010:  d8ef 3963 8f7e 0050 5e7e 84b0 f32c e1a7  ..9c.~.P^~...,..
 0x0020:  5018 16d0 7bb9 0000 4745 5420 2f70 6167  P...{...GET./pag
 0x0030:  6561 642f 6164 733f 6f65 3d75 7466 2d38  ead/ads?oe=utf-8
 0x0040:  2663 6c69 656e 743d 6361 2d6f 7065 7261  &client=ca-opera
 0x0050:  5f38 3030 7833 3026 666f 726d 6174 3d38  _800x30&format=8
 0x0060:  3030 7833 3026 616c 7465 726e 6174 655f  00x30&alternate_
 0x0070:  6164 5f75 726c 3d68 7474 7025 3341 2f2f  ad_url=http%3A//
 0x0080:  7465 7874 6164 732e 6f70 6572 612e 636f  textads.opera.co
 0x0090:  6d2f 6164 732f 2533 4666 6f72 6d61 7425  m/ads/%3Fformat%
 0x00a0:  3344 3830 3078 3330 2663 6861 6e6e 656c  3D800x30&channel
 0x00b0:  3d37 3534 2b65 6e26 7572 6c3d 6874 7470  =754+en&url=http
 0x00c0:  2533 412f 2fxx xxxx xxxx xxxx xxxx 2e6e  %3A//xxxxxxxxx.n
 0x00d0:  6574 2e75 612f 7465 7374 2e6d 7033 2048  et.ua/test.mp3.H
 0x00e0:  5454 502f 312e 310d 0a55 7365 722d 4167  TTP/1.1..User-Ag
 0x00f0:  656e 743a 204d 6f7a 696c 6c61 2f34 2e30  ent:.Mozilla/4.0
 0x0100:  2028 636f 6d70 6174 6962 6c65 3b20 4d53  .(compatible;.MS
 0x0110:  4945 2036 2e30 3b20 5831 313b 204c 696e  IE.6.0;.X11;.Lin
 0x0120:  7578 2069 3638 3629 204f 7065 7261 2037  ux.i686).Opera.7
 0x0130:  2e35 3420 205b 656e 5d0d 0a48 6f73 743a  .54..[en]..Host:
 0x0140:  2070 6167 6561 642d 7573 2e67 6f6f 676c  .pagead-us.googl
 0x0150:  6573 796e 6469 6361 7469 6f6e 2e63 6f6d  esyndication.com
 0x0160:  0d0a 4163 6365 7074 3a20 7465 7874 2f68  ..Accept:.text/h
 0x0170:  746d 6c2c 2061 7070 6c69 6361 7469 6f6e  tml,.application
 0x0180:  2f78 6d6c 3b71 3d30 2e39 2c20 6170 706c  /xml;q=0.9,.appl
 0x0190:  6963 6174 696f 6e2f 7868 746d 6c2b 786d  ication/xhtml+xm
 0x01a0:  6c2c 2069 6d61 6765 2f70 6e67 2c20 696d  l,.image/png,.im
 0x01b0:  6167 652f 6a70 6567 2c20 696d 6167 652f  age/jpeg,.image/
 0x01c0:  6769 662c 2069 6d61 6765 2f78 2d78 6269  gif,.image/x-xbi
 0x01d0:  746d 6170 2c20 2a2f 2a3b 713d 302e 310d  tmap,.*/*;q=0.1.
 0x01e0:  0a41 6363 6570 742d 4c61 6e67 7561 6765  .Accept-Language
 0x01f0:  3a20 7275 0d0a 4163 6365 7074 2d43 6861  :.ru..Accept-Cha
 0x0200:  7273 6574 3a20 6973 6f2d 3838 3539 2d31  rset:.iso-8859-1
 0x0210:  2c20 7574 662d 382c 2075 7466 2d31 362c  ,.utf-8,.utf-16,
 0x0220:  202a 3b71 3d30 2e31 0d0a 4163 6365 7074  .*;q=0.1..Accept
 0x0230:  2d45 6e63 6f64 696e 673a 2064 6566 6c61  -Encoding:.defla
 0x0240:  7465 2c20 677a 6970 2c20 782d 677a 6970  te,.gzip,.x-gzip
 0x0250:  2c20 6964 656e 7469 7479 2c20 2a3b 713d  ,.identity,.*;q=
 0x0260:  300d 0a43 6f6e 6e65 6374 696f 6e3a 204b  0..Connection:.K
 0x0270:  6565 702d 416c 6976 650d 0a0d 0a         eep-Alive....

и googlebot через несколько секунд потраченых на коммуникацюю 
между сообой и pagead-us.googlesyndication.com и на установку 
TCP/IP соедитения с моей машиной начинает качать с меня файл :(

Для тех кому трудно читать в столбик, такой вот запрос был послан
Оперой. Довольно занимательно:

        GET./pagead/ads?oe=utf-8&client=ca-opera_800x30&format=8
00x30&alternate_ad_url=http%3A//textads.opera.com/ads/%3Fformat%
3D800x30&channel=754+en&url=http%3A//xxxxxxxxx.net.ua/test.mp3.H
TTP/1.1..User-Agent:.Mozilla/4.0.(compatible;.MSIE.6.0;.X11;.Lin
ux.i686).Opera.7.54..[en]..Host:.pagead-us.googlesyndication.com
..Accept:.text/html,.application/xml;q=0.9,.application/xhtml+xm
l,.image/png,.image/jpeg,.image/gif,.image/x-xbitmap,.*/*;q=0.1.
.Accept-Language:.ru..Accept-Charset:.iso-8859-1,.utf-8,.utf-16,
.*;q=0.1..Accept-Encoding:.deflate,.gzip,.x-gzip,.identity,.*;q=
0..Connection:.Keep-Alive.

(или вот такой, если во время эксперимента включить прокси:
GET.http://pagead-us.googlesyndication.com/pagead/ads?oe=utf
-8&client=ca-opera_800x30&format=800x30.. и т.д.)

где http://xxxxxxxxx.net.ua/test.mp3 урл который опера с гуглом
без моего ведома у меня утянули, кстати вместе с приватной
мп3-шкой и соответственно не маленьким outcoming-траффиком :((

Cправедливости ради нужно заметить, что ни один подобным 
образом "перешедший третьим лицам" урл и его контент при
помощи того же google.com простым смертным не доступен.. 
Поиск в гугле любых подобных приватных документов выложеных 
у меня на сервере, например: "site:xxxxxxxxx.net.ua inurl:mp3"
возвращает 0 результатов, но меня это как-то мало успокаивает 
существуют ведь и не простые смертные тоже :(

Вывода два:
Во вервых, нужно фаерволить pagead-us.googlesyndication.com
вернее все записи A этого доменного имени (они кстати будут 
со временем меняться, поэтому лучше написать скрипт, который 
каждый день фаерволит все то, во что ресолвится этот домен):

# host pagead-us.googlesyndication.com
pagead-us.googlesyndication.com CNAME   pagead-us.google.com
pagead-us.google.com    A       216.239.41.99
pagead-us.google.com    A       216.239.41.104
pagead-us.google.com    A       216.239.57.99
pagead-us.google.com    A       216.239.57.104
pagead-us.google.com    A       64.233.167.99
pagead-us.google.com    A       64.233.167.104

Есть даже более простое и лаконичное решение на уровне DNS:
прописать в /etc/hosts строчку

127.0.0.1 yourhostname localhost pagead-us.google.com localhost.localdomain

или на любой другой адрес. И все :)

Забавно то, что если на 127.0.0.1 у вас установлен www-сервер,
то на месте баннера в Опере будет отображаться стандартное
сообщение 404 Not Found. Т.е. настроив соответствующим
образом apache теперь появляется возможность разместить на
место баннера все что душе заблагорассудится, начиная от
цвета фона оконной темы и заканчивая небольшой страничкой с
букмарками :)

например так (http://grizli.te.net.ua/ad.jpg):

/etc/apache/httpd.conf:
.....
<Location "/pagead/">
    ErrorDocument 404 http://127.0.0.1/ad.html
    ErrorDocument 403 http://127.0.0.1/ad.html
</Location>

/var/www/ad.html (#D4D0C8 - цвет фона окон цветовой темы Redmond 2000, в KDE ):

<html>
<style type="text/css"><!--
body { color:#888888; font-size:11pt; }
a{ font-family:Tahoma; color:#000000; font-size:8pt; text-decoration:none; }
a:hover { text-decoration: underline; color:#333333; }
//--></style>
<body bgcolor="#D4D0C8">
<a class="bold" href="http://www.newsru.com">newsru.com</a>
|
<a class="bold" href="http://www.linux.org.ru">linux.org.ru</a>
|
<a class="bold" href="http://localhost">localhost</a>
</body></html>

(не забудьте запретить доступ к ad.html всем кроме 127.0.0.1)


Второй вывод, при всей быстроте и удобности Оперы, своей
закрытостью и вражеской для GNU сообщества лицензией она
ощутимо проигрывает даже текстовому lynx, от которого по
крайней мере всегда знаешь что ожидать. Печально, очень
печально :(

PS. Опера не зарегистрирована, ставил из взятого с сайта оперы
последнего релиза: opera_7.54-20040803.5-shared-qt_en_i386.deb

Я лично не проверял, активировано ли AdWare для
зарегистрированых пользователей. Уверен, что нет, потому что
баннер физически не показывается. Но все же полной уверенности
по понятным причинам нет и быть не может.

-----

    Ответы на поступившие вопросы и замечания:

-- Чтобы самому "послушать" свою Оперу можно воспользоваться
такими вот простейшими снифферами:

tcpdump -npXs 1500 |grep -A5 -B25 "en\&url"
tcpdump -npXs 1500 |grep -A25 -B1 pagead

они кстати срабатыват абсолютно не всегда, потому что 
искомые строки совсем даже с не маленькой вероятностью могут
быть разбиты по разным строчкам дампа tcpdump. Так что может
даже будет удобнее пользоваться не консольными tcpdump и 
grep, а графическим Ethereal.

Что особенно забавно, даже сайт самого google не является 
исключением.

0x0020:  5018 1920 24a4 0000 4745 5420 2f70 6167  P...$...GET./pag
0x0030:  6561 642f 6164 733f 6f65 3d75 7466 2d38  ead/ads?oe=utf-8
0x0040:  2663 6c69 656e 743d 6361 2d6f 7065 7261  &client=ca-opera
0x0050:  5f38 3030 7833 3026 666f 726d 6174 3d38  _800x30&format=8
0x0060:  3030 7833 3026 616c 7465 726e 6174 655f  00x30&alternate_
0x0070:  6164 5f75 726c 3d68 7474 7025 3341 2f2f  ad_url=http%3A//
0x0080:  7465 7874 6164 732e 6f70 6572 612e 636f  textads.opera.co
0x0090:  6d2f 6164 732f 2533 4666 6f72 6d61 7425  m/ads/%3Fformat%
0x00a0:  3344 3830 3078 3330 2663 6861 6e6e 656c  3D800x30&channel
0x00b0:  3d37 3534 2b65 6e26 7572 6c3d 6874 7470  =754+en&url=http
0x00c0:  2533 412f 2f77 7777 2e67 6f6f 676c 652e  %3A//www.google.
0x00d0:  636f 6d2e 7561 2f20 4854 5450 2f31 2e31  com.ua/.HTTP/1.1
0x00e0:  0d0a 5573 6572 2d41 6765 6e74 3a20 4d6f  ..User-Agent:.Mo
0x00f0:  7a69 6c6c 612f 342e 3020 2863 6f6d 7061  zilla/4.0.(compa

Хотя может google сравнивают количество честных обращений 
к google как к поисковику от Опер и количество обращений с 
синхронным стуком в специальную дверку, дабы знать с какой 
эффекивностью работает их партнерская программа.

В общем, в очередной раз убеждаюсь: если вы параноик - это еще не
значит, что они за вами не гонятся :)

-- Вывод отказаться от Оперы вообще в ближайшее время не 
прозвучит из моих уст, т.к. более быстрого броузера под KDE
за исключением нелепого для веб-разработчика броузера 
Konqueror не существует. Снимаю шляпу перед программистами 
Opera Software, сумевшие создать такой простой, относительно
надежный и удобно настраиваемый, 3 мегабайтный броузер, который 
к тому же УМЕЕТ показывать HTML и еще троянов в него понапихать :)

-- Для проверки действительно ли принадлежит адреса googlebot
самой Google, вводить его имя или IP в адресную строку броузера 
бессмысленно. Правильно проверить принадлежность IP можно командой 
whois, как это уже приведено выше.

-- 
(c) 2004 by sergom
sergo-79(*)mail*ru
Эту страничку посетили из таких стран
MapYourVisitors.COM - Нанесите на карту ваших посетителей