【问题标题】:securing (perl) legacy programs for web service provision (apache)保护 (perl) 用于 Web 服务提供 (apache) 的遗留程序
【发布时间】:2014-02-04 02:57:15
【问题描述】:

我在 linux 上有一个古老的遗留 perl 程序,它是在过去为一组受信任的本地用户编写的。编写时没有考虑到安全性。

我们希望将其复活,以通过网络将输入和输出作为服务提供。它需要读入 cgi,将其传递给这个旧的遗留程序,并将答案返回给客户端浏览器。唉,我们没有人力来审计旧的 perl 程序。 (Perl 有一些沙盒功能可以包裹在 eval 周围,但这似乎很脆弱。)

这里有什么好的选择?

  • 运行一个虚拟机,该虚拟机运行一个设计为在 root 上只读的分发版,并且仅在 /var/ 上保持所有内容非常独立。 (哪个?ubuntu 的味道?)

  • 运行我们定期擦除的虚拟机。

这一切都在 linux 上---我知道如何为我的 windows 虚拟机运行 vmware,但这似乎不是最好的工具。我在 2 年前尝试过 kvm,但那时它的学习曲线很陡峭。看来我几乎想跑了

 $ make-iso / > my.iso
 $ exec.vm my.iso --mount '/var = my.vdisk' --run '/var/my.program'
  • 我们的遗留程序可能会被更改为尽早读取其所有必要的输入文件,然后只能在 stdin/stdout 上运行。如果一个操作系统有一个内核调用,我们可以调用它来断开所有后续进程和子进程对所有磁盘文件系统的访问,那么这个遗留程序将变得安全,即使有人最初在某个地方后期插入了恶意代码或者调用了系统执行程序。我认为这在 linux、bsd 或其他一些像 OS 的 unix 中是不可能的。 (PS:不存在这样一种简单的保护程序的方法真是太遗憾了。:-( .)

这可能是一个常见问题。有什么好的处理方法?

/iaw

【问题讨论】:

  • Perl has some sandboxing features that can be wrapped around eval's, but this seems fragile你有什么想法?
  • 您的旧脚本是否需要以提升的权限运行?
  • 这实际上更像是一个 ServerFault 问题而不是 StackOverflow
  • 我不认为 eval 会起作用,因为程序可能会在两者之间读取或写入临时文件。不需要提升的权限。 (我猜想问服务器故障为时已晚。)

标签: apache perl security


【解决方案1】:

这个问题没有好的解决方案。安全很难。

在完整的 VM 中运行它的另一种方法是使用 Linux 容器。

Docker 是管理容器的一种非常简单的方法,在这种情况下,我会简单地 每次运行脚本时启动一个新容器,并在容器运行后将其吹走。

https://www.docker.io/

【讨论】:

  • docker 看起来很有前途。唉,我的特定(但不是每个!)案例的良好安全性本来可以很容易。我可以简单地断开该进程及其子进程的所有文件系统。只有 apache 可以继续与 STDIN 和 STDOUT 对话。简单的。方便的。对于这个特定的用例,糟糕的编程几乎是无法避免的。事实上,这个功能非常简单方便,可以很快得到广泛使用。当安全不易时,安全就难了。当事情复杂时,就会出现不安全感。
猜你喜欢
  • 2013-03-02
  • 2012-01-17
  • 2013-12-29
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多