]> git.somenet.org - pub/jan/netsec2.git/blob - report/exercise1.tex
exercise2.tex
[pub/jan/netsec2.git] / report / exercise1.tex
1 % tunet und eduroam down...
2
3 % LVA-Feedback: mehr freitext, weniger REP$x.$y !!! Diese Stuktur ist wirr und z.b. Failed attempts stehen an 3 unterschiedlichen stellen, obwohl sie doch alle irgendwie zusammenhängen -.-
4
5 \section{Exercise 1 - Task 1}
6 \subsection{Rep:1.a}
7 \fbox{\parbox{\textwidth}{
8 What is the IP address of the suspicious notebook?
9 }}
10
11 The IP address of the suspicious notebook (our own IP address) is \emph{\textbf{192.168.67.37}}.
12
13
14 \subsection{Rep:1.b}
15 \fbox{\parbox{\textwidth}{
16 What is the IP address of the machine presumably leaking information?
17 }}
18
19 The remote IP address is \emph{\textbf{192.168.67.83}}.
20
21
22 \subsection{Rep:1.c}
23 \fbox{\parbox{\textwidth}{
24 Give a detailed (but brief) explanation of these steps you carried out to filter irrelevant data (either Wireshark or Rapidminer).\\
25 Do also specify the keyworks and operators required.
26 }}
27
28 The necessary wireshark filter expression is \emph{\textbf{ip.addr == 192.168.67.83}}.
29
30
31 \subsection{Rep:1.d}
32 \fbox{\parbox{\textwidth}{
33 Which features are not viable to mask a covert channel and could be removed from the analysis?\\
34 List the rejected features and provide short but meaningful reasons for rejection.
35 }}
36
37 \begin{itemize}
38         \item \emph{\textbf{No.}} (it is generated while monitoring and is strictly monotonically increasing by 1 with each packet)
39         \item \emph{\textbf{Source IP}} (fixed value: \emph{\textbf{192.168.67.83}})
40         \item \emph{\textbf{Destination IP}} (fixed value: \emph{\textbf{192.168.67.37}})
41         \item \emph{\textbf{Protocol}} (fixed value: \emph{\textbf{UDP}})
42         \item \emph{\textbf{Length}} (fixed value: \emph{\textbf{82}})
43         \item \emph{\textbf{TTL}} (fixed value: \emph{\textbf{64}})
44         \item \emph{\textbf{Dest port}} (fixed value: \emph{\textbf{118}})
45         \item \emph{\textbf{Flags}} (none set)
46         \item \emph{\textbf{Frag offset}} (fixed value: \emph{\textbf{0}})
47 \end{itemize}
48
49 Fixed values have been rejected as it is not possible to hide information within.
50
51
52 \subsection{Rep:1.e}
53 \fbox{\parbox{\textwidth}{
54 From the remaining features, which ones are not viable to mask a covert channel and could be removed from the analysis?\\
55 List the newly rejected features and provide short but meaningful reasons for rejection.
56 }}
57
58 We can determine that the source port changes only between transmissions. The transmissions seem to be identical.\\
59
60 Therefore we can assume that the \emph{\textbf{source port}} can be ignored in further analysis.
61
62 We filter the transmission by applying the following filter in wireshark: \emph{\textbf{ip.addr == 192.168.67.83 and udp.srcport == 52899}} export the selection to a new pcap file and reload in wireshark to reset the packet numbers and export the pcap to csv.
63
64 % TODO: timing bild.
65
66
67 \subsection{Rep:1.f}
68 \fbox{\parbox{\textwidth}{
69 Do you think that you have found the covert channel?\\
70 Give a detailed description of where the covert channel is occurring (feature value:covert symbol relationship) and provide a capture of the plot where the abnormal behaviour of the suspicious feature is isolated and clearly visible.
71 }}
72
73 At first we wrote a decoder that made a diff between the current and the last csv line looking at DSCP.\\
74 Combined with the hint 8 bit ASCII we tried to extract full or partial bytes. The results did not made any sense.\\
75
76 Later we tried to look at the timing diffs and realised that most packets had a delay of either 0.04-0.06 or 0.14-0.16 ms.\\
77 So we tried to multiply the time-diff by 10 and cast the result to int. This resulted in a nice one bit/packet list which we quickly converted to 8 bit ascii.
78
79
80 \subsection{Rep:1.g}
81 \fbox{\parbox{\textwidth}{
82 Write in the report the formula of the deployed filter and the steps carried out to prepare the required file.
83 }}
84
85 \emph{\textbf{Dest port == 118}}
86
87
88 \subsection{Rep:1.h}
89 \fbox{\parbox{\textwidth}{
90 Write in the report the decoded message. Explain clearly how you carried out the decoding task (step by step in a numbered list).
91 }}
92
93 The message is \emph{\textbf{Starting transmission from Ministry of Cyber {\ucr}ffairs. (Agent Scott)Star{\ucr}i{\ucr}}}\\
94
95 code\\
96 \begin{verbatim}
97 #!/usr/bin/env python
98
99 import sys
100 import os
101 import signal
102 import csv
103 import binascii
104
105
106 def somedecode(filename):
107   with open(filename, 'rb') as csvfile:
108     spamreader = csv.reader(csvfile, delimiter=',', quotechar='"')
109     header = None
110     last = None
111     ln = 0
112     v = ""
113     
114     for row in spamreader:
115       if header is None:
116         header = row
117         continue
118       if last is None:
119         last = row
120         continue
121       
122       va = str(int((float(row[1])-float(last[1]))*10))
123       if va not in ["0","1"]:
124         va = "1"
125
126       v = v+va
127       
128       ln += 1
129       if ln == 8:
130         n = int(v, 2)
131         print " "+binascii.unhexlify('%x' % n),
132         v = ""
133         ln = 0
134       last = row
135
136 if __name__ == "__main__":
137         def signal_handler(signal, frame):
138                 print('SIG received. exitting!')
139                 sys.exit(0)
140         signal.signal(signal.SIGINT, signal_handler)
141
142         somedecode("dump_selected_udp_single_src_port_dehexed.csv")
143
144 \end{verbatim}
145
146
147 \subsection{Rep:1.i}
148 \fbox{\parbox{\textwidth}{
149 Report briefly any additional comment or observation related to the exercise solving to be considered during the review of your exercise.
150 }}
151
152 Some characters are broken, as the some packets seem to have expirienced unexpected delays and therefore were wrongly classified. All in all the Message is still understandable.
153
154
155 \section{Exercise 1 - Task 2}
156 \subsection{Rep:1.j}
157 \fbox{\parbox{\textwidth}{
158 Give a detailed (but brief) explanation of the steps you carried out to filter irrelevant data (either Wireshark or Rapidminer). Do also specify the keywords and operators required.
159 }}
160
161 Captured. Our new IP is \emph{\textbf{192.168.67.26}}.\\
162
163 Selected local network packets: \emph{\textbf{ip.src == 192.168.67.0/24 and ip.dst == 192.168.67.0/24}} and saved as separate pcap file and also exported the packets to csv.\\
164
165 In Rapidminer we analyzed the csv and removed our gateway (.1) and self (.26) as sources.\\
166
167 % TODO image:stream\_localnet.pdf
168
169 We get 4 network flows: The first from .83 to 80/udp, then from .82 to 443/udp, then .81 to 465/tcp, then .84 to 464/udp.\\
170
171 % TODO image:stream\_localnet\_ports.pdf
172
173 Filters for one complete transmission:
174 \emph{\textbf{udp.port == 58493 or udp.port == 45875 or tcp.port == 40875 or udp.port == 36842}}
175
176 % TODO: failed attempt
177
178 %%%%%%%%%%%%%%%%%%%%%
179 % WTF ?! % WTF ?! % WTF ?! % WTF ?! % WTF ?! 
180 % WTF ?! % WTF ?! % WTF ?! % WTF ?! % WTF ?! 
181 % WTF ?! % WTF ?! % WTF ?! % WTF ?! % WTF ?! 
182 % WTF ?! % WTF ?! % WTF ?! % WTF ?! % WTF ?! 
183 % WTF ?! % WTF ?! % WTF ?! % WTF ?! % WTF ?! 
184 %%%%%%%%%%%%%%%%%%%%%
185
186 %filtered away nfs and ssh
187 %!(tcp.port == 666 || tcp.port == 2049)
188 %asdf.{pcap,csv}
189
190 %look at it via rapidminer
191 %image:stream2.pdf
192
193 %((ip.addr eq 192.168.67.81 or ip.addr eq 192.168.67.82 or ip.addr eq 192.168.67.83) and ip.addr eq 192.168.67.37)
194 %better.{pcap,csv}
195
196 %look at it again via rapidminer
197 %image:stream\_better.pdf
198
199 %dest ports are always first 80/udp, then 443/udp, then 465/tcp
200
201 %filtered for one complete transaction
202 %tcp.port == 56533 or udp.port == 50293 or udp.port == 56040
203 %cool.{pcap,csv}
204
205 %look at it again via rapidminer
206 %image:stream\_cool.pdf
207
208 %%%%%%%%%%%%%%%%%%%%%%%
209
210
211 \subsection{Rep:1.k}
212 \fbox{\parbox{\textwidth}{
213 Which features are not viable to mask a covert channel and could be removed from the analysis? List the
214 rejected features and provide short but meaningful reasons for rejection.
215 }}
216
217 \begin{itemize}
218         \item \emph{\textbf{No.}} (it is generated while monitoring and is strictly monotonically increasing by 1 with each packet)
219         \item \emph{\textbf{Time}} (packets arrive with almost equal delays)
220         \item \emph{\textbf{TTL}} (fixed value: \emph{\textbf{64}})
221         \item \emph{\textbf{Frag offset}} (fixed value: \emph{\textbf{0}})
222 \end{itemize}
223
224 We can also ignore \emph{\textbf{IP.Flags}} as they meet our expected distribution:
225 \begin{itemize}
226         \item 0x0002: SYN (1x)
227         \item 0x0012: SYN,ACK (1x)
228         \item 0x0010: ACK (602x)
229         \item 0x0018: ACK,PSH (600x)
230         \item 0x0011: ACK,FIN (2x)
231 \end{itemize}
232
233
234 \subsection{Rep:1.l}
235 #with open('intermediate_stream_data.txt', 'r') as infile:                                                                                                          
236 \fbox{\parbox{\textwidth}{
237 From the remaining features, which ones are not viable to mask a covert channel and could be removed
238 from the analysis? List the newly rejected features and provide short but meaningful reasons for rejection.
239 }}
240
241
242 % TODO continue writing here.
243
244 not a high variance detected:
245 \begin{itemize}
246 \item UDP Stream from 192.168.67.83:56040 to 192.168.67.37:80 %TODO fix
247 \item UDP Stream from 192.168.67.82:50293 to 192.168.67.37:443 %TODO fix
248 \item TCP Traffic between 192.168.67.81:56533 to 192.168.67.37:465 %TODO fix
249 \item UDP Stream from 192.168.67.84:36842 to 192.168.67.26:464
250 \end{itemize}
251
252 Length also does not vary very much:
253 \begin{itemize}
254 \item Length 60 for Source Port 56040/udp
255 \item Length 60 for Source Port 52093/udp
256 \item Length 70 for ACK,PSH (600x), 74 for SYN (1x), 66 for ACK (1x) and 66 for FIN (1x) for Source Port 56533/tcp
257 \item Length 66 for ACK, 74 for SYN,ACK for Source Port 465/tcp
258 \item %TODO fix for sport 464
259 \end{itemize}
260
261 % TODO: failed attempt
262 %-> map in rapidminer ipid vs dscp
263 %-> every dscp has two ipid's? (ipid1 xor ipid2) or (ipid1 - ipid2) -> char
264
265
266 \subsection{Rep:1.m}
267 \fbox{\parbox{\textwidth}{
268 What is the IP address of the machine presumably leaking information?
269 }}
270
271 Unknown, because we do have two shorter transmissions before a longer transmission from different source ips
272
273 % TODO: failed attempt 1 - nicht alles
274 Later the IP address turned out to be 192.168.67.84.
275
276
277 \subsection{Rep:1.n}
278 \fbox{\parbox{\textwidth}{
279 Do you think that you have found the covert channel?\\
280 Give a detailed description of where the covert channel is occurring (feature value:covert symbol relationship) and provide a capture of the plot where the abnormal behaviour of the suspicious feature is isolated and clearly visible.
281 }}
282
283 Not yet. We do not know if the three transmissions are connected to each other.
284
285 % TODO: failed attempt 2 - dumm rum gesucht
286 Most likely it is in the DSCP field of the third transmission. (This also has responses from the local system)
287
288 Turned out that the 6 bits from the DSCP field in the 4. transmission just needed to be concatenated and then split into 8 bit chunks again.
289
290
291 \subsection{Rep:1.o}
292 \fbox{\parbox{\textwidth}{
293 Write in the report the decoded message. Explain clearly how you carried out the decoding task (step by step in a numbered list).
294 }}
295
296 \emph{\textbf{Agent South already successfully infiltrated The minister's office. In the next step, we try to acquire data from the Ministry of Cyber Affair's office network. Stay tuned, I will keep you updated on the progress. (This message was sent by agent Scott)Agent South already successfully infiltrated The minister's office. In the next step, we try to acquire data from the Ministry of Cyber Affair's office network. Stay tuned, I will keep you updated on t}}\\
297
298 code\\
299 \begin{verbatim}
300 #!/usr/bin/python                                                                                                                                                   
301                                                                                                                                                                     
302 from pprint import pprint                                                                                                                                           
303                                                                                                                                                                     
304 fullstr = ""                                                                                                                                                        
305                                                                                                                                                                     
306 with open('stream_data.txt', 'r') as infile:                                                                                                                        
307     for line in infile:                                                                                                                                             
308         if len(line) > 0:                                                                                                                                           
309             i = int(line)                                                                                                                                           
310             bin = "{0:06b}".format(i)                                                                                                                               
311             fullstr += bin                                                                                                                                          
312                                                                                                                                                                     
313 bytelist = [ fullstr[i:i+8] for i in range(0, len(fullstr), 8) ]                                                                                                    
314                                                                                                                                                                     
315 solution = ""                                                                                                                                                       
316                                                                                                                                                                     
317 for bchar in bytelist:                                                                                                                                              
318     solution += chr(int(bchar, 2))                                                                                                                                  
319                                                                                                                                                                     
320 print ("%s" % solution)                                                                                                                                             
321 print ("len: %d" % len(solution))                                                                                                                                   
322 \end{verbatim}
323
324
325 \subsection{Rep:1.p}
326 \fbox{\parbox{\textwidth}{
327 Report briefly any additional comment or observation related to the exercise solving to be considered during the review of your exercise.
328 }}
329
330
331 % TODO: failed attempt 3 - config fail
332 We did have a wireshark configuration issue as we had mistakenly configured it to show the IPID as the DSCP field and did miss the (correct) DSCP field completely.
333