2 #TODO Passive Real-time Asset Detection System
5 2. inform firewall / snort / nessus / satan etc
7 3. Stateful conntrack => trust rel
9 4. Fingerprinting techniques
16 - retransmission timings
17 - statistical /chaotical methods of analysis (think vseq)
20 5. p0f - Passive OS fingerprinting...
21 - Together with discovering hosts (and trying to get OS from banner strings etc.), PRADS should
22 emulate p0f logic to detect OS based on tcp/icmp/udp... fingerprinting...
24 6. Goes without saying, but adding it as a point : client OS and Client programs fingerprinting:
25 Like: "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6 Ubiquity/0.1.5"
26 "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6"
27 "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6"
28 "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; nb-no) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3"
30 7. Different output plugins...
31 - PoC should send to stdout or/and logfile (text). # done, stdout/file
32 - Sguil (Add a switch to make the output better for sguil?) # done, see fifo
33 - output plugins compatible with:
37 -> prads.pl (sort of anyway)
39 -> snort (host-attribute-table.xml)
42 8. GUI - by web or "desktop"
43 - See your network, different OS and services.
45 - summaries: severity/vuln/port/proto/ip/
46 /net class abc/mail/os/service/ssh/web server/web client/
49 9. Webapplication detection!
50 - have a sett off known signatures for known webapps,
51 say wordpress, drupal, phpmyadmin, and so on, so that
52 we can know what Snort/ET/Suricata rules to enable :)
55 Kacper's TODO items & krazy ideas:
56 ====================================
58 > design doc! => good design == god API for free
59 == easier to make good gui with good api
60 / main program (prads) \
61 packet analyzer -> fingerprint analyzer
62 (pradsd) \-> realtime asset memory
65 .in-memory asset store API
66 .data exchange api? in-memory updates should be available
67 for realtime display, db insertion or offline dumping
68 .signature matching {SYN,UDP,ICMP,++} based on generated fp
70 match = signature[hash(fp)].
71 > Take away multiple matches.
72 > Normalize OS, provides "best guess"
74 .service fingerprints == good regex module
75 finding byte-sigs before regex.
77 - PRADS console (woot. leet!)
78 - trust relationships :-)
80 - Flood protection: malloc-free shmem ringbugger
81 - phase plane analysis of initial SEQ = fingerprint signatures
82 - active prads-informed firewall
83 - UPnP. BGP IGMP, multicast, tcp6 etc etc
84 - how to do vuln checks? / match to db
85 - switch/router topology by sniffing OSPF/BGP/RSTP
86 -.geoip maps ( passive lookup )
90 - .optimize SERVICE matching - reduce universe of regexes to match by
91 * optimize PCRE matcher ( try n implementations like snort)
92 - use SIMD instructions for parsing & matching (vectorize data)
93 ... and OpenCL / CUDA too!
95 - examine cache locality, TLB misses (cachegrind, perfctr), pipelines,
98 --- random ideas for implementation ---
99 - MVCC lockless assets in shared memory ring-buffer (shmat())
100 - keep last x updates + random discards / vacuum
102 * asset struct / shared fields. keep in same hashfunc : hash lib!
106 log / visualize / stats / db insert
107 * get prads.c to prads.pl state. superdaemon + subfunction daemons
108 -> duplicate the commandline of perl
109 * async IO and other scaling factors
110 * mobile (wifi,ether,ip,tcp)-frame scanning app for android/iPhone (+ autohack?)
111 * autogen nagios host table
112 * autogen snort host attributes
113 * graphviz dot visualizations
114 * realitme / SDL visio map
117 =====================
118 - fix SERVICE, both TCP and UDP... together with Kacper?
119 Need to make it faster, and maybe drop newlines etc.?
120 Kacper mentioned precompiling regexp
121 - IP statistics... Some way of collecting stats about sessions..
122 $session_tracking->{$src_ip}->{$src_port}->{$dst_ip}->{$dst_port}->{ip_type}->{$src_byte}->{$dst_byte}->{$src_packets}->{$dst_packets}->{$start_timestamp}->{$end_timestamp} ?
124 $session_tracking->{10.10.10.12}->{1234}->{10.10.10.14}->{53}->{17}->{102}->{433}->{5}->{21}->{1243504322}->{1243508001}
126 $session_tracking->{10.10.10.12}->{1234}->{10.10.10.14}->{53}->{6}->{1002021}->{92311}->{39811}->{1021}->{1243504322}->{1243508001}
128 $session_tracking->{10.10.10.12}->{0}->{10.10.10.14}->{0}->{1}->{102}->{433}->{5}->{21}->{1243504322}->{1243508001}
129 # for icmp $src_port could be $type and $dst_port could be $code ? Im smart... uhh
132 Minor issues to trac:
133 - take a code walk and get rid of copying-around strings and lameness
135 - make sanity checker macro's on all API funcs that handle packet fields
136 (* packetinfo makes for caller opacity)
138 Passive DNS : Only on the answer from the DNS SERVER
139 TIMESTAMP,DNS-SERVER-IP,QUERY-TYPE,QUERY-CLASS,QUERY-DATA,RESURSE-TYPE,RESURSE-CLASS,RESURSE-DATA,MISC
140 TIMESTAMP: unixtimestamp
141 DNS-SERVER-IP: The ip of the dns server responding
142 MISC: Other data in the answer
143 foreach additional record $UDP-DNS-PAYLOAD {
144 TIMESTAMP,DNS-SERVER-IP,QUERY-TYPE,QUERY-CLASS,QUERY-DATA,RESURSE-TYPE,RESURSE-CLASS,RESURSE-DATA,MISC
150 - MAC asset detection # DONE
152 1. Discover host on ICMP too # DONE
153 2. Discover Network Assets based on ARP. # DONE
154 3. Internal table of [hosts(IP),services(port-#),ID string(banner of service or string that match),timestamp] # DONE
155 - Start with SYN fingerprinting... # DONE
156 - I believe that we should have SYN+ACK also :/ # DONE
157 - fix up icmp OS fingerprinting # DONE
158 - fic up UDP OS fingerprinting # DONE
159 - Next would be mysql # DONE
162 ..in-mem db + persistance if $PERSIST
163 - update UNKNOWN entries when they match.
165 - CREATE TABLE failed blah error message.