
Почему Python важен для кибербезопасности?
Python стал стандартом в индустрии информационной безопасности благодаря своей простоте и мощным библиотекам. От автоматизации рутинных задач до создания сложных инструментов для тестирования на проникновение — Python незаменим для современного специалиста.
# Устанавливаем Python и менеджер пакетов в Linux
$ python3 —version
# Проверяем установленную версию
Python 3.9.2
Переменные и типы данных
Переменные позволяют хранить и обрабатывать данные. В кибербезопасности мы часто работаем с IP-адресами, хешами, логинами и паролями.
target_ip = «192.168.1.1»
scan_port = 80
service_version = «Apache 2.4.41»
print(«Цель:», target_ip)
print(«Порт:», scan_port)
print(«Сервис:», service_version)
target_url = input(«Введите URL для сканирования: «)
timeout = int(input(«Таймаут соединения (секунды): «))
# Форматированный вывод
scan_report = f»Начинаем сканирование {target_url} с таймаутом {timeout}с»
print(scan_report)
f"текст {переменная}" доступен в Python 3.6+.Условные операторы
Логика принятия решений — основа любого инструмента безопасности. Проверяем условия и реагируем соответствующим образом.
port_status = input(«Статус порта 80 (open/closed/filtered): «).lower()
if port_status == «open»:
print(«[+] Порт 80 открыт. Проверяем веб-сервер…»)
# Здесь будет код проверки веб-сервера
elif port_status == «filtered»:
print(«[!] Порт фильтруется фаерволом»)
else:
print(«[-] Порт закрыт»)
vulnerability_score = float(input(«CVSS Score уязвимости (0-10): «))
has_exploit = input(«Есть публичный эксплойт? (yes/no): «).lower() == «yes»
if vulnerability_score >= 7.0 and has_exploit:
print(«[CRITICAL] Высокоприоритетная уязвимость с эксплойтом!»)
elif vulnerability_score >= 4.0:
print(«[MEDIUM] Уязвимость среднего приоритета»)
else:
print(«[LOW] Низкий приоритет»)
Коллекции данных: списки и словари
Для работы с наборами данных (IP-адреса, порты, уязвимости) используем списки и словари.
common_ports = [21, 22, 23, 25, 53, 80, 443, 8080, 8443]
print(f»Сканируем {len(common_ports)} общих портов»)
print(«Первый порт:», common_ports[0])
print(«Последний порт:», common_ports[-1])
# Добавляем дополнительные порты
common_ports.extend([3306, 5432, 27017])
print(f»Теперь {len(common_ports)} портов»)
vulnerability_db = {
«CVE-2021-44228»: {
«name»: «Log4Shell»,
«cvss_score»: 10.0,
«affected_versions»: [«2.0-beta9», «2.14.1»]
},
«CVE-2017-0144»: {
«name»: «EternalBlue»,
«cvss_score»: 8.5,
«affected_versions»: [«Windows 7», «Windows 8.1»]
}
}
# Доступ к данным в словаре
cve_id = «CVE-2021-44228»
print(f»{cve_id}: {vulnerability_db[cve_id][‘name’]}»)
print(f»CVSS: {vulnerability_db[cve_id][‘cvss_score’]}»)
Автоматизация с помощью циклов
Циклы позволяют автоматизировать массовые операции: сканирование портов, перебор директорий, анализ логов.
network_base = «192.168.1.»
active_hosts = []
print(«[*] Начинаем сканирование сети…»)
for host in range(1, 11): # Сканируем .1 — .10
target_ip = network_base + str(host)
# Имитация проверки доступности
import random
is_active = random.choice([True, False])
if is_active:
active_hosts.append(target_ip)
print(f»[+] {target_ip} — активен»)
else:
print(f»[-] {target_ip} — не отвечает»)
print(f»\n[+] Найдено активных хостов: {len(active_hosts)}»)
weak_passwords = [«123456», «password», «admin», «qwerty», «welcome»]
user_password = input(«Введите пароль для проверки: «)
is_weak = False
for weak_pass in weak_passwords:
if user_password == weak_pass:
is_weak = True
break # Прерываем цикл при нахождении совпадения
if is_weak:
print(«[!] Пароль находится в списке слабых паролей!»)
else:
print(«[✓] Пароль не найден в списке слабых»)
Практическая задача: анализатор логов
Создадим простой анализатор логов, который ищет подозрительную активность.
import re
def analyze_log_file(log_file):
«»»Анализирует файл логов на наличие подозрительных запросов»»»
# Шаблоны для поиска подозрительной активности
suspicious_patterns = [
r»\.\./», # Directory traversal
r»(union|select).*from», # SQL injection
r»<script>», # XSS attempts
r»\.(php|asp|jsp|py)\?» # Параметризованные запросы
]
suspicious_entries = []
try:
with open(log_file, ‘r’) as file:
for line_num, line in enumerate(file, 1):
for pattern in suspicious_patterns:
if re.search(pattern, line, re.IGNORECASE):
suspicious_entries.append({
«line»: line_num,
«pattern»: pattern,
«content»: line.strip()
})
break # Нашли одно совпадение — переходим к следующей строке
except FileNotFoundError:
return f»Файл {log_file} не найден»
return suspicious_entries
# Пример использования
if __name__ == «__main__»:
log_file = «access.log»
results = analyze_log_file(log_file)
if isinstance(results, list):
if results:
print(f»[!] Найдено {len(results)} подозрительных записей:»)
for entry in results:
print(f» Строка {entry[‘line’]}: {entry[‘content’][:50]}…»)
else:
print(«[✓] Подозрительная активность не обнаружена»)
else:
print(results)
Практические задания
Задание 1: Валидатор IP-адресов
Напишите функцию, которая проверяет корректность IPv4 адреса. Функция должна возвращать True для корректных адресов и False для некорректных.
def is_valid_ip(ip_address):
# Ваш код здесь
pass
# Тесты:
print(is_valid_ip(«192.168.1.1»)) # Должно вернуть True
print(is_valid_ip(«256.300.1.1»)) # Должно вернуть False
print(is_valid_ip(«not.an.ip»)) # Должно вернуть False
Задание 2: Генератор безопасных паролей
Создайте программу, которая генерирует безопасные пароли заданной длины. Пароль должен содержать буквы верхнего и нижнего регистра, цифры и специальные символы.
Задание 3: Монитор сетевых соединений
Напишите скрипт, который имитирует мониторинг сетевых соединений и выводит статистику по протоколам (TCP/UDP) и состояниям соединений.
Дальнейшее развитие
Вы освоили основы Python для кибербезопасности! Для дальнейшего развития рекомендуем изучить:
- Scapy — для работы с сетевыми пакетами
- Requests и BeautifulSoup — для веб-сканирования
- Paramiko — для SSH-автоматизации
- Cryptography — для работы с шифрованием
