Home | History | Annotate | Download | only in pocdll
      1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "sandbox/win/sandbox_poc/pocdll/exports.h"
      6 #include "sandbox/win/sandbox_poc/pocdll/utils.h"
      7 
      8 // This file contains the tests used to verify the security of the file system.
      9 
     10 // Tries to open a file and outputs the result.
     11 // "path" can contain environment variables.
     12 // "output" is the stream for the logging.
     13 void TryOpenFile(wchar_t *path, FILE *output) {
     14   wchar_t path_expanded[MAX_PATH] = {0};
     15   DWORD size = ::ExpandEnvironmentStrings(path, path_expanded, MAX_PATH - 1);
     16   if (!size) {
     17     fprintf(output, "[ERROR] Cannot expand \"%S\". Error %S.\r\n", path,
     18             ::GetLastError());
     19   }
     20 
     21   HANDLE file;
     22   file = ::CreateFile(path_expanded,
     23                       GENERIC_READ,
     24                       FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
     25                       NULL,  // No security attributes
     26                       OPEN_EXISTING,
     27                       FILE_FLAG_BACKUP_SEMANTICS,
     28                       NULL);  // No template
     29 
     30   if (file && INVALID_HANDLE_VALUE != file) {
     31     fprintf(output, "[GRANTED] Opening file \"%S\". Handle 0x%p\r\n", path,
     32             file);
     33     ::CloseHandle(file);
     34   } else {
     35     fprintf(output, "[BLOCKED] Opening file \"%S\". Error %d.\r\n", path,
     36             ::GetLastError());
     37   }
     38 }
     39 
     40 void POCDLL_API TestFileSystem(HANDLE log) {
     41   HandleToFile handle2file;
     42   FILE *output = handle2file.Translate(log, "w");
     43 
     44   TryOpenFile(L"%SystemDrive%", output);
     45   TryOpenFile(L"%SystemRoot%", output);
     46   TryOpenFile(L"%ProgramFiles%", output);
     47   TryOpenFile(L"%SystemRoot%\\System32", output);
     48   TryOpenFile(L"%SystemRoot%\\explorer.exe", output);
     49   TryOpenFile(L"%SystemRoot%\\Cursors\\arrow_i.cur", output);
     50   TryOpenFile(L"%AllUsersProfile%", output);
     51   TryOpenFile(L"%UserProfile%", output);
     52   TryOpenFile(L"%Temp%", output);
     53   TryOpenFile(L"%AppData%", output);
     54 }
     55