标签: security

忘记在 bash/POSIX shell 中引用变量的安全隐患

如果您已经关注 unix.stackexchange.com 一段时间了,那么您现在应该知道,echo $var在 Bourne/POSIX shell(zsh 是例外)中的列表上下文(如)中不加引号的变量具有非常特殊的含义,并且除非你有很好的理由,否则不应该这样做。

在这里的许多问答中详细讨论了它(例如:为什么我的 shell 脚本会因空格或其他特殊字符而窒息?何时需要双引号?shell 变量的扩展以及 glob 和 split 对其的影响引用vs 不带引号的字符串扩展)

自从 70 年代末 Bourne shell 首次发布以来就是这种情况,并且没有被 Korn shell 改变(David Korn 最大的遗憾之一(问题 #7))或者bash大部分复制了 Korn shell,这就是POSIX/Unix 是如何指定的。

现在,我们仍然在这里看到许多答案,甚至偶尔会公开发布未引用变量的 shell 代码。你会认为人们现在已经学会了。

根据我的经验,主要有 3 类人会省略引用他们的变量:

  • 初学者。这些可以被原谅,因为它是一种完全不直观的语法。我们在这个网站上的职责是教育他们。

  • 健忘的人。

  • 即使经过反复锤击也不相信的人,他们认为Bourne shell 的作者肯定没有打算让我们引用所有变量

如果我们揭露与此类行为相关的风险,也许我们可以说服他们。

如果您忘记引用变量,那么最糟糕的事情是什么。真的有那么糟糕吗?

我们在这里谈论什么样的漏洞?

在什么情况下会出现问题?

shell security bash shell-script quoting

241
推荐指数
3
解决办法
3万
查看次数

允许在 shell 脚本上使用 setuid

setuid权限位告诉Linux与业主,而不是执行者的有效用户ID运行程序:

> cat setuid-test.c

#include <stdio.h>
#include <unistd.h>

int main(int argc, char** argv) {
    printf("%d", geteuid());
    return 0;
}

> gcc -o setuid-test setuid-test.c
> ./setuid-test

1000

> sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
> ./setuid-test

65534
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于可执行文件;shell 脚本忽略 setuid 位:

> cat setuid-test2

#!/bin/bash
id -u

> ./setuid-test2

1000

> sudo chown nobody ./setuid-test2; sudo chmod +s ./setuid-test2
> ./setuid-test2

1000
Run Code Online (Sandbox Code Playgroud)

维基百科

由于安全漏洞的可能性增加,许多操作系统在应用于可执行 shell 脚本时会忽略 setuid 属性。

假设我愿意接受这些风险,有没有办法告诉 Linux 将 shell 脚本上的 setuid …

shell security scripting setuid

223
推荐指数
7
解决办法
18万
查看次数

/sbin/nologin 和 /bin/false 有什么区别

从技术上讲,除非pam设置为检查您的 shell pam_shells,如果您不在shell 上,这两种方法实际上都不能阻止您的登录。在我的系统上,它们的大小甚至不同,所以我怀疑它们实际上做了一些事情。那么有什么区别呢?为什么它们都存在?为什么我要使用一个?

-rwxr-xr-x 1 root root  21K Feb  4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar  2 14:59 /sbin/nologin
Run Code Online (Sandbox Code Playgroud)

shell security login

209
推荐指数
4
解决办法
27万
查看次数

Unix / Linux 中关于恶意软件的神话

我的 Linux 机器是否有可能感染恶意软件?

我没有听说过它发生在我认识的任何人身上,而且我听说过很多次这是不可能的。真的吗?

如果是这样,Linux Anti-Virus(安全)软件是怎么回事?

security malware

142
推荐指数
6
解决办法
2万
查看次数

获得 root 权限的最安全方法是:sudo、su 还是 login?

即使我的非特权用户受到威胁,我也希望 root 帐户安全。

在 Ubuntu 上,默认情况下您只能出于“安全原因”使用 sudo。但是,我不确定它是否比仅在文本模式控制台上使用登录更安全。如果攻击者可以以我的普通用户身份运行代码,那么可能会出错的事情太多了。例如添加别名、向我的 PATH 添加东西、设置 LD_PRELOAD 和 X11 键盘记录器等等。我能看到的唯一优势是超时,所以我永远不会忘记注销。

我对 su 也有同样的疑问,但它甚至没有时间限制。某些操作(尤其是 IO 重定向)对 su 更方便,但在安全方面这似乎更糟。

在文本模式控制台上登录似乎是最安全的。由于它是由 init 启动的,如果攻击者可以控制 PATH 或 LD_PRELOAD,那么他已经是 root。按键事件无法被 X 上运行的程序拦截。我不知道 X 上运行的程序是否可以拦截 [ctrl]+[alt]+[f1](并打开一个看起来像控制台的全屏窗口)或它就像 Windows 上的 [ctrl]+[alt]+[del] 一样安全。除此之外,我看到的唯一问题是没有超时。

所以我错过了什么吗?为什么 Ubuntu 的人决定只允许 sudo?我可以做些什么来提高任何方法的安全性?

SSH呢?传统上 root 不能通过 SSH 登录。但是使用上述逻辑不是最安全的做法:

  • 允许 root 通过 SSH
  • 切换到文本模式
  • 以 root 身份登录
  • ssh 到另一台机器
  • 以 root 身份登录?

security login su sudo privileges

129
推荐指数
3
解决办法
3万
查看次数

shellshock (CVE-2014-6271/7169) 错误是什么时候引入的,完全修复它的补丁是什么?

关于该错误的一些上下文:CVE-2014-6271

Bash 不仅支持将 shell 变量导出,还支持将 shell 函数导出到其他 bash 实例,通过进程环境到(间接)子进程。当前的 bash 版本使用由函数名称命名的环境变量,以及变量值中以“() {”开头的函数定义,以通过环境传播函数定义。该漏洞的出现是因为bash在处理函数定义后没有停止;它会按照函数定义继续解析和执行 shell 命令。例如,环境变量设置

  VAR=() { ignored; }; /bin/id
Run Code Online (Sandbox Code Playgroud)

将环境导入 bash 进程时执行 /bin/id 。

资料来源:http : //seclists.org/oss-sec/2014/q3/650

该错误是什么时候引入的,完全修复它的补丁是什么?(参见CVE-2014-7169

除了 CVE(最初)(3.{0..2} 和 4.{0..3})中提到的易受攻击版本之外,还有哪些易受攻击的版本?

有问题的源代码是否在其他项目中重用?

需要额外的信息。


相关:什么是 env x='() { :;}; 命令' bash 做,为什么不安全?

security bash shellshock

122
推荐指数
2
解决办法
2万
查看次数

如何监控来自我的机器的所有传出请求/连接?

我的机器是一台服务器,所以我想忽略与我的服务器建立的连接(例如,当有人访问我的网站时)。我希望看到只有连接/请求被我的服务器到其他地方做。

我如何看到那些传出连接?

编辑:我是这些类型的新手。我想要做的只是看看除了我的网络应用程序的数据之外,是否从我的服务器发送了任何内容。例如,如果有人访问我的网站,那么显然我的服务器会将数据发送到客户端的浏览器。但是假设我的网络应用程序框架中的某处也有代码将统计数据发送到我不知道的其他地方。我想看看我的服务器将数据发送到的那些地方,如果有的话。这可能不太可能,但假设您决定使用不是您编写的 php 或 nodejs 框架:它可能会在某处发送某种类型的数据。如果是这样,这就是我希望看到的。

command-line networking security shell-script

114
推荐指数
5
解决办法
39万
查看次数

Vim 对复制粘贴攻击免疫吗?

永远不应该从 web 粘贴到你的终端。相反,您应该粘贴到文本编辑器,检查命令,然后粘贴到终端。

没关系,但是如果 Vim 是我的文本编辑器呢?是否可以伪造将 Vim 切换到命令模式并执行恶意命令的内容?

security vim special-characters clipboard escape-characters

113
推荐指数
1
解决办法
9863
查看次数

以明文密码作为参数的SSH登录?

我需要登录到我在运行 Ubuntu 的远程主机上创建的用户。我无法使用ssh密钥,因为 ssh 登录将通过在我无法访问的服务器中运行的 bash 脚本进行(想想像 Bamboo 这样的持续集成服务器)。

我知道这不是一个理想的做法,但我想要么将远程主机设置为不要求输入密码,要么能够使用类似的方式登录ssh --passsword foobar user@host,就像 MySQL 允许您进行登录那样。

我没有找到这个man ssh,我对解决这个问题的任何替代方法持开放态度。

linux security login ssh ubuntu

112
推荐指数
3
解决办法
58万
查看次数

如何在命令行上创建 SHA512 密码哈希

在 Linux 中,我可以使用sha1pass mypassword. 是否有类似的命令行工具可以让我创建sha512哈希?对于同样的问题BcryptPBKDF2

security password encryption hashsum

107
推荐指数
5
解决办法
30万
查看次数