1. Введение в Python для информационной безопасности
Введение в Python для информационной безопасности
Добро пожаловать в мир практической информационной безопасности. Вы находитесь в самом начале пути, который превратит вас из обычного пользователя компьютера в специалиста, способного видеть скрытые механизмы цифрового мира, находить в них уязвимости и, что самое главное, автоматизировать этот процесс.
Тестирование на проникновение (или пентест) — это легальная, санкционированная попытка взлома компьютерной системы, сети или веб-приложения с целью найти уязвимости до того, как ими воспользуются настоящие злоумышленники. Специалистов, которые этим занимаются, называют «белыми хакерами» (white hats).
Главная проблема современного пентеста — это колоссальные объемы данных. Сети компаний состоят из тысяч компьютеров, веб-сайты имеют сотни скрытых страниц, а приложения обмениваются миллионами строк кода. Пытаться проверить всё это вручную — всё равно что пытаться вычерпать море чайной ложкой.
> Время, когда можно было эффективно проводить пентест, полагаясь исключительно на готовые графические инструменты и чужие эксплойты, безвозвратно ушло. Современный ландшафт угроз требует скорости, гибкости и, главное, индивидуального подхода. > > codeby.net
Именно здесь на сцену выходит программирование. В этом курсе мы не будем изучать программирование ради программирования. Мы будем создавать инструменты, которые работают на нас.
Почему именно Python?
В мире IT существуют десятки языков программирования: C++, Java, Go, Ruby, JavaScript. Однако негласным стандартом в индустрии кибербезопасности стал именно Python.
Чтобы понять причину, давайте разберем три главных фактора:
Давайте сравним подходы к решению типичной задачи хакера — написанию сетевого сканера — на разных языках.
| Характеристика | C / C++ | Bash (Командная строка) | Python | | :--- | :--- | :--- | :--- | | Скорость разработки | Очень низкая (много строк кода) | Высокая (быстро пишется) | Высокая (быстро пишется) | | Сложность для новичка | Высокая (нужно управлять памятью) | Средняя (специфичный синтаксис) | Низкая (читается как текст) | | Гибкость и логика | Максимальная | Низкая (сложно писать сложную математику) | Высокая (богатые библиотеки) | | Скорость выполнения | Максимальная | Низкая | Средняя (достаточная для 99% задач) |
Как видите, Python предлагает идеальный баланс между тем, насколько быстро вы можете написать хакерскую утилиту, и тем, насколько сложной она может быть.
Мышление автоматизатора: от рутины к эффективности
Представьте реальную ситуацию из жизни пентестера. Вы заключили договор на аудит безопасности крупной корпорации. У них есть 500 серверов. Ваша задача — проверить, не использует ли какой-либо из этих серверов устаревшую версию программы, в которой есть известная уязвимость.
Если вы будете делать это вручную: открывать терминал, вводить команду для подключения к первому серверу, ждать ответа, записывать версию в блокнот, отключаться, переходить ко второму серверу... На проверку одного сервера уйдет около 3 минут.
Давайте посчитаем общие затраты времени. Используем простую формулу:
Где — общее время, — количество целей (500 серверов), а — время на одну цель (3 минуты).
минут. Это 25 часов непрерывной монотонной работы без сна и перерывов. Человеческий мозг устает от рутины, внимание притупляется, и на 300-м сервере вы неизбежно совершите ошибку, пропустив критическую уязвимость.
А теперь подход программиста-пентестера. Вы тратите 20 минут на написание скрипта на Python. Этот скрипт автоматически подключается к каждому серверу, считывает версию программы, сравнивает её с базой уязвимостей и выдает вам готовый отчет, подсвечивая красным цветом только те серверы, которые можно взломать. Скрипт проверяет один сервер за 0.5 секунды.
секунд. Это чуть больше 4 минут.
Вы потратили 20 минут на код и 4 минуты на его работу. Итого: 24 минуты вместо 25 часов. Более того, этот скрипт останется с вами навсегда, и на следующем проекте с 10 000 серверов вы выполните задачу мгновенно. Это и есть главная суперсила, которую дает программирование.
!Схема этапов тестирования на проникновение
Анатомия хакерского арсенала: базовые термины
Прежде чем мы напишем первую строчку кода, нам нужно договориться о терминах. В информационной безопасности существует свой сленг. Если вы не понимаете разницы между эксплойтом и пейлоадом, вы не сможете создавать эффективные инструменты.
1. Скрипт (Script)
Скрипт — это текстовый файл, содержащий последовательность команд для компьютера, написанных на языке программирования (в нашем случае — на Python).Аналогия из жизни: Скрипт — это кулинарный рецепт. В нем пошагово расписано: возьми данные А, отправь их на сервер Б, если сервер ответил В — выведи сообщение на экран. Компьютер (как послушный повар) просто выполняет эти шаги сверху вниз.
2. Уязвимость (Vulnerability)
Уязвимость — это ошибка в коде программы, неправильная настройка системы или архитектурный недостаток, который позволяет атакующему нарушить безопасность системы (получить доступ к данным, выключить сервер и т.д.).Аналогия из жизни: Уязвимость — это сломанный замок на задней двери банка или окно, которое забыли закрыть на ночь.
3. Эксплойт (Exploit)
Эксплойт (от англ. to exploit — эксплуатировать, использовать) — это специализированный скрипт или программа, которая использует конкретную уязвимость для атаки на систему.Аналогия из жизни: Если уязвимость — это сломанный замок, то эксплойт — это отмычка, специально выточенная под форму этого сломанного замка, чтобы его открыть.
4. Пейлоад (Payload)
Пейлоад (полезная нагрузка) — это часть кода, которая выполняется на атакуемой системе после того, как эксплойт успешно пробил защиту. Эксплойт открывает дверь, а пейлоад — это то, что заходит внутрь.Аналогия из жизни: Отмычка (эксплойт) открыла дверь сейфа. То, что делает грабитель дальше — забирает деньги, устанавливает скрытую камеру или сжигает документы — это и есть пейлоад.
В рамках этого курса мы будем писать скрипты для автоматизации разведки, создавать собственные эксплойты для известных уязвимостей и генерировать пейлоады для получения контроля над серверами.
Как компьютеры общаются друг с другом
Чтобы взламывать сети, нужно понимать, как они работают. Любое взаимодействие в интернете строится на двух фундаментальных понятиях: IP-адрес и Порт.
Представьте себе огромный многоквартирный дом. * IP-адрес — это почтовый адрес самого здания (например, ул. Ленина, д. 10). Он уникален для каждого устройства в сети. Зная IP-адрес, мы знаем, к какому компьютеру обращаемся. * Порт — это номер конкретной квартиры в этом здании.
На одном компьютере (в одном здании) одновременно работает множество программ (жильцов). Веб-сервер отдает страницы сайтов, почтовый сервер принимает письма, база данных хранит информацию. Чтобы данные из интернета попали к нужной программе, используются порты.
Порт — это просто число от 0 до 65535. Существуют общепринятые стандарты:
Когда хакер начинает атаку на компанию, первое, что он делает — проводит сканирование портов. Он берет IP-адрес компании и по очереди «стучится» в каждую из 65535 дверей (портов), чтобы узнать, какие из них открыты и какие программы за ними прячутся. Если дверь открыта, хакер начинает искать уязвимости в программе, которая за ней стоит.
Разбираем первый хакерский скрипт
Давайте посмотрим, как выглядит простейший сканер портов на Python. Не пугайтесь, если вы никогда раньше не видели код. Сейчас мы разберем его по косточкам, чтобы вы поняли саму логику.
Давайте переведем этот код с языка Python на человеческий язык:
import socket — мы говорим Python: «Подключи библиотеку socket». Эта библиотека содержит готовые инструменты для работы с сетью. Нам не нужно объяснять компьютеру, как формировать электрические сигналы в кабеле, библиотека сделает это за нас.target_ip = "192.168.1.10" — мы создаем переменную (коробочку с именем target_ip) и кладем в нее адрес компьютера, который собираемся атаковать.for port in range(20, 25): — это цикл. Мы говорим: «Перебери все числа от 20 до 24 по очереди, и каждый раз называй текущее число словом port».sock = socket.socket(...) — мы создаем сетевой разъем (сокет). Это наш инструмент для «стука в дверь».sock.settimeout(1) — мы устанавливаем таймер. Если дверь не открывают в течение 1 секунды, мы не стоим под ней вечно, а идем дальше.result = sock.connect_ex((target_ip, port)) — самое главное действие! Мы пытаемся установить соединение с указанным IP-адресом на текущий порт. Результат этой попытки (успех или провал) мы сохраняем в переменную result.if result == 0: — в сетевом программировании код 0 означает, что соединение прошло успешно (ошибок ноль). Мы проверяем: если результат равен нулю, значит дверь открыта.print(...) — команда вывода текста на экран. Мы печатаем сообщение о том, открыт порт или закрыт.sock.close() — мы закрываем соединение и убираем за собой, чтобы перейти к следующей двери.Всего 15 строк кода, и у вас в руках инструмент, который может автоматически просканировать сеть. Да, это очень примитивный сканер. В реальных условиях он будет работать медленно, и современные системы защиты (Firewalls) легко его заметят. Но именно с таких базовых концепций начинается разработка серьезных инструментов.
Опасность синдрома «Script Kiddie»
В среде информационной безопасности есть пренебрежительный термин — Script Kiddie (скрипт-кидди, «дети со скриптами»). Так называют людей, которые скачивают чужие хакерские программы из интернета, нажимают кнопку «Взломать», но совершенно не понимают, как эти программы работают под капотом.
Проблема скрипт-кидди в том, что они беспомощны при малейшем отклонении от стандарта. Если готовый эксплойт не сработал, скрипт-кидди сдается. Если антивирус заблокировал программу, скрипт-кидди не знает, как её изменить.
Цель нашего курса — сделать из вас инженера, а не скрипт-кидди. Вы должны понимать каждый байт, который ваш скрипт отправляет в сеть.
> Настоящий пентестер не ждёт — он создаёт. Время взять контроль в свои руки. Время научиться программировать. > > codeby.net
Когда вы пишете код сами, вы можете:
Что вас ждет дальше
Этот курс построен по принципу постепенного погружения. Мы не будем изучать сухую теорию алгоритмов. Каждая строчка кода, которую мы напишем, будет иметь практическое применение в хакинге.
В следующих статьях мы пройдем через все этапы работы профессионального пентестера:
Программирование — это навык, который требует практики. Не пытайтесь просто читать код. Переписывайте его, ломайте, меняйте переменные, смотрите на ошибки, которые выдает интерпретатор Python. Ошибка в коде — это не провал, это ваш главный учитель.
Готовьтесь. В следующей статье мы установим необходимое программное обеспечение, настроим нашу боевую среду и напишем первый полноценный скрипт для сбора информации о цели в интернете.