为了账号安全,请及时绑定邮箱和手机立即绑定

Go[lang] 二进制文件上的 SetGID/SetUID 是否安全?

Go[lang] 二进制文件上的 SetGID/SetUID 是否安全?

Go
BIG阳 2021-10-11 10:34:20
我写了一个简单的 走 程序使用 YAML 和 MySQL 驱动程序,目的是提供一个简单的实用程序来更新数据库,而不会将用户名和密码凭据暴露给执行程序的用户。(我很清楚我也可以用 Python 或其他一些脚本语言编写它并使用 须藤 但我想在这里尝试不同的方法,为我自己的启迪)。建立程序后,我已经使用chgrp sys dbcreds.yaml && chmod 0640 dbcreds.yaml和chgrp sys ./myprog && chmod g+s ./myprog(作为root)......,一切似乎工作。(我还测试了在 setGID 步骤之前访问被拒绝,因为它应该是)。我还进行了测试strace,结果导致权限被拒绝(应该如此)。(为了好玩,我也运行ltrace -S了它;这是在 Linux 下。正如预期的那样,我没有看到很多正常的 libc 函数调用......通过我很惊讶地看到了一些pthread_....()和一个malloc()调用在那个清单中。我猜 GO 运行时确实链接到了一些系统库函数)。我的问题:这安全吗?是否有任何已知的方法可以导致 Go 程序(如下)在读取这些私有凭据后进行核心转储或公开其内存?在我阅读了我的凭据后,有没有办法删除我的 SGID 权限?是否有针对 Go 二进制文件的 SUID/SGID 漏洞利用示例?有一个更好的方法吗?有没有办法主动防止核心转储或确保敏感数据(凭据)不会在核心转储中?另一个注意事项:我发现gopkg.in/yaml.v2语义有点令人不安。在我的 YAML 文件中,我有类似的内容:---user mepw mypassword但是在我的代码中,我必须使用User和Pw(大写)而不是像我预期的那样使用小写。我认为这是Goyaml的作者的一个实施决定。是这样吗?#!gopackage mainimport (    "fmt"    "database/sql"    _ "github.com/go-sql-driver/mysql"    "gopkg.in/yaml.v2"    "io/ioutil"    "os"    "strconv")type Creds struct {    User string    Pw   string}func main() {    filename := "./dbcreds.yaml"    var creds Creds    conf, err := ioutil.ReadFile(filename)    if err != nil {        panic(err)    }    err = yaml.Unmarshal(conf, &creds)    if err != nil {        panic(err)    }    var arg1 int    arg1, err = strconv.Atoi(os.Args[1])    if err != nil {        panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic    }    fmt.Println("arg1: ", arg1, "\n")    dsn := fmt.Sprintf("%s:%s@/mydatabase", creds.User, creds.Pw)    db, err := sql.Open("mysql", dsn)    if err != nil {        panic(err.Error())    }    defer db.Close()    err = db.Ping()    if err != nil {        panic(err.Error())    }    stmtOut, err := db.Prepare("SELECT quant FROM c WHERE id >= ?")    if err != nil {        panic(err.Error())    }    defer stmtOut.Close()    rows, err := stmtOut.Query(arg1)    if err != nil {        panic(err.Error())    }    defer rows.Close()
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信