在我开发的程序(Linux)中,我需要非常简单的基于文本的IPC。为此,使用标准的输入/输出管道将非常容易。我可以相信发送给进程stdin的消息不能被任何人读取吗?另外,我可以相信,如果我将管道保持在标准输出状态,只有我可以读取它输出的内容吗?我只是想确保没有基于procfs的技巧可以读取这些技巧。stdio通信的安全
回答
在我自己的有限测试(运行uniq | sort
然后试图通过/proc/XXX/fd
管道两端),似乎我不能读取什么发送到管道,但我可以注入数据。
换句话说,做自己的测试,看看你能做什么,不能做什么。 :-)
据我所知,没有“技巧”,其他用户无法读取标准输入/标准输出。请记住:
- 其他进程以同一用户身份运行,可以读取进程的内存;这是因为安全性可以保护您免受其他用户的侵害。
- 以超级用户身份运行的进程可以执行所有操作。
这就是说,如果你正在处理敏感数据,看看mlock。
有没有技巧,我可以想到的唯一一个关于检测标准输出是否被重定向到其他地方的方法是在一个简单的C函数中执行此操作,如isredirected
所示,除此之外,您有责任确保消息保持安全...另一件事是,使用procfs欺骗需要root权限才能访问某些procfs功能......所以请确保您在那里放置一个支票以确保它不以root身份运行...
int isredirected(void){
if (!isatty(fileno(stdin))) return 1;
return 0;
}
希望这会有所帮助, 最好的问候,汤姆。
问题:'isatty'将返回管道错误,这是OP想要做的。 – 2010-02-18 17:22:20
Cjy:当!好点子!!!!我在这一个想法...... ...) – t0mm13b 2010-02-18 17:27:46
老实说,我认为这取决于您认为您的应用程序需要多少安全。我在stdin上输入我的GPG密钥密码。我总是问“什么是可接受的风险?”。
也就是说,没有任何东西可以保护您的应用程序免受内核空间中的rootkit攻击。它不仅可以读取std输入/输出终端,还可以读取运行中的整个进程内存。并且可能会覆盖您已有的一些保护措施。
您可能会考虑将SELinux沙盒与您正在做的事情结合使用 - 如果您确实需要这种保护级别,请在http://danwalsh.livejournal.com/处了解更多信息。 libselinux让你连接它检查保护存在等
我不需要堡垒诺克斯 - 只是想确保没有任何漏洞安全漏洞 – c4757p 2010-02-18 18:10:52
- 1. MSMQ的安全通信
- 2. Android的安全HTTP通信
- 3. 通过stdio在Node.js和Python之间进行通信的问题
- 4. 安全的iPhone(iOS)/服务器通信
- 5. 线程安全的MPI通信
- 6. 安全的android与服务器通信
- 7. PHP和C之间的安全通信#
- 8. android中的安全套接字通信
- 9. 更安全的密码通信
- 10. 创建安全的API通信
- 11. 安全通信在实时游戏
- 12. 在java rmi中通信是否安全?
- 13. 应用程序通信和安全
- 14. Android安全通信:JSSE或Apache Http?
- 15. 套接字通信安全问题
- 16. 正在强制I2C通信安全吗?
- 17. 安全通信基础知识
- 18. 安全通信PHP(phpseclib)和C#(Unity 3D)
- 19. 缓存安全信息安全吗?
- 20. 普通HTTP GET和POST通信的安全数据序列化
- 21. PHP的安全信息?
- 22. Drupal的信用卡安全
- 23. 混合安全和不安全通道
- 24. JavaScript和PHP中的Web服务之间的安全通信
- 25. Android安全解锁信号
- 26. Pyro信号是否安全?
- 27. Visual Basic Ftp信息安全
- 28. RPC安全信息缺少
- 29. pthread_cond_wait是否完全信号安全?
- 30. 安卓:socket通信
嗯......谢谢。能够注入数据是不行的! :-)我想我只是用SO_PEERCRED使用本地套接字(不需要它是便携的)。 – c4757p 2010-02-18 18:12:45
我认为这种注入要求您要么以同一用户身份运行,要么以root身份运行?这似乎是不足以不信任stdin/stdout I/O的原因。 – 2010-02-18 18:43:04