Добро пожаловать обратно, мои начинающие кибервоины!
Следующая тема может показаться непосвященным немного непонятной, но я обещаю, что этот урок принесет вам огромную пользу как хакеру, так и системному администратору. В этом уроке мы рассмотрим то, что обычно называют регулярными выражениями, или просто регэксп.
Мы уже рассмотрели несколько простых способов обработки текста, таких как grep и sed, но с помощью регулярных выражений у нас появится возможность находить гораздо более сложные текстовые шаблоны.
Например, что, если мы ищем строку кода среди миллионов строк, начинающихся с «s» и содержащих только буквы «sugr» и цифры от 1 до 5 с «bb» на конце? Сможем ли мы найти её, не перебирая миллионы строк кода? Да, с помощью регулярных выражений!
Без понимания регулярных выражений вы не только затрудняете написание скриптов на любом из этих языков, но и ваша способность выполнять что-то большее, чем простой поиск и замена, становится крайне утомительной. Кроме того, многие правила, написанные в Snort и других системах обнаружения вторжений, написаны на регулярных выражениях.
Как вы можете себе представить, при поиске вредоносного кода решающее значение имеет способность искать и находить сложные и замысловатые текстовые шаблоны.
Наш пример правила из набора правил сообщества 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
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
Мы вернёмся к этому правилу в следующем уроке, а пока давайте рассмотрим простое правило Snort с использованием регулярных выражений. Если вы не знакомы с правилами Snort, обязательно ознакомьтесь с моим предыдущим руководством по чтению и написанию правил Snort .
Для нашего примера давайте воспользуемся следующим псевдоправилом:
alert tcp any any -> any 80 ( pcre:”//foo.php?id=[0-9]{1,10}/”
Первая часть этого правила должна быть нам знакома. Она гласит: «Отправлять оповещение при поступлении пакета по протоколу TCP с любого IP-адреса с любого порта на любой IP-адрес на порт 80». Новым и странным является то, что идёт после заголовка этого правила.
Теперь наша задача — выяснить, что ищет это правило.
Помимо параметров регулярных выражений, в регулярных выражениях также есть сокращения. Это символы, которые представляют, например, границу слова, любую цифру, букву, цифру или подчёркивание (допустимые символы при создании имени файла).
pcre:”//foo.php?id=[0-9]{1,10}/”;
Это правило затем будет перехватывать пакеты, содержащие текстовые шаблоны:
Регулярные выражения (pcre в Snort) — мощный инструмент для поиска сложных текстовых шаблонов. Потратив немного времени на освоение этого простого языка, вы сэкономите массу времени инженеру по безопасности или хакеру!
Следующая тема может показаться непосвященным немного непонятной, но я обещаю, что этот урок принесет вам огромную пользу как хакеру, так и системному администратору. В этом уроке мы рассмотрим то, что обычно называют регулярными выражениями, или просто регэксп.
Работа с текстом в 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
nly;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 раза подряд).
- | – Соответствует символу или группе до ИЛИ после |.
Помимо параметров регулярных выражений, в регулярных выражениях также есть сокращения. Это символы, которые представляют, например, границу слова, любую цифру, букву, цифру или подчёркивание (допустимые символы при создании имени файла).
Шаг 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 раз.
- / – Завершите выражение, которое мы ищем.
Это правило затем будет перехватывать пакеты, содержащие текстовые шаблоны:
- 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) — мощный инструмент для поиска сложных текстовых шаблонов. Потратив немного времени на освоение этого простого языка, вы сэкономите массу времени инженеру по безопасности или хакеру!