![[Help]](United States Patent 5,964,889_files/help.gif)
![[Bottom]](United States Patent 5,964,889_files/bottom.gif)
![[Add to Shopping Cart]](United States Patent 5,964,889_files/order.gif)
| ( 1 of 1 ) |
| United States Patent | 5,964,889 |
| Nachenberg | October 12, 1999 |
A computer-implemented apparatus and method for countering attempts of polymorphic viruses to evade detection by emulation-based scanners. Such attempts try to exploit differences between the real and virtual execution of instructions. The invention includes a fault manager (158) integrated into the CPU emulator (154) of a virus scanner software product. Before each instruction is emulated by the CPU emulator (154), the fault manager (158) examines the opcode of the instruction to determine (310) whether a "fault" is triggered. If a fault is triggered, the fault manager (158) saves (314) a state record on a fault stack (162), then interrupts (316) to a corresponding fault handler routine (160). The criteria for triggering a fault and the corresponding fault handler routine (160) may be obtained from an updatable data file (164).
| Inventors: | Nachenberg; Carey S. (Northridge, CA) |
| Assignee: | Symantec Corporation (Cupertino, CA) |
| Appl. No.: | 843512 |
| Filed: | April 16, 1997 |
| Current U.S. Class: | 714/25; 712/227; 714/28 |
| Intern'l Class: | H04L 009/00 |
| Field of Search: | 370/397,440,419 364/269.4,709.05,550 395/186,183.09,183.14,181,187.01,182.04,700,550,183.01,183.05,800.23,500 380/4,2.2 371/48 714/25,28,29,32,34,799 712/22 |
| 4819234 | Apr., 1989 | Huber | 395/183. |
| 4926322 | May., 1990 | Stimac et al. | 395/500. |
| 4975950 | Dec., 1990 | Lentz | 380/4. |
| 5121345 | Jun., 1992 | Lentz | 380/4. |
| 5144660 | Sep., 1992 | Rose | 380/4. |
| 5319776 | Jun., 1994 | Hile et al. | 395/186. |
| 5321840 | Jun., 1994 | Ahlin et al. | 395/712. |
| 5349655 | Sep., 1994 | Mann | 395/182. |
| 5359659 | Oct., 1994 | Rosenthal | 380/4. |
| 5398196 | Mar., 1995 | Chambers | 395/183. |
| 5408642 | Apr., 1995 | Mann | 395/183. |
| 5421006 | May., 1995 | Jablon et al. | 395/183. |
| 5440723 | Aug., 1995 | Arnold et al. | 395/181. |
| 5442699 | Aug., 1995 | Arnold et al. | 380/4. |
| 5485575 | Jan., 1996 | Chess et al. | 395/183. |
| 5765030 | Jun., 1998 | Nachenberg et al. | 380/22. |
| 5826013 | Oct., 1998 | Nachenberg | 380/4. |
| 5854916 | Dec., 1998 | Nachenberg | 395/500. |
| Foreign Patent Documents | |||
| 0636977 A2 | Feb., 1995 | EP | . |
| WO 93/25967 | Dec., 1993 | JP | . |
| WO 97/12322 | Mar., 1997 | WO | . |
"Automated Program Analysis for Computer Virus Detection", IBM Technical Disclosure Buletin, vol. 34, No. 2, Jul. 1991, pp. 415-416. "Artificial Immunity for Personal Computers", IBM Technical Disclosure Bulletin, vol. 34, No. 2, Jul. 1991, pp. 150-154. Marshall G., "Pest Control", LAN Magazine, Jun. 1995, pp. 54-67. Digitext, "Dr. Solomon's Anti-Virus Toolkit for Windows and DOS", S&S International PLC, Jan. 1995, pp. 1-15, 47-65, 77-77, 91-95, 113-115, and 123-142, United Kingdom. Veldman, Frans, "Virus Writing Is High-Tech Infosecurity Warfare", Security on the I-Way '95, 1995, pp. L-1, L-16, U.S.A. Symantec Corporation, "Norton AntiVirus for Windows 95 & Special Subscription Offer", 1995 U.S.A. ThunderBYTE B.V., "User Manual", 1995, pp. 1-191, Wijchen, The Netherlands. "Virus Infection Techniques: Part 3", Virus Bulletin, 1995, pp. 006-007, Oxfordshire, England. Cohen, Federick B., "A Short Course on Computer Virus--2d Ed.", John Wiley & Sons, Inc., pp. 54-55, 199-209, 1994, U.S.A. Veldman, Frans, "Heuristic Anti-Virus Technology", Proceedings of the International Virus Protection and Information Security Council, Apr. 1, 1994. Wells, Joseph, "Viruses in the Wild", Proceedings of the International Virus Protection and Information Security Council, Apr. 1, 1994. Gordon, Scott, "Viruses & Netware", Proceedings of the International Virus Protection and Information Security Council, Mar. 31, 1994. Solomon, Alan, "Viruses & Polymorphism", Proceedings of the International Virus Protection and Information Security Council, Mar. 31, 1994. Case, Tori, "Viruses: An Executive Brief", Proceedings of the International Virus Protection and Information Security Council, Mar. 31, 1994. Skulason, Fridrik, "For Programmers", Virus Bulletin, Jul. 1990, pp. 10-11, Oxon, England. Gotlieb, L., "End Users and Responsible Computing", CMA--the Management Accounting Magazine, vol. 67, No. 7, Sep. 1993, pp. 13. Karney, J., "Changing the Rules on Viruses", PC Magazine, vol. 13, No. 14, Aug. 1994, pp,.NE36. Schnaidt, P., "Security", LAN Magazine, vol. 7, No. 3, Mar. 1992, pp. 19. "UK-Sophos Intros Unix Virus Detection Software Jan. 26, 1995", Newsbytes News Network, Jan. 26, 1995. "Anti-Virus Company Claims Polymorphic Breakthrough Jul. 10, 1992", Newsbytes News Network, Jul. 10, 1992. "LAN Buyers Guide: Network Management", LAN Magazine, vol. 7, No. 8, Aug. 1992, pp. 188. |
______________________________________
the virtual instruction pointer (IP);
(pushed last)
the virtual code segment (CS);
the flags;
the virtual stack pointer (SP);
the virtual stack segment (SS); and
the status bits (segment prefix overrides,
(pushed first)
REP statuses, etc.).
______________________________________
______________________________________
offset machine code interpretation
______________________________________
. . .
110 90 ;no operation
111 E2 FD ;loop back to the no operation
instruction and decrement CX
until CX is zero
. . .
______________________________________
__________________________________________________________________________
org FAULT.sub.-- START
push ds ; save the DS register since it will be used
as a working register
push bx ; save the BX register since it will be used
as a working register
move bx, sp ; BX = fault stack pointer
move ds, ss:[bx+6]
; DS = CS of suspended program
move bx, ss:[bx+4]
; BX = IP of suspended program
move bx, [bx]
; BX = 2-byte opcode (E0, E1, E2, or E3) of suspended
program
cmp bh, 0fdh ; if loop destination is one byte up, then got TPE
dummy loop
je dummy.sub.-- loop
; go to code to deal with dummy loop problem; else
its a legit loop
pop bx ; restore BX
pop ds ; restore DS
db `c`,90h,07h
; Suspend-Fault
db 0 ; for TPE faults
dd ffffffffh ; for practically infinite number of emulated
instructions
db `c`,90h,02h
; No-Fault
db `c`,90h,03h
; Fault-Return
dummy.sub.-- loop:
mov cx, 0 ; zero the CX register
mov bx, sp ; BX = fault stack pointer
add word ptr ss:[bx+4], 02h
; change IP to skip over loop
mov word ptr ss:[bx+0eh], 0
; remove all prefixes used on prior instruction.
; These prefixes were saved
on the fault stack
; and will be popped and
restored on Fault-Return.
pop bx ; restore BX
pop ds ; restore DS
db `c`, 90h, 04h
; Reset-Prefetch queue
db `c`, 90h, 03h
; Fault-Return.
__________________________________________________________________________
![[Add to Shopping Cart]](United States Patent 5,964,889_files/order.gif)
![[Top]](United States Patent 5,964,889_files/top.gif)