ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 130
Скачиваний: 10
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования «Новосибирский государственный технический университет»Кафедра защиты информацииРасчетно-графическое задание«Освоение принципов разработки программных средств безопасности операционных систем и приложений»Факультет: АВТГруппа: АБ-124Студент: Дескат М. В.Преподаватель: Зырянов С. А.Вариант: 5Новосибирск 2023Цель работы: изучить процесс выполнения кода программы на языке С в операционной системе DebianLinux и способы выявления уязвимостей.Задание:
Рисунок 1.2. – Добавление пользователя и добавление его в группу sudo.Вид окна терминала и строки приглашения после перезапуска системы представлен на рисунке 1.3.Рисунок 1.3. – Вид окна терминала и строки приглашения.Определение списка источников для менеджера пакетов APT представлена на рисунке 1.4.Рисунок 1.4. – Определение списка источников для менеджера пакетов APT.Проверка и установка обновлений update, upgrade представлены на рисунке 1.5.Рисунок 1.5. – Проверка и установка обновлений.Проверка установки компилятора GCC представлена на рисунке 1.6.Рисунок 1.6. – Проверка установки компилятора GCC.Установка отладчика представлена на рисунке 1.7.Рисунок 1.7 – Установка отладчика.Установка графического интерфейса отладчика KDbg представлена на рисунке 1.8.Рисунок 1.8. – Установка графического интерфейса отладчика KDbg.
Wextra». Флаг «-o» предоставляет возможность записи выходных данных сборки в выходной файл. Результат выполнения программы представлен на рисунке 2.3. Параметр «PWD» отображает текущую директорию в терминале. Параметр «USERNAME» отображает текущее имя пользователя. Параметр «HOME» отображает домашнюю директорию. Параметр «LOGNAME» указывает на имя пользователя, запустившего компиляцию, пользователя. Рисунок 2.3. – Результат выполнения программы.Перенаправление результата выполнения программы в файл представлено на рисунке 2.4.Рисунок 2.4 – Перенаправление результата выполнения программы в файл.Просмотр последовательности выполнения кода программы с использованием консольного отладчика представлен на рисунке 2.5.Рисунок 2.5 – Просмотр последовательности выполнения кода программы с помощью консольного отладчика.Результат выполнения дизассемблирования представлен на рисунке 2.6.Рисунок 2.6. – Результат выполнения дизассемблирования.Выполнение программы с использованием приложения KDbg представлено на рисунках 2.7 (1 шаг), 2.8 (2 шаг).Рисунок 2.7. – Выполнение программы с помощью KDbg (1 шаг).На первом шаге можно увидеть, что значение переменной «i» равняется нулю, а значение переменной «args» равняется одному. Также нам известен номер ID текущего потока выполнения программы (process 6) и его расположение. В рамке «регистры» отображается название регистров и их значения. По середине можно узнать адрес в памяти конкретной переменной.Рисунок 2.8. – Выполнение программы с помощью KGdb (шаг два).На втором шаге можно увидеть, что значение переменных, номер
ID текущего потока и адрес памяти переменных остался тем же. Но значение регистров «rax» и «rdx» было изменено.
KDbg отличаются. Местонахождение функций «main» и «afunc» имеет другой адрес памяти. Также отличаются адреса последовательных экземпляров локальной переменной «stack_var», расположение памяти выделенной с помощью «alloca», местоположение переменных данных BBC и память, выделенная через «sbrk». Значения регистров и флагов в разных методах запуска, содержат разные значения. Существует регистр-указатель команд EIP/IP, имеющий разрядность 32/16 бит и содержащий смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. На рисунке 3.5 представлено выполнение строки кода «p = (char *) alloca(32)», где функция «alloca» выделяет 32 байт памяти в стеке.Рисунок 3.5. – Выполнение строки кода программы.
Федеральное государственное бюджетное образовательное учреждение высшего образования «Новосибирский государственный технический университет»Кафедра защиты информацииРасчетно-графическое задание«Освоение принципов разработки программных средств безопасности операционных систем и приложений»Факультет: АВТГруппа: АБ-124Студент: Дескат М. В.Преподаватель: Зырянов С. А.Вариант: 5Новосибирск 2023Цель работы: изучить процесс выполнения кода программы на языке С в операционной системе DebianLinux и способы выявления уязвимостей.Задание:
-
Настройка системы, установка и тестирование программного обеспечения. -
Переменные окружения. -
Исследование адресного пространства Linux/Unix. -
Использование уязвимостей: стек. -
Программа с переполнением буфера. -
Использование уязвимостей: куча.-
Простое переполнение кучи. -
Переполнение в сегменте bcc.
-
-
Настройка системы, установка и тестирование программного обеспечения.
Рисунок 1.2. – Добавление пользователя и добавление его в группу sudo.Вид окна терминала и строки приглашения после перезапуска системы представлен на рисунке 1.3.Рисунок 1.3. – Вид окна терминала и строки приглашения.Определение списка источников для менеджера пакетов APT представлена на рисунке 1.4.Рисунок 1.4. – Определение списка источников для менеджера пакетов APT.Проверка и установка обновлений update, upgrade представлены на рисунке 1.5.Рисунок 1.5. – Проверка и установка обновлений.Проверка установки компилятора GCC представлена на рисунке 1.6.Рисунок 1.6. – Проверка установки компилятора GCC.Установка отладчика представлена на рисунке 1.7.Рисунок 1.7 – Установка отладчика.Установка графического интерфейса отладчика KDbg представлена на рисунке 1.8.Рисунок 1.8. – Установка графического интерфейса отладчика KDbg.
-
Переменные окружения.
Wextra». Флаг «-o» предоставляет возможность записи выходных данных сборки в выходной файл. Результат выполнения программы представлен на рисунке 2.3. Параметр «PWD» отображает текущую директорию в терминале. Параметр «USERNAME» отображает текущее имя пользователя. Параметр «HOME» отображает домашнюю директорию. Параметр «LOGNAME» указывает на имя пользователя, запустившего компиляцию, пользователя. Рисунок 2.3. – Результат выполнения программы.Перенаправление результата выполнения программы в файл представлено на рисунке 2.4.Рисунок 2.4 – Перенаправление результата выполнения программы в файл.Просмотр последовательности выполнения кода программы с использованием консольного отладчика представлен на рисунке 2.5.Рисунок 2.5 – Просмотр последовательности выполнения кода программы с помощью консольного отладчика.Результат выполнения дизассемблирования представлен на рисунке 2.6.Рисунок 2.6. – Результат выполнения дизассемблирования.Выполнение программы с использованием приложения KDbg представлено на рисунках 2.7 (1 шаг), 2.8 (2 шаг).Рисунок 2.7. – Выполнение программы с помощью KDbg (1 шаг).На первом шаге можно увидеть, что значение переменной «i» равняется нулю, а значение переменной «args» равняется одному. Также нам известен номер ID текущего потока выполнения программы (process 6) и его расположение. В рамке «регистры» отображается название регистров и их значения. По середине можно узнать адрес в памяти конкретной переменной.Рисунок 2.8. – Выполнение программы с помощью KGdb (шаг два).На втором шаге можно увидеть, что значение переменных, номер
ID текущего потока и адрес памяти переменных остался тем же. Но значение регистров «rax» и «rdx» было изменено.
-
Исследование адресного пространства Linux/Unix.
KDbg отличаются. Местонахождение функций «main» и «afunc» имеет другой адрес памяти. Также отличаются адреса последовательных экземпляров локальной переменной «stack_var», расположение памяти выделенной с помощью «alloca», местоположение переменных данных BBC и память, выделенная через «sbrk». Значения регистров и флагов в разных методах запуска, содержат разные значения. Существует регистр-указатель команд EIP/IP, имеющий разрядность 32/16 бит и содержащий смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. На рисунке 3.5 представлено выполнение строки кода «p = (char *) alloca(32)», где функция «alloca» выделяет 32 байт памяти в стеке.Рисунок 3.5. – Выполнение строки кода программы.
-
Использование уязвимостей: стек.
-
Программа с переполнением буфера.