О значении «Wax On, Wax Off»

«Вам не нужны нужны основы ИТ или навыки программирования, чтобы изучать кибербезопасность».

«Чтобы стать инженером-программистом, нужно иметь высшее образование».

Хотя продвигать снижение входных барьеров в отчаянно недоукомплектованные области STEM (например, кибербезопасность) — это благородно, кажется, что за этими благонамеренными словами часто скрывается антиинтеллектуализм. Мнение таково, что нам на самом деле не нужна вся эта теория, которой занимаются яйцеголовые — изучите практические навыки и знания, которые вам понадобятся в работе, и вы сможете заполнить одну из этих горячих технических вакансий начального уровня.

Хотя есть некоторые среды, такие как центры управления безопасностью (SOC), которые могут взращивать таланты с начального уровня (я сам прохожу этот путь), наступают моменты, когда проблема или задача не могут быть решены просто теплыми телами и энтузиазмом. — особенно при работе с большими наборами данных. Вы можете попытаться вручную отрезать часть работы от работы понемногу, но этот подход не сработает, когда ситуация зависит от времени или у вас уже есть много важной работы, выполняемой изо дня в день.

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

"Если поступать правильно, защиты не будет"

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

Задача усложняется не только из-за количества записей, которые нужно проверить, но и из-за размера базы данных, по которой она должна быть проверена, поскольку у нас есть записи диапазонов, а не отдельных адресов. , связать IP-адрес с клиентом, которому он принадлежит, не так просто.

Разделяй и властвуй вручную

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

Простая автоматизация Python

Используя Библиотеки Python для выполнения SQL-запросов, мы могли бы создать функцию для автоматизации шагов проверки адреса. Затем это можно было бы написать в сценарии для запуска в виде цикла по записям в наборе данных, работая в фоновом режиме, пока мы выполняли нашу обычную работу.

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

Автономное копирование и линейный поиск

Чтобы уменьшить нагрузку на базу данных, мы могли бы создать вариант, который сохраняет отсортированную копию таблицы в памяти, а затем выполняет автономный поиск диапазонов IP-адресов. Несмотря на то, что это сделало нашу ИТ-команду немного счастливее, по-прежнему существуют значительные проблемы с производительностью — в худшем случае, когда IP-адрес не принадлежит ни к одному записанному диапазону, функция все равно должна будет пройти весь путь до конца, чтобы проверять каждую запись (линейный поиск).

«Векторизация» с пандами

Используя библиотеку Pandas, созданную на основе NumPy (используемую для матричных операций), мы можем реализовать параллельную обработку с помощью векторных операций, а не повторять один элемент за раз. Хотя этот метод не сокращает объем работы (по-прежнему необходимо выполнять операции над всеми элементами), время, необходимое для поиска соответствующей записи, значительно сокращается.

Бинарный поиск

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

Хотя нам приходилось искать N записей в худшем случае с помощью линейного поиска, теперь у нас есть логарифмическая база 2 числа N в худшем случае. Проще говоря, если бы у нас было 2²⁰ записей (1 048 576), нам потребовалось бы максимум 20 проверок при бинарном поиске, а не более миллиона при линейном поиске.

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

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

Вам может не понадобиться необходимо формальное образование, чтобы начать работать в сфере технологий, но, безусловно, не помешает получить его позже. Зачем изобретать велосипед или, что еще хуже, хронически делать что-то неоптимально, если вы можете усваивать знания, которые другие уже кропотливо разработали? Хотя курсы в стиле колледжа могут показаться удушающими по сравнению с игровыми платформами, такими как TryHackMe, я лично выступаю за ценность посещения формальных курсов, таких как структуры данных и алгоритмы, поскольку я видел ценность таких тем в своей собственной карьере.