Введение в регулярные выражения (Regex)

  • Автор темы Автор темы LeSh1y777
  • Дата начала Дата начала

LeSh1y777

Пользователь
Регистрация
25/9/25
Сообщения
5,682
Репутация
49
Лайки
152
Депозит
-8.95$
Добро пожаловать обратно, мои начинающие кибервоины!
Следующая тема может показаться непосвященным немного непонятной, но я обещаю, что этот урок принесет вам огромную пользу как хакеру, так и системному администратору. В этом уроке мы рассмотрим то, что обычно называют регулярными выражениями, или просто регэксп.

Работа с текстом в Linux

Помните, что почти всё в Linux — это файлы, и, если уж на то пошло, большинство из них — простые текстовые файлы. В отличие от Windows, с её сложными оснастками и MMC для настройки приложений или серверов, в Linux для конфигурации используется только текстовый файл. Изменить текстовый файл — значит изменить конфигурацию. В результате пионеры Linux разработали довольно сложные и элегантные способы работы с текстом.
Мы уже рассмотрели несколько простых способов обработки текста, таких как grep и sed, но с помощью регулярных выражений у нас появится возможность находить гораздо более сложные текстовые шаблоны.
Например, что, если мы ищем строку кода среди миллионов строк, начинающихся с «s» и содержащих только буквы «sugr» и цифры от 1 до 5 с «bb» на конце? Сможем ли мы найти её, не перебирая миллионы строк кода? Да, с помощью регулярных выражений!

Важность изучения регулярных выражений

Регулярные выражения используются во всем мире информационных технологий. Впервые разработанные в 1956 году и внедрённые Кеном Томпсоном в оригинальную систему UNIX, они теперь используются в Java, Ruby, PHP, Perl, Python, MySQL, Apache, .NET и, конечно же, в Linux.
Без понимания регулярных выражений вы не только затрудняете написание скриптов на любом из этих языков, но и ваша способность выполнять что-то большее, чем простой поиск и замена, становится крайне утомительной. Кроме того, многие правила, написанные в Snort и других системах обнаружения вторжений, написаны на регулярных выражениях.

Как вы можете себе представить, при поиске вредоносного кода решающее значение имеет способность искать и находить сложные и замысловатые текстовые шаблоны.

Как работает Regex в среде

В этом уроке мы будем использовать примеры из набора правил Snort, чтобы проиллюстрировать, как работают регулярные выражения в среде взлома/безопасности.

Шаг 1: Правило вдыхания

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

Правило Snort для обнаружения атак программ-вымогателей

Если вы не знакомы с правилами Snort, возможно, вам будет полезно ознакомиться с ними, прочитав это руководство в разделе Snort на сайте Hackers-Arise.
Наш пример правила из набора правил сообщества Snort.

alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Попытка исходящего подключения MALWARE-CNC Win.Ransomware.PRISM – Получить экран блокировки"; flow:to_server,installed; content:"GET"; http_method; content:"/page/index_htm_files2/"; nocase; fast_pattern:only;pcre:"/x2f((xr)_a-z)|[0-9]{3,}x2e(css|js|jpg|png|txt)$/U";

http_uri; metadata:impact_flag красный, политика сбалансированная-падение IP-адресов, политика безопасности-падение IP-адресов, сообщество набора правил, служба http ссылка:url,http://www.virustotal.com/en/file/4...fddc0dc153f1034d3c52c58/analysis/1377785686/; classtype:trojan-activity; sid:1000033; rev:3;)

Конец правила

Обратите внимание на раздел, выделенный жирным шрифтом. Это часть правила, которая использует pcre (Perl-совместимые регулярные выражения) для обнаружения вируса-вымогателя.
Мы вернёмся к этому правилу в следующем уроке, а пока давайте рассмотрим простое правило Snort с использованием регулярных выражений. Если вы не знакомы с правилами Snort, обязательно ознакомьтесь с моим предыдущим руководством по чтению и написанию правил Snort .

Для нашего примера давайте воспользуемся следующим псевдоправилом:
alert tcp any any -> any 80 ( pcre:”//foo.php?id=[0-9]{1,10}/”;)
Первая часть этого правила должна быть нам знакома. Она гласит: «Отправлять оповещение при поступлении пакета по протоколу TCP с любого IP-адреса с любого порта на любой IP-адрес на порт 80». Новым и странным является то, что идёт после заголовка этого правила.
Теперь наша задача — выяснить, что ищет это правило.

Шаг 2: базовый синтаксис

Прежде чем попытаться расшифровать, что ищет это правило, давайте рассмотрим базовый и простой синтаксис и правила регулярных выражений.
  • / – Начинает и заканчивает регулярное выражение.
  • . – Соответствует любому одиночному символу.
  • […] – Соответствует одному символу в скобках.
  • [^…] – Соответствует всему, кроме того, что находится в скобках (и после ^).
  • [xy] Соответствует каждому символу или цифре между x и y (например: [ad] будет соответствовать буквам a, b, c или d, а [2-7] будет соответствовать цифрам 2, 3, 4, 5, 6 и 7. По умолчанию они чувствительны к регистру и могут комбинироваться любым образом. Например, чтобы соответствовать любому буквенно-цифровому символу, можно использовать [A-Za-z0-9]).
  • ^ – Соответствует начальной позиции строки.
  • * – Соответствует предыдущему элементу или группе ноль или более раз.
  • $ – Соответствует конечной позиции строки.
  • ( ) – Определяет выражение или группу.
  • {n} – Соответствует предыдущему символу n раз (например, {5} потребует, чтобы предыдущий символ или группа совпали 5 раз).
  • {m,n} – Соответствует предыдущему элементу не менее m раз и не более n раз (например: {2,4} потребует, чтобы предыдущий символ или группа появлялись 2–4 раза подряд).
  • | – Соответствует символу или группе до ИЛИ после |.
В следующей таблице приведены некоторые наиболее важные параметры регулярных выражений.
6a4a49_a2ecfb463f3844c3a7e64c56f1f0c513mv2.webp

Помимо параметров регулярных выражений, в регулярных выражениях также есть сокращения. Это символы, которые представляют, например, границу слова, любую цифру, букву, цифру или подчёркивание (допустимые символы при создании имени файла).
6a4a49_c025d422f17b4c92ad345deb8631c71fmv2.webp

Шаг 3: Интерпретация правила

В таблицах выше обобщены некоторые из самых основных правил регулярных выражений. Давайте попробуем разобрать регулярное выражение, встроенное в правило Snort, и определить, что оно ищет.
pcre:”//foo.php?id=[0-9]{1,10}/”;
  • pcre: – Это просто сообщает движку Snort о необходимости использовать совместимые с Perl регулярные выражения для всего последующего.
  • ” – Указывает на начало содержания.
  • / – Указывает начало подвыражений, которые ищет PCRE.
  • – Это экранированный символ — он говорит: «не используйте специальное значение, которое имеет следующий символ в pcre», а вместо этого рассматривайте его как буквальный символ.
  • /foo.php?id= – Это простой текст — правило ищет этот набор символов.
  • [0-9] – Скобки здесь указывают на необходимость поиска любой цифры от 0 до 9.
  • {1,10} – Фигурные скобки здесь говорят о том, что нужно искать предыдущие цифры от 1 до 10 раз.
  • / – Завершите выражение, которое мы ищем.
Затем мы могли бы интерпретировать это правило следующим образом: «найдите (предположительно URL-адрес), который заканчивается на « foo.php?id= », а затем содержит одну цифру от 0 до 9 [0-9] , и эта цифра может повторяться от 1 до 10 раз {1.10} ».
Это правило затем будет перехватывать пакеты, содержащие текстовые шаблоны:
  • foo.php?id=1
  • foo.php?id=3
  • foo.php?id=33
  • foo.php?id=333333
Но будет передавать пакеты с:
  • bar.php?id=1 bar вместо foo
  • foo.php?id= должен содержать хотя бы одну цифру
  • foo.php?id=A должен состоять из цифры, а не буквы
  • foo.php?id=11111111111 может содержать только от 1 до 10 цифр после =
Краткое содержание
Регулярные выражения (pcre в Snort) — мощный инструмент для поиска сложных текстовых шаблонов. Потратив немного времени на освоение этого простого языка, вы сэкономите массу времени инженеру по безопасности или хакеру!
 
Назад
Сверху Снизу