Aug 18

Detalles Adicionales BitLocker de Windows Vista

Category: Windows

En pasados días al final del evento ”Una mirada al kernel de windows vista” uno de los asistentes se acerco a mi a pedir una aclaración.

Era una duda respecto a que pasa cuando yo monto un disco con BitLocker  en otra máquina, le explique que con tan solo utilizar el PIN ( que es opcional ) o mover los certificados (en el caso de que tal cosa se pueda hacer de manera ‘manual’ ) no lograria recuperarlo sino que necesita además varios elementos adicionales.

El PIN es solo complementario para el funcionamiento de BitLocker como si fuera uno más de los PCR (registros de configuración de la plataforma), y por otro lado no es posible obtener todos las llaves necesarias puesto que  la llave de cifrado de volumen completo (FVEK) es de igual forma cifrada ( en la documentación hablan de sellamiento ) con la llave maestra de volumen (VMK) la cual , a su vez también se encuentra cifrada con el TPM (Trusted Platform Module)

Cuando se utiliza BitLocker y ocurre un cambio inesperado en los componentes de inicio, el sistema no permitirá el arranque y solicitará el acceso por uno de los medios de restauración, es decir conectando una USB de backup o ingresando la llave de recuperación de 48 digitos, la cual solo se genera al crear un backup previo.

La usb de restauración y la llave de 48 digitos no son : Ni el PIN opcional al iniciar TPM NI una copia de la llave de cifrado.

Si se pasa el disco cifrado a una máquina diferente, este tampoco se puede leer, recuerden que BitLocker realiza una verificación de la plataforma y si se conecta en otra maquina BitLokcer encontrara un TPM Totalmente diferente al que se utilizo para cifrar el volumen, por lo cual inmediatamente se pasa a modo de recuperación y necesitaran los medios de backup descritos anteriormente de tal forma que BitLocker pueda ingresar a los metadatos en el volumen y recuperar las llaves VMK y FVEK.

image

image

Para evitar que un atacante trate de violar la integridad de los metadatos, inmediatamente BitLocker detecta que ha habido un cambio no autorizado en los metadatos o que se esta tratando de violar la integridad del sistema ( recuerden que hace verifiaciones con Hash SHA-1 ), procederá a denegar de manera permanente el acceso al dispositivo y no bastará ni con la USB ni con la llave de recuperación para acceder a los datos.

Para este caso particular se requiere adicionalmente:

  • El paquete de claves binarias que incluya las versiones cifradas de la FVEK y la VMK.
  • La herramienta de reparación de BitLocker.
  • Se puede hacer backup de las llaves de cifrado modificando una politica de grupo de tal manera que utilice los servicios de Active Directory para almacenar la contraseña y copia de las llaves.

    BitLocker_Pol

    Saludos, cualquier inquietud no duden en preguntarme.

    1 comment

    Aug 3

    Windows Mojave, la verdad sobre…

    Category: Windows

    La verdad sobre Windows Vista.

    Lamentablemente muchas personas se dejan influenciar por otras que no son realmente objetivas… si algunos linuxeros no son objetivos, algunos si, otras personas simplemente quieren aparecer como los duros en tecnologia y por eso critican y hacen mala fama , pero lo cierto es que Windows Vista es un sistema operativo excelente pero que en algunos sectores ( y digo algunos porque la realidad es que aca en colombia se vende como pan caliente) se empecinan en criticarlo mas por la mala fama que por lo que hace realmente… no lo conocen.

    El experimento mojave hace lo siguiente>

     

    1. Le pregunta a los usuarios cual es su opinión de Windows Vista y que lo califiquen
    2. A esos usuarios se les comenta acerca del nuevo sistema operativo que hará microsoft: Windows Mojave
    3. Se les muestra todos los beneficios y cosas que se pueden hacer, también como el sistema Mojave los proteje de amenazas como virus etc. todas las funcionalidades nuevas, su facilidad de uso, su estabilidad etc.
    4. Se les pide que evalúen al nuevo sistema mojave, que lo califiquen.
    5. Se les dice la verdad: Windows Mojave no existe. Es el mismo Windows Vista del que ellos habían hablado al principio, pero con otro nombre

    … es un experimento.

    http://www.mojaveexperiment.com/

    11 comments

    Apr 22

    PowerShell - III

    Category: PowerShell

    PowerShell

    Entegas Anteriores:

    Parte III - PowerShell para IT’s

    En las dos anteriores entregas nos hemos dedicado al sustento teórico y al background necesario para saber de que estábamos hablando. Ya falta poco para comenzar, pero antes una información importante para seguir adelante.

    Instalar PowerShell

    Requerimientos

    • Net Framework 2.0
    • Windows XP SP2 +, Windows Vista, Windows Server 2003 SP1+, Windows Server 2008

    Una vez ya tengas esto debes bajarte la versión de PowerShell de tu preferencia:
    Link de descarga

    Integración de tecnologías de automatización

    Este es el primero de dos puntos clave que PowerShell brinda a los IT’s y es que por primera vez despues de muchos años existe una tecnología de script capaz de integrar todas las tecnologías de script existentes bajo Windows en una sola, pero esto solo es la parte de agrupar tecnologías de script, pero que tal poder acceder por medio de scripts a toda la infraestructura desde un punto central? bueno el dibujo habla por si solo:

    PowerShell nos permite interactuar con cada uno de los componentes de nuestra infraestructura de red, ISA Server, Exchange System Center, Active Directory y muchos más, pero por si fuera poco tenemos (sobre todo para desarrolladores pero le impacta a los IT’s) .NET Framework, es decir tenemos las puertas abiertas a hacer lo que queramos, el framework nos lo permite.

    Beneficios para crear scripts

    Tanto para developers como para IT’s estas características son muy importantes, sere breve:

    Bueno ya fue suficiente. Recuerden que esto no es un curso de PowerShell, es un overview donde se mostraran algunas cosas interesantes de manera general.
    Let’s begin!!!

    Primeros scripts

    Antes de empezar les recomiendo que tengan fresca la información de la entrega anterior, iremos al grano así que las explicaciones serán breves.

    Nivel de seguridad

    PowerShell posee niveles de seguridad en cuanto a la ejecución de script así que nuestro primer script establecera un nivel de seguridad adecuado para los demos. Los posibles valores son:

    • Unrestricted : todo script es permitido
    • RemoteSigned : todo script local es permitido, pero si son remotos deben estar firmados digitalmente
    • AllSigned : todo script debe estar firmado digitalmente

    Se debe ejecutar este comando como administrador o en Windows Vista inicializando la aplicaion con elevación de privilegios.

    Set-ExecutionPolicy RemoteSigned

     

    1- Nombre de los procesos que tienen ventana con nombre no vacío

    get-process | where-object{$_.MainWindowTitle -ne ""}

    Aquí podemos observar el pipe ‘|’ que redirecciona la salida de get-process a where-object, dentro de where object ({}) utilizamos $_ para representar a cada uno de los objetos que devuelve el comando anterior (en este caso get-process) lo cual quiere decir que verificamos los objetos donde el atributo MainWindowTitle no sea igual (-ne =not equal) a vacío.

    La salida arrojara algo parecido a esto:

    Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
    -------  ------    -----      ----- -----   ------     -- -----------
        448      37    70908      85920   287   832,44   5964 Dreamweaver
        302      26    64152      73592   181    36,07   5808 firefox
        642      62   112576     128432   415    28,88   5616 Fireworks
        638      40    65780      66892   239    25,18   5720 iexplore
        796      74    41960      23080   234    40,39   4196 msnmsgr
        783      81    59944      25084   353    31,26   2880 POWERPNT
        283      14    56836      47896   562     0,67   1256 powershell
    

    2- Procesos que comienzan por letras y tienen números, este es aparentemente mas complejo, pero es realmente básico la parte compleja son las expresiones regulares ("^[a-z]+[^0-9]+$") perobasicamente es solo un patrón de busqueda.

    get-process | where-object{ $_.Name -match "^[a-z]+[0-9]+$"}
    

    La salida

    Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
    -------  ------    -----      ----- -----   ------     -- -----------
         61       5     1988       4532    52     0,02   2164 MSCamS64
         42       6     3984       6140    79     0,05   4152 rundll32
         93       8     5200       8088    83     0,05   4432 rundll32
         75       5     2184       4984    54     0,09   3964 splwow64
    

    Prueben esta variante, es muy parecida pero hace lo contrario, trae procesos que comiencen por letras y que no tengan números.

    get-process | where-object{ $_.Name -match "^[a-z]+[^0-9]+$"}
    

    3- Generar la salida filtrada y direccionarla luego en un archivo html y luego adicionarle un estilo. Vamos a ponerle mas detallitos, tal ves se les complique para algunos IT’s pero para otros…. sera genial, debemos crear un archivo de texto con este contenido:

    <style>
       .fila_par
       { background-color:#FFFFCC;}
       .fila_impar {background-color:#CCFFFF;}
    </style>
    
    <script type="text/javascript">
    <!--
       function AplicarCebra ()
       {
         tables = document.getElementsByTagName("table");
         for ( i = 0; i < tables.length; i++)
         {
           ColoreaFilas(tables[i]);
         }
       }
    
       function ColoreaFilas(tabla)
       {
         filasTabla = tabla.rows;
         for(j=0; j < filasTabla.length; j++)
         {
           if(j%2==0)
           {
             filasTabla[j].className="fila_par";
           }else
           {
             filasTabla[j].className="fila_impar";
           }
         }
       }
    // -->
    </script>
    <body onload="AplicarCebra();"/>

    Guardemos esto en un archivo de texto llamado EstiloYScript.txt, básicamente hemos creado una pequeña hoja de estilos, y algunas funciones útiles de jscript, al final hemos invocado uno de los script desde el body… por el momento no se fijen en lo que hace eso sino lo entienden… ese no es el tema, conformense con saber que es para crear una tabla en una pagina web y hacer que quede coloreada automáticamente.

    Ahora desde la consola de PowerShell nos vamos a la carpeta donde guardamos el archivo (si… se hace igual que en una consola DOS, recuerden que PowerShell extiende las funcionalidades de los antiguos bat). Ahora vamos a aprender varias cosas:

    Acá vemos como definir una variable ( head, para definirla se le pone $), y también vemos como leer un archivo y asignar sus contenidos a la variable:

    $head =get-content "EstiloYScript.txt"
    

    Ahora veamos el siguiente comando, nos permite no solo seleccionar la lista de procesos sino traer únicamente la información que deseamos. Estamos buscando los procesos que comiencen por r. Atención al comando select.

    get-process |
    where-object{ $_.Name -like "r*"} |
    select-object id, processname, handles 

    La salida:

      Id ProcessName                                    Handles
      -- -----------                                    -------
    2556 rosetta_beta_5.96_windows_intelx86                  52
    3740 rosetta_beta_5.96_windows_intelx86                  53
    2520 Rtvscan                                            594
    4152 rundll32                                            42
    4432 rundll32                                            93
    

    Espero que les este gustando, ahora veamos como redireccionar la salida en formato html

    get-process |
    where-object{ $_.Name -like "r*"} |
    select-object id, processname, handles |
    convertto-html

    La salida html:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                          "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <title>HTML TABLE</title>
    </head><body>
    <table>
    <colgroup>
    <col>
    <col>
    <col>
    </colgroup>
    <tr><th>Id</th><th>ProcessName</th><th>Handles</th></tr>
    <tr><td>2556</td><td>
    rosetta_beta_5.96_windows_intelx86
    </td><td>52</td></tr>
    <tr><td>5776</td><td>
    rosetta_beta_5.96_windows_intelx86
    </td><td>53</td></tr>
    <tr><td>2520</td><td>Rtvscan</td><td>594</td></tr>
    <tr><td>4152</td><td>rundll32</td><td>42</td></tr>
    <tr><td>4432</td><td>rundll32</td><td>93</td></tr>
    </table></body></html>
    

    Como direccionarla a un archivo de texto? se puede pasándole por pipe al comando out-file, o bien como en los antiguos bat con el operador > o >>:

    get-process |
    where-object{ $_.Name -like "r*"} |
    select-object id, processname, handles  |
    convertto-html > htmlFile.html
    

    Este archivo ya es legible y lo podemos abrir desde el browser, recuerdan el estilo y script que cargamos antes en la variable $head? es momento de usarlo, adicionemosle algo de sabor al html generado:

    get-process |
    where-object{ $_.Name -like "r*"} |
    select-object id, processname, handles  |
    convertto-html -head $head > htmlFile.html

    Y al abrirlo desde el explorador… revísenlo uds mismos.

    4- Matar un proceso recurriendo a Windows Management Instrumentation (WMI), para este ejemplo lo primero que debemos hacer es abrir un bloc de notas. Luego anotar esto en la consola:

    $a = get-wmiobject win32_process |
    where-object {$_.name -eq "notepad.exe"}
    $a.terminate()
    

    5- Consultar el consumo de CPU de un proceso recurriendo a Windows Management Instrumentation (WMI), la salida es formateada con el comando fotmat-table para pesonalizar los labels, y se usa el comando select para determinar que datos serán procesados en la salida.

    get-wmiobject Win32_PerfFormattedData_PerfProc_Process |
    select-object name, PercentProcessorTime |
    where-object { $_.Name -eq "powershell"} |
    format-table @{Label="Nombre del Proceso"; Expression={$_.name}},
    @{Label="Tiempo de CPU"; Expression={$_.PercentProcessorTime}} -auto
    

    La salida…

    Nombre del Proceso Tiempo de CPU
    ------------------ -------------
    powershell                     0
    

    6- Sentencias de control de flujo, ya a estas alturas lo único por explicar es que es que es write-host … escribir en el host , en este caso la consola y throw es para enviar una excepción en un programa.

    $a = "white"
    if ($a -eq "red")
        {"The color is red."}
    elseif ($a -eq "white")
        {"The color is white."}
    else
        {"The color is blue."}
    

    Ejecutenlo…creo que es claro. Hagan pruebas cambiando el valor de la variable $a para que vean como cambia el flujo de las instrucciones.

    7- Definir funciones, es un ejemplo muy similar al anterior, pero se añaden algunos modificadores a write-host para cambiar los colores de fondo y de fuente.

    function ElColor($color)
    {
      "El color es: "
      if ($color -eq "amarillo")
      {  write-host "amarillo" -foregroundcolor "yellow” }
      elseif ($color  -eq "azul")
      { write-host "azul"  -foregroundcolor "blue" -backgroundcolor "white”}
      elseif ($color  -eq "rojo")
      { write-host "rojo"  -foregroundcolor "red”}
      else
      { throw "No reconozco ese color”}
    }
    

    Con lo anterior hemos creado la función, ahora probemosla

    ElColor(”amarillo”);
    El color es: amarillo
    
    ElColor(”azul”);
    El color es:azul
    
    ElColor(”rojo”);
    El color es:rojo
    ElColor(”xxx”);
    No reconozco ese color
    En línea:11 carácter:10
    +   { throw  <<<< "No reconozco ese color"}
    
    

    8- Switches de funciones, ahora rescribamos la función de esta forma:

    function ElColor($color, [switch] $comoWarning)
    {
      if($comoWarning)
      { write-warning “El color es: “  }
      else
      { “El color es: “  }
      if ($color -eq “amarillo”)
      { write-host “amarillo” -foregroundcolor “yellow” }
      elseif ($color  -eq “azul”)
      { write-host “azul”  -foregroundcolor “blue” -backgroundcolor “white”}
      elseif ($color  -eq “rojo”)
      { write-host “rojo”  -foregroundcolor “red”}
      else
      {throw “No reconozco ese color”}
    }
    

    La función ahora recibe un parametro de tipo switch, el cual luego es verificado para determinar si el mensaje se muestra o no a manera de advertencia, la salida y el uso seria igual al ejemplo anterior desde que no se use el switch. Para usar el switch se debe hacer de la siguiente forma:

    ElColor(”azul”) -comoWarning
    ADVERTENCIA: El color es:
    azul

    Bien eso es todo, como verán aunque esto es PowerShell para IT’s hubo bastante desarrollo, sin embargo lo que tengo preparadopara los developers es aún mejor, que tal en vez de solamente usar PowerShell… extenderlo? o hacer que su salida no sea una consola sino una aplicación propia? o hacer que los comandos no se digiten en una consola sino desde una pagina web u otra aplicación?… pues de eso tratara la próxima entrega.

    • Parte IV - PowerShell para Developers

    Hasta la próxima.

    7 comments

    Next Page »