Интервью с багхантером Артёмом Московским. Он взломал Steam и получил самую крупную награду в истории Valve

в 9:15, , рубрики: багбаунти, багхантинг, интервью, информационная безопасность
Интервью с багхантером Артёмом Московским. Он взломал Steam и получил самую крупную награду в истории Valve - 1

Артем Московский — багхантер, пентестер и безопасник которому сразу хочется задать стыдный вопрос «сколько ты зарабатываешь?» В прошлом году он получил самое большое вознаграждение в истории Valve — $20 тыс и $25 тысяч за две крупные уязвимости в Steam и еще $10 тыс за баги поменьше.

Мы переписывались несколько дней, и Артем рассказал, как начал заниматься своим делом, какие скиллы для этого нужны, и не тянет ли с таким талантом на темную сторону.


В 2006 году, когда мне было 9 лет, у меня появился первый ПК, и я неосознанно решил, что буду крутиться в IT. До 10 класса ориентировался на программирование. После, когда появились первые успехи в инфосеке, решил что безопасность интереснее.

Началось с банального: нужно было сделать сайт для клана в игре Jedi Academy. Тогда выбор пал на старый добрый uCoz, но идея «делать сайты круто» осталась. Я посмотрел курсы «специалиста» по PHP. Параллельно зависал на античате и других тематических форумах, почитывая статьи о типовых уязвимостях. Просто было интересно.

Шли годы, а я все еще был в поиске себя и это завело меня в рекламу. Тогда я пользовался одной крупной рекламной сетью для арбитража трафика. Ну, как пользовался — грустно обновлял статистику и унывал от отсутствия лидов. Как сейчас помню, взгляд зацепился за параметры даты в запросе на получение статистики. Несколько изящных движений пальцами рук, и в окне браузера появляется модальное окно — это была XSS. Я написал в поддержку, и через час мой баланс на сайте показывал уже 300$. Тогда в 10 классе, заработав первые «серьезные» деньги, я подумал — да, это моя тема. На этом заряде мотивации за следующий месяц я сделал в десять раз больше, помогая сайтам рекламных сетей стать безопаснее.

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

— У тебя тогда не сорвало крышу от своей крутости? Типа нахер учебу, работу — буду вот это делать.

— Не сорвало, но определенный сдвиг произошел. Почувствовал себя независимым от системы.

— А зачем пошел учиться и работать? Это же система, причем не особо эффективная.

— Одно дело быть частью системы, другое дело зависеть от нее. Универ и работа это простой способ найти единомышленников и друзей.

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

— Тебя засыпают офферами после твоих рассказов?

Да, офферы приходят. Последний был в хорошую международную компанию на позицию Application Security Expert.

В 2018 году Артем нашел уязвимость в Steam. Он раскрутил SQL инъекцию в базе данных на странице для партнеров и нашел возможность скачать ключи для любой игры.

Подробно о процессе он писал здесь.

«Сгенерировался файл с 36,000 ключей от игры Portal 2. Вау.
Только в одном наборе оказалось такое количество ключей. А всего наборов на данный момент более 430,000. Таким образом, перебирая значения keyid потенциальный злоумышленник мог скачать все ключи, когда-либо сгенерированные разработчиками игр Steam»

«Через 5 часов уязвимость была исправлена, однако статус triaged (принята) ей выставили через 8 часов и, черт возьми, для меня это были очень сложные 3 часа за которые мой мозг успел пережить стадии от отрицания до принятия.

Так как уязвимость не обозначили принятой, я полагал что очередь до моего репорта еще не дошла. Но баг то исправили, а значит его могли зарепортить раньше меня.

Теперь, если посчитать все деньги за уязвимости от Valve, получится 55 тысяч. Думаю вложить во что-то, но еще не решил.

— Как вообще твое занятие правильно называть?»

Багхантинг. Возникают проблемы когда пытаешься объяснить людям не из IT, чем занимаешься. Для них ближе всего слово «хакер». Мне не комфортно говорить так, потому что, в моем сознании, это слово опошлили школьники, которые грозились взломать твой ВК или вычислить по ip. Поэтому мой обычный ответ «Ну типа хакер» сопровождается неловким взглядом в пол.

— Что за скилл для этого нужен?

Понимание как работают вещи. Результатом предыдущего будет понимание, какие уязвимости могут быть в их реализациях. Мне нравится в багхантинге, что приходится иметь дело с разными технологиями. Это очень круто раздвигает твой кругозор вширь. Через некоторое время появляется опыт, интуиция, и ты уже в голове моделируешь угрозы для исследуемого приложения.

Практически всегда я использую Python, потому что он легкий и красивый. Но если нужен какой-то вывод в веб, то прибегаю к PHP. Сейчас например автоматизирую некоторые задачи для разведки. Веб-интерфейс работает локально на PHP — вывод и управление задачами, а сами таски отправляются на Python-«агенты», которые хостятся на парочке VDSок.

Иногда, когда пишу что-то на скорую руку и не секьюрно, то потом могу себе позволить в этом «продукте» пораскручивать инъекции, но это баловство не более.

— Ты долго выбираешь цель?

Я люблю искать уязвимости в том, что использую сам. Чувствуется какой-то челендж, появляется мотивация. Иногда даже знаешь, что тебе за это не заплатят, возможно даже не ответят, но просто интересно.

Если ты выбираешь публичную программу на Х1, которая уже несколько лет платит за баги, то не стоит надеяться на XSS в поле поиска. Либо попади глубже, куда большинство не доходит, либо придумай вектор, до которого большинство не додумались.

До истории с Valve Артем описывал, как нашел уязвимость в одном из пулов для совместного майнинга криптовалюты — как раз в то время, когда все чокнулись на блокчейнах и росте биткойна.

Он нашел способ обойти двухфакторную идентификацию и завладеть любым аккаунтом в приложении. За репорт Артему дали один биткойн — на тот момент $18 000. Думать о том, сколько он стоит теперь Артему, наверняка, больнее, чем большинству из нас.

Но, пожалуй, самая курьезная история связана с компанией Люксофт, которую при недавнем выкупе оценили в $2 млрд.

«На одном из поддоменов этой компашки стоит Bitbucket сервер. Как ты уже догадался, логином и паролем для доступа к исходникам 84-ех проектов были те самые волшебные admin:admin!

Среди проектов можно найти: BMW, TOYOTA, FORD, FERRARI, PANASONIC и т.д.
Кстати, Люксофт оказались теми еще редисками! Пароль то они сменили, а вот мне не то чтобы «спасибо» сказать — даже и не ответили».

— Тяжело даются провалы?

Я бы не назвал это провалами. Провал — это когда ты ставишь себе цель: вот зайду на Uber и найду RCE, заплатят стомильенов. По-моему, правильная цель — понять инфраструктуру компании, понять функциональность веб-приложения, как взаимодействуют его части между собой, проверить различные кейсы. Это вполне выполнимая задача, которая находится в зоне твоего влияния. Наличие уязвимости уже за пределами этой зоны, поэтому ставить такую цель — это в первую очередь издеваться над собой.

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

— Что по-твоему действеннее, технические пути или социальные?

Смотря для чего. Багхантерам за социальные не платят, возможно даже наказывают. В реальных атаках применяется и то, и другое.

— Хороший безопасник должен иметь хакерский опыт?

Ну если хакерский опыт — это не 2 года условно, а умение раскручивать инъекции и находить XSS, то да. Хороший, думаю, должен.

— Твоя работа — это такая штука, где или получилось, или нет. Или ее можно делать качественно и некачественно?

— Если ты имеешь ввиду пентест, то да, можно делать качественно, а можно и нет. Критерии зависят от ситуации: от оформления отчета и полноты рекомендаций, до количества уязвимостей и их критичности.

— Ты воспринимаешь безопасников как врагов или как коллег?

— Как коллег. Я и сам считаю себя безопасником.

— А чувствуешь ли превосходство над обычными разработчиками?

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

Мне время от времени в голову приходят мысли о создании и разработке своих интересных сервисов и инструментов в сфере ИБ. Поэтому часто как раз нахожусь в процессе «создания». Пока все для себя, но возможно мир увидит мои творения.

Чтобы я делал, если бы мир фантастическим образом подобрел и безопасность перестала быть нужна? Выбирал бы между работой в Uber и ЯндексТакси.

Но если серьезно, то моих навыков бы хватило, чтобы работать средним программистом. Вообще не вижу сложности найти работу в IT, если у тебя уже есть какой-то кругозор, просто углубляешь свои знания в том, что интереснее всего.

— Если бы ты сейчас составлял программу обучения на хакера/багхантера, какие бы предметы там были?

Программирование. Английский язык — вся годная информация на английском. Литература — чтение отчетов с X1. Анонимность. Физкультура — на случай пативэна если плохо с анонимностью. Право — если плохо с физкультурой.

— Я видел, в комментах тебя спрашивали, почему не переходишь на темную сторону. Если не отшучиваться, то реально — почему?

Спокойный сон и внутренняя гармония важнее любых денег.

— Если бы перешел, ты бы был хорошим преступником?

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

Автор: Артем Малышев

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js