Разработка → Кирилл «isox» Ермаков, главный безопасник Киви, рассказывает о своей работе, о блеке, об анонимности и о взрослой ИБ
Есть мнение, что банковские CISO — скучные ребята. Совершенно не умеют работать руками, бесконечно совещаются и вообще занимаются всякой ерундой. Героя сегодняшней истории, isox’а, скучным назвать точно нельзя. Кому-то он известен как топовый багхантер Яндекса, кому-то как создатель открытой базы уязвимостей Vulners, а кому-то — просто как крутейший спец по корпсеку. Isox предельно честно рассказал о своей работе, о блеке, об анонимности и о взрослой ИБ в целом. Итак, знакомься — Кирилл «isox» Ермаков, главный безопасник Киви!
Факты
На самом деле я не очень люблю компьютеры. Я люблю гонки. А на гонки нужно как-то зарабатывать. Так я и стал хакером.
Я увлекался time attack гонками. Это очень быстрая езда по кругу на время. То есть нужно просто проехать быстрее остальных свой круг.
У меня была Subaru STI, там все как в мобильной игре. В машине стояли кастомные гоночные мозги за 3000 евро, но сами по себе они почти ничего не умели. В лучшем случае ты просто заведешь машину. А вот гоночного функционала, вроде удаленного снятия телеметрии или системы поддержания давления наддува (Anti-Lag), не было. Чтобы твоя тачка что-то умела, нужно купить к ней дополнения.
У мозгов есть уникальный серийник. Ты отсылаешь его вендору, платишь деньги и получаешь код разблокировки. Вводишь в машине, и у тебя активируется та или иная опция. То есть все гоночные фичи уже изначально зашиты в мозгах, нужно только их разблокировать. Вот тут-то я задумался: а нельзя ли обойтись без вендора?
Машины я умею программировать сам. Если понимаешь, как работает двигатель, настроить сможешь. Конечно, при этом его у тебя заклинит. Но ты же хакер, ты упорный, правда? Так вот, залезаю я в машину и вижу, что система управления заблокирована паролем. У меня тут же в голове сложилось: «заблокировано паролем» и «информационная безопасность» — это где-то рядом. Я запихнул прошивку этих мозгов в OllyDbg (в IDA я тогда не мог) и увидел, что пароль проверяется на клиенте. То есть не посылается на удаленный сервер на проверку, а сверяется прямо в программе управления на компьютере, сделанной в C++ Builder. Один JMP решил вопрос. Так я и попал в свою прошивку.
Оставалась вторая задача — подобрать те самые ключики, которые активировали дополнительный функционал. В Subaru стояли мозги от одного известного вендора. Мне посчастливилось, что у меня за спиной сидели два очень крутых реверсера — Дима Скляров и Саша Plex. Я сказал ребятам: «А давайте взломаем мозги моей машины?»
Дима быстро отреверсил всю прошивку мозга, это был Motorola 68000. Но разобранной прошивки оказалось недостаточно: активационные коды для суперфич, естественно, лежали в защищенном разделе памяти, который присутствовал только в мозге, и вычитать его, казалось бы, было никак нельзя.
В поисках хоть какой-то инфы я пошел на сайт вендора и случайно наткнулся на интересную багу. Когда ты скачиваешь с их сайта файл со свежей прошивкой, URL выглядит так: /download-file?id=315. Я попробовал подставить 316, 317 и быстро отенумерейтил все, что было. Среди слитого сокровища был и Developer Tools, который позволял перепрошить бутлоадер! Оставалось найти образ самого бутлоадера.
Нам помог раздобытый Developer Tools. Через этот devkit мы научились зашивать модифицированные нами прошивки. Дима Скляров нашел единственный XOR в прошивке. Именно этот код отвечал за проверку ключиков. Дальше мы просто модифицировали то поле, где находился серийник, так, чтобы за три перепрошивки вычитать всю область, где находились magiс bytes, и вычислить необходимые коды активации. Так я получил ключики и активировал все гоночные функции у себя в машине.
Вендору мы все зарепортили. Им, впрочем, было все равно. Они уже пять лет не фиксят эту уязвимость. Даже презентацию на PHDays на эту тему сделали. Мы им говорили: «Ну пофиксите, пожалуйста, нам же совестно», а они никак. Зато я почувствовал себя настоящим хакером. Настоящий блек — похекать собственную машину .
О том, как так вышло
Мой «творческий путь» начался с того, что я нашел в бюджете деньги, которые правильно применил. А именно — на обучение себя. Я тогда работал на одном госпредприятии и сумел выбить из них немного денег на учебу. Оперативно отсдавал RHCSS, RHCT и RHCE. Кстати, что удивительно, эти знания пригождаются до сих пор. В этот момент меня нашел Positive Technologies.
Я знал, как секьюрно конфигурить никсы, винду, слышал про всякие Center of Internet Security, умел куда-нибудь всунуть кавычку и даже мог запустить дебаггер. Короче, они меня послушали и сказали, что я, оказывается, безопасник и мне надо срочно идти работать безопасником. Ну окей, ну пошли тогда .
Cначала просто работал над MaxPatrol, но быстро нашел то, что можно назвать «своей темой». Мне захотелось не решать частные случаи по одному, а сделать что-то, что могло бы глобально решить проблему поиска уязвимостей методом версионных проверок. Мы скооперировались с Сашей Леоновым (работает сейчас в Mail.Ru) и полностью разобрались в такой штуке, как OVAL. А затем я накодил фреймворк для парсеров, базу данных по сбору информации об уязвимостях и превращению ее в валидный OVAL-контент, пригодный для сканеров безопасности.
Вообще, я окончил МИРЭА по информационной безопасности. Но от этого безопасником не стал. То, чему нас учили в институте, было насквозь неинтересно. Какой-то ISO, 152-ФЗ, PCI DSS, казалось бесполезной чушью. Только спустя много лет я понял, что все эти документы написаны кровью и взломами. В инсте дают базу, которая позволяет строить как-то enterprise security, понимать, как это все должно работать. Этому всему учат в институте, но не объясняют, зачем это нужно. Работая обычным пентестером-одиночкой или безопасником у себя в компании, ты тоже не понимаешь, зачем это все нужно. Образование пытается привить тебе системный подход, без объяснения, где и как ты его будешь применять.
Образование пригодилось, когда я стал работать корпоративным безопасником. Технари вечно кладут болт на основную документальную базу, но они просто ни разу не пытались выстроить безопасность на всех уровнях в большой компании. Вот приходит к пентестеру клиент, просит выстроить ему ИБ. И дает компанию на 1500 человек и 5000 серверов. Давай, сделай ее безопасной! Вот тогда-то образование приходит на помощь. Понимаешь, что процессы стоят во главе всего, зачем нужны ISO и все эти стандарты безопасности.
О блеках, греях и чайниках
У меня никогда не было мыслей блечить. Ну то есть как не было: я работаю в компании, где могу наблечить охулиард . Как думаешь, такие мысли посещают? (Isox, ты слишком честный. — Прим. ред.) Но при этом есть одно но.
Я очень люблю спокойно спать. Когда блечишь — будешь просыпаться ночью просто потому, что ты осознаешь, что чего-то натворил и возмездие рано или поздно тебя достанет. Нет блеков, за которыми оно не приходит, просто за некоторыми чуть раньше, а за некоторыми чуть позже.
Вайты всегда скилловее блеков. Вайты скилляются хаотично: нашли интересную тему, поресерчили, проскиллялись. Блеки развиваются только в тех направлениях, которые эффективны сейчас и приносят деньги.
Блек не будет скилляться ради фана. Он не будет из интереса ломать чайник, чтобы понять, как он устроен. Денег с него не получить. Вот, например, d0znpp. У него недавно было время, он пошел и поломал чайник. Он теперь у нас главный хакер по взлому чайников, холодильников и другого IoT. Круто, прокачал скилл, респект! Но ты же понимаешь, блек никогда не будет этим заниматься.
Блеки, которые каждый день атакуют Киви, — это скрипт-кидди. Они не скилловые. Хотя они в общем и понимают, how to, но используют чужой инструментарий, который подготовили для них другие блеки. Конечно, где-то есть могучая кучка, которая собственно пишет сплоиты, малварь. Вот они круты, эти чуваки знают, что делают, и, заметь, чаще всего сами не занимаются блеком. Это мой опыт, это те, кого мы встречаем. Но, кстати, я не отрицаю, что тех крутых, кто нас ломает, мы можем просто не замечать.
Нельзя называть блеком человека, который написал малварь, но ее не использует. Он просто написал малварь, это прикольный софт. Пока он ее не распространяет и не использует во вред, он не блек, он грей или ресерчер. Вот эти парни скилловые, и они спокойно спят.
Блеки мелкого пошиба не ищут новые уязвимости. Им неинтересно найти новый вектор. Например, есть у тебя Ruby on Rails, в нем периодически стреляют то SQL-инъекции, то RCE. И найти что-то кроме инжекта или RCE — это неинтересно. Найти абсолютно новый вектор и раскрутить его — вот это интересно, с моей точки зрения. Блек не будет этим заниматься. Зачем? Любая типовая компания ломается на раз-два. Зачем изобретать велосипед, если у тебя и старого хватит, чтобы поломать?
У блеков есть проблема — они слишком верят в свою безнаказанность. Они никогда не думают о том, что жертвой может оказаться человек, который способен их поймать. И не понимают, насколько другие компании сплочены в желании их найти. Нет, ну вы правда считаете, что корпоративные безопасники не общаются? Это тоже комьюнити. А в нем принято помогать друг другу.
Надеяться, что тебя не найдут, — это последнее дело. Любую твою активность, даже хорошо закамуфлированную, можно посчитать. Вопрос в стоимости поисков по сравнению с тем, сколько блек пытается спереть. Это же простая математика: если ты украл 10 000 000 долларов, то эти люди будут готовы потратить как минимум 9 999 999 долларов, чтобы тебя найти, и все еще останутся в условном плюсе.
В нашей стране какое-то странно пренебрежительное отношение к управлению «К» или ЦИБу. Меня не покидает ощущение, что кто-то умышленно распространяет этот миф. В обоих ведомствах сидят высококлассные специалисты. Там крутые whitehat’ы, которые знают свое дело, и они умеют ловить п*в [преступников]. И на их стороне все коммерческие компании и даже само государство. Это миф, что у нас в спецслужбах нет хороших спецов. Есть, знаю из первых рук.
Большинство хакеров отличается тщеславием. Мы что-то похекали и сразу же бежим всем рассказывать: «Я похекаль! Я молодец! Ты только зацени, как я могу!» Рассказываем одному, другому, третьему, а четвертый работает в органах или просто окажется крысой. Есть огромное количество людей, которые за небольшие деньги готовы сливать, что происходит на блекфронте.
Блеков бывших не бывает. Тут вопрос в том, как работает твоя голова. Если она хоть раз позволит тебе совершить противоправное действие, она позволит и второй, найдя для этого достаточное оправдание, чтобы ты не считал себя виноватым. Те, кто блечил, не могут попасть на работу в крупные компании. Человеку, который согрешил один раз, больше веры нет. Ресурсы, которые нам придется тратить на то, чтобы этого человека контролировать, будут больше, чем тот профит, который он принесет, добавляясь в нашу команду.
Конечно, есть блек по дурости. Например, поломал IBM, а у них нет bug bounty. Ну пошел и сдал им. Но это не блек, это grey: ты ломаешь ради фана. Нашел багу, посмотрел на нее и пошел дальше. Другое дело, когда ты поломал что-то ради наживы. После этого тебе закрыт вход в любую большую компанию. Все твое прошлое раскопают, и никто с тобой больше разговаривать не будет, потому что ты можешь натворить это еще раз.
O Vulners
Я еще в «Позитиве» говорил: мы написали крутой движок для сбора данных об уязвимостях. Давайте сделаем бесплатную открытую базу багов? Ценность в том, что в базе контент нормализованный. Это не человекочитаемый формат, а машиночитаемый. Нужно где-то взять исходное описание бага, распарсить, выяснить, где у него описание, где версионные проверки. Мой движок все это умел, и я хотел дать все это бесплатно и всем.
Однако скоро я ушел из PT, и все, что написал по этой теме, пришлось оставить. Я очень хотел довести проект до паблика, но формально не мог использовать код, написанный в Positive Technologies для MaxPatrol. Но человек, который написал что-то один раз, сможет написать что-то и второй. Я просто взял и с нуля сделал все то же самое — свой фреймворк для парсера и для обработчиков — и запустил базу, о которой мечтал. Так родился Vulners.com.
Сейчас проекту год, и у нас уже 500 уникальных активных юзеров в день, которые как-то нами пользуются. Ну и два десятка человек, которые спрашивают, куда задонатить . За этот год я уже три раза переписал Вульнерс, это видно по API.
Конечно, Vulners я запилил не в одиночку. У нас была старая команда из PT. Ребята, которые перешли со мной из PT в Киви. Они и подключились. Я пишу ядро и админю, Игорь Videns пишет поиск, Ваня Ванкувер — фронт, Саша Plex — роботов-сборщиков, а Саша Леонов — статьи и аналитику. Ребята знают тему не понаслышке и сами используют Vulners в повседневной работе. Это просто наше желание сделать мир лучше. Мы бы все равно придумали что-то похожее в Киви, ну так что бы не сделать самим, покрасить в оранжевый цвет и дать всем пользоваться бесплатно?
Я никогда не искал инвесторов. И не хочу. Они заходили, но я не понимаю, зачем мне деньги в этом проекте. Сейчас приходит инвестор с улицы и говорит мне: «Я даю тебе двадцать миллионов на три года». А я за это должен кодить то, что зарабатывает деньги. Блин, я не хочу кодить то, чего они хотят. Я хочу кодить то, что мне интересно. Функционал базы знаний с удобным API останется бесплатным навсегда. Если я вдруг решу, что какой-то дополнительный функционал стоит денег, — ну что же, придется прикручивать кнопку оплаты.
О программистах, хакерах и безопасниках
Что-то поломать, поовнить или денег заработать — нормальная мотивация, это должен пройти каждый. Люди таким образом развивают себя, AppSec. Просто дальше есть два пути. Первый — они продолжают втыкать кавычку куда ни попадя и находить фигню, это так называемые рандомщики. Или они начинают разбираться, как те или иные вещи работают, и они становятся ценными кадрами AppSec. На самом деле в Enterprise нужны и те и другие.
Рандомщики тоже нужны. Мы вот сейчас попали в дурацкую ситуацию. У нас есть Игорь Videns и Ваня Vancouver. Они оба из тех чуваков, которые сначала прочтут всех исходники, а потом пойдут ломать. А нам вот не хватает чувака, который просто может помахать кроличьей лапкой и попасть, куда нужно.
Вот тебе пара примеров с Яндексом. Это уже старая история, думаю — можно рассказать. У них есть XML API. Есть там такой параметр — xmlns. Что-то меня дернуло туда вписать %s, и тут я увидел классическую format string уязвимость. Единственное, что омрачало, — это то, что я при каждом новом запросе попадал на новую ноду из балансировщика нагрузки. До RCE довести не получилось, только чтение памяти было. Точно такая же история была с их почтой для домена. Я смотрю на запрос и понимаю, что мне как программисту просто было бы лень на него писать регулярку. Натравил на него sqlmap — и в базе.
Чутье — вот что нужно. Важно понимание, где с той стороны можно нахалтурить. Человек, который писал веб, становится хорошим пентестером. Потому что он понимает, что существуют вот такие уязвимости, там-то можно накосячить, понимает, как остальные пишут такие же куски. Ибо все пишут абсолютно одинаково. HOWTO => Stack Overflow => Copy-Paste. Например, недавно мне захотелось сделать автоматическое приведение типов на Вульнерсе. Я открываю первый топик со Stack Overflow, там советуют сделать eval. Ты представляешь, сколько сейчас проектов в продакшене с eval?
Нам кажется, ни один нормальный человек не будет eval’ить инпут. Ничего подобного! Если ты обычный программист, у тебя задача — сделать, чтобы работало. Ты просто не думаешь о том, что в инпут можно что-то еще подсунуть, особенно в запарке. У тебя голова в эту сторону не работает.
Главная концепция безопасности в том, что мы считаем любой user input вредоносным априори. А девелопер не считает. Вот разница мышления безопасника и девелопера. 90% уязвимостей связано именно с инпутом. Разработчик просто не знает, что можно вот так, да и все. В этом и состоит работа корпоративного безопасника — объяснить девелоперу, что user input бывает зловредным. Вот тогда сразу весь код становится секьюрным.
У пентестеров тоже не все хорошо, они не знают, как писать безопасный код. Вот приходит ко мне человек, вроде скилловый. Назубок рассказывает OWASP TOP-10 и методы эксплуатации. Нашел инъекцию, все рассказал. Ну а дальше-то что он будет с этим делать? Как он объяснит программистам, как надо сделать правильно? Он же никогда не писал бэкенд, для него параметризованные SQL-запросы — это неизвестное словосочетание, он не знает про технологии защиты. Не знает, что делать concat в SQL-запросе теперь даже разработчики не советуют. Не потому, что это несекьюрно, а просто потому, что можно случайно нарушить запрос и все поломается. Вот в этом беда современных пентестеров — у многих недостаточно технического бэкграунда. Они уже знают, как поломать, но не знают, как защититься.
О работе и о том, кто приходит собеседоваться
Говорят, если человек чего-то не знает, но горит желанием — его возьмут. У меня так не работает. Есть минимальный чек-лист — стандартные двадцать вопросов, по которым я гоняю соискателя. Мы даем список и предлагаем отметить честно +, – и +–. И по плюсам начинаем разговаривать. Это такие опорные точки для диалога, чтобы копнуть знания. Вопросы из самых разнообразных областей, в основном база. Она позволяет общаться на одном языке. Не только внутри команды, но и с разработчиками и эксплуатацией. Если ты придешь к админам и скажешь поставить вот такой параметр ядра вот в такое значение, то первое, что у тебя спросят: а что он делает? И почему именно в такое значение? И тут, если ты плаваешь, тебя могут просто вежливо попросить вначале разобраться самому и только потом давать советы другим.
Сначала спрашиваем про ISO, про 152-ФЗ, про PCI DSS. Надо, чтобы ты знал теорию. Иначе как ты будешь секьюрить, если ты не знаешь, какую информацию надо защищать? Знание комплаенса, хоть в общих чертах, нам очень важно. Но это не будет стоп-сигналом на самом деле. Если чел скилловый, этому мы научить можем.
Дальше — про вебочку. Первый же вопрос — SOP, Same Origin Policy. То есть мне не нужно слушать байки про XSS. Вначале надо вообще разобраться, на чем строится безопасность веба, как вообще браузер работает хоть в общих чертах . Eсли мы здесь ни о чем не поговорили, значит, дальше мы расходимся. CSRF, XSS — это все хорошо, но это частности.
Следующий вопрос — методы сегментации сети. Крутой вопрос. Типовой безопасник, который ко мне приходит, вообще никогда не видел большую сеть, и, что с ней делать, он точно не знает. Этот вопрос, по правде говоря, можем простить. Если человек всегда работал «с той стороны» (читай: ломал извне), естественно, он не знает, как секьюрить корпоративные сети. Обычно в этом случае предлагаем поговорить о TCP/IP — это вообще что такое? Мы ищем у человека общее понимание, как работает сеть. Если он знает, что такое IP-адрес, и на этом его понимание заканчивается — not really cool.
Надо уметь читать чужой код и понимать его концепцию, идею, а не кусками пытаться что-то уловить. Видел когда-нибудь код на Spring и Struts? Он же совершенно нечитабелен, пока не повернешь голову под определенным углом. Если мы возьмем к себе чувака без понимания и дадим ему наши 19 миллионов строк кода на Spring, он сможет нам в чем-то помочь? Не думаю.
Об анонимности
Базовый принцип безопасности — разделяй дом и работу. То есть машину, на которой ты что-то делаешь, и машину, на которой ты ничего не делаешь. На одном компьютере ты хакер-мегапавнер, на другом — обычный Вася, и будет счастье. Если этого не делать, рано или поздно ты ошибешься.
Тебя сливают именно те данные, которые ты вводишь сам. Никто, кроме тебя самого, тебя не сдаст. Настроил все как бы секьюрно — Tor, виртуалка, а потом лезешь на свой блог проверять, работает ли интернет .
Если мы говорим про «защиту об блеков», это разделение машин очень хорошо работает. Заведи два компа. На этой машине у тебя платежная информация: на этой машине ты ходишь в свой PayPal, Киви-кошелек. И вот другая машина, на которой ты занимаешься всякой фигней. Ну поймаешь ты малварь, ну похекают тебя. А на машине ничего ценнее пароля от одноразовой почты нет.
Надо иметь разные физические машины. Виртуалки — это тлен. Отдельная машина, только так. Виртуалки удобны, но рано или поздно спутаешь браузеры, все путают. Собственно, так обычно блеков и ловят, они сами палятся.Возьми хотя бы VPN. Ты работаешь, павнишь что-то. VPN моргнул на секундочку — и этого хватило. Всего один пакет, и отсветился твой реальный IP. Провайдер пишет трафик, три месяца минимум. Один-единственный трейс — и finita la comedia.
Ломать из-под «мака» — вообще дурная затея, там слишком много intercommunications. Ни один Little Snitch тебя не спасет. Никто не знает, что там в точности происходит, — вдруг OS X стучит на более низком уровне в обход всех твоих VPN и файрволов?
Если тебе надо захайдиться, есть только одна реальная схема. Едешь в Митино, там покупаешь бэушную симку, бэушную мобилу и бэушный ноут. Едешь в ближайший большой город и там делаешь то, что тебе надо. А когда сделал — выкидываешь все в ближайшую речку. Вот это работает.
Блечить с использованием общедоступных утилит — это тоже глупость. Стучат все. Особенно пентест-утилиты следят за тем, кто, что и как пентестит. Например, надо быть наивным, чтобы поверить, будто Burp Collaborator не записывает те запросы, которые на него приходят. Даже нет, похек бывает везде! Один раз ради шутки мы выложили плагин для Burp Suite с небольшой закладкой. Около нее написали: «Это шутка, парень! Если ты это нашел, то ты крутой, напиши нам!» Думаешь, кто-то откликнулся? Ни разу.
Любое ПО, в котором используются сторонние либы, которые ты хотя бы не вычитал, — это по определению несекьюрно. Даже в энтерпрайзе используются мутные либы, которые никто не проверяет, что говорить об обычных приложениях?
Есть мнение, что банковские CISO — скучные ребята. Совершенно не умеют работать руками, бесконечно совещаются и вообще занимаются всякой ерундой. Героя сегодняшней истории, isox’а, скучным назвать точно нельзя. Кому-то он известен как топовый багхантер Яндекса, кому-то как создатель открытой базы уязвимостей Vulners, а кому-то — просто как крутейший спец по корпсеку. Isox предельно честно рассказал о своей работе, о блеке, об анонимности и о взрослой ИБ в целом. Итак, знакомься — Кирилл «isox» Ермаков, главный безопасник Киви!
Факты
- Использует nano, не признает Vim
- Может найти path traversal даже в чайнике
- Всегда под рукой:
- OS X
- Sublime Text 2
- Canvas
- WSO Shell
- jpeg-payload от BlackFan
- subbrute
- pwdump
- выделенная машина с 32 ядрами и 256 Гбайт памяти для Burp Suite и FTK
- Гитарист. Играет на
- Gibson Les Paul № 384 Pre-Historic, купленной у коллекционера из Японии
- Fender Stratocaster
- Gibson SG Standard 2000
- Увлеченный автогонщик. Ездит на Porsche 911
На самом деле я не очень люблю компьютеры. Я люблю гонки. А на гонки нужно как-то зарабатывать. Так я и стал хакером.
Я увлекался time attack гонками. Это очень быстрая езда по кругу на время. То есть нужно просто проехать быстрее остальных свой круг.
У меня была Subaru STI, там все как в мобильной игре. В машине стояли кастомные гоночные мозги за 3000 евро, но сами по себе они почти ничего не умели. В лучшем случае ты просто заведешь машину. А вот гоночного функционала, вроде удаленного снятия телеметрии или системы поддержания давления наддува (Anti-Lag), не было. Чтобы твоя тачка что-то умела, нужно купить к ней дополнения.
У мозгов есть уникальный серийник. Ты отсылаешь его вендору, платишь деньги и получаешь код разблокировки. Вводишь в машине, и у тебя активируется та или иная опция. То есть все гоночные фичи уже изначально зашиты в мозгах, нужно только их разблокировать. Вот тут-то я задумался: а нельзя ли обойтись без вендора?
Машины я умею программировать сам. Если понимаешь, как работает двигатель, настроить сможешь. Конечно, при этом его у тебя заклинит. Но ты же хакер, ты упорный, правда? Так вот, залезаю я в машину и вижу, что система управления заблокирована паролем. У меня тут же в голове сложилось: «заблокировано паролем» и «информационная безопасность» — это где-то рядом. Я запихнул прошивку этих мозгов в OllyDbg (в IDA я тогда не мог) и увидел, что пароль проверяется на клиенте. То есть не посылается на удаленный сервер на проверку, а сверяется прямо в программе управления на компьютере, сделанной в C++ Builder. Один JMP решил вопрос. Так я и попал в свою прошивку.
Оставалась вторая задача — подобрать те самые ключики, которые активировали дополнительный функционал. В Subaru стояли мозги от одного известного вендора. Мне посчастливилось, что у меня за спиной сидели два очень крутых реверсера — Дима Скляров и Саша Plex. Я сказал ребятам: «А давайте взломаем мозги моей машины?»
Дима быстро отреверсил всю прошивку мозга, это был Motorola 68000. Но разобранной прошивки оказалось недостаточно: активационные коды для суперфич, естественно, лежали в защищенном разделе памяти, который присутствовал только в мозге, и вычитать его, казалось бы, было никак нельзя.
В поисках хоть какой-то инфы я пошел на сайт вендора и случайно наткнулся на интересную багу. Когда ты скачиваешь с их сайта файл со свежей прошивкой, URL выглядит так: /download-file?id=315. Я попробовал подставить 316, 317 и быстро отенумерейтил все, что было. Среди слитого сокровища был и Developer Tools, который позволял перепрошить бутлоадер! Оставалось найти образ самого бутлоадера.
Нам помог раздобытый Developer Tools. Через этот devkit мы научились зашивать модифицированные нами прошивки. Дима Скляров нашел единственный XOR в прошивке. Именно этот код отвечал за проверку ключиков. Дальше мы просто модифицировали то поле, где находился серийник, так, чтобы за три перепрошивки вычитать всю область, где находились magiс bytes, и вычислить необходимые коды активации. Так я получил ключики и активировал все гоночные функции у себя в машине.
Вендору мы все зарепортили. Им, впрочем, было все равно. Они уже пять лет не фиксят эту уязвимость. Даже презентацию на PHDays на эту тему сделали. Мы им говорили: «Ну пофиксите, пожалуйста, нам же совестно», а они никак. Зато я почувствовал себя настоящим хакером. Настоящий блек — похекать собственную машину .
О том, как так вышло
Я знал, как секьюрно конфигурить никсы, винду, слышал про всякие Center of Internet Security, умел куда-нибудь всунуть кавычку и даже мог запустить дебаггер. Короче, они меня послушали и сказали, что я, оказывается, безопасник и мне надо срочно идти работать безопасником. Ну окей, ну пошли тогда .
Cначала просто работал над MaxPatrol, но быстро нашел то, что можно назвать «своей темой». Мне захотелось не решать частные случаи по одному, а сделать что-то, что могло бы глобально решить проблему поиска уязвимостей методом версионных проверок. Мы скооперировались с Сашей Леоновым (работает сейчас в Mail.Ru) и полностью разобрались в такой штуке, как OVAL. А затем я накодил фреймворк для парсеров, базу данных по сбору информации об уязвимостях и превращению ее в валидный OVAL-контент, пригодный для сканеров безопасности.
Вообще, я окончил МИРЭА по информационной безопасности. Но от этого безопасником не стал. То, чему нас учили в институте, было насквозь неинтересно. Какой-то ISO, 152-ФЗ, PCI DSS, казалось бесполезной чушью. Только спустя много лет я понял, что все эти документы написаны кровью и взломами. В инсте дают базу, которая позволяет строить как-то enterprise security, понимать, как это все должно работать. Этому всему учат в институте, но не объясняют, зачем это нужно. Работая обычным пентестером-одиночкой или безопасником у себя в компании, ты тоже не понимаешь, зачем это все нужно. Образование пытается привить тебе системный подход, без объяснения, где и как ты его будешь применять.
Образование пригодилось, когда я стал работать корпоративным безопасником. Технари вечно кладут болт на основную документальную базу, но они просто ни разу не пытались выстроить безопасность на всех уровнях в большой компании. Вот приходит к пентестеру клиент, просит выстроить ему ИБ. И дает компанию на 1500 человек и 5000 серверов. Давай, сделай ее безопасной! Вот тогда-то образование приходит на помощь. Понимаешь, что процессы стоят во главе всего, зачем нужны ISO и все эти стандарты безопасности.
О блеках, греях и чайниках
У меня никогда не было мыслей блечить. Ну то есть как не было: я работаю в компании, где могу наблечить охулиард . Как думаешь, такие мысли посещают? (Isox, ты слишком честный. — Прим. ред.) Но при этом есть одно но.
Я очень люблю спокойно спать. Когда блечишь — будешь просыпаться ночью просто потому, что ты осознаешь, что чего-то натворил и возмездие рано или поздно тебя достанет. Нет блеков, за которыми оно не приходит, просто за некоторыми чуть раньше, а за некоторыми чуть позже.
Вайты всегда скилловее блеков. Вайты скилляются хаотично: нашли интересную тему, поресерчили, проскиллялись. Блеки развиваются только в тех направлениях, которые эффективны сейчас и приносят деньги.
Блек не будет скилляться ради фана. Он не будет из интереса ломать чайник, чтобы понять, как он устроен. Денег с него не получить. Вот, например, d0znpp. У него недавно было время, он пошел и поломал чайник. Он теперь у нас главный хакер по взлому чайников, холодильников и другого IoT. Круто, прокачал скилл, респект! Но ты же понимаешь, блек никогда не будет этим заниматься.
Блеки, которые каждый день атакуют Киви, — это скрипт-кидди. Они не скилловые. Хотя они в общем и понимают, how to, но используют чужой инструментарий, который подготовили для них другие блеки. Конечно, где-то есть могучая кучка, которая собственно пишет сплоиты, малварь. Вот они круты, эти чуваки знают, что делают, и, заметь, чаще всего сами не занимаются блеком. Это мой опыт, это те, кого мы встречаем. Но, кстати, я не отрицаю, что тех крутых, кто нас ломает, мы можем просто не замечать.
Нельзя называть блеком человека, который написал малварь, но ее не использует. Он просто написал малварь, это прикольный софт. Пока он ее не распространяет и не использует во вред, он не блек, он грей или ресерчер. Вот эти парни скилловые, и они спокойно спят.
Блеки мелкого пошиба не ищут новые уязвимости. Им неинтересно найти новый вектор. Например, есть у тебя Ruby on Rails, в нем периодически стреляют то SQL-инъекции, то RCE. И найти что-то кроме инжекта или RCE — это неинтересно. Найти абсолютно новый вектор и раскрутить его — вот это интересно, с моей точки зрения. Блек не будет этим заниматься. Зачем? Любая типовая компания ломается на раз-два. Зачем изобретать велосипед, если у тебя и старого хватит, чтобы поломать?
У блеков есть проблема — они слишком верят в свою безнаказанность. Они никогда не думают о том, что жертвой может оказаться человек, который способен их поймать. И не понимают, насколько другие компании сплочены в желании их найти. Нет, ну вы правда считаете, что корпоративные безопасники не общаются? Это тоже комьюнити. А в нем принято помогать друг другу.
Надеяться, что тебя не найдут, — это последнее дело. Любую твою активность, даже хорошо закамуфлированную, можно посчитать. Вопрос в стоимости поисков по сравнению с тем, сколько блек пытается спереть. Это же простая математика: если ты украл 10 000 000 долларов, то эти люди будут готовы потратить как минимум 9 999 999 долларов, чтобы тебя найти, и все еще останутся в условном плюсе.
В нашей стране какое-то странно пренебрежительное отношение к управлению «К» или ЦИБу. Меня не покидает ощущение, что кто-то умышленно распространяет этот миф. В обоих ведомствах сидят высококлассные специалисты. Там крутые whitehat’ы, которые знают свое дело, и они умеют ловить п*в [преступников]. И на их стороне все коммерческие компании и даже само государство. Это миф, что у нас в спецслужбах нет хороших спецов. Есть, знаю из первых рук.
Большинство хакеров отличается тщеславием. Мы что-то похекали и сразу же бежим всем рассказывать: «Я похекаль! Я молодец! Ты только зацени, как я могу!» Рассказываем одному, другому, третьему, а четвертый работает в органах или просто окажется крысой. Есть огромное количество людей, которые за небольшие деньги готовы сливать, что происходит на блекфронте.
Блеков бывших не бывает. Тут вопрос в том, как работает твоя голова. Если она хоть раз позволит тебе совершить противоправное действие, она позволит и второй, найдя для этого достаточное оправдание, чтобы ты не считал себя виноватым. Те, кто блечил, не могут попасть на работу в крупные компании. Человеку, который согрешил один раз, больше веры нет. Ресурсы, которые нам придется тратить на то, чтобы этого человека контролировать, будут больше, чем тот профит, который он принесет, добавляясь в нашу команду.
Конечно, есть блек по дурости. Например, поломал IBM, а у них нет bug bounty. Ну пошел и сдал им. Но это не блек, это grey: ты ломаешь ради фана. Нашел багу, посмотрел на нее и пошел дальше. Другое дело, когда ты поломал что-то ради наживы. После этого тебе закрыт вход в любую большую компанию. Все твое прошлое раскопают, и никто с тобой больше разговаривать не будет, потому что ты можешь натворить это еще раз.
O Vulners
Я еще в «Позитиве» говорил: мы написали крутой движок для сбора данных об уязвимостях. Давайте сделаем бесплатную открытую базу багов? Ценность в том, что в базе контент нормализованный. Это не человекочитаемый формат, а машиночитаемый. Нужно где-то взять исходное описание бага, распарсить, выяснить, где у него описание, где версионные проверки. Мой движок все это умел, и я хотел дать все это бесплатно и всем.
Однако скоро я ушел из PT, и все, что написал по этой теме, пришлось оставить. Я очень хотел довести проект до паблика, но формально не мог использовать код, написанный в Positive Technologies для MaxPatrol. Но человек, который написал что-то один раз, сможет написать что-то и второй. Я просто взял и с нуля сделал все то же самое — свой фреймворк для парсера и для обработчиков — и запустил базу, о которой мечтал. Так родился Vulners.com.
Сейчас проекту год, и у нас уже 500 уникальных активных юзеров в день, которые как-то нами пользуются. Ну и два десятка человек, которые спрашивают, куда задонатить . За этот год я уже три раза переписал Вульнерс, это видно по API.
Конечно, Vulners я запилил не в одиночку. У нас была старая команда из PT. Ребята, которые перешли со мной из PT в Киви. Они и подключились. Я пишу ядро и админю, Игорь Videns пишет поиск, Ваня Ванкувер — фронт, Саша Plex — роботов-сборщиков, а Саша Леонов — статьи и аналитику. Ребята знают тему не понаслышке и сами используют Vulners в повседневной работе. Это просто наше желание сделать мир лучше. Мы бы все равно придумали что-то похожее в Киви, ну так что бы не сделать самим, покрасить в оранжевый цвет и дать всем пользоваться бесплатно?
Я никогда не искал инвесторов. И не хочу. Они заходили, но я не понимаю, зачем мне деньги в этом проекте. Сейчас приходит инвестор с улицы и говорит мне: «Я даю тебе двадцать миллионов на три года». А я за это должен кодить то, что зарабатывает деньги. Блин, я не хочу кодить то, чего они хотят. Я хочу кодить то, что мне интересно. Функционал базы знаний с удобным API останется бесплатным навсегда. Если я вдруг решу, что какой-то дополнительный функционал стоит денег, — ну что же, придется прикручивать кнопку оплаты.
О программистах, хакерах и безопасниках
Рандомщики тоже нужны. Мы вот сейчас попали в дурацкую ситуацию. У нас есть Игорь Videns и Ваня Vancouver. Они оба из тех чуваков, которые сначала прочтут всех исходники, а потом пойдут ломать. А нам вот не хватает чувака, который просто может помахать кроличьей лапкой и попасть, куда нужно.
Вот тебе пара примеров с Яндексом. Это уже старая история, думаю — можно рассказать. У них есть XML API. Есть там такой параметр — xmlns. Что-то меня дернуло туда вписать %s, и тут я увидел классическую format string уязвимость. Единственное, что омрачало, — это то, что я при каждом новом запросе попадал на новую ноду из балансировщика нагрузки. До RCE довести не получилось, только чтение памяти было. Точно такая же история была с их почтой для домена. Я смотрю на запрос и понимаю, что мне как программисту просто было бы лень на него писать регулярку. Натравил на него sqlmap — и в базе.
Чутье — вот что нужно. Важно понимание, где с той стороны можно нахалтурить. Человек, который писал веб, становится хорошим пентестером. Потому что он понимает, что существуют вот такие уязвимости, там-то можно накосячить, понимает, как остальные пишут такие же куски. Ибо все пишут абсолютно одинаково. HOWTO => Stack Overflow => Copy-Paste. Например, недавно мне захотелось сделать автоматическое приведение типов на Вульнерсе. Я открываю первый топик со Stack Overflow, там советуют сделать eval. Ты представляешь, сколько сейчас проектов в продакшене с eval?
Нам кажется, ни один нормальный человек не будет eval’ить инпут. Ничего подобного! Если ты обычный программист, у тебя задача — сделать, чтобы работало. Ты просто не думаешь о том, что в инпут можно что-то еще подсунуть, особенно в запарке. У тебя голова в эту сторону не работает.
Главная концепция безопасности в том, что мы считаем любой user input вредоносным априори. А девелопер не считает. Вот разница мышления безопасника и девелопера. 90% уязвимостей связано именно с инпутом. Разработчик просто не знает, что можно вот так, да и все. В этом и состоит работа корпоративного безопасника — объяснить девелоперу, что user input бывает зловредным. Вот тогда сразу весь код становится секьюрным.
У пентестеров тоже не все хорошо, они не знают, как писать безопасный код. Вот приходит ко мне человек, вроде скилловый. Назубок рассказывает OWASP TOP-10 и методы эксплуатации. Нашел инъекцию, все рассказал. Ну а дальше-то что он будет с этим делать? Как он объяснит программистам, как надо сделать правильно? Он же никогда не писал бэкенд, для него параметризованные SQL-запросы — это неизвестное словосочетание, он не знает про технологии защиты. Не знает, что делать concat в SQL-запросе теперь даже разработчики не советуют. Не потому, что это несекьюрно, а просто потому, что можно случайно нарушить запрос и все поломается. Вот в этом беда современных пентестеров — у многих недостаточно технического бэкграунда. Они уже знают, как поломать, но не знают, как защититься.
О работе и о том, кто приходит собеседоваться
Сначала спрашиваем про ISO, про 152-ФЗ, про PCI DSS. Надо, чтобы ты знал теорию. Иначе как ты будешь секьюрить, если ты не знаешь, какую информацию надо защищать? Знание комплаенса, хоть в общих чертах, нам очень важно. Но это не будет стоп-сигналом на самом деле. Если чел скилловый, этому мы научить можем.
Дальше — про вебочку. Первый же вопрос — SOP, Same Origin Policy. То есть мне не нужно слушать байки про XSS. Вначале надо вообще разобраться, на чем строится безопасность веба, как вообще браузер работает хоть в общих чертах . Eсли мы здесь ни о чем не поговорили, значит, дальше мы расходимся. CSRF, XSS — это все хорошо, но это частности.
Следующий вопрос — методы сегментации сети. Крутой вопрос. Типовой безопасник, который ко мне приходит, вообще никогда не видел большую сеть, и, что с ней делать, он точно не знает. Этот вопрос, по правде говоря, можем простить. Если человек всегда работал «с той стороны» (читай: ломал извне), естественно, он не знает, как секьюрить корпоративные сети. Обычно в этом случае предлагаем поговорить о TCP/IP — это вообще что такое? Мы ищем у человека общее понимание, как работает сеть. Если он знает, что такое IP-адрес, и на этом его понимание заканчивается — not really cool.
Надо уметь читать чужой код и понимать его концепцию, идею, а не кусками пытаться что-то уловить. Видел когда-нибудь код на Spring и Struts? Он же совершенно нечитабелен, пока не повернешь голову под определенным углом. Если мы возьмем к себе чувака без понимания и дадим ему наши 19 миллионов строк кода на Spring, он сможет нам в чем-то помочь? Не думаю.
Об анонимности
Базовый принцип безопасности — разделяй дом и работу. То есть машину, на которой ты что-то делаешь, и машину, на которой ты ничего не делаешь. На одном компьютере ты хакер-мегапавнер, на другом — обычный Вася, и будет счастье. Если этого не делать, рано или поздно ты ошибешься.
Тебя сливают именно те данные, которые ты вводишь сам. Никто, кроме тебя самого, тебя не сдаст. Настроил все как бы секьюрно — Tor, виртуалка, а потом лезешь на свой блог проверять, работает ли интернет .
Если мы говорим про «защиту об блеков», это разделение машин очень хорошо работает. Заведи два компа. На этой машине у тебя платежная информация: на этой машине ты ходишь в свой PayPal, Киви-кошелек. И вот другая машина, на которой ты занимаешься всякой фигней. Ну поймаешь ты малварь, ну похекают тебя. А на машине ничего ценнее пароля от одноразовой почты нет.
Надо иметь разные физические машины. Виртуалки — это тлен. Отдельная машина, только так. Виртуалки удобны, но рано или поздно спутаешь браузеры, все путают. Собственно, так обычно блеков и ловят, они сами палятся.Возьми хотя бы VPN. Ты работаешь, павнишь что-то. VPN моргнул на секундочку — и этого хватило. Всего один пакет, и отсветился твой реальный IP. Провайдер пишет трафик, три месяца минимум. Один-единственный трейс — и finita la comedia.
Ломать из-под «мака» — вообще дурная затея, там слишком много intercommunications. Ни один Little Snitch тебя не спасет. Никто не знает, что там в точности происходит, — вдруг OS X стучит на более низком уровне в обход всех твоих VPN и файрволов?
Если тебе надо захайдиться, есть только одна реальная схема. Едешь в Митино, там покупаешь бэушную симку, бэушную мобилу и бэушный ноут. Едешь в ближайший большой город и там делаешь то, что тебе надо. А когда сделал — выкидываешь все в ближайшую речку. Вот это работает.
Блечить с использованием общедоступных утилит — это тоже глупость. Стучат все. Особенно пентест-утилиты следят за тем, кто, что и как пентестит. Например, надо быть наивным, чтобы поверить, будто Burp Collaborator не записывает те запросы, которые на него приходят. Даже нет, похек бывает везде! Один раз ради шутки мы выложили плагин для Burp Suite с небольшой закладкой. Около нее написали: «Это шутка, парень! Если ты это нашел, то ты крутой, напиши нам!» Думаешь, кто-то откликнулся? Ни разу.
Любое ПО, в котором используются сторонние либы, которые ты хотя бы не вычитал, — это по определению несекьюрно. Даже в энтерпрайзе используются мутные либы, которые никто не проверяет, что говорить об обычных приложениях?