Title: The NoAH approach to zeroday worm detection
1 The NoAH approach to
zero-day worm detection
- Asia Slowinska (asia_at_few.vu.nl)
- Vrije Universiteit, Amsterdam
2What is NoAH?
- NoAH is a Specific Support Action in the Sixth
Framework Programme of the European Union - Start 1st April 2005
- End 31st March 2008
- Homepage http//www.fp6-noah.org/
3Why?
- Too many vulnerabilities
- New worm attacks
- Human intervention too slow
- Current solutions are not perfect
- Time consuming
- Inaccurate
4Why?
- Too many vulnerabilities
- New worm attacks
- Human intervention too slow
- Current solutions are not perfect
- Time consuming
- Inaccurate
5Why?
- Too many vulnerabilities
- New worm attacks
- Human intervention too slow
- Current solutions are not perfect
- Time consuming
- Inaccurate
6Why?
- Too many vulnerabilities
- New worm attacks
- Human intervention too slow
- Current solutions are not perfect
- Time consuming
- Inaccurate
7Goals
- Design and develop infrastructure for security
monitoring based on honeypots technology - Detect most common attack vectors
- Detect worms in early stage of spreading
- Gather information about attacks
- Generate signatures
8Honeypots
- A computer system acting as a decoy
- does not provide regular services
- lures in potential hackers in order to study
their activities - honeypots in NoAH listen to unused IP address
space, called further dark space - Two basic types of honeypots
- low interaction (LI) emulate services
- high interaction (HI) run real applications
9NoAH architecture
Participating Organization
Honey _at_home
Funnel
Internet
Internet
Tunnel
NoAH Core
Funnel
LI honeypot
LI honeypot
LI honeypot
LI honeypot
HI honeypot
HI honeypot
10NoAH architecture
Participating Organization
Honey _at_home
Funnel
Internet
Internet
Tunnel
NoAH Core
Funnel
LI honeypot
LI honeypot
LI honeypot
LI honeypot
HI honeypot
HI honeypot
11NoAH architecture
Participating Organization
Honey _at_home
Funnel
Internet
Internet
Tunnel
NoAH Core
Funnel
LI honeypot
LI honeypot
LI honeypot
LI honeypot
HI honeypot
HI honeypot
12NoAH architecture
Participating Organization
Honey _at_home
Funnel
Internet
Internet
Tunnel
NoAH Core
Funnel
LI honeypot
LI honeypot
LI honeypot
LI honeypot
HI honeypot
HI honeypot
13NoAH architecture
Participating Organization
Honey _at_home
Funnel
Internet
Internet
Tunnel
NoAH Core
Funnel
LI honeypot
LI honeypot
LI honeypot
LI honeypot
HI honeypot
HI honeypot
14Core organizations
- host NoAH honeypots
- problem wide dark address space we could
monitor vs limited number of honeypots
15Core organizations
11.12.15.1
- host NoAH honeypots
- problem wide dark address space we could
monitor vs limited number of honeypots - solution funelling
11.12.15.0/16
11.12.1.1
Internet
NoAH Core
Funnel
11.12.1.1
LI honeypot
HI honeypot
16Core organizations
11.12.15.1
11.12.15.10
- host NoAH honeypots
- problem wide dark address space we could
monitor vs limited number of honeypots - solution funelling
11.12.15.0/16
11.12.1.1
Internet
NoAH Core
Funnel
11.12.1.1
LI honeypot
HI honeypot
17Core organizations
11.12.15.1
11.12.15.10
- host NoAH honeypots
- problem wide dark address space we could
monitor vs limited number of honeypots - solution funelling
11.12.15.3
11.12.15.0/16
11.12.1.1
Internet
NoAH Core
Funnel
11.12.1.1
LI honeypot
HI honeypot
18Core organizations
11.12.15.1
11.12.15.10
- host NoAH honeypots
- problem wide dark address space we could
monitor vs limited number of honeypots - solution funelling
11.12.15.3
11.12.15.5
11.12.15.0/16
11.12.1.1
Internet
NoAH Core
Funnel
11.12.1.1
LI honeypot
HI honeypot
19Cooperating organizations
Participating Organization
- do not maintain NoAH honeypots
- traffic arriving at the dark space is redirected
to the NoAH core - install and run funnel component only
Funnel
Internet
Tunnel
NoAH Core
LI honeypot
HI honeypot
20Honey_at_home
- homes or small offices
- a honeypot daemon running in the background
- easy to install
- dark space
- unused IP addresses
- unused TCP/UDP ports (or a subset of them)
- forwards all traffic for the dark space to the
NoAH core via an anonymous path
Honey _at_home
Anonymous path
Internet
NoAH Core
LI honeypot
HI honeypot
21Cooperation between LI and HI honeypots
High-interaction honeypots
Low-interaction honeypots
Windows XP IIS v2.0
Attacker
honeyd instance
RedHat Linux 9.0 SSH server v1.7 SMTP server
Attacker
RedHat Linux 9.0 SSH server v2.4 Apache v1.3
honeyd instance
Windows 2000 Oracle 10g
Attacker
22High-interaction honeypots in NoAH Argos
- based on Qemu, an emulator
- protects multiple OSs and all applications
without modification - employs dynamic taint analysis
- detects attacks that divert conventional control
flow, e.g., exploits for buffer overflows, format
strings, and double-free vulnerabilities
23Argos design
Applications
Guest OS
Argos Emulator
Host OS
24Argos design
Applications
Guest OS
Argos Emulator
Host OS
25Argos design
Applications
Guest OS
Argos Emulator
Host OS
26Argos design
Applications
Guest OS
Argos Emulator
Host OS
27Argos design
Applications
Guest OS
Argos Emulator
Host OS
28Argos design
Applications
Guest OS
Argos Emulator
Host OS
29Argos design
Applications
Guest OS
Argos Emulator
Host OS
Signature and information about attack
30Forensics in Argos
Applications
Guest OS
Argos Emulator
Host OS
31Forensics in Argos
Forensics
Snitch
Applications
Guest OS
Argos Emulator
Host OS
Signature, information about attack and
additional information about the vulnerable
application
32Attack detection
- redirect control flow
- program counter must be loaded with a tainted
value - keep track of call, jmp and ret instructions
- check that the value loaded in program counter
is not tainted - code-injection attacks
- format string attacks do not overwrite program
counter with a tainted value - check that the memory pointed by the value
loaded in program counter is not tainted
33Argos simple example
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
34Argos simple example
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
35Argos simple example
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
36Argos simple example
high addresses
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
address of array containing request
saved EIP
address for returning to main
low addresses
37Argos simple example
high addresses
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
address of array containing request
saved EIP
address for returning to main
saved EBP
main's EBP
url
100 bytes
low addresses
38Argos simple example
high addresses
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
address of array containing request
saved EIP
address for returning to main
saved EBP
main's EBP
url
100 bytes
low addresses
39Argos simple example
high addresses
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
address of array containing request
address for returning to main
nasty address
main's EBP
AAAA
AAAA
100 bytes
AAAA
low addresses
40Argos simple example
high addresses
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
address of array containing request
address for returning to main
nasty address
main's EBP
AAAA
AAAA
100 bytes
AAAA
low addresses
41Argos simple example
high addresses
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
address of array containing request
address for returning to main
nasty address
main's EBP
AAAA
AAAA
100 bytes
AAAA
low addresses
42Argos simple example
high addresses
int main(int argc, char argv) if (argc gt 1)
read_url(argv1) return 1 int
read_url(char request) char url100 if
(!strncmp(request, GET , 4)) strcpy(url,
request 4) return 1
address of array containing request
address for returning to main
nasty address
main's EBP
AAAA
AAAA
100 bytes
AAAA
low addresses
43Security evaluation
44Performance
45http//www.few.vu.nl/argos
46NoAH partners
- Foundation of Research and Technology (FORTH),
Heraklion, Greece coordinator - Vrije Universiteit, Amsterdam, The Netherlands
- ETH, Zurich, Switzerland
- TERENA, Amsterdam, The Netherlands
- FORTHnet SA, Heraklion, Greece
- DFN-CERT, Hamburg, Germany
- Virtual Trip Limited, Greece
- ALCATEL, France
47Backup slides
48Funneling
- arpd to collect IP addresses
- user-space daemon that responds to ARP requests
arriving to the network interface of the honeypot - honeyd handles traffic arriving at honeypots
- funneling has no overhead
- we tested emulating /24, /16, and /8 subnets
without any noticeable difference in performance
49Tunneling
- OpenVPN 2.0 as tunnel software
- Encrypted channel, supports packet compression
50Honey_at_home - challenges
- We cannot trust clients
- Anyone will be able to set up honey_at_home
- Clients must not know the address of honeypot
- Honeypots may become victims of flooding
- Address of client must also remain hidden
- Attacker can use their black space for flooding
- Computer-based mass installation of mockup
client should be prevented
51Network Data Tracking
Reg B network_read
Registers
52Network Data Tracking
Reg B network_read
Registers
53Network Data Tracking
Reg B network_read
Registers
Reg A Reg A Reg B
54Network Data Tracking
Reg B network_read
Registers
Reg A Reg A Reg B
55Network Data Tracking
Reg B network_read
Registers
Reg A Reg A Reg B
Registers
Memory(B) Reg B
Memory
56Network Data Tracking
Reg B network_read
Registers
Reg A Reg A Reg B
Registers
Memory(B) Reg B
Memory
57Network Data Tracking
Reg B network_read
Registers
Reg A Reg A Reg B
Registers
Memory(B) Reg B
Memory
Reg B Reg A / 12.34 (Sanitise data)
58Network Data Tracking
Reg B network_read
Registers
Reg A Reg A Reg B
Registers
Memory(B) Reg B
Memory
Reg B Reg A / 12.34 (Sanitise data)
59Guest forensics
Snitch
Applications
Virtual address space
Process name Linked libraries Open Ports
Guest OS
Virtual address space
Argos Emulator
Registers
Memory
60Forensics shellcode injection
- lookup process's read-only pages
- inject code at last text segment page
- point EIP to shellcode
Process Address Space
.text
61Forensics Snitch
- pid getpid()
- connect(localhost)
- send(pid)
- listen()
- accept()
- read(pid)
- exec(netstat or OpenPorts)
- connect(argos host)
- send(info)
62 Network tracking
RAM
Reg A
Reg B
Network trace
Network flows