Книга: Отъявленный программист: лайфхакинг из первых рук
Про работу
Про работу
Что ты сам можешь рассказать о своей работе? Надеюсь, это не ЦРУ?
Мы, конечно, не ЦРУ, но уровень секретности у нас ничуть не хуже. Не люблю секретность. Не выдержал и написал на стене маркером в знак протеста:
Everything is a secret. Everybody is an enemy. A cold war inside [censored].
Насчет врагов я, конечно, погорячился, но перед отбытием на «Black Hat» (в качестве зрителя) со мной провели инструктаж, потому как там шпион на шпионе. Здесь мы подходим к той грани, где мне приходится взвешивать каждое слово, поскольку оно идет в печать. А потому давайте сойдемся на формулировке: «На данный момент работаю в крупной американской компании на должности рядового инженера, занимаясь выполнением задач, поставленных руководством».
Какая у тебя специализация?
Поскольку в физическом труде меня заподозрить сложно, то, вероятнее всего, основной доход дают мозги на плодородной ниве информационной безопасности (ИБ).
Поковыряем немного в плотной завесе секретности. Пару лет назад было много шума, типа ты там какой-то космический софт написал?
Ох уж этот пытливый русский народ, блин. Там все засекречено. Но из того, что можно рассказывать (и что уже засветилось на конференциях), так это проекты для US FAA и US Air-Force.
Писал модули детекции (HIPS) для обнаружения вторжений и атак как second in charge, то есть вся ответственность на мне. Эти модули работают в закрытой сети указанных организаций, физически отрубленных от Интернета, и там даже нормальных rfc’шных протоколов нет — все какой-то левый самопал, с которым приходится работать. Это, конечно, не совсем космос, но очень-очень близко к нему. Любые атаки (инсайдеров) тут — это очень критично.
Касательно космоса — писал софт для одной организации для распознавания спутниковых фотографий. Но это скучно и к космосу имеет только опосредованное отношение. Применил уже давно разрабатываемую мной идею.
Какова история этой идеи распознавания?
Вся история развивалась примерно так.
Специализируюсь в секьюрити, и вот мне предлагают принять участие в американской государственной программе (то есть практически бесплатно) по охоте на сайты с детской порнографией. Но ловить сайты по косвенным признакам (локациям доменных имен и прочим) уже пробовали — неэффективно. И тут меня осеняет, что «распознавание образов» как общая задача, действительно, требует искусственного интеллекта и многих лет упорной работы. А вот данную частную задачу можно решить на коленке буквально в сотне строк кода, анализируя видеопоток — порно или не порно (даже если видеопоток сильно пережат). Попробовали — получилось! Очень высокая точность!
В распознавании «малвари» (а это моя основная узкая специальность) и изображений на первый взгляд мало общего, но существующие антивирусы работают по тому же принципу, который может быть адаптирован и для распознавания изображений, если не спускаться на уровень алгоритмов, а мыслить абстрактными категориями. Именно за счет этого достигается возможность распознавания новой «малвари» моим методом.
Другая госпрограмма США работала со спутниками, меня спросили: а нельзя ли адаптировать твою порнотехнологию для наших целей на спутники (автоматическое распознавание заданных объектов на поверхности)? Решили попробовать. Получилось. Главное требование у всех — скорость. Большого ума от распознавалки не требовали, но она должна была работать так быстро, как это только возможно. Вот три этапа эволюции одной идеи. Кстати, сейчас на эту мою технологию начал поглядывать Google.
Что такого принципиально нового ты смог предложить, если этим занимаются тысячи человек по всему миру?
Цвет кожи (особенно детской) имеет достаточно специфичный оттенок, который предсказуемо «корежится» при пережатии в разные цветовые пространства. Сочетание цветов половых органов также специфично. Но это мы пока говорим про то, что есть на порно. А вот то, чего на нем гарантированно нет, позволяет однозначно отсеять кучу другого контента. Обычно в качестве критерия для поиска с переменным успехом искали лишь первую часть условия. У меня же эффективность значительно увеличивается использованием второй «исключающей» составляющей. Но даже в первой составляющей у меня есть определенные ноу-хау.
А вообще, основные алгоритмы были лицензированы у Кэннона и только допилены под мое видение задачи. К примеру, мой вклад — там распознается не только свет, но еще и постановка освещения. В дешевом порно она очень характерна. Например, повсеместное мигание вспышек. Кстати, в момент вспышки мы получаем истинный цвет, решая проблему баланса.
Короче, это как бы не распознавание изображения в классическом понимании, а распознавание конкретного вида контента. Скорость получилась офигительная, так как выполняются тривиальные операции, которые еще и легко параллелятся. Число ложно-позитивных и ложно-негативных срабатываний получилось даже лучше, чем изначально требовал заказчик.
Да, кстати, вирусы у меня распознаются примерно так же. Тот же самый принцип в точности. Ищем в вирусах нечто такое, что встречается в них, но гарантированно отсутствует в остальных программах.
Как я понял, твой успех был отчасти в том, что все пытались найти общее универсальное решение и впоследствии увязали в нарастающей сложности. Ты же решил узкоспециализированную задачу, зато смог это сделать эффективно и быстро. Немного отвлекаясь от основной темы, здесь мы снова возвращаемся к любимому тобой спору вокруг назначения языков C и C++.
Каждый конкретный язык определяет мышление, хотим мы того или нет. Так вот, постоянно сталкиваюсь с тем, что «плюсовики» тяготеют к решениям в общем виде, в то время как «сишники» решают задачу в частном виде, что в разы быстрее.
Одну текущую задачу сначала показали «плюсовику», спросив, сколько займет ее решение. Он сказал: «Здесь нужно писать могучий движок. Короче говоря, это проект на полгода». Его коллега-«сишник» поинтересовался: «А зачем?» Ведь поставленная задача укладывается в сотню строк кода! Ответ был ошеломляющим: «Ну и что, мы так и будем по сотне строк кода писать для решения частных задач, каждый раз, как они возникают?» Нетушки, задачи надо решать раз и навсегда!
По моему глубокому личному убеждению, проблемы нужно решать по мере их возникновения. Писать программы на вырост с избыточным универсализмом нужно, лишь очень хорошо предварительно подумав, ибо это из серии «Почему сегодня не делают корабли, летающие к звездам?» Ответ прост: потому что корабль, построенный завтра, прибудет быстрее, а корабль, построенный послезавтра, еще быстрее. И их обоих обгонит корабль, построенный лет через пятьдесят, но когда он вернется обратно, то обнаружит, что у человечества совсем-совсем другие проблемы.
Ты упомянул, что этот твой «принцип распознавания» впоследствии применялся к разным темам, но впервые ты использовал его в анализе «малвари» и даже оформил патент на его основе. Можешь рассказать подробнее?
Как-то в бытность свою работал я удаленно. Ну, как работал, скорее анализировал огромное количество сплоитов. Причем делал все медленно, потому что навыка не было. Порядочно устав, я написал программу, которая автоматически сгенерировала другую программу. И вот эта другая программа анализировала сплоиты со скоростью один гигабайт в секунду. Запустил ее и улетел в Берген на встречу со знакомой немкой. И вот пока я гулял по сказочно красивой Норвегии, наслаждаясь золотой осенью и местным колоритом старинных замков и фортификационных сооружений, мой компьютер все это время стоял включенным «под нагрузкой».
И когда дней через десять вернулся, программа уже завершала анализ, но у меня хватило ума никому об этом не говорить и до конца года получать «убитых енотов» автоматом. А за пунктуальность и следование намеченным планам мне еще бонусы платили на работе. В конце концов, меня заела совесть, и я выслал результаты машинного анализа одним и очень большим куском. В результате эта фирма надолго встала, и теперь мне же пришлось писать еще одну программу, чтобы автоматизировать труд тех, кто разгребал эти результаты, писал к ним тесты и заносил в базу.
Собственно, так я и получил свой первый (и пока единственный) софт верный патент.
Не удивлен, что без женщин не обошлось. Как я понимаю, на основе развития этого принципа впоследствии ты написал модуль, благодаря которому был признан лучшим сотрудником года в McAfee. Что он делал?
Если помнишь, была такая нашумевшая китайская атака против Google — Operation Aurora1. Вот за нее и наградили. Фокус в том, что я ее чистой эвристикой распознал, модулем, который собрал еще за полгода до самой атаки. Конечно, мне просто повезло, как везет немногим...
Но в итоге оказалось, что передо мной в США открылись такие перспективы, о которых я вообще мечтать не мог. Даже в принципе. В самом смелом сне.
- Системное программное обеспечение
- «БОМБЫ» ПРОТИВ «ЭНИГМЫ»
- О чем просить?
- II. Вовлечение группы в работу и создание атмосферы взаимопонимания
- Часть II Начинаем работу
- Как завершить работу с программой и сохранить данные, с которыми я работал?
- Глава 4. Осваиваем работу с проводниками
- Правило № 17 Профессионал осознанно делает свою работу не совсем профессионально
- Глава 72. Все, что вы хотели знать о том, как получить работу в Кремниевой долине, но не знали, кого спросить
- Просто выполнять работу недостаточно
- Продолжаем работу
- Включаемся в работу и изучаем проблему