¿Puede usar PtrToStringAuto para descifrar una cadena segura en Powershell 7 en macOS?

4
Phatmandrake 2020-02-25 23:52.

No he tenido éxito en obtener el siguiente fragmento de código para generar "¡Hola mundo!" en PS7

$string = $("Hello World!" | ConvertTo-SecureString -AsPlainText -Force)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto(
[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($string))

El código anterior es un ejemplo de cómo descifrar una cadena segura sin especificar una longitud.

Este mismo código funciona en PS6 y PS5 para descifrar completamente Secure String, pero no funciona en PS7. La única forma de evitar esto que he encontrado es usar PtrToStringBSTR. Entonces funciona como se esperaba en todas las versiones de PS para este caso de uso.

Planteé un problema en el repositorio de Powershell en Github, pero no he recibido ninguna respuesta. Honestamente, solo estoy buscando alguna confirmación de que el comportamiento es el mismo para los demás.

https://github.com/PowerShell/PowerShell/issues/11953

Creo que algo como esto sería un cambio radical para una gran cantidad de código que se está portando a PS7.

Esto es lo que he encontrado hasta ahora:

Documentación

https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.ptrtostringauto?view=netframework-4.8

Según la documentación, al especificar un número entero, PtrToStringAuto:

Allocates a managed String and copies the specified number of characters from a string stored in unmanaged memory into it.

Especificar un int de 11 devuelve "Hola", esto se debe a que todos los demás caracteres devueltos son nulos. En este caso, debe especificar un int de 23 para devolver la cadena completa "¡Hola mundo!" usando este método. He almacenado la salida en una variable para demostrar esto.

$String = $("Hello World!" | ConvertTo-SecureString -AsPlainText -Force) [System.Runtime.InteropServices.Marshal]::PtrToStringAuto( [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($string), 23)

$String[0] Returns H $String[1] Returns NULL
$String[2] Returns E $String[3] Returns NULL
etc.... 

Si no se especifica ningún entero, PtrToStringAuto:

Allocates a managed String and copies all characters up to the first null character from a string stored in unmanaged memory into it.

Creo que esto sugiere que Secure String se está almacenando con valores NULL, mientras que en PS6 no lo estaba, o que el comportamiento de la función PtrToStringAuto ha cambiado y ahora se adhiere al comportamiento que describe la documentación anteriormente.

Este es solo un problema en macOS; sin embargo, el uso de PtrToStringBSTR en lugar de PtrToStringAuto para descifrar Secure String funciona como se esperaba en Windows y macOS.

Esto parece relacionado: https://stackoverflow.com/a/11022662/4257163

Tampoco veo en ninguna parte que se haya realizado un cambio.

1 answers

6
mklement0 2020-02-26 11:48.

Tenga en cuenta que [securestring]se no se recomienda para el nuevo código más .

Mientras que en Windows las cadenas seguras ofrecen protección limitada , al almacenar la cadena encriptada en la memoria, a través de la DPAPI , y al acortar la ventana durante la cual la representación de texto sin formato se mantiene en la memoria, no se utiliza ningún cifrado en plataformas similares a Unix . [1]


La única forma de evitar esto que he encontrado es usar PtrToStringBSTR.

Que no sólo es una manera alrededor del problema, PtrToStringBSTRes el método que debería haber sido utilizado, para empezar , ya que la cadena de entrada es una BSTR. [2]

Tenga en cuenta que la conversión de una cadena segura hacia y desde una [string]instancia regular anula el propósito de usar [securestring]para empezar : terminará con una representación de texto sin formato de sus datos confidenciales en la memoria de su proceso cuya vida útil no puede controlar.

Si realmente desea hacer esto, un enfoque más simple y compatible con varias plataformas es:

[System.Net.NetworkCredential]::new('dummy', $string).Password

[1] Esto es especialmente problemático cuando guarda una cadena segura en un archivo , a través de ConvertFrom-SecureStringo Export-CliXml- vea esta respuesta .

[2] El Autoen PtrToStringAuto()medios que el no administrado cadena de entrada se supone que utilizar una plataforma apropiada codificación de caracteres, mientras que BSTRes un (UTF-16) cadena "Unicode" en todas las plataformas. En Windows, se supone que una cadena no administrada tiene codificación UTF-16 (razón por la cual el código funciona), mientras que en plataformas similares a Unix es UTF-8 desde .NET Core 3.0 (PowerShell [Core] 7.0 se basa en .NET Core 3.1) , que explica sus síntomas: los NULcaracteres. en el BSTRcódigo UTF-16 de la instancia, las unidades se interpretan como caracteres por derecho propio cuando (mal) se interpretan como UTF-8. Tenga en cuenta que .NET Core 2.x (que es en lo que se basa PowerShell [Core] 6.x) (de manera inapropiada) predeterminado en UTF-16 , que este PR solucionó , lo que equivale a un cambio importante.

Related questions

MORE COOL STUFF

Cate Blanchett se acostó con su esposo después de 3 días juntos y sigue casada con él 25 años después

Cate Blanchett se acostó con su esposo después de 3 días juntos y sigue casada con él 25 años después

Cate Blanchett desafió los consejos típicos sobre citas cuando conoció a su esposo.

Por qué Michael Sheen es un actor sin fines de lucro

Por qué Michael Sheen es un actor sin fines de lucro

Michael Sheen es un actor sin fines de lucro, pero ¿qué significa eso exactamente?

¡La estrella de Hallmark, Colin Egglesfield, habla sobre emocionantes encuentros con fans en RomaDrama Live! [Exclusivo]

¡La estrella de Hallmark, Colin Egglesfield, habla sobre emocionantes encuentros con fans en RomaDrama Live! [Exclusivo]

¡La estrella de Hallmark, Colin Egglesfield, habló sobre los emocionantes encuentros con los fanáticos en RomaDrama Live! además de su programa INSPIRE en la convención.

Por qué no puedes transmitir 'Northern Exposure' en línea

Por qué no puedes transmitir 'Northern Exposure' en línea

Tendrás que desempolvar un reproductor de Blu-ray o DVD para ver por qué Northern Exposure se convirtió en uno de los programas más populares de los 90.

Dona tu cabello para ayudar a mantener limpia nuestra agua

Dona tu cabello para ayudar a mantener limpia nuestra agua

Los recortes de cabello de los salones y las donaciones personales se pueden reutilizar como tapetes que absorben los derrames de petróleo y ayudan a proteger el medio ambiente.

Una mirada a las bodas más memorables de la Casa Blanca

Una mirada a las bodas más memorables de la Casa Blanca

Solo unas pocas personas se han casado en la Casa Blanca en los últimos más de 200 años. ¿Quiénes eran y qué se requiere para marcar una boda allí?

¿Cuál es la toronja más dulce: blanca, roja o rosada?

¿Cuál es la toronja más dulce: blanca, roja o rosada?

¿Tu boca se emociona al pensar en comer una toronja jugosa? Bueno, frunce el ceño, porque la toronja está repleta de vitaminas y antioxidantes que tu cuerpo necesita.

¿Cuál es la diferencia entre levaduras secas instantáneas y activas?

¿Cuál es la diferencia entre levaduras secas instantáneas y activas?

La levadura es el componente mágico de la cocción que hace que la masa suba. Pero hay muchos tipos por ahí. ¿Cuál es el adecuado para tu receta?

Bueno, las comparaciones de Mike Tyson no estaban del todo mal

Bueno, las comparaciones de Mike Tyson no estaban del todo mal

Sí, eso parece morder. Después de ser nombrado Prospecto del Año 2020 por varias publicaciones, incluidas Sports Illustrated y The Athletic, Edgar Berlanga, de 25 años, fue aclamado como el puertorriqueño Mike Tyson.

Cómo luchar contra Fox News con mercados publicitarios en línea laberínticos

Cómo luchar contra Fox News con mercados publicitarios en línea laberínticos

Digamos que usted es una persona razonable que está razonablemente enojada con el manejo de las noticias por parte de Fox News. Tal vez sea la forma en que sus anfitriones arrojaron mentiras peligrosas en el punto álgido de la pandemia de COVID-19, o la forma en que continúan contando descaradamente la historia de la insurrección del 6 de enero.

Minecraft se ve maravillosamente relajante en estrategia Spin-Off que viene el próximo año

Minecraft se ve maravillosamente relajante en estrategia Spin-Off que viene el próximo año

Minecraft obtendrá otro spin-off en 2023. El éxito de ventas continuo de Mojang ahora se está ramificando en el género de estrategia con Minecraft Legends, que se ve brillante y sereno incluso cuando estás derribando los muros del castillo enemigo.

El nuevo Forza Motorsport, disponible la próxima primavera, es de alguna manera incluso más bonito que Forza Horizon 5

El nuevo Forza Motorsport, disponible la próxima primavera, es de alguna manera incluso más bonito que Forza Horizon 5

Hoy, en la gran exhibición de juegos de Microsoft, el editor mostró la próxima entrada tan esperada en su serie de carreras insignia, Forza Motorsport. El nuevo juego no tiene un número de secuela y saldrá en la primavera de 2023.

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

Emma Stone pone a la venta su casa en la playa de Cliffside Malibu por $ 4.2 millones: ¡vea el interior!

Emma Stone pone a la venta su casa en la playa de Cliffside Malibu por $ 4.2 millones: ¡vea el interior!

La casa de mediados de siglo del ganador del Oscar cuenta con tres dormitorios, dos baños y vistas al mar

Jeannie Mai Jenkins dice que "se deprimió mucho, mucho" durante su experiencia de amamantar

Jeannie Mai Jenkins dice que "se deprimió mucho, mucho" durante su experiencia de amamantar

"Te sientes tan derrotada cuando tu bebé tiene hambre que no estás produciendo lo suficiente para el bebé", dijo Jeannie Mai Jenkins sobre amamantar a su hija de 4 meses, Monaco.

La esposa de Bobby Brown, Alicia, no se enfoca en su pasado: "Bobby y Whitney fueron su momento, soy el Yin de su Yang"

La esposa de Bobby Brown, Alicia, no se enfoca en su pasado: "Bobby y Whitney fueron su momento, soy el Yin de su Yang"

La pareja de casi 10 años comparte su historia de amor antes de la nueva serie de realidad de A&E Bobby Brown: Every Little Step, que se estrenará el 31 de mayo.

Notas de inversión: Bioscout AU $ 3m Seed

Notas de inversión: Bioscout AU $ 3m Seed

Bioscout tiene la misión de poner a los agricultores en el asiento del conductor y estamos entusiasmados de respaldar al equipo en su última ronda de semillas junto con Artesian (GrainInnovate) y Uniseed. El problema La pérdida significativa de cosechas por enfermedades fúngicas ha resultado ser un calvario para los agricultores.

Pequeña investigación de mercado 1 | Quick Glimpse Telehealth Market en 2022

Pequeña investigación de mercado 1 | Quick Glimpse Telehealth Market en 2022

La telesalud no es nueva ni siquiera una vertical obsoleta en la era posterior a la pandemia. Pero cuando miramos más de cerca la industria, muestra una fuerte sostenibilidad en la demanda y la oferta y una fuerte curva de crecimiento potencial que sería una revolución constante en los EE. UU.

Clima de financiación de empresas emergentes: ¿Qué sigue para el ecosistema de empresas emergentes de Tailandia?

Clima de financiación de empresas emergentes: ¿Qué sigue para el ecosistema de empresas emergentes de Tailandia?

El año 2021 fue un año récord para la financiación de capital de riesgo (VC) a nivel mundial. El sudeste asiático no fue la excepción, ya que la región acuñó un récord de 25 nuevos unicornios en el año, según DealStreetAsia.

Más allá de la Ley de Moore

Más allá de la Ley de Moore

Existe una brecha que crece exponencialmente entre nuestro apetito por la computación y lo que puede ofrecer la Ley de Moore. Nuestra civilización se basa en la computación: debemos encontrar tecnologías que trasciendan las limitaciones actuales de la arquitectura y la imaginación.

Language