Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.pdf
Скачиваний:
24
Добавлен:
19.04.2024
Размер:
31.35 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

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

dicom_protocol = Proto("dicom-a", "DICOM A-Type message")

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

Затем мы определяем поля заголовка в Wireshark, чтобы они соот- ветствовали структуре PDU DICOM,обсуждавшейся ранее,с помощью класса ProtoField:

pdu_type = ProtoField.uint8("dicom-a.pdu_type","pduType", base.DEC, {[1]="ASSOC Request",

[2]="ASSOC Accept", [3]="ASSOC Reject", [4]="Data", [5]="RELEASE Request", [6]="RELEASE Response",

[7]="ABORT"}) -- unsigned 8-bit integer

message_length = ProtoField.uint16("dicom-a.message_length", "messageLength", base.DEC) -- unsigned 16-bit integer

dicom_protocol.fields = {pdu_type, message_length}

Мы используем эти ProtoFields для добавления элементов в дерево анализа. Для нашего анализатора вызовем ProtoField дважды: один раз–длясозданияоднобайтовогобеззнаковогоцелогочисладляхра- нениятипаPDUивторойраз–длядвухбайтовдляхранениядлины сообщения .Обратите внимание,как мы назначили таблицу значе- нийдлятиповPDU.Wiresharkавтоматическиотобразитэтуинформа- цию. Затем мы представляем поля нашего анализатора протокола в виде таблицы Lua, содержащей наши ProtoFields.

Определение основной функции диссектора

Затем объявляем нашу основную функцию диссектора Dissector(), у которой есть три аргумента: буфер для анализа Wireshark, инфор- мация о пакете и дерево, отображающее информацию о протоколе.

В этой функции Dissector() мы будем анализировать наш прото- кол идобавлять поля ProtoFields,которые мы определили ранее,вде- рево, содержащее информацию о нашем протоколе.

function dicom_protocol.dissector(buffer, pinfo, tree)

pinfo.cols.protocol = dicom_protocol.name

local subtree = tree:add(dicom_protocol, buffer(), "DICOM PDU")

subtree:add_le(pdu_type, buffer(0,1)) -- big endian subtree:add(message_length, buffer(2,4)) -- skip 1 byte

end

Мы устанавливаем в поле протокола имя протокола, которое мы определили в dicom_protocol.name .Для каждого элемента,который

132  Глава 5

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нужно добавить,используем либо add_le() для данных в формате Big

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

Endian, либо add() для формата Little Endian, а также для ProtoFieldf-x chan

 

.c

 

 

.

 

 

 

 

 

 

 

 

 

p

d

 

 

 

 

e

 

 

 

 

 

 

 

g

 

 

 

и диапазона буфера для анализа.

Завершение диссектора

DissectorTable содержиттаблицу субдиссекторов для протокола,ото- бражаемую через диалог Decode (декодировать) Wireshark.

local tcp_port = DissectorTable.get("tcp.port") tcp_port:add(4242, dicom_protocol)

Чтобы завершить диссектор, просто добавляем его в DissectorTable для портов TCP на порту 4242.

В листинге 5.1 представлен диссектор целиком.

Листинг 5.1. Завершенный диссектор DICOM A-типа

dicom_protocol = Proto("dicom-a", "DICOM A-Type message")

pdu_type = ProtoField.uint8("dicom-a.pdu_type", "pduType", base.DEC, {[1]="ASSOC Request",

[2]="ASSOC Accept", [3]="ASSOC Reject", [4]="Data", [5]="RELEASE Request", [6]="RELEASE Response", [7]="ABORT"})

message_length = ProtoField.uint16("dicom-a.message_length", "messageLength", base.DEC)

dicom_protocol.fields = {message_length, pdu_type}

function dicom_protocol.dissector(buffer, pinfo, tree) pinfo.cols.protocol = dicom_protocol.name

local subtree = tree:add(dicom_protocol, buffer(), "DICOM PDU") subtree:add_le(pdu_type, buffer(0,1)) subtree:add(message_length, buffer(2,4))

end

local tcp_port = DissectorTable.get("tcp.port") tcp_port:add(4242, dicom_protocol)

Мы включаем этотдиссектор,помещая файл Lua в каталогподклю- чаемого модуля Wireshark, а затем перезагружаем Wireshark. Затем, анализируя захват DICOM, мы должны увидеть байт pduType и длину сообщения, отображаемые в столбце DICOM PDU, который мы опре- делили в нашем вызове tree:add(). На рис. 5.5 показано, как это вы- глядит в Wireshark. Вы также можете использовать фильтры dicom-a. message_length и dicom-a.pdu_type, которые мы определили , чтобы фильтроватьтрафик.

Теперь можно четко определить тип PDU и длину сообщения в па-

кетах DICOM.

Анализ сетевых протоколов  133