R0 CREW

Reverse engineering на собеседовании: как мы нанимаем на работу

Источник: habrahabr.ru

Привет. Меня зовут Алексей Маланов, я пять лет проработал руководителем Отдела антивирусных исследований в «Лаборатории Касперского». Хочу поделиться с вами своим опытом найма вирусных аналитиков. Пост, надеюсь, будет интересен и полезен в первую очередь молодым специалистам, которые только собираются сделать первый шаг в карьере. Ну а матерым IT-шникам тоже может быть любопытно, какие же вопросы задают на собеседовании в ЛК. В свое время у меня в команде было несколько десятков человек и нанимали мы постоянно. Я стремился присутствовать на каждом собеседовании лично, чтобы быть уверенным, что человек будет что надо.

Объем

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

Пощупав малвару, став опытными «дятлами», они уже «растекаются» в соседние отделы, специализируются на чем-то более узком, становятся менеджерами. В общем, поэтому найм вирусных аналитиков происходит нон-стоп. В среднем 1-2 собеседования в неделю. Ах да, сам я тоже начинал с младшего вирусного аналитика.

Аудитория

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

Лично я предпочитаю сотрудников — студентов старших курсов. Они амбициозные, трудолюбивые, бесстрашные, открытые для всего нового. Чего не скажешь про опытных программистов. Опытные боятся учиться новому. Но, конечно, полно исключений. Кроме того, сам я считаю, что мой мозг работал лучше всего именно в студенческие годы.

Мотивация

И вот приходит молодой соискатель. Опыта зачастую нет вовсе, или он небольшой. В резюме перечислено то, чему учили в институте. Работу готов лишь совмещать с институтом (20 часов в неделю). Иногда еще и боится меня. На мой взгляд, самое главное — это понять чего он хочет. Поработает и свалит? «С опытом работы я больше стою!» Или хочет, чтобы ему дали шанс проявить себя? Или мама сказала: «Хватит играть в контру целыми днями, иди поработай лучше.»

Хорошая работа

Сначала, понятное дело, приветствие, представление, дружелюбное «как добрались? Чаю, кофе не хотите?». А потом сразу: «Скажите, а что на ваш взгляд означают слова „хорошая работа“?»

О, вариантов ответов я слышал массу:

  1. Это там, где хорошо платят
  2. Это когда ездить удобно
  3. Это там, где интересно работать
  4. Главное, чтобы начальник был добрый
  5. Начальник хороший (необязательно добрый)
  6. Коллектив хороший
  7. Это там, где есть перспективы
  8. Это там, где есть развитие
  9. Это там, где есть карьерный рост
  10. Это когда можно совмещать с учебой

И еще много других. Иногда соискатель впадает в ступор. Приходится помогать, подсказывать.

Зачем этот вопрос, что дают ответы? Для меня важны и ответы, и их порядок. Если кандидат назвал зарплату, близость к дому и комфорт офиса, то мне его через год будет тяжело мотивировать. Он будет полагать, что если ему работать тяжело и скучно, так это потому что денег мало платят. Безусловно, бывают такие люди хорошими работниками. А уж если тяжелая финансовая ситуация, то зарплата вылезет на первое место и для увлеченного человека. Но в целом, хочется, чтобы работник любил свое дело, ценил коллектив. Такой в будущем будет программировать утилиты, автоматизирующие работу, выдвигать «рацпредложения», развивать работу, если так можно сказать. А не просто делал то, что просят, стремясь проскочить поскорее этот этап и перейти к руководству.

А что же вам интересно?

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

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

Я всегда мечтал работать именно у вас

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

Как вы догадываетесь, есть люди, которые каждому работодателю говорят, что всегда мечтали работать именно у него. На каких вопросах они обычно «палятся»:

  1. И что же вы про нас знаете? А какие продукты кроме антивируса еще у нас есть?
  2. А какие другие антивирусные компании вы вообще знаете?
  3. А с какого момента вы так решили? Вы все это время посвящали прокачке реверс-инжиниринга?

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

Как вы относитесь к рутине?

Редко какая работа является динамичной и захватывающей в течение длительного времени. Если вы программист, то вы все равно будете много кодить, какими бы интересными не были ваши проекты. Если вы менеджер, то вы будете много «решать вопросы». Если вирусный аналитик — через ваши руки пройдет много вредоносов. И как бы вы не любили реверс, усидчивость вам тоже не помешает.

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

Экспертиза

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

  1. На чем бы вы писали парсер лога антивируса?
  2. Назовите известные вам WinAPI функции для создания нового процесса
  3. А вот у вас тут в резюме неизвестная мне технология, расскажите, зачем она нужна

и т.п. Но есть любимые вопросы.

CrackMe

Кандидату при назначении собеседования предлагается дома отреверсить несложный файлик. Знание Asm обязательно для позиции. Причем, достаточно институтского курса, опыт необязателен. Этим заданием мы проверяем не только знание, но еще и готовность потратить час-день своего времени. А если соискатель реально эксперт, то задание займет у него 5 минут. Некоторые кандидаты не настолько хотят работать именно у нас, чтобы тратить свое личное время на какие-то там задания. Это тоже нормально. Только на позиции вирусного аналитика придется именно реверсом и заниматься. А если вам неинтересен один сампл, вряд ли вам будет интересно анализировать их много.

Пару раз приходили кандидаты, которые просто загуглили имя файла crackme01_x64.exe и взяли оттуда решение. Эпическая победа.

Assembler

[B]xor eax, eax
or eax, eax
jz label[/B]

Произойдет ли переход по метке? Внезапно можно выяснить, что кандидат, который решил тестовое задание, не знает, что такое битовые операции или не может написать табличку истинности для операции «ИЛИ».

Задачка

Верно ли, что если 6/a < 3, то a > 2? Я пишу вопрос на бумажке, даю кандидату и прошу написать ответ, добавляя «подумайте, не торопитесь». Если кандидат пишет «не верно», значит, он помнит, чему учили в школе, и институт не смог затуманить разум. Убираем бумажку и переходим к следующему вопросу.

А вот если кандидат записывает «верно», то мне очень любопытно посмотреть, как человек ошибается (с какой скоростью, с какой уверенностью) и как относится к своим ошибкам.

Для начала я прошу подставить -1 (был один соискатель, тогда мы еще не давали задание до собеседования, который так и не смог сказать, чему же равно 6/-1). А потом выясняю, почему же кандидат ошибся. Кто-то поторопился и очень переживает по этому поводу. Кто-то настаивает, что «задача поставлена некорректно, вы меня не предупредили». Кто-то дописывает на листочек: «Верно, при условии, что a > 0». Кто-то долго пытается разобраться, как же так выходит, «ведь 3a > 6», и даже берет задачу «на дом». Ну а кто-то отодвигает листок в сторонку: «фигня, давайте дальше».

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

Сталкивались ли вы с вирусами?

Задаем мы и такой вопрос. Уточняем, где, с какими, что запомнилось, не пытался ли анализировать, как лечил. Очень расстраивает ответ: «Я просто систему переустанавливаю.» А один раз даже слышал: «А я вирусы не лечу, они мне не мешают. Ценной информации у меня нет, пусть будут.» Понятно, что такой уровень ответственности нам не подойдет.

А не малварщик ли ты часом?

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

А бывает и наоборот. Приходит самоуверенный: «Я написал такого классного червя, которого вы столько-то дней не детектили.»

C vs C++

Не пишите в резюме, что вы эксперт по какому-то вопросу. Это просто-таки подначивает работодателя проверить, насколько вы реально круты. Но большинство все-таки просто пишет «навыки: Asm, C/C++, C#». Я прошу оценить навык по 10-балльной шкале. Замечу, это 10-балльная шкала лучше 5-балльной, очевидно. И вот тут частенько снова соискатель ставит десятки и девятки.

Прошу назвать три основных отличия C от C++. И слышу такие предположения:

  1. Ничем особо не отличаются, просто название такое «C/C++»
  2. Только классы добавили. Три отличия – это полиморфизм, инкапсуляция и наследование
  3. Перегрузка функций появилась, переменные можно в середине блока объявлять, тип bool добавили

«Эксперты» почему-то совсем забывают про шаблоны и исключения. Мораль: трезво оценивайте свои знания. Если вам трудно оценить знание какой-то области, скорее всего вы недостаточно в ней разбираетесь. Но и излишняя скромность на собеседовании тоже ни к чему.

Разбор сампла

Заканчивается интервью обычно разбором сампла в IDA за 15 минут. Тут мы проверяем способность схватывать новое (если новое для кандидата было, конечно). Если возникают трудности, можем подсказать по первой половине, но со второй должен справиться сам по аналогии.

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

Зарплата

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

После этого, в отличие от продажника, я ничего не говорю, а просто убираю листок с ответом и перехожу к другим вопросам.

Заключение

Почему я не сообщаю решение сразу

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

  1. Кандидат может начать спорить, уговаривать
  2. Кандидат усомнится в нашей объективности, мол, мы не приняли во внимание все аспекты

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

Кроме того, есть сотрудник HR, который обычно сообщает решение. У него большой опыт сообщать отказы правильно, так что лучше довериться профессионалу.

И, конечно же, у нас есть правило: мы сообщаем решение в любом случае в течение трех рабочих дней. А если не успеваем определиться, то просим кандидата еще подождать.

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

Другие вопросы

Читал я когда-то один пост про «тупые» (открытые) вопросы на собеседованиях, и у меня сложилось впечатление, что автор вообще не понимает, зачем нужно собеседование, ведь «в резюме же все написано». И что поразительно, значительная часть комментирующих была солидарна с автором.

Я тоже регулярно задавал вопросы: «Что же не сложилось с предыдущим работодателем, что для вас „карьерный рост“, какие свои недостатки вы бы отметили?» И многие другие шаблонные. Поверьте, не все дают «социально желательные» ответы, многие действительно раскрывают черты своего характера. У меня нет никаких тайных приемчиков, я просто слушаю и формирую мнение. Если кандидат показался мне «дерзким», я поспрашиваю, от чего в коллективе могут быть конфликты. Если у меня закрадываются подозрения, что кандидат — «раздолбай» (человек, который готовится к экзамену в последнюю ночь), я спрошу, что лучше: спрогнозировать срок завершения работы с запасом и закончить заранее, или сдать в срок, но в последнюю минуту? И тому подобное.

Если вы полагаете, что все эти вопросы бессмысленны, попробуйте поставить себя на место работодателя. Вот в отделе работают люди, кто-то работает лучше, кто-то хуже. И почему так? Когда они уже работают, тяжело понять, что же можно сделать, чтобы «глаза ярче горели». А если вы первый раз видите кандидата, предугадать куда сложнее.

Случай из жизни

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

Я: Как добрались?
Он: На поезде!

Поначалу я задал пару привычных вопросов, но потом стало понятно, что работать мы не сможем. Я посетовал, что для работы вирусным аналитиком крайне важным является знание Assembler’а (а кандидат, как оказалось, его не знал, хоть и указал в резюме). Он встал и злобным скандальным голосом начал: «Зачем тогда нужно было издеваться, давать эти тупые задачки, дебильные вопросы?!» И далее в том же духе. Насилу проводили его до лифта.

Позитивный осадок

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

Зачем это надо? Ведь вряд ли он пойдет постить гадости на форуме. Просто я стараюсь сделать мир добрее.

Итог

Вот Google недавно признала, что головоломки на собеседованиях в целом оказались бесполезны. А я добавлю, что в погоне за какой-то «авторской методикой» подбора сотрудников очень легко скатиться к списку «любимых вопросов» и бездумно задавать их по очереди. Та критика вопросов на собеседованиях, которой полно и на Хабре, как мне кажется, на самом деле направлена не столько на сами вопросы, сколько на шаблонность и бездушность. Так вот, я искренне верю, что мы ищем людей, которым реально интересен reverse и изучение этой стороны IT Security, и поэтому мы практикуем человеческий подход при собеседовании; мы ищем прежде всего креативных коллег и друзей, а не тех, кто способен быстро решать головоломки.

Надеюсь, вам было любопытно, вы расширили кругозор, чуточку лучше поняли, зачем же задают такие «тупые» вопросы. А еще лучше, если я помог определиться с дальнейшими планами на жизнь. И, конечно же, если у вас есть вопросы — задавайте, с удовольствием отвечу. Удачи!

UDP: Совсем забыли! У нас же есть прекрасные свежие вакансии, в том числе и для желающих ковырять малвару: http://kaspersky-lab.hantim.ru/jobs

хм… никогда не воспринимал и не воспринимаю антивирусные компании всеръёз, в плане их назначения. Для мну они как были так и остались конторками, собирающими старую малварь и складирующую её, под лозунгом “Платите шекели и получите тормознутую и лажную защиту в действии”, про ЛК “тормознутую” стоит подчеркнуть.
Но как бы не прискорбно и неожиданно для меня, после универа собираюсь идти либо в ЛК, либо в Dr. Web… Что подскажешь Алексей, где работа интересснее и стабильней?

Я не автор, забыл добавить источник. Исправил.

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

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

Я сижу без антивируса уже год почти, стоит только 2ip guard для особо больных случаев, иногда (1 раз в месяц, может в два месяца) сканю ноут на малварь и никогда ничего не бывает, сканю AVZ, потом Каспером, для полного удовлетворения. Дело в том, что если использовать православное ПО и обновлять его во время, то шансы нарваться на связку стремятся к нулю, а файлов я почти и не качаю…
Ну а вообще да, движок АВ это кнечно круто, но слишком нагруженно и надуманно, и на мой взгляд не пригодно для ежедневного использования.

UDP. Субъективное мнение, у меня ноутбук с 32-битной ОС Windows XP и с Ubuntu 10.10, часто сижу на обоих ОС. Microsoft и так частенько подтупливает, так что в связке с антивирусом это вообще убойно и неработоспособно. И не боись я всяких)))

Ну чё проактивка достаточно полезна, для примера тот-же Sallity, без АВ пожрал бы систему за час так, что лечением могло бы обернутся сносом ОС и большой потере экзешников. С проактивкой его бы наломало без проблем.

Тут кому как повезет, я за последний месяц 2 раза нарывался на херь, но успевал снести все сам, пока авирь рожал скан.

Какая ОС если не секрет?

Win7 x64

Понятно, я впринципе еще не видел малвари, которая на 7 х64 системах причиняла серьёзную деструкцию. Мб таких и нет вообще.

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

Хм… странно, не видел малвари, новой по крайней мере, которая не работала бы под семёрку 64…

Key,не видел? это всякие школостиллеры и прочее мелкое ПО, которое не преодолевает УАЦ и разрядность.

я вчера нарвался ) подключаю мобилку к рс (хр) и тут бабац и все зависло, перезагрузился, похерилась вся почта в оутлуке )))) вирус наверное с названием самсунг дуос )))

У меня на работе есть такой вирус Zalman Z5, втыкаешь девайс в передний юсб, и рандомно может повиснуть, а может и нормально пахать. :slight_smile:

3.Это там, где интересно работать
6.Коллектив хороший