Actualizado el 21 de Marzo del 2018 (Publicado el 18 de Enero del 2018)
938 visualizaciones desde el 18 de Enero del 2018
987,7 KB
24 paginas
Creado hace 10a (28/05/2014)
28/05/2014
Ataques a Servidores Web
Seguridad en los
Si t
d
Sistemas de
Información
Dra. Maricela Bravo
Un servidor es un programa que se ejecuta
en computadoras normalmente más
en computadoras normalmente más
poderosas que las computadoras
personales.
Se ejecuta sobre sistemas operativos que
i
l
t
soportan concurrencia, paralelismo y
multiprogramación, por ejemplo Windows
200x server, o basados en Unix.
li
2
1
a.
b.
c.
d.
Servidor de archivos. Proporciona acceso a sistemas de
archivos distribuidos. Los clientes pueden buscar en
directorios, leer y escribir bloques de archivos, etc.
Servidor de bases de datos. Proporcionan acceso a
uno o más DBMS. Las solicitudes de los clientes se
realizan normalmente mediante lenguaje SQL.
Servidor de aplicaciones. Proporcionan acceso a
procedimientos remotos, mediante la invocación de los
clientes.
Servidor de correo. Ofrece servicio de envío y
recepción de mensajes de correo, así como mensajería
instantánea.
e.
Servidor Web.
Un servidor Web o demonio HTTP es un
programa que controla el flujo de datos
entrantes y salientes de una computadora
conectada a Intranet e Internet.
Un servidor Web es un programa de
aplicación que atiende las solicitudes HTTP
realizadas por los navegadores.
Escucha peticiones en el número de puerto
80, normalmente.
Los programas de aplicación más difundidos
Los programas de aplicación más difundidos
para montar un servidor Web son:
› Apache Tomcat
›
Internet Information Server
3
4
28/05/2014
2
Es un protocolo de petición/respuesta sin estado
cuya operación básica es la siguiente :
cuya operación básica es la siguiente :
GET/document.html http/1.1
http/1.1 200 OK
Content-Type:text/html
<HTML>…</HTML>
Navegador Web
Servidor Web
5
28/05/2014
3
Capa de Aplicación
› Aplicaciones estándar
HTTP
FTP
FTP
Telnet
› Aplicaciones de usuario
Capa de Transporte
› TCP
› UDP
› Interfaces de
programación:
Sockets
Capa de Red
Capa de Enlace
› IP
› Drivers de dispositivos
TCP/IP Stack
Application
(http, ftp, telnet,…)
Transport
(TCP, UDP,..)
Network
(IP,..)
Link
(device driver,..)
7
TCP (Transport Control
Protocol)
Protocol)
Es un protocolo orientado
a conexión que
proporciona un flujo de
datos confiable entre dos
computadoras.
Ejemplo de aplicaciones:
› HTTP
› HTTP
› FTP
› Telnet
TCP/IP Stack
Application
(http, ftp, telnet,…)
Transport
(TCP, UDP,..)
Network
(IP,..)
Link
(device driver,..)
8
28/05/2014
4
UDP (User Datagram
Protocol)
Protocol)
Es un protocolo que envía
paquetes de datos
independientes, llamados
datagramas, de una
computadora a otra, sin
garantizar su llegada.
Ejemplo de aplicaciones:
k
Cl
› Clock server
› Ping
TCP/IP Stack
Application
(http, ftp, telnet,…)
Transport
(TCP, UDP,..)
Network
(IP,..)
Link
(device driver,..)
9
TCP y UDP utilizan
puertos para enviar
datos entrantes a un
proceso particular
que se esté
ejecutando en la
computadora.
server
P
o
r
t
TCP
TCP
Client
app
app
app
app
port
port
port
TCP or UDP
port
Data
Packet
port# data
10
28/05/2014
5
28/05/2014
Los puertos son representados por valores
enteros positivos de 16 bits.
Algunos puertos están reservados para soportar
servicios preestablecidos:
21/TCP
› FTP
› Telnet 23/TCP
› SMTP 25/TCP
› HTTP
› HTTP
80/TCP
80/TCP
Los procesos o servicios de usuarios
generalmente usan números de puertos >=
1024.
11
Los sockets proporcionan una interfaz para la
programación de redes en la capa de transporte.
Las comunicaciones de redes utilizando Sockets es
muy similar al manejo de I/O en archivos.
› De hecho, el manejo de sockets es tratado como el
manejo de archivos.
› Los streams utilizados en operaciones de I/O de archivos
también son aplicables a I/O basado en sockets.
La comunicación basada en Sockets es
p
independiente del lenguaje de programación.
› Esto es, que un programa de socket escrito en Java
p g
g j
también se puede comunicar con un programa escrito en
Java o con un programa de socket no escrito en Java.
12
6
Un servidor (programa) corre en una
computadora específica y tiene un socket que
se asocia con un puerto específico. El servidor
se mantiene en espera escuchando al socket
para cuando un cliente realiza una petición de
conexión.
server
p
o
r
t
Connection request
Client
13
Si todo sale bien, el servidor acepta la conexión. Después
de la aceptación, el servidor obtiene un nuevo socket
asociado a un puerto diferente Necesita un nuevo
asociado a un puerto diferente. Necesita un nuevo
socket (consecuentemente un número de puerto
diferente), de tal forma que puede continuar
escuchando al socket original para solicitudes de
conexión mientras que atiende al cliente conectado.
server
p
o
r
t
port
Connection
t
r
o
p
Client
14
28/05/2014
7
28/05/2014
Un socket es un endpoint de un enlace de
i
t
d
i
comunicación bi-direccional entre dos programas
ejecutándose en la red.
ió bi di
l
Un socket se asocia a un número de puerto de tal
forma que la capa de TCP puede identificar la
aplicación a la cual están destinados los datos.
.net proporciona dos clases:
El paquete de Java .net
› Socket – para implementar un cliente
› ServerSocket – para implementar un servidor.
15
Server
Server
ServerSocket(1234)
Flujo de salida/escritura
Flujo de entrada/lectura
Client
Client
Puede ser un dominio como “mandroo.cs.mu.oz.au”
16
Socket(“128.250.25.158”, 1234)
8
28/05/2014
9
17
TCP service: transferencia confiable de flujos de bytes
client
client
socket( )
bind( )
bind( )
connect( )
send( )
recv( )
close( )
controlled by
application
developer
controlled by
operating
system
process
socket
TCP with
buffers,
variables
TCP conn. request
TCP ACK
Internet
socket( )
bind( )
listen( )
server
accept( )
recv( )
send( )
close( )
process
socket
TCP with
buffers,
variables
18
28/05/2014
Server (running on hostid)
Client
create socket,
port=x for
port=x, for
incoming request:
welcomeSocket =
ServerSocket()
TCP
connection setup
wait for incoming
connection request
connectionSocket =
welcomeSocket.accept()
read request from
read request from
connectionSocket
write reply to
connectionSocket
close
connectionSocket
create socket,
connect to hostid, port=x
clientSocket =
Socket()
send request using
tS k t
clientSocket
li
read reply from
clientSocket
close
clientSocket
19
1. Crear el Server Socket:
p
ServerSocket server;
DataOutputStream os;
DataInputStream is;
server = new ServerSocket( PORT );
2. Espera solicitudes de clientes:
Socket client = server.accept();
3. Crea flujos de I/O para comunicarse con el cliente
is = new DataInputStream( client.getInputStream() );
os = new DataOutputStream( client.getOutputStream() );
4. Realiza comunicación con un cliente
Receive from client: String line = is.readLine();
Send to client: os.writeBytes("Hello\n");
5. Cierra el socket: client.close();
20
10
1. Crear un objeto de Socket:
client = new Socket( server, port_id );
2 Crea flujos de I/O para comunicarse con el servidor
2. Crea flujos de I/O para comunicarse con el servidor.
is = new DataInputStream(client.getInputStream() );
os = new DataOutputStream( client.getOutputStream() );
3. Realiza I/O o comunicación con el server:
› Receive data from the server:
String line = is.readLine();
› Send data to the server:
os.writeBytes("Hello\n");
);
4. Cierra el socket cuando termina:
y
(
client.close();
21
22
import java.net.*;
import java.io.*;
public class SimpleServer
{
public static void main(String args[]) throws IOException
p
{
g [])
p
g
(
// Registrar el servicio en el puerto 1234
// Registrar el servicio en el puerto 1234
ServerSocket s = new ServerSocket(1245);
//Espera y acepta conexiones
//Espera y acepta conexiones
Socket s1 = s.accept();
//Obtiene un flujo de comunicación asociado con el socket
//Obtiene un flujo de comunicación asociado con el socket
OutputStream s1out = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream (s1out);
//Envia un mensaje
//Envia un mensaje
dos.writeUTF("Hola que tal");
//Cierra la conexión, pero no el socket del servidor
//Cierra la conexión, pero no el socket del servidor
dos.close();
s1out.close();
s1.close();
}
}
28/05/2014
11
28/05/2014
import java.net.*;
import java.io.*;
public class SimpleClient
{
public static void main(String args[]) throws IOException
{
//Abrir una conexión al server en el puerto 1234
//Abrir una conexión al server en el puerto 1234
Socket s1 = new Socket("localhost",1245);
//Obtener un manejador de flujo de entrada del socket y leer la entrada
//Obtener un manejador de flujo de entrada del socket y leer la entrada
InputStream s1In = s1.getInputStream();
DataInputStream dis = new DataInputStream(s1In);
String st = new String (dis.readUTF());
System.out.println(st);
//Cerrar la cone ion
//Cerrar la cone ion
//Cerrar la conexion
//Cerrar la conexion
dis.close();
s1In.close();
s1.close();
23
}
}
›
›
Ejecutar Server en el localhost
java SimpleServer
Ejecutar el Client en cualquier máquina:
Si
j
java SimpleClient
Hola que tal
l Cli
Si se ejecuta el cliente cuando el server no está escuchando:
java SimpleClient
›
Exception in thread "main" java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:320)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:133)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:120)
)
at java.net.Socket.<init>(Socket.java:273)
at java.net.Socket.<init>(Socket.java:100)
at SimpleClient.main(SimpleClient.java:6)
( l
k
k
l
l
l
24
12
Maneja solamente una petición HTTP
Acepta y parsea la petición HTTP
Obtiene el archivo requerido del sistema de
Comentarios de: Ataques a Servidores Web (0)
No hay comentarios