Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - shkz

#61
Claro que si.. los rootkits tienen implementaciones de ese tipo. Sin ir muy lejos o meterse en lo tecnico..
Algunos rootkits reemplazan llamadas a EnumProcesses() por ejemplo, con direcciones propias implementadas por el rootkit, luego devuelve esas llamadas originales pero previamente pueden quitar cualquier info sobre procesos infectados. Haciendo invisible a los ojos del usuario.

saludos.
#62
Si tu objetivo es ser un Security Researcher, con python podes trabajar tranquilamente. Es como todo cuanto mas sepas, mejor.
Si tenes una buena base de c++ seria ideal. Al igual que otros lenguajes.

Personalmente trabajo como security researcher y generalmente mi funcion de pentester requiere crear exploits, o pequeños scripts para las PoC o demostraciones. El parcheo del software pesado al que uno ataca o verifica la vulnerabilidad no siempre es trabajo para solucionarlo a nivel programacion del sec researcher, sino de los programadores de la empresa que te contratan. De todos modos tenes que entender como funcionan las cosas y dejar explicitamente detallado en los informes tecnicos y ejecutivos.

Te repito, si tu idea es ser un sec researcher, con python y una base de c podes empezar como junior. Te recomendaria que aprendas y entiendas como reversear binarios, y todo el mundo del bajo nivel. Assembler de pie a cabeza.

Saludos y suerte.
#63
Hacer hardening de seguridad a la distribución que tengas como principal. Mantener los antirootkits al dia, y darle escaneo periódico. Tambien tenes Antivirus para Linux, como el CLAMAV, que es opensource. Bastante efectivo. Y la ultima version estable actualizada es del 03 de Mayo del 2016.

Hay otro tipos de prevenciones tambien en modo paranoico pero no creo que vengan al caso aca, jeje.

Saludos.
#64
C++ no es un lenguaje de bajo nivel.. tampoco lo es python. Assembler o Ensamblador en su traduccion es un lenguaje de bajo nivel. Por otro lado las sintaxis de Python en relacion a la de C++ es mucho mas practica, mas facil, porque es mas 'a la volada' por asi decirlo..

Personalmente python rulez jeje.. aunque dependera a largo plazo los objetivos de cada uno.

Saludos.
#65
Presentaciones y cumpleaños / Re:Saludos desde UY
Septiembre 18, 2016, 12:50:50 AM
Mas que bienvenido. Saludos por allá. A la orden para lo que necesites, siempre y cuando seas buen amigo de Google primero jeje.

Bye
#66
Presentaciones y cumpleaños / Re:Saludos a la comunidad.
Septiembre 17, 2016, 01:59:40 AM
jaja Interesante... un abrazo, que disfrutes tu estadía.
#67
Presentaciones y cumpleaños / Re:Saludos a la comunidad.
Septiembre 16, 2016, 10:51:17 PM
Saludos y bienvenido... entiendo el significado de tu nick pero a que se debe?, por algun hecho especifico? como nacio? jeje.
#68
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Yo pienso que al día de hoy ya no existe lo conocido como privacidad ya que las multinacionales, gobierno, cyberdelincuentes estan 24 horas al dia diseñando e implementando nuevas formas de control, monitoreo, y demas. Todo viene empaquetado con el nombre de:

"Lo hacemos por tu seguridad"

El otro dia alguien preguntaba que si bastaba con esconder tu direccion IP publica detras de un proxy o navegando por alguna VPN y la respuesta es un rotundo NO, es que hoy dia hay tantas formas de reconocer un usuario en la red que esquivarlas todas es todo un acto de magia.

Google recopila tus habitos de navegacion, perfil del hardware, horarios de navegacion, geolocalizacion, idiomas de las busquedas, etc... Y si sumamos a eso que la mayoria portamos un Smartphone que se mantiene transmitiendo info dia y noche a los servidores de Google nos hacemos una pequeña idea de que tan falsa es la palabra privacidad, ya que con toda esa info y los "algoritmos extraterrestres" de Google el esconder tu direccion IP no significa nada.

Pero vamos un poco mas alla y hablemos de las redes sociales donde vivimos compartiendo info sensible cada vez que podemos, cosas como ubicacion, estados de animo, preferencia religiosa, preferencia politica, gustos culinarios, y mas y mas toneladas de informacion que JAMAS seran borradas desde ahora hasta el final de los tiempos.

Las ISP filtran contenido, ralentizan conexiones a su conveniencia, tienen acceso a nuestro router, gestionan nuestras consultas DNS (y cuando queremos hacernos los duros entonces usamos los DNS 8.8.8.8 & 8.8.4.4 que son propiedad de Google), las ISP graban tus conversaciones telefonicas, te triangulan la posicion de tu celular y todo eso queda registrado, me sorprendio mucho un caso reciente en mi pais de un asesinato a un rector de una universidad y la policia consiguio acceso a conversaciones por whatsapp entre el asesino y el autor intelectual del crimen, todo eso despues de que Whatsapp cifrara las comunicaccion punto a punto  ???

El FBI logro accesar al Iphone bloqueado de los atentados de San Bernardino, y aunque tuvo que pagar un dinero grueso para ello nos dejo con el sabor en la boca de "Podemos entrar a cualquier lugar".

La red TOR en realidad es segura, el asunto es que el ultimo nodo de la conexion no cifra la conversacion, con lo cual quien pueda encontrar uno podria cargarse el famoso anonimato con un chasquido de dedos, que como podrian encontrar dichos nodos? Basta con tener suficiente dinero para montar NOCs y analizar el trafico de la red.

Y es que ya no podemos confiar ni en los fabricantes, CISCO sufrio una pequeña caida en el mercado chino a raices de rumores de que instalaban BackDoors en el firmware de los routers de gama empresarial (supuestamente solo recopilaban estadisticas de rendimiento, pero vaya usted a saber...)

Cuales soluciones tenemos para protegernos un poco?

1.- Usar VPN de pago.
2.- Instalar un buen Firewall (evitamos conexiones no deseadas)
3.- Cifrar los correos usando PGP.
4.-Cifrar las consultas DNS.
5.-De ser posible bloquear el acceso remoto a nuestro router (Que se jodan los de la ISP, que vengan a mi casa si quieren diagnosticar algo)
6.-Apagar el GPS en los smartphone
7.-Leer muy bien los Agreements (Terminos de contratos) cuando instalamos alguna aplicacion en el movil, ya que casi siempre lo unico que piden es acceso a tus contactos, localizacion y estadisticas de uso y usar toda la info que tengan Google & Facebook.
8.-Si vas a subir algo a la red primero limpia los metadatos.
9.-Vigila tus habitos de navegacion.
10.- Cada cierto tiempo elimina las cookies, archivos temporales y consiguete algun software OpenSource para monitorear el trafico de tu red.

En resumen:

"La privacidad no existe"

Saludos.

Buen resumen Cl0uds comparto casi todo sólo algo quiero resaltar.. hay gente que nunca jamás relacionamos la vida personal con la cibernética. Y eso es una filosofía de vida. Desde mails distintos a conexiones distintas... es como tener una doble vida.

Eso va dependiendo la paranoia y de que trabajes. Pero el resto coincido plenamente.

El resto coincido.
#69
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Me acaba de pasar haciendo un post con dos guiones seguidos
habria que arreglar esto, por la tematica del foro es algo que se puede usar seguido

Sin dudas.. de hecho la semana pasada estaba posteando y encontre a Antrax en el IRC y se lo comente.

Saludos.
#70
Interesante y no hay que prejuzgar antes de tiempo, pero soy partidario a que todo lo que pueda hacer un ser humano, puede ser reemplazado y capaz hacerlo otro.

Mas aun sabiendo la tecnología que hay y los sistemas de espionajes. Pero vamos a ver como evoluciona esto.
#71
Efectivamente se genera trafico, y por muchos años mas alla de que ahora se apliquen mas cosas o tecnicas, fue el causante de DoS, o DDOS. Consiste en enviar paquetes ICMP echo request, etc. Busca sobre el famoso Ping de la Muerte... legendario si los hay.

Saludos.
#72
Los pagos sin dudas. Hay un ranking de top five importante. Los gratuitos son altamente desconfiable. No digo que los apgos sean el 100% seguro, seguro no hay nada. Pero sin dudas que el precio hace que el servicio y la performance sea mejor.

Hay VPN's que tienen como politicas no loguear nada. Eso significa que si pasa algo, no deberian poder encontrar mucho, claro, esto no hay quien lo garantice... un rotate de logs a un servidor tercerizado y fue.

Resumiendo, hay servicios y muy buenos. Repito, la mentalidad y paranoia va dependiendo cada uno de nosotros en que trabajemos y que informacion manejamos.

Saludos.
#73
Eso se debe a que en el contenido del mensaje tenes varios guiones o algún otro carácter especial repetitivo:

"- - -"

Proba a borrarlos.

Saludos
#74
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
2- SYN_SCAN
Mandamos un paquete SYN; si recibimos un paquete SYN-ACK no respondemos con un paquete ACK, si no que mandamos un paquete RST para cerrar la conección.
¿No responderíamos con un FIN? Porque con el RST volvería a comenzar la conexión y lo que se busca es finalizar de una vez porque ya sabemos que el puerto está abierto

Tenemos dos maneras de cerrar la conexión. Con FIN y RST.

Con FIN: Le decimos al otro host.. terminamos la conexión pero estoy dispuesto a escuchar lo que quieras decir.

Con RST: Le decimos.. Acá termino todo. No quiero que me digas más nada.. ni quiero escuchar más nada. Adiós.

:P.. se entiende!?.

El método SYN luego que recibe el syn/ack y sabe que el port esta abierto le envía un RST.

Saludos.
#75
Dudas y pedidos generales / Re:Duda con echo en Bash
Septiembre 12, 2016, 10:38:49 PM
Fijate de este modo, a mi me funciono. Te adjunto un pastebin: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

O codigo:

Código: text
echo -e "1) Hora y fecha \n2) Calendario del mes actual
3) Calendario del año actual \n4) Calculadora de presicion arbitraria
5) Lista de usuarios conectados\n6) Memora libre del sistema
7) Carga del sistema\n8) Ocupacion de todo el sistema de ficheros
9) Salir\n\nIntroduzca la opcion deseada>> \c "


#76
Sin duda hoy en día si necesitas hacer o manejar cosas de riesgo sensible o medio-alto.. utiliza vpn. Considero que es la mejor salida a todo lo que estas comentando en el primer post. Sin dudas que si lo complementas con varias tecnicas y equipos tercerizados, aun mejor. Tambien tener en cuenta las leyes de cada pais, y de donde se aplique la 'ultima' conexion a destino.
No es lo mismo desde una pc en USA que en una Sueca. Las leyes pueden salvar vidas je je.

Respecto a TOR, no confie, ni menos confio ahora. Antiguamente cualquier persona que sepa como funcionaba el sistema, tenia la logica de entender que podria ser comprometido.

El nivel de paranoia del usuario, va a ir en comparacion al nivel de conocimientos que tenga este usuario y que tipo de informacion maneje, asi como tambien en que niveles de gente se rodee.

Saludos.
#77
Python / Re:[Python] IPTools 1.0
Septiembre 12, 2016, 02:07:42 AM
Esta bien, sencillo pero util en lo que intenta hacer. Lo unico que haria como comentario es que intentes buscar una alternativa a la web de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta ya que si esa web se cae, el 50% de la funcionalidad del programa pierde sentido. Deberias tener una de backup alternativa.

Saludos.
#78
Fijate si algo asi te sirve.. como decias un JQUERY.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#79
Hacking / Nuestro primer BufferOverflow.
Septiembre 11, 2016, 12:38:22 AM
Bueno hoy como un amigo no entendia bien el concepto se me ocurrio crear una entrada en mi blog con lo siguiente, mas que nada porque nunca lo habia hecho en mi blog. Como siempre, trato de compartirlo y esperar que sea util para alguien, aunque sea algun invitado perdido del mas alla y nunca me entere. jeje..

Esto es para los que inician y que sea compatible con las ultimas distros de Linux, ojala sirva de partida o impulso a seguir progresando.



# REQUISITOS PREVIOS:

Los únicos requisitos son saber un básico de assembler, gcc y conocimientos de C.



CONTENIDO:
[Segmentacion de la memoria]
[Registros assembler de uso comun]
[Manejo de memoria en una llamada a función]
[Ahora si.. ¿Que es un Buffer Overflow?]
[Nuestro codigo C vulnerable]
[Desensamblando con GDB]
[Creando el payload y desbordando el buffer]


[Segmentacion de la memoria] de un programa en C:

Cuando compilamos un programa con su respectivo código fuente, por ejemplo en C, la memoria se divide en 5 partes fundamentales como muestra la siguiente imagen:



Command-Line arguments and environment variables // Argumentos de Linea de Comandos y variables de Entornos:
Acá es donde se almacenan los argumentos que le pasamos al binario al momento de correrlo, y también las variables de entornos. Por ejemplo:

Código: text
$> ./binario [Argumento1] [Argumento2]


#STACK:
La famosa pila, es el lugar donde se usa como memoria temporal para almacenar las variables de funciones locales y contexto durante las llamadas a funciones.
La pila es una estructura de datos abstractos que se usan con frecuencia.
El método en que los datos se ingresan es en modo LIFO del ingles Last Input, First Output. Que quiere decir Ultimo entrado, Primero salido. Imagínenlo como un mazo de cartas. Al poner una carta encima de la otra, para retirar la que esta debajo, primero tendríamos que sacar la que pusimos en ultimo lugar, y por ultimo sacaríamos la que estaba debajo de todo.

#HEAP:
El heap es un segmento de la memoria que puede ser manejado directamente por el programador, quien puede colocar y usar los bloques de memoria del segmento para lo que quiera. Siempre que se use por ejemplo la funcion "malloc" para obtener memoria dinamicamente sera asignado en el HEAP.

#Uninitialized data o No-Inicializadas.. (BSS SEGMENT):
Es el segmento donde se encuentran las variables estáticas y globales no inicializadas.

#Initialized data o Inicializadas.. (DATA SEGMENT):
En su contrapartida a la anterior, es donde se almacenan todas las variables estáticas y globales inicializadas.

#TEXT:
En este lugar los permisos de escritura suelen estar deshabilitados y no se usa para almacenar variables. Solo código. Posee un tamaño fijo, ya que no hay nada que permita cambiarlo. El loader carga instrucciones desde acá y las ejecuta.



[Registros assembler de uso comun]

Explicare ahora algunos de los registros assembler que ya deberían tener en claro, pero por si las dudas:

EAX,EBX,ECX,EDX:
Estos registros son de propósito general.. suelen usarse para varias cosas pero principalmente como variables temporales para la CPU cuando esta ejecutando instrucciones de maquina.


EIP:
Es el registro de puntero de instrucción. Señala la instrucción que el procesador esta leyendo actualmente.. piénsenlo cuando de chicos leíamos un libro y con nuestro dedo seguíamos cada palabra.

ESP:
Es el registro puntero de STACK. Almacena la dirección de lo alto de la pila.
Como dije anteriormente, imaginemos que es un mazo de cartas, este registro almacena la dirección del ultimo elemento que se añadió al mazo.

EBP:
Es el registro puntero que posee la dirección base de la pila, a contrapartida de ESP que mantenía la dirección de la cima de la pila. EBP contiene el puntero al primer bloque de la memoria del rango de bloques mientras que ESP representa el ultimo bloque de la memoria de una función.

[Manejo de memoria en una llamada a funcion]:

Para entender mejor todo esto, veremos un pequeño código y explicare paso a paso que va sucediendo:

Código: c
int test(int a, int b) {
    int x, z;
}
int main() {
    test(10, 12); 
}


Bien, como vemos, tenemos la funcion MAIN(), y la funcion test(). Mediante main llamamos a la función test() pasandole dos enteros y la función test() recibe esos dos valores enteros. Ademas se declaran 2 variables enteras llamadas 'x' y 'z' sin ningun valor especifico.

¿Pero como funciona esto a nivel memoria?.. asi:

EIP se encuentra con la llamada a la funcion test(). Automaticamente se ingresan los datos a la pila, el orden es de derecha a izquierda. Por ende primero se hara un PUSH de 12 y luego de 10:


10
12
******


Una vez hecho eso se necesita saber como seguir después de que la función TEST termine, por ende se pone la direccion de la siguiente instrucción en la pila.

Una vez se realiza esto, se pone la dirección de la función TEST() en el EIP ahora apunta a la función TEST() la cual toma control.

Como ahora nos encontramos en la función TEST(), se requiere actualizar el registro EBP. Pero antes guardamos EBP en la STACK, para una vez terminado el trabajo, sepamos regresar a la función MAIN() sin problemas.

Luego, se setea EBP igual a ESP. Ahora EBP apunta al actual puntero de pila o stack pointer, (ESP viene del ingles Extended STACK POINTER).

A continuación se ponen las variables locales que declaramos "x" y "z" en el espacio reservado en la STACK. El valor de ESP a raíz de esto es modificado.

Una vez que la función TEST() finaliza.. se necesita regresar al marco de pila anterior (o stack frame en ingles). Por lo tanto se setea ESP al EBP con el valor anterior. Se retira EBP con el valor anterior de la STACK y se vuelve a almacenar en EBP. Ahora el EBP apunta de regreso a MAIN(). (recuerdan que arriba lo habíamos almacenado para poder acordarnos como regresar?).

Para finalizar, se quita el RET ADDRESS de la pila que habíamos puesto y EIP ahora apunta a la dirección que contenía el RET, justamente una instruccion despues del CALL a la función TEST().

Algo así quedaría la Memoria mientras se ejecuta la funcion TEST():

*************************************************
12
*************************************************
10
*************************************************
<RET ADDRESS>
*************************************************
<EBP de MAIN()>                         >>>>>>>>>>>>> EBP
*************************************************
Lugar asignado para variable "x"
*************************************************
Lugar asignado para variable "z"  >>>>>>>>>>>>> ESP
*************************************************


Después de esto tedioso.. Empecemos con un poco mas de diversion.

[Ahora si.. ¿Que es un Buffer Overflow?]



En pocas palabras el Buffer Overflow, desde ahora BOF, ocurre cuando en un programa o proceso se intenta almacenar mas datos en un buffer del que este fue previamente programado. Cuando los buffers (espacios de memoria destinados para cierta cantidad de datos), son sobrecargados, como si fuese un vaso de agua que contiene cierta capacidad para contenerla y cuando esta al máximo, la famosa gota que rebalsa el vaso. En esto es lo mismo, los datos extras que rebalsa de un buffer pueden tener distintos impactos desde corromper una aplicación y detenerla, los bytes sobrantes pueden almacenarse en buffers o zonas de memorias adyacentes.. etc.

Un usuario malintencionado podría guiar un BOF para influir en determinado funcionamiento del sistema, como por ejemplo la escalada de privilegios, etc.

[Nuestro código C vulnerable]:

Pueden descargar el codigo de aca: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.



Bien, este código es muy básico, pero no menos util. Una breve reseña de lo que hace: Ademas de la función main() posee dos funciones VERIFICAR() y FuncionOBJETIVO(). Una vez que se llama a la función Verificar(), se declara un Buffer de 15 caracteres y se solicita una clave; si la clave es diferente a "passw0rd", dará error. Si es correcta, invoca a la FuncionOBJETIVO().

Nuestra idea claramente no es poner el password correcto, es solo un detalle.
Nuestro verdadero objetivo sera en este ejemplo, modificar el RETurn address y lograr ejecutar como RET la address de FuncionOBJETIVO() sin introducir el password correcto, solo desbordando el buffer.

Una vez tienen el código, hay que compilarlo. La siguiente sintaxis compilara mediante GCC el código, atención al flag -fno-stack-protector. Este flag deshabilita la protección de la pila que viene por default. (Mas adelante se tocaran temas de protecciones, etc.). De momento testeamos de esta manera. Si estas usando un sistema operativo de 64bits, hay que agregarle otro flag -m32. Tambien le agrego el flag -g para que luego el gdb me muestre el codigo fuente mientras lo manipulamos.



Una vez compilado, procedemos a ejecutarlo:



Como vemos, ejecutamos el binario ./final, ingresamos un passwd incorrecto. Luego reintentamos con el correcto y nos demuestra que invoca la FuncionOBJETIVO() correctamente, y luego intentamos desbordarlo manualmente con muchos "9".
Nos arroja un Segmentation Fault. Tipico error de crasheo.

[Desensamblando con GDB]:

Es importante aclarar antes que las direcciones de memoria podrían variar levemente en sus maquinas y no ser iguales a las mías.

Vamos a correr nuestro binario en GDB (GNU Debugger) y desensamblamos la función MAIN():





No hay mucho por ver, ya que solo se limita a llamar a la funcion Verificar().

Ahora desensamblamos la función VERIFICAR() y resalto lo mas importante:



En la tercer linea vemos como se reserva un espacio de 0x28 (en hexadecimal), que pasado a Decimal es: 40. En este lugar es donde se reservan las variables locales de la función. En la siguiente linea con mas claridad vemos:



Esta linea nos indica donde es que empieza buffer justo 0x1B (1B en hexadecimal; y decimal es: 27) bytes antes a EBP.

Bien, por ultimo nos queda desensamblar la FuncionOBJETIVO():



La FuncionOBJETIVO() empieza en la direccion 080484cb.


[Creando el payload y desbordando el buffer]:

Vamos a reunir lo que comentamos arriba y diseñar el payload, este es el que se va a encargar de desbordar el buffer y hacernos llegar a esa FuncionOBJETIVO(). sin necesidad de poner el password, aprovechándonos de un RET.

Como dije antes, nuestro buffer comienza a 27 bytes antes del EBP. Esto quiere decir que tenemos 27 bytes y luego vienen 4 bytes mas de EBP. El Base Pointer. Luego de eso como habiamos visto al principio, tendríamos que encontrarnos con el RET ADDRESS, que es la direccion de retorno, una vez que la función finalice EIP usara esa direccion para regresar.

Y ese es el punto en el que vamos a desbordar y abusar del RET para que nos lleve a la FuncionOBJETIVO(). Sabemos que la direccion de nuestra FuncionOBJETIVO(), comienza en "080484cb"..

La cosa estaría mas o menos así:

Código: text
27 bytes+4bytes = 31bytes tenemos de caracteres random. 
Los 4 bytes restantes serán de la direccion de la FuncionOBJETIVO() en el RET.


Bien haremos lo siguiente, vamos a invocar python para aplicar nuestro payload sobre el binario. Ahora suponiendo que sus maquinas utilicen Little-Endian, cosa que asi es en mi caso (mas info en wikipedia), tenemos que ingresar los bytes del siguiente modo a la inversa para que funcione, si la direccion era "08 04 84 CB" tenemos que aplicarlo al revés... "CB 84 04 08".

Invocamos python del siguiente modo:



Se invoca python, y se envían al binario 31 bytes (letras "A"), y se le suman 4 bytes finales que son la direccion donde empieza la FuncionOBJETIVO(). Mediante el pipe se le pasa al binario y logramos obtener el mensaje de "Buffer Overflow con éxito".

Para finalizar, decir que hay varias funciones vulnerables a BOF, strcpy(), gets(), scanf(), sprintf(), strcat(), etc

Espero que como introducción haya servido, cualquier duda ya saben, me escriben.
Saludos.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#80
No es muy común, pero no es imposible. Hay varios CVE y demostraciones de esto posible. Hay varios exploits priv8 sofisticados y muy sofisticados resalto para algo asi. Si tu idea es un laboratorio de prueba Malware por ejemplo, procura usar virtualbox como sandbox.. tambien tener el cuidado de que tu VMachine infectada no este en la misma network que el Host.

Tranquilo... saludos.