NTFS Hard Links Subvert Auditing (A081602-1)

From: @stake Advisories (@stake)
Date: Fri Aug 16 2002 - 07:16:24 PDT

  • Next message: Auriemma Luigi: "Apache 2.0.39 directory traversal and path disclosure bug"

    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1
    
    
    
                                   @stake Inc.
                                www.atstake.com
    
                               Security Advisory       
           
    Advisory Name: NTFS Hard Links Subvert Auditing (A081602-1)
     Release Date: 08/16/2002
      Application: Windows NT 4.0, Windows 2000 SP2
         Platform: Windows NT 4.0, Windows 2000 SP2
         Severity: File Auditing can be subverted
           Author: Chris Wysopal (cwysopalat_private)
    Vendor Status: Vendor has service pack update (SP3) for Windows 2000
    CVE Candidate: CAN-2002-0725
        Reference: www.atstake.com/research/advisories/2000/a081602-1.txt
                         
    
    Overview:
    		
    The NTFS filesystem supports hard links.  A hard link is another
    directory entry that points to the same physical file on disk.  This
    allows you to have multiple pathnames to the same file within a
    partition. Once the hard link is created any file I/O operations on
    the hard link act as if they were done on the original file. The ACL
    of the original file are used. The auditng entries for the original
    file are used.
    
    The auditing mechanism of Windows NT and Windows 2000 does not
    understand hard links so it produces some erroneous results. The
    results allow an attacker to access files through hard links
    such that the name of the file being accessed does not appear in the
    security event log. Instead, the file name of the hard link appears
    in the event log.  The hard link can be deleted after accessing the
    file thus eliminating any trace of the file I/O activity.
    
    Since the ACL on the file is enforced, the hard link does not grant 
    the user any extra privileges. The hardlink does however allow
    a user to access the file within her privileges without leaving
    an audit trail. Since this problem has existed for many years
    all archived audit logs are suspect.
    
    
    Detailed Description:
    
    NTFS has always supported hard links in order to support the POSIX
    subsystem which requires them.  They are seldom used by NT users.
    Windows NT 3.51 and NT 4.0 have the Win32 API function 
    BackupWrite() which can create hardlinks. Windows 2000
    introduced a new, simpler Win32 API function CreateHardLink().  The
    usage of these functions, as well as a sample hard link creation 
    program, ln, were documented by Microsoft in a knowledge base
    article:
    
    Q234727 HOWTO: Create Hard Links in Windows NT and Windows 2000 
    http://support.microsoft.com/support/kb/articles/Q234/7/27.ASP
    
    (Unfortunately this KB article has been deleted.)
    
    Note: If you are going to compile and use the Microsoft example you
    will want to make one small change.  The CreateFile function does
    not need the FILE_WRITE_ATTRIBUTES flag.  Elimination of this 
    flag allows you to create hardlinks without creating a
    WriteAttributes access event. I made this change to the ln.exe I run
    for my examples below.
    
    If full auditing of a file is enabled, one entry will be created in
    the security event log when the hard link is created.  This event is
    ReadAttributes.  This is the same audit event that is generated if a
    user views the properties of a file. If ReadAttributes auditing is 
    not enabled then no auditing event will be generated when the
    hard link is created.
    
    It is worth noting that since the ReadAttributes Success event is an
    event that occurs when the properties of a file are read, it is an
    event that is not often audited.  If this event is not audited
    there is no trace of the hard link creation in the event log.
    
    For the example however we will assume the most secure and stringent
    auditing of all events.
    
    Example:
    
    Using Windows 2000.
    
    1. Create a file c:\audited\foo.txt
    
    2. Enable auditing of all events for c:\audited\foo.txt
    
    3. Create a hard link named c:\temp\link.txt that links to 
       c:\audited\foo.txt using ln.exe compiled from KB Q234727 
    
       ln c:\audited\foo.txt c:\temp\link.txt
    
    4. Security log will show a Success Audit:
    
       Object Open:
       Object Server:       Security
       Object Type:	        File
       Object Name:	        c:\audited\foo.txt
       New Handle ID:       48
       Operation ID:        {0,14421507}
       Process ID:	        1148
       Primary User Name:	user
       Primary Domain:	DOMAIN
       Primary Logon ID:	(0x0,0xA8F7)
       Client User Name:	-
       Client Domain:	-
       Client Logon ID:	-
       Accesses             SYNCHRONIZE 
                            ReadAttributes 
       Privileges		-
    
       To the audit reviewer it looks like the user has read the
       properties of c:\audited\foo.txt. There is no trace that
       c:\temp\link.txt is linked to foo.txt.
    
    
    5. Read the file c:\temp\link.txt
    
       Security log will show a Success Audit:
    
       Object Open:
       Object Server:       Security
       Object Type:         File
       Object Name:         c:\temp\link.txt
       New Handle ID:       96
       Operation ID:        {0,14425896}
       Process ID:          1364
       Primary User Name:   user
       Primary Domain:      DOMAIN
       Primary Logon ID:	(0x0,0xA8F7)
       Client User Name:    -
       Client Domain:       -
       Client Logon ID:     -
       Accesses             READ_CONTROL 
                            SYNCHRONIZE 
                            ReadData (or ListDirectory) 
                            ReadEA 
                            ReadAttributes 
       Privileges           -
    
       To the audit reviewer it looks like the user has read the
       data of c:\temp\link.txt when they have really read the data
       in foo.txt.
    	
    
    An audit event was recorded when the file was read but it contains
    the *wrong* file name.  There is no audit entry for the link creation
    so there is no correlation in the audit log connecting the new file
    name with the original file that is being audited. Because of the lack
    of connection we were able to read the contents of the file
    c:\audited\foo.txt without a ReadData audit event occuring on that
    file name.
    
    After the file has been read or copied the hard link can be deleted thus
    eliminating any traces of malfeasance. 
    
    
    Vendor Response:
    
    The vendor was informed of this issue on 8/15/2000.  It was 
    determined that the issue was too risky to fix in a hotfix
    patch so the fix was scheduled for Windows 2000 SP3.  XP and
    .Net server beta were fixed before they shipped.
    
    The solution was to this vulnerability was to create a new "Hard link
    creation attempt" audit event.  This creates a audit entry that
    connects the new hard link file name to the target file name. 
    
    The audit entry looks like this:
    
    Event Type:	Success Audit
    Event Source:	Security
    Event Category:	Object Access 
    Event ID:	568
    Date:		8/5/2002
    Time:		6:29:32 PM
    User:		DOMAIN\user
    Computer:	COMPUTER
    Description:
    Hard link creation attempt:
    Primary User Name:	user
    Primary Domain:	DOMIAN
    Primary Logon ID:	(0x0,0xFF10)
    File Name:	C:\audited\foo.txt
    Link Name:	C:\temp\link.txt
    
    A tool has also been created so that you can search for hard links
    that already exist on your system prior to installing SP3. This
    is recommended if you are auditing sensitive files on a system
    that has multiple user access.
    
    http://www.microsoft.com/windows2000/techinfo/reskit/tools/new/
    hlscan-o.asp
    
    note: URL wrapped
    
    
    Recommendations:
    
    Apply the fix. There really is no workaround to the problem.
    All audit logs created before installing the fix are suspect.
    
    If you are auditing sensitive files on a system that has multiple user
    access you should search for all hard links that exist on your system
    prior to installing the patch.
    
    
    Common Vulnerabilities and Exposures (CVE) Information:
    
    The Common Vulnerabilities and Exposures (CVE) project has
    assigned the following names to these issues.  These are candidates for
    inclusion in the CVE list (http://cve.mitre.org), which standardizes
    names for security problems.
    
      CAN-2002-0725 NTFS Hardlinks Subvert Auditing
    
    
    @stake Vulnerability Reporting Policy:
    http://www.atstake.com/research/policy/
    
    @stake Advisory Archive:
    http://www.atstake.com/research/advisories/
    
    PGP Key:
    http://www.atstake.com/research/pgp_key.asc
    
    Copyright 2002 @stake, Inc. All rights reserved.
    
    
    
    -----BEGIN PGP SIGNATURE-----
    Version: PGP 7.0.3
    
    iQA/AwUBPVz/cUe9kNIfAm4yEQLpQACgrY1Nj0jrpUS9nzYllcBJJcSNTE4AoJ3L
    ZqLkXT79NMRqyDVEiv6+fsfP
    =/C7y
    -----END PGP SIGNATURE-----
    



    This archive was generated by hypermail 2b30 : Fri Aug 16 2002 - 08:27:19 PDT