最近我发现需要检查我的服务通过IPC与之交互的进程是否有足够的特权来执行某些事务。我对这个过程的唯一信息是它的pid,我确信这个pid不是假的(IPC足够可靠,可以保证)。我需要检查进程是否具有特定的uid或pid,或者是某个补充组的成员,然后才允许该事务。为此,我读取了进程的/ proc / [pid] / status条目,解析了Uid / Gid / Groups行并相应地采取行动。
我的问题是这种检查进程标识的方法是否足够可靠,如果不是,它可能会失败?我担心流氓进程可能以某种方式伪造我的服务查看其/ proc / [pid] / status或类似的东西。我在这里是偏执狂还是真的值得考虑?
注意:我来选择这种方法,因为我无法找到另一种方法来获得另一个流程' Linux中的身份。如果有人也对我有所启发,我会很高兴。
答案 0 :(得分:1)
旧的但仍然很好的攻击是找到一种方法来强制目标进程退出,无论是通过信号还是通过某种类型的错误。然后通过fork快速使用新进程填充PID空间,直到攻击者获得正确的PID。
每次检查/ proc / pid / status都会使这更难,但仍然很模糊。
成功的攻击看起来像是:
服务器1234听力
客户端检查1234具有服务器UID - >真
恶意杀死服务器1234,启动32,000个新进程
客户端使用Malicious 1234进行IPC