El objetivo de la ponencia es explicar las ventajas que nos va brinda la posibilidad de encolar el tráfico TCP/IP desde el espacio de kernel hacia el espacio de usuario. Esta teçnica permite gran cantidad de aplicaciones prácticas, ofensivas y defensivas, como modificar tráfico entrante/saliente en tiempo real, crear una capa de protección contra 0days hasta la publicación del parche correspondiente, detectar tráfico no autorizado como conexiones por dns tunneling etc.
Finalmente se explicará más en profundidad las diversas técnicas de detección de sistema operativo, tanto activas como pasivas, así como pruebas de concepto contra herramientas y dispositivos de seguridad conocidos, alterando los resultados a nuestra voluntad en entornos defensivos, o contra dispositivos de detección en entornos más ofensivos.
Jaime Sánchez - From kernel space to user heaven [Rooted CON 2013]
1. From Kernel Sp ce
To User Heaven
Jaime
Sánchez
@segofensiva
2. WHO
AM
I
§
Ingeniero
Informá,ca
de
Sistemas
y
Execu,ve
MBA
§
Soy
un
apasionado
de
la
seguridad
informá,ca,
con
más
de
10
años
de
experiencia
profesional.
§
Comencé,
como
muchos
otros,
en
la
edad
de
oro
del
Phreak
español
§
Mi
alma
sigue
siendo
Old
School,
aunque
desconozco
cuando
la
vendí
para
trabajar
en
Seguridad
Copora,va
;)
§
Estoy
tratando
de
retomar
mis
andaduras,
con
el
inicio
de
un
nuevo
blog
www.seguridadofensiva.com
§
Contacto:
jsanchez@seguridadofensiva.com
2
5. §
Evolución
de
los
ataques
informá,cos
durante
el
2012
§
Incremento
del
Espionaje
Industrial,
HackBvismo
y
Ciberguerra
§
Ataques
a
grandes
empresas
como
Facebook,
Apple,
TwiHer,
New
York
Times
§
Intereses
económicos
y
polí,cos,
como
APT1,
Stuxnet
etc.
5
6. METODOLOGÍA
DE RECONOCIMIENTO
UNA
INTRUSIÓN
EXPLORACIÓN
COMPROMISO
DEL
SISTEMA
MANTENIMIENTO
DEL
ACCESO
BORRADO
DE
HUELLAS
6
8. ARQUITECTURA
§
Diferentes
nivels
de
acceso
a
recursos
Ring
3
§
Forzado
por
hardware
en
la
CPU,
ofreciendo
Ring
2
diferentes
modos
a
nivel
de
hardware
o
Ring
1 microcódigo
Ring
0
§
Organización
en
una
jerarquía
de
más
Kernel
privilegiado
(ring0)
a
menos
privilegiado
(número
de
anillo
más
alto)
DisposiBvos
§
El
anillo
0
es
el
nivel
con
la
mayoría
de
los
DisposiBvos
privilegios
e
interactua
directamente
con
el
Aplicaciones hardware
^sico,
como
la
CPU
y
memoria
§
El
anillo
0
posee
el
nivel
más
bajo
de
protección,
se
espera
que
nunca
se
cuelgue.
En
ese
caso,
todo
Más Menos
Privilegiado Privilegiado
el
sistema
caerá
con
él.
8
9. KERNEL
vs
USER
SPACE
v KERNEL
SPACE:
área
protegida
donde
el
kernel
ejecuta
y
presta
sus
servicios:
*
Creación
de
procesos,
asignación
de
,empos
de
atención
y
sincronización
*
Asignación
de
la
atención
de
la
CPU
a
los
procesos
que
lo
requieran
*
Administración
del
espacio
en
el
sistema
de
archivos:
acceso,
protección,
comunicación,
E/S
y
periféricos.
*
Ges,ón
del
hardware:
memoria,
procesasor
y
formas
de
almacenamiento
v
USER
SPACE:
espacio
reservado
para
aplicaciones
del
usuario:
*
Cada
proceso
normalmente
ejecuta
su
memoria
virtual,
y
a
menos
que
se
solicite
de
forma
explícita,
no
se
puede
acceder
a
la
memoria
de
otros
procesos.
*
Comienza
cuando
el
kernel
monta
roocs.
El
primer
programa
en
ser
ejecutado
por
defecto
es
/sbin/init
9
11. KERNEL
vs
USER
SPACE
Applica,on
Code
Your
Program User
Space
C
Library
System
Interface
Linux
Kernel Generic
Services Kernel
Space
Device
Drivers
Hardware
11
15. IPTables
§
Necilter
permite
interceptar
y
manipular
paquetes
de
red,
permi,endo
el
manejo
en
diferentes
estados
de
procesamiento.
§
El
componente
más
popular
construído
sobre
Necilter
es
iptables,
una
herramienta
de
firewall
que
permite:
•
Filtrar
paquetes
•
Realizar
traducciones
de
direcciones
de
red
(NAT)
•
Mantener
registros
de
LOG
•
Soporte
para
IPv4
e
IPv6
•
Stateless
/
Statefull
packet
filtering
§
El
nombre
de
iptables
se
u,liza
de
forma
errónea
para
referirse
a
toda
la
infraestructura
ofrecida
por
el
proyecto
Necilter.
§
El
proyecto
ofrece
otros
subsistemas
independientes
de
iptables,
tales
como
el
connec,on
tracking
system,
que
permite
encolar
paquetes
para
que
sean
tratados
desde
el
espacio
de
usuario.
15
16. FUNCIONAMIENTO
§
Sencillez
para
la
escritura
de
reglas
§
Sencillez
para
crear
nuevas
reglas,
con
frases
básicas
del
,po:
1.
"Quiero
autorizar
el
acceso
a
mi
servidor
web
a
través
de
mi
firewall"
2.
"Quiero
autorizar
a
los
usuarios
de
la
LAN
a
conectarse
a
la
web
a
través
de
mi
firewall"
3.
"Acepto
que
gente
pueda
conectarse
al
servidor
ssh
a
través
firewall".
4.
"Quiero
que
desde
mi
firewall
se
permita
hacer
ping
a
todo
Internet."
§
Así
que
una
manera
sencilla
de
clasificar
los
paquetes
que
ges,ona
un
servidor
de
seguridad
se
va
a
dividir
el
flujo
en
tres
partes:
1.
paquetes
dirigidos
al
servidor
de
seguridad
(tercer
caso)
2.
paquetes
que
pasan
por
el
firewall
(los
casos
primero
y
segundo)
3.
paquetes
emi,dos
por
el
servidor
(cuarto
caso)
§
§Hay
tres
cadenas
básicas:
•
INPUT:
entrada
•
OUTPUT:
salida
•
FORWARD:
reenvío 16
17. FUNCIONAMIENTO
§
Para
los
paquetes
salientes
que
tenemos
dos
cadenas:
•
Paquetes
que
llegan
desde
el
firewall:
la
cadena
OUTPUT
•
Paquetes
que
pasan
por
el
firewall:
la
cadena
FORWARD
§
Existe
tres
tablas
incorporadas,
cada
una
de
las
cuales
,ene
cadenas
predefinidas:
•
filter
table:
responsable
del
filtrado.
Todos
los
paquetes
pasan
a
través
de
la
tabla
de
filtros.
Con,ene
las
siguientes
cadenas
predefinidas:
INPUT
/
OUTPUT
/
FORWARD
•
net
table:
responsable
de
configurar
las
reglas
de
reescritura
de
direcciones
o
de
puertos
de
los
paquetes.
El
primer
paquete
en
cualquier
conexión
pasa
por
esta
tabla:
PREROUTING
/
POSTROUTING
/
OUTPUT
•
mangle
table:
responsable
de
ajustar
las
opciones
de
los
paquetes.
Todos
los
paquetes
pasan
por
esta
tabla.
Con,ene
todas
las
cadenas
predefinidas
posibles:
PREROUTING
/
INPUT
/
FORWARD
/
OUTPUT
/
POSTROUTING
17
18. DESTINOS
DE
REGLAS
§
Existen
los
siguientes
des,nos
ya
incorporados:
•
ACCEPT:
necilter
acepta
el
paquete
•
DROP:
necilter
descarta
el
paquete
sin
ningún
otro
,po
de
procesamiento
•
QUEUE:
este
des,no
hace
que
el
paquete
sea
enviado
a
IMPORTANTE
una
cola
en
el
espacio
de
usuario.
Una
aplicación
puede
usar
la
biblioteca
libipq
(parte
del
proyecto
necilter)
para
alterar
el
paquete.
Si
no
existe
ninguna
aplicación
que
lea
la
cola,
este
des,no
equivale
a
DROP.
•
RETURN:
el
paquete
deja
de
circular
por
la
cadena
en
cuya
regla
se
ejecutó
el
des,no
RETURN.
§
Otras
extensiones:
•
REJECT:
mismo
efecto
que
DROP,
pero
envía
un
mensaje
de
error
a
quien
lo
envió
originalmente:
tcp-‐reset
para
conexiones
tcp
denegadas,
icmp-‐port-‐unreachable
para
sesiones
UDP
denegadas
etc.
•
LOG
/
ULOG:
log
de
los
paquetes
o
mul,difusión
a
un
socket
•
DNAT
/
SNAT:
reescritura
de
des,no/origen
para
traducción
NAT
•
MASQUERADE:
forma
especial
de
SNAT
para
direcciones
IP
dinámicas 18
20. NFQUEUE
§
NFQUEUE
permite
delegar
la
decisión
de
los
paquetes
en
el
espacio
de
usuario
§
Es
necesario
disponer
de
un
sosware
que
esté
a
la
escucha
en
la
cola
que
queramos
u,lizar,
que
obtenenga
los
paquetes
del
kernel
y
devuelva
un
veredicto
con
cada
uno
§
La
cola
es
una
lista
enlazada,
cuyos
elementos
son
el
paquete
y
metadatos,
que
posee
las
siguientes
caracterís,cas:
§
Longitud
Fija
§
Los
elementos
se
almacenan
e
indexan
con
un
entero
§
Un
paquete
es
liberado
cuando
se
devuelve
el
veredicto
desde
el
espacio
de
usuario
a
un
determinado
índice
§
Cuando
la
cola
se
llena,
no
es
posible
encolar
más
paquetes
§
Implicaciones:
§
Podemos
devolver
los
veredictos
en
el
orden
que
queramos
§
Es
posible
leer
múl,ples
pauqetes
antes
de
devolver
el
veredicto.
Si
devolvemos
los
veredictos
de
forma
lenta,
la
cola
se
llenará
y
el
comenzaremos
a
,rar
los
paquetes
nuevos
que
lleguen
a
nosotros
20
25. FAKE
SSH
SOURCE
Atacante
$
_
Router
www.rootedcon.es
Servidor
SSH
-‐
Ocultaremos
nuestra
direción
IP
de
origen
y
podremos
modificarla
con
cualquier
otro
valor
que
necesitemos
en
nuestra
máquina
comprome,da
Servidor
SSH.
-‐
Ú,l
para
saltarte
filtros
o
para
no
llamar
la
atención
del
administrador.
25
26. PORT
KNOCKING
El
Port
Knocking
es
una
técnica
para
establecer
una
conexión
a
un
ordenador
de
la
red
que
no
,ene
puertos
abiertos.
Imágenes:
www.portknocking.com
Antes
de
que
una
conexión
se
establezca,
los
puertos
se
abren
mediante
una
secuencia,
que
es
una
serie
de
intentos
de
conexión
para
puertos
cerrados.
26
27. BLACK
OPS
OF
DNS
§
El
DNS
Tunneling
permite
crear
un
tunel
IP
sobre
el
protocolo
DNS,
para
conseguir
salir
a
Internet
en
un
entorno
donde
al
unico
servicio
que
podemos
acceder
es
un
DNS
que
nos
resuelve
direcciones
de
Internet.
§
Dos
formas
de
encapsular
datos
en
DNS:
§
Base64
para
registros
TXT
(~220
bytes/paquete)
§
Base32
para
registros
CNAME
(~110
bytes/paquete)
27
34. §
Aunque
cada
día
es
más
sencillo
buscar
un
target
con
una
versión
específica.
34
35. NMAP
§
Nos
centraremos
en
el
resultado
interesante
para
el
reconocimiento
remoto
del
sistema
opera,vo,
como:
-‐
Device
Type
-‐
Network
Distance
-‐
Running
-‐
TCP
Sequence
Predic,on
-‐
OS
Details
-‐
IP
ID
Sequence
Genera,on
-‐
Up,me
Guess
35
39. MÉTODOS
UTILIZADOS
POR
NMAP
§
El
método
u,lizado
por
nmap
envía
15
pruebas
TCP,
UDP
e
ICMP,
tanto
a
puertos
abiertos
del
sistema,
como
a
cerrados.
Estas
pruebas
están
especialmente
diseñadas
para
explorar
ambigüedades
respecto
a
los
estándares
del
RFC
y
escucha
las
respuestas.
§
SEQUENCE
GENERATION
(SEQ,
OPS,
WIN
y
T1):
se
envían
6
pruebas
TCP
a
un
puerto
que
haya
comprobado
que
esté
abierto.
Estos
paquetes
varían
en
las
opciones
TCP
y
el
valor
de
ventana:
§
Paquete
1:
WS(10),NOP,MSS(1460),TS(Tval:0xFFFFFFFF.
Tsecr:0),
SACK
y
W(1)
§
Paquete
2:
MSS(1400),
WS(0),SACK,
TS(Tval:0xFFFFFFFF.
Tsecr:0),EOL
y
W(63)
§
Paquete
3:
TS(Tval:0xFFFFFFFF.
Tsecr:0),NOP,NOP,WS(5),NOP,MSS(640)
y
W(4)
§
Paquete
4:
SACK,
TS(Tval:0xFFFFFFFF.
Tsecr:0),WS(10),EOL
y
W(4)
§
Paquete
5:
MSS(536),SACK,
TS(Tval:0xFFFFFFFF.
Tsecr:0),
WS(10),EOL
y
W(16)
§
Paquete
6:
MSS(265),SACK,
TS(Tval:0xFFFFFFFF.
Tsecr:0)
y
W(512)
§
ICMP
ECHO
(IE):
se
realiza
el
envío
de
dos
paquetes
ICMP
ECHO.
§
TCP
explicit
congesBon
noBficaBon
(ECN):
Se
realiza
el
envío
a
un
puerto
abierto,
con
los
flags
ECN
CWN
y
ECE
ac,vados,
WS(10),
NOP,
MSS(1460),SACK,NOP,NOP
y
W3)
39
40. §
TCP
T2-‐T7:
cada
prueba
se
genera
realizando
el
envío
de
un
paquete
TCP.
Salvo
uno
de
ellos,
las
opciones
en
este
caso
corresponden
a
WS(10),
NOP,
MSS(265),
TS
(Tval:
0xFFFFFFFF,
Tsecr:0).
§
T2:
sin
flags,
IP
DF
y
W(128)
a
un
puerto
abierto
§
T3:
SYN,
FIN,
URG,
PSH
y
W(256)
a
un
puerto
abierto
§
T4:
ACK
con
IP
DF
y
W(1024)
a
un
puerto
abierto
§
T5:
SYN
con
W(31337)
a
un
puerto
cerrado
§
T6:
ACK
con
IP
DF
y
W(32768)
a
un
puerto
cerrado
§
T7:
FIN,
PSH,
URG
con
W(65535)
a
un
puerto
cerrado
§
UDP:
se
trata
de
un
paquete
UDP
enviado
a
un
puerto
cerrado.
El
payload
del
paquete
consisten
en
el
carácter
‘C’
(0x43)
repeBdo
300
veces.
Si
el
puerto
está
cerrado
y
no
hay
un
firewall
entre
medias,
se
espera
recibir
un
paquete
ICMP
port
unreachable
de
respuesta.
40
41. §
Lanzamos
el
nmap
para
detectar
sistema
opera,vo
con
la
opción
–packet-‐trace:
§
Comprobamos
si
somos
capaz
de
detectar
el
escaneo:
41
42. ANÁLISIS
DE
LAS
RESPUESTAS
Fingerprint Linux 2.6.17 - 2.6.24
Class Linux | Linux | 2.6.X | general purpose
SEQ(SP=A5-D5%GCD=1-6%ISR=A7-D7%TI=Z%II=I%TS=U)
OPS(O1=M400C%O2=M400C%O3=M400C%O4=M400C%O5=M400C%O6=M400C)
WIN(W1=8018%W2=8018%W3=8018%W4=8018%W5=8018%W6=8018)
ECN(R=Y%DF=Y%T=3B-45%TG=40%W=8018%O=M400C%CC=N%Q=)
T1(R=Y%DF=Y%T=3B-45%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=Y%DF=Y%T=3B-45%TG=40%W=8018%S=O%A=S+%F=AS%O=M400C%RD=0%Q=)
T4(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T5(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T7(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
U1(DF=N%T=3B-45%TG=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
IE(DFI=N%T=3B-45%TG=40%CD=S)
Destacaremos: Aunque
hay
muchas
más:
§
TCP
ISN
greatest
common
divisor
(GDC) §
TCP
ISN
counter
rate
(ISR)
§
TCP
IP
ID
sequence
genera,on
alg
(TI) §
ICMP
IP
ID
sequence
genera,on
alg
(II)
§
TCP
,mestamp
op,on
alg
(TS) §
Shared
IP
ID
sequence
Boolean
(SS)
§
TCP
Op,ons
(O,
O1-‐O6) §
Don’t
Fragment
ICMP
(DFI)
§
TCP
ini,al
Window
Size
(W,
W1-‐W6) §
Explicit
conges,on
no,fica,on
(C)
§
Responsiveness
(R) §
TCP
miscellaneous
quirks
(Q)
§
IP
don’t
fragment
bit
(DF) §
TCP
sequence
number
(S)
§
IP
ini,al
,me-‐to-‐live
guess
(TG) §
etc. 42
46. FORMAS
DE
PROTEGERSE
§
Existen
una
serie
de
herramientas
an,guas
que
permizan
defenderse
y
falsear
las
respuestas
de
los
escaneos
de
la
herramienta
nmap.
Algunas
de
ellas
son:
•
IP
Personality:
se
trata
de
un
módulo
de
necilter
solamente
disponible
para
la
versión
2.4
del
Kernel
de
Linux,
que
permite
variar
ciertos
parámetros
del
comportamiento
de
la
pila
TCP/IP
y
modificar
la
‘personalidad’
de
nuestro
equipo.
•
Stealth
Patch:
parche
disponible
para
el
kernel
2.2.x
•
Fingerprint
Fucker:
módulo
de
kernel
para
versiones
2.2.x
que
permite
variar
el
comportamiento
de
las
respuestas
de
nuestro
equipo.
Se
trata
también
de
un
módulo
de
kernel.
Sólo
responde
a
ciertas
pruebas
an,guas
de
nmap
(T1,
T2
y
T7).
•
IPLog:
es
un
logger
que
permite
detectar
escaneos
(XMAS,
FIN,
SYN…).
Permite
engañar
a
nmap
a
través
de
la
opción
‘-‐z’.
•
Blackhole:
opción
existente
en
el
kernel
*BSD
que
permite
manejar
el
comportamiento
de
las
respuestas
del
equipo
cuando
alguien
se
conecta
a
puertos
TCP/UDP
cerrados. 46
49. p0f
-‐
Los
modos
p0f
nos
permite
para
realizar
el
análisis
del
sistema
opera,vo
son:
§
SYN
Mode
§
SYN+ACK
Mode
§
RST+
Mode
-‐
Escaneo
pasivo
-‐
No
se
envía
tráfico
por
la
red
-‐
No
detectable
49
50. FORMATO
DE
FIRMAS
8192:32:1:48:M*,N,N,S:.:Windows:98
Sistema
Opera,vo
-‐
Familia
-‐
Versión
Tamaño Quirks
-‐
Datos
en
paquetes
SYN
-‐
Opciones
después
del
EOL
-‐
Campo
IP
ID
a
cero
Bit
DF
(0/1)
-‐
ACK
dis,nto
de
cero
-‐
Flags
no
habituales
TTL
Inicial
-‐
Decodificación
de
opciones
errónea
Window
Size Opciones
TCP
y
con
su
orden
-‐
*
Cualquier
valor
-‐
N:
NOP
-‐
%nnn
Valor
múl,plo
de
nnn
-‐
E:
EOL
-‐
Sxx
Múl,plo
de
MSS
-‐
Wnnn:
WS
-‐
Txx
Múl,plo
de
MTU
-‐
Mnnn:
MSS
-‐
xxx
Valor
concreto
-‐
S:
SACK
-‐
T
/
T0:
Timestamp
-‐
?n
50
51. SOURCEFIRE
La
tecnología
Sourcefire
FireSight
está
incorporada
en
la
úl,ma
generación
de
sensores
de
Sourcefire,
proporcionando
inteligencia
a
red
y
contexto,
a
través
de
un
motor
de
detección
inteligente
que
permite,
entre
otras
funciones,
obtener
información
del
sistema
opera,vo
de
las
máquinas
de
nuestra
red.
Fichero:
rna_fingerprints.oucile
51