在我開發的程序(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. Android的安全HTTP通信
- 2. MSMQ的安全通信
- 3. 通過stdio在Node.js和Python之間進行通信的問題
- 4. 安全的iPhone(iOS)/服務器通信
- 5. PHP和C之間的安全通信#
- 6. PHP和C++之間的安全通信
- 7. android中的安全套接字通信
- 8. 線程安全的MPI通信
- 9. 更安全的密碼通信
- 10. Astyanax和Cassandra之間的安全通信
- 11. Android和PHP之間的安全通信
- 12. 安全的android與服務器通信
- 13. 創建安全的API通信
- 14. 套接字通信安全問題
- 15. Android安全通信:JSSE或Apache Http?
- 16. 安全通信在實時遊戲
- 17. Pro * C/C++通信是否安全?
- 18. 安全通信PHP(phpseclib)和C#(Unity 3D)
- 19. Android服務器通信安全
- 20. 關於數據庫通信安全
- 21. 應用程序通信和安全
- 22. 在java rmi中通信是否安全?
- 23. 安全通信基礎知識
- 24. 正在強制I2C通信安全嗎?
- 25. 緩存安全信息安全嗎?
- 26. Drupal的信用卡安全
- 27. 安全的web.config信息
- 28. PHP的安全信息?
- 29. 普通HTTP GET和POST通信的安全數據序列化
- 30. 通過刪除安全信息使節點server.js文件更安全
嗯......謝謝。能夠注入數據是不行的! :-)我想我只是用SO_PEERCRED使用本地套接字(不需要它是便攜的)。 – c4757p 2010-02-18 18:12:45
我認爲這種注入要求您要麼以同一用戶身份運行,要麼以root身份運行?這似乎是不足以不信任stdin/stdout I/O的原因。 – 2010-02-18 18:43:04