Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #98, ФЕВРАЛЬ 2007 г.

Жесткий антифрод

Леонид «R0id» Стройков

Хакер, номер #098, стр. 088


(r0id@mail.ru)

Защити свой интернет-шоп

В своих предыдущих статьях я уже несколько раз упоминал о темной стороне сетевого бизнеса. Увы, но таковы реалии наших дней. Кто-то, обороняясь, создает все новые средства защиты, а кто-то стремится их преодолеть. Сетевая гонка вооружений - обыденное явление для хакеров и специалистов по информационной безопасности. Но вот дилемма: какую сторону выбрать? Остаться за баррикадами обороняющихся или принять позицию атакующих? На этот вопрос, пожалуй, никто не даст однозначного ответа. Важно понять одно - ломать, не строя, невозможно. Поэтому в этой статье мы примем противоположную привычной нам сторону - строну защиты. Я расскажу, как лучше защитить собственный интернет-магазин и уберечь от атакующей стороны своих клиентов.

Угроза взлома

Допустим, ты решил открыть свой собственный интернет-шоп, принимающий оплату по кредитным картам. Почему именно по кредиткам? Да потому, что кредитка сейчас есть у каждого второго человека, следовательно, количество твоих потенциальных клиентов будет гораздо выше, нежели при оплате товаров в шопе при помощи WebMoney. Пусть, к примеру, в твоем интернет-магазе продаются ноуты, камеры, мобильники и прочие дорогие технические девайсы, а доставка осуществляется как в страны СНГ, так и в Западную Европу и США. То есть, как ты понимаешь, создаваемый магазин сулит достаточно крупный ежемесячный денежный оборот, требующий постоянного контроля. Но речь сейчас не о продажах, а о защите этих продаж.

Раз уж твой шоп принимает к оплате кредитные карты, то первое, на что следует обратить внимание, - это хранение данных о кредитках твоих клиентов. Представляешь, как упадет репутация твоего магазина, если с кредитных карт клиентов начнут пропадать денежные средства в весьма приличных объемах? Такой ситуации нельзя допустить ни в коем случае. Поэтому хранить данные о кредитках клиентов в базе в незашифрованном виде категорически не рекомендуется! Есть несколько вариантов решения проблемы:

  1. шифровать данные и сохранять в базе на сервере;
  2. удалять информацию о выполненных заказах с сервера, на котором стоит шоп;
  3. использовать отдельный сервер под БД, хранящий бэкапы заказов и физически не связанный с сервером интернет-магазина.

Первый способ менее геморройный, нежели остальные, но он имеет несколько недостатков. Во-первых, нужен криптоустойчивый алгоритм. Обычно интернет-шопы используют просто mysql-шифрование, хэши которого сбрутить не составляет особого труда. Иногда встречаются более мудреные алгоритмы (я сталкивался с уникальными, разработанными специально под конкретный шоп), хранящие свои ключи опять же в MySQL-базе, что может иметь негативные последствия. В порядке альтернативы, можно не использовать базу для хранения информации о заказах.

Достаточно вспомнить известную торговую тележку - PerlShop. В этом движке вся информация о заказах хранится в каталогах customers и orders (плюс два вспомогательных каталога: temp_customers и temp_orders). Кстати, именно в этой торговой тележке был найден баг, позволяющий выполнять произвольные команды на сервере. Не трудно догадаться, что файлы, содержащие данные о заказах и доступные на чтение, быстренько отправлялись в виде бэкапа на винчестер «доброжелателям». Если тебе интересно, как это все осуществлялось, то можешь пройтись по линку одного из бажных онлайн-шопов на движке PerlShop (шоп давно заброшен, так что никакого вреда кардхолдерам ты даже при желании нанести не сможешь):

http://shadow.cyberpooch.com/cgi-bin/perlshop.cgi?ACTION=thispage&thispage=|ls;&ORDER_ID=530609289

Уязвимость скрывается в параметре thispage скрипта perlshop.cgi и позволяет атакующему выполнять произвольные команды на сервере (|твоя_команда;). Не буду подробно описывать баг - не об этом сейчас речь, но при желании ты всегда можешь найти нужную инфу в багтраке.

Так вот, возвращаясь к сути вопроса, если не хранить данные в базе, то их необходимо защитить каким-то иным образом. Многие админы шопов на печально известном PerlShop'е в конце концов додумались и стали удалять информацию об уже выполненных заказах, то есть на сервере при этом уже нельзя было поживиться данными о двух-трех сотнях кардхолдеров (владельцев кредитных карт). Многие крупные интернет-магазины сейчас работают подобным образом: заказ обрабатывается в течение пары часов и данные о нем либо удаляются, либо отправляются на бэкапный сервер. Вот тут стоп. Как ты понимаешь, возможность иметь отдельный бэкапный сервер есть не у всех, поэтому иногда информация о заказах отправляется прямиком на мыло админа/саппорта магазина (находящееся на совершенно другом сервере). Что и говорить, задумка хорошая: клиент оформляет покупку, данные о заказе отсылаются на мыло саппорту шопа, а на сервере в базе ведется лишь статистика заказов. Однако со временем хакеров стал не устраивать такой расклад, и они начали патчить движки магазинов. Например, в том же PerlShop'е зачастую добавляется еще одно мыло, принадлежащее отнюдь не владельцу шопа :).

Избежать этого можно достаточно просто. Необходимо написать и запустить на сервере скрипт, проверяющий дату изменения скриптов, имеющих отношение к движку интернет-магазина. В случае обнаружения несоответствия наш скрипт перезапишет измененные файлы на оригинальные. Однажды, ломая один из онлайн-магазинов, я столкнулся с забавной ситуацией. На сервере стояла FreeBSD (версию ядра не помню, но это и не столь важно), права у меня были nobody, но имелась в наличии дира на 777 и fetch :). Обрадовавшись, я собирался залить веб-шелл, но не тут-то было - все заливаемые мной файлы тут же удалялись, причем с редактированием файлов дело обстояло так же (довольно редкий случай защиты - примечание редактора). Сначала мне, естественно, показалось, что я тронулся рассудком, но, найдя текстовый файл в этой же дире, содержимое которого не заменялось, я понял истинную причину происходящего. Шоп тот, к слову, я все же поимел, но об этом в другой раз.

Эта история свидетельствует лишь об одном - о необходимости контроля над изменяемыми файлами, находящимися на сервере. Написать скрипт на перле или на пхп не составит особого труда. В Perl есть удобная функция stat(), имеющая несколько переменных, в том числе и $mtime, отвечающую за время последнего изменения файла. Возможностей реализации предостаточно, стоит лишь немного пофантазировать :). Еще один важный момент - это логирование. Здесь следует четко определиться с тем, что логировать нужно, а что нет. Следующий перечень включает в себя несколько пунктов логирования:

  1. попытки редактирования файлов на сервере
  2. добавление/удаление файлов на сервере
  3. внешние изменения параметров, передающихся скриптами интернет-магазина

Разумеется, это лишь маленькая часть того, что необходимо логировать. Первые два пункта можно напрямую связать со скриптом, контролирующим изменения файлов. А третий пункт, в принципе, можно не брать в оборот, так как он имеет непосредственное отношение к движку самого интернет-магазина и, в целом, заслуживает отдельного внимания. В последующей части статьи я еще упомяну об антифрод-системах и методах их реализации. Сейчас нужно запомнить одну важную деталь: кто предупрежден - тот вооружен.

Кроме того, я бы советовал сделать пару «уловок» для атакующих. Это может быть инсценировка уязвимости скрипта (особенно прикольно выглядит инсценировка sql-инъекции =)), наличие левого конфига, содержащего в себе такой же левый аккаунт к базе и много чего еще :). Мне не часто встречались такие «уловки», но, поверь, иногда они могут помочь тебе больше, чем многое из описанного выше. Главное, чтобы все выглядело максимально правдоподобно. Здесь, как и в предыдущем случае, от тебя требуется только смекалка, фантазия и сообразительность.

Угроза мошенничества

Если ты думаешь, что угроза взлома является основной опасностью для твоего бизнеса, то глубоко ошибаешься. Как известно, в России всегда было множество аферистов всех мастей, и если ты полагаешь, что поле их деятельности - городской рынок, то ты явно отстал от жизни. Сеть давно объединяет фродеров (от английского слова «fraud» - «мошенничество», «frauder» - «мошенник») различных направлений. Учитывая принцип работы твоего интернет-магазина (отсылка товара в страны СНГ, оплата по кредитным картам), можно выделить несколько категорий нежелательных «клиентов». Приводить список я не буду, так как полный перечь составить попросту невозможно. Поэтому перейдем к рассмотрению обманных схем и методам защиты от них.

Первое, с чем сталкивается, пожалуй, каждый крупный финансовый проект, - это клиенты-мошенники. На моей памяти было несколько успешных фрод-схем. Самый простой пример - возврат товара в онлайн-магазине или аукционе, которые продают нематериальный товар (информацию, музыку и т.д.). Как правило, в таком случае после совершения покупки «клиент» требует вернуть его средства, аргументируя свои действия ненадлежащим качеством продукта. Надо заметить, что на многих ру-аукционах такая тема прокатывала достаточно долго, развязывая руки мошенникам.

Еще одна «замечательная» схема была придумана специально для одной из крупных российских платежных систем, сотрудничающей с одним из аукционов (название платежки указывать не в моей компетенции, да и, честно говоря, я не помню). Суть ее заключалась в том, что человек заводил себе два аккаунта в платежке, затем создавал на аукционе лот определенной стоимости и сам у себя его покупал. После этого он писал жалобу администрации платежной системы о том, что товар, купленный им на аукционе, выслан ему не был, и просил вернуть его деньги. Платежка вынуждена была удовлетворять требования «незадачливого клиента», так как имела договоренность с аукционом. В результате мошенник получал сумму, равную стоимости его лота. Кстати, одного из таких предприимчивых людей примерно год назад приняли сотрудники соответствующих структур и отправили в места не столь отдаленные, так что делай выводы. Но, на самом деле, такие ситуации можно предупреждать. Аукционам необходимо снять ответственность за выставляемые лоты (многие в последствии так и сделали). А в интернет-шопе стоит указывать, что товар возврату не подлежит, кроме случаев, предусмотренных Законом РФ «О защите прав потребителей», если официально магазин зарегистрирован в России. Неплохо было бы иметь и юриста, специализирующегося на данных вопросах, но это уже отдельный разговор.

Едем дальше. Следующая угроза - покупка товара в твоем интернет-магазине по ворованным кредитным картам. Эта опасность является одной из наиболее серьезных, и ей следует уделить особое внимание. Дело в том, что такие покупки создают тебе проблемы как с банками/платежными системами, так и с клиентами, что негативно сказывается на репутации твоего шопа (а значит, и на прибыли/количестве продаж). Если твой магазин принимает карточки всех ведущих международных платежных систем (Visa/MasterCard/Discovery/American Express), то, скорее всего, «вбивать» в твоем магазе будут кредитки, стыренные с соседнего амерского шопа.

Конечно, существуют различные антифрод-системы, сравнивающие введенные данные: место жительства и географическое положение IP, локальное время, язык браузера и т.д., но все они несовершенны. Сам процесс выглядит следующим образом: берется кредитка (точнее, информация, содержащая номер карточки, cvv-код, срок окончания действия карты, ФИО кардхолдера, его место жительства и т.п.); выбирается сокс, находящийся там же, где проживает кардхолдер, после чего карта вбивается в форму оплаты в твоем магазине. Если ты будешь использовать что-либо наподобие checkout для проверки валидности вбитых картонок, то сможешь быть уверенным в том, что такая карта и такой кардхолдер действительно существуют. Но гарантий, что данные о кредитке вбил именно ее владелец, нет.

Именно после таких махинаций большинство зарубежных интернет-шопов попросту не шлют свои товары в страны СНГ. Но и это их не спасает. Дело в том, что предприимчивые русские вербуют дропов - людей, готовых принять товар на свой адрес в США или странах Западной Европы. Вербовка происходит по-разному: кто-то соглашается сам и работает под определенный процент от стоимости товара, а кого-то обманывают, например, под видом благотворительных акций. В таком случае схема повторяется: вбивается карточка, указывается адрес дропа в соответствующей стране и заказ успешно оформляется. Можно ли этому как-то противостоять? Можно, сейчас я расскажу тебе как.

Первый способ - прозвон. Его суть заключается в том, что клиент должен позвонить в саппорт магазина и подтвердить свой заказ, назвав данные, указанные им на сайте шопа. Многие зарубежные магазины и финансовые организации успешно практикуют этот вид защиты от мошенников, однако и здесь есть слабые стороны. Проблема заключается в том, что зачастую прозвон может совершить и сам дроп или человек, сотрудничающий с нежелательными «клиентами» и прекрасно владеющий нужным иностранным языком. Буржуи не зря иногда требуют указания mmn (mother midle name – имя матери), dob (date of birth - дата рождения) или ssn (индивидуальный номер страховки), но и это не всегда их спасает.

Поэтому была создана еще одна преграда на пути мошенников - сканы документов. Если ты интересуешься оружием, то мог заметить, что все российские оружейные интернет-магазины при оформлении покупки требуют обязательной высылки ксерокопий паспорта и лицензии на приобретении того или иного вида оружия. По такой же схеме не так давно стали работать и крупные интернет-магазины. Причем зачастую они просят отослать им сканированную кредитную карточку, данные которой были вбиты на сайте. Про паспорта и водительские удостоверения я вообще молчу. Иногда нужны даже сканы денег.

Надо отметить, что этот способ является достаточно эффективным, но и он не дает стопроцентной гарантии безопасности. Злоумышленники могут использовать чужие паспортные данные или поддельные сканы документов/кредитных карт. Поэтому необходима жесткая проверка всех присылаемых копий документов. Кстати, абсолютно легально можно приобрести базу данных краденых/утерянных паспортов РФ и по ней проверять документы, присланные клиентами, но этот вариант не панацея от всех бед.

Любому серьезному финансовому проекту нужна мощная антифрод-система. Недавно ко мне обратились люди из достаточно серьезной компании с просьбой написания подобного рода системы. Они были готовы заплатить весьма приличную сумму за ее реализацию. Но, как ты понимаешь, создание идеального антифрод-барьера - скорее мечта, нежели реальность. Однако это отнюдь не говорит о бесполезности существующих систем. Напротив, по статистике, средний антифрод позволяет предотвратить до 40% попыток мошенничества, что не так уж и мало.

Как бы там ни было, все имеющиеся способы защиты необходимо комбинировать между собой - только в этом случае ты получишь наиболее сильную систему верификации клиентов. И запомни простое правило: никогда нельзя недооценивать противника. Следуя этим нехитрым инструкциям, возможно, ты сумеешь сохранить свой сетевой бизнес в целости и сохранности.

Post Scriptum

В последнее время многие фродеры полностью отказались от «работы» с российскими интернет-магазинами. Причиной тому послужила повышенная активность правоохранительных органов в ру-зоне. Однако все же никогда не пренебрегай защитой своего ресурса. Помни пословицу: «Скупой платит дважды» - не пытайся сэкономить на антифроде или специалистах по информационной безопасности, это выйдет тебе еще дороже. Конечно, в одной статье трудно описать все возможные угрозы и методы защиты от них. Я только хочу, чтобы ты понял одно: угрозы были, есть и будут.

Danger

Внимание! Информация приведена исключительно в ознакомительных целях! Ни автор, ни редакция за твои действия ответственности не несут!

Info

Легальный сетевой бизнес уже давно нашел свое место в Сети, проблема лишь в том, что и мошенники не обошли ее стороной.

DVD

На диске ты мог бы найти исходники антифрод-системы, но… не найдешь :). Цена таких систем - десятки тысяч американских президентов.

Содержание