Содержание:
С возвращением, мои хакеры!
Эта тема может показаться немного запутанной, но мы вам обещаем, что эта статья принесет вам пользу не только как хакеру, но и как системному администратору. Мы рассмотрим то, что обычно называют регулярными выражениями, или если кратко regexp — регулярка.
Помните, что почти все в Linux — это файл, и большинство этих файлов является простыми текстовыми файлами. В отличие от Windows, где для настройки приложений или серверов используются консоли управления snap-in и MMC, в Linux используются для конфигурации обычные текстовые файлы. Изменяя файл, вы меняете конфигурацию. В результате пионеры Linux разработали довольно продуманные и элегантные способы манипулирования текстом.
Чуть раньше мы рассмотрели несколько простых способов манипулирования текстом, например grep и sed, но при помощи регулярных выражений у нас появится возможность находить текст по более сложным шаблонам.
Например, среди миллиона строк кода нам нужно найти строку, которая начинается с буквы «s», содержит только буквы «sugr», числа 1-5 и оканчивается на «bb». Можем ли мы найти ее, не просматривая эти миллионы строк? Да — с помощью регулярного выражения!
Регулярные выражения используются в мире информационных технологий везде. Впервые разработанные в 1956 году и примененные Кеном Томпсоном (Ken Thompson) в оригинальной Unix, сейчас они по-своему применяются в Java, Ruby, PHP, Perl, Python, MySQL, Apache, .NET и, конечно же, в Linux.
Без понимания регулярных выражений ваша способность писать код на любом из этих языков будет хромать, и вы не будете уметь делать больше, чем простой и утомительный поиск и замена. Кроме того, многие правила, записанные в Snort и других системах обнаружения вторжений, написаны в регулярных выражениях. При поиске какого-либо вредоносного кода важна способность искать и находить сложные и запутанные текстовые шаблоны.
В этой статье мы будем использовать примеры из правил Snort для того, чтобы осветить, как именно регулярные выражения работают в области хакинга и информационной безопасности.
Snort является одним из многих приложений и скриптовых языков, которые используют регулярные выражения. Благодаря своей способности обнаруживать практически любой тип атаки, Snort без возможности использования регулярных выражений станет буквально неработающим продуктом. Давайте рассмотрим новое правило, которое появилось всего несколько недель назад для обнаружения атаки Ransomware, следы которой были обнаружены во всем мире.
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:»MALWARE-CNC Win.Ransomware.PRISM outbound connection attempt — Get lock screen»; flow:to_server,established; 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 red, policy balanced-ips drop, policy security-ips drop, ruleset community, service http; reference:url,http://www.virustotal.com/en/file/417cb84f48d20120b92530c489e9c3ee9a9deab53fddc0dc153f1034d3c52c58/analysis/1377785686/; classtype:trojan-activity; sid:1000033; rev:3;)
Обратите внимание на раздел, который выделен жирным шрифтом. Это часть правила, которая использует pcre для обнаружения Ransomware.
Мы вернемся к этому правилу в следующей статье, а сейчас давайте пока посмотрим на простое правило Snort, использующее регулярное выражение. Если вы пока не знакомы с правилами Snort, то обязательно ознакомьтесь с нашей предыдущей статьей по чтению и написанию правил для Snort.
Для нашего примера используем следующее псевдоправило:
alert tcp any any -> any 80 ( pcre:»/\/foo.php?id=[0-9]{1,10}/»;)
Первая часть этого правила должна быть нам знакома. Она говорит: «Отправить предупреждение (alert), когда к нам попадает пакет через проводное соединение, используя tcp-протокол с любого IP-адреса, с любого порта, на любой IP-адрес на 80-й порт». Это то, что идет сразу после заголовка этого правила, которое является для нас пока новым и странным.
Теперь наша задача — выяснить, что же ищет это правило.
Прежде чем мы попытаемся расшифровать, что же собственно ищет это правило, давайте рассмотрим основной синтаксис регулярных выражений и их правила.
Обобщим некоторые из основных правил регулярных выражений. Попробуем разбить регулярное выражение, использованное в правиле Snort выше, и попытаемся определить, что же оно ищет.
pcre:«/\/foo.php?id=[0-9]{1,10}/»;
Таким образом, мы могли бы интерпретировать это правило на человеческом языке следующим образом: «Ищите предположительно URL-адрес, который заканчивается на «foo.php?id=», а затем идет одна цифра от 0 до 9 и эта цифра может повториться от 1 до 10 раз».
Это правило будет перехватывать пакеты такого вида:
Но будут проходить вот такие пакеты:
На этом мы завершаем наше введение в регулярные выражения, но мы скоро вернемся к этой теме и углубимся в этот мощный, но загадочный язык для того, чтобы вы могли читать регулярное выражение так же свободно, как вы читаете эту страницу.
Ваш компьютер на Windows 10 перестал быть быстрым после обновления системы? Мы подскажем, как устранить…
Это приложение для iPhone основано на приглашениях и аудио. С его помощью можно всё равно…
Одним из самых значительных изменений в операционной системе iOS 14 является возможность менять приложения по…
В системе Android 10 появился фреймворк для пузырей чатов, популярность которым принёс Messenger. Новая система…
От загрузки в режим Fastboot при помощи одной команды до установки модов без рута, есть…
Бета-версия операционной системы Android 11 в настоящее время доступна для устройств Google Pixel. Нужно посетить…