Monday 27 November 2017

65537 Binary Options


Xxd - Comando UNIX, Linux SINOPSIS DESCRIPCIÓN OPCIONES muestran la cadena de versiones. CAVEATS xxd - r tiene algo de magia integrada mientras evalúa la información del número de línea. Si el archivo de salida es buscable, entonces los números de línea al principio de cada línea de hexdump pueden estar fuera de servicio, pueden faltar líneas o superponerse. En estos casos xxd se lseek (2) a la siguiente posición. Si el archivo de salida no es buscable, sólo se permiten las brechas, que serán llenadas por null-bytes. Xxd - r nunca genera errores de análisis. La basura se omite silenciosamente. Al editar hexdumps, tenga en cuenta que xxd - r omite todo en la línea de entrada después de leer suficientes columnas de datos hexadecimales (consulte la opción - c). Esto también significa que los cambios en las columnas ascii imprimibles (o ebcdic) siempre se ignoran. Revertir un hexdump de estilo simple (o postscript) con xxd - r - p no depende del número correcto de columnas. Aquí se interpreta cualquier cosa que parezca un par de dígitos hexadecimales. Observe la diferencia entre xxd - i archivo y xxd - i lt archivo xxd - s buscar puede ser diferente de xxd - s buscar. Como lseek (2) se utiliza para rebobinar la entrada. A 146146 hace una diferencia si la fuente de entrada es stdin, y si la posición del archivo stdin146s no está al comienzo del archivo en el momento en que xxd se inicia y recibe su entrada. Los siguientes ejemplos pueden ayudar a aclarar (o confundir más). Rebobinar stdin antes de leer es necesario porque el 145cat146 ya ha leído hasta el final de stdin. Sh - c gt gt plaincopy xxd - s 0 gt hexcopy lt archivo Hexdump de la posición de archivo 0x480 (1024128) en adelante. El signo 145146 significa relativo a la posición actual, por lo tanto el 145128146 se agrega al 1k donde dd dejó. Sh - c dd ofplainsnippet bs1k cuenta1 xxd - s 128 gt hexsnippet lt archivo Hexdump desde la posición de archivo 0x100 (1024-768) en. Sin embargo, esta es una situación rara y el uso de 145146 rara vez es necesario. El autor prefiere monitorear el efecto de xxd con strace (1) o truss (1), siempre que se use - s. EJEMPLOS Imprima todo excepto las tres primeras líneas (hex 0x30 bytes) del archivo. Xxd - s archivo 0x30 Imprimir 3 líneas (hex 0x30 bytes) desde el final del archivo. Xxd - s -0x30 file Imprimir 120 bytes como hexdump continuo con 40 octetos por línea. xxd - l 120 - ps-C20 xxd.1 2e54482058584420312022417567757374203139 39362220224d616e75616c207061676520666f72 20787864220a2e5c220a2e5c222032317374204d 617920313939360a2e5c22204d616e2070616765 20617574686f723a0a2e5c2220202020546f6e79 204e7567656e74203c746f6e79407363746e7567 Hexdump los primeros 120 bytes de esta página de manual con 12 octetos por línea. Xxd - l 120 - c 12 xxd.1 0000000: 2e54 4820 5858 4420 3120 2241.TH XXD 1 A 000000c: 7567 7573 7420 3139 3936 2220 ugust 1996 0000018: 224d 616e 7561 6c20 7061 6765 Manual página 0000024: 2066 6f72 2078 7864 220a 2e5c para xxd .. 0000030: 220a 2e5c 2220 3231 7374 204d .. 21ª M 000003c: 6179 2031 3939 360a 2e5c 2220 ay 1996 .. 0000048: 4d61 6e20 7061 6765 2061 7574 Man página aut 0000054: 686f 723a 0a2e 5c22 2020 2020 hor. 0000060: 546f 6e79 204e 7567 656e 7420 Tony Nugent 000006c: 3c74 6f6e 7940 7363 746e 7567 lttonysctnug Mostrar sólo la fecha del archivo xxd.1 xxd - s 0x36 - l 13 - c 13 xxd.1 0000036: 3231 7374 204d 6179 2031 3939 36 21 de mayo de 1996 Copie el archivo de entrada en el archivo de salida y agregue 100 bytes de valor 0x00. Xxd archivo de entrada xxd - r - s 100 gt archivo de salida Patch la fecha en el archivo xxd.1 echo 0000037: 3574 68 xxd - r - xxd.1 xxd - s 0x36 - l 13 - c 13 xxd.1 0000036: 3235 7468 204d 6179 2031 3939 36 25 de mayo de 1996 Cree un archivo de 65537 bytes con todos los bytes 0x00, excepto el último que es 146A146 (hex 0x41). Echo 010000: 41 xxd - r gt archivo Hexdump este archivo con autoskip. Xxd - a - c 12 archivo 0000000: 0000 0000 0000 0000 0000 0000. 000fffc: 0000 0000 40. A Cree un archivo de 1 byte que contenga un solo carácter 146A146. El número después de 146-r - s146 se suma a los números de teléfono encontrados en el archivo en efecto, los bytes principales se suprimen. Echo 010000: 41 xxd - r - s -0x10000 gt file Utilice xxd como un filtro dentro de un editor como vim (1) para hexdump una región marcada entre 145a146 y 145z146. : 146a, 146zxxd Utilice xxd como filtro dentro de un editor como vim (1) para recuperar un hexdump binario marcado entre 145a146 y 145z146. : 146a, 146zxxd - r Utiliza xxd como filtro dentro de un editor como vim (1) para recuperar una línea de un hexdump. Mueva el cursor sobre la línea y escriba: xxd - r Lee los caracteres individuales de una línea serie xxd - c1 lt / dev / term / b stty lt / dev / term / b - echo - opost - isig - icanon min 1 echo - n Foo gt / dev / term / b VALORES DE RETORNO Se devuelven los siguientes valores de error: VER TAMBIÉN ADVERTENCIAS AUTORIZACIÓN VERSIÓN AUTOMÁTICA en principio. El formato de los archivos binarios de Fortran no está especificado. Esto significa que, aunque puede guardar el estado del programa en un archivo binario de Fortran y volver a abrirlo utilizando la misma implementación de Fortran. No se puede confiar en hacerlo incluso con una implementación diferente de Fortran. Ahora, hay un número limitado de maneras que uno puede sanely ahorrar estado, por lo que es posible y probable que youd ser capaz de elaborar la estructura de un determinado archivo binario Fortran, con suficiente detalle que se puede abrir en un programa C Y leer el contenido. Sin embargo, ese conocimiento es completamente específico para el compilador Fortran en cuestión. Así que lo mejor es crear una matriz de Fortran que contenga, por ejemplo, 0, 1, 2, 3, 4, 256, 65536, 65537, 1e10, 1e20, 1e30, 1e40. Escribirlo en un archivo binario, y mirarlo con un editor binario para ver qué hay allí. Después de eso, estás en tu propio miedo. En mi opinión, la mejor manera de leer los binarios fortran es en realidad leerlos desde fortran y pasar la matriz a C. Puede ahorrarle mucho dolor. Escribir una subrutina que realmente puede leer este binario Envuelva su subrutina para llamarla desde C. La parte más difícil es envolver su subrutina de fortran. El nombre mangling no es directo entre C y fortran. Depende de la versión del compilador (es decir, de la plataforma) y del Fortran que utilice. Usted puede mirar aquí y aquí para ejemplos simples. La primera opción es hacerlo a mano con las opciones de compilación apropiadas. Consejos . Para saber el mangling puede utilizar el comando nm en linux o una herramienta como el visor de exportación de DLL. Una mejor opción es utilizar Fortran 2003 que introducen el módulo isoculante que ayuda a manejar este tipo de operación. Si bien hay múltiples formas de establecer un canal RAT y CampC en una máquina Windows, uno de los objetivos clave es evitar la Se detectó la carga útil. Esto es de particular preocupación cuando se establece la persistencia, ya que de cualquier manera que se mire, probablemente implicará algún tipo de función autorun-esque. Por ahora, vamos a asumir que: Tenemos un RAT de memoria o un shell de acceso a un host de destino. Tenemos un binario ejecutable, sin ser detectado por AV, que queremos instalar en un host para que nuestro canal CampC se restablezca al reiniciar. Una manera obvia de mezclar en sería para que se vea, en la medida de lo posible, como un sistema de ventanas binario. Uno de los mecanismos clave que Microsoft ha proporcionado en un intento de frustrar este tipo de actividad es la firma digital. El código firmado se percibe como más confiable, hasta el punto de que la caja de UAC tiene menos de un tono de advertencia. Así que podríamos instalar el binario autónomo, envolverlo en un DLL o una puerta trasera de un binario existente, pero todavía podría destacarse como sin signo. Para que un binario firmado sea confiado como tal, debe ser firmado digitalmente por una entidad emisora ​​de confianza, de la misma manera que los certificados SSL deben firmarse para que HTTPS funcione correctamente desde la perspectiva de la experiencia del usuario final. También resulta que algunas herramientas de Microsoft colocan cierto grado de confianza en el parámetro commonName, haciendo que un binario implantado en una máquina comprometida sea más fácil de disimular. Para lograr esto, tenemos dos opciones: Obtener un certificado de una CA de confianza y firmar el binario con eso. Genere nuestra propia CA, instálela como una entidad emisora ​​de confianza y utilícela para firmar el binario. El resto de este post aborda la segunda técnica, es decir, crear una CA, firmar el binario con la CA y luego instalar la CA en la máquina de destino. Investiga hasta qué punto se puede lograr esto sin el beneficio de una interfaz gráfica de usuario y muestra cómo se puede modificar para generar certificados válidos de validación extendida (EV) válidos que Windows confía. Ninguna de estas técnicas son nuevas, pero se espera que esta publicación las haga más fáciles y más accesibles. Requisitos Necesitará las siguientes herramientas: Un binario de destino para firmar. OpenSSL y Python. La utilidad SignTool. exe incluida con el SDK de Windows. Consulte dev. windows/en-us/downloads/windows-10-sdk para Windows 10 o dev. windows/en-us/downloads/sdk-archive para versiones anteriores. Esta herramienta puede firmar digitalmente un ejecutable con un certificado proporcionado. Alternativamente, puede utilizar OSSLSignCode que es esencialmente un equivalente Linux de la utilidad SignTool. exe. Puede descargar OSSLSignCode desde sourceforge. net/projects/osslsigncode/. Mi herramienta Certerator utilizada para generar una cadena de certificados de firma de código personalizada. Esto está disponible en github / stufus / certerator. Ejemplo básico Las siguientes etapas se discuten con más detalle: Creación del binario malicioso objetivo. Creación de una CA falsa. Creación de un certificado, firmado por esa CA. Firma del binario con el certificado. Instalación de la CA en el destino. Crear el binario de destino Para los propósitos de este ejemplo, se utilizó un método básico de compás de contraste. Ejecutarlo generó la conexión inversa meterpreter como se esperaba: El propio EXE contenía la información de la versión predeterminada de la plantilla EXE de metasploits: No es sorprendente que inspeccionarlo con Process Explorer y Autoruns lo hiciera destacar: Crear un certificado de CA amp válido A efectos de prueba Del concepto, todos los certificados se crearon manualmente con OpenSSL. Los certificados eran (en su mayor parte) estándar, pero necesitaban los valores de atributo keyUsage correctos asignados. Como la línea de comandos OpenSSL no es muy intuitiva, escribí una herramienta rápida y sucia llamada Certerator que generará una autoridad de certificación y un certificado, firmado por la CA, que puede ser utilizado para la firma de código de Microsoft Authenticode. El script mismo realiza las siguientes tareas: Si ca. pem no está presente, genere una autoridad de certificación basada en los parámetros internos de configuración y guárdelo en disco, el certificado CA PEM se almacenará en ca. pem, se almacenará el certificado CA DER En ca. der, la clave privada se almacenará en ca. key y todos estos serán empaquetados en un archivo PKCS12 llamado ca. p12 con una contraseña de mwr. Si ca. pem está presente, se cargará y utilizará para futuras actividades de firma. Si cert. pem no está presente, genere un certificado basado en los parámetros de configuración internos y guárdelo en disco el certificado PEM se almacenará en cert. pem, la clave privada se almacenará en cert. key y el archivo PKCS12 que contiene tanto Se guardarán como cert. p12. Si cert. pem está presente, se omitirá. Muestra la sintaxis para OSSLSign y SignTool. exe para firmar el binario. Para cambiar el comportamiento de Certerator, el código python necesita ser editado. En la parte superior del archivo, hay una función que se puede modificar intuitivamente para cambiar los distintos atributos relacionados con los certificados: La tabla siguiente describe el propósito de estas opciones. Tenga en cuenta que cualquier cosa en el ca dict se relaciona con la autoridad de certificación que se crea, y cualquier cosa en el cert dict se refiere al certificado que se crea que será firmado por la CA. Stealthy Attack Ed Bott enumeró una serie de acciones que generarían un indicador de UAC en edbott / weblog / 2007/02 / qué-dispara-user-account-control-prompts / y parece que Windows simplemente realiza una coincidencia de cadenas para determinar si un Binario está realizando una de estas tareas. Si lo es, generará un indicador UAC debido al contexto elevado, tenga esto en cuenta al seleccionar una descripción apropiadamente engañosa para el binario. Generar los certificados digitales falsos Como estamos tratando de presentar este binario como un binario de Windows, tiene sentido generar certificados que parezcan realistas. Un rápido vistazo a las autoridades de certificación reales que están preinstaladas en Windows revela una oportunidad: Para este ejemplo, se creó una entidad emisora ​​de certificados de raíz de Microsoft 2012 CA que aparentaría mezclarse con las CA existentes. También podría crear una CA falsa con el mismo nombre que una existente. Para configurar esto, he editado certerator. py como a continuación: Certerator se ejecutó de una manera similar al ejemplo anterior. Una comprobación de la CA y el certificado que se han creado muestra que parecen legítimos a primera vista: Firmar el binario Instalar el certificado y ejecutar el nuevo binario El nuevo binario mezclado en más con Windows: Autoruns mostró el binario como verificado, buscando idénticos A binarios similares de Windows. Autoruns permite a los usuarios ocultar binarios y procesos firmados por Microsoft amp Windows. Curiosamente, esto parece ser una comparación de cadenas, el binario malicioso también estaba oculto. Cuando se realizó un intento de ejecutar manualmente el binario como administrador desde un contexto de usuario, se mostró el siguiente cuadro de UAC: Esto se puede contrastar con el cuadro que se mostró sin la raíz de CA instalada: Conclusión Firmar un binario no permitirá mágicamente ataques Que no eran posibles antes. Sin embargo, es una acción más en una lista de acciones que lo harán un poco más difícil de detectar, y le permitirá mezclarse con su entorno durante un poco más de tiempo. Se podría trabajar más para que los certificados sean más idénticos. Por ejemplo, las fechas idénticas, los números de expiries y de serie agregaría más autenticidad esto es simplemente un caso de alterar la información de la creación del certificado y de cambiar el tiempo. También publicaré una actualización sobre el estampado de tiempo, que es básicamente una forma de contorsionar digitalmente el tiempo y efectivamente implica la verificación con una CA de registro de tiempo. Hay un gran enfoque en el momento en el uso de powershell para realizar la mayoría de las tareas en las pruebas internas. Este es un método muy efectivo, pero no creo que vaya a ser detectado para siempre el monitoreo está llegando a ser mucho más maduro ahora y versiones posteriores de powershell contienen características adicionales de detección y los atacantes avanzados necesitan ser capaces de almacenar y ejecutar cargas útiles directamente. Una técnica como esta podría hacer que un binario malicioso en el sistema sea un poco menos notorio y, cuando un equipo de respuesta a incidentes está analizando un host que puede estar comprometido, esto puede pasarse por alto. Un consultor particularmente determinado puede instalar un binario señuelo con la esperanza de que el equipo IR invertirá tiempo analizando este binario y por lo tanto desviar la atención lejos del ataque simulado real. OSSLSignCode y SignTool. exe ofrecen una serie de características adicionales que ambos soportan más que EXEs, timestamping, firmas de sellado y un número de otras funciones. Esta publicación no ha cubierto la gama de funciones disponibles, pero debería facilitar el despliegue de binarios un poco más inocentes en un compromiso. Por lo menos, no aparecerán como más sospechosos. Trabajo adicional Los pasos siguientes implican investigar la manera en que los certificados se empaquetan al ser almacenados en el registro para el almacén del usuario y el almacén local de la máquina el punto de partida ha sido invertir la operación del ingeniero certutil. exes. El objetivo es construir una herramienta de prueba de concepto que pueda insertar o manipular silenciosamente las autoridades de certificación y los certificados tanto a nivel de usuario como a nivel de computadora, con la capacidad de manipular atributos favorables como los parámetros de validación extendida.

No comments:

Post a Comment