|
|
23.12.2009 | #1 |
|
Правда о WebMoney
Автор: Крис Касперски
Правда о WebMoney Какую информацию собирает о нас система Web Money, можно ли ей доверять? Просидев за дизассемблером всю ночь напролет, пришел к весьма неутешительным выводам, которых придерживаются и другие пользователи. Как обезопасить себя и обеспечить максимальную анонимность? [Введение] Популярная платежная система Web-Money реализована в виде двух независимых программ: Keeper Classic и Keeper Light, каждая из которых имеет свои достоинства и недостатки. Keeper Classic представляет собой обычное Windows-приложение, требующее инсталляции на компьютер. Вот что об этом говорят некоторые пользователи: «Это — поделка от Web-Money, в которую неизвестно что зашито, может, и троян. И даже если его там нет, это творение небезупречно: пару раз ставил на несколько компов, так они стали хромать на обе ноги, вплоть до BSOD. На других же компах работа была нормальной. Следовательно, эта программа недоработана и ведет себя непредсказуемо". Но прикладное приложение, которым пытается казаться Keeper Classic, не может вызывать BSOD, поскольку это прерогатива драйверов, работающих на уровне ядра. Значит, Keeper каким-то образом проникает в ядро, причем не совсем легальным путем (отсюда конфликты и BSOD). Во всяком случае, я не видел никакого запроса на установку драйверов при инсталляции, и никаких драйверов не появилось в каталоге WINNTSystem32Drivers, где им и положено быть, но… запуск утилиты R-Studio, восстанавливающей удаленные файлы, показал наличие созданного и тут же удаленного файла winio.sys, ссылка на который обнаружилась в компоненте Keeper'a: WMClient.dll. Судя по названию, этот драйвер открывает доступ к портам ввода/вывода с прикладного уровня, что создает нехилую дыру в системе безопасности, не говоря уже о том, что некорректное обращение с портами чревато не только голубыми экранами смерти, зависанием компьютера, но и потерей данных вместе с порчей оборудования. Тут же, по соседству с «winio.sys», приютились текстовые строки: «\.PhysicalDrive%d», «\.Scsi%d:» и «SCSIDISK», недвусмысленно свидетельствующие в пользу того, что Keeper работает с жесткими дисками на низком уровне! А дальше... дальше идет нечто совершенно невероятное: Фрагмент WMClient.DLL, передающий жесткому диску ATA-команды Код:
.text:100B7A31 push 557; nOutBufferSize .text:100B7A36 lea eax, [ebp+OutBuffer] .text:100B7A3C push eax; lpOutBuffer .text:100B7A3D push 3Ch; nInBufferSize .text:100B7A3F lea ecx, [ebp+OutBuffer] .text:100B7A45 push ecx; lpInBuffer .text:100B7A46 push 4D008h;IoControlCode(IOCTL_SCSI_PASS_THROUGH) .text:100B7A4B mov edx, [ebp+hObject] .text:100B7A4E push edx; hDevice .text:100B7A4F call ds:DeviceIoControl Но это только цветочки. Если поставить Keeper на VMWare, то система Web-Money автоматически заблокирует электронный кошелек при первой же попытке оплаты, даже не уведомив тебя об этом! Если бы Keeper просто не работал под VM Ware, то и черт с ним. Может, они просто не совместимы… или VM Ware чего-то дурит (с ней это часто случается). Но он ведь работает только до первой транзакции, а это значит, что вместе с данными о самой транзакции Keeper скрытно передает некоторую персональную информацию: как минимум конфигурацию оборудования, и, возможно, что-то еще. Не секрет, что многие используют Web-Many в основном для совершения анонимных платежей (расплата за взлом, перевод зарплаты, в обход налоговой и т. д.). Однако эта анонимность только кажущаяся, тем более что компания охотно предоставляет сыщикам всю информацию о своих клиентах, которую ей только удалось собрать, а собирает она многое... Система Keeper Light работает только из-под браузера и построена на механизме сертификатов. Никакой дополнительной информации о пользователе она не собирает, и единственной ниточкой, за которую могут зацепиться сыщики, оказывается IP-адрес. Не слишком серьезная улика, к тому же всегда существует возможность спрятаться за анонимным Proxy или атаковать один из компьютеров и осуществлять все транзакции его «руками». К сожалению, по своим функциональным возможностям Keeper Light значительно отстает от Classic'а и к тому же пожирает намного больше трафика (что для медленных соединений весьма актуально). Но ставить Classic'а на свою основную машину я так и не рискнул. Почему — читайте ниже. [Хакерские инструменты] Итак, Keeper Classic лежит у нас в руках, точнее жужжит жестким диском, устанавливая какие-то компоненты, но какие именно не говорит! А еще кто-то вирусов нехорошими словами называет! Компьютерный вирус — это такая штука, которая скрыто делает на твоем компьютере действия, о которых ты даже не подразумеваешь, а если бы и подразумевал — навряд ли бы дал свое согласие. Чтение технической документации и заумных лицензионных соглашений не дает никакой полезной информации, и трепанацией Keeper'а приходится заниматься самостоятельно. Как это можно осуществить? Самое простое – перехватить обмен Keeper'а с «базой», снифая трафик любым подходящим sniffer'ом, например, тем, что встроен в персональный брандмауэр SyGate Firewall, однако, если трафик зашифрован, его будет не так-то легко расшифровать! Гораздо проще воспользоваться файловым монитором и монитором реестра Марка Руссиновича (оба можно найти на [Ссылки доступны только зарегистрированным пользователям . Регистрируйся тут...]), а также монитором шины Bus Hound от компании Perisoft ([Ссылки доступны только зарегистрированным пользователям . Регистрируйся тут...]). Полезно также снять дамп с работающей программы любой утилитой по вкусу (например, PE-TOOLS) и поковыряться в нем на предмет интересных текстовых строк, MAC-адресов и прочих приватных данных. Самые опытные исследователи могут прибегнуть к тяжелой артиллерии — дизассемблеру IDA Pro, который покажет, чем на самом деле занимается Keeper при запуске и в процессе перевода денег. Естественно, полное дизассемблирование занимает слишком много времени, поэтому мы будем обращать внимание лишь на самые заметные, наименее замаскированные места, сразу же бросающиеся в глаза при анализе. [Внутри Keeper'а] Последняя версия Keeper'а проходила под номером 3.0.0.2 и занимала порядка ~1,9 Мб. После установке на диске в папке WebMoney образовалось множество файлов, среди которых были WebMoney.exe (пусковой файл, размером 183,024 байт, упакованный, по сообщению PEiD, протектором ASProtect 1.2x - 1.3x) и WWClient.dll (динамическая библиотека, реализующая основной функционал, размер — 3331,824 байт, не упакована). Собственно говоря, WebMoney.exe можно сразу отбросить в сторону, не тратя силы на распаковку — все равно ничего интересного там нет. Но прежде нужно запустить монитор реестра и посмотреть, в какие ветви реестра лезет Keeper и не пытается ли он получить доступ к той информации, разглашать которую мы не хотим? Даже невооруженным глазом видно, что сразу же после запуска Keeper ринулся определять имя чипа сетевой карты («AMD PCNET Family PCI Ethernet» в данном случае), имя машины («W2K»), и, если покопаться в дампе памяти, там можно обнаружить и MAC-адрес моей сетевой карты: 00-0C-29-F6-6C-3C (виртуальный, естественно). Кстати, чтобы узнать свой MAC-адрес, достаточно запустить штатную утилиту ipconfig c ключом /all (см. рис). «Честные» программы не нуждаются в MAC-адресах и работают с сетью через TCP/IP-протоколы. Зачем же тогда Keeper'у потребовался наш MAC-адрес? А вот зачем! MAC-адрес уникален для каждой карты, и, хотя его теоретически возможно сменить на другой, даже без использования программатора, это считается веской уликой при расследовании преступления. Значит, все-таки Keeper палит наш компьютер! И насколько глубоко? Берем в руки IDA Pro, загружаем WWClient.dll внутрь, и пока оно там дизассемблируется (а дизассемблироваться оно будет долго), достаем из заначки непочатую бутылку пива, затягиваемся сигаретой и думаем, думаем, думаем… Лучше всего начинать анализ с поиска текстовых строк. Их легко найти в окне «Name Windows», вызываемом комбинацией клавиш . Тестовые ASCIIZ-строки начинаются с префикса «a». Действительно, здесь притаилось немало непуганой дичи: Текстовые строки «pic_xxx», обнаруженные в Keeper'е Код:
.rdata:1021ECB0 aPci_wmtid db 'pci_wmtid=',0; DATA XREF: sub_100901C0+C45o .rdata:1021ECBC aPci_pursedest db '&pci_pursedest=',0; DATA XREF: sub_100901C0+CCCo .rdata:1021ECCC aPci_pursesrc db '&pci_pursesrc=',0; DATA XREF: sub_100901C0+D53o .rdata:1021ECDC aPci_amount db '&pci_amount=',0; DATA XREF: sub_100901C0+DDAo .rdata:1021ECEC aPci_marker db '&pci_marker=',0; DATA XREF: sub_100901C0+E61o .rdata:1021ECFC aPci_desc db '&pci_desc=',0; DATA XREF: sub_100901C0+EE8o .rdata:1021ED08 aPci_datecrt db '&pci_datecrt=',0; DATA XREF: sub_100901C0+F6Fo .rdata:1021ED18 aPci_modeTest db '&pci_mode=test',0; DATA XREF: sub_100901C0+FFFo Поскольку виртуальные машины, в частности VM Ware, несут на своем борту довольно специфический набор оборудования и выделяют MAC-адреса из фиксированного пула адресов, становится ясно, как система распознает факт наличия виртуальной машины. Она просто сравнивает конфигурацию пользовательского оборудования с конфигурацией виртуальной машины, и, если они совпадают, электронный кошелек закрывается без предупреждений. Причем сравнение происходит не на клиентской, а на серверной стороне! То есть Keeper не просто опрашивает PCI-шину, но еще и передает эти данные в сеть, где они, по всей видимости, заносятся в банк данных, представляющий огромный интерес для спецслужб различных стран. Штатные средства VM Ware не позволяют менять ни MAC-адреса, ни конфигурацию оборудования (в новых версиях вроде бы сделаны некоторые шаги в этом направлении, но не слишком радикальные). К счастью, есть неофициальная заплатка, позволяющая менять все, что угодно.Эксперименты подтверждают: после изменения конфигурации Keeper перестает распознавать VM Ware, и электронный кошелек больше не «палится». В текстовых строках можно ковыряться до бесконечности. Это настоящий Клондайк, раскрывающий зловредные намерения Keeper'а хуже любого предателя. На месте разработчиков я бы обязательно их зашифровал, а то как-то несерьезно получается. Как вам нравится следующее? Keeper динамически создает драйвер citio.sys (на NT/W2K/XP)/citio.vxd (на 9x), тут же его загружает в память, а после удаляет: Ссылки на неопознанный драйвер, обнаруженные в Keeper'e Код:
.rdata:10222D5C aSystem32Driver db 'system32driverscitio.sys',0 .rdata:10222D78 aFileName db '\.citio',0 .rdata:10222D8C aSystemCitio_vx db 'systemcitio.vxd',0 .rdata:10222DA0 a_Citio_vxd db '\.CITIO.VXD',0 «Источники, приближенные к кругам разработчиков» сообщили, что все эти драйвера вставлены вовсе не из-за пакости или желания навредить пользователю. Напротив! Они охраняют Keeper от нехороших программ, крадущих электронную наличность. Как говорится, все на благо пользователя, даже если это благо идет ему вопреки. Я повторяю еще раз: нормально спроектированный платежный клиент работает исключительно на прикладном уровне, а не вгрызается в систему, как бульдозер в асфальт. Если на компьютер проникла зловредная программа, захватившая администраторские права (а такие права заполучить очень легко), она может вытворять с Keeper'ом все, что угодно, и никакие драйвера не в состоянии ее остановить, поскольку, после того как зловредная программа загрузит свой собственный драйвер, она уровняет свои шансы с Keeper'ом, а в противостоянии двух драйверов обороняющаяся сторона всегда обречена на поражение. Но не будем зацикливаться на текстовых строках и двинемся дальше. Посмотрим на список импортируемых API-функций. Для этого достаточно воспользоваться утилитой dumpbin.exe, входящей в штатную поставку компилятора Microsoft Visual C++ и Platform SDK. Вызываем ее («dumpbin.exe /EXPORTS WMClient.dll > output») и смотрим на результат: Функции, импортируемые Keeper'ом (фрагмент) Код:
Dump of file WMClient.dll KERNEL32.dll 83 DeviceIoControl 353 Thread32Next 352 Thread32First 28C Process32Next 262 Module32Next 260 Module32First 204 Heap32ListNext 203 Heap32ListFirst 28A Process32First 6C CreateToolhelp32Snapshot А функция DeviceIoControl() — это вообще ласты. Ее основное предназначение — посылать драйверам специальные управляющие IOCTL-коды, с помощью которых можно напрямую читать или писать на диск. Поскольку разработчики никак не замаскировали ее вызов, все IOCTL-коды видны в IDA Pro как на ладони! Давайте разберемся, что же такого делает Keeper с нашим оборудованием, чего нельзя было бы сделать с помощью нормальных API-функций?! Переходим в IDA Pro, нажимаем для открытия окна «Name», пишем «DeviceIoControl» (полностью вводить имя необязательно — IDA Pro сама поставит курсор на него, как только поймет, что же мы от нее хотим). Теперь нажимаем и оказываемся в секции импорта. По умолчанию IDA Pro отображает только первые две перекрестные ссылки. Чтобы увидеть остальные, необходимо в меню «View» выбрать пункт «Open subview», а там — «Cross references» или просто нажать ,,. Первая же перекрестная ссылка ведет нас к следующему коду, который нам сейчас и предстоит дешифровать: Фрагмент Keeper'а, вызывающий функцию DeviceIoControl Код:
.text:100B76C3 push 0; lpOverlapped .text:100B76C5 lea edx, [ebp+BytesReturned] .text:100B76CB push edx; lpBytesReturned .text:100B76CC push 18h; nOutBufferSize .text:100B76CE lea eax, [ebp+OutBuffer] .text:100B76D4 push eax; lpOutBuffer .text:100B76D5 push 0; nInBufferSize .text:100B76D7 push 0; lpInBuffer .text:100B76D9 push 74080h; dwIoControlCode .text:100B76DE mov ecx, [ebp+hObject] .text:100B76E4 push ecx; hDevice .text:100B76E5 call ds:DeviceIoControl Вводим IOCTL-код в окошко «VALUE» и получаем полную расшифровку: Device – DISK (0x7), Function – 0x20, Access – «FILE_READ_ACCESS», Method – «METHOD_BUFFERED». Ага, значит, чтение. Ну хорошо хоть не запись! Однако запись еще впереди! Например: Еще один фрагмент Keeper'а, вызывающий функцию DeviceIoControl Код:
.text:100B7F63 push 0; lpOverlapped .text:100B7F65 mov ecx, [ebp+lpBytesReturned] .text:100B7F68 push ecx; lpBytesReturned .text:100B7F69 push 210h; nOutBufferSize .text:100B7F6E mov edx, [ebp+lpOutBuffer] .text:100B7F71 push edx; lpOutBuffer .text:100B7F72 push 20h; nInBufferSize .text:100B7F74 mov eax, [ebp+lpInBuffer] .text:100B7F77 push eax; lpInBuffer .text:100B7F78 push 7C088h; dwIoControlCode .text:100B7F7D mov ecx, [ebp+hDevice] .text:100B7F80 push ecx; hDevice .text:100B7F81 call ds:DeviceIoControl Мы выяснили, что Keeper Classic не только собирает (и отсылает) приватную информацию, но и отличается крайне агрессивным поведением. Скрываясь под аляповатым интерфейсом прикладной программы, он пробивает тоннель к самому центру операционной системы и делает это настолько некорректно, что у ряда легальных пользователей появляются серьезные проблемы. Автор: Крис Касперски
__________________
[SIGPIC][/SIGPIC] [Ссылки доступны только зарегистрированным пользователям . Регистрируйся тут...] |
24.12.2009 | #2 |
|
А можно получить ссылку откуда была слита статья?
|
24.12.2009 | #3 |
|
[Ссылки доступны только зарегистрированным пользователям
. Регистрируйся тут...]
__________________
[SIGPIC][/SIGPIC] [Ссылки доступны только зарегистрированным пользователям . Регистрируйся тут...] |
Нижняя навигация | ||||||
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
(Подробнее) Тему прочитали: 12 | |
akado6, An0nim, Chekit, dr.dizzik, dum_forever, kristal, Paradox, q34006, spot, x0r, zerus, zloypupkin |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|