The security of computing networks is an increasingly important issue.  With the growth of wide area networks (WANs), such as the Internet and the World Wide Web, people rely on computing networks to locate, transfer, and store an increasing amount of valuable information.  This is also true of local area networks (LANs) used by companies, schools, organizations, and other enterprises.  LANs generally are used by a bounded group of people in an organization to communicate and store electronic documents and information.  LANs typically are coupled to or provide access to other local or wide area networks.  Greater use and availability of computing networks produces a corresponding increase in the size and complexity of computing networks. 
With the growth of networks and the importance of information available on the networks, there is also a need for better and more intelligent security.  One approach to securing larger and more complex computer networks is to use a greater number and variety of security assessment and intrusion detection devices.  Security assessment devices can be used to evaluate elements in the network such as desktop computers, servers, and routers, and determine their respective vulnerability to attack from hackers.  Intrusion detection devices, on the other hand, identify and prevent entry of foreign or malicious computer programs and can notify a network manager of the presence or attempted entry of such a computer program.  Security assessment and intrusion detection devices can also be used more frequently to monitor the activity or status of the elements in a computing network. 
However, simply adding devices or filters to a network is not always the only and best solution to maintaining network security.  Adding security devices can complicate the network and inundate the network manager with security data.  Threats to the security of a device or network can take a variety of forms including the introduction of harmful computer code, unauthorized attempts to gain access, and misuse by people with authority to use a device or network.  The various types of harmful computer code that can threaten a computing device or distributed computing system can generally be categorized as either a virus or some form of “malware”.  Computer viruses harm computing devices and systems by entering and then propagating.  In some respects, the propagating nature of computer viruses makes them easier to detect and there are many commercially available products that detect and exclude viruses from computing devices and systems. 
In contrast, malware is a general description for other types of programs and computer code that are designed to harm a computing device or system in ways other than simply propagating as a virus does.  Malware presents a more sophisticated challenge for network security and traditional anti-virus software is not designed to prevent malware from harming computing devices and networks.  Malware can take a variety of forms including corrupted applications and applications that retrieve corrupted code that is modified to harm a computing device or network. 
There are generally two different approaches to protecting against malware.  The first approach involves virtual execution of a computer code to attempt to identify harmful code before it is allowed to actually execute.  Virtual execution is limited in its ability to detect harmful code because it does not actually execute every process of the code.  Instead, the virtual execution technique performs a quick and high-level “walk through” of the processes in the code to attempt to detect suspicious patterns in the code.  By its nature, the virtual execution technique is limited in its ability to detect suspicious activities embedded in a piece of code.  As a result, when the virtual execution technique is implemented, it must be used conservatively which produces a high number of false positive alerts.  In other words, because the virtual execution security technique is not as accurate as actually running the code, it is implemented to identify a broader scope of potentially suspicious code and produces a greater number of alerts to the user.  A high percentage of false positive security alerts is undesirable because it translates into a greater number of security interruptions for the user. 
The second approach involves controlling and monitoring a computing device in real time while it is actually running a program and attempting to anticipate any harmful activity the program may try to initiate.  One example of a real-time solution is set forth in U.S. Pat.  No.  5,987,611, which describes a client-based monitoring system for filtering network access in conjunction with a centralized enforcement supervisor.  The supervisor maintains access rules for the client-based filtering and verifies the existence and proper operation of the client-based filter application.  Access rules specify network access criteria for a client, such as (1) total time a user can be connected to the Internet (e.g., per day, week, month, or the like), (2) time a user can interactively use the Internet (e.g., per day, week, month, or the like), (3) a list of applications or application versions that a user can or cannot use in order to access the Internet, (4) a list of URLs (or WAN addresses) that a user application can (or cannot) access, (5) a list of protocols or protocol components that a user application can or cannot use, and (6) rules to determine what events should be logged (including how long are logs to be kept). 
By intercepting process loading and unloading and keeping a list of currently-active processes, each client process can be checked for various characteristics, including checking executable names, version numbers, executable file checksums, version header details, configuration settings, and the like.  With this information, a determination can be made whether a particular process in question should have access to the Internet and what kind of access (i.e., protocols, Internet addresses, time limitations, and the like) is permissible for the given specific user. 
The limitation with the solution presented in U.S. Pat.  No.  5,987,611 and other similar real-time prior art solutions is that they are packet based.  In other words, the security decisions are based on the data packets that are passing between the computing device that is being monitored and external networks or computing resources.  When security decisions are based on the traffic of data packets, it is more likely the security systems will not detect harmful activities until after the harm has already begun.  Accordingly, the second approach is not satisfactory because conventional real-time security monitoring solutions do not detect security problems early enough and allow time for a response before the malicious program does harm. 
In view of the foregoing, there is a need in the art for a security system which will provide early detection of security threats to a computing device or network before any harm can be done.  Specifically, a need exists to be able to quickly and efficiently examine code in real time, but before it is able to harm a computing device or system.  A further need exists for a computer security system that can accurately identify security threats contained in software programs so that users are not interrupted frequently to address potential security questions.  Finally, a security system is needed that can efficiently and effectively respond to security threats detected in software programs.