Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги хакеры / Защита_от_взлома_сокеты,_эксплойты,_shell_код_Фостер_Дж_

.pdf
Скачиваний:
14
Добавлен:
19.04.2024
Размер:
3.68 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

e

 

 

 

 

 

 

n

 

 

 

 

 

 

 

Резюме

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Резюме 101

 

to

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

У каждого из этих языков есть сильные и слабые стороны. Во всех четырех реализованы типы данных и основные программные конструкции, к примеру, циклы и функции. Хотя языку C уже несколько десятков лет, он все еще остается полезным. Этот простой и эффективный язык пригоден для создания очень мощных программ. Поэтому на нем часто пишут «эксплойты» для найденных уязвимостей, равно как и программы, предназначенные для работы в ОС UNIX. Более новые языки, например, Java и C# (входящий в состав каркаса .NET) обеспечивают большую переносимость и безопасность. Данные и методы классов можно делать «закрытыми», что способствует лучшей защите информации. Автоматическая сборка мусора защищает от ошибок кодирования и утечек памяти. Таким образом, сам язык может исключить целые классы уязвимостей. Механизм автоматического контроля выхода за границы массивов в Java и C# делает невозможным переполнение стека и кучи.

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

Perl и Python – мощные, популярные и полезные языки сценариев. В числе других распространенных языков такого рода можно назвать Ruby, UNIX C/ Korn/Bourne Shell, VBScript и SQL. У языкасценариев много преимуществ перед компилируемым языком программирования, но в качестве основных обычно называют скорость разработки и простоту. В общем и целом, разрабатывать сценарии на таких языках гораздо быстрее, поскольку интерпретатор обладает рядом достоинств, отсутствующих у компиляторов. Работа со строками и сокетами – вот два особенно популярных средства в языках Perl и Python. Необходимость в механизмах сопоставления строк с образцом и нетривиальных манипуляциях со строками обусловила включение развитых средств работы с регулярными выражениями в наиболее продвинутых язы-

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

i

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

o

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

r

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

102 Глава 1. Написание безопасных программ

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

o

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

df

 

 

 

 

e

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

ках сценариев. Они позволяют создавать программы для анализа больших-x cha

 

 

 

 

 

объемов данных с целью генерирования отчетов по ним.

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

Обзор изложенного материала 103

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

Обзор изложенного материала

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C/C++

C и C++ – это компилируемые языки программирования, в настоящее время они занимают доминирующее положение с точки зрения как популярности, так и объема написанного кода.

На C написаны почти все доступные для широкой публики «эксплойты» и программы сканирования сетей, включая NMAP (Network Messaging Application Protocol) и Nessus. С другой стороны, и уязвимости чаще всего встречаются в программах на этом языке.

Java

Язык Java поддерживает многопоточность, то есть программа может решать несколько задач одновременно. Эту возможность обеспечивает класс Thread из пакета java.lang.

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

C#

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

Perl

Если судить по числу написанных на Perl программ, то это один из самых популярных языков сценариев в мире, в том числе и в области обеспечения безопасности.

В Perl имеются функции match и subst для сопоставления строк с образцом и выполнения замены. Функция match принимает два аргумента: строка, в которой производится поиск, и искомый образец. Функция subst, помимо этих двух аргументов, принимает еще строку, которую надо подставить взамен найденной.

Python

Python лишь недавно начал набирать популярность, особенно как инструмент для написания «эксплойтов».

104 Глава 1. Написание безопасных программ

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

Основные компоненты таких известных программ, как Inline Egg ком--x cha

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

пании Core Secutity Technologies и CANVAS компании Immunity Security, написаны на Python.

Ссылки на сайты

Более подробную информацию по рассмотренным вопросам можно найти на следующих сайтах:

www.gnu.org/software/gcc/gcc.html. Домашняя страница компилятора GNU C содержит справочную информацию по языку C и особенностям программирования на нем;

www.research.att.com/~bs/C++.html. Страница исследовательской группы компании AT&T, посвященная языку C++. Поддерживается создателем языка Бьярном Страуструпом, содержит прекрасную документацию и несколько великолепных образчиков кода;

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html. Хорошее справочное руководство по типам данных в языке Java, опубликованное на сайте компании Sun Microsystems;

http://java.sun.com/products/jdk/1.2/docs/api/java/net/URLConnection.html. Часть документации по JDK, относящаяся к классу URLConnection;

www.csharphelp.com/archives/archives189.html. На этом сайте неплохая подборка информации по языку C# и встроенным в него средствам безопасности;

www.linuxgazette.com/issue85/ortiz.html. Справочное руководство номер 1 по языку C# и типам данных в нем;

www.perl.org. Домашняя страница сайта, посвященного языку Perl, на котором вы найдете документацию, примеры сценариев и онлайновые руководства;

www.activestate.com. Компания ActiveState разработала самый популярный интерпретатор Perl для Windows. Его можно бесплатно скачать вместе со всей документацией;

www.python.org. Домашняя страница сайта, посвященного языку Python. Здесь представлена документация, примеры программ и инструмен-

тальные средства.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

Часто задаваемые вопросы 105

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

Часто задаваемые вопросы

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Следующие вопросы, на которые часто отвечают авторы книги, призваны помочь вам оценить, насколько хорошо вы поняли идеи, изложенные в данной главе и возможные их применения на практике. Если вы хотите задать авторам вопрос, зайдите на страницу www.syngress.com/solutions и заполните форму Ask the Author. Заодно вы получите доступ к тысячам других FAQов на сайте ITFAQnet.com.

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

Î: Легко поддаются расширению почти все языки сценариев. Принимая во внимание различные факторы, можно сказать, что проще всего расширить Perl, потом Python, потом Javascript. Расширение может выглядеть поразному, но, обычно, реализуется с помощью библиотек или модулей, разбираемых во время выполнения сценария.

Â: Почему так трудно реализовать работу с простыми (raw) сокетами

âязыках сценариев?

Î: Языки сценариев разрабатывались как средство для облегчения и ускорения программирования за счет утраты некоторой функциональности. Прежде всего, сценарии не компилируются в машинный код и обычно не могут ссылаться на конкретные адреса в памяти. Функции сокетов, реализованные в большинстве таких языков, рассчитаны на массового пользователя, а не «спеца», который желает модифицировать некоторые поля в пакете протокола TCP или UDP. По большей части, реализация сокетов позволяет просто задавать полезную нагрузку, а для создания IP-пакетов и даже для доступа к MAC-адресам средства не предоставляются.

Â: Что лучше: рекурсия или итерация?

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

Â: Могу ли я использовать собственный криптографический алгоритм? Î: Не стоит. Очень трудно разработать криптографически безопасный ал-

горитм. Прежде чем алгоритму можно будет доверить шифрование секрет-

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

i

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

o

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

r

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

106 Глава 2. Язык сценариев NASL

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

o

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

df

 

 

 

 

e

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

ных данных, его несколько лет подвергают публичному исследованию и об--x cha

 

 

 

 

 

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

Â: Как приступить к созданию языка программирования?

Î: Первым делом нужно разработать синтаксис, определить зарезервированные слова и набор допустимых символов. Структура языка определяется контекстно-свободной грамматикой. Для описания грамматики часто применяют форму Бэкуса-Наура (BNF). Наконец, разрабатывается компилятор, который реализует язык, заданный своей грамматикой.

Â: Что такое ссылочные переменные и чем они отличаются от указателей? Î: Указатель – это, по сути дела, адрес в памяти. Для прямого доступа к памяти в языке C применяется символ &. Реализация такого механизма требует взаимодействия с аппаратурой. Основное достоинство ссылочных переменных – простота использования. Разработчики не хотят, чтобы из-за

простой ошибки пострадала критически важная область памяти.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

107

 

to

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

Глава 2

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Язык сценариев NASL

Описание данной главы:

Введение

Синтаксис сзыка NASL

Написание сценариев на языке NASL

Примеры сценариев на языке NASL

Перенос программ на язык NASL и наоборот См. также главы 1, 13

Резюме

Обзор изложенного материала

Часто задаваемые вопросы

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

108 Глава 2. Язык сценариев NASL

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

e

 

 

 

 

 

 

n

Введение

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Язык Nessus Attack Scripting Language (NASL – язык сценариев атак для Nessus) позволяет писать собственные сценарии аудита безопасности. Например, если организация планирует установить на всех хостах внутри административной подсети OpenSSH версии 3.6.1 на порту 22000, то можно написать простой сценарий, который проверит выполнение этого требования.

При проектировании NASL ставилась задача облегчить совместное использование сценариев, написанных разными пользователями. Если на некотором сервере было обнаружено переполнение буфера, то кто-нибудь обязательно напишет сценарий для проверки существования этой уязвимости. Если этот сценарий составлен с учетом предъявляемых требований и отослан администраторам Nessus, то он войдет в постоянно растущую библиотеку, применяемую для поиска известных уязвимостей. Но, как и многие другие инструменты безопасности, Nessus – это палка о двух концах. Хакеры и крекеры тоже могут воспользоваться Nessus для сканирования сетей, поэтому важно как можно чаще подвергать свою сеть аудиту.

Назначение настоящей главы – научить вас писать такие сценарии на языке NASL, которыми можно обмениваться с другими пользователями. Мы обсудим также цели языка, его синтаксис, среду разработки и вопросы переноса кода с языков C/C++ и Perl на NASL и обратно.

История

Программу Nessus написал и сопровождает Рено Дерезон (Renaud Deraison). Вот выдержка из документации, в которой говорится об истории проекта:

NASL вырос из частного проекта «pkt_forge», который разработал в конце 1998 года Рено Дерезон и который представлял собой ин терактивную оболочку для конструирования и отправки IP па кетов (программа появилась на пару недель раньше Perl модуля Net::RawIP). Затем проект был расширен с целью поддержки более широкого набора сетевых операций и интегрирован с Nessus под на званием NASL.

Первый синтаксический анализатор был написан вручную, и работать с ним было очень тяжело. В середине 2002 года Мишель Арбуа (Michel Arboi) написал анализатор для NASL на базе bison, после чего вдвоем

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

Введение 109

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

с Рено Дерезоном они переписали NASL с нуля. Хотя «новый» NASL

 

 

p

 

 

 

 

 

 

 

 

 

 

df

-xcha

 

e

 

 

 

df

-x cha

 

e

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

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

По сравнению с NASL1 в NASL2 включено множество усовершенствований. Язык стал значительно быстрее, содержит больше функций и операторов, поддерживает массивы. Его синтаксический анализатор создан с помощью генератора bison и потому намного строже, чем «ручной» анализатор в NASL1. NASL2 лучше справляется со сложными выражениями, чем NASL1. Любое упоминание NASL в этой главе относится к NASL2.

Назначение NASL

Основное назначение почти всех сценариев на языке NASL – удаленное выявление известных уязвимостей на целевой машине.

Простота и удобство

NASL создавался для того, чтобы пользователи могли легко и быстро писать сценарии, относящиеся к безопасности. Для этого в NASL имеются функции для создания пакетов, поиска открытых портов и взаимодействия с такими протоколами, как Hypertext Transfer Protocol (HTTP), File Transfer Protocol (FTP) и Telnet. Кроме того, NASL поддерживает протокол HTTP поверх слоя Secure Sockets Layer (HTTPS).

Модульность и эффективность

NASL позволяет любому сценарию воспользоваться работой, проделанной ранее в других сценариях. Для этого служит «база знаний» Nessus. В ходе исполнения Nessus каждый NASL-сценарий помещает результаты своей работы в локальную базу данных, откуда они могут быть извлечены другими сценариями. (Например, некий сценарий мог просканировать хост на наличие службы FTP и записать в базу данных номера портов, на которых обнаружен FTPсервер. Если найдено два экземпляра FTP – на портах 21 и 909, то значениями параметра Service/FTP будут числа 21 и 909.) Если в дальнейшем другой сценарий, предназначенный для поиска «волшебного FTP-сервера Джейсона», вызовет функцию get_kb_item(Services/FTP), то он автоматически будет выполнен дважды, по одному разу для каждого номера порта. Это куда эффективнее, чем заново запускать полный алгоритм сканирования TCP-портов для проверки наличия службы FTP.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

110 Глава 2. Язык сценариев NASL

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

-xcha

 

 

.c

 

 

 

p

 

 

 

Безопасность

 

 

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Поскольку NASL-сценарии разделяются всеми пользователями, интерпретатор NASL должен уметь давать гарантии относительно безопасности каждого сценария. NASL гарантирует две вещи:

Пакеты не посылаются никакому хосту, кроме целевого;

Команды никогда не выполняются на локальной системе.

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

Ограничения NASL

Важно понимать, что NASL – это не универсальный язык сценариев, призванный заменить Perl или Python. Промышленные языки могут делать вещи, невыполнимые средствами NASL. И хотя NASL весьма эффективен и оптимизирован для работы с Nessus, все же это не самый быстрый язык в мире. Мишель Арбуа утверждает, что при выполнении некоторых задач NASL2 быстрее NASL1 в 16 раз.

Синтаксис языка NASL

В этом разделе мы дадим некоторое представление о синтаксисе NASL, достаточное для того, чтобы вы могли приступить к написанию собственных сценариев. Полное рассмотрение синтаксиса NASL, включающее формальное описание грамматики, вы можете найти в «Справочном руководстве по языку NASL2» Мишеля Арбуа.

Комментарии

Текст, следующий за символом # до конца строки, игнорируется. Многострочные комментарии (типа /* */ в C) не допускаются.

Пример правильного комментария:

x = 1 # присвоить x значение 1