暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

快速加密Shell脚本

数据库驾驶舱 2024-04-25
182


背景:

在企业和开发环境中,经常需要通过Shell脚本自动化管理任务,包括数据库操作。这些脚本可能会包含敏感信息如数据库登录凭证,如果这些脚本被未授权的人访问,可能会导致安全风险。因此,保护这些脚本中的敏感信息是至关重要的。

正文:

为了增强Shell脚本的安全性,可以使用SHC(Shell Script Compiler)工具。SHC是一种将Shell脚本编译成C源代码,再编译为可执行的二进制文件的工具。这一处理不仅可以防止敏感信息泄露,还能防止脚本被轻易修改。然而,这种编译实际上不是将脚本转换成真正的二进制代码,而是将脚本加密后附加到一个解释器上。这使得 SHC 编译的文件仍然可以被反编译或解密。

尽管如之前所述,这个工具提供的加密容易被破解,但它依然是一个快速隐藏脚本内容的选项。

下面以Oracle数据库的管理脚本为例,管理员可能需要编写脚本来自动执行数据库查询或其他操作。考虑下面的脚本 scott.sh,它连接到数据库并执行一个查询:

#!/bin/bash

sqlplus -s /nolog<<EOF
conn scott/tiger
set line 200 pages 2000
select * from emp;
exit;
EOF


编译为二进制文件:

  1. 安装sch

# Ubuntu/Debian
sudo apt-get install shc

# CentOS/RedHat
sudo yum install shc

# Fedora
sudo dnf install shc

  1. 使用shc,可以将上述脚本编译成二进制文件,从而隐藏内部逻辑和凭证信息:

[oracle@oradb ~]$ shc -f scott.sh -o scott
[oracle@oradb ~]$ ll scott*
-rwxrwxr-x 1 oracle oinstall 11296 Apr 25 18:00 scott
-rw-r--r-- 1 oracle oinstall   167 Apr 25 14:28 scott.sh
-rw-r--r-- 1 oracle oinstall 18151 Apr 25 18:00 scott.sh.x.c
[oracle@oradb ~]$ file scott
scott: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=cdd9e20dc6b3fa250571082eaf62cdd6afeaeb68, stripped

scott.sh.x.c

这个文件是 shc 生成的 C 源代码文件,其内容是对原始 Shell 脚本的加密表示。shc 使用这个 C 文件作为一个中间步骤,通过将其编译成可执行文件来“隐藏”Shell 脚本的内容。这个 C 文件包含了:

一个将 Shell 脚本内容加密的字符数组。
一个在运行时解密并执行这个加密脚本的程序。
该文件对于了解 shc 的工作原理很有教育意义,但通常在部署时不需要它。

二进制文件 scott

这个文件是编译后的可执行文件,它可以在不需要原始 Shell 脚本的情况下运行。尽管这个文件以二进制形式存在,它本质上并不是一个从头编写的机器码程序,而是一个封装了原始脚本的 Shell 脚本解释器。因此,它的安全性主要取决于 shc 的加密强度。

  1. 执行生成的二进制文件:

[oracle@oradb ~]$ ./scott

     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    20
      7499 ALLEN      SALESMAN        7698 1981-02-20 00:00:00       1600        300         30
      7521 WARD       SALESMAN        7698 1981-02-22 00:00:00       1250        500         30
      7566 JONES      MANAGER         7839 1981-04-02 00:00:00       2975                    20
      7654 MARTIN     SALESMAN        7698 1981-09-28 00:00:00       1250       1400         30
      7698 BLAKE      MANAGER         7839 1981-05-01 00:00:00       2850                    30
      7782 CLARK      MANAGER         7839 1981-06-09 00:00:00       2450                    10
      7788 SCOTT      ANALYST         7566 1987-04-19 00:00:00       3000                    20
      7839 KING       PRESIDENT            1981-11-17 00:00:00       5000                    10
      7844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         30
      7876 ADAMS      CLERK           7788 1987-05-23 00:00:00       1100                    20
      7900 JAMES      CLERK           7698 1981-12-03 00:00:00        950                    30
      7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000                    20
      7934 MILLER     CLERK           7782 1982-01-23 00:00:00       1300                    10

执行该二进制文件将连接到数据库并显示结果,就如同直接运行脚本一样,但关键差别在于脚本的内容不再以文本形式存储,减少了泄露风险。

总结:

通过使用SHC编译Shell脚本到二进制文件,我们不仅保护了脚本中包含的敏感信息,如数据库凭证,还增加了脚本的安全性,防止未授权修改。这为处理敏感操作提供了一个更安全的方法,是数据库管理员和系统管理员保护自动化脚本的有效手段。定期更新和监控这些二进制文件的安全状态,以及保持SHC工具的更新,将进一步加强安全防护。

「欢迎关注我们的公众号,获取更多技术分享与经验交流。」

文章转载自数据库驾驶舱,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论