С тех пор, как я написал свою статью Как проникнуть в индустрию CyberSec, я получил много личных сообщений в Twitter, комментариев к записи в блоге, личных сообщений на Reddit и нескольких сообщений в LinkedIn о том, насколько важна часть программирования есть в Cyber ​​/ InfoSec. Я надеюсь, что этот пост прольет свет на эту тему.

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

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

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

Поехали!

C

Практически каждая ОС поставляется в комплекте с C, и почти все библиотеки и фреймворки, с которыми вы будете иметь дело, будут построены или частично построены с использованием C. Почему? Это компактный и эффективный (если все сделано правильно) язык, который может делать в основном все, используя сеть сокетов для обработки изображений.

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

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

По сути, большинство криптографических библиотек основаны на C-коде, поэтому C будет отличным выбором, если вы хотите заняться криптографией!

Вот отличный список книг от новичка до продвинутого. Вы действительно не ошибетесь со StackOverflow!

C++

Есть отличная цитата Бьярна Страуструпа, основателя языка (или библиотеки):

«C позволяет легко прострелить себе ногу; C ++ усложняет задачу, но когда вы делаете это, он отрывает вам всю ногу ».

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

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

Есть буквально ТОННЫ хороших программ, построенных на C ++ или использующих его части. Один из них - nmap, широко используемый инструмент, позволяющий сканировать и перечислять серверы.

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

Вот - еще одна отличная статья с хорошими примерами книг, если вы хотите изучать C ++. Я бы не стал использовать учебник по C ++, если вы полный новичок. У меня есть это дома, но всякий раз, когда я беру его в руки, когда я что-то программирую, я обнаруживаю, что чувствую себя еще более запутанным, и мне кажется, что я знаю намного меньше, чем когда я сначала взял это в руки. Тем не менее, это фантастическая книга - вам просто нужно иметь некоторые предварительные знания C ++ или других языков.

Python

Боже, с чего мне начать? Я ЛЮБЛЮ этот язык.

Если вы новичок в программировании и хотите овладеть этим навыком, я бы посоветовал начать с этого языка. Мало того, что синтаксис очень прост для понимания (когда вы преодолеете чертовы отступы), но он также имеет бесшовное количество библиотек, чтобы делать практически все, что вы хотите.

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

Python также широко используется при выполнении крипто-анализа и анализа вредоносных программ. Так что, если вы хотите поработать с этим, вам стоит взглянуть на Python! (Я знаю, это круто!).

В случае изучения Python я бы посоветовал найти этот веб-сайт и использовать его вместе с документацией по Python. Если у вас есть прочная основа и вы написали одну или несколько программ среднего размера, я бы посоветовал получить копию Violent Python, так как в ней есть чему поучиться. Он в основном ориентирован на наступательную сторону безопасности, но если вы понимаете, как думает наступающая сторона, вы также можете использовать это для создания защитных сценариев!

Поверьте, если вы не знаете этот язык - вам следует!

Баш

Bash - отличный язык сценариев, который можно использовать, если вы в основном работаете с ОС Linux (или если вы используете Bash для Windows).

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

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

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

JavaScript

Я знаю, некоторые из вас могут сейчас почесать в затылке, но обнажитесь со мной.

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

Раньше JavaScript был в основном языком на стороне клиента (что означало, что он выполнял код в гостевой системе, а не на сервере), но в настоящее время мы видим это как на стороне сервера, так и на стороне клиента.

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

Итак, что вы на самом деле делаете с JavaScript? В основном мы видим использование JavaScript в наших браузерах или на веб-серверах. Некоторыми распространенными фреймворками (по состоянию на 16.02-17) являются NodeJS, AngularJS, ReactJS, jQuery и т. Д. Первый (NodeJS) - это серверный фреймворк, который позволяет создавать API для передачи данных с сервера, а три других - в основном на стороне клиента со своими сильными и слабыми сторонами.

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

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

Проприетарные языки сценариев

Сюда входят все языки различных сетевых поставщиков, таких как Cisco.

Эти языки принесут вам большую пользу, если вы работаете с соответствующим оборудованием. Например, если бы вы работали с Cisco IOS, вы бы работали с TCL для автоматизации.

У меня крайне ограниченный опыт работы с такими языками, и все, что я действительно могу сказать, это то, что знание этих языков сценариев принесет вам пользу, если вы собираетесь работать с определенным конкретным типом оборудования или конкретным типом сети и ее безопасность.

Я знаю, что есть множество других языков, которые я пропустил (Ruby, Java и т. Д.), И понимаю, что многие из вас могут не согласиться с тем, что я поместил JavaScript в список. Но я считаю, что для нас становится все более и более важным иметь хотя бы базовое понимание того, как работает этот язык, просто потому, что он повсюду.

Я надеюсь, что это окажется достойным списком и поможет некоторым из вас в вашем стремлении изучить часть языка программирования в Info / CyberSec.

Как я упоминал ранее, смотрите на эти языки как на инструменты в вашем наборе инструментов, а не как на серебряную пулю.

Если я пропустил какие-то важные языки, напишите мне!

Изначально опубликовано в Желуди устремлений.