Host-based IDS有很多种,比如监视system call, Trapwire等方式.
拿Syscall monitoring 这种来说
大致思路就是把程序所有的可能支路都跑一遍, 获得strace list,
类似
open
read
write
callXX
close
exit
然后建立一个JSON存储两个前后操作的模型.
如
{
"syscall_1":"open",
"syscall_2":"read"
},
{
"syscall_1":"read",
"syscall_2":"write"
},
当出现预设中不存在的操作对时,即说明被入侵.
用Stack overflow来说的话,
如果被拿到shell code, 那么shell code那一部分, 很可能会出现预设中不存在的操作对.
那么我是否可以通过小心的改写我的shell code, 甚至不用shell code, 用这些预设的操作对来完成入侵(也许效果没拿shell好,但暂时不关心这个)
问题1: 这样是否理论上就躲过了IDS?(我觉得应该是可以的)
这时候如果我改进我的模型, 除了原本两个syscall之外,我还记录两个syscall的执行参数
{
"syscall_1":"open",
"syscall_2":"read",
"arg_1":"/etc/log",
"arg_2":"/etc/secret"
},
{
"syscall_1":"read",
"syscall_2":"write"
"arg_1":"/etc/secret",
"arg_2":"/etc/log"
},
显然这样会使得JSON表里模型数增多.
问题2: 那么这样的话, 是否还能避开IDS?(我感觉还是能, 但是没办法理论上证明)
PS: 当然攻击者在不知道我们模型的情况下,还是很容易触发IDS的. 这是否意味着, 如果攻击者小心的用一些常见的syscall pair来构造他们的入侵, 也许会使得入侵危害变小, 但是缺躲过了IDS?
如果有错请大力纠正, 我在学习中. 不是特别明白, 可能讲错了