Shazam!

On Mar 24, 2017 12:48 PM, "Kurt Buff" <[email protected]> wrote:

> ---------- Forwarded message ----------
> From: Stefan Kanthak <[email protected]>
> Date: Tue, Mar 21, 2017 at 11:09 AM
> Subject: [FD] Defense in depth -- the Microsoft way (part 47):
> "AppLocker bypasses are not serviced via monthly security roll-ups"
> To: [email protected]
> Cc: [email protected]
>
>
> Hi @ll,
>
> Windows 8 and newer versions (Windows 7 and Windows Server 2008 R2
> with KB2532445 or KB3125574 installed too) don't allow unprivileged
> callers to circumvent AppLocker and SAFER rules via
>
> LoadLibraryEx(TEXT("<arbitrary DLL>"), NULL, LOAD_IGNORE_CODE_AUTHZ_LEVEL);
>
> See <https://msdn.microsoft.com/en-us/library/ms684179.aspx>
> and <https://support.microsoft.com/kb/2532445>
>
> | LOAD_IGNORE_CODE_AUTHZ_LEVEL        0x00000010
> |
> | If this value is used, the system does not check AppLocker rules
> | or apply Software Restriction Policies for the DLL. This action
> | applies only to the DLL being loaded and not to its dependencies.
> | This value is recommended for use in setup programs that must
> | run extracted DLLs during installation.
> |
> | Windows Server 2008 R2 and Windows 7:
> | On systems with KB2532445 installed, the caller must be running
> | as "LocalSystem" or "TrustedInstaller"; otherwise the system
> | ignores this flag.
>
>
> Unprivileged users can but bypass AppLocker or SAFER alias Software
> Restriction Policies via
>
> STARTUPINFO si = {sizeof(STARTUPINFO)};
> PROCESS_INFORMATION pi = {0};
> CreateProcess(TEXT("<arbitrary exe>"), NULL, NULL, NULL, FALSE,
>               CREATE_PRESERVE_CODE_AUTHZ_LEVEL, NULL, NULL, &si, &pi);
>
> on ALL versions from Windows XP to Windows 10!
>
> See <https://msdn.microsoft.com/en-us/library/ms684863.aspx>
>
> | CREATE_PRESERVE_CODE_AUTHZ_LEVEL    0x02000000
> |
> | Allows the caller to execute a child process that bypasses the
> | process restrictions that would normally be applied automatically
> | to the process.
>
>
> Mitigation:
> ~~~~~~~~~~~
>
> Create an "AppCert.Dll" that exports CreateProcessNotify and
> set the following registry entry
>
> [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
> Manager\AppCertDlls]
> "AppCert.Dll"="<path>\AppCert.Dll"
> ...
>
> Note: AppCertDlls are loaded at the first call of one of the
>       CreateProcess*() functions. Process creation is denied
>       if one of them returns STATUS_UNSUCCESSFUL from its
>       CreateProcessNotify() routine when called with the flag
>       PROCESS_CREATION_QUERY.
>
> --- APPCERT.C ---
> #pragma comment(linker, "/DLL")
> #ifdef _WIN64
> #pragma comment(linker, "/EXPORT:CreateProcessNotify,PRIVATE")
> #else
> #pragma comment(linker,
> "/EXPORT:CreateProcessNotify=_CreateProcessNotify@8,PRIVATE")
> #endif
> #pragma comment(linker, "/NOENTRY")
>
> #include <windows.h>
>
> #define PROCESS_CREATION_QUERY   1L
> #define PROCESS_CREATION_ALLOWED 2L
> #define PROCESS_CREATION_DENIED  3L
>
> NTSTATUS NTAPI CreateProcessNotify(LPCWSTR lpApplicationName, ULONG
> ulReason)
> {
>     NTSTATUS ntStatus = STATUS_SUCCESS;
>
>     switch (ulReason)
>     {
>     case PROCESS_CREATION_QUERY:
>         // called once for each process that is to be created
>         // return STATUS_SUCCESS to allow process creation or
>         // return STATUS_UNSUCCESSFUL to deny process creation
>
>         if (forbidden(lpApplicationName))
>             ntStatus = STATUS_UNSUCCESSFUL;
>
>         break;
>
>     case PROCESS_CREATION_ALLOWED:
>         // called once for each process that is allowed creation
>
>         ...
>
>         break;
>
>     case PROCESS_CREATION_DENIED:
>         // called once for each process that is denied creation
>
>         ...
>
>         break;
>
>     default:
>         ;
>     }
>
>     // the return value is only used for PROCESS_CREATION_QUERY,
>     // all other conditions are ignored
>
>     return ntStatus;
> }
> --- EOF ---
>
>
> stay tuned
> Stefan Kanthak
>
>
> Timeline:
> ~~~~~~~~~
>
> 2017-03-10    sent vulnerability report to vendor
>
> 2017-03-10    reply from vendor: MSRC case 37727 opened
>
> 2017-03-13    reply from vendor: product team is working on case
>
> 2017-03-21    reply from vendor:
>               "The product team has finished their investigation and
>                determined this will be serviced in a future version
>                of Windows. AppLocker bypasses are not serviced via
>                monthly security roll-ups; only major version updates."
>
> 2017-03-21    <https://support.microsoft.com/kb/2532445> but serviced
>               a bypass with a hotfix which was incorporated in later
>               security updates and is included in the "convenience"
>               rollup <https://support.microsoft.com/en-us/kb/3125574>
>
> 2017-03-21    reply from vendor:
>               "If you want this fixed immediately and are an
>                enterprise customer you'll need to work with your
>                Account Manager to open a support case."
>
> 2017-03-21    report published
>
> _______________________________________________
> Sent through the Full Disclosure mailing list
> https://nmap.org/mailman/listinfo/fulldisclosure
> Web Archives & RSS: http://seclists.org/fulldisclosure/
>
>
>

Reply via email to