Example Usage: Analyzing the ICMP Protocol
ICMP is a simple fixed length protocol.
Let's use the PI framework to discover the format.
|
Step 1: Gather 100 ICMP packets using tcpdump # tcpdump -s 42 -c 100 -nl -w icmp.dump icmp Step 2: Run dump through PI
prototype #
./main.py -g -p ./icmp.dump Protocol
Informatics Prototype (v0.01 beta) Written
by Marshall Beddoe <mbeddoe@baselineresearch.net> Copyright
(c) 2004 Baseline Research Found
100 unique sequences in '../dumps/icmp.out' Creating
distance matrix .. complete Creating
phylogenetic tree .. complete Discovered
1 clusters using a weight of 1.00 Performing
multiple alignment on cluster 1 .. complete Output
of cluster 1 0097 x08
x00 xad x4b x05 xbe x00 x60 0039 x08
x00 x30 x54 x05 xbe x00 x26 0026 x08
x00 xf7 xb2 x05 xbe x00 x19 0015 x08
x00 x01 xdb x05 xbe x00 x0e 0048
x08 x00 x4f xdf x05 xbe x00 x2f 0040
x08 x00 xf8 xa4 x05 xbe x00 x27 0077
x08 x00 xe8 x28 x05 xbe x00 x4c 0017
x08 x00 xe8 x6c x05 xbe x00 x10 0027
x08 x00 xc3 xa9 x05 xbe x00 x1a 0087
x08 x00 xdd xc1 x05 xbe x00 x56 0081
x08 x00 x88 x42 x05 xbe x00 x50 0058
x08 x00 xb0 x42 x05 xbe x00 x39 0013
x08 x00 x3e x38 x05 xbe x00 0067
x08 x00 x99 x36 x05 xbe x00 x42 0055
x08 x00 x0f x56 x05 xbe x00 x36 0004
x08 x00 xe6 xda x05 xbe x00 x03 0028
x08 x00 x83 xd9 x05 xbe x00 x1b 0095
x08 x00 xc1 xd9 x05 xbe x00 x5e 0075
x08 x00 x3a x63 x05 xbe x00 x4a 0053
x08 x00 x6d x2a x05 xbe x00 x34 0021
x08 x00 x6d x8d x05 xbe x00 x14 0088
x08 x00 xa8 x07 x05 xbe x00 x57 0005
x08 x00 xa8 x8a x05 xbe x00 x04 0080
x08 x00 xa8 x62 x05 xbe x00 x4f 0023
x08 x00 x3f x18 x05 xbe x00 x16 0002
x08 x00 x3f x65 x05 xbe x00 x01 0074
x08 x00 x3f xc2 x05 xbe x00 x49 0030
x08 x00 x3f x15 x05 xbe x00 x1d 0044
x08 x00 xcc xc2 x05 xbe x00 x2b 0078
x08 x00 xcc x8a x05 xbe x00 x4d 0071
x08 x00 xd8 x18 x05 xbe x00 x46 0035
x08 x00 x9a xfd x05 xbe x00 x22 0001
x08 x00 x69 xf9 x05 xbe x00 x00 0034
x08 x00 xc5 x9e x05 xbe x00 x21 0031
x08 x00 x38 x00 x05 xbe x00 x1e 0092
x08 x00 x38 x4c x05 xbe x00 x5b 0100
x08 x00 x2b x1a x05 xbe x00 x63 0049
x08 x00 x15 x1d x05 xbe x00 x30 0008
x08 x00 x2f x64 x05 xbe x00 x07 0089
x08 x00 x80 xe5 x05 xbe x00 x58 0096
x08 x00 xb2 xb0 x05 xbe x00 x5f 0079
x08 x00 xc2 xae x05 xbe x00 x4e 0057
x08 x00 xc2 x79 x05 xbe x00 x38 0046
x08 x00 x77 x7a x05 xbe x00 x2d 0018
x08 x00 xbb xce x05 xbe x00 x11 0025
x08 x00 xfe xaa x05 xbe x00 x18 0068
x08 x00 x50 xe3 x05 xbe x00 x43 0065
x08 x00 xe0 xb7 x05 xbe x00 x40 0011
x08 x00 x8d xd6 x05 xbe x00 0029
x08 x00 x7c xf3 x05 xbe x00 x1c 0033
x08 x00 xef xf3 x05 xbe x00 0069
x08 x00 x25 x6b x05 xbe x00 x44 0083
x08 x00 x25 xff x05 xbe x00 x52 0099
x08 x00 x56 x99 x05 xbe x00 x62 0061
x08 x00 x33 x81 x05 xbe x00 x3c 0050
x08 x00 xe9 xba x05 xbe x00 x31 0042
x08 x00 xb3 x49 x05 xbe x00 x29 0059
x08 x00 x81 x4e x05 xbe x00 x3a 0098
x08 x00 x81 xad x05 xbe x00 x61 0091
x08 x00 x42 xa0 x05 xbe x00 x5a 0054
x08 x00 x42 xd8 x05 xbe x00 x35 0037
x08 x00 x4c xe8 x05 xbe x00 x24 0041
x08 x00 xeb x4d x05 xbe x00 x28 0086
x08 x00 xe4 x53 x05 xbe x00 x55 0006
x08 x00 x71 x7b x05 xbe x00 x05 0012
x08 x00 x63 x7b x05 xbe x00 0070
x08 x00 xee x7d x05 xbe x00 x45 0051
x08 x00 xc8 x57 x05 xbe x00 x32 0066
x08 x00 xb4 x3c x05 xbe x00 x41 0014
x08 x00 x2c x26 x05 xbe x00 0062
x08 x00 x2c x7c x05 xbe x00 x3d 0016
x08 x00 xed x8e x05 xbe x00 x0f 0007
x08 x00 x47 x3d x05 xbe x00 x06 0073
x08 x00 x5e x72 x05 xbe x00 x48 0052
x08 x00 x9e x06 x05 xbe x00 x33 0072
x08 x00 x9e x9d x05 xbe x00 x47 0036
x08 x00 x6f x6e x05 xbe x00 x23 0060
x08 x00 x6c xc6 x05 xbe x00 x3b 0045
x08 x00 xa2 xf5 x05 xbe x00 x2c 0085
x08 x00 x00 x47 x05 xbe x00 x54 0076
x08 x00 x14 x85 x05 xbe x00 x4b 0020
x08 x00 xa0 x85 x05 xbe x00 x13 0019
x08 x00 xa6 x2c x05 xbe x00 x12 0003
x08 x00 x14 x2c x05 xbe x00 x02 0022
x08 x00 x44 x8c x05 xbe x00 x15 0082
x08 x00 x5d xe0 x05 xbe x00 x51 0009
x08 x00 xfc x41 x05 xbe x00 x08 0084
x08 x00 x35
x05 xbe x00 x53 0032
x08 x00 x0e x17 x05 xbe x00 x1f 0056
x08 x00 xe5
x05 xbe x00 x37 0043
x08 x00 xa1 xde x05 xbe x00 x2a 0094
x08 x00 x03 x92 x05 xbe x00 x5d 0047
x08 x00 x55 x83 x05 xbe x00 x2e 0090
x08 x00 x55 x94 x05 xbe x00 x59 0064
x08 x00 x8f
x05 xbe x00 x3f 0093
x08 x00 xb6
x05 xbe x00 x5c 0010
x08 x00 xd1 xb6 x05 xbe x00 0024
x08 x00 x11 x8f x05 xbe x00 x17 0063
x08 x00 x11 x04 x05 xbe x00 x3e 0038
x08 x00 x37 x3b x05 xbe x00 x25 DT BBB ZZZ BBB BBB BBB BBB ZZZ AAA MT 000 000 081 089 000 000 000 100 Ungapped
Consensus: CONS x08 x00 x3f x18 x05 xbe x00
??? DT BBB ZZZ BBB BBB BBB BBB ZZZ AAA MT 000 000 081 089 000 000 000 100 Step 3: Analyze Consensus Sequence Pay attention to datatype composition and mutation rate. Offset 0: Binary data, 0% mutation rate Offset 1: Zeroed data, 0% mutation rate Offset 2: Binary data, 81% mutation rate Offset 3: Binary data, 89% mutation rate Offset 4: Binary data, 0% mutation rate Offset 5: Binary data, 0% mutation rate Offset 6: Zeroed data, 0% mutation rate Offset 7: ASCII data, 100% mutation rate Using this information we can construct the structure of
the format: [ 1 byte ] [ 1 byte ] [ 2 byte ] [ 2 byte ] [ 1 byte ] [ 1
byte ] The real format of an ICMP message: [ 1 byte ] [ 1 byte ] [ 2 byte ] [ 2 byte ] [ 2 byte ] The reason PI made the mistake in identifying the last
field was due to the fact that the last field in an ICMP packet is a 16 bit
sequence identifier. We only
gathered 100 packets therefore the greatest significant byte never changed as
the field incremented. Therefore, it is very important to gather data efficiently
as PI is only as good as the data that is fed to it. Another thing that should be kept in mind is the use of
clustering. Play with the weight value to cluster closely related
sequences. This is a good way to
filter out deviants that may cause problems to your alignment down the road. Clustering is especially useful when
analyzing more complicated protocols some as SMB. Each cluster is placed into its own tree. The Phylogenetic tree for the ICMP
packets follows: |