Tradicionalmente, Censys se ha centrado en escaneos "profundos" - escaneos que hacen un análisis completo del servicio que hay detrás y desglosan los valores clave en campos en los que buscar más tarde. Algunos protocolos se capturaban mediante banners de servicios "DESCONOCIDOS" y simplemente no se etiquetaban, lo que permitía buscarlos, pero no fácilmente. Por ejemplo, los servidores IRC se pueden encontrar en Censys Search buscando "irc" en el puerto 6667. Esto reduce los servicios, pero pasa por alto muchos servidores IRC que no presentan "irc" en su banner o no funcionan en el puerto 6667. También da algunos falsos positivos, con algunos resultados que sólo son servidores HTTP en el puerto 6667 que casualmente incluyen la frase "irc".
Muchos otros protocolos se han omitido por completo, ya que no son lo suficientemente parlanchines como para proporcionar datos de banner sin una sonda específica para obtenerlos. Por ejemplo, el protocolo Printer Job Language (PJL en Censys Search) es valioso de ver, pero sólo responderá a unas pocas sondas específicas, que Censys previamente no utilizaba para su puerto por defecto de 9100. Para nosotros, esto incluye todos los protocolos UDP, ya que no recogemos ningún tipo de datos de banner en los puertos UDP. Además, en algunos casos para protocolos basados en TCP, Censys todavía no escaneaba el puerto en el que generalmente viven esos servicios.
Censys se propuso aumentar su cobertura de protocolos en junio y empezó a etiquetar los datos de captura de banners, que podían atribuirse a un protocolo concreto. Descubrimos aquellos servicios que no estaban presentes en nuestros datos. La mayoría de los protocolos que intentamos añadir eran muy sencillos de detectar en comparación con los matices asociados al escaneo de un protocolo como el DNS. El principal obstáculo para añadirlos fue la infraestructura necesaria para dar soporte a un nuevo protocolo, que se diseñó partiendo del supuesto de que los escaneos serían operaciones complejas, consistentes en muchos paquetes enviados de un lado a otro para extraer los diferentes campos de datos que Censys quiere exponer. En nuestro nuevo caso, queríamos enviar una sonda muy básica y comparar patrones con la respuesta.
Para hacer frente a este nuevo escenario, Censys implementó un marco de escaneado de protocolos "ligero" sobre nuestro motor de escaneado existente. Este marco nos permitió añadir rápida y fácilmente compatibilidad con nuevos protocolos sin necesidad de escribir código. Podíamos especificar el puerto y el método con el que escanear en un archivo de configuración, añadirlo a la lista de sondas existentes y ponernos en camino habiendo añadido soporte completo para un nuevo protocolo en una hora, lo que reducía (a menudo) el tiempo de desarrollo que llevaría añadir estos protocolos en el marco existente.
Gracias a este nuevo marco, Censys pudo aumentar el número de protocolos compatibles con nuestro escáner de 40 a 78 en tan solo un hackathon de dos días. La mayor parte del trabajo que supuso añadir estos protocolos no consistió en escribir código o cablear cosas, sino en decidir qué protocolos sería más valioso añadir a la plataforma y tomarles las huellas dactilares. Volvimos a este esfuerzo para llevar el número de protocolos de 78 a un centenar.
Prioridades
De una larga lista de posibles protocolos, hemos seleccionado los que queremos añadir. Dimos prioridad a los protocolos que encajaban en una de estas casillas:
- Protocolos que indicaban un problema evidente. Por ejemplo, Kerberos, ARD, ATG, Andromouse...
- Protocolos de bases de datos (Cassandra, Zookeeper, Bolt)
- Protocolos de control industrial (GE_SRTP, PCWORX, FINS...)
- Protocolos que eran simplemente... ¡geniales! (y no requerían mucho esfuerzo para diseccionar el protocolo). Por ejemplo, Terraria, QOTD, Teamspeak...
Beneficios
Exponemos los datos de estos nuevos protocolos de la misma manera que lo haríamos con un banner "desconocido" - la única diferencia está en el campo service_name. Esto se puede ver cuando se visualiza la vista de tabla para un host en búsqueda. Observe que los campos de datos se denominan banner_grab aunque se trate de un servidor Murmur.
Antes, no exponíamos los datos de los servicios de esta forma. Cada servicio añadido tenía un nuevo campo y formato dedicados (por ejemplo, services.openvpn), que luego era permanente. Esto hacía problemático añadir cualquier tipo de sonda "temporal". Estaríamos comprometiéndonos a dar soporte a un campo para siempre. Como tenemos un campo dedicado (banner_grab) para todas las sondas "ligeras", ahora podemos añadir una sonda temporal que podemos eliminar más tarde si ya no aporta valor. Además, esto ha hecho posible que en los datos ya no sea necesario cambiar los nombres de las rutas de búsqueda, sino sólo cambiar el valor del nombre del servicio. Ya tuvimos que hacer esto durante nuestro primer sprint de adición de protocolos. Añadimos una sonda para "RDP_UDP" y decidimos que sería mejor llamarla simplemente RDP. Cambiamos el nombre del servicio en nuestro archivo de configuración, y los nombres problemáticos fueron filtrados y reemplazados por el más sensato.
Nuevos protocolos
A continuación se muestra una tabla de todos los servicios para los que Censys escanea en la actualidad, y cuántos de cada uno de ellos teníamos en Internet a fecha de 2021-08-16. Estas cifras pueden variar mucho, pero en general se mantienen en orden de popularidad. En verde están los protocolos que hemos añadido en las últimas ocho semanas utilizando el nuevo marco de escaneo. Esto se generó utilizando la función de informe de la Búsqueda 2.0. Hemos añadido aquí manualmente Andromouse, porque no vemos ningún servicio activo para él en este momento.
nombre_servicio |
cuente |
HTTP |
751232939 |
DESCONOCIDO* |
57736598 |
SSH |
25103704 |
SMTP |
17031251 |
FTP |
10060171 |
NTP |
8178526 |
IMAP |
7854411 |
POP3 |
7290299 |
DNS |
6203423 |
RDP |
5926254 |
MYSQL |
4801300 |
CWMP |
4681776 |
TELNET |
4188493 |
PPTP |
3458950 |
RTSP |
2999565 |
SNMP |
1683421 |
OPENVPN |
1549015 |
PORTMAP |
1539872 |
NETBIOS |
1504529 |
PYME |
1300404 |
VNC |
1053140 |
POSTGRES |
713984 |
MSSQL |
425856 |
MQTT |
411738 |
IPP |
311755 |
PIGEONHOLE |
280083 |
REDIS |
278636 |
SIP |
266511 |
MDNS |
234625 |
RSYNC |
200553 |
AMQP |
178414 |
XMPP |
176961 |
TFTP |
163148 |
MONGODB |
147907 |
NATPMP |
140234 |
COAP |
130349 |
WS_DISCOVERY |
126274 |
SSDP |
103325 |
KUBERNETES |
99080 |
RIPV1 |
85936 |
ORACLE |
84369 |
MEMCACHED |
79251 |
POPPASSD |
75301 |
UBIQUITI |
74833 |
KERBEROS |
51294 |
TEAMSPEAK |
46165 |
X11 |
44451 |
PROMETHEUS |
44005 |
IPMI |
39224 |
SCCM |
37095 |
MODBUS |
36720 |
BÚSQUEDA ELÁSTICA |
34844 |
IKETTLE |
32530 |
FOX |
26336 |
IRC |
24184 |
VÁLVULA |
24061 |
ARD |
20990 |
CHARGEN |
17470 |
MURMUR |
16860 |
IDENT |
16490 |
ZOOKEEPER |
15992 |
BACNET |
14391 |
QOTD |
13138 |
KAFKA |
12155 |
SKINNY |
10486 |
NETIS |
9070 |
ICAP |
7984 |
WDBRPC |
7884 |
PJL |
7732 |
PC_ANYWHERE |
7297 |
S7 |
7027 |
PIE |
6317 |
TEAM_VIEWER |
5778 |
BITCOIN |
5627 |
XDMCP |
4905 |
PERNO |
4811 |
DIGI |
4481 |
IEC60870_5_104 |
3508 |
BEANSTALKD |
3338 |
SENTINEL |
3315 |
CITRIX |
2987 |
RADIUS |
2880 |
BITTORRENT_TRACKER |
2831 |
CASSANDRA |
2785 |
TERRARIA |
2528 |
DB2 |
2414 |
CODESYS |
2201 |
LDAP |
2090 |
FINS |
1726 |
STATSD |
1502 |
ATG |
1126 |
DNP3 |
705 |
RETHINKDB |
662 |
PCWORX |
207 |
PRO_CON_OS |
101 |
GE_SRTP |
75 |
DICT |
27 |
TORCONTROL |
14 |
BITTORRENT |
2 |
HART |
1 |
ANDROMOUSE |
0 |
*UNKNOWN se incluye para comparar con
"¿cuántos servicios no reconoce Censys ?"