
Von Kprobe-Technologie Open Source Hostbasiertes Intrusion Detection System (HIDS), von E_Bwill.
--Der Name dieses Projekts wurde vom Film "The Matrix" inspiriert
English | 简体中文
Technisch gesehen ist AgentSmith-HIDS kein Host-basiertes Intrusion Detection System (HIDS), da es keine Regel-Engine und Erkennungsfunktionen besitzt. Es kann jedoch als leistungsstarker "Host-Informationssammlungs-Agent" als Teil Ihrer eigenen HIDS-Lösung verwendet werden. Die Vollständigkeit der Informationen, die von diesem Agenten gesammelt werden können, war eines der wichtigsten Kriterien bei der Entwicklung dieses Projekts. Daher wurde es so konzipiert, dass es im Kernel-Stack arbeitet und einen großen Vorteil gegenüber Anwendungen im User-Stack hat, wie z. B.:
| Quelle | Knotenname |
|---|---|
| Host | hostname |
| Docker | Container-Name |
| k8s | Pod-Name |
Erreicht durch Hooking von sys_execve()/sys_execveat()/compat_sys_execve()/compat_sys_execveat(), Beispiel:
{
"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"
}
Erreicht durch Hooking von sys_bind(), Beispiel:
{
"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"
}
Erreicht durch Hooking von tcp_v4_connect()/tcp_v6_connect()/ip4_datagram_connect()/ip6_datagram_connect(), Beispiel:
{
"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"
}
Erreicht durch Hooking von udp_recvmsg()/udpv6_recvmsg(), Beispiel:
{
"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"
}
Erreicht durch Hooking von security_inode_create(), Beispiel:
{
"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"
}
Erreicht durch Hooking von sys_ptrace(), Beispiel:
{
"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"
}
Erreicht durch Hooking von load_module(), Beispiel:
{
"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"
}
Erreicht durch Hooking von commit_creds(),Beispiel:
{
"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"
}
Testumgebung (VM):
| CPU | Intel(R) Xeon(R) Platinum 8260 CPU @ 2.40GHz 4Core |
|---|---|
| RAM | 8GB |
| OS/Kernel | Debian9 / 4.14.81.bm.19-amd64 |
Testlast:
ltp -f syscalls
Testergebnis (1Min):
Ursprüngliche Testdaten:
cyclictest-Test
cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000
Smith deinstalliert:
# Total: 000999485
# Min Latencies: 00002
# Avg Latencies: 00007
# Max Latencies: 13905
# Histogram Overflows: 00515
Smith installiert:
# Total: 000999519
# Min Latencies: 00002
# Avg Latencies: 00007
# Max Latencies: 15216
# Histogram Overflows: 00481
time -v /opt/ltp/testcases/bin/execve05 -n 30000
10 Mal
Smith installiert:
| Durchschnittliche Benutzerzeit (s) | Durchschnittliche Systemzeit (s) |
|---|---|
| 22,329 | 14,885 |
Smith deinstalliert:
| Durchschnittliche Benutzerzeit (s) | Durchschnittliche Systemzeit (s) |
|---|---|
| 22,271 | 14,395 |
Wir werden auf diesem Kanal kontinuierlich Informationen über die Funktionen von AgentSmith-HIDS bereitstellen. Ein guter Ort, um die neuesten Nachrichten zu erhalten:)
Das Kernel-Modul von AgentSmith-HIDS wird unter der GNU GPLv2-Lizenz vertrieben.
| Hook Handler | Durchschnittliche Verzögerung(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 |