Project

General

Profile

ThreatScript Definitions » History » Version 1

Luke Murphey, 04/10/2010 01:01 PM

1 1 Luke Murphey
h1. ThreatScript Definitions
2 1 Luke Murphey
3 1 Luke Murphey
ThreatScript Definitions are written in ECMAScript (basically the same as JavaScript). The ThreatScript definitions return a Result object which indicates whether a match was observed.
4 1 Luke Murphey
5 1 Luke Murphey
h2. Meta-Data
6 1 Luke Murphey
7 1 Luke Murphey
ThreatScripts must provide a meta-data that indicates the following information:
8 1 Luke Murphey
9 1 Luke Murphey
| *Name*  | *Valid Input*                                   | *Notes* |
10 1 Luke Murphey
| Name    | <category>.<sub_category>.<definition_name>     |         |
11 1 Luke Murphey
| Version | integer                                         |         |
12 1 Luke Murphey
| ID      | integer                                         |         |
13 1 Luke Murphey
| Message | message to be displayed when definition matches |         |
14 1 Luke Murphey
| Severity| Either: Low, Medium or High                     |         |
15 1 Luke Murphey
16 1 Luke Murphey
h2. ThreatScript Example
17 1 Luke Murphey
18 1 Luke Murphey
Below is an example of a ThreatScript that triggers if the web-page has a form element.
19 1 Luke Murphey
20 1 Luke Murphey
<pre><code class="javascript">
21 1 Luke Murphey
/*
22 1 Luke Murphey
 * Name: Example.General.Has_Form_Tag
23 1 Luke Murphey
 * Version: 1
24 1 Luke Murphey
 * ID: 1000000
25 1 Luke Murphey
 * Message: Indicates if the page has as a form tag
26 1 Luke Murphey
 * Severity: Low
27 1 Luke Murphey
 */
28 1 Luke Murphey
29 1 Luke Murphey
importPackage(Packages.ThreatScript);
30 1 Luke Murphey
importPackage(Packages.HTTP);
31 1 Luke Murphey
32 1 Luke Murphey
function analyze( httpResponse, operation, variables, environment, defaultRule ){
33 1 Luke Murphey
34 1 Luke Murphey
	var parser = httpResponse.getDocumentParser();
35 1 Luke Murphey
	var location = new URL( httpResponse.getLocation() );
36 1 Luke Murphey
37 1 Luke Murphey
	//Get a list of all script tags
38 1 Luke Murphey
	var tagNameFilter = new TagNameFilter("form");
39 1 Luke Murphey
	var nodesList = parser.extractAllNodesThatMatch(tagNameFilter); 
40 1 Luke Murphey
        if( nodesList.size() > 0 ){
41 1 Luke Murphey
	     return new Result( true, "A form was detected" );
42 1 Luke Murphey
	}
43 1 Luke Murphey
        
44 1 Luke Murphey
	return new Result( false, "No forms detected" );
45 1 Luke Murphey
}
46 1 Luke Murphey
</code>
47 1 Luke Murphey
</pre>