Прикладные аспекты коммерческого взлома

Автор: (c)Крис Касперски ака мыщъх

Хакерствовать, стабильно оставаясь на свободе и получая постоянный приход в виде очередного подгона денег, намного интереснее, чем шить шаровары или протирать штаны в пыльной конторе, общаясь с людьми, которых совсем не хочется видеть, но приходится, а все потому, что большинство ходит на работу не из любви к ней, а по необходимости. Хакеры относятся к тем немногочисленным счастливчикам, на которых это правило не распространяется, но как найти себя среди звезд и терний?

Введение

Мыщъх, осевший в своей норе (den), которую голландские коллеги окрестили "лабораторией" (nezumi's lab), погруженный в полумрак тускло светящегося монитора (а что делать? гроза... выбило электричество, двухкиловаттная УПСа от APC назойливо пикает, протянет ли она до утра? должна протянуть - зашутданены все шесть компьютеров и RAID-матрицы, кроме одного), свет - для экономии батарей - выключен, мыщъх на ощупь шуршит по клавиатуре, даже не глядя на нее: работать вслепую - привычное дело. Погребенный под грудами распечаток и обитающий исключительно в дебрях машинного кода (с редкими вылазками на поверхность), пещерный грызун делится секретами поиска удаленной работы со взломом программ на потоке, обобщая весь свой многолетний опыт в этой статье.

Мы будем хакерствовать, оставаясь на свободе

Рисунок 1. Мы будем хакерствовать, оставаясь на свободе.

Техника безопасности или секс без презерватива

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

Компьютерные преступления вообще труднодоказуемы и практически ненаказуемы, если, конечно, не говорить о явном вандализме, краже денег, торговле заведомо вредоносными программами и т.д. Что касается денег, то органы правопорядка всех развитых страх активно сотрудничают друг с другом и хакеры палятся с ультрафиолетовой скоростью, после чего начинают отмазываться по всем статьям, которых на момент предъявления намного больше одной и обычно, прежде чем постучать в дверь (сапогами), человека очень долго "пасут", собирая доказательства его преступной деятельности.

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

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

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

Ольга

Рисунок 2. Ольга - один из основных инструментов хакера.

Minimal system request

Какими знаниями/опытом/навыками должен обладать хакер для продолжительного хачинья? В первую очередь, это язык. Нет, не ассемблер и даже не Си. Английский. Разговорный. Без словаря. Необходимо не только бегло читать сложный технический текст, вникая в него по ходу дела, но и свободно изъясняться на языке в формальной и неформальной переписке. Также (если фирма действительно крупная), следует быть готовым к длинной серии продолжительных телефонных интервью. Фирмы поменьше, чтобы не тратиться на звонки, предпочитают GTalk - разборчивость речи чуть похуже, зато все непонятные (на слух) слова можно ввести в окне текстового чата. То же самое относится к словам, которые мы знаем, как пишутся, но не можем их произнести. Значит, навык беглого письма обязателен, плюс умение воспринимать речь на слух.

GTalk

Рисунок 3. GTalk - удобное средство для бесплатного текстового/голосового чата.

Хотя, что касается слуха, то тут все от собеседника зависит. В частности, слово Asia испанцы произносят по буквам, как оно написано - "Эсиа" и ужасный русский акцент им не помеха. А вот американцы... совершенно не въезжают, потому что Азия у них звучит как "Эйжа", что очень сильно напрягает поначалу, а потому перед первыми телефонными интервью настоятельно рекомендуется продумать, какие словам могут встретиться в разговоре, заглянуть в словарь на предмет транскрипции, а для надежности - прогнать текст на одной из программ-говорилок. Сервис ImTranslator 3.2 (http://www.omniglot.com/links/translation.htm) вполне сносно говорит на куче языков и неплохо переводит с китайского на английский.

Правильно настроенная XP

Рисунок 4. Правильно настроенная XP способна отображать иероглифы где угодно.

Кстати, о китайском. При всем уважении к народу Поднебесной, понять их английский (как письменный, так и устный) намного сложнее, чем китайский. К тому же, ковырять китайскую программу без знания языка - легче на якорной цепи повеситься. Куча кнопок с иероглифами и совершенно непонятно, на какую из них нажимать? Впрочем, если только текст не представлен в графическом виде - его легко рипнуть любой подходящей программой (на худой конец, сойдет и MS Spyxx, входящий в штатный комплект поставки MS Visual Studio), после чего загнать в словарь, например, в уже упомянутый ImTranslator. Базовых иероглифов не так уж и много. Они быстро запоминаются, правда чтобы операционная система научилась их отображать для неюникодовых программ, необходимо загрузить языковый пакет и правильно настроить локаль, впрочем это уже тема отдельного разговора.

Китайский stuff

Рисунок 5. Китайский stuff - попробуй его захачить?

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

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

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

Ассемблер - это понятно. Хакер, не знающий ассемблера, это не хакер. В основном, конечно, спрос на x86/x86-64 системы, однако довольно часто приходится сталкиваться и с микроконтроллерами со стертой маркировкой или заказными чипами с неизвестным набором команд - документации либо вообще нет, либо она отдается только под строгую подписку за немеряные деньги и только юридическим лицам, да и то не всем. Как быть, что делать? Отказаться от заказа?! Ну, отказаться мы всегда успеем. Систем команд разработано не так уж и много и крайне маловероятно, что заказной чип будет иметь уникальную систему команд. Скорее всего, это окажется производное от чего-то хорошо известного с небольшим количеством действительно новых инструкций, назначение которых вычисляется эвристическим путем и дизассемблирование прошивок заказных чипов вполне реальное дело, главное - уметь писать процессорные модули для IDA Pro и знать язык основных чипов.

Но ассемблер - это нижний уровень. На верхнем находится... нет, совсем не приплюснутый си, а все больше Перл, Питон или типа того. Вот еще Руби появился, чтоб ему было пусто. Кому нужна эта, извините, хрень?! Ведь то же самое можно реализовать и на Си даже с большой эффективностью. Увы... если клиент хочет получить программу на Питоне, приходится подстраиваться под его требования или... послать такого клиента в лес - туда, где лоси. И все было бы хорошо, да только желающих получить proof-of-concept на Питоне (Перле, Руби) с каждым годом становится все больше и больше... Интерпретируемые языки представляют собой явление, с которым нельзя не считаться, особенно если вспомнить про регулярные выражения, используемые, в том числе, и для сигнатурного поиска малвари. Вполне распространенное явление - появилась малварь, которую пока никто не ловит, а мы уже расковыряли ее и готовы предложить готовый детектор, вот только если у клиента имеется своя собственная система обнаружения вторжений, основная на Перле/Питоне, то наш Сишный модуль останется невостребованным, пусть он работает в сто раз быстрее, но... в чужой монастырь со своим уставом не ходят.

С другой стороны - нельзя объять необъятное. Лучше знать свое дело (и делать его хорошо), чем хвататься за все подряд и косячить, как пьяный шпалоукладчик, подрывая косяками свою репутацию и отлавливая только те заказы, от которых отказались все остальные уважающие себя хакеры.

Злачные места андеграунда

Где искать заказы?! Хороший вопрос. В Интернете, а где же еще! Ну, это понятно, что в Интернете, а не в брачном агентстве, но все-таки нельзя ли поконкретнее? Как насчет хакерских форумов? Там же тусуется толпа народа! Вот именно, что "толпа" и что "тусуется". В основном идет сплошной треп. Бродят по форуму разные люди с просьбой: дайте денег на гравицапу от пепелеца и ведут себя так, как будто мы пытаемся им что-то продать. Так что, это даже не вариант. Поиск кряков, просьбы взломать чей-то почтовый ящик/веб-сервер или наточить грабер паролей... В этом тухлом омуте нормальная рыба не плавает. Хотя, не все форумы одинаковы. На https://www.openrce.org/, https://www.reverse-engineering.net/, http://www.woodmann.com/ встречаются весьма серьезные заказчики, обычно размещающие объявления в коммерческих разделах и позиционирующие себя как фирмы по безопасности.

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

Кадровые агентства при всей своей бесполезности иногда дают хороший улов. То же самое относится к разделу "Jobs" на Security Focus, однако намного выгоднее выходить на известные фирмы напрямую, смотреть, что они пишут в разделе careers на своих сайтах, и предлагать свои услуги, что называется, из первых рук в первые руки. Просто замечательно, если часть персонала фирмы уже знает нас по постам на форумах и не просто знает, а находится в теплых дружеских отношениях, что существенно упрощает получение заказов.

Собственно говоря, основная часть заказов находится через знакомых и с течением времени растет в геометрической прогрессии. Количество предложений взрывообразно увеличивается, позволяя нам выбирать наиболее вкусные, соблазнительные, интересные и питательные. Правда это будет не сейчас. И даже не завтра. А очень сильно "потом". Начинать всегда сложно, но даже плохое начало зачастую оборачивается очень удачным концом.

OpenRCE.org

Рисунок 6. OpenRCE.org - серьезный интернациональный сайт для серьезных хакеров.

На хакерском рынке

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

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

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

После этого "подъем" бинарного кода до компилируемых исходников покажется детской забавой. Вот только не надо пытаться сплавить клиенту результат работы Hex-Rays или другого декомпилятора. Во-первых, это не есть исходные тексты, во-вторых, они не компилируются, а если даже и компилируются, то программа падает еще при запуске. Конечно, никто не требует снабжать каждую строку комментарием, но реконструированный исходный текст должен быть понятен прикладному программисту, а компиляторы (оптимизирующие) любят реализовать выделение памяти через умножение (у команды mul легко отловить переполнение, преобразовав указатель к нулю, сигнализирующее о том, что на память нас обломали) или выбрасывать исключение с помощью деления, причем не на нуль, а опять-таки - путем переполнения. В исходном коде ни умножения, ни деления понятное дело не ночевало. Там было тривиальное ветвление - проверка указателя на равенство нулю. Вот только современные процессоры ветвления не любят и компиляторы стремятся избавиться от них везде, где это только возможно. Но это уже детали. В целом ручная декомпиляция программы - дело простое (а потому и сравнительно низко оплачиваемое), но отнимающее кучу времени, что делает его малопривлекательным занятием для опытных хакеров.

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

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

Также неплохо идет на рынке реконструкция сетевых протоколов с интерфейсами динамических библиотек, форматов файлов и т.д. Существуют целые фирмы, специализирующиеся на создании игровых читов и ботов. Думаю, не стоит объяснять, что они остро нуждаются в хакерской помощи, правда сотрудничать с ними... ну, очень нудно. Как минимум, требуется толстый Интернет-канал, позволяющий прокачивать гигабайты свежих игр. Игровой сервер, расположенный где-то там, требует к себе очень бережного обращения и при подозрении в хакерстве на IP-адрес выставляется бан, иногда захватывающий всю подсеть провайдера, а всякие там прокси забанены уже давно. Вот и приходится пользоваться услугами разных провайдеров, привлекая к этому занятию друзей со всего мира, устанавливая на их компьютерах (и с их согласия) туннельные прокси. Весь Интернет все равно не забанишь, но расходы... потраченное время... И все это за какие-то 10к в месяц?! А именно на такую сумму можно рассчитывать, работая на постоянной основе.

Заключение

Вот такой у нас, значит, обзор получится. Не слишком прибыльный, но зато легальный и совсем не криминальный. Вылезти из подполья и перевести свою хакерскую деятельность на коммерческие рельсы - вполне возможно. Заказы будут. И их будет много. И никакого криминала. Правда, после выполнения некоторых видов работ (вполне легальных в России) в США можно будет въехать только чучелом или тушкой. Это, пожалуй, единственный серьезный недостаток хакерской деятельности. Причем, совершенно невозможно узнать заранее - имеет ли кто-то в Штатах на нас зуб или нет. Иногда хакеров хватают сразу при сходе с самолета, и начинают предъявлять, даже если они сюда не хакерствовать приехали, а просто потусоваться на конференции.

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