A computer program product comprising a computer readable storage medium containing computer code that, when executed by a computer, implements a method for transforming a finite state automaton (fsa) of a regular expression, wherein the method includes determining, by a computer, a first subexpression r1 and a second subexpression r2 in the regular expression; calculating an overlap fsa, the overlap fsa configured to determine the existence of a partial overlap or a full overlap between the first subexpression r1 and the second subexpression r2; determining whether the overlap fsa has an accepting state; and in the event the overlap fsa is determined not to have an accepting state, determining that the transformation of the regular expression is safe, and constructing a transformed fsa of the regular expression comprising a first fsa for the first subexpression r1 and a second fsa for the second subexpression r2.
|
15. A computer-implemented method for transforming a finite state automaton (fsa) of a regular expression, the method comprising:
determining, by a computer, a first subexpression r1 and a second subexpression r2 in the regular expression;
calculating an overlap fsa, the overlap fsa configured to determine the existence of a partial overlap or a full overlap between the first subexpression r1 and the second subexpression r2;
determining whether the overlap fsa has an accepting state; and
in the event the overlap fsa is determined not to have an accepting state, determining that the transformation of the regular expression is safe, and constructing a transformed fsa of the regular expression comprising a first fsa for the first subexpression r1 and a second fsa for the second subexpression r2.
8. A computer system for transforming a finite state automaton (fsa) of a regular expression, the computer system configured to:
determine, by a processor of the computer system, a first subexpression r1 and a second subexpression r2 in the regular expression;
calculate an overlap fsa, the overlap fsa configured to determine the existence of a partial overlap or a full overlap between the first subexpression r1 and the second subexpression r2;
determine whether the overlap fsa has an accepting state; and
in the event the overlap fsa is determined not to have an accepting state, determine that the transformation of the regular expression is safe, and construct a transformed fsa of the regular expression comprising a first fsa for the first subexpression r1 and a second fsa for the second subexpression r2.
1. A computer program product comprising a non-transitory computer readable storage medium containing computer code that, when executed by a computer, implements a method for transforming a finite state automaton (fsa) of a regular expression, wherein the method comprises:
determining a first subexpression r1 and a second subexpression r2 in the regular expression;
calculating an overlap fsa, the overlap fsa configured to determine the existence of a partial overlap or a full overlap between the first subexpression r1 and the second subexpression r2;
determining whether the overlap fsa has an accepting state; and
in the event the overlap fsa is determined not to have an accepting state, determining that the transformation of the regular expression is safe, and constructing a transformed fsa of the regular expression comprising a first fsa for the first subexpression r1 and a second fsa for the second subexpression r2.
2. The computer program product according to
(.*r1.*∩.*r2)\(r1.*r2). 3. The computer program product according to
4. The computer program product according to
5. The computer program product according to
6. The computer program product according to
setting a value of a counter in a post-processor to zero;
scanning an input stream by the first fsa, the second fsa, and the one or more overlap fsas;
incrementing the counter whenever a match is reported by the first fsa to the post-processor; and
in the event a match is reported by the second fsa to the post-processor:
determining whether a particular fsa of the one or more overlap fsas is at an accepting state, and in the event the particular fsa is at an accepting state:
determining whether the value of the counter is greater than or equal to a value of N associated with the particular fsa, and in the event the value of the counter is greater than or equal to N, reporting a match for the regular expression in the input stream by the post-processor.
7. The computer program product according to
10. The computer system of
11. The computer system of
12. The computer system of
13. The computer system of
set a value of the counter to zero;
scan an input stream by the first fsa, the second fsa, and the one or more overlap fsas;
increment the counter whenever a match is reported by the first fsa to the post-processor; and
in the event a match is reported by the second fsa to the post-processor:
determine whether a particular fsa of the one or more overlap fsas is at an accepting state, and in the event the particular fsa is at an accepting state:
determine whether the value of the counter is greater than or equal to a value of N associated with the particular fsa, and in the event the value of the counter is greater than or equal to N, report a match for the regular expression in the input stream by the post-processor.
14. The computer system according to
17. The method of
18. The method of
19. The method of
20. The method of
|
This application is a continuation of U.S. application Ser. No. 13/432,252, filed on Mar. 28, 2012, the disclosure of which is incorporated by reference herein in its entirety.
This disclosure relates generally to the field of finite state automatons (FSAs), and more particularly to identifying and handling subexpression overlaps in FSA transformations that are associated with regular expression decompositions.
Packet content scanning is an essential part of network security and monitoring applications. Intrusion detection systems such as Snort (http://www.snort.org) rely heavily on regular expressions to express increasingly complex attack patterns. A typical way of matching regular expressions in a stream of input characters is by simulating the input on a Finite State Automaton (FSA), which may be a nondeterministic FSA (NFA) or a deterministic FSA (DFA), compiled from the regular expression. For example,
In one aspect, a computer program product comprising a computer readable storage medium containing computer code that, when executed by a computer, implements a method for transforming a FSA of a regular expression, wherein the method includes determining a first subexpression R1 and a second subexpression R2 in the regular expression; calculating an overlap FSA, the overlap FSA configured to determine the existence of a partial overlap or a full overlap between the first subexpression R1 and the second subexpression R2; determining whether the overlap FSA has an accepting state; and in the event the overlap FSA is determined not to have an accepting state, determining that the transformation of the regular expression is safe, and constructing a transformed FSA of the regular expression comprising a first FSA for the first subexpression R1 and a second FSA for the second subexpression R2.
In another aspect, a computer system for transforming a FSA of a regular expression is configured to determine a first subexpression R1 and a second subexpression R2 in the regular expression; calculate an overlap FSA, the overlap FSA configured to determine the existence of a partial overlap or a full overlap between the first subexpression R1 and the second subexpression R2; determine whether the overlap FSA has an accepting state; and in the event the overlap FSA is determined not to have an accepting state, determine that the transformation of the regular expression is safe, and construct a transformed FSA of the regular expression comprising a first FSA for the first subexpression R1 and a second FSA for the second subexpression R2.
Additional features are realized through the techniques of the present exemplary embodiment. Other embodiments are described in detail herein and are considered a part of what is claimed. For a better understanding of the features of the exemplary embodiment, refer to the description and to the drawings.
Referring now to the drawings wherein like elements are numbered alike in the several FIGURES:
Embodiments of systems and methods for determination and handling of subexpression overlap for FSA transformations are provided, with exemplary embodiments being discussed below in detail. Overlap between the subexpressions that are matched by an FSA transformation may lead to false positive results for certain input strings. For example, a transformation of a FSA that matches a partially overlapping regular expression “abc.*cde” may be problematic. A transformation this FSA may match the subexpressions “abc” and “cde” independently. However, setting a register whenever “abc” matches and then reporting a match whenever “cde” matches only if the register is set, such as was described above with respect to FSA 200 of
Various types of overlaps that occur in regular expression transformations, or decompositions, may be identified, and overlap FSA(s) may be constructed that can recognize such overlaps. Additionally, the overlap FSA(s) may be used to detect and eliminate false positives that are associated with regular expression transformations. Embodiments of systems and methods for determination and handling of subexpression overlap for FSA transformations may be integrated into any appropriate computer hardware, for example a pattern matching engine of a Power Edge of Network Processor (PowerEN) from International Business Machines, Inc. (IBM), and its regular expression (Regex) compiler. The FSAs that are transformed and constructed may be either NFAs or DFAs in various embodiments.
Full and partial overlap determination and handing for FSA transformation is discussed with respect to a general regular expression of the type R1.*R2, comprising subexpressions R1 and R2. R1 and R2 may be any appropriate simple string or regular expression in various embodiments. The regular expression R1.*R2 defines a regular language that contains the set of all strings that start with a string that belongs to the language defined by R1, followed by an arbitrary number of characters, and ending with a string that belongs to the language defined by R2. Transformation of R1 and R2, as discussed below, may be performed by any appropriate FSA transformation technique, for example the techniques described above with respect to
PO=(R1.*∩.*R2)\(R1.*R2) (EQ. 1).
Note that the language defined by (R1*∩.*R2) contains all the strings that start with a string that belongs to the language defined by R1 and that end with a string that belongs to the language defined by R2. The set of all strings that result in partial overlaps (i.e., the language PO) is the difference between the language defined by (R1.*∩.*R2) and the language defined by R1.*R2. All the strings that result in a full overlap between R1 and R2 are given by:
FO=.*R1.*∩R2 (EQ. 2).
FO contains the strings that belong to the language defined by R2 and that contain at least one substring that belongs to the language defined by R1.
The overlap FSA AO is computed based on EQ. 1 and EQ. 2. FSA AO that gives both partial and full overlaps between R1 and R2 may be formulated based on PO and FO as follows:
AO=.*(PO∪FO) (EQ. 3);
or
AO=(.*R1.*∩.*R2)\(R1.*R2) (EQ. 4).
AO, as given by EQ. 4, recognizes partial overlap and single full overlap between R1 and R2. Additional overlap FSAs, discussed in further detail below, are necessary to handle multiple full overlap.
Once the overlap FSA AO is computed in block 302 of method 300, flow proceeds to block 303, in which it is determined based on the overlap FSA AO(1) whether the regular expression decomposition of R1 and R2 results in false positives due to the presence of overlap between R1 and R2. If the overlap FSA AO is determined to contain no accepting states (i.e., has no positive outputs for any input strings) in block 303 of
In block 305 of
OC(1)=R1 (EQ. 5); and
OC(N)=OC(N−1).+(∪.*R1 (EQ. 6).
AO(N), which is a language that contains the strings that are in the language defined by AO and that contain N or more occurrences of substrings that are in the language defined by R1, may then be computed based on EQ. 6 as follows:
AO(N)=(.*OC(N).*∩.*R2)\(R1.*R2) (EQ. 7).
AO(1), as defined by EQ. 7, is equal to AO that was defined by EQ. 4, since OC(1)=R1 based on EQ. (5).
An FSA EO(N) may be calculated based on AO(N). EO(N) defines a language that contains the strings that are in the language defined by R2, and that contain exactly N occurrences of substrings that are in the language defined by R1. EO(N) may be computed as follows:
EO(N)=AO(N)\AO(N+1) (EQ. 8).
EQ. (7) and EQ. (8) are used in block 305 of method 300 to iteratively compute multiple full overlap FSAs for R1 and R2 that recognize AO(N+1) and EO(N). The iterations continue until AO(N+1) has zero accepting states or until a termination condition is reached. Table 1 illustrates an example of an algorithm for computation of a set of FSAs EO(N), for N from 1 to NMAX, where NMAX is the maximum number of occurrences of R1 that may exist in R2.
TABLE 1
Algorithm for Computation of EO(N), N = 1 to NMAX
1:
GenerateOverlaps(R1, R2, Overlap FSAs)
2:
N = 1;
3:
Overlap FSAs = empty set
4:
Compute FSA of AO(1) using Eq. (7);
5:
while (AO(N) has accepting states) and (termination
condition is not reached) do
6:
NMAX = N;
7:
Compute FSA of AO(N + 1) using Eq. (7);
8:
Compute FSA of EO(N) using Eq. (8);
9:
Overlap FSAs[N] = FSA of EO(N);
10:
N = N + 1;
11:
end while
12:
if termination condition is not reached then
13:
return Overlap FSAs;
14:
else
15:
return failure;
16:
end if
The one or more FSAs EO(N), for N from 1 to NMAX, that are computed by the algorithm of Table 1 may also be referred to as overlap FSAs EO(1) to EO(NMAX). Overlap FSAs EO(1) to EO(NMAX) may be stored and used explicitly to eliminate false positives. The outputs of the overlap FSAs EO(1) to EO(NMAX) may also be used to activate post-processing functions. Depending on R1.*R2, there may be any appropriate number of overlap FSAs EO(1) to EO(NMAX); the number of overlap FSAs is bounded by NMAX.
After computation of the one or more multiple overlap FSAs EO(1) to EO(NMAX) in block 305, flow proceeds to block 306, in which the memory requirements of the overlap FSAs EO(1) to EO(NMAX) that were determined in block 305 are determined. These memory requirements may exceed the memory requirements of the original regular expression R1.*R2, in which case the transformation of R1.*R2 may be impractical. NMAX may be very large (It is possible to have an unbounded NMAX) and/or the post-processing functions may be relatively complex. Therefore, the algorithm GenerateOverlaps that was shown in Table 1 has a termination condition that is based on the memory requirements of implementing the false positive elimination technique on a particular post-processor architecture. If the memory requirements of the implementation of overlap FSAs EO (1) to EO(NMAX) exceeds a predetermined size, it is determined that transformation of the regular expression R1.*R2 into R1 and R2 is either infeasible or impractical. Flow then proceeds to block 307 of
Another example of an algorithm that detects and eliminates false positives due to overlap is described in Table 2. Note that, in Table 2, on the accepting states of the FSA that recognizes R1 the counter is incremented, and on the accepting states of the FSA that recognizes R2, the value of the counter is tested. A match for R1.*R2 is indicated if R1 is matched more than N times when EO(N) is matched. As a result, on the accepting states of the FSA that recognizes EO(N), a match is reported only if the value of the counter is larger than N. In Table 2, input data is read from the input stream “is”, and offsets of the computed matches are written into the output stream “match offsets”. The “Overlap FSAs” referenced in Table 2 may be computed using the algorithm of Table 1.
TABLE 2
Algorithm for Computation of Match
Results while Suppressing False Positives
1:
ComputeMatchResults(input stream is, output stream match offsets)
2:
counter = 0;
3:
current offset = 0;
4:
while cur input = get next input from input stream(is) do
5:
Compute next state for all FSAs using cur input
6:
if the FSA of R1 is at an accepting state then
7:
counter = counter + 1;
8:
end if
9:
regex match = false;
10:
overlap match = false;
11:
N = 1
12:
while N < NMAX do
13:
if Overlap FSAs[N] is at an accepting state then
14:
overlap match = true;
15:
if counter > N then
16:
regex match = true;
17:
end if
18:
end if
19:
N = N + 1;
20:
end while
21:
if not overlap match then
22:
if (FSA of R2 is at an accepting state) and
(counter > 0) then
23:
regex match = true;
24:
end if
25:
end if
26:
if regex match then
27:
match offsets.insert(current offset);
28:
end if
29:
current offset = current offset + 1;
30:
end while
In an example of application of the embodiments of methods of
In an additional example, the regular expression to be matched is “abc.*x(abc){0,2}”, where “abc” may occur in “x(abc){0,2}y” from zero to two times (i.e., NMAX is equal to 2). The FSA implementing EO(1) recognizes “xabcy”, and the FSA implementing EO(2) would recognize “xabcabcy”. The FSA implementing EO(1) would detect a false positive if “abc” has been so far matched only once, as indicated by the counter, and the FSA implementing EO(2) would detect a false positive if “abc” has been so far matched only twice, as indicated by the counter. In another example, the regular expression to be matched is “abc.*(abc){1,2}”. In this case, the FSA of EO(1) recognizes “abc”, and the FSA of EO(2) recognizes “abcabc”. Given the input string “abcabc”, EO(2) will detect a false positive, whereas EO(1) will find a valid match. In such a case, a match for the original regular expression “abc.*(abc){1,2}” will be reported and false positives detected by other overlaps will be ignored.
Embodiments of methods of
The computer 600 includes, but is not limited to, PCs, workstations, laptops, PDAs, palm devices, servers, storages, and the like. Generally, in terms of hardware architecture, the computer 600 may include one or more processors 610, memory 620, and one or more input and/or output (I/O) devices 670 that are communicatively coupled via a local interface (not shown). The local interface can be, for example but not limited to, one or more buses or other wired or wireless connections, as is known in the art. The local interface may have additional elements, such as controllers, buffers (caches), drivers, repeaters, and receivers, to enable communications. Further, the local interface may include address, control, and/or data connections to enable appropriate communications among the aforementioned components.
The processor 610 is a hardware device for executing software that can be stored in the memory 620. The processor 610 can be virtually any custom made or commercially available processor, a central processing unit (CPU), a digital signal processor (DSP), or an auxiliary processor among several processors associated with the computer 600, and the processor 610 may be a semiconductor based microprocessor (in the form of a microchip) or a macroprocessor.
The memory 620 can include any one or combination of volatile memory elements (e.g., random access memory (RAM), such as dynamic random access memory (DRAM), static random access memory (SRAM), etc.) and nonvolatile memory elements (e.g., ROM, erasable programmable read only memory (EPROM), electronically erasable programmable read only memory (EEPROM), programmable read only memory (PROM), tape, compact disc read only memory (CD-ROM), disk, diskette, cartridge, cassette or the like, etc.). Moreover, the memory 620 may incorporate electronic, magnetic, optical, and/or other types of storage media. Note that the memory 620 can have a distributed architecture, where various components are situated remote from one another, but can be accessed by the processor 610.
The software in the memory 620 may include one or more separate programs, each of which comprises an ordered listing of executable instructions for implementing logical functions. The software in the memory 620 includes a suitable operating system (O/S) 650, compiler 640, source code 630, and one or more applications 660 in accordance with exemplary embodiments. As illustrated, the application 660 comprises numerous functional components for implementing the features and operations of the exemplary embodiments. The application 660 of the computer 600 may represent various applications, computational units, logic, functional units, processes, operations, virtual entities, and/or modules in accordance with exemplary embodiments, but the application 660 is not meant to be a limitation.
The operating system 650 controls the execution of other computer programs, and provides scheduling, input-output control, file and data management, memory management, and communication control and related services. It is contemplated by the inventors that the application 660 for implementing exemplary embodiments may be applicable on all commercially available operating systems.
Application 660 may be a source program, executable program (object code), script, or any other entity comprising a set of instructions to be performed. When a source program, then the program is usually translated via a compiler (such as the compiler 640), assembler, interpreter, or the like, which may or may not be included within the memory 620, so as to operate properly in connection with the O/S 650. Furthermore, the application 660 can be written as an object oriented programming language, which has classes of data and methods, or a procedure programming language, which has routines, subroutines, and/or functions, for example but not limited to, C, C++, C#, Pascal, BASIC, API calls, HTML, XHTML, XML, ASP scripts, FORTRAN, COBOL, Perl, Java, ADA, .NET, and the like.
The I/O devices 670 may include input devices such as, for example but not limited to, a mouse, keyboard, scanner, microphone, camera, etc. Furthermore, the I/O devices 670 may also include output devices, for example but not limited to a printer, display, etc. Finally, the I/O devices 670 may further include devices that communicate both inputs and outputs, for instance but not limited to, a NIC or modulator/demodulator (for accessing remote devices, other files, devices, systems, or a network), a radio frequency (RF) or other transceiver, a telephonic interface, a bridge, a router, etc. The I/O devices 670 also include components for communicating over various networks, such as the Internet or intranet.
If the computer 600 is a PC, workstation, intelligent device or the like, the software in the memory 620 may further include a basic input output system (BIOS) (omitted for simplicity). The BIOS is a set of essential software routines that initialize and test hardware at startup, start the O/S 650, and support the transfer of data among the hardware devices. The BIOS is stored in some type of read-only-memory, such as ROM, PROM, EPROM, EEPROM or the like, so that the BIOS can be executed when the computer 600 is activated.
When the computer 600 is in operation, the processor 610 is configured to execute software stored within the memory 620, to communicate data to and from the memory 620, and to generally control operations of the computer 600 pursuant to the software. The application 660 and the O/S 650 are read, in whole or in part, by the processor 610, perhaps buffered within the processor 610, and then executed.
When the application 660 is implemented in software it should be noted that the application 660 can be stored on virtually any computer readable medium for use by or in connection with any computer related system or method. In the context of this document, a computer readable medium may be an electronic, magnetic, optical, or other physical device or means that can contain or store a computer program for use by or in connection with a computer related system or method.
The application 660 can be embodied in any computer-readable medium for use by or in connection with an instruction execution system, apparatus, or device, such as a computer-based system, processor-containing system, or other system that can fetch the instructions from the instruction execution system, apparatus, or device and execute the instructions. In the context of this document, a “computer-readable medium” can be any means that can store, communicate, propagate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device. The computer readable medium can be, for example but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, device, or propagation medium.
More specific examples (a nonexhaustive list) of the computer-readable medium may include the following: an electrical connection (electronic) having one or more wires, a portable computer diskette (magnetic or optical), a random access memory (RAM) (electronic), a read-only memory (ROM) (electronic), an erasable programmable read-only memory (EPROM, EEPROM, or Flash memory) (electronic), an optical fiber (optical), and a portable compact disc memory (CDROM, CD R/W) (optical). Note that the computer-readable medium could even be paper or another suitable medium, upon which the program is printed or punched, as the program can be electronically captured, via for instance optical scanning of the paper or other medium, then compiled, interpreted or otherwise processed in a suitable manner if necessary, and then stored in a computer memory.
In exemplary embodiments, where the application 660 is implemented in hardware, the application 660 can be implemented with any one or a combination of the following technologies, which are well known in the art: a discrete logic circuit(s) having logic gates for implementing logic functions upon data signals, an application specific integrated circuit (ASIC) having appropriate combinational logic gates, a programmable gate array(s) (PGA), a field programmable gate array (FPGA), etc.
The technical effects and benefits of exemplary embodiments include automatic determination and handling of subexpression overlap for FSA transformations.
The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the invention. As used herein, the singular forms “a”, “an”, and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof.
The corresponding structures, materials, acts, and equivalents of all means or step plus function elements in the claims below are intended to include any structure, material, or act for performing the function in combination with other claimed elements as specifically claimed. The description of the present invention has been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the invention in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the invention. The embodiment was chosen and described in order to best explain the principles of the invention and the practical application, and to enable others of ordinary skill in the art to understand the invention for various embodiments with various modifications as are suited to the particular use contemplated.
Hagleitner, Christoph, Lunteren, Jan Van, Atasu, Kubilay, Doerfler, Florian
Patent | Priority | Assignee | Title |
10169451, | Apr 20 2018 | International Business Machines Corporation | Rapid character substring searching |
10732972, | Aug 23 2018 | International Business Machines Corporation | Non-overlapping substring detection within a data element string |
10747819, | Apr 20 2018 | International Business Machines Corporation | Rapid partial substring matching |
10782968, | Aug 23 2018 | International Business Machines Corporation | Rapid substring detection within a data element string |
10996951, | Sep 11 2019 | International Business Machines Corporation | Plausibility-driven fault detection in string termination logic for fast exact substring match |
11042371, | Sep 11 2019 | International Business Machines Corporation | Plausability-driven fault detection in result logic and condition codes for fast exact substring match |
Patent | Priority | Assignee | Title |
6108676, | Oct 28 1996 | Fuji Xerox Co., Ltd. | Document processing apparatus, document type determining method, and hierarchical regular expression determining method |
7085918, | Jan 09 2003 | Cisco Technology, Inc | Methods and apparatuses for evaluation of regular expressions of arbitrary size |
7689530, | Jan 10 2003 | Cisco Technology, Inc.; Cisco Technology, Inc | DFA sequential matching of regular expression with divergent states |
20050012521, | |||
20070226362, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Aug 10 2012 | International Business Machines Corporation | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Aug 11 2017 | REM: Maintenance Fee Reminder Mailed. |
Jan 29 2018 | EXP: Patent Expired for Failure to Pay Maintenance Fees. |
Date | Maintenance Schedule |
Dec 31 2016 | 4 years fee payment window open |
Jul 01 2017 | 6 months grace period start (w surcharge) |
Dec 31 2017 | patent expiry (for year 4) |
Dec 31 2019 | 2 years to revive unintentionally abandoned end. (for year 4) |
Dec 31 2020 | 8 years fee payment window open |
Jul 01 2021 | 6 months grace period start (w surcharge) |
Dec 31 2021 | patent expiry (for year 8) |
Dec 31 2023 | 2 years to revive unintentionally abandoned end. (for year 8) |
Dec 31 2024 | 12 years fee payment window open |
Jul 01 2025 | 6 months grace period start (w surcharge) |
Dec 31 2025 | patent expiry (for year 12) |
Dec 31 2027 | 2 years to revive unintentionally abandoned end. (for year 12) |