 
 
 
 
 
 
   
 Next: Signature-based Techniques
 Up: Implementation
 Previous: Implementation
Specification-based intrusion detection systems employ specifications that 
describe the valid behavior of programs to detect intrusions.
In particular, programs in execution are monitored for violations from
the corresponding valid behavior specifications.
One useful type of specifications is the set of valid operations of a program
[7]. We have encoded the specifications for several programs
(e.g., imapd, fingerd, lpr, lprm, ftpd, httpd, etc.) describing their 
valid operations as ID wrappers using WDL.  Each specification-based ID 
wrapper is configured, using the activation criteria, to wrap the execution 
of the program with which the specification is concerned.
We found that the WDL itself is very suitable for expressing the set of valid 
operations of a program.
  
Figure 3:
Partial imapd program behavior specification in WDL
|  | 
 
Figure 3 shows part of a specification of the imapd 
program, encoded in WDL, that is concerned with the valid parameter values 
of open-read, chmod, fchmod, and execve 
operations.
The first clause specifies that after a successful open system call with
the read-only flag on (lines 1-2), the action block (lines 3-7) will be 
executed.  The action block obtains the inode information of the opened file 
and checks whether 1) it is world-readable, 2) owned by the invoker, or 3) 
created by the program execution (checked by the local function created()). 
It raises a violation if all conditions are false.  In short, the first clause
detects any bad open-read operation: on a file that is neither publicly 
readable, owned by the invoker, nor created by the program execution itself. 
Similarly the second and third clauses raise a violation if
the program performs a chmod/fchmod operation on a file not created 
by the program execution.
The last clause specifies that the wrapper intercepts the execve
system call before it executes, issues a violation, and prohibits the
call by returning an error code to the caller immediately (
return WR_D_BADPERM).
The partial specification illustrates that criteria for event interception
can be specified very easily in WDL.  In addition, accesses to system call
parameters can be accomplished easily through special $ variables.
For example, the $path variable on line 10 denotes the path name of the file 
in the chmod system call.  A reference or assignment to a variable 
effectively reads/modifies the corresponding argument of the intercepted 
system call.  
WDL also handles the copying of argument data between user space and kernel 
space automatically, allowing wrapper developers to focus on the key
aspects of a wrapper instead of low-level programming details.
With ID wrappers, we can monitor programs for improper modifications
to objects that otherwise cannot be accomplished using traditional audit 
trails.
In particular, ID wrappers can examine data read/written to
specific files without a huge overhead. Using this capability, we wrote an
ID wrapper that examines the passwd program to ensure that when a user 
(say Joe) invokes the passwd program, the program modifies only the
part of the password file associated with the password of Joe.
If there is a vulnerability in the passwd program that allows the
attack to control the program to arbitrarily modify the password file
(e.g., changing the user ID of a user), this ID wrapper is able to detect 
such an attack.
 
 
 
 
 
   
 Next: Signature-based Techniques
 Up: Implementation
 Previous: Implementation
Calvin Ko
2000-06-13