
Por Kprobe technology Sistema de Detección de Intrusiones Basado en Host de Código Abierto (HIDS), de E_Bwill.
--El nombre de este proyecto fue inspirado por la película - The Matrix
English | 简体中文
Técnicamente, AgentSmith-HIDS no es un Sistema de Detección de Intrusiones Basado en Host (HIDS) debido a la falta de un motor de reglas y función de detección. Sin embargo, puede ser utilizado como un 'Agente de Recopilación de Información del Host' de alto rendimiento como parte de su propia solución HIDS. La exhaustividad de la información que puede ser recopilada por este agente fue una de las métricas más importantes durante el desarrollo de este proyecto, por lo que fue construido para funcionar en la pila del kernel y lograr una gran ventaja en comparación con aquellos que funcionan en la pila de usuario, como:
| Origen | Nombre del nodo |
|---|---|
| Host | hostname |
| Docker | nombre del contenedor |
| k8s | nombre del pod |
Logrado enganchando sys_execve()/sys_execveat()/compat_sys_execve()/compat_sys_execveat(), ejemplo:
{
"uid":"0",
"data_type":"59",
"run_path":"/tmp",
"exe":"/opt/ltp/testcases/bin/growfiles",
"argv":"growfiles -W gf26 -D 0 -b -i 0 -L 60 -u -B 1000b -e 1 -r 128-32768:128 -R 512-64000 -T 4 -f gfsmallio-35861 -d /tmp/ltp-Ujxl8kKsKY ",
"pid":"35861",
"ppid":"35711",
"pgid":"35861",
"tgid":"35861",
"comm":"growfiles",
"nodename":"test",
"stdin":"/dev/pts/1",
"stdout":"/dev/pts/1",
"sessionid":"3",
"sip":"192.168.165.1",
"sport":"61726",
"dip":"192.168.165.128",
"dport":"22",
"sa_family":"1",
"pid_tree":"1(systemd)->1384(sshd)->2175(sshd)->2177(bash)->2193(fish)->35552(runltp)->35711(ltp-pan)->35861(growfiles)",
"tty_name":"pts1",
"socket_process_pid":"2175",
"socket_process_exe":"/usr/sbin/sshd",
"SSH_CONNECTION":"192.168.165.1 61726 192.168.165.128 22",
"LD_PRELOAD":"/root/ldpreload/test.so",
"user":"root",
"time":"1579575429143",
"local_ip":"192.168.165.128",
"hostname":"test",
"exe_md5":"01272152d4901fd3c2efacab5c0e38e5",
"socket_process_exe_md5":"686cd72b4339da33bfb6fe8fb94a301f"
}
Logrado enganchando sys_bind(), ejemplo:
{
"uid":"0",
"data_type":"49",
"sa_family":"2",
"exe":"/usr/bin/python2.7",
"pid":"109640",
"ppid":"215496",
"pgid":"109640",
"tgid":"109640",
"comm":"python",
"nodename":"n225-117-018",
"sip":"0.0.0.0",
"sport":"8000",
"res":"0",
"sessionid":"30",
"user":"root",
"time":"1587540231936",
"local_ip_str":"10.225.117.18",
"hostname_str":"n225-117-018",
"exe_md5":"4f458165a2129ba549f1b6605ee87e74"
}
Logrado enganchando tcp_v4_connect()/tcp_v6_connect()/ip4_datagram_connect()/ip6_datagram_connect(), ejemplo:
{
"uid":"0",
"data_type":"42",
"sa_family":"2",
"connect_type":"4",
"dport":"1025",
"dip":"180.101.49.11",
"exe":"/usr/bin/ping",
"pid":"6294",
"ppid":"1941",
"pgid":"6294",
"tgid":"6294",
"comm":"ping",
"nodename":"test",
"sip":"192.168.165.153",
"sport":"45524",
"res":"0",
"sessionid":"1",
"user":"root",
"time":"1575721921240",
"local_ip":"192.168.165.153",
"hostname":"test",
"exe_md5":"735ae70b4ceb8707acc40bc5a3d06e04"
}
Logrado enganchando udp_recvmsg()/udpv6_recvmsg(), ejemplo:
{
"uid":"0",
"data_type":"601",
"sa_family":"2",
"dport":"53",
"dip":"192.168.165.2",
"exe":"/usr/bin/ping",
"pid":"6294",
"ppid":"1941",
"pgid":"6294",
"tgid":"6294",
"comm":"ping",
"nodename":"test",
"sip":"192.168.165.153",
"sport":"53178",
"qr":"1",
"opcode":"0",
"rcode":"0",
"query":"www.baidu.com",
"sessionid":"1",
"user":"root",
"time":"1575721921240",
"local_ip":"192.168.165.153",
"hostname":"test",
"exe_md5":"39c45487a85e26ce5755a893f7e88293"
}
Logrado enganchando security_inode_create(), ejemplo:
{
"uid":"0",
"data_type":"602",
"exe":"/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/bin/java",
"file_path":"/tmp/kafka-logs/replication-offset-checkpoint.tmp",
"pid":"3341",
"ppid":"1",
"pgid":"2657",
"tgid":"2659",
"comm":"kafka-scheduler",
"nodename":"test",
"sessionid":"3",
"user":"root",
"time":"1575721984257",
"local_ip":"192.168.165.153",
"hostname":"test",
"exe_md5":"215be70a38c3a2e14e09d637c85d5311",
"create_file_md5":"d41d8cd98f00b204e9800998ecf8427e"
}
Logrado enganchando sys_ptrace(), ejemplo:
{
"uid":"0",
"data_type":"101",
"ptrace_request":"4",
"target_pid":"7402",
"addr":"00007ffe13011ee6",
"data":"-a",
"exe":"/root/ptrace/ptrace",
"pid":"7401",
"ppid":"1941",
"pgid":"7401",
"tgid":"7401",
"comm":"ptrace",
"nodename":"test",
"sessionid":"1",
"user":"root",
"time":"1575722717065",
"local_ip":"192.168.165.153",
"hostname":"test",
"exe_md5":"863293f9fcf1af7afe5797a4b6b7aa0a"
}
Logrado enganchando load_module(), ejemplo:
{
"uid":"0",
"data_type":"603",
"exe":"/usr/bin/kmod",
"lkm_file":"/root/ptrace/ptrace",
"pid":"29461",
"ppid":"9766",
"pgid":"29461",
"tgid":"29461",
"comm":"insmod",
"nodename":"test",
"sessionid":"13",
"user":"root",
"time":"1577212873791",
"local_ip":"192.168.165.152",
"hostname":"test",
"exe_md5":"0010433ab9105d666b044779f36d6d1e",
"load_file_md5":"863293f9fcf1af7afe5797a4b6b7aa0a"
}
Logrado enganchando commit_creds(), ejemplo:
{
"uid":"0",
"data_type":"604",
"exe":"/tmp/tt",
"pid":"27737",
"ppid":"26865",
"pgid":"27737",
"tgid":"27737",
"comm":"tt",
"old_uid":"1000",
"nodename":"test",
"sessionid":"42",
"user":"root",
"time":"1578396197131",
"local_ip":"192.168.165.152",
"hostname":"test",
"exe_md5":"d99a695d2dc4b5099383f30964689c55"
}
{
"data_type":"1001",
"status":"Failed",
"type":"password",
"user_exsit":"false",
"user":"sad",
"from_ip":"192.168.165.1",
"port":"63089",
"processor":"ssh2",
"time":"1578405483119",
"local_ip":"192.168.165.128",
"hostname":"localhost.localdomain"
}
{
"uid":"-1",
"data_type":"700",
"module_name":"autoipv6",
"hidden":"0",
"time":"1578384987766",
"local_ip":"192.168.165.152",
"hostname":"test"
}
{
"uid":"-1",
"data_type":"701",
"module_name":"diamorphine",
"hidden":"1",
"syscall_number":"78",
"time":"1578384927606",
"local_ip":"192.168.165.152",
"hostname":"test"
}
{
"uid":"-1",
"data_type":"702",
"module_name":"diamorphine",
"hidden":"1",
"time":"1578384927606",
"local_ip":"192.168.165.152",
"hostname":"test"
}
{
"uid":"-1",
"data_type":"703",
"module_name":"syshook",
"hidden":"1",
"interrupt_number":"2",
"time":"1578384927606",
"local_ip":"192.168.165.152",
"hostname":"test"
}
Entorno de Prueba (VM):
| CPU | Intel(R) Xeon(R) Platinum 8260 CPU @ 2.40GHz 4Core |
|---|---|
| RAM | 8GB |
| OS/Kernel | Debian9 / 4.14.81.bm.19-amd64 |
Carga de Prueba:
ltp -f syscalls
Resultado de Prueba (1min):
Datos de Prueba Originales:
prueba cyclictest
cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000
Desinstalar Smith:
# Total: 000999485
# Min Latencies: 00002
# Avg Latencies: 00007
# Max Latencies: 13905
# Histogram Overflows: 00515
Instalar Smith:
# Total: 000999519
# Min Latencies: 00002
# Avg Latencies: 00007
# Max Latencies: 15216
# Histogram Overflows: 00481
time -v /opt/ltp/testcases/bin/execve05 -n 30000
10 veces
Instalar Smith:
| Tiempo de Usuario Promedio(s) | Tiempo de Sistema Promedio(s) |
|---|---|
| 22.329 | 14.885 |
Desinstalar Smith:
| Tiempo de Usuario Promedio(s) | Tiempo de Sistema Promedio(s) |
|---|---|
| 22.271 | 14.395 |
Proporcionaremos constantemente información sobre las funcionalidades de AgentSmith-HIDS a través de este canal, ¡un buen lugar para recibir las noticias más actualizadas!
El módulo del kernel de AgentSmith-HIDS se distribuye bajo la licencia GNU GPLv2.
| Manejador de Hook | Retardo Promedio(us) | TP99(us) | TP95(us) | TP90(us) |
|---|
| connect_entry_handler | 0.2914 | 6.7627 | 0.355 | 0.3012 |
| connect_handler | 2.1406 | 18.3801 | 12.102 | 7.832 |
| execve_entry_handler | 5.9320 | 13.7034 | 9.908 | 8.334 |
| execve_handler | 6.8826 | 26.0584 | 15.9976 | 12.6260 |
| security_inode_create_entry_handler | 1.9963 | 9.3042 | 6.7730 | 4.6816 |
| security_inode_create_handler | 4.2114 | 13.2165 | 8.83775 | 6.534 |