The JavaScript language is used to enhance the client-side display of web pages. JavaScript code is downloaded into browsers and executed on-the-fly by an embedded interpreter. Browsers provide sand-boxing mechanisms to prevent JavaScript code from compromising the security of the client's environment, but, unfortunately, a number of attacks exist that can be used to steal users' credentials (e.g., cross-site scripting attacks) and lure users into providing sensitive information to unauthorized parties (e.g., phishing attacks). We propose an approach to solve this problem that is based on monitoring JavaScript code execution and comparing the execution to high-level policies, to detect malicious code behavior. To achieve this goal it is necessary to provide a mechanism to audit the execution of JavaScript code. This is a difficult task, because of the close integration of JavaScript with complex browser applications, such as Mozilla. This paper presents the first existing implementation of an auditing system for JavaScript interpreters and discusses the pitfalls and lessons learned in developing the auditing mechanism.
[1]
Robert Wahbe,et al.
Efficient software-based fault isolation
,
1994,
SOSP '93.
[2]
David Flanagan,et al.
JavaScript: The Definitive Guide
,
1996
.
[3]
Jonathan T. Moore,et al.
Mobile Code Security Techniques
,
1998
.
[4]
Jonathan Robie,et al.
Document Object Model (DOM) Level 2 Specification
,
1998
.
[5]
Alain J. Mayer,et al.
Secure Web Scripting
,
1998,
IEEE Internet Comput..
[6]
John K. Ousterhout,et al.
The Safe-Tcl Security Model
,
1998,
USENIX Annual Technical Conference.
[7]
David Wagner,et al.
Janus: an Approach for Confinement of Untrusted Applications
,
1999
.
[8]
Matt Bishop,et al.
A Flexible Containment Mechanism for Executing Untrusted Code
,
2002,
USENIX Security Symposium.
[9]
Brian King,et al.
Creating Applications with Mozilla
,
2002
.
[10]
Giovanni Vigna,et al.
Intrusion detection: a brief history and overview
,
2002
.