Теория и практика защиты программ

Зачем и от кого нужно защищать программное обеспечение компьютерных систем


Безопасность программного обеспечения

в широком смысле является свойством данного программного обеспечения функционировать без проявления различных негативных последствий для конкретной компьютерной системы. Под уровнем безопасности программного обеспечения (ПО) понимается вероятность того, что при заданных условиях в процессе его эксплуатации будет получен функционально пригодный результат. Причины, приводящие к функционально непригодному результату, могут быть разными: сбои компьютерных систем, ошибки программистов и операторов, дефекты в программах. При этом дефекты принято рассматривать двух типов: преднамеренные и непреднамеренные. Первые являются, как правило, результатом злоумышленных действий, вторые - ошибочных действий человека.

При исследовании проблем защиты ПО от преднамеренных дефектов неизбежна постановка следующих вопросов:

·

кто потенциально может осуществить практическое внедрение программных дефектов деструктивного воздействия в исполняемый программный код?

·     каковы возможные мотивы действий субъекта, осуществляющего разработку таких дефектов?

·     как можно идентифицировать наличие программного дефекта?

·     как можно отличить преднамеренный программный дефект от программной ошибки?

·     каковы наиболее вероятные последствия активизации деструктивных программных средств при эксплуатации компьютерных систем?

При ответе на первый вопрос следует отметить, что это - непосредственные разработчики алгоритмов и программ для компьютерных систем. Они хорошо знакомы с технологией разработки программных средств, имеют опыт разработки алгоритмов и программ для конкретных прикладных систем, знают тонкости существующей технологии отработки и испытаний программных компонентов и представляют особенности эксплуатации и целевого применения разрабатываемой компьютерной системы (КС). Кроме того, при эксплуатации программных комплексов возможен следующий примерный алгоритм внесения программного дефекта: дизассемблирование исполняемого программного кода, получение исходного текста, привнесение в него деструктивной программы, повторная компиляция, корректировка идентификационных признаков программы (в связи с необходимостью получения программы «схожей» с оригиналом).

Безопасность программного обеспечения

в широком смысле является свойством данного программного обеспечения функционировать без проявления различных негативных последствий для конкретной компьютерной системы. Под уровнем безопасности программного обеспечения (ПО) понимается вероятность того, что при заданных условиях в процессе его эксплуатации будет получен функционально пригодный результат. Причины, приводящие к функционально непригодному результату, могут быть разными: сбои компьютерных систем, ошибки программистов и операторов, дефекты в программах. При этом дефекты принято рассматривать двух типов: преднамеренные и непреднамеренные. Первые являются, как правило, результатом злоумышленных действий, вторые - ошибочных действий человека.



При исследовании проблем защиты ПО от преднамеренных дефектов неизбежна постановка следующих вопросов:

·

кто потенциально может осуществить практическое внедрение программных дефектов деструктивного воздействия в исполняемый программный код?

·     каковы возможные мотивы действий субъекта, осуществляющего разработку таких дефектов?

·     как можно идентифицировать наличие программного дефекта?

·     как можно отличить преднамеренный программный дефект от программной ошибки?

·     каковы наиболее вероятные последствия активизации деструктивных программных средств при эксплуатации компьютерных систем?

При ответе на первый вопрос следует отметить, что это - непосредственные разработчики алгоритмов и программ для компьютерных систем. Они хорошо знакомы с технологией разработки программных средств, имеют опыт разработки алгоритмов и программ для конкретных прикладных систем, знают тонкости существующей технологии отработки и испытаний программных компонентов и представляют особенности эксплуатации и целевого применения разрабатываемой компьютерной системы (КС). Кроме того, при эксплуатации программных комплексов возможен следующий примерный алгоритм внесения программного дефекта: дизассемблирование исполняемого программного кода, получение исходного текста, привнесение в него деструктивной программы, повторная компиляция, корректировка идентификационных признаков программы (в связи с необходимостью получения программы «схожей» с оригиналом).


Таким образом, манипуляции подобного рода могут сделать посторонние высококлассные программисты, имеющие опыт разработки и отладки программ на ассемблерном уровне.

В качестве предположений при ответе на второй вопрос следует отметить, что алгоритмические и программные закладки могут быть реализованы в составе программного компонента вследствие следующих факторов:

·     в результате инициативных злоумышленных действий непосредственных разработчиков алгоритмов и программ;

·     в результате штатной деятельности специальных служб и организаций, а также отдельных злоумышленников;

·     в результате применения инструментальных средств проектирования ПО, несущих вредоносное свойство автоматической генерации деструктивных программных средств.

Для описания мотивов злоумышленных действий при разработке программных компонентов необходим психологический «портрет» злоумышленника, что требует проведения специальных исследований психологов и криминологов в области психологии программирования (психологии криминального программирования, см. главу 15). Однако некоторые мотивы очевидны уже сейчас и могут диктоваться следующим:

·     неустойчивым психологическим состоянием алгоритмистов и программистов, обусловленным сложностью взаимоотношений в коллективе, перспективой потерять работу, резким снижением уровня благосостояния, отсутствием уверенности в завтрашнем дне и т.п., в результате чего может возникнуть, а впоследствии быть реализована, мысль отмщения;

·     неудовлетворенностью личных амбиций непосредственного разработчика алгоритма или программы, считающего себя непризнанным талантом, в результате чего может появиться стремление доказать и показать кому-либо (в том числе и самому себе) таким способом свои высокие интеллектуальные возможности;

·     перспективой выезда за границу на постоянное место жительства (перспективной перехода в другую организацию, например, конкурирующую) с надеждой получить вознаграждение за сведения о программной закладке и механизме ее активизации, а также возможностью таким способом заблокировать применение определенного класса программных средств по избранному месту жительства (месту работы);



·     потенциальной возможностью получить вознаграждение за устранение возникшего при испытаниях или эксплуатации системы «программного отказа» и т.п.

Кроме того, необходимо иметь в виду, что в конструировании вредоносной программы, так или иначе, присутствует притягательное творческое начало, которое само по себе может стать целью. При этом сам «творец» может слабо представлять все возможные результаты и последствия применения своей «конструкции», либо вообще не задумываться о них.

Таким образом, правомерно утверждать, что вредоносные программы, в отличие от широко применяемых электронных закладок, являются более изощренными объектами, обладающими большей скрытностью и эффективностью применения.

Ответы на три последних вопроса можно найти в рамках быстро развивающейся методологии обеспечения безопасности программных средств и оценки уровня их защищенности (разделы 2-14).

До сих пор мы рассматривали защиту программного обеспечения от разрушающих программных средств. Однако применение злоумышленником только этих деструктивных средств, не исчерпывает всего круга проблем, связанных с проблематикой обеспечения безопасности программ. Существует широкий спектр угроз, отнесенных к несанкционированному копированию, незаконному получению, распространению и использованию программных продуктов.

«Программное пиратство» является, в связи с большими вероятными потерями, одной из основных проблем для фирм-разработчиков, так или иначе, связанных с созданием и реализацией программного обеспечения. Программные пираты покупают или «берут на прокат» необходимое программное обеспечение и, если в нем нет соответствующей защиты, они могут скопировать программы и использовать их без соответствующей оплаты (регистрации, подтверждения лицензионных соглашений, авторских прав и т.п.) по своему усмотрению. Таким образом, вопрос защиты ПО от несанкционированного копирования, распространения и использования является одним из наиболее важных в компьютерной практике. Все известные методы защиты ПО от несанкционированного копирования и распространения относятся к организационно-правовым и инженерно-техническим методам.


При решении указанных задач защиты сегодня практически полностью отсутствуют теоретические основания. В частности, нет четкого определения собственно проблемы и определения того, что собственно должно являться ее удовлетворительным решением.

Задача защиты программ от несанкционированного копирования, на наш взгляд, заключается в обеспечении невозможности нахождения никакого эффективного метода создания выполнимых копий программ, в то время как задача защиты программ от несанкционированного распространения состоит в обеспечении того факта, что только производитель ПО смог бы доказать в суде, что именно он разработал это ПО.

При ответе на вопрос о несанкционированном копировании программ необходимо ответить на следующие вопросы:

·     что может сделать злоумышленник («пират») в ходе попыток изучения программы?

·     что является существенными знаниями о программе?

·     что является спецификацией программы?

Для того чтобы ответить на вышеупомянутые вопросы необходимо рассматривать наиболее злонамеренное поведение злоумышленника. То есть необходимо рассматривать сценарий наихудшего случая, когда предполагается, что злоумышленник может выполнять преобразованную программу на произвольных данных по своему усмотрению и может модифицировать данные, циркулирующие в вычислительной системе, произвольным образом.

Таким образом, исходя из общего понимания проблемы необходимости защиты программ современных компьютерных систем, от целого набора злоумышленных действий, можно перейти к совокупному определению источников угроз безопасности программного обеспечения и обобщенных сценариев действий потенциального злоумышленника, к подробному описанию и определению общего характера защитных действий.



Таким образом, манипуляции подобного рода могут сделать посторонние высококлассные программисты, имеющие опыт разработки и отладки программ на ассемблерном уровне.

В качестве предположений при ответе на второй вопрос следует отметить, что алгоритмические и программные закладки могут быть реализованы в составе программного компонента вследствие следующих факторов:

·     в результате инициативных злоумышленных действий непосредственных разработчиков алгоритмов и программ;

·     в результате штатной деятельности специальных служб и организаций, а также отдельных злоумышленников;

·     в результате применения инструментальных средств проектирования ПО, несущих вредоносное свойство автоматической генерации деструктивных программных средств.

Для описания мотивов злоумышленных действий при разработке программных компонентов необходим психологический «портрет» злоумышленника, что требует проведения специальных исследований психологов и криминологов в области психологии программирования (психологии криминального программирования, см. главу 15). Однако некоторые мотивы очевидны уже сейчас и могут диктоваться следующим:

·     неустойчивым психологическим состоянием алгоритмистов и программистов, обусловленным сложностью взаимоотношений в коллективе, перспективой потерять работу, резким снижением уровня благосостояния, отсутствием уверенности в завтрашнем дне и т.п., в результате чего может возникнуть, а впоследствии быть реализована, мысль отмщения;

·     неудовлетворенностью личных амбиций непосредственного разработчика алгоритма или программы, считающего себя непризнанным талантом, в результате чего может появиться стремление доказать и показать кому-либо (в том числе и самому себе) таким способом свои высокие интеллектуальные возможности;

·     перспективой выезда за границу на постоянное место жительства (перспективной перехода в другую организацию, например, конкурирующую) с надеждой получить вознаграждение за сведения о программной закладке и механизме ее активизации, а также возможностью таким способом заблокировать применение определенного класса программных средств по избранному месту жительства (месту работы);



·     потенциальной возможностью получить вознаграждение за устранение возникшего при испытаниях или эксплуатации системы «программного отказа» и т.п.

Кроме того, необходимо иметь в виду, что в конструировании вредоносной программы, так или иначе, присутствует притягательное творческое начало, которое само по себе может стать целью. При этом сам «творец» может слабо представлять все возможные результаты и последствия применения своей «конструкции», либо вообще не задумываться о них.

Таким образом, правомерно утверждать, что вредоносные программы, в отличие от широко применяемых электронных закладок, являются более изощренными объектами, обладающими большей скрытностью и эффективностью применения.

Ответы на три последних вопроса можно найти в рамках быстро развивающейся методологии обеспечения безопасности программных средств и оценки уровня их защищенности (разделы 2-14).

До сих пор мы рассматривали защиту программного обеспечения от разрушающих программных средств. Однако применение злоумышленником только этих деструктивных средств, не исчерпывает всего круга проблем, связанных с проблематикой обеспечения безопасности программ. Существует широкий спектр угроз, отнесенных к несанкционированному копированию, незаконному получению, распространению и использованию программных продуктов.

«Программное пиратство» является, в связи с большими вероятными потерями, одной из основных проблем для фирм-разработчиков, так или иначе, связанных с созданием и реализацией программного обеспечения. Программные пираты покупают или «берут на прокат» необходимое программное обеспечение и, если в нем нет соответствующей защиты, они могут скопировать программы и использовать их без соответствующей оплаты (регистрации, подтверждения лицензионных соглашений, авторских прав и т.п.) по своему усмотрению. Таким образом, вопрос защиты ПО от несанкционированного копирования, распространения и использования является одним из наиболее важных в компьютерной практике. Все известные методы защиты ПО от несанкционированного копирования и распространения относятся к организационно-правовым и инженерно-техническим методам.


При решении указанных задач защиты сегодня практически полностью отсутствуют теоретические основания. В частности, нет четкого определения собственно проблемы и определения того, что собственно должно являться ее удовлетворительным решением.

Задача защиты программ от несанкционированного копирования, на наш взгляд, заключается в обеспечении невозможности нахождения никакого эффективного метода создания выполнимых копий программ, в то время как задача защиты программ от несанкционированного распространения состоит в обеспечении того факта, что только производитель ПО смог бы доказать в суде, что именно он разработал это ПО.

При ответе на вопрос о несанкционированном копировании программ необходимо ответить на следующие вопросы:

·     что может сделать злоумышленник («пират») в ходе попыток изучения программы?

·     что является существенными знаниями о программе?

·     что является спецификацией программы?

Для того чтобы ответить на вышеупомянутые вопросы необходимо рассматривать наиболее злонамеренное поведение злоумышленника. То есть необходимо рассматривать сценарий наихудшего случая, когда предполагается, что злоумышленник может выполнять преобразованную программу на произвольных данных по своему усмотрению и может модифицировать данные, циркулирующие в вычислительной системе, произвольным образом.

Таким образом, исходя из общего понимания проблемы необходимости защиты программ современных компьютерных систем, от целого набора злоумышленных действий, можно перейти к совокупному определению источников угроз безопасности программного обеспечения и обобщенных сценариев действий потенциального злоумышленника, к подробному описанию и определению общего характера защитных действий.


Содержание раздела