Add support for loongarch
[prads.git] / doc / TODO
blob5e9cec49441655a98a2899de4632bc753368eb6d
1 ==========
2 #TODO Passive Real-time Asset Detection System
3 ==========
5 2. inform firewall / snort / nessus / satan etc
7 3. Stateful conntrack => trust rel
9 4. Fingerprinting techniques
10    - SYN/SYNACK
11    - FIN, RST, STRAY-ACK
12    - DHCP
13    - DNS
14    - ICMP
15    - SNMP
16    - retransmission timings
17    - statistical /chaotical methods of analysis (think vseq)
18    - masq/natdetection
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:
34     -> p0f # messy
35     -> pads
36     -> sancp # cxtracker
37     -> prads.pl (sort of anyway)
38     -> nagios
39     -> snort (host-attribute-table.xml)
40     -> dot / graphviz
42 8. GUI - by web or "desktop"
43    - See your network, different OS and services.
44    - See firewalls
45    - summaries: severity/vuln/port/proto/ip/
46    /net class abc/mail/os/service/ssh/web server/web client/
47    /trends/.
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 :)
53      automatic! 
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
63                 |==> graphical C&C
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.
76  - NAT detection
77  - PRADS console (woot. leet!)
78  - trust relationships :-)
79  - DDoS detection
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 )
87 -.sniff DNS lookups
89 Optimizations: 
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!
94  - profile using rdtsc
95  - examine cache locality, TLB misses (cachegrind, perfctr), pipelines,
96  instruction pairing
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!
103  * sigs -> lookups
104  * API for plugins = 
105  - Lua plugins
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
116 Edward's TODO items:
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}            ?
123    #UDP example: 
124    $session_tracking->{10.10.10.12}->{1234}->{10.10.10.14}->{53}->{17}->{102}->{433}->{5}->{21}->{1243504322}->{1243508001}
125    #TCP example:
126    $session_tracking->{10.10.10.12}->{1234}->{10.10.10.14}->{53}->{6}->{1002021}->{92311}->{39811}->{1021}->{1243504322}->{1243508001}
127    #ICMP example:
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
134  like "UNKNOWN"
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
149 DONE
150 - MAC asset detection # DONE
151 1. Squil! # 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
160    .DBI optimizations> 
161    ..async DBI commits
162    ..in-mem db + persistance if $PERSIST
163  - update UNKNOWN entries when they match.
164  - option 76 crash
165  - CREATE TABLE failed blah error message.