Сегодня в этом руководстве мы поговорим о статическом тестировании безопасности приложений (SAST), его методологии, типах, методах, инструментах и т.д.
В этой статье мы дадим вам краткий обзор SAST, а затем покажем, как мы можем найти уязвимости в исходном коде любого веб-приложения на базе языка PHP с помощью утилиты kali linux под названием “grep”.
- Что такое анализ исходного кода или аудит исходного кода?
- Что такое тестирование “черного ящика” и “белого ящика”?
- Установка веб-приложения с уязвимостью bWAAP
- Что такое утилита Grep?
- grep Базовые команды:
- Найти системный вызов EXEC()
- Цветной вывод
- Поиск функции Exec() в определенных файлах
- Поиск чувствительных учетных данных
- Использование утилиты “grep” с командой “cat”
- Мониторинг функции запроса MySQLi
- Найдем функции eval()
- Идентификация пользовательского ввода
- Поиск небезопасных транспортных протоколов
- Подсчет количества совпадений
- Вывод только номера строки
- Имена файлов, соответствующих шаблону
- Что такое egrep?
- Поиск функций оболочки с помощью инструмента egrep
- Поиск XSS-уязвимости в коде PHP
- Определим доступ к системе
- Найдем криптографические операции
- Установка инструмента CRASS
Что такое анализ исходного кода или аудит исходного кода?
Согласно OWASP: Анализ или аудит исходного кода, также известный как инструменты статического тестирования безопасности приложений (SAST), может помочь проанализировать исходный код или скомпилированные версии кода, чтобы помочь найти недостатки безопасности.
SAST очень важен как для организации, так и для нас, поскольку он помогает анализировать исходный код для обнаружения уязвимостей безопасности, которые делают приложения нашей организации восприимчивыми к атакам, поэтому мы должны знать обо всем этом с точки зрения потенциала безопасности.
Давайте покажем вам небольшую разницу между SAST и DAST:
🐛 SAST или DAST: Что лучше использовать для тестирования безопасности приложений
Что такое тестирование “черного ящика” и “белого ящика”?
Методы SAST и DAST также известны как тестирование “белого ящика” и тестирование “черного ящика”.
Тестирование “черного ящика” относится к любому типу тестирования программного обеспечения, которое исследует приложение без знания внутреннего дизайна, структуры или реализации программного проекта.
Тестирование “белого ящика” – это тип тестирования, при котором тестировщик может видеть код.
Перейдем к части установки уязвимого приложения
Установка веб-приложения с уязвимостью bWAAP
bWAPP, или buggy web application – это бесплатное заведомо небезопасное веб-приложение с открытым исходным кодом.
bWAPP – это PHP-приложение, использующее базу данных MySQL.
Оно может быть размещено на Linux/Windows с Apache/IIS и MySQL
Настроить это уязвимое приложение в любой операционной системе довольно просто, для этого достаточно скачать приложение по ссылке, приведенной ниже, разархивировать его и переместить все файлы в каталог apache и все.
https://sourceforge.net/projects/bwapp/ unzip -d /var/www/html/bwaap/ bWAAP_latest.zip
Теперь вы можете проверить, все ли файлы распакованы или нет, перейдя в каталог apache с помощью следующей команды.
cd /var/www/html/bWAPP/ ls -l
Что такое утилита Grep?
Grep – это утилита командной строки для поиска в наборах данных обычного текста, соответствующих регулярному выражению.
Ее название происходит от команды ed g/re/p (globally search for a regular expression and print matching lines), которая имеет тот же эффект.
Мы думаем, что вам следует знать о некоторых основных командах утилиты grep, прежде чем переходить к рассмотрению исходного кода, поэтому ниже мы привели несколько основных команд, которые облегчат вам использование утилиты grep во время аудита SAST.
🐧 Основные примеры использования команды Grep в системах Linux
grep Базовые команды:
- grep boo /etc/passwd: базовая команда для поиска слова в файле.
- grep ‘word’ filename : используется для поиска определенного слова в файле.
- grep -c ‘root’ frontpage.txt: подсчет слов, присутствующих в файле.
- grep -n “root” /etc/passwd: номер строки во входном файле.
- grep -i ‘bar’ file1: найти без учета регистра ex : bar,Bar,BAR,
- grep -r “192.168.1.5” /etc/ : экурсивно, т.е. прочитать все файлы в каждом каталоге.
- grep -R ‘passwd’ /etc/: найти слово в файле или каталоге или его подкаталоге.
- grep -color ‘root’ /etc/passwd: распечатать вывод цветом
Теперь мы начнем аудит исходного кода с помощью команды Grep.
Найти системный вызов EXEC()
Сначала мы рассмотрим базовый пример, как показано на рисунке ниже.
Системный вызов “exec” используется для выполнения файла, находящегося в активном процессе, а “-ir” используется для поиска системного вызова “exec” во всех php файлах веб-проекта.
Поэтому мы воспользуемся следующей командой, которая извлечет все системные вызовы “exec(” из php файлов и выведет их в терминал.
Почему мы это сделали?
Потому что есть много разработчиков, которые не санируют пользовательский ввод и напрямую используют этот ввод, что может позволить злоумышленнику совершить такие RCE атаки.
Использование grep <синтаксис> <строка, которую нужно найти> <путь к файлу webapp>
grep -ir "exec(" /var/www/html/bWAPP/
Цветной вывод
Существует простой метод цветного вывода на терминале с помощью данной команды.
Используя шаблон “-color” в команде, мы можем выделить наш вывод.
grep -ir --color "exec(" /var/www/html/bWAPP/
Поиск функции Exec() в определенных файлах
Чтобы найти функцию системного вызова “exec(” в определенных файлах расширения, таких как .php, .xml, .txt и т.д., мы можем использовать шаблон include утилиты grep.
Как показано на рисунке ниже, в каких файлах php используется функция “exec(“.
grep -ir --color "exec(" /var/www/html/bWAAP/ --include=*.php
Поиск чувствительных учетных данных
Иногда разработчики забывают удалить учетные данные из исходного кода веб-приложения, что делает веб-приложение уязвимым.
Мы можем попытаться найти конфиденциальные учетные данные, имеющиеся в файлах исходного кода, с помощью команды, приведенной ниже.
Следующая команда будет искать строку пароля в файлах с расширением “.xml” и выведет ее на терминал, если что-то найдет.
grep -ir --color "password" /var/www/html/bWAPP --include=*.xml
Аналогичным образом мы можем попытаться найти и другие важные учетные данные, такие как логин, пользователи, пароль, api ключи и т.д.
Использование утилиты “grep” с командой “cat”
Cat – это еще один инструмент, предустановленный в kali linux для редактирования или создания файлов.
cat просто отправляет содержимое файла на стандартный вывод, который отображается на стандартном вводе grep, поскольку оболочка соединила их | (pipe).
Как вы можете видеть ниже, с помощью этих двух комбинаций мы можем вывести точный вывод на терминал.
Мониторинг функции запроса MySQLi
Функция query() / mysqli_query() выполняет запрос к базе данных.
Если мы хотим проанализировать процесс выполнения sql-запросов, то нам необходимо выяснить все функции “query(.” с помощью приведенной ниже команды.
grep -ir --color "query(." /var/www/html/bWAPP/ --include=*.php
Найдем функции eval()
Функция eval() оценивает строку как PHP-код.
Обычно эта функция полезна для хранения PHP-кода в базе данных, но из-за отсутствия надлежащей санации она может дать злоумышленникам разрешение на удаленное выполнение кода.
Идентификация пользовательского ввода
В PHP пользовательский ввод в основном обрабатывается с помощью $_GET, $_POST, $_COOKIE или $_REQUEST.
Однако пользовательский ввод также может обрабатываться с помощью $_FILES, $_SERVER и других.
Команда, которую мы будем использовать для поиска вводимых пользователем данных в параметре “$_GET”.
grep -ir --color "\$_GET" /var/www/html/bWAPP/
Поиск небезопасных транспортных протоколов
Мы используем следующую команду для поиска всех небезопасных или безопасных протоколов, таких как ftp, http, tcp, https, file и т.д.
Исследуя эти протоколы, мы можем определить, где в веб-приложении есть реальные недостатки.
grep -ir --color "http://" /var/www/html/bWAPP/ grep -ir --color "ftp://" /var/www/html/bWAPP/ grep -ir --color "file://" /var/www/html/bWAPP/
Подсчет количества совпадений
Мы можем найти количество строк, соответствующих заданной строке/шаблону.
grep -ir -c --color "exec(" /var/www/html/bwaap/
Вывод только номера строки
Чтобы показать номер строки файла с сопоставленной строкой.
grep -ir -n --color "exec(" /var/www/html/bWAPP/
Имена файлов, соответствующих шаблону
Мы можем просто отобразить файлы, которые содержат заданную строку/шаблон.\
Перейдем к другой утилите kali linux “egrep”.
Что такое egrep?
egrep – это аббревиатура от “Extended Global Regular Expressions Print”.
Это программа, которая сканирует заданный файл строка за строкой, возвращая строки, содержащие шаблон, соответствующий заданному регулярному выражению.
Разница между grep и egrep заключается в том, что grep – это команда, которая позволяет искать содержимое в соответствии с заданным регулярным выражением и отображать совпадающие строки, а egrep – это вариант grep, который позволяет искать содержимое, применяя расширенные регулярные выражения для отображения обрабатывающих строк.
Поиск функций оболочки с помощью инструмента egrep
Эта команда выполняет поиск уязвимых функций оболочки во всех файлах PHP в каталоге.
egrep -r --color --include "*.php" -e "(eval|assert|preg_replace)\(" .
Поиск XSS-уязвимости в коде PHP
Может быть полезен для поиска XSS-уязвимостей в PHP-коде.
Определим доступ к системе
Эта команда вернет все файлы PHP в каталоге на предмет доступа к файловой системе.
egrep -r --color --include "*.php" -e "(fopen|fread|fwrite|fclose)\(" .
Найдем криптографические операции
Эта команда возвращает случаи, когда выполняются криптографические операции.
Найти закодированные имена пользователей и пароли
Эта команда поможет нам найти закодированные имена пользователей и пароли.
CRASS – анализатор исходного кода
Code review audit script scanner” (CRASS).
Сейчас он ищет строки, которые интересны аналитикам.
Главное – простота: вам не нужно ничего, кроме пары стандартных инструментов командной строки *nix (особенно grep).
Установка инструмента CRASS
Итак, ребята, все, что нам нужно сделать, это сначала скачать весь инструмент с github с помощью команды git clone, перейти в каталог этого инструмента, а затем загрузить его с помощью команды bash.
После этого для анализа исходного кода любого веб-приложения на базе PHP нужно указать путь к исходному коду и все.
Программа автоматически найдет все уязвимости и сохранит их в директории “grep-output”.
git clone https://github.com/floyd-fuh/crass cd crass bash grep-it.sh
Graudit
Graudit – это простой набор скриптов и сигнатур, позволяющий находить потенциальные недостатки безопасности в исходном коде с помощью утилиты GNU grep.
Он сравним с другими приложениями статического анализа, такими как RATS, SWAAT и flaw-finder, при этом технические требования сведены к минимуму и он очень гибкий.
Прежде всего, вам необходимо установить этот инструмент на свою машину, что можно сделать с помощью следующих команд.
Инструмент написан на bash, поэтому мы можем работать с ним с помощью утилиты bash в kali linux.
git clone https://github.com/wireghoul/graudit cd graudit ls -l bash graudit -h
Пришло время воспользоваться этим инструментом.
Давайте укажем путь к исходному коду проекта и посмотрим, какие результаты мы получим, используя этот инструмент.
Как вы можете видеть, он выявил различные уязвимости одновременно.
Но лучше всего использовать специализированные сканнеры под конкретный язык/стек:
✗ 11 лучших сканеров безопасности PHP для поиска уязвимостей ✗