Есть какие-либо материалы по поиску недекларированных (для Юты: это пишется слитно!)) возможностей в ПО?
В сети очень мало информации, толком- ничего, только введение.
Хотелось бы узнать какие существуют методы поиска и анализа ПО.
![]() |
![]() ![]() |
![]() |
Altair |
![]()
Сообщение
#1
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Есть какие-либо материалы по поиску недекларированных (для Юты: это пишется слитно!)) возможностей в ПО?
В сети очень мало информации, толком- ничего, только введение. Хотелось бы узнать какие существуют методы поиска и анализа ПО. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Malice |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Разжуй плиз поподробней что надо то, для нас, для бедных..
|
Altair |
![]()
Сообщение
#3
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Имеется программа. Код ее доступен. Будем считать, что код написан в стиле только функционального программирования.
По ГОСТу, для этой программы есть 5 документов:
Как узнать, что программа не выполняет никаких вредоносных действий? Ясно, что в описании программы может быть не указаны некоторые действия, они скрыты умышленно, и эти действия могут являться вредоносными. Вопрос в том, какие методы есть обнаружения таких недокументированных (недекларированных) возможностей в ПО? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Malice |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я так понимаю - эвристический анализ нужен на предмет принадлежности программы к троянам
![]() ![]() |
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Не годится.
Эвристический анализ основан на том, что существуют какие-либо паттерны, используемые при написании троянов, вирусов и т.п. Но у меня задача немного другая, заметь, у меня есть описание и сама система. Коротко если, то надо найти то, что не описано! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата Коротко если, то надо найти то, что не описано! ![]() Описание: "... Функция нахождения минимального элемента вектора ..." Что имеем: function compare(a, b: integer): integer; compare - не описана... Однако используется в описанной функции. Но МОЖЕТ быть расценена и как недокументированная функция... Что делаем? |
Malice |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Имхо - нельзя найти то, не зная что.. Как вариант - найти карту покрытия кода (коряво выразился, но это то, к чему код обращался и который выполнялся после тестирования кода). Весь оставшийся код (т.е. не используемый по сути, но присутствующий) - подвергнуть анализу на предмет наличия некоего умысла..
|
Lapp |
![]()
Сообщение
#8
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Поскольку вредоносное действие скорее всего нацелено на диск (хотя и не обязательно), я бы попробовал отследить в первую очередь обращения к файловой системе. Если это виндусовый код - то и к реестру. Есть набор названий файлов (или ключей), которые для данной программы являются данными - их можно сразу отсечь, что облегчит поиск.
Но только если автор проги хороший программист, то спрятать обращение можно. Например, вредоносное действие может быть запланировано на один-едиственный момент в месяце - например, в 12:34:56 каждого 14-го числа. Тестирование проги в любой другой день ничего не выявит.. Название файла, естественно, тоже не хранится в коде, а раскодируется "на лету" с применением даты и времени как ключа. Какой тут можно применить софт, сказать затрудняюсь.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Altair |
![]()
Сообщение
#9
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Нет, вредоносное действие прежде всего нацеленно на отсылку данных, их порчу возможно.
Отслеживать по результату действия - это оценка по черному ящику, мы же имеем спецификацию, имеем фактически систему - белый ящик. Поэтому абсолютно точно, мы можем выявить в системе все, что угодно Цитата compare - не описана... Однако используется в описанной функции. Нет, это легко проверяется, в описании программы эта функция должна быть поисана (иначе просто сразу на лицо несоответствие ГОСТу и программу просто бракуем) Что бы более точно приблизить к задаче приведу пример. Допустим вы - военная организация. Заказываете разработку некоторого ПО (например ОС) Вам поставляют Линукс заточенный для ваших нужд. Как вы сами понимаете, хоть вам и дали исходные коды - гарантии того, что в тысячах строк кода нет недекларированных возможностей просто нет! (а может все данные будут сливаться кому-нибудь?) Конечно возможно провести ручную верификацию, но стоимость такой проверки будет высокой. Вообще стоимость ручного поиска таких "фич" системы будет высокой. Поэтому неплохо бы автоматизировать этот процесс, то, что пока не понятно как, не значит, что это невозможно! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
SKVOZNJAK |
![]()
Сообщение
#10
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: ![]() ![]() ![]() |
У военных есть своя версия ос. Лучший способ избежать троянов, не заказывать ничего важного сторонним разработчикам
![]() |
hardcase |
![]()
Сообщение
#11
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
На сколько я знаю, современное коммерческое ПО разрабатывается таким образом, что для каждого модуля пишутся блочные тесты. А для подсистем - интегральные тесты. ЭТО - СТАНДАРТ, от этого не отходит ни один нормальный разработчик.
Т.о. чтобы выяснить - делает ли система то, что нужно, или занимается фигнёй, нам нужно прогнать тесты, запросив их у разработчика, а также написать их самим. Ибо ни одна более менее сложная система не разрабатывается в отрыве от заказчика - в диалоге с ним постоянно модифицируется спецификация софтины и т.п. За что я люблю .NET, так это зато, что в ней реализовано 2 параллельные системы доступа. Это делегирование прав юзверя, и делегирование прав кода (код-зоны). Если мы имеем подозрительный код - мы навешиваем ему жесткие атрибуты безопасности, типа запрета доступа к реестру и диску. И даже если этот код будет выполняться с правами админа, он никоем разом не сможет залезть в реестр или записать чегонить на диск. Такая вот магия.... -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Altair |
![]()
Сообщение
#12
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата На сколько я знаю, современное коммерческое ПО разрабатывается таким образом, что для каждого модуля пишутся блочные тесты. А для подсистем - интегральные тесты. ЭТО - СТАНДАРТ, от этого не отходит ни один нормальный разработчик. Эге-гей, давай не будешь ты за все ПО отвечать! АСУ в лучшем случае сопровождаются планом наката, документом по описанию доступа и руководствами администратора и пользователя... + различные документы для приемки (протокол приемо-сдаточных испытаний, общее описание системы и т.п.) а работают такие системы с вполне важными вещами, такими, как договора например, и используют такие системы вполне солидные компании (в том числе и банки)... Цитата Ибо ни одна более менее сложная система не разрабатывается в отрыве от заказчика - в диалоге с ним постоянно модифицируется спецификация софтины и т.п. Конечно, но заказчик следит за выполнением бизнес-требований а не подобных вещей... Причем в лице заказчика обычно выступает штатный аналитик компании-заказчика. а вот насчет последнего твоего заявления про .NET - это интересно... честно говоря поставлен в тупик т.к. я сторонник Java... пожалуй даже запрошу консультацию у знающих людей, поэтому постараюсь без ответа не оставить... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
hardcase |
![]()
Сообщение
#13
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
а вот насчет последнего твоего заявления про .NET - это интересно... вот ссылочка Introduction to Code Access Security -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Dark_Snake |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 32 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Как здесь уже было сказано можно использовать "карту программы".
Конечно сложность проверки зависит от размера программы но мы имеем описание функций программы то есть некий тестовый набор. Предположим у нас есть следующая программа: var Строчка которую мы должны найти наглядна. Итак, как поступить? Обычно этот сенд дата выполняется не сразу, а при каком то условии, допустим то же условие времени. Некоторая проверка будет где то в программе. Как нам выявить этот кусок. Мы начинаем проходить трассировку кода используя возможные значения или большую их часть. Так проходя значения 1,2,3,4,5 ... мы выявим строчку к которой ни разу не было обращения за время тестирования. Второй вариант. Мы опять же знаешь порты и файлы с которыми работает программа. Мы идем по коду обнаруживаем допустим строку assign(f,s); обращение к файлу идем чуть выше ищем откуда берется s, например, из поля ввода, значит все в порядке и мы пропускаем эту контрольную точку. Если находим что то вроде assign(f,'%windir%\system32\...') или же значение s в ходе отмотки назад остается не известным, или не совпадает с документированным, то следует отметить эту точку как потенциально опасную для ручной проверки. -------------------- "Все что вы создаете, вы же и разрушаете.", В поисках разума.
|
SKVOZNJAK |
![]()
Сообщение
#15
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: ![]() ![]() ![]() |
Против грамотно написанного вин трояна трассировка наврят-ли поможет. Что-то абстрактно нехорошее чувствоваться будет, но конкретно... Вот как выявить уязвимость к вредоносной информации, а что сотворят будущие патчи и обновления системы? Это опять по новому всё проверять. Только полный доступ к исходникам широкого круга лиц и компиляция приложения самим пользователем, на своём компиляторе, даёт какую-то гарантию.
|
Abit |
![]()
Сообщение
#16
|
Гость ![]() |
Если вам тупо нужно проверить программу на вредоносность - сдайте её в лабораторию касперского с их сайта - они бесплатно вам проверят всё чего она делает
|
hardcase |
![]()
Сообщение
#17
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Если вам тупо нужно проверить программу на вредоносность - сдайте её в лабораторию касперского с их сайта - они бесплатно вам проверят всё чего она делает Глупость какая.Они на наличие известных вирусов в исполняемом файле проверяют, а не производят тестовое покрытие. -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Чужак |
![]()
Сообщение
#18
|
![]() меркантильный ![]() ![]() ![]() Группа: Пользователи Сообщений: 161 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ребят, ну вы даете. Я прям не знаю....
Хоть я и не программист-профи, но если есть малейшее подозрение программы на "м@довошки", то первое, что приходит в голову-её надо изолировать. Даже не так, как предлагал hardcase-в особую среду, а просто-механически. Не ставить её на комп, где храниться важная информация. Ставить её на компьютер, НЕ подключенный к Интернету (вдруг она может его сканировать, а затем куда-то сливать информацию?), вообще не завязанный ни в какую сеть, автономный. Вот на нем-то и начинать её проверку. Это минимум компьютерной безопастности, который должен знать любой пользователь. (А уж на выключенном компьютере не один вирус не работает ![]() Сообщение отредактировано: Чужак - -------------------- Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края. В этом мире порой разбиваютсямечты Но чтобы он стал другой Вдруг в него приходишь ТЫ... После странствий и скитаний настают другие времена. Старая волна уходит и приходит новая волна. |
![]() ![]() |
![]() |
Текстовая версия | 29.03.2023 20:05 |