En esta sesión presentamos temas que presentan problemas más frecuentes de compatibilidad de aplicaciones diseñadas para Windows XP en Windows 7. Explicamos porque estos problemas ocurren y como evitarles.
1. Compatibilidad de Aplicaciones con Windows 7 Windows 7 SuperHero Technical Readiness Michał Morciniec , micham@microsoft.com Microsoft Ibérica
2. Windows 7 Comparte Base con Windows Vistase mantiene la inversión en Windows Vista Pocos cambios: la mayoría de software para Windows Vista funcionará en Windows 7 – las excepciones posibles – código de bajo nivel (AV, Cortafuegos, Aplicaciones de procesamiento de Imágenes, etc). Hardware que funciona bien en Windows Vista funcionará bien en Windows 7 . Windows 7 Pocos Cambios: Enfoque en rendimiento y estabilidad Profundos Cambios: Nuevos modelos de seguridad, drivers, despliegue, y red
3.
4. Cambios: Vista -> Windows 7 Windows Vista es muy compatible con Windows 7 pero se han introducido cambios en: Versión de Sistema Operativo Cambio en Binarios de Bajo Nivel Alta Resolución de Pantalla (DPI) Cadena de Agente de Usuario en Internet Explorer 8 Otras Regresiones: Eliminación de Windows Mail Eliminación de Windows MovieMaker NationalLanguageSupport (NLS) – Cambio del Orden Eliminación de Reflexión de Registro Windows Eliminación de Driver WPDUSB.SYS para Windows Portable Devices Microsoft MessageQueuing (MSMQ) - SHA-2 es un algoritmo por defecto para el calculo de Hash 4
11. Versión de Sistema Operativo Número de Versión Interno de Windows 7 es 6.1. dwMajorVersion igual como en Vista dwMinorVersion es diferente Problema Cualquier aplicación que comprueba el número de versión obtiene valor más alto que quizás no puede procesar. Instaladores de Aplicaciones pueden fallar Lógica de aplicación puede prevenir el arranque de la misma. Sugerencia de Solución Comprueba funcionalidad en vez de versión Aplique Parche de Compatibilidad “version lie” ( layer o shim) Compara para SS.OO. posteriores (>) a la versión compatible 9
12. Porque Versión 6.1? Muchas aplicaciones solo comprueban dwMajorVersion – Compatibilidad con Vista Algunas aplicaciones han intentado la comprobación pero la han implementado INCORRECTAMENTE: if (majorVersion >= 5 && minorVersion >= 1)
13. Mejores Prácticas para Comprobaciones de Versión de SS.OO No hacer comprobaciones para igualdad (=) Comprobar para versión XP o posterior (>=5.1) Comprobar funcionalidad en vez de versión Seguir ejemplos de código (managed/C++) de Windows 7 Training Kit forDeveloper Puede haber excepciones – certificación para versión de SS.OO determinada
15. Tipos de Cuentas de Usuario Built-in (local machine) Administrator Deshabilitado por defecto Ejecuta con “Full token” de Administrador ProtectedAdministrator Usuario en grupo de Administradores Ejecuta con “Split token” Standard UserorLimitedUserAccount Ninguno de los previamente mencionados No tiene privilegios administrativos 13
22. Abby UAC -Arquitectura Admin Token Admin Token App Child App Admin Token Standard User Token “Standard User” Token Standard User Token App Child App Standard User Token
23. Token Partido (“Split-Token”) Tiene menos privilegios la mayoría del tiempo Permite “elevar” proceso para conseguir privilegios cuando son necesarios Aplica a logons interactivos
27. Control de Configuración de Windows 7 UAC Configuración: Como en Vista Excluye binarios de SS.OO. Como 2 + control aparece en Escritorio del Usuario UAC deshabilitado 20
28. Windows 7 UAC y “Auto-Elevation” Configuración 2 y 3 hace uso de “auto elevación” Binarios firnados con Windows Publishing Certificate En ubicación “segura” %SystemRoot%ystem32 Algunas subcarpetas de %ProgramFiles% (Windows Defender, Windows Journal) Un Listado “especial” de ejecutables (Pkgmgr.exe, Migwiz.exe) 21
29. UAC y Política de Seguridad (W7 y Vista) Cierta funcionalidad de UAC puede ser controlada con Políticas de Seguridad Si Diálogos de UAC se muestran para Admins/Standard Users Si funciona heurística de detección de Instalador Si Diálogos de UAC aparecerán en Escritorio Seguro Virtualización de Registro y Sistema de Ficheros Ex. : Deshabilitar Diálogo OTC para Usuario Estandard (las peticiones de “elevación será automáticamente denegadas) 22
30. XP - Windows 7 UAC Interfaz de Usuario -UI Shield
31. Objetivo del Interfaz de Usuario: Sencillo y Predecible 1 Diseña la aplicación para “Standard User” 2 Claramente identifica tareas administrativas Asegura que usuarios estándar puedes ser productivos Identifica las tareas administrativas con “shield”
32. Interfaz de Usuario: Escudo Se adjunta a los controles para indicar “elevación” es imprescindible para utilizar la funcionalidad No tiene estado ( “hover”, “disabled” etc.) No memoriza/causa “elevación” de proceso Programada mediante: IDI_SHIELD recurso de icono BCM_SETSHIELD mensaje de Windows para botones Másinformación: Enabling UAC Elevation in .Net applications
34. XP - Windows 7 UAC Interfaz de Usuario -UI Shield MIC
35. Mandatory Integrity Control (MIC) Modelo tradicional de seguridad desde NT se basa en el “token” del proceso Windows Vista/Win7 mejora seguridad con MIC: Cada proceso tiene “nivel MIC” Todos los recursos de SS.OO tienen “nivel MIC” (“Medium” por defecto) Los cuatro niveles: 0: Low (IE with Protected Mode On) 1: Medium (Standard User) 2: High (Elevated User) 3: System (System Services)
36. MIC y Recursos Niveles MIC aplican a: Procesos Objetos Componentes COM Servicios Sistema de ficheros Claves de registro Para visualizar nivel MIC utiliza “accesschk –i” (Sysinternals) IE actualmente es la única aplicación con Nivel MIC Bajo Todos los recursos de IE también tienen Nivel Bajo
37. Resumen MIC Simplificado Objetos pueden tener Nivel MIC Almacenado en el descriptor de seguridad (Security Descriptor) Procesos ejecutan con cierto Nivel MIC (IL – IntegrityLevel) Almacenado en el “token” de acceso (Access Token) Un proceso no puede acceder al objeto si su Nivel MIC < Nivel MIC del objeto Forma parte de comprobación del acceso
38. MIC en más Detalle - Politicas Cada objeto securizable tiene Nivel y Política MIC Tipos de Políticas: “No-Write-Up”: Nivel más bajo no puede escribir al objeto “No-Read-Up”: Nivel más bajo no puede leer el objeto “No-Execute-Up”: Nivel más bajo no puede ejecutar el objeto Niveles no especificados = “Medium” + “No-Write-Up” Procesos son “No-Write-Up” + “No-Read-Up”
39. MIC y Pruebas de Acceso Nivel de Proceso y típo de accesso solicitado se comprueban con Nivel del Objeto If Nivel de Proceso >= Nivel de Objeto, realiza prueba DACL (access control list) If Nivel de Proceso < Nivel de Objeto ENTONCES Y política de objeto es… Si el tipo de acceso solicitado incluye
40. Ejemplo de Comprobación de Acceso con MIC R+W Request Access: Read + Write Internet Explorer [LOW IL] Toby’s Startup Folder Medium (NW) Request Access: Read + Write MS Money [Medium IL]
42. User Interface Privilege Isolation (UIPI) UIPI- proceso con Nivel MIC más bajo no puede Validar “windowhandle” creado por el proceso con nivel más alto Hacer llamadas SendMessage o PostMessage a las ventanas creadas por el proceso con nivel más alto Utilizar “threadhooks” para attachar a los procesos más privilegiados Utilizar “journalhooks” (SetWindowsHookEx) para monitorizar dichos procesos Para permitir que Windows Message pasa entre Niveles distintos MIC levels utiliza ChangeWindowMessageFilter(message, SGFLT_ADD); o marca UIAccess=true en el manifest (vease manifiesto de osk.exe) Consulta Windows 7 Training Kit for Developer para el código de ejemplo.
43. XP - Windows 7 UAC Interfaz de Usuario -UI Shield MIC Virtualización
44. Virtualización de Sistema de Ficheros y Claves de Registro Facilita compatibilidad de aplicaciones “legacy” No hay garantía de que exista en futuros SS.OO. Funciona con aplicaciones interactivas de 32-bit (no “elevadas” acceden a recursos protegidos Con claves/ficheros donde Admin tiene acceso HKLMoftware; %SystemDrive%rogram Files %WinDir%ystem32 Serán redirecionados a: HKCUoftwarelassesirtualStore %LocalAppData%irtualStorebr />Virtualización elimina necesidad de “elevar” Escrituras a HKLM van a HKCU Escrituras a carpetas de SS.OO re-direccionados a repositorio “per-usuario” Diferente de redirección de registro para 32-bit en máquinas x64, (WOW64…)
45. Virtualización de Sistema de Ficheros y de Registro Virtualización de Claves de Registro NO FUNCIONA Para procesos 64 bits Procesos que impersonan usuarios Procesos que especifican requestedExecutionLevel en sus manifiestos Procesos no interactivos (servicios Windows) Virtualización de ficheros no funciona para ejecutables aspx, .bin,.cmd,.exe, .hlp, .msi, .ocx, .sys, .tlb, .wsh
48. XP - Windows 7 UAC Interfaz de Usuario -UI Shield MIC Virtualización WRP
49. WRP (Windows ResourceProtection) Mecanismo general que protege ciertos recursos de SS.OO., e.g. Windowsystem32ernel32.dll NT SERVICErustedInstaller tiene Full Access SfcIsFileProtected() permite detectar clave de registro protegida por WRP SfcIsFileProtected() permite detectar fichero protegido por WRP Windows Module Installer (TrustedInstaller.exe) es utilizado para actualizar componentes de SS.OO. ISV no disponen del interfaz para interactuar con el Local Administrator puede tomar “ownership” del recurso protegido eliminando WRP WRP no es medida de seguridad Aplicaciones /Instaladores No deberían modificar recursos protegidos por WRP.
50. XP - Windows 7 UAC Interfaz de Usuario -UI Shield MIC Virtualización WRP Ubicación de Carpetas
51. Ubicación de Carpetas Datos de Usuario se almacenan en : sersusername%br />Carpetas Pictures, Music, Documents, Desktop, y Favorites están debajo Prefijo “My“ eliminado (en Windows 7 Explorerlo muestra…) “AllUsers” “Public” o “rogramData”
52. Dónde Debería Almacenar mis Datos? ConstantesSHGetKnownFolderPath See: Where Should I Write Program Data Instead of Program Files?
53. Mejores Prácticas para Ubicación de Carpetas No utilizar rutas absolutas AppVerifier incluye una prueba Script: utilizar variables de entorno Código “Unmanaged” (C, C++) ShGetFolderPathfunction (CLSID_...) SHGetKnownFolderPath (FOLDERID_...) Código “Managed” (C#, VB.NET) System.Environment.GetFolderPath() Microsoft.VisualBasic.FileIO.SpecialDirectories My.Computer.FileSystem.SpecialDirectories
54. XP - Windows 7 UAC Interfaz de Usuario -UI Shield MIC Virtualización WRP Ubicación de Carpetas Manifiesto de Aplicación
55. Aplicaciones diseñadas para Vista /Windows 7 Aplicaciones diseñadas para Vista/W7 embeben un “XML manifest” Elemento estándar de Proyecto de VS 2008 Deshabilita “mitigaciones” como Virtualización Manifiesto declara RequestedExecutionLevel:
56. Ejemplo de Manifiesto XML MyAdminApp.Exe.Manifest <?xmlversion="1.0" encoding="UTF-8" standalone="yes"?> <assemblyxmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentityversion="1.0.0.0" processorArchitecture="X86"name="MyAdminApp" type="win32"/> <!-- Identify the application security requirements. --> <trustInfoxmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevellevel="requireAdministrator“ uiAccess=“false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
57. Comprobación/solución de Problemática UAC Si haces lo siguiente… Escribes a Program Files, Windows, System32, HKLM/Software, o Root (c:)? Creas objetos “globalmente” (a nivel de sistema) Utilizas Mensajes Windows entre Niveles MIC distintos de procesos Haz una prueba Ejecuta la aplicación como Admin Prueba la aplicación con UAC deshabilitado Herramientas de utilizad Process Monitor Standard User Analyzer
58. XP - Windows 7 UAC Interfaz de Usuario -UI Shield MIC Virtualización Ubicación de Carpetas Aislamiento de Servicios Windows (Session 0)
59. Servicios Windows y Sesión 0 En Windows® XP, servicios de Windows y Aplicaciones de usuarios ejecutaban conjuntamente en Sesión 0. Desde Windows Vista®, servicios Windows están aislados en Sesión 0 Aplicaciones de usuarios ejecutan en Sesión 1, Sesión 2, etc. (“fastuserswitching” y Terminal Services)
60. Separación de Sesiones Session 0 in Windows XP / Windows Server 2003 Session 0 / Session 1 in Windows Vista+
61. Problemática Relacionada Mensajes de Windows no pueden cruzar límites del Desktop (y por lo tanto sessión) Servicios Windows no pueden mostrar Interfaz de Usuario en el Desktop de Usuario(está en la sesión distinta!) Control de acceso (MIC) añade complejidad a posibles soluciones.
62.
63.
64. Recursos para Partners ACF Recursos de Ayuda en temas de Compatibilidad Curso de formación para Partners Otros recursos
65. ApplicationCompatibilityFactory (ACF) 5 Partners ya formados Tienen conocimiento profundo en pruebas de compatibilidad Contacto: Wipro, Infosys, TCS (Tata), Satyam, HP, Sogeti http://technet.microsoft.com/en-us/windows/bb510132.aspx ACF Training Site Material de formación para Partners que quieren participar en ACF ACT 5.5 + Documentación+ Webcasts + Presentaciones 58
66. Application Compatibility – Formación para Partners Programa de formación de 12 horas en inglés a nivel 300 que incluye UAC Overview Advanced UAC and Windows ResourceProtection IE in ProtectedMode Versioning, Folder Locations, Session 0 Isolation ACT 5.5 Internals Shims and CompatibilityAdministration LUA Tools and Solutions Sysinternals Tools and IE Compatibility Test Tool Exam 59
67. Ayuda en Resolución de Problemas de Compatiblidad de Aplicaciónes Partner Online Technical Communities (OTC) Windows 7 Application Compatibility OTC https://partner.microsoft.com/US/40014662 Primera respuesta en 8 horas Disponible en Castellano Foros de Discusión Públicos MSDN Application Compatibilityfor Windows Development Technet Windows 7 Application CompatibilityForum W7 ISV RemediationWorkshops DPE Aplica en https://www.isvappcompat.com/Default.aspx Evento presencial 2-3 días Se puede traer la aplicación para remediarla 60
68. Ejemplos de código - Windows 7 Training Kit forDevelopers Developer Kit contiene laboratorios “hands-on”+ ejemplos de código (managed /unmanaged) sobre siguiente problemática OS VersionChecks Session 0 Isolation User Interface ProcessIsolation (MIC) InstallerDetection High DPI Data Redirection(File and RegistryVirtualization) 61
69. Otros Recursos Públicos Cookbooks – detallanproblemas de compatibilidad “Application Compatibility Cookbook” “Windows 7 Application Quality Cookbook” MSDN Application Compatibility: http://msdn.microsoft.com/en-us/windows/aa904987.aspx TechNet Windows Application Compatibility: http://technet.microsoft.com/en-us/desktopdeployment/bb414773.aspx Sysinternalshttp://technet.microsoft.com/en-us/sysinternals/bb842062.aspx Developer Guides – guías de programacióngenéricas Windows 7 UX Guide Windows 7 Developer Guide 62
Auto-ElevationThe reason that elevation of (most) Windows executables in the two middle settings doesn&apos;t result in a prompt is that the system &quot;auto elevates&quot; Windows executables. First, what does Windows define as a Windows executable in this context? The answer depends on several factors, but two things must hold: it must be digitally signed by the Windows publisher, which is the certificate used to sign all code included with Windows (it&apos;s not sufficient to be signed by Microsoft, so Microsoft software that&apos;s not shipped in Windows isn&apos;t included); and it must be located in one of a handful of &quot;secure&quot; directories. A secure directory is one that standard users can&apos;t modify and they include %SystemRoot%System32 (e.g., WindowsSystem32) and most of its subdirectories, %SystemRoot%Ehome, as well as a handful of directories under %ProgramFiles% that include Windows Defender and Windows Journal.There is also a hardcoded list of Windows executables that get the auto-elevate treatment. These Windows executables also ship external to Windows 7 and so must be able to run on down-level systems where the presence of the autoexecute property would result in an error. The list includes Migwiz.exe, the migration wizard, Pkgmgr.exe, the package manager, and Spinstall.exe, the Service Pack installer.
The term UIPI was coined to describe the impact that MIC mechanism has in User Interface
http://blogs.technet.com/askperf/archive/2007/04/27/application-compatibility-session-0-isolation.aspxService IsolationMany services require access to certain objects that are available only to high-privilege accounts. For example, a service might have to write to a registry key that provides write access only to administrators. Earlier than Windows Vista, services typically gained access to such objects by running in a high-privilege account such as LocalSystem. An alternative approach was to weaken the security on the objects to allow access by services that are running in a generic lower-privilege account.Both approaches increased the risk that an attacker or malware could gain control of the system. The only way for an administrator to mitigate this risk was to create an account specifically for the service and allow access to the objects only for that account. However, this approach created manageability problems, most notably password management, because the administrator no longer had the advantages of using built-in operating system accounts.To mitigate this problem, Windows Vista introduces service isolation, which provides services a way to access specific objects without having to either run in a high-privilege account or weaken the objects&apos; security protection. For example, service isolation allows an antivirus service to run in a lower-privilege account than LocalSystem, but still maintain complete access to its signature definition files or registry keys that would normally be accessible only to administrators.A service isolates an object for its exclusive use by securing the resource—such as file or registry key access—with an access control entry that contains a service security ID (SID). This ID is referred to as a per-service SID. A per-service SID is derived from the service&apos;s name and is unique to that service.After a SID has been assigned to a service, the service owner can then modify the required objects&apos; access control lists (ACLs) to allow access to the SID. For example, a registry key in HKEY_LOCAL_MACHINESOFTWARE would normally be accessible only to services with administrative privileges. By adding the per-service SID to the key&apos;s ACL, the service can run in a lower-privilege account, but still have access to the key.Windows services commonly run in the LocalSystem account, the most powerful account on the system. This makes such services attractive targets for virus writers. Ideally, services should limit their damage potential by running in a lower-privilege account such as LocalService or NetworkService. However, many services require at least some privileges that only LocalSystem supports. The all-or-nothing model that was used earlier than Windows Vista meant that a service that required any LocalSystem privileges had to also include all other LocalSystem privileges. This often meant including privileges that the service did not require, creating an unnecessarily high damage potential.Windows Vista addresses this issue by allowing services to run with least privilege. Services are no longer restricted to the default set of privileges that are supported by a standard account. Instead, services can select an account that has the privileges that they require and then remove all other unnecessary privileges. This feature can be used for any type of service account: LocalService, NetworkService, LocalSystem, a domain, or a local account.