На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Восстановление исходного кода и структуры программы

Большинство людей взаимодействуют с компьютерными программами на очень поверхностном уровне: они вводят данные и терпеливо ожидают результатов. Хотя общедоступный интерфейс большинства программ и может быть довольно скудным, но основная часть программ обычно работает на гораздо более глубоком уровне, чем это кажется на первый взгляд. В программах достаточно много срытого содержимого, доступ к которому позволяет получить серьезные преимущества. Это содержимое может быть крайне сложным, чем обусловлена и сложность взлома про­граммного обеспечения, а значит, осуществление взлома предполагает наличие оп­ределенного уровня знаний о содержимом программы.
Можно смело сказать, что основным качеством хорошего хакера является умение раскрывать тонкости и хитрости кода атакуемого программного обеспечения. Этот процесс называют восстановлением исходного кода и структуры программы (reverse engineering). Несомненно, взломщики программного обеспечения являются высоко-квалицированными пользователями готовых программных средств. Но взлом про­граммного обеспечения не имеет ничего общего с волшебством, и нет никаких вол­шебных программ для проведения взлома. Для взлома нестандартной программы хакер должен уметь воздействовать на атакуемую программу необычными способа­ми. Таким образом, хотя при атаке практически всегда используются специальные средства (дизассемблеры, механизмы создания сценариев, генераторы входных дан­ных), но это только основа для атаки. Результат атаки все-таки полностью зависит от способностей хакера.
При взломе программы главное — это выяснить предположения, которые были допущены разработчиками системы, и использовать эти предположения в своих це­лях (вот почему так важно раскрыть все сделанные предположения во время проек­тирования и создания программного обеспечения). Восстановление исходного кода и структуры программы является прекрасным методом для раскрытия сделанных предположений. Особенно тех из них, которые реализованы безо всяких проверок и которыми можно воспользоваться при атаке.
Внутри программы
Образно выражаясь, программы позволяют создать "пропускную систему", защи­щая потенциально опасные данные с помощью правил, относительно того, кто и когда имеет право доступа к этим данным. На обозрение пользователю выставлены только ярлыки программ, подобно тому, как интерьер дома можно разглядеть через открытые двери. Законопослушные пользователи проходят через эти "двери", чтобы получить хранящиеся внутри данные. Для каждой программы предусмотрены свои точки входа. Проблема в том, что этими же "дверями" для доступа к программному обеспечению внутри компании могут воспользоваться и удаленные злоумышленники.
Рассмотрим, например, очень распространенную "дверь" доступа к программно­му обеспечению, работающему в Internet, — TCP/IP-порт. Хотя в обычной програм­ме есть много точек доступа, многие хакеры прежде всего проверяют ТСР/1Р-порты. Сделать это достаточно просто с помощью средств сканирования портов. С помо­щью портов предоставляется доступ пользователей к программе, но найти "дверь" — это только начало дела. Обычная программа довольно сложна (как дом, состоящий из многих комнат). Самое ценное "сокровище", как правило, спрятано внутри "дома". Практически во всех атаках злоумышленнику приходится выбирать слож­ный маршрут для поиска искомых данных в программе. Он как бы идет с фонариком по незнакомому дому. Успешное путешествие по этому лабиринту позволит полу­чить доступ к нужным данным и иногда даже полный контроль над программным обеспечением.
Программное обеспечение компьютера представляет собой набор инструкций, которые определяют возможности компьютера общего назначения. Таким образом, в некотором смысле программа представляет собой реализацию конкретной машины (состоящей из компьютера и его инструкций). Подобные машины должны работать по заданным правилам и действовать по строго заданным характеристикам. То, как именно работает программа, можно оценить в процессе ее выполнения. Сложнее уз­нать ее исходный код и понять внутренние процессы в самой программе. В некото­рых случаях исходный код программы является открытым для изучения, в некото­рых — нет. Таким образом, методы взлома не всегда основываются на исходном коде программы. И действительно, некоторые методы атак работают независимо от дос­тупности исходного кода. Другие методы позволяют воссоздать исходный код по машинным командам. Именно этим методам и посвящена в основном данная глава.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика