All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: Eric Paris <eparis@redhat.com>
Cc: malware-list@lists.printk.net, linux-kernel@vger.kernel.org
Subject: Re: [malware-list] [RFC 0/5] [TALPA] Intro to a linux interface for on access scanning
Date: Mon, 4 Aug 2008 15:32:49 -0700	[thread overview]
Message-ID: <20080804223249.GA10517@kroah.com> (raw)
In-Reply-To: <1217883616.27684.19.camel@localhost.localdomain>

On Mon, Aug 04, 2008 at 05:00:16PM -0400, Eric Paris wrote:
> Please contact me privately or (preferably the list) for questions,
> comments, discussions, flames, names, or anything.  I'll do complete
> rewrites of the patches if someone tells me how they don't meet their
> needs or how they can be done better.  I'm here to try to bridge the
> needs (and wants) of the anti-malware vendors with the technical
> realities of the kernel.  So everyone feel free to throw in your two
> cents and I'll try to reconcile it all.  These 5 patches are part 1.
> They give us a working able solution.
> 
> >From my point of view patches forthcoming and mentioned below should
> help with performance for those who actually have userspace scanners but
> also could presents be implemented using this framework.
> 
> 
> Background
> ++++++++++
> There is a consensus in the security industry that protecting against
> malicious files (viruses, root kits, spyware, ad-ware, ...) by the way
> of so-called on-access scanning is usable and reasonable approach.
> Currently the Linux kernel does not offer a completely suitable
> interface to implement such security solutions.  Present solutions
> involve overwriting function pointers in the LSM, in filesystem
> operations, in the sycall table, and other fragile hacks.  The purpose
> of this project is to create a fast, clean interface for userspace
> programs to look for malware when files are accessed.  This malware may
> be ultimately intended for this or some other Linux machine or may be
> malware intended to attack a host running a different operating system
> and is merely in transit across the Linux server.  Since there are
> almost an infinite number of ways in which information can enter and
> exit a server it is not seen as reasonable to move these checks to all
> the applications at the boundary (MTA, NFS, CIFS, SSH, rsync, et al.) to
> look for such malware on at the border.
> 
> For this Linux kernel interface speed is of particular interest for
> those who have it compiled into the kernel but have no userspace client.
> There must be no measurable performance hit to just compiling this into
> the kernel.
> 
> Security vendors, Linux distributors and other interested parties have
> come together on the malware-list mailing list to discuss this problem
> and see if they can work together to propose a solution. During these
> talks couple of requirement sets were posted with the aim of fleshing
> out common needs as a prerequisite of creating an interface prototype.

These requirements were posted?  Where?  I don't recall seeing them.

> Collated requirements
> +++++++++++++++++++++
>   1. Intercept file opens (exec also) for vetting (block until
>   decision is made) and allow some userspace black magic to make
>   decisions.
>   2. Intercept file closes for scanning post access
>   3. Cache scan results so the same file is not scanned on each and every access
>   4. Ability to flush the cache and cause all files to be re-scanned when accessed
>   5. Define which filesystems are cacheable and which are not
>   6. Scan files directly not relying on path.  Avoid races and problems with namespaces, chroot, containers, etc.
>   7. Report other relevant file, process and user information associated with each interception
>   8. Report file pathnames to userspace (relative to process root, current working directory)
>   9. Mark a processes as exempt from on access scanning
>  10. Exclude sub-trees from scanning based on filesystem (exclude procfs, sysfs, devfs)
>  11. Exclude sub-trees from scanning based on filesystem path
>  12. Include only certain sub-trees from scanning based on filesystem path
>  13. Register more than one userspace client in which case behavior is restrictive

I don't see anything in the list above that make this a requirement that
the code to do this be placed within the kernel.

What is wrong with doing it in glibc or some other system-wide library
(LD_PRELOAD hooks, etc.)?

> 1., 2. Basic interception
> -------------------------
> Core requirement is to intercept access to files and prevent it if
> malicious content is detected.  This is done on open, not on read.  It
> may be possible to do read time checking with minimal performance impact
> although not currently implemented.  This means that the following race
> is possible
> 
>    Process1              Process2
>     - open file RD
>                           - open file WR
>                           - write virus data (1)
>     - read virus data

Wonderful, we are going to implement a solution that is known to not
work, with a trivial way around it?

Sorry, that's not going to fly.

> *note that any open after (1) will get properly vetted.  At this time
> the likely hood of this being a problem vs the performance impact of
> scanning on read and the increased complexity of the code means this is
> left out.  This should not be a problem for local executables as writes
> to files opened to be run typically return ETXTBSY.

Are you sure about this?

> One of the most important filters in the evaluation chain implements an
> interface through which an userspace process can register and receive
> vetting requests. Userspace process opens a misc character device to
> express its interest and then receives binary structures from that
> device describing basic interception information. After file contents
> have been scanned a vetting response is sent by writing a different
> binary structure back to the device and the intercepted process
> continues its execution.  These are not done over network sockets and no
> endian conversions are done.  The client and the kernel must have the
> same endian configuration.

How about the same 64/32bit requirement?  Your implementation is
incorrect otherwise.

(hint, your current patch is also wrong in this area, you should fix
that up...)

And a binary structure?  Ick, are you trying to make it hard for future
expansions and such?

And why not netlink/network socket?  Why a character device?  You are
already using securityfs, why not use a file node in there?

> 6. Direct access to file content
> --------------------------------
> When an userspace daemon receives a vetting request, it also receives a
> new RO file descriptor which provides direct access to the inode in
> question. This is to enable access to the file regardless of it
> accessibility from the scanner environment (consider process namespaces,
> chroot's, NFS).  The userspace client is responsible for closing this
> file when it is finished scanning.

Is this secondary file handle properly checked for the security issues
involved with such a thing?  What happens if the userspace client does
not close the file handle?

> 7. Other reporting
> ------------------
> Along with the fd being installed in the scanning process the process
> gets a binary structure of data including: 

What's with the love of binary structures? :)

> +       uint32_t version;
> +       uint32_t type;
> +       int32_t fd;
> +       uint32_t operation;
> +       uint32_t flags;
> +       uint32_t mode;
> +       uint32_t uid;
> +       uint32_t gid;
> +       uint32_t tgid;
> +       uint32_t pid;

What happens when the world moves to 128bit or 64bit uids?  (yes, I've
seen proposals for such a thing...)

Why would userspace care about these meta-file things, what does it want
with them?

> 8. Path name reporting
> ----------------------
> When a malicious content is detected in a file it is important to be
> able to report its location so the user or system administrator can take
> appropriate actions.
> 
> This is implemented in a amazingly simple way which will hopefully avoid
> the controversy of some other solutions. Path name is only needed for
> reporting purposes and it is obtained by reading the symlink of the
> given file descriptor in /proc.  Its as simple as userspace calling:
> 
> snprintf(link, sizeof(link), "/proc/self/fd/%d", details.fd);
> ret = readlink(link, buf, sizeof(buf)-1);

Cute hack.  What's to keep it from racing with the fd changing from the
original program?

> 9. Process exclusion
> --------------------
> Sometimes it is necessary to exclude certain processes from being
> intercepted. For example it might be a userspace root kit scanner which
> would not be able to find root kits if access to them was blocked by the
> on-access scanner.
> 
> To facilitate that we have created a special file a process can open and
> register itself as excluded. A flag is then put into its kernel
> structure (task_struct) which makes it excluded from scanning.
> 
> This implementation is very simple and provides greatest performance. In
> the proposed implementation access to the exclusion device is controlled
> though permissions on the device node which are not sufficient.  An LSM
> call will need to be made for this type or access in a later patch.

Heh, so if you want to write a "virus" for Linux, just implement this
flag.  What's to keep a "rogue" program from telling the kernel that all
programs on the system are to be excluded?

> 10. Filesystem exclusions
> -------------------------
> One pretty important optimization is not to scan things like /proc, /sys
> or similar. Basically all filesystems where user can not store
> arbitrary, potentially malicious, content could and should be excluded
> from scanning.

Why, does scanning these files take extra time?  Just curious.

> 11. Path exclusions
> -------------------
> The need for exclusions can be demonstrated with an example of a MySQL
> server. It's data files are frequently modified which means they would
> need to be constantly rescanned which is very bad for performance. Also,
> it is most often not even possible to reasonably scan them. Therefore
> the best solution is not to scan its database store which can simply be
> implemented by excluding the store subdirectory.
> 
> It is a relatively simple implementation which allows run-time
> configuration of a list of sub directories or files to exclude.
> Exclusion paths are relative to each process root. So for example if we
> want to exclude /var/lib/mysql/ and we have a mysql running in a chroot
> where from the outside that directory actually lives
> in /chroot/mysql/var/lib/mysql, /var/lib/mysql should actually be added
> to the exclusion list.
> 
> This is also not included in the initial patch set but will be coming
> shortly after.

Again, what's to keep all files to be marked as excluded?

> Closing remarks
> ---------------
> Although some may argue some of the filters are not necessary or may
> better be implemented in userspace, we think it is better to have them
> in kernel primarily for performance reasons.

Why?  What numbers do you have that say the kernel is faster in
implementing this?  This is the first mention of such a requirement, we
need to see real data to back it up please.

> Secondly, it is all simple code not introducing much baggage or risk
> into the kernel itself.

I disagree, see above.

thanks,

greg k-h

  reply	other threads:[~2008-08-04 22:35 UTC|newest]

Thread overview: 220+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-04 21:00 [RFC 0/5] [TALPA] Intro to a linux interface for on access scanning Eric Paris
2008-08-04 22:32 ` Greg KH [this message]
2008-08-05  0:26   ` [malware-list] " Christoph Hellwig
2008-08-05  0:47     ` Eric Paris
2008-08-05  0:54       ` Christoph Hellwig
2008-08-05  5:49         ` Kyle Moffett
2008-08-05 12:32           ` Alan Cox
2008-08-05 11:31         ` Alan Cox
2008-08-05 14:06           ` Peter Zijlstra
2008-08-05 14:09             ` Alan Cox
2008-08-05 17:58           ` Nick Piggin
2008-08-06  2:41         ` Andi Kleen
2008-08-06 18:04           ` Rik van Riel
2008-08-05  0:32   ` Eric Paris
2008-08-05  0:35     ` Eric Paris
2008-08-05  0:51     ` Greg KH
2008-08-05 11:23       ` Alan Cox
2008-08-05 17:03         ` Greg KH
2008-08-05 18:56           ` Eric Paris
2008-08-05 20:30             ` Greg KH
2008-08-06 18:49               ` Eric Paris
2008-08-06 21:02                 ` Theodore Tso
2008-08-06 21:28                   ` Eric Paris
2008-08-06 21:52                     ` Theodore Tso
2008-08-07 14:16                       ` Eric Paris
2008-08-07 21:55                         ` David Wagner
2008-08-08  2:06                         ` Rene Herman
2008-08-08  2:15                           ` Eric Paris
2008-08-08  2:55                             ` Rene Herman
2008-08-08 11:58                               ` Press, Jonathan
2008-08-08 12:34                                 ` Rene Herman
2008-08-08 13:11                                   ` Press, Jonathan
2008-08-08 13:43                                     ` Rene Herman
2008-08-05 11:25       ` Alan Cox
2008-08-05 17:01         ` Greg KH
2008-08-05 20:36           ` Alan Cox
2008-08-05 19:46       ` Eric Paris
2008-08-05 20:15         ` Greg KH
2008-08-06  9:37           ` tvrtko.ursulin
2008-08-06 15:25             ` Greg KH
2008-08-06 15:41               ` Eric Paris
2008-08-06 16:03               ` tvrtko.ursulin
2008-08-06  9:28         ` tvrtko.ursulin
2008-08-05 14:41     ` [malware-list] [RFC 0/5] [TALPA] Intro to a linux interface foron " Press, Jonathan
2008-08-05 14:56       ` Eric Paris
2008-08-05 16:37         ` [malware-list] [RFC 0/5] [TALPA] Intro to a linux interfaceforon " Press, Jonathan
2008-08-05 17:19           ` Eric Paris
2008-08-05 17:38             ` Arjan van de Ven
2008-08-05 17:29               ` Alan Cox
2008-08-05 18:02                 ` Arjan van de Ven
2008-08-05 20:12                   ` Alan Cox
2008-08-05 20:41                     ` Arjan van de Ven
2008-08-05 18:04               ` Press, Jonathan
2008-08-05 18:11                 ` Greg KH
2008-08-05 18:38                   ` [malware-list] [RFC 0/5] [TALPA] Intro to a linuxinterfaceforon " Press, Jonathan
2008-08-05 18:54                     ` Theodore Tso
2008-08-05 20:37                       ` [malware-list] [RFC 0/5] [TALPA] Intro to alinuxinterfaceforon " Press, Jonathan
2008-08-05 21:14                         ` Greg KH
2008-08-05 21:23                           ` [malware-list] [RFC 0/5] [TALPA] Intro to alinuxinterfaceforonaccess scanning Press, Jonathan
2008-08-05 21:42                             ` Arjan van de Ven
2008-08-05 21:44                             ` Greg KH
     [not found]                               ` <2629CC4E1D22A64593B02C43E855530303E21D47@USILMS12.ca.com>
2008-08-05 22:26                                 ` [malware-list] [RFC 0/5] [TALPA] Intro toalinuxinterfaceforonaccess scanning Greg KH
2008-08-05 23:37                                   ` Al Viro
2008-08-05 23:48                                     ` Eric Paris
2008-08-05 23:57                                       ` Theodore Tso
2008-08-06  0:11                                       ` Greg KH
2008-08-06  0:25                                         ` Eric Paris
2008-08-06  0:46                                           ` Rik van Riel
2008-08-06  1:44                                             ` Theodore Tso
2008-08-08 10:48                                               ` [malware-list] Threat model for Unix Computers Jörg Ostertag
2008-08-08 22:26                                                 ` Peter Dolding
2008-08-09  1:21                                                 ` david
2008-08-09  1:44                                                 ` Ulrich Drepper
2008-08-05 23:55                                 ` [malware-list] [RFC 0/5] [TALPA] Intro toalinuxinterfaceforonaccess scanning Theodore Tso
2008-08-06 10:25                                   ` Pavel Machek
2008-08-05 21:45                             ` [malware-list] [RFC 0/5] [TALPA] Intro to alinuxinterfaceforonaccess scanning Al Viro
2008-08-05 20:18                     ` [malware-list] [RFC 0/5] [TALPA] Intro to a linuxinterfaceforon access scanning Greg KH
2008-08-05 20:28                       ` [malware-list] [RFC 0/5] [TALPA] Intro to alinuxinterfaceforon " Press, Jonathan
2008-08-05 20:51                         ` Eric Paris
2008-08-05 21:08                           ` Arjan van de Ven
2008-08-06  0:51                     ` [malware-list] [RFC 0/5] [TALPA] Intro to a linuxinterfaceforon " Rik van Riel
2008-08-06 12:10                       ` Press, Jonathan
2008-08-06 12:38                         ` Peter Dolding
2008-08-06 13:11                           ` Press, Jonathan
2008-08-06 13:49                             ` Arjan van de Ven
2008-08-06 13:55                               ` Eric Paris
2008-08-06 14:11                                 ` Peter Dolding
2008-08-06 14:20                                   ` Serge E. Hallyn
2008-08-06 13:57                             ` Peter Dolding
2008-08-06 11:31                               ` [malware-list] [RFC 0/5] [TALPA] Intro to a linux interfaceforon " David Collier-Brown
2008-08-06 23:20                                 ` Peter Dolding
2008-08-06 13:44                         ` [malware-list] [RFC 0/5] [TALPA] Intro to a linuxinterfaceforon " Arjan van de Ven
2008-08-06 14:16                           ` tvrtko.ursulin
2008-08-06 14:23                             ` Arjan van de Ven
2008-08-06 15:22                             ` Theodore Tso
2008-08-06 15:54                               ` tvrtko.ursulin
2008-08-07  9:28                             ` Pavel Machek
2008-08-07 14:21                               ` Peter Dolding
2008-08-07 14:31                                 ` Eric Paris
2008-08-08  0:05                                   ` Peter Dolding
2008-08-08  5:17                                     ` James Morris
2008-08-06 15:08                         ` Theodore Tso
2008-08-06 15:33                           ` [malware-list] [RFC 0/5] [TALPA] Intro to alinuxinterfaceforon " Press, Jonathan
2008-08-06 15:46                             ` Rik van Riel
2008-08-06 16:12                               ` tvrtko.ursulin
2008-08-06 16:25                                 ` Rik van Riel
2008-08-06 18:06                                   ` Eric Paris
2008-08-05 20:17                   ` [malware-list] [RFC 0/5] [TALPA] Intro to a linux interfaceforon " Alan Cox
2008-08-06  9:24                   ` tvrtko.ursulin
2008-08-06 15:24                     ` Greg KH
2008-08-05 18:27                 ` Arjan van de Ven
2008-08-05 18:34                   ` Press, Jonathan
2008-08-05 18:38                     ` Greg KH
2008-08-05 20:15                       ` [malware-list] [RFC 0/5] [TALPA] Intro to a linuxinterfaceforon " Press, Jonathan
2008-08-05 20:26                         ` Greg KH
2008-08-06 10:05                           ` tvrtko.ursulin
2008-08-06 10:50                             ` Adrian Bunk
2008-08-06 11:07                               ` tvrtko.ursulin
2008-08-06 11:26                                 ` Adrian Bunk
2008-08-07  0:49                                   ` Mihai Donțu
2008-08-07  4:39                                     ` Arjan van de Ven
2008-08-11 13:45                                       ` Mihai Donțu
2008-08-11 13:56                                         ` Arjan van de Ven
2008-08-11 16:11                                           ` David Collier-Brown
2008-08-11 21:18                                             ` Press, Jonathan
2008-08-11 22:09                                               ` David Wagner
2008-08-12  7:32                                                 ` Alan Cox
2008-08-13 10:28                                               ` Pavel Machek
2008-08-13 10:46                                                 ` Press, Jonathan
2008-08-13 11:08                                                   ` Peter Dolding
2008-08-13 12:56                                                   ` Pavel Machek
2008-08-13 13:52                                                     ` tvrtko.ursulin
2008-08-14 12:54                                                       ` Pavel Machek
2008-08-14 18:37                                                         ` [malware-list] [RFC 0/5] [TALPA] Intro to alinuxinterfaceforon " Press, Jonathan
2008-08-14 22:39                                                           ` Pavel Machek
2008-08-15  0:00                                                             ` Rik van Riel
2008-08-15  0:43                                                               ` Theodore Tso
2008-08-15  1:02                                                                 ` Rik van Riel
2008-08-15  3:00                                                                 ` Eric Paris
2008-08-15  5:22                                                                   ` david
2008-08-15  5:33                                                                     ` david
2008-08-15  5:38                                                                       ` david
2008-08-17 22:14                                                                     ` Pavel Machek
2008-08-17 22:12                                                                   ` Pavel Machek
2008-08-17 22:47                                                                     ` david
2008-08-17 22:58                                                                       ` Pavel Machek
2008-08-17 23:24                                                                         ` david
2008-08-18  0:00                                                                         ` Casey Schaufler
2008-08-18  0:17                                                                           ` david
2008-08-18  0:31                                                                             ` Peter Dolding
2008-08-18  0:39                                                                               ` david
2008-08-18  0:42                                                                             ` Casey Schaufler
2008-08-18  0:07                                                                         ` Rik van Riel
2008-08-19 10:41                                                                           ` Pavel Machek
2008-08-15  8:35                                                                 ` Alan Cox
2008-08-15 11:35                                                                   ` Theodore Tso
2008-08-15 12:57                                                                     ` [malware-list] [RFC 0/5] [TALPA] Intro to alinuxinterfaceforonaccess scanning Press, Jonathan
2008-08-15 13:16                                                                       ` Theodore Tso
2008-08-15 13:22                                                                         ` douglas.leeder
2008-08-15 13:28                                                                           ` douglas.leeder
2008-08-15 13:55                                                                           ` Theodore Tso
2008-08-15 14:19                                                                             ` douglas.leeder
2008-08-15 15:42                                                                             ` Valdis.Kletnieks
2008-08-17 22:10                                                                   ` [malware-list] [RFC 0/5] [TALPA] Intro to alinuxinterfaceforon access scanning Pavel Machek
2008-08-13 13:58                                                     ` [malware-list] [RFC 0/5] [TALPA] Intro to a linuxinterfaceforon " Arjan van de Ven
2008-08-13 13:54                                                   ` Arjan van de Ven
2008-08-13 14:16                                                     ` tvrtko.ursulin
2008-08-13 14:28                                                       ` Arjan van de Ven
2008-08-13 15:19                                                         ` tvrtko.ursulin
2008-08-14 12:56                                                       ` Pavel Machek
2008-08-14 20:06                                                         ` Alan Cox
2008-08-14 22:35                                                           ` Pavel Machek
2008-08-11 21:53                                             ` David Wagner
2008-08-11 21:45                                               ` Alan Cox
2008-08-14 10:48                                               ` David Collier-Brown
2008-08-06 15:00                                 ` Theodore Tso
2008-08-06 15:17                             ` Greg KH
2008-08-06 15:22                               ` Eric Paris
2008-08-05 20:38                         ` Arjan van de Ven
2008-08-05 20:54                           ` Eric Paris
2008-08-05 21:05                           ` Al Viro
2008-08-05 18:38                     ` [malware-list] [RFC 0/5] [TALPA] Intro to a linux interfaceforon " Arjan van de Ven
2008-08-05 18:39                   ` Eric Paris
2008-08-06  0:30                     ` Rik van Riel
2008-08-06  1:55                       ` Eric Paris
2008-08-06 11:40                     ` Sidebar to [malware-list] [RFC 0/5] [TALPA] Intro to a linux interface for on " David Collier-Brown
2008-08-06  0:22                 ` [malware-list] [RFC 0/5] [TALPA] Intro to a linux interfaceforon " Rik van Riel
2008-08-06  0:53                   ` jmorris
2008-08-06  2:46       ` [malware-list] [RFC 0/5] [TALPA] Intro to a linux interface foron " Andi Kleen
2008-08-06  8:39     ` [malware-list] [RFC 0/5] [TALPA] Intro to a linux interface for on " tvrtko.ursulin
2008-08-05 11:21   ` Helge Hafting
2008-08-05 17:04     ` Greg KH
2008-08-05  2:49 ` Casey Schaufler
2008-08-05  3:01   ` Cliffe
2008-08-05  3:44     ` Casey Schaufler
2008-08-05  3:45       ` Cliffe
2008-08-05 20:56       ` Paul Moore
2008-08-06  3:00         ` Casey Schaufler
2008-08-06 14:18           ` Paul Moore
2008-08-07  0:49             ` Casey Schaufler
2008-08-05  3:46     ` Greg KH
2008-08-05  3:58       ` Cliffe
2008-08-05 12:05         ` Peter Dolding
2008-08-05 12:22       ` Alan Cox
2008-08-05 18:08 ` Nick Piggin
2008-08-06  9:44   ` [malware-list] " tvrtko.ursulin
2008-08-06 11:10     ` Nick Piggin
2008-08-06 11:29       ` tvrtko.ursulin
2008-08-06 16:57         ` Nick Piggin
2008-08-05 22:55 ` J. Bruce Fields
2008-08-06 10:09   ` [malware-list] " tvrtko.ursulin
2008-08-06 22:24     ` David Wagner
2008-08-07  0:04       ` James Morris
2008-08-07 10:30         ` Alan Cox
2008-08-07 11:19       ` tvrtko.ursulin
2008-08-06  2:35 ` Andi Kleen
2008-08-06  3:43   ` Eric Paris
2008-08-06  3:52     ` Andi Kleen
2008-08-06 22:04 ` David Wagner
2008-08-18 14:06 ` John Moser

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080804223249.GA10517@kroah.com \
    --to=greg@kroah.com \
    --cc=eparis@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=malware-list@lists.printk.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.