在我的 Haskell 应用程序中,我实现了以下将敏感信息传递给二进制文件的机制(不求助于 CLI 参数):
TemplateHaskell
机制在编译时读取环境变量:{-# LANGUAGE TemplateHaskell #-}
...
import Language.Haskell.TH.Env
...
myPrecious :: String
myPrecious = fromMaybe "" $$(envQ "MY_PRECIOUS")
...
MY_PRECIOUS=<secret> stack build
然后它在Haskell端绑定到myPrecious
MY_PRECIOUS
的编译值,因此从操作系统级别看不到它(例如通过 ps aux
)问题是,我现在可以在文本编辑器中打开该二进制文件或创建一个内存转储(例如使用 GDB),并有一点决心挖掘秘密,特别是如果我知道它正在使用的上下文 - 我是假设某些恶意行为者可能已经获得了对源代码的访问权限。所以我一直在想,是否有任何方法可以强制 GHC 生成更加混淆/乱码的二进制文件,其中这些值不容易看到。我知道没有这样的保护方案可以防弹,但我正在寻找一种方法来使入侵者的任务更难。
混淆完全是浪费时间。您最终会花费数天的时间尝试想出一些聪明的东西,但菜鸟逆向工程师只能在几分钟内击败它。相反,您应该设置实际的安全性而不是通过默默无闻的安全性,像这样:
现在在文本编辑器中打开二进制文件将不会产生任何结果,因为秘密根本不在其中,并且不可能进行内存转储,因为内核不允许您对 setgid 进程执行此操作。