Shammer's Philosophy

My private adversaria

パケットをバイトで解析する・その2

パケットをバイトで解析する・その1 - Shammerismの最後の疑問、DestMACが始まるまでの10行程度のバイナリ情報は一体何か。とりあえずこれはさておき、他のパケットを見てみる。他のパケットでも同様かを見て、それから判断すればいいと思う。
前回の記事ではSYNを見たので、今度はその続きのSYN/ACKを見てみる。

$ tshark -r SYNACK.pcap 
  1   0.000000 192.168.10.146 00:0c:29:35:c9:82 192.168.10.254 00:1f:a0:10:05:86 74 80 → 35029 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSval=2633262388 TSecr=414999262 WS=64 TCP
$ 
$ 
$ 
$ tshark -x -r SYNACK.pcap 
0000  00 1f a0 10 05 86 00 0c 29 35 c9 82 08 00 45 00   ........)5....E.
0010  00 3c 00 00 40 00 40 06 a3 db c0 a8 0a 92 c0 a8   .<..@.@.........
0020  0a fe 00 50 88 d5 81 c2 c5 49 49 48 ae 9f a0 12   ...P.....IIH....
0030  16 a0 54 93 00 00 02 04 05 b4 04 02 08 0a 9c f4   ..T.............
0040  65 34 18 bc 62 de 01 03 03 06                     e4..b.....

$ 

SYN/ACKなので、SYNのDestMACとSrcMACが入れ替わった形になるはず。で、実際にそうなっている。問題は次だ。前回同様にodを取得する。

$ od -t x1 SYNACK.pcap 
0000000    0a  0d  0d  0a  60  00  00  00  4d  3c  2b  1a  01  00  00  00
0000020    ff  ff  ff  ff  ff  ff  ff  ff  04  00  3c  00  54  53  68  61
0000040    72  6b  20  28  57  69  72  65  73  68  61  72  6b  29  20  32
0000060    2e  30  2e  32  20  28  76  32  2e  30  2e  32  2d  30  2d  67
0000100    61  31  36  65  32  32  65  20  66  72  6f  6d  20  6d  61  73
0000120    74  65  72  2d  32  2e  30  29  00  00  00  00  60  00  00  00
0000140    01  00  00  00  20  00  00  00  01  00  00  00  ff  ff  ff  ff
0000160    09  00  01  00  06  00  00  00  00  00  00  00  20  00  00  00
0000200    06  00  00  00  6c  00  00  00  00  00  00  00  ed  e5  04  00
0000220    5b  53  6a  4a  4a  00  00  00  4a  00  00  00  00  1f  a0  10
0000240    05  86  00  0c  29  35  c9  82  08  00  45  00  00  3c  00  00
0000260    40  00  40  06  a3  db  c0  a8  0a  92  c0  a8  0a  fe  00  50
0000300    88  d5  81  c2  c5  49  49  48  ae  9f  a0  12  16  a0  54  93
0000320    00  00  02  04  05  b4  04  02  08  0a  9c  f4  65  34  18  bc
0000340    62  de  01  03  03  06  00  00  6c  00  00  00                
0000354
$

やはり多い。でも、仮にこの前半部分、つまり、DestMACが始まるまでの部分がSYNと一緒だとすれば、何らかのメタ情報である可能性が高くなる。10行ずつのdiffを取ってみる。

$ od -t x1 SYNACK.pcap | head -n 10
0000000    0a  0d  0d  0a  60  00  00  00  4d  3c  2b  1a  01  00  00  00
0000020    ff  ff  ff  ff  ff  ff  ff  ff  04  00  3c  00  54  53  68  61
0000040    72  6b  20  28  57  69  72  65  73  68  61  72  6b  29  20  32
0000060    2e  30  2e  32  20  28  76  32  2e  30  2e  32  2d  30  2d  67
0000100    61  31  36  65  32  32  65  20  66  72  6f  6d  20  6d  61  73
0000120    74  65  72  2d  32  2e  30  29  00  00  00  00  60  00  00  00
0000140    01  00  00  00  20  00  00  00  01  00  00  00  ff  ff  ff  ff
0000160    09  00  01  00  06  00  00  00  00  00  00  00  20  00  00  00
0000200    06  00  00  00  6c  00  00  00  00  00  00  00  ed  e5  04  00
0000220    5b  53  6a  4a  4a  00  00  00  4a  00  00  00  00  1f  a0  10
$ od -t x1 SYN.pcap | head -n 10
0000000    0a  0d  0d  0a  60  00  00  00  4d  3c  2b  1a  01  00  00  00
0000020    ff  ff  ff  ff  ff  ff  ff  ff  04  00  3c  00  54  53  68  61
0000040    72  6b  20  28  57  69  72  65  73  68  61  72  6b  29  20  32
0000060    2e  30  2e  32  20  28  76  32  2e  30  2e  32  2d  30  2d  67
0000100    61  31  36  65  32  32  65  20  66  72  6f  6d  20  6d  61  73
0000120    74  65  72  2d  32  2e  30  29  00  00  00  00  60  00  00  00
0000140    01  00  00  00  20  00  00  00  01  00  00  00  ff  ff  ff  ff
0000160    09  00  01  00  06  00  00  00  00  00  00  00  20  00  00  00
0000200    06  00  00  00  6c  00  00  00  00  00  00  00  ed  e5  04  00
0000220    5b  53  6a  4a  4a  00  00  00  4a  00  00  00  00  0c  29  35
$ 
$ 
$ 
$ od -t x1 SYN.pcap | head -n 10 > SYN.txt
$ od -t x1 SYNACK.pcap | head -n 10 > SYNACK.txt
$ diff SYN.txt SYNACK.txt 
10c10
< 0000220    5b  53  6a  4a  4a  00  00  00  4a  00  00  00  00  0c  29  35
---
> 0000220    5b  53  6a  4a  4a  00  00  00  4a  00  00  00  00  1f  a0  10
$ 

違いはDestMACの入れ替わりだけだ。仮説が正しい場合、SYNとハンドシェイク最後のACKは全部同じになりそうだがどうなるか。

$ od -t x1 ACK.pcap | head -n 10 > ACK.txt
$ diff SYN.txt ACK.txt
9,10c9,10
< 0000200    06  00  00  00  6c  00  00  00  00  00  00  00  ed  e5  04  00
< 0000220    5b  53  6a  4a  4a  00  00  00  4a  00  00  00  00  0c  29  35
---
> 0000200    06  00  00  00  64  00  00  00  00  00  00  00  ed  e5  04  00
> 0000220    9b  72  6a  4a  42  00  00  00  42  00  00  00  00  0c  29  35
$ 

どうやら仮説は違うっぽい。ackのodの結果は以下。

$ od -t x1 ACK.pcap 
0000000    0a  0d  0d  0a  60  00  00  00  4d  3c  2b  1a  01  00  00  00
0000020    ff  ff  ff  ff  ff  ff  ff  ff  04  00  3c  00  54  53  68  61
0000040    72  6b  20  28  57  69  72  65  73  68  61  72  6b  29  20  32
0000060    2e  30  2e  32  20  28  76  32  2e  30  2e  32  2d  30  2d  67
0000100    61  31  36  65  32  32  65  20  66  72  6f  6d  20  6d  61  73
0000120    74  65  72  2d  32  2e  30  29  00  00  00  00  60  00  00  00
0000140    01  00  00  00  20  00  00  00  01  00  00  00  ff  ff  ff  ff
0000160    09  00  01  00  06  00  00  00  00  00  00  00  20  00  00  00
0000200    06  00  00  00  64  00  00  00  00  00  00  00  ed  e5  04  00
0000220    9b  72  6a  4a  42  00  00  00  42  00  00  00  00  0c  29  35
0000240    c9  82  00  1f  a0  10  05  86  08  00  45  00  00  34  cc  41
0000260    40  00  40  06  d7  a1  c0  a8  0a  fe  c0  a8  0a  92  88  d5
0000300    00  50  49  48  ae  9f  81  c2  c5  4a  80  10  00  5b  99  a1
0000320    00  00  01  01  08  0a  18  bc  62  e0  9c  f4  65  34  00  00
0000340    64  00  00  00                                                
0000344
$

違いのある行は0000200と0000220だ。0000160より前は同じ。TCPヘッダは変わっているのでそれなのだろうか。でも、tsharkの結果と比較すると、0000200や0000220に格納されている情報がTCPヘッダとは考えにくい。一体この情報は・・・